{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Using Python Data Science packages to manipulate and visualize data\n",
"\n",
"In this Jupyter notebook we will:\n",
"- Go over several popular Python packages used for Data Science\n",
"- Go through the example of analyzing avocado prices using these popular Python Data Science packages\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Part 1: An overview of popular Python Data Science packages \n",
"\n",
"Let's very briefly discuss several popular Python Data Science packages. The packages we will discuss are:\n",
"- NumPy\n",
"- pandas\n",
"- Matplotlib\n",
"- seaborn\n",
"\n",
"We can discuss additional Python packages, particular for modeling and prediction, later in the workshop.\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Part 1.1: NumPy\n",
"\n",
"[NumPy](https://numpy.org/) is a library that adds support for large, multi-dimensional arrays and matrices, along with a large collection of high-level mathematical functions to operate on these arrays. In many ways, it's functionality is similar to MATLAB's basic functionality. \n",
"\n",
"The core data structure of NumPy is the `ndarray`. ndarrays are similar to Python lists but all elements in an ndarray must of the same type; e.g., all elements are numbers, or all elements are strings, etc.\n",
"\n",
"Let's create a few ndarrays below!\n"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[2 4 6]\n",
"[0 1 2 3 4 5 6 7 8 9]\n"
]
}
],
"source": [
"import numpy as np \n",
"\n",
"x = np.array([1, 2, 3])\n",
"print(2 * x)\n",
"\n",
"print(np.arange(10))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Part 1.2: pandas\n",
"\n",
"[pandas](https://pandas.pydata.org/) is a package for data manipulation and analysis that has two main data structures:\n",
"\n",
"1. `Series`: One-dimensional ndarray with an index for each value. They are similar to a named vector in R.\n",
"\n",
"2. `DataFrame`: Two-dimensional, size-mutable, potentially heterogeneous tabular data. They are similar to an R data frame. DataFrames can also be thought of as multiple Series of the same length with the same index, or as muliple ndarrays with the same index.\n",
"\n",
"Here are some documents that show translations between Data 8 datascience package and pandas\n",
"- [googledoc I created](https://docs.google.com/spreadsheets/d/1GeghI6Md4QjJcugEEa4a_N_jQNGZRdxqFrynvJgq1CM/edit#gid=0)\n",
"- [babypandas documentation](https://pypi.org/project/babypandas/)\n",
"\n",
"Let's load our avocado data as a DataFrame and look at the first three rows using the `df.head(3)` method.\n"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
Date
\n",
"
AveragePrice
\n",
"
Total Volume
\n",
"
4046
\n",
"
4225
\n",
"
4770
\n",
"
Total Bags
\n",
"
Small Bags
\n",
"
Large Bags
\n",
"
XLarge Bags
\n",
"
type
\n",
"
year
\n",
"
region
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
12/27/2015
\n",
"
1.33
\n",
"
64236.62
\n",
"
1036.74
\n",
"
54454.85
\n",
"
48.16
\n",
"
8696.87
\n",
"
8603.62
\n",
"
93.25
\n",
"
0.0
\n",
"
conventional
\n",
"
2015
\n",
"
Albany
\n",
"
\n",
"
\n",
"
1
\n",
"
12/20/2015
\n",
"
1.35
\n",
"
54876.98
\n",
"
674.28
\n",
"
44638.81
\n",
"
58.33
\n",
"
9505.56
\n",
"
9408.07
\n",
"
97.49
\n",
"
0.0
\n",
"
conventional
\n",
"
2015
\n",
"
Albany
\n",
"
\n",
"
\n",
"
2
\n",
"
12/13/2015
\n",
"
0.93
\n",
"
118220.22
\n",
"
794.70
\n",
"
109149.67
\n",
"
130.50
\n",
"
8145.35
\n",
"
8042.21
\n",
"
103.14
\n",
"
0.0
\n",
"
conventional
\n",
"
2015
\n",
"
Albany
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Date AveragePrice Total Volume 4046 4225 4770 \\\n",
"0 12/27/2015 1.33 64236.62 1036.74 54454.85 48.16 \n",
"1 12/20/2015 1.35 54876.98 674.28 44638.81 58.33 \n",
"2 12/13/2015 0.93 118220.22 794.70 109149.67 130.50 \n",
"\n",
" Total Bags Small Bags Large Bags XLarge Bags type year region \n",
"0 8696.87 8603.62 93.25 0.0 conventional 2015 Albany \n",
"1 9505.56 9408.07 97.49 0.0 conventional 2015 Albany \n",
"2 8145.35 8042.21 103.14 0.0 conventional 2015 Albany "
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"\n",
"avocado = pd.read_csv(\"avocado.csv\")\n",
"avocado.head(3)\n",
"\n",
"# More complex data manipulation will be discussed more below\n",
"#avocado.groupby(\"type\").mean().reset_index()\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Part 1.3: Matplotlib\n",
"\n",
"[Matplotlib](https://matplotlib.org/) is a plotting library. Each plot has a figure and a number of different subplots which are called \"axes\". Matplotlib is based on MATLAB's plotting syntax and it can be roughly thought of as being similar to base R's graphics. \n",
"\n",
"Matplotlib has two interfaces for plotting:\n",
"\n",
"1. A \"pylab\" procedural interface based on a state machine that closely resembles MATLAB. Updates are made to the most recent axis plotted on.\n",
"\n",
"2. An object-oriented API. Updates are made to the axis object that is selected. \n",
"\n",
"Generally the objected oriented interface is preferred although they are rather similar (a few of the functions/methods are named slightly differently)\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"
"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"\n",
"%matplotlib inline\n",
"\n",
"# using the pylab interface\n",
"plt.subplot(1, 2, 1)\n",
"plt.plot([1,3,10]);\n",
"plt.subplot(1, 2, 2)\n",
"plt.plot([2,6,12]);\n",
"\n",
"\n",
"#using the object oriented interface\n",
"fig, ax = plt.subplots(1, 2)\n",
"ax[0].plot([1, 3, 10]);\n",
"ax[1].plot([2,6,12]);\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Part 1.4: seaborn\n",
"\n",
"seaborn is a visualization library built off Matplotlib, but it provides a higher level interface that uses pandas DataFrames. One can think of it as being somewhat similar to ggplot. \n",
"\n",
"There are \"axes-level\" functions that plot on a single axis and \"figure-level\" functions that plot across multiple axes. Figure level plots are grouped based on the types of variables being plotted; e.g., a single quantitative variable, two quantitative variables, etc. The image below shows different categories of plots that can be created in seaborn.\n",
"\n",
"\n",
"\n",
"Note: to use the seaborn functions below you will have to use seaborn version 0.11 or higher which might require updating your packages in conda. This can be done using: \n",
"- conda activate facwavdev\n",
"- conda update seaborn\n"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"
"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"import seaborn as sns\n",
"penguins = sns.load_dataset(\"penguins\") \n",
"\n",
"# axes-level plots\n",
"\n",
"# create two subplots and set the figure size\n",
"plt.rcParams[\"figure.figsize\"] = (12, 5)\n",
"fig, ax = plt.subplots(1, 2)\n",
"\n",
"# create two axes-level plots of a distribution of a single quantitative variable\n",
"sns.histplot(data=penguins, ax = ax[0], x=\"flipper_length_mm\", hue=\"species\", multiple=\"stack\");\n",
"sns.kdeplot(data=penguins, ax = ax[1], x=\"flipper_length_mm\", hue=\"species\", multiple=\"stack\");\n",
"\n",
"\n",
"# create a figure-level plot of a distribution of a single quantitative variable\n",
"sns.displot(data=penguins, x=\"flipper_length_mm\", \n",
" hue=\"species\", multiple=\"stack\", kind=\"kde\");\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Part 2: Revisiting manipulating and visualizing the avocado data\n",
"\n",
"Let's revisit manipulating and visualizing the avocado data but using popular Python Data Science packages. \n",
"\n",
"Below we reload these packages, although not really necessary if one has loaded them already. It is recommended that all packages are loaded at the top of a Jupyter notebook.\n"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"# importing packages that we will use \n",
"import numpy as np\n",
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"\n",
"# make sure we can display figures in the Jupyter notebook\n",
"%matplotlib inline\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Part 2.1: Loading the avocado data\n",
"\n",
"Let's reload the avocado data as a pandas DataFrame using the `pd.read_csv(\"csv_or_url\")` method. We will also convert the `Date` column to a `datetime` data type. \n",
"\n",
"**Exercise 2.1**: Please show the first 5 rows of the avocado DataFrame using `df.head(5)` method.\n"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
Date
\n",
"
AveragePrice
\n",
"
Total Volume
\n",
"
4046
\n",
"
4225
\n",
"
4770
\n",
"
Total Bags
\n",
"
Small Bags
\n",
"
Large Bags
\n",
"
XLarge Bags
\n",
"
type
\n",
"
year
\n",
"
region
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
2015-12-27
\n",
"
1.33
\n",
"
64236.62
\n",
"
1036.74
\n",
"
54454.85
\n",
"
48.16
\n",
"
8696.87
\n",
"
8603.62
\n",
"
93.25
\n",
"
0.0
\n",
"
conventional
\n",
"
2015
\n",
"
Albany
\n",
"
\n",
"
\n",
"
1
\n",
"
2015-12-20
\n",
"
1.35
\n",
"
54876.98
\n",
"
674.28
\n",
"
44638.81
\n",
"
58.33
\n",
"
9505.56
\n",
"
9408.07
\n",
"
97.49
\n",
"
0.0
\n",
"
conventional
\n",
"
2015
\n",
"
Albany
\n",
"
\n",
"
\n",
"
2
\n",
"
2015-12-13
\n",
"
0.93
\n",
"
118220.22
\n",
"
794.70
\n",
"
109149.67
\n",
"
130.50
\n",
"
8145.35
\n",
"
8042.21
\n",
"
103.14
\n",
"
0.0
\n",
"
conventional
\n",
"
2015
\n",
"
Albany
\n",
"
\n",
"
\n",
"
3
\n",
"
2015-12-06
\n",
"
1.08
\n",
"
78992.15
\n",
"
1132.00
\n",
"
71976.41
\n",
"
72.58
\n",
"
5811.16
\n",
"
5677.40
\n",
"
133.76
\n",
"
0.0
\n",
"
conventional
\n",
"
2015
\n",
"
Albany
\n",
"
\n",
"
\n",
"
4
\n",
"
2015-11-29
\n",
"
1.28
\n",
"
51039.60
\n",
"
941.48
\n",
"
43838.39
\n",
"
75.78
\n",
"
6183.95
\n",
"
5986.26
\n",
"
197.69
\n",
"
0.0
\n",
"
conventional
\n",
"
2015
\n",
"
Albany
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Date AveragePrice Total Volume 4046 4225 4770 \\\n",
"0 2015-12-27 1.33 64236.62 1036.74 54454.85 48.16 \n",
"1 2015-12-20 1.35 54876.98 674.28 44638.81 58.33 \n",
"2 2015-12-13 0.93 118220.22 794.70 109149.67 130.50 \n",
"3 2015-12-06 1.08 78992.15 1132.00 71976.41 72.58 \n",
"4 2015-11-29 1.28 51039.60 941.48 43838.39 75.78 \n",
"\n",
" Total Bags Small Bags Large Bags XLarge Bags type year region \n",
"0 8696.87 8603.62 93.25 0.0 conventional 2015 Albany \n",
"1 9505.56 9408.07 97.49 0.0 conventional 2015 Albany \n",
"2 8145.35 8042.21 103.14 0.0 conventional 2015 Albany \n",
"3 5811.16 5677.40 133.76 0.0 conventional 2015 Albany \n",
"4 6183.95 5986.26 197.69 0.0 conventional 2015 Albany "
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"avocado = pd.read_csv(\"avocado.csv\")\n",
"\n",
"# convert the Date column to a \"datatime\" data type\n",
"avocado['Date'] = pd.to_datetime(avocado['Date'])\n",
"\n",
"# Ignore this (this will remove a warning later that arises in later exercises when plotting with dates)\n",
"from pandas.plotting import register_matplotlib_converters\n",
"register_matplotlib_converters()\n",
"\n",
"\n",
"# show the first 5 rows of the avocado DataFrame\n",
"avocado.head(5)\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Part 2.2: Relabeling columns\n",
"\n",
"Let's rename the `4046`, `4225` and `4770` columns. The code below does this using a `df.rename()` method which takes a dictionary of elements to describe how the columns should be renamed. A Python dictionary is a data structure that enables you to look up a value based on a key that is supplied. \n",
"\n",
"If you would like to know more about Python dictionary let me know and we can discuss them!\n"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
Date
\n",
"
AveragePrice
\n",
"
Total Volume
\n",
"
sold_nonorg_sm
\n",
"
sold_nonorg_l
\n",
"
sold_nonorg_xl
\n",
"
Total Bags
\n",
"
Small Bags
\n",
"
Large Bags
\n",
"
XLarge Bags
\n",
"
type
\n",
"
year
\n",
"
region
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
2015-12-27
\n",
"
1.33
\n",
"
64236.62
\n",
"
1036.74
\n",
"
54454.85
\n",
"
48.16
\n",
"
8696.87
\n",
"
8603.62
\n",
"
93.25
\n",
"
0.0
\n",
"
conventional
\n",
"
2015
\n",
"
Albany
\n",
"
\n",
"
\n",
"
1
\n",
"
2015-12-20
\n",
"
1.35
\n",
"
54876.98
\n",
"
674.28
\n",
"
44638.81
\n",
"
58.33
\n",
"
9505.56
\n",
"
9408.07
\n",
"
97.49
\n",
"
0.0
\n",
"
conventional
\n",
"
2015
\n",
"
Albany
\n",
"
\n",
"
\n",
"
2
\n",
"
2015-12-13
\n",
"
0.93
\n",
"
118220.22
\n",
"
794.70
\n",
"
109149.67
\n",
"
130.50
\n",
"
8145.35
\n",
"
8042.21
\n",
"
103.14
\n",
"
0.0
\n",
"
conventional
\n",
"
2015
\n",
"
Albany
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Date AveragePrice Total Volume sold_nonorg_sm sold_nonorg_l \\\n",
"0 2015-12-27 1.33 64236.62 1036.74 54454.85 \n",
"1 2015-12-20 1.35 54876.98 674.28 44638.81 \n",
"2 2015-12-13 0.93 118220.22 794.70 109149.67 \n",
"\n",
" sold_nonorg_xl Total Bags Small Bags Large Bags XLarge Bags \\\n",
"0 48.16 8696.87 8603.62 93.25 0.0 \n",
"1 58.33 9505.56 9408.07 97.49 0.0 \n",
"2 130.50 8145.35 8042.21 103.14 0.0 \n",
"\n",
" type year region \n",
"0 conventional 2015 Albany \n",
"1 conventional 2015 Albany \n",
"2 conventional 2015 Albany "
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"avocado2 = avocado.copy()\n",
"\n",
"# rename using a dictionary - requires knowledge of a dictionary\n",
"avocado2.rename(columns = {\"4046\": \"sold_nonorg_sm\", \n",
" \"4225\": \"sold_nonorg_l\",\n",
" \"4770\": \"sold_nonorg_xl\"}, \n",
" inplace = True)\n",
"\n",
"avocado2.head(3)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Part 2.3: Reducing (filtering) the data to a smaller number of rows\n",
"\n",
"To filter data using pandas requires creating a \"Boolean mask\". We do this by creating a Series of Boolean values (True's and False's) that meet particular criteria. Once we have this mask we can use it to select only the columns that are listed as True (this is similar to how one can filter rows of an R data frame in base R). \n",
"\n",
"**Exercise 2.3**: The code below filters the avocado data to get only the data from the Northeast. Please use the `df.shape` property to see how many rows this DataFrame has. Also play around with the code to explore filtering the data in other ways.\n"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0 False\n",
"1 False\n",
"2 False\n",
"3 False\n",
"4 False\n",
" ... \n",
"18244 False\n",
"18245 False\n",
"18246 False\n",
"18247 False\n",
"18248 False\n",
"Name: region, Length: 18249, dtype: bool\n",
"338\n"
]
}
],
"source": [
"\n",
"# print the boolean mask\n",
"the_mask = avocado2.region == \"Northeast\"\n",
"\n",
"print(the_mask)\n",
"\n",
"# filter the data based on a boolean mask\n",
"avocado3 = avocado2[the_mask]\n",
"#avocado3 = avocado2[avocado2.region == \"Northeast\"]\n",
"\n",
"# print how many rows the \n",
"print(avocado3.shape[0])\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Part 2.4: Selecting a subset of the columns\n",
"\n",
"We can select a subset of columns using the syntax `df[[\"col1\", \"col2\", \"col3\"]]`; i.e., we pass a list of columns we would like to select into our data frame `df[]`. \n",
"\n",
"**Exercise 2.4**: Create a DataFrame `avocado4` that only has only the columns:\n",
"- Date\n",
"- AveragePrice\n",
"- Total Volume\n",
"- type"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
Date
\n",
"
AveragePrice
\n",
"
Total Volume
\n",
"
type
\n",
"
\n",
" \n",
" \n",
"
\n",
"
1508
\n",
"
2015-12-27
\n",
"
1.20
\n",
"
3156360.20
\n",
"
conventional
\n",
"
\n",
"
\n",
"
1509
\n",
"
2015-12-20
\n",
"
1.20
\n",
"
3190120.04
\n",
"
conventional
\n",
"
\n",
"
\n",
"
1510
\n",
"
2015-12-13
\n",
"
1.09
\n",
"
3696551.52
\n",
"
conventional
\n",
"
\n",
"
\n",
"
1511
\n",
"
2015-12-06
\n",
"
1.14
\n",
"
3218494.55
\n",
"
conventional
\n",
"
\n",
"
\n",
"
1512
\n",
"
2015-11-29
\n",
"
1.22
\n",
"
2593780.51
\n",
"
conventional
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Date AveragePrice Total Volume type\n",
"1508 2015-12-27 1.20 3156360.20 conventional\n",
"1509 2015-12-20 1.20 3190120.04 conventional\n",
"1510 2015-12-13 1.09 3696551.52 conventional\n",
"1511 2015-12-06 1.14 3218494.55 conventional\n",
"1512 2015-11-29 1.22 2593780.51 conventional"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"\n",
"# select with a list\n",
"avocado4 = avocado3[[\"Date\", \"AveragePrice\", \"Total Volume\", \"type\"]]\n",
"\n",
"avocado4.head(5)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Part 2.5: Creating separate tables for conventional and organic avocados (can skip)\n",
"\n",
"To gain more practice with filitering data in pandas, let's create separate DataFrames that have the conventional and organic avocados.\n",
"\n",
"**Exercise 2.5**: Please create a DataFrame called `conventional` that only has data from conventional avocados, and a DataFrame called `organic` that only has data from organic avocados. Then print the number of rows in each DataFrame.\n"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"169\n",
"169\n"
]
}
],
"source": [
"conventional = avocado4[avocado4.type == \"conventional\"]\n",
"organic = avocado4[avocado4.type == \"organic\"]\n",
"\n",
"print(conventional.shape[0])\n",
"print(organic.shape[0])\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Part 2.6a: Supply and demand visualization using Matplotlib\n",
"\n",
"Let's create a scatter plot of the volume of avocados sold as a function of their price using Matplotlib. To do this we can use the `plt.scatter(\"x_col\", \"y_col\")` function. \n",
"\n",
"**Exercise 2.6**: Please go ahead and create the scatter plot. You can also use the `plt.xlabel(\"label\")` and `plt.ylabel(\"label\")` to add better labels to the axes.\n"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"
"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# plotting using Matplotlib pylab interface\n",
"plt.scatter(conventional[\"AveragePrice\"], conventional[\"Total Volume\"]);\n",
"plt.xlabel(\"Price\");\n",
"plt.ylabel(\"Volume\");\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Part 2.6a: Supply and demand visualization using seaborn\n",
"\n",
"Let's also create a scatter plot of the volume of avocados sold as a function of their price using seaborn. To do this we can use the `sns.relplot(data = df, x = \"x_col\", y = \"y_col\")`.\n",
"\n",
"**Exercise 2.6**: Please go ahead ans create the scatter plot. Create two versions of this plot that have one additonal argument which is either:\n",
"- `col = \"type\"` \n",
"- `hue = \"type\"`\n"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"
"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"\n",
"# using seaborn to create a facet plot of both conventional and organic\n",
"sns.relplot(data = avocado4, x = \"AveragePrice\", y = \"Total Volume\", col = \"type\");\n",
"\n",
"# using seaborn to create a plot of both conventional and organic distinguished by color\n",
"sns.relplot(data = avocado4, x = \"AveragePrice\", y = \"Total Volume\", hue = \"type\");\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Part 2.7: Joining Tables (can skip)\n",
"\n",
"In order to practice joining DataFrames, let's join the information about conventional and organic avocados into a single wide DataFrame. \n",
"\n",
"To join to DataFrames together we can use the `df1.merge(df2, on = 'Date', suffix = ('_left_suffix, '_right_shuffix')` method. Where:\n",
"- `df1` is the first DataFrame we want to join\n",
"- `df2` is the second DataFrame we want to join \n",
"- `on` is the name of a column that both tables have in common that we want to join on\n",
"- `suffix` is an optional tuple that specifies a string to append to the names of the left and right columns\n",
"\n",
"\n",
"Note: different types of joins are possible, see `? df.merge` for more details.\n",
"\n",
"**Exercise 2.7**: Please create an variable `wide_data` that has the data from `conventional` DataFrame joined with the `organic` DataFrame. Then print the first 5 rows of this DataFrame. \n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
Date
\n",
"
AveragePrice_conventional
\n",
"
Total Volume_conventional
\n",
"
type_conventional
\n",
"
AveragePrice_organic
\n",
"
Total Volume_organic
\n",
"
type_organic
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
2015-12-27
\n",
"
1.20
\n",
"
3156360.20
\n",
"
conventional
\n",
"
1.70
\n",
"
75884.69
\n",
"
organic
\n",
"
\n",
"
\n",
"
1
\n",
"
2015-12-20
\n",
"
1.20
\n",
"
3190120.04
\n",
"
conventional
\n",
"
1.77
\n",
"
73826.41
\n",
"
organic
\n",
"
\n",
"
\n",
"
2
\n",
"
2015-12-13
\n",
"
1.09
\n",
"
3696551.52
\n",
"
conventional
\n",
"
1.80
\n",
"
76466.85
\n",
"
organic
\n",
"
\n",
"
\n",
"
3
\n",
"
2015-12-06
\n",
"
1.14
\n",
"
3218494.55
\n",
"
conventional
\n",
"
1.53
\n",
"
67245.25
\n",
"
organic
\n",
"
\n",
"
\n",
"
4
\n",
"
2015-11-29
\n",
"
1.22
\n",
"
2593780.51
\n",
"
conventional
\n",
"
1.59
\n",
"
48901.36
\n",
"
organic
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Date AveragePrice_conventional Total Volume_conventional \\\n",
"0 2015-12-27 1.20 3156360.20 \n",
"1 2015-12-20 1.20 3190120.04 \n",
"2 2015-12-13 1.09 3696551.52 \n",
"3 2015-12-06 1.14 3218494.55 \n",
"4 2015-11-29 1.22 2593780.51 \n",
"\n",
" type_conventional AveragePrice_organic Total Volume_organic type_organic \n",
"0 conventional 1.70 75884.69 organic \n",
"1 conventional 1.77 73826.41 organic \n",
"2 conventional 1.80 76466.85 organic \n",
"3 conventional 1.53 67245.25 organic \n",
"4 conventional 1.59 48901.36 organic "
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"wide_data = conventional.merge(organic, on = 'Date', suffixes = ('_conventional', '_organic'))\n",
"\n",
"wide_data.head(5)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Part 2.8: Are organic avocados really more expensive? \n",
"\n",
"Now we are ready to again address whether organic avocados are really more expensive and by how much! Let's start addressing this question by visualizing the data and overlapping histograms using seaborn.\n",
"\n",
"**Exercise 2.8**: Please use the `sns.displot(data = df, x = \"x_col\", hue = \"hue_col\", kind = \"plot_type\")` method to plot overlapping kernel density estimates of the average avocado price where:\n",
"\n",
"- `df` is the data frame you want to plot the data from\n",
"- `\"x_col\"` is the name of the data column you want to plot\n",
"- `\"hue_col\"` is the name of the column that specifies the type of avocado \n",
"- `\"plot_type\"` should be set to the string \"kde\" to plot a kernel density estimate\n"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"
"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"\n",
"sns.displot(data = avocado4, x=\"AveragePrice\", \n",
" hue=\"type\", kind=\"kde\");\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Part 2.9: Are organic avocados really more expensive? Additional visualizations!\n",
"\n",
"Let's use seaborn to create some additional visualizations comparing conventional and organic avocados. \n",
"\n",
"**Exercise 2.9**: The code below uses `sns.catplot()` function to create a stripchart of the data for the conventional and organic avocado prices. Please create versions of the plot that plot the same data but that create different plots by setting the `kind` argument to the following values:\n",
"\n",
"- `\"box\"` to create a boxplot\n",
"- `\"swarm\"` to create a swarmplot\n",
"- `\"violin\"` to create a violin plot\n",
"- `\"point\"` to create a single connected point at the category means\n",
"- `\"bar\"` to create a dynamite plot\n",
"\n",
"You can also use `? sns.catplot` to see more options. Which type of plot do you think looks best? \n"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"
"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"\n",
"# default kind is stripplot\n",
"sns.catplot(data = avocado4, x = \"type\", y = \"AveragePrice\", kind = \"strip\")\n",
"\n",
"# other options\n",
"sns.catplot(data = avocado4, x = \"type\", y = \"AveragePrice\", kind = \"box\");\n",
"sns.catplot(data = avocado4, x = \"type\", y = \"AveragePrice\", kind = \"swarm\");\n",
"sns.catplot(data = avocado4, x = \"type\", y = \"AveragePrice\", kind = \"violin\");\n",
"sns.catplot(data = avocado4, x = \"type\", y = \"AveragePrice\", kind = \"point\");\n",
"sns.catplot(data = avocado4, x = \"type\", y = \"AveragePrice\", kind = \"bar\");\n",
"\n",
"# which is best? \n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Part 2.10: Getting the difference in conventional and organic prices for each date (can skip)\n",
"\n",
"Another way we can assess whether organic avocados are more expensive than conventional avocados is to compare their prices on each date. \n",
"\n",
"To examine this in pandas, we can pull a Series out of our DataFrame using the syntax: `my_series = df[\"colum_name\"]`. If we have two Series with the same index values in `my_series1` and `my_series2`, then we can create an Series that has the differences between each index value using `diff_series = my_series1 - my_series2`.\n",
"\n",
"\n",
"**Exercise 2.10**: Please complete the following steps to create a Series called `price_difference` that has the difference in prices of organic and conventional avocados for each date:\n",
"\n",
"1. Extract a Series from the `wide_data` DataFrame that has the prices of organic avocados and store it in a variable called `organic_array`. \n",
"2. Extract a Series from the `wide_data` DataFrame that has the prices of conventional avocados and store it in a variable called `conventional_array`. \n",
"3. Create a variable called `price_difference` that is a Series that has the difference in prices between the organic and conventional avocados.\n",
"4. Use the `min()` and `max()` functions to find what the minimum and maximum price differences are. Does this provide evidence that organic avocados are always more expensive? \n"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.010000000000000009\n",
"0.9900000000000002\n"
]
}
],
"source": [
"\n",
"# these are Series - could use the to_numpy() method to convert them to NumPy arrays but not needed\n",
"organic_array = wide_data['AveragePrice_organic']\n",
"conventional_array = wide_data['AveragePrice_conventional'] \n",
"\n",
"# can subtract two Series that have the same Indexes \n",
"price_differences = organic_array - conventional_array\n",
"\n",
"\n",
"print(min(price_differences))\n",
"print(max(price_differences))\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Part 2.11: Adding a column that has the difference in organic and conventional prices our wide DataFrame (can skip)\n",
"\n",
"Now that we have a Series of price differences, we can add these price differences back as a column to our wide data table. To add an Series to a DataFrame, we can use `df[\"new_col_name\"] = series_to_add`; note: the `series_to_add` needs to have the same number of elements as the number of rows in `df`.\n",
"\n",
"**Exercise 2.11**: Please add a new column called `Price difference` to the `wide_data` DataFrame which has the difference in organic and conventional avocado prices. Once you have added this column, using the `df.head(5)` to see the first 5 rows of the DataFrame.\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
Date
\n",
"
AveragePrice_conventional
\n",
"
Total Volume_conventional
\n",
"
type_conventional
\n",
"
AveragePrice_organic
\n",
"
Total Volume_organic
\n",
"
type_organic
\n",
"
Price difference
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
2015-12-27
\n",
"
1.20
\n",
"
3156360.20
\n",
"
conventional
\n",
"
1.70
\n",
"
75884.69
\n",
"
organic
\n",
"
0.50
\n",
"
\n",
"
\n",
"
1
\n",
"
2015-12-20
\n",
"
1.20
\n",
"
3190120.04
\n",
"
conventional
\n",
"
1.77
\n",
"
73826.41
\n",
"
organic
\n",
"
0.57
\n",
"
\n",
"
\n",
"
2
\n",
"
2015-12-13
\n",
"
1.09
\n",
"
3696551.52
\n",
"
conventional
\n",
"
1.80
\n",
"
76466.85
\n",
"
organic
\n",
"
0.71
\n",
"
\n",
"
\n",
"
3
\n",
"
2015-12-06
\n",
"
1.14
\n",
"
3218494.55
\n",
"
conventional
\n",
"
1.53
\n",
"
67245.25
\n",
"
organic
\n",
"
0.39
\n",
"
\n",
"
\n",
"
4
\n",
"
2015-11-29
\n",
"
1.22
\n",
"
2593780.51
\n",
"
conventional
\n",
"
1.59
\n",
"
48901.36
\n",
"
organic
\n",
"
0.37
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Date AveragePrice_conventional Total Volume_conventional \\\n",
"0 2015-12-27 1.20 3156360.20 \n",
"1 2015-12-20 1.20 3190120.04 \n",
"2 2015-12-13 1.09 3696551.52 \n",
"3 2015-12-06 1.14 3218494.55 \n",
"4 2015-11-29 1.22 2593780.51 \n",
"\n",
" type_conventional AveragePrice_organic Total Volume_organic type_organic \\\n",
"0 conventional 1.70 75884.69 organic \n",
"1 conventional 1.77 73826.41 organic \n",
"2 conventional 1.80 76466.85 organic \n",
"3 conventional 1.53 67245.25 organic \n",
"4 conventional 1.59 48901.36 organic \n",
"\n",
" Price difference \n",
"0 0.50 \n",
"1 0.57 \n",
"2 0.71 \n",
"3 0.39 \n",
"4 0.37 "
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"wide_data[\"Price difference\"] = price_differences\n",
"\n",
"wide_data.head(5)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Part 2.12: Calculating summary statistics (can skip)\n",
"\n",
"We can calculate summary statistics, such as the mean and standard deviation, on values in a DataFrame using `df.mean()` and `df.std()`. \n",
"\n",
"**Exercise 2.12**: Using the `wide_data` DataFrame, calculate the mean and standard deviation of the conventional prices and organic prices. \n"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"AveragePrice_conventional 1.344438e+00\n",
"Total Volume_conventional 4.077247e+06\n",
"AveragePrice_organic 1.859408e+00\n",
"Total Volume_organic 1.433497e+05\n",
"Price difference 5.149704e-01\n",
"dtype: float64\n",
"Date 342 days 12:16:38.523299392\n",
"AveragePrice_conventional 0.18956\n",
"Total Volume_conventional 807016.253448\n",
"AveragePrice_organic 0.166871\n",
"Total Volume_organic 103535.334452\n",
"Price difference 0.209086\n",
"dtype: object\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/conda/envs/wavfacdev/lib/python3.7/site-packages/ipykernel_launcher.py:1: FutureWarning: DataFrame.mean and DataFrame.median with numeric_only=None will include datetime64 and datetime64tz columns in a future version.\n",
" \"\"\"Entry point for launching an IPython kernel.\n",
"/conda/envs/wavfacdev/lib/python3.7/site-packages/ipykernel_launcher.py:6: FutureWarning: DataFrame.mean and DataFrame.median with numeric_only=None will include datetime64 and datetime64tz columns in a future version.\n",
" \n"
]
},
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
AveragePrice_conventional
\n",
"
Total Volume_conventional
\n",
"
AveragePrice_organic
\n",
"
Total Volume_organic
\n",
"
Price difference
\n",
"
Date
\n",
"
\n",
" \n",
" \n",
"
\n",
"
mean
\n",
"
1.344438
\n",
"
4077247.416982
\n",
"
1.859408
\n",
"
143349.681006
\n",
"
0.51497
\n",
"
NaT
\n",
"
\n",
"
\n",
"
sd
\n",
"
0.18956
\n",
"
807016.253448
\n",
"
0.166871
\n",
"
103535.334452
\n",
"
0.209086
\n",
"
342 days 12:16:38.523299392
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" AveragePrice_conventional Total Volume_conventional AveragePrice_organic \\\n",
"mean 1.344438 4077247.416982 1.859408 \n",
"sd 0.18956 807016.253448 0.166871 \n",
"\n",
" Total Volume_organic Price difference Date \n",
"mean 143349.681006 0.51497 NaT \n",
"sd 103535.334452 0.209086 342 days 12:16:38.523299392 "
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"\n",
"print(wide_data.mean())\n",
"print(wide_data.std())\n",
"\n",
"\n",
"# maybe too complex, just print these separately\n",
"mean_sd = pd.concat([wide_data.mean().to_frame().T, wide_data.std().to_frame().T])\n",
"\n",
"mean_sd.index = [\"mean\", \"sd\"]\n",
"\n",
"mean_sd\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Part 2.13: Calculating summary statistics II\n",
"\n",
"We can also calculate summary statistics on a DataFrame using `df.groupby(\"grouping_column\").agg_method()` method. Let's try that approach here as well.\n",
"\n",
"**Exercise 2.13**: Use the `avocado4` table to calculate the mean conventional and organic avocado prices. Hint, to calculate the mean of the values in a DataFrame use `df.mean()`. \n"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
AveragePrice
\n",
"
Total Volume
\n",
"
\n",
"
\n",
"
type
\n",
"
\n",
"
\n",
"
\n",
" \n",
" \n",
"
\n",
"
conventional
\n",
"
1.344438
\n",
"
4.077247e+06
\n",
"
\n",
"
\n",
"
organic
\n",
"
1.859408
\n",
"
1.433497e+05
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" AveragePrice Total Volume\n",
"type \n",
"conventional 1.344438 4.077247e+06\n",
"organic 1.859408 1.433497e+05"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"avocado4.groupby(\"type\").mean()\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Part 2.14: Explore on your own! \n",
"\n",
"Try exploring the data further to see if you can find anything else interesting in it! \n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
""
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python [conda env:wavfacdev]",
"language": "python",
"name": "conda-env-wavfacdev-py"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.10"
}
},
"nbformat": 4,
"nbformat_minor": 5
}