{ "cells": [ { "cell_type": "markdown", "id": "6b5455b0", "metadata": {}, "source": [ "# Exploratory Data Analysis" ] }, { "cell_type": "code", "execution_count": 1, "id": "32294ad1", "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import seaborn as sns\n", "sns.set_theme(palette= \"colorblind\")" ] }, { "cell_type": "code", "execution_count": 2, "id": "51891cfc", "metadata": {}, "outputs": [], "source": [ "arabica_data_url = 'https://raw.githubusercontent.com/jldbc/coffee-quality-database/master/data/arabica_data_cleaned.csv'\n", "\n", "coffee_df = pd.read_csv(arabica_data_url)" ] }, { "cell_type": "markdown", "id": "50dd6448", "metadata": {}, "source": [ "Which of the following scores is distributed most similarly to Sweetness?" ] }, { "cell_type": "code", "execution_count": 3, "id": "a4482d10", "metadata": {}, "outputs": [], "source": [ "scores_of_interest = ['Flavor','Balance','Aroma','Body',\n", " 'Uniformity','Aftertaste','Sweetness']" ] }, { "cell_type": "markdown", "id": "ff38c25c", "metadata": {}, "source": [ "First step is to subset the data:" ] }, { "cell_type": "code", "execution_count": 4, "id": "9f34aa9e", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
FlavorBalanceAromaBodyUniformityAftertasteSweetness
08.838.428.678.5010.08.6710.0
18.678.428.758.4210.08.5010.0
\n", "
" ], "text/plain": [ " Flavor Balance Aroma Body Uniformity Aftertaste Sweetness\n", "0 8.83 8.42 8.67 8.50 10.0 8.67 10.0\n", "1 8.67 8.42 8.75 8.42 10.0 8.50 10.0" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "coffee_df[scores_of_interest].head(2)" ] }, { "cell_type": "markdown", "id": "46ff880d", "metadata": {}, "source": [ "Then we produce a kde plot" ] }, { "cell_type": "code", "execution_count": 5, "id": "bd94bca9", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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Vd2USBJS3eSq7nzpX4+z5vTvgUVa6/eyFFNWNa9+n6ZVO4feF1OFl46bRcnYmV3ad8mS57j44stYtOgx3nrrTbZs2cRf//oaBQUFvPrqy5SXl9Pc3MzZZ59BIFDA/fc/wrZt27j77lvZunUL4XCYo446hnPO+S7grPlw5JFH8+GHHzBu3AQ+//wzNm/eyPz5Z7LHHntw4423cu+9d/PRRx8SjUapqKjgpz+9huHDR1BfX8e1115NfX0tAAcdNJNzz/0eDz10Py0tQebPP5MDDjiQK664is8//4z77/81LS1BbBvOP///ceihX+ndGycE7NxwnahusiVJuKrLSUJrPVUpNRWYB/xRKRUEFgGLtdZrshRfv7RixXIaG7czffoM6upqWbLkOe64YwGrV69in30mcfLJp7N58ybOP/9sFi16KjX9xY03XsP8+edzwAHTiEajXH75RUyatC8zZhwMQDAY5MEHndLHhx8u5b777uHhhxelzjtv3vzU2hPPP/8sv/3tAq677pe8+upLjBo1invu+Q3gVIWVlZVx/vn/j3/+8y1uvPFWAJqamrj99pu57bYFDB8+lC1bqrnggnNYuPD3lJbm50pdYvdhtG+4TiQJI25LL1gXdav6SGv9MfCxUurHwJHAHcB1Sqm3gQeAJztYcS5vlIydmfFuP5dzJL3wwl+YPfs4DMPg8MO/wV133dbp2g2tra0sW/YvGhoaUttaWoKsWbMmlSRmzz5ul8d49923+dOfnqG1tYV4PJ7aPnnyfvz+909w3333cMAB05g165CMr//ss4/ZvHkTV155WarkZRgGGzeuZ5999u3iby9EZskSQ6rh2jQAGzuvv1H6v263MSilxuOUJuYBFnANzrKjlwInAyf1ZYD9TTQa5fXXX8bn8/Pyy0sApw3hxRef3+XrbNvCMAweemhhh+tTFxUVdvj6LVs28+tf38mDDy5k5MhRfPrpx1x33dUATJmyP48++js++OA9XnnlRRYvfozf/vbhDDHA+PETue++B/N24kGx+zKS1UqJtgjDawJxKUm4rMtJQil1CXA2zhrVvwfO1lq/m/b8H4HOlzIb4N5660323HOvNl/Cn332CTfe+Av2229qaltxcTGhUIhYLAaYFBUVM3XqgSxe/Bjz558PwNatW/B6vVRW7ryIUnFxSZt1H4LBIF6vj8rKSizL4tln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\n", "text/plain": [ "
" ] }, "metadata": { "filenames": { "image/png": "/home/runner/work/BrownFall21/BrownFall21/_build/jupyter_execute/notes/2021-09-24_8_1.png" }, "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "coffee_df[scores_of_interest].plot(kind='kde')" ] }, { "cell_type": "markdown", "id": "c7ef210d", "metadata": {}, "source": [ "We could also do it with seaborn" ] }, { "cell_type": "code", "execution_count": 6, "id": "bdfc4c71", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "filenames": { "image/png": "/home/runner/work/BrownFall21/BrownFall21/_build/jupyter_execute/notes/2021-09-24_10_1.png" }, "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "sns.displot(data=coffee_df[scores_of_interest],kind='kde')" ] }, { "cell_type": "markdown", "id": "c2909148", "metadata": {}, "source": [ "If we forget the parameter `kind`, we get its default value,\n", "which is histogram\n", "````{margin}\n", "```{note}\n", "If you show this excerpt, you'll see how I was able to select only a subset of the docstring to display in the notebook, programmatically. You're not required to know how to do it, but if you're curious, you can see.\n", "```\n", "````" ] }, { "cell_type": "code", "execution_count": 7, "id": "daaa3317", "metadata": { "tags": [ "hide-input" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "``kind`` parameter selects the approach to use:\n", "\n", "- :func:`histplot` (with ``kind=\"hist\"``; the default)\n", "- :func:`kdeplot` (with ``kind=\"kde\"``)\n", "- :func:`ecdfplot` (with ``kind=\"ecdf\"``; univariate-only)\n" ] } ], "source": [ "print('\\n'.join(sns.displot.__doc__.split('\\n')[5:10]))" ] }, { "cell_type": "code", "execution_count": 8, "id": "077dbb78", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "filenames": { "image/png": "/home/runner/work/BrownFall21/BrownFall21/_build/jupyter_execute/notes/2021-09-24_13_1.png" }, "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "sns.displot(data=coffee_df[scores_of_interest])" ] }, { "cell_type": "markdown", "id": "354ffe44", "metadata": {}, "source": [ "## Summarizing with two variables\n", "\n", "So, we can summarize data now, but the summaries we have done so far have treated each variable one at a time. The most interesting patterns are in often in how multiple variables interact. We'll do some modeling that looks at multivariate functions of data in a few weeks, but for now, we do a little more with summary statistics.\n", "\n", "On Monday, we saw how to see how many reviews there were per country, using `value_counts()` on the `Country.of.Origin` column." ] }, { "cell_type": "code", "execution_count": 9, "id": "78738390", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Mexico 236\n", "Colombia 183\n", "Name: Country.of.Origin, dtype: int64" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "coffee_df['Country.of.Origin'].value_counts().head(2)" ] }, { "cell_type": "markdown", "id": "2ed21465", "metadata": {}, "source": [ "The data also has `Number.of.Bags` however. How can we check which has the most bags?\n", "\n", "We can do this with groupby." ] }, { "cell_type": "code", "execution_count": 10, "id": "b36e2e49", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Country.of.Origin\n", "Brazil 30534\n", "Burundi 520\n", "China 55\n", "Colombia 41204\n", "Costa Rica 10354\n", "Cote d?Ivoire 2\n", "Ecuador 1\n", "El Salvador 4449\n", "Ethiopia 11761\n", "Guatemala 36868\n", "Haiti 390\n", "Honduras 13167\n", "India 20\n", "Indonesia 1658\n", "Japan 20\n", "Kenya 3971\n", "Laos 81\n", "Malawi 557\n", "Mauritius 1\n", "Mexico 24140\n", "Myanmar 10\n", "Nicaragua 6406\n", "Panama 537\n", "Papua New Guinea 7\n", "Peru 2336\n", "Philippines 259\n", "Rwanda 150\n", "Taiwan 1914\n", "Tanzania, United Republic Of 3760\n", "Thailand 1310\n", "Uganda 3868\n", "United States 361\n", "United States (Hawaii) 833\n", "United States (Puerto Rico) 71\n", "Vietnam 10\n", "Zambia 13\n", "Name: Number.of.Bags, dtype: int64" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "coffee_df.groupby('Country.of.Origin')['Number.of.Bags'].sum()" ] }, { "cell_type": "markdown", "id": "1d268265", "metadata": {}, "source": [ "What just happened?\n", "![split-apply-combine image showing one data table, it split into 3 part, the sum applied to each part, and the sums combined back into one table](https://jakevdp.github.io/PythonDataScienceHandbook/figures/03.08-split-apply-combine.png)\n", "\n", "Groupby splits the whole dataframe into parts where each part has the same value for `Country.of.Origin` and then after that, we extracted the `Number.of.Bags` column, took the sum (within each separate group) and then put it all back together in one table (in this case, a `Series` becuase we picked one variable out)\n", "\n", "## How doe Groupby Work?\n", "\n", "We can view this by saving the groupby object as a variable and exploring it." ] }, { "cell_type": "code", "execution_count": 11, "id": "50b55461", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "country_grouped = coffee_df.groupby('Country.of.Origin')\n", "\n", "country_grouped" ] }, { "cell_type": "markdown", "id": "0bdc294a", "metadata": {}, "source": [ "Trying to look at it without applying additional functions, just tells us the type. But, it's iterable, so we can loop over." ] }, { "cell_type": "code", "execution_count": 12, "id": "4491e3af", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n" ] } ], "source": [ "for country,df in country_grouped:\n", " print(type(country), type(df))" ] }, { "cell_type": "markdown", "id": "fc399ea5", "metadata": {}, "source": [ "````{margin}\n", "```{note}\n", "I used this feature to build the separate view of the communication channels on this website. You can view that source using the github icon on that page.\n", "```\n", "````\n", "\n", "We could manually compute things using the data structure, if needed, though using pandas functionality will usually do what we want. For example:\n", "\n", "````{margin}\n", "```{note}\n", "I tried putting this dictionary into the dataframe for display purposes using the regular constructor and got an error, so I googled about making one from a dictionary to get the docs, which is how I learned about the [`from_dict`](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.from_dict.html) method and its `orient` parameter which solved my problems.\n", "```\n", "````" ] }, { "cell_type": "code", "execution_count": 13, "id": "b8135552", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Number.of.Bags.Sum
Brazil30534
Burundi520
China55
Colombia41204
Costa Rica10354
Cote d?Ivoire2
Ecuador1
El Salvador4449
Ethiopia11761
Guatemala36868
Haiti390
Honduras13167
India20
Indonesia1658
Japan20
Kenya3971
Laos81
Malawi557
Mauritius1
Mexico24140
Myanmar10
Nicaragua6406
Panama537
Papua New Guinea7
Peru2336
Philippines259
Rwanda150
Taiwan1914
Tanzania, United Republic Of3760
Thailand1310
Uganda3868
United States361
United States (Hawaii)833
United States (Puerto Rico)71
Vietnam10
Zambia13
\n", "
" ], "text/plain": [ " Number.of.Bags.Sum\n", "Brazil 30534\n", "Burundi 520\n", "China 55\n", "Colombia 41204\n", "Costa Rica 10354\n", "Cote d?Ivoire 2\n", "Ecuador 1\n", "El Salvador 4449\n", "Ethiopia 11761\n", "Guatemala 36868\n", "Haiti 390\n", "Honduras 13167\n", "India 20\n", "Indonesia 1658\n", "Japan 20\n", "Kenya 3971\n", "Laos 81\n", "Malawi 557\n", "Mauritius 1\n", "Mexico 24140\n", "Myanmar 10\n", "Nicaragua 6406\n", "Panama 537\n", "Papua New Guinea 7\n", "Peru 2336\n", "Philippines 259\n", "Rwanda 150\n", "Taiwan 1914\n", "Tanzania, United Republic Of 3760\n", "Thailand 1310\n", "Uganda 3868\n", "United States 361\n", "United States (Hawaii) 833\n", "United States (Puerto Rico) 71\n", "Vietnam 10\n", "Zambia 13" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bag_total_dict = {}\n", "\n", "for country,df in country_grouped:\n", " tot_bags = df['Number.of.Bags'].sum()\n", " bag_total_dict[country] = tot_bags\n", "\n", "pd.DataFrame.from_dict(bag_total_dict, orient='index',\n", " columns = ['Number.of.Bags.Sum'])" ] }, { "cell_type": "markdown", "id": "766acf9c", "metadata": {}, "source": [ "is the same as what we did before\n", "\n", "```{admonition} Question from class\n", "How can we sort it?\n", "```\n", "\n", "First, we'll make it a variable to keep the code legible, then we'll use `sort_values()`" ] }, { "cell_type": "code", "execution_count": 14, "id": "c589ea3e", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Country.of.Origin\n", "Mauritius 1\n", "Ecuador 1\n", "Cote d?Ivoire 2\n", "Papua New Guinea 7\n", "Vietnam 10\n", "Myanmar 10\n", "Zambia 13\n", "India 20\n", "Japan 20\n", "China 55\n", "United States (Puerto Rico) 71\n", "Laos 81\n", "Rwanda 150\n", "Philippines 259\n", "United States 361\n", "Haiti 390\n", "Burundi 520\n", "Panama 537\n", "Malawi 557\n", "United States (Hawaii) 833\n", "Thailand 1310\n", "Indonesia 1658\n", "Taiwan 1914\n", "Peru 2336\n", "Tanzania, United Republic Of 3760\n", "Uganda 3868\n", "Kenya 3971\n", "El Salvador 4449\n", "Nicaragua 6406\n", "Costa Rica 10354\n", "Ethiopia 11761\n", "Honduras 13167\n", "Mexico 24140\n", "Brazil 30534\n", "Guatemala 36868\n", "Colombia 41204\n", "Name: Number.of.Bags, dtype: int64" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bag_total_df = coffee_df.groupby('Country.of.Origin')['Number.of.Bags'].sum()\n", "bag_total_df.sort_values()" ] }, { "cell_type": "markdown", "id": "c4edbe83", "metadata": {}, "source": [ "Which, by default uses ascending order, the method has an `ascending` parameter and its default value is `True`, so we can switch it to `False` to get descending" ] }, { "cell_type": "code", "execution_count": 15, "id": "8897801d", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Country.of.Origin\n", "Colombia 41204\n", "Guatemala 36868\n", "Brazil 30534\n", "Mexico 24140\n", "Honduras 13167\n", "Ethiopia 11761\n", "Costa Rica 10354\n", "Nicaragua 6406\n", "El Salvador 4449\n", "Kenya 3971\n", "Uganda 3868\n", "Tanzania, United Republic Of 3760\n", "Peru 2336\n", "Taiwan 1914\n", "Indonesia 1658\n", "Thailand 1310\n", "United States (Hawaii) 833\n", "Malawi 557\n", "Panama 537\n", "Burundi 520\n", "Haiti 390\n", "United States 361\n", "Philippines 259\n", "Rwanda 150\n", "Laos 81\n", "United States (Puerto Rico) 71\n", "China 55\n", "India 20\n", "Japan 20\n", "Zambia 13\n", "Myanmar 10\n", "Vietnam 10\n", "Papua New Guinea 7\n", "Cote d?Ivoire 2\n", "Ecuador 1\n", "Mauritius 1\n", "Name: Number.of.Bags, dtype: int64" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bag_total_df.sort_values(ascending=False,)" ] }, { "cell_type": "markdown", "id": "cf54c64c", "metadata": {}, "source": [ "## Customizing Data Summaries\n", "\n", "We've looked at an overall summary with `describe` on all the variables, describe on one variable, individual statistics on all variables, and individual statistics on one variable. We can also build summaries of multiple varialbes with a custom subset of summary statistics, with `aggregate` or using its alias `agg`\n", "\n", "`````{margin}\n", "\n", "```{admonition} Learning Tip\n", "When a person reads a line of code, they have to use their working memory to hold the whole thing in order to make sense of it. Human working memory only holds 5-9 things at a time, that's why a phone number is 7 digits without the area code, (when people used to have to actually dial the digits, they also didn't need the area codes for short-distance calls, which were most of the calls). \n", "\n", "How many concepts does a person have to hold in working memory at once to parse the second version?\n", "\n", "If you are writing the code, and building it up, you hold the previous pieces in your memory differently than a person coming to it for the first time.\n", "```\n", "`````" ] }, { "cell_type": "code", "execution_count": 16, "id": "269ba018", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Number.of.BagsBalance
summeancount
Country.of.Origin
Brazil305347.531515132
Burundi5207.4150002
China557.54812516
Colombia412047.708415183
Costa Rica103547.63725551
Cote d?Ivoire27.0800001
Ecuador17.8300001
El Salvador44497.71142921
Ethiopia117617.97227344
Guatemala368687.469890181
Haiti3907.0566676
Honduras131677.16396253
India207.4200001
Indonesia16587.52000020
Japan207.8300001
Kenya39717.80040025
Laos817.4166673
Malawi5577.37181811
Mauritius17.1700001
Mexico241407.328686236
Myanmar107.1337508
Nicaragua64067.27846226
Panama5377.8750004
Papua New Guinea78.2500001
Peru23367.66600010
Philippines2597.4000005
Rwanda1507.7500001
Taiwan19147.42600075
Tanzania, United Republic Of37607.46975040
Thailand13107.52406332
Uganda38687.66076926
United States3617.9475008
United States (Hawaii)8337.64411073
United States (Puerto Rico)717.6475004
Vietnam107.5471437
Zambia137.4200001
\n", "
" ], "text/plain": [ " Number.of.Bags Balance \n", " sum mean count\n", "Country.of.Origin \n", "Brazil 30534 7.531515 132\n", "Burundi 520 7.415000 2\n", "China 55 7.548125 16\n", "Colombia 41204 7.708415 183\n", "Costa Rica 10354 7.637255 51\n", "Cote d?Ivoire 2 7.080000 1\n", "Ecuador 1 7.830000 1\n", "El Salvador 4449 7.711429 21\n", "Ethiopia 11761 7.972273 44\n", "Guatemala 36868 7.469890 181\n", "Haiti 390 7.056667 6\n", "Honduras 13167 7.163962 53\n", "India 20 7.420000 1\n", "Indonesia 1658 7.520000 20\n", "Japan 20 7.830000 1\n", "Kenya 3971 7.800400 25\n", "Laos 81 7.416667 3\n", "Malawi 557 7.371818 11\n", "Mauritius 1 7.170000 1\n", "Mexico 24140 7.328686 236\n", "Myanmar 10 7.133750 8\n", "Nicaragua 6406 7.278462 26\n", "Panama 537 7.875000 4\n", "Papua New Guinea 7 8.250000 1\n", "Peru 2336 7.666000 10\n", "Philippines 259 7.400000 5\n", "Rwanda 150 7.750000 1\n", "Taiwan 1914 7.426000 75\n", "Tanzania, United Republic Of 3760 7.469750 40\n", "Thailand 1310 7.524063 32\n", "Uganda 3868 7.660769 26\n", "United States 361 7.947500 8\n", "United States (Hawaii) 833 7.644110 73\n", "United States (Puerto Rico) 71 7.647500 4\n", "Vietnam 10 7.547143 7\n", "Zambia 13 7.420000 1" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "country_grouped.agg({'Number.of.Bags':'sum',\n", " 'Balance':['mean','count'],})" ] }, { "cell_type": "markdown", "id": "0506825a", "metadata": {}, "source": [ "We could also string this together, but splitting into interim variables makes code more readable. Shorter lines are easier to read (and sometimes auto-enforced on projects). Also, by giving a good variable name to the interim states we get more description, which can help a human better read it." ] }, { "cell_type": "code", "execution_count": 17, "id": "aa6ab615", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Number.of.BagsBalance
summeancount
Country.of.Origin
Brazil305347.531515132
Burundi5207.4150002
China557.54812516
Colombia412047.708415183
Costa Rica103547.63725551
Cote d?Ivoire27.0800001
Ecuador17.8300001
El Salvador44497.71142921
Ethiopia117617.97227344
Guatemala368687.469890181
Haiti3907.0566676
Honduras131677.16396253
India207.4200001
Indonesia16587.52000020
Japan207.8300001
Kenya39717.80040025
Laos817.4166673
Malawi5577.37181811
Mauritius17.1700001
Mexico241407.328686236
Myanmar107.1337508
Nicaragua64067.27846226
Panama5377.8750004
Papua New Guinea78.2500001
Peru23367.66600010
Philippines2597.4000005
Rwanda1507.7500001
Taiwan19147.42600075
Tanzania, United Republic Of37607.46975040
Thailand13107.52406332
Uganda38687.66076926
United States3617.9475008
United States (Hawaii)8337.64411073
United States (Puerto Rico)717.6475004
Vietnam107.5471437
Zambia137.4200001
\n", "
" ], "text/plain": [ " Number.of.Bags Balance \n", " sum mean count\n", "Country.of.Origin \n", "Brazil 30534 7.531515 132\n", "Burundi 520 7.415000 2\n", "China 55 7.548125 16\n", "Colombia 41204 7.708415 183\n", "Costa Rica 10354 7.637255 51\n", "Cote d?Ivoire 2 7.080000 1\n", "Ecuador 1 7.830000 1\n", "El Salvador 4449 7.711429 21\n", "Ethiopia 11761 7.972273 44\n", "Guatemala 36868 7.469890 181\n", "Haiti 390 7.056667 6\n", "Honduras 13167 7.163962 53\n", "India 20 7.420000 1\n", "Indonesia 1658 7.520000 20\n", "Japan 20 7.830000 1\n", "Kenya 3971 7.800400 25\n", "Laos 81 7.416667 3\n", "Malawi 557 7.371818 11\n", "Mauritius 1 7.170000 1\n", "Mexico 24140 7.328686 236\n", "Myanmar 10 7.133750 8\n", "Nicaragua 6406 7.278462 26\n", "Panama 537 7.875000 4\n", "Papua New Guinea 7 8.250000 1\n", "Peru 2336 7.666000 10\n", "Philippines 259 7.400000 5\n", "Rwanda 150 7.750000 1\n", "Taiwan 1914 7.426000 75\n", "Tanzania, United Republic Of 3760 7.469750 40\n", "Thailand 1310 7.524063 32\n", "Uganda 3868 7.660769 26\n", "United States 361 7.947500 8\n", "United States (Hawaii) 833 7.644110 73\n", "United States (Puerto Rico) 71 7.647500 4\n", "Vietnam 10 7.547143 7\n", "Zambia 13 7.420000 1" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "coffee_df.groupby('Country.of.Origin').agg({'Number.of.Bags':'sum','Balance':['mean','count'],})" ] }, { "cell_type": "markdown", "id": "376713ef", "metadata": {}, "source": [ "```{admonition} Question from Class\n", "What does the `count` do? or how can we figure it out?\n", "```\n", "\n", "\n", "```{adomonition} Learning Tip\n", "To see what a method does, reading the documentation for a method should generally be your first stop. Testing it yourself is best for when you are trying to see how two methods are different. Once you're testing, one way is to apply it to a small dataset. In fact, a lot of the pandas documentation illustrates how methods work on tiny dataframes.\n", "```\n", "\n", "In this case, let's compare `count` to `shape` we know that shape returns the number of rows and columns. Also `shape` is an attribute, not a method (so no `()` for shape). However, there's a more important difference." ] }, { "cell_type": "code", "execution_count": 18, "id": "ce03b526", "metadata": {}, "outputs": [ { "ename": "KeyError", "evalue": "('Balance', 'Farm.Name', 'Lot.Number')", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", "File \u001b[0;32m/opt/hostedtoolcache/Python/3.8.13/x64/lib/python3.8/site-packages/pandas/core/indexes/base.py:3621\u001b[0m, in \u001b[0;36mIndex.get_loc\u001b[0;34m(self, key, method, tolerance)\u001b[0m\n\u001b[1;32m 3620\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m-> 3621\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_engine\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_loc\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcasted_key\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 3622\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m err:\n", "File \u001b[0;32m/opt/hostedtoolcache/Python/3.8.13/x64/lib/python3.8/site-packages/pandas/_libs/index.pyx:136\u001b[0m, in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n", "File \u001b[0;32m/opt/hostedtoolcache/Python/3.8.13/x64/lib/python3.8/site-packages/pandas/_libs/index.pyx:163\u001b[0m, in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n", "File \u001b[0;32mpandas/_libs/hashtable_class_helper.pxi:5198\u001b[0m, in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n", "File \u001b[0;32mpandas/_libs/hashtable_class_helper.pxi:5206\u001b[0m, in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n", "\u001b[0;31mKeyError\u001b[0m: ('Balance', 'Farm.Name', 'Lot.Number')", "\nThe above exception was the direct cause of the following exception:\n", "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", "Input \u001b[0;32mIn [18]\u001b[0m, in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mcoffee_df\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mBalance\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mFarm.Name\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mLot.Number\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m\u001b[38;5;241m.\u001b[39mshape\n", "File \u001b[0;32m/opt/hostedtoolcache/Python/3.8.13/x64/lib/python3.8/site-packages/pandas/core/frame.py:3505\u001b[0m, in \u001b[0;36mDataFrame.__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 3503\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcolumns\u001b[38;5;241m.\u001b[39mnlevels \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m1\u001b[39m:\n\u001b[1;32m 3504\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_getitem_multilevel(key)\n\u001b[0;32m-> 3505\u001b[0m indexer \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcolumns\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_loc\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 3506\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m is_integer(indexer):\n\u001b[1;32m 3507\u001b[0m indexer \u001b[38;5;241m=\u001b[39m [indexer]\n", "File \u001b[0;32m/opt/hostedtoolcache/Python/3.8.13/x64/lib/python3.8/site-packages/pandas/core/indexes/base.py:3623\u001b[0m, in \u001b[0;36mIndex.get_loc\u001b[0;34m(self, key, method, tolerance)\u001b[0m\n\u001b[1;32m 3621\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_engine\u001b[38;5;241m.\u001b[39mget_loc(casted_key)\n\u001b[1;32m 3622\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m err:\n\u001b[0;32m-> 3623\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m(key) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01merr\u001b[39;00m\n\u001b[1;32m 3624\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mTypeError\u001b[39;00m:\n\u001b[1;32m 3625\u001b[0m \u001b[38;5;66;03m# If we have a listlike key, _check_indexing_error will raise\u001b[39;00m\n\u001b[1;32m 3626\u001b[0m \u001b[38;5;66;03m# InvalidIndexError. Otherwise we fall through and re-raise\u001b[39;00m\n\u001b[1;32m 3627\u001b[0m \u001b[38;5;66;03m# the TypeError.\u001b[39;00m\n\u001b[1;32m 3628\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_check_indexing_error(key)\n", "\u001b[0;31mKeyError\u001b[0m: ('Balance', 'Farm.Name', 'Lot.Number')" ] } ], "source": [ "coffee_df['Balance','Farm.Name','Lot.Number'].shape" ] }, { "cell_type": "code", "execution_count": 19, "id": "613614ff", "metadata": {}, "outputs": [ { "ename": "KeyError", "evalue": "('Balance', 'Farm.Name', 'Lot.Number')", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", "File \u001b[0;32m/opt/hostedtoolcache/Python/3.8.13/x64/lib/python3.8/site-packages/pandas/core/indexes/base.py:3621\u001b[0m, in \u001b[0;36mIndex.get_loc\u001b[0;34m(self, key, method, tolerance)\u001b[0m\n\u001b[1;32m 3620\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m-> 3621\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_engine\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_loc\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcasted_key\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 3622\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m err:\n", "File \u001b[0;32m/opt/hostedtoolcache/Python/3.8.13/x64/lib/python3.8/site-packages/pandas/_libs/index.pyx:136\u001b[0m, in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n", "File \u001b[0;32m/opt/hostedtoolcache/Python/3.8.13/x64/lib/python3.8/site-packages/pandas/_libs/index.pyx:163\u001b[0m, in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n", "File \u001b[0;32mpandas/_libs/hashtable_class_helper.pxi:5198\u001b[0m, in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n", "File \u001b[0;32mpandas/_libs/hashtable_class_helper.pxi:5206\u001b[0m, in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n", "\u001b[0;31mKeyError\u001b[0m: ('Balance', 'Farm.Name', 'Lot.Number')", "\nThe above exception was the direct cause of the following exception:\n", "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", "Input \u001b[0;32mIn [19]\u001b[0m, in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mcoffee_df\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mBalance\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mFarm.Name\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mLot.Number\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m\u001b[38;5;241m.\u001b[39mcount()\n", "File \u001b[0;32m/opt/hostedtoolcache/Python/3.8.13/x64/lib/python3.8/site-packages/pandas/core/frame.py:3505\u001b[0m, in \u001b[0;36mDataFrame.__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 3503\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcolumns\u001b[38;5;241m.\u001b[39mnlevels \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m1\u001b[39m:\n\u001b[1;32m 3504\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_getitem_multilevel(key)\n\u001b[0;32m-> 3505\u001b[0m indexer \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcolumns\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_loc\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 3506\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m is_integer(indexer):\n\u001b[1;32m 3507\u001b[0m indexer \u001b[38;5;241m=\u001b[39m [indexer]\n", "File \u001b[0;32m/opt/hostedtoolcache/Python/3.8.13/x64/lib/python3.8/site-packages/pandas/core/indexes/base.py:3623\u001b[0m, in \u001b[0;36mIndex.get_loc\u001b[0;34m(self, key, method, tolerance)\u001b[0m\n\u001b[1;32m 3621\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_engine\u001b[38;5;241m.\u001b[39mget_loc(casted_key)\n\u001b[1;32m 3622\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m err:\n\u001b[0;32m-> 3623\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m(key) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01merr\u001b[39;00m\n\u001b[1;32m 3624\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mTypeError\u001b[39;00m:\n\u001b[1;32m 3625\u001b[0m \u001b[38;5;66;03m# If we have a listlike key, _check_indexing_error will raise\u001b[39;00m\n\u001b[1;32m 3626\u001b[0m \u001b[38;5;66;03m# InvalidIndexError. Otherwise we fall through and re-raise\u001b[39;00m\n\u001b[1;32m 3627\u001b[0m \u001b[38;5;66;03m# the TypeError.\u001b[39;00m\n\u001b[1;32m 3628\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_check_indexing_error(key)\n", "\u001b[0;31mKeyError\u001b[0m: ('Balance', 'Farm.Name', 'Lot.Number')" ] } ], "source": [ "coffee_df['Balance','Farm.Name','Lot.Number'].count()" ] }, { "cell_type": "markdown", "id": "6e49bca6", "metadata": {}, "source": [ "Here we get different number for `Balance` and `Farm Name`\n", "The shape tells us how many rows there are, while count tells us how many are not null.\n", "\n", "We can verify visually that some are null with:" ] }, { "cell_type": "code", "execution_count": 20, "id": "a4274a74", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Unnamed: 0SpeciesOwnerCountry.of.OriginFarm.NameLot.NumberMillICO.NumberCompanyAltitude...ColorCategory.Two.DefectsExpirationCertification.BodyCertification.AddressCertification.Contactunit_of_measurementaltitude_low_metersaltitude_high_metersaltitude_mean_meters
01Arabicametad plcEthiopiametad plcNaNmetad plc2014/2015metad agricultural developmet plc1950-2200...Green0April 3rd, 2016METAD Agricultural Development plc309fcf77415a3661ae83e027f7e5f05dad786e4419fef5a731de2db57d16da10287413f5f99bc2ddm1950.02200.02075.0
12Arabicametad plcEthiopiametad plcNaNmetad plc2014/2015metad agricultural developmet plc1950-2200...Green1April 3rd, 2016METAD Agricultural Development plc309fcf77415a3661ae83e027f7e5f05dad786e4419fef5a731de2db57d16da10287413f5f99bc2ddm1950.02200.02075.0
23Arabicagrounds for health adminGuatemalasan marcos barrancas \"san cristobal cuchNaNNaNNaNNaN1600 - 1800 m...NaN0May 31st, 2011Specialty Coffee Association36d0d00a3724338ba7937c52a378d085f2172daa0878a7d4b9d35ddbf0fe2ce69a2062cceb45a660m1600.01800.01700.0
34Arabicayidnekachew dabessaEthiopiayidnekachew dabessa coffee plantationNaNwolensuNaNyidnekachew debessa coffee plantation1800-2200...Green2March 25th, 2016METAD Agricultural Development plc309fcf77415a3661ae83e027f7e5f05dad786e4419fef5a731de2db57d16da10287413f5f99bc2ddm1800.02200.02000.0
45Arabicametad plcEthiopiametad plcNaNmetad plc2014/2015metad agricultural developmet plc1950-2200...Green2April 3rd, 2016METAD Agricultural Development plc309fcf77415a3661ae83e027f7e5f05dad786e4419fef5a731de2db57d16da10287413f5f99bc2ddm1950.02200.02075.0
\n", "

5 rows × 44 columns

\n", "
" ], "text/plain": [ " Unnamed: 0 Species Owner Country.of.Origin \\\n", "0 1 Arabica metad plc Ethiopia \n", "1 2 Arabica metad plc Ethiopia \n", "2 3 Arabica grounds for health admin Guatemala \n", "3 4 Arabica yidnekachew dabessa Ethiopia \n", "4 5 Arabica metad plc Ethiopia \n", "\n", " Farm.Name Lot.Number Mill ICO.Number \\\n", "0 metad plc NaN metad plc 2014/2015 \n", "1 metad plc NaN metad plc 2014/2015 \n", "2 san marcos barrancas \"san cristobal cuch NaN NaN NaN \n", "3 yidnekachew dabessa coffee plantation NaN wolensu NaN \n", "4 metad plc NaN metad plc 2014/2015 \n", "\n", " Company Altitude ... Color \\\n", "0 metad agricultural developmet plc 1950-2200 ... Green \n", "1 metad agricultural developmet plc 1950-2200 ... Green \n", "2 NaN 1600 - 1800 m ... NaN \n", "3 yidnekachew debessa coffee plantation 1800-2200 ... Green \n", "4 metad agricultural developmet plc 1950-2200 ... Green \n", "\n", " Category.Two.Defects Expiration Certification.Body \\\n", "0 0 April 3rd, 2016 METAD Agricultural Development plc \n", "1 1 April 3rd, 2016 METAD Agricultural Development plc \n", "2 0 May 31st, 2011 Specialty Coffee Association \n", "3 2 March 25th, 2016 METAD Agricultural Development plc \n", "4 2 April 3rd, 2016 METAD Agricultural Development plc \n", "\n", " Certification.Address \\\n", "0 309fcf77415a3661ae83e027f7e5f05dad786e44 \n", "1 309fcf77415a3661ae83e027f7e5f05dad786e44 \n", "2 36d0d00a3724338ba7937c52a378d085f2172daa \n", "3 309fcf77415a3661ae83e027f7e5f05dad786e44 \n", "4 309fcf77415a3661ae83e027f7e5f05dad786e44 \n", "\n", " Certification.Contact unit_of_measurement \\\n", "0 19fef5a731de2db57d16da10287413f5f99bc2dd m \n", "1 19fef5a731de2db57d16da10287413f5f99bc2dd m \n", "2 0878a7d4b9d35ddbf0fe2ce69a2062cceb45a660 m \n", "3 19fef5a731de2db57d16da10287413f5f99bc2dd m \n", "4 19fef5a731de2db57d16da10287413f5f99bc2dd m \n", "\n", " altitude_low_meters altitude_high_meters altitude_mean_meters \n", "0 1950.0 2200.0 2075.0 \n", "1 1950.0 2200.0 2075.0 \n", "2 1600.0 1800.0 1700.0 \n", "3 1800.0 2200.0 2000.0 \n", "4 1950.0 2200.0 2075.0 \n", "\n", "[5 rows x 44 columns]" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "coffee_df.head()" ] }, { "cell_type": "markdown", "id": "75882fbd", "metadata": {}, "source": [ "```{admonition} Correction\n", "This response is slightly corrected from what I said in class, because in the balance column, it does match, but in general it doesn't. `count` on grouped will only be the same as `value_count` when `count` is applied to a column that does not have any missing values where the grouping variable has a value.\n", "```\n", "\n", "On the balance column alone in class, we checked that the grouped count matched the country value counts." ] }, { "cell_type": "code", "execution_count": 21, "id": "958ca27c", "metadata": {}, "outputs": [ { "ename": "SyntaxError", "evalue": "invalid syntax (3556086896.py, line 2)", "output_type": "error", "traceback": [ "\u001b[0;36m Input \u001b[0;32mIn [21]\u001b[0;36m\u001b[0m\n\u001b[0;31m ascending=False)\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n" ] } ], "source": [ "country_grouped[['Balance','Farm.Name','Lot.Number']].count().sort_values(by='Balance'\n", " ascending=False)" ] }, { "cell_type": "code", "execution_count": 22, "id": "7b1c5c55", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Mexico 236\n", "Colombia 183\n", "Guatemala 181\n", "Brazil 132\n", "Taiwan 75\n", "United States (Hawaii) 73\n", "Honduras 53\n", "Costa Rica 51\n", "Ethiopia 44\n", "Tanzania, United Republic Of 40\n", "Thailand 32\n", "Uganda 26\n", "Nicaragua 26\n", "Kenya 25\n", "El Salvador 21\n", "Indonesia 20\n", "China 16\n", "Malawi 11\n", "Peru 10\n", "United States 8\n", "Myanmar 8\n", "Vietnam 7\n", "Haiti 6\n", "Philippines 5\n", "Panama 4\n", "United States (Puerto Rico) 4\n", "Laos 3\n", "Burundi 2\n", "Ecuador 1\n", "Rwanda 1\n", "Japan 1\n", "Zambia 1\n", "Papua New Guinea 1\n", "Mauritius 1\n", "Cote d?Ivoire 1\n", "India 1\n", "Name: Country.of.Origin, dtype: int64" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "coffee_df['Country.of.Origin'].value_counts()" ] }, { "cell_type": "markdown", "id": "f7bbdeac", "metadata": {}, "source": [ "In class, they were the same, because `Balance` doesn't have missing values. `Farm.Name` and `Lot.Number` havea lot of missing values, so they're different numbers.\n", "\n", "\n", "Another function we could use when we first examine a dataset is `info` this tells us about the NaN values up front." ] }, { "cell_type": "code", "execution_count": 23, "id": "e41b703e", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "RangeIndex: 1311 entries, 0 to 1310\n", "Data columns (total 44 columns):\n", " # Column Non-Null Count Dtype \n", "--- ------ -------------- ----- \n", " 0 Unnamed: 0 1311 non-null int64 \n", " 1 Species 1311 non-null object \n", " 2 Owner 1304 non-null object \n", " 3 Country.of.Origin 1310 non-null object \n", " 4 Farm.Name 955 non-null object \n", " 5 Lot.Number 270 non-null object \n", " 6 Mill 1001 non-null object \n", " 7 ICO.Number 1165 non-null object \n", " 8 Company 1102 non-null object \n", " 9 Altitude 1088 non-null object \n", " 10 Region 1254 non-null object \n", " 11 Producer 1081 non-null object \n", " 12 Number.of.Bags 1311 non-null int64 \n", " 13 Bag.Weight 1311 non-null object \n", " 14 In.Country.Partner 1311 non-null object \n", " 15 Harvest.Year 1264 non-null object \n", " 16 Grading.Date 1311 non-null object \n", " 17 Owner.1 1304 non-null object \n", " 18 Variety 1110 non-null object \n", " 19 Processing.Method 1159 non-null object \n", " 20 Aroma 1311 non-null float64\n", " 21 Flavor 1311 non-null float64\n", " 22 Aftertaste 1311 non-null float64\n", " 23 Acidity 1311 non-null float64\n", " 24 Body 1311 non-null float64\n", " 25 Balance 1311 non-null float64\n", " 26 Uniformity 1311 non-null float64\n", " 27 Clean.Cup 1311 non-null float64\n", " 28 Sweetness 1311 non-null float64\n", " 29 Cupper.Points 1311 non-null float64\n", " 30 Total.Cup.Points 1311 non-null float64\n", " 31 Moisture 1311 non-null float64\n", " 32 Category.One.Defects 1311 non-null int64 \n", " 33 Quakers 1310 non-null float64\n", " 34 Color 1095 non-null object \n", " 35 Category.Two.Defects 1311 non-null int64 \n", " 36 Expiration 1311 non-null object \n", " 37 Certification.Body 1311 non-null object \n", " 38 Certification.Address 1311 non-null object \n", " 39 Certification.Contact 1311 non-null object \n", " 40 unit_of_measurement 1311 non-null object \n", " 41 altitude_low_meters 1084 non-null float64\n", " 42 altitude_high_meters 1084 non-null float64\n", " 43 altitude_mean_meters 1084 non-null float64\n", "dtypes: float64(16), int64(4), object(24)\n", "memory usage: 450.8+ KB\n" ] } ], "source": [ "coffee_df.info()" ] }, { "cell_type": "markdown", "id": "93d8f71b", "metadata": {}, "source": [ "## Using summaries for visualization\n", "\n", "```{important}\n", "This section is an extension, that we didn't get to in class, but might help in your assignment\n", "```\n", "\n", "For example, we can group by color and take the mean of each of the scores from the beginning of class and then use a bar chart." ] }, { "cell_type": "code", "execution_count": 24, "id": "537a0fc6", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "filenames": { "image/png": "/home/runner/work/BrownFall21/BrownFall21/_build/jupyter_execute/notes/2021-09-24_43_1.png" }, "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "color_grouped = coffee_df.groupby('Color')[scores_of_interest].mean()\n", "color_grouped.plot(kind='bar')" ] }, { "cell_type": "markdown", "id": "ba42e2f0", "metadata": {}, "source": [ "## Questions after class\n", "\n", "```{admonition} Ram Token Opportunity\n", "add a question with a pull request; earn 1-2 ram tokens for submitting a question with the answer (with sources)\n", "```\n", "\n", "## More Practice\n", "\n", "- Make a table thats total number of bags and mean and count of scored for each of the variables in the `scores_of_interest` list.\n", "- Make a bar chart of the mean score for each variable `scores_of_interest` grouped by country." ] } ], "metadata": { "jupytext": { "text_representation": { "extension": ".md", "format_name": "myst", "format_version": 0.13, "jupytext_version": "1.10.3" } }, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "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.8.13" }, "source_map": [ 12, 17, 24, 28, 33, 36, 39, 41, 44, 46, 49, 51, 60, 65, 67, 75, 77, 83, 85, 98, 102, 107, 110, 126, 135, 145, 148, 152, 154, 171, 174, 180, 182, 197, 201, 203, 208, 210, 219, 225, 227, 233, 235, 246, 249 ] }, "nbformat": 4, "nbformat_minor": 5 }