{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Exercise notebook 4: Grouping your data\n", "\n", "This Jupyter notebook, for Part 4 of The Open University's _Learn to code for Data Analysis_ course, contains code examples and coding activities for you.\n", "\n", "You'll come across steps directing you to this notebook. Once you've done each exercise, go back to the corresponding step and mark it as complete. Remember to run the code in this notebook before you start." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "activity": false, "collapsed": true, "run_control": { "read_only": false } }, "outputs": [], "source": [ "import warnings\n", "warnings.simplefilter('ignore', FutureWarning)\n", "\n", "import matplotlib\n", "matplotlib.rcParams['axes.grid'] = True # show gridlines by default\n", "%matplotlib inline\n", "\n", "from pandas import *" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exercise 1: Getting Comtrade data into your notebook\n", "\n", "In this exercise, you will practice loading data from Comtrade into a pandas dataframe and getting it into a form where you can start to work with it. \n", "\n", "The following steps and code are an example. Your task for this exercise is stated at the end, after the example.\n", "\n", "The data is obtained from the [United Nations Comtrade](http://comtrade.un.org/data/) website, by selecting the following configuration:\n", "\n", "- Type of Product: goods\n", "- Frequency: monthly \n", "- Periods: all of 2014\n", "- Reporter: United Kingdom\n", "- Partners: all\n", "- Flows: imports and exports\n", "- HS (as reported) commodity codes: 0401 (Milk and cream, neither concentrated nor sweetened) and 0402 (Milk and cream, concentrated or sweetened)\n", "\n", "Clicking on 'Preview' results in a message that the data exceeds 500 rows. Data was downloaded using the *Download CSV* button and the download file renamed appropriately." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "LOCATION='comtrade_milk_uk_monthly_14.csv'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A URL for downloading all the data as a CSV file can also be obtained via \"View API Link\".\n", "It must be modified so that it returns up to 5000 records (set `max=5000`) in the CSV format (`&fmt=csv`)." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# LOCATION = 'http://comtrade.un.org/api/get?max=5000&type=C&freq=M&px=HS&ps=2014&r=826&p=all&rg=1%2C2&cc=0401%2C0402&fmt=csv'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Load the data in from the specified location, ensuring that the various codes are read as strings. Preview the first few rows of the dataset." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "activity": false, "run_control": { "read_only": false } }, "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", "
ClassificationYearPeriodPeriod Desc.Aggregate LevelIs Leaf CodeTrade Flow CodeTrade FlowReporter CodeReporter...QtyAlt Qty Unit CodeAlt Qty UnitAlt QtyNetweight (kg)Gross weight (kg)Trade Value (US$)CIF Trade Value (US$)FOB Trade Value (US$)Flag
0HS2014201401January 2014401Imports826United Kingdom...NaNNaNNaNNaN22404316NaN21950747NaNNaN0
1HS2014201401January 2014402Exports826United Kingdom...NaNNaNNaNNaN60497363NaN46923551NaNNaN0
2HS2014201401January 2014402Exports826United Kingdom...NaNNaNNaNNaN2520NaN3410NaNNaN0
\n", "

3 rows × 35 columns

\n", "
" ], "text/plain": [ " Classification Year Period Period Desc. Aggregate Level Is Leaf Code \\\n", "0 HS 2014 201401 January 2014 4 0 \n", "1 HS 2014 201401 January 2014 4 0 \n", "2 HS 2014 201401 January 2014 4 0 \n", "\n", " Trade Flow Code Trade Flow Reporter Code Reporter ... Qty \\\n", "0 1 Imports 826 United Kingdom ... NaN \n", "1 2 Exports 826 United Kingdom ... NaN \n", "2 2 Exports 826 United Kingdom ... NaN \n", "\n", " Alt Qty Unit Code Alt Qty Unit Alt Qty Netweight (kg) Gross weight (kg) \\\n", "0 NaN NaN NaN 22404316 NaN \n", "1 NaN NaN NaN 60497363 NaN \n", "2 NaN NaN NaN 2520 NaN \n", "\n", " Trade Value (US$) CIF Trade Value (US$) FOB Trade Value (US$) Flag \n", "0 21950747 NaN NaN 0 \n", "1 46923551 NaN NaN 0 \n", "2 3410 NaN NaN 0 \n", "\n", "[3 rows x 35 columns]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "milk = read_csv(LOCATION, dtype={'Commodity Code':str, 'Reporter Code':str})\n", "milk.head(3)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Limit the columns to make the dataframe easier to work with by selecting just a subset of them." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "activity": false, "collapsed": true, "run_control": { "read_only": false } }, "outputs": [], "source": [ "COLUMNS = ['Year', 'Period','Trade Flow','Reporter', 'Partner', 'Commodity','Commodity Code','Trade Value (US$)']\n", "milk = milk[COLUMNS]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Derive two new dataframes that separate out the 'World' partner data and the data for individual partner countries." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "activity": false, "collapsed": true, "run_control": { "read_only": false } }, "outputs": [], "source": [ "milk_world = milk[milk['Partner'] == 'World']\n", "milk_countries = milk[milk['Partner'] != 'World']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You may wish to store a local copy as a CSV file, for example:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "activity": false, "collapsed": true, "run_control": { "read_only": false } }, "outputs": [], "source": [ "milk_countries.to_csv('countrymilk.csv', index=False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To load the data back in:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "activity": false, "run_control": { "read_only": false } }, "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", "
YearPeriodTrade FlowReporterPartnerCommodityCommodity CodeTrade Value (US$)
02014201401ExportsUnited KingdomAfghanistanMilk and cream, neither concentrated nor sweet...04013410
12014201401ExportsUnited KingdomAustriaMilk and cream, neither concentrated nor sweet...0401316
\n", "
" ], "text/plain": [ " Year Period Trade Flow Reporter Partner \\\n", "0 2014 201401 Exports United Kingdom Afghanistan \n", "1 2014 201401 Exports United Kingdom Austria \n", "\n", " Commodity Commodity Code \\\n", "0 Milk and cream, neither concentrated nor sweet... 0401 \n", "1 Milk and cream, neither concentrated nor sweet... 0401 \n", "\n", " Trade Value (US$) \n", "0 3410 \n", "1 316 " ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "load_test = read_csv('countrymilk.csv', dtype={'Commodity Code':str, 'Reporter Code':str})\n", "load_test.head(2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If you are on a Windows computer, data files may sometimes be saved using a file encoding (*Latin-1*). Pandas may not recognise this by default, in which case you will see a `UnicodeDecodeError`.\n", "\n", "In such cases, opening files in `read_excel()` or `read_csv()` using the parameter `encoding=\"ISO-8859-1\"` or `encoding = \"Latin-1\"` should fix the problem. For example, edit the previous command to read:\n", "\n", "`load_test=read_csv('countrymilk.csv', dtype={'Commodity Code':str}, encoding = \"ISO-8859-1\")`\n", "\n", "### Subsetting Your Data\n", "For large or heterogenous datasets, it is often convenient to create subsets of the data. To further separate out the imports:\n" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "activity": false, "collapsed": true, "run_control": { "read_only": false } }, "outputs": [], "source": [ "milk_imports = milk[milk['Trade Flow'] == 'Imports']\n", "milk_countries_imports = milk_countries[milk_countries['Trade Flow'] == 'Imports']\n", "milk_world_imports=milk_world[milk_world['Trade Flow'] == 'Imports']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Sorting the data\n", "\n", "Having loaded in the data, find the most valuable partners in terms of import trade flow during a particular month by sorting the data by *decreasing* trade value and then selecting the top few rows." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "activity": false, "run_control": { "read_only": false } }, "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", "
YearPeriodTrade FlowReporterPartnerCommodityCommodity CodeTrade Value (US$)
232014201401ImportsUnited KingdomIrelandMilk and cream, neither concentrated nor sweet...040110676138
6262014201401ImportsUnited KingdomFranceMilk and cream, concentrated or sweetened04028020014
6372014201401ImportsUnited KingdomIrelandMilk and cream, concentrated or sweetened04025966962
6502014201401ImportsUnited KingdomNetherlandsMilk and cream, concentrated or sweetened04024650774
6292014201401ImportsUnited KingdomGermanyMilk and cream, concentrated or sweetened04024545873
42014201401ImportsUnited KingdomBelgiumMilk and cream, neither concentrated nor sweet...04014472349
6122014201401ImportsUnited KingdomBelgiumMilk and cream, concentrated or sweetened04023584038
102014201401ImportsUnited KingdomDenmarkMilk and cream, neither concentrated nor sweet...04012233438
6672014201401ImportsUnited KingdomSpainMilk and cream, concentrated or sweetened04021850097
152014201401ImportsUnited KingdomFranceMilk and cream, neither concentrated nor sweet...04011522872
\n", "
" ], "text/plain": [ " Year Period Trade Flow Reporter Partner \\\n", "23 2014 201401 Imports United Kingdom Ireland \n", "626 2014 201401 Imports United Kingdom France \n", "637 2014 201401 Imports United Kingdom Ireland \n", "650 2014 201401 Imports United Kingdom Netherlands \n", "629 2014 201401 Imports United Kingdom Germany \n", "4 2014 201401 Imports United Kingdom Belgium \n", "612 2014 201401 Imports United Kingdom Belgium \n", "10 2014 201401 Imports United Kingdom Denmark \n", "667 2014 201401 Imports United Kingdom Spain \n", "15 2014 201401 Imports United Kingdom France \n", "\n", " Commodity Commodity Code \\\n", "23 Milk and cream, neither concentrated nor sweet... 0401 \n", "626 Milk and cream, concentrated or sweetened 0402 \n", "637 Milk and cream, concentrated or sweetened 0402 \n", "650 Milk and cream, concentrated or sweetened 0402 \n", "629 Milk and cream, concentrated or sweetened 0402 \n", "4 Milk and cream, neither concentrated nor sweet... 0401 \n", "612 Milk and cream, concentrated or sweetened 0402 \n", "10 Milk and cream, neither concentrated nor sweet... 0401 \n", "667 Milk and cream, concentrated or sweetened 0402 \n", "15 Milk and cream, neither concentrated nor sweet... 0401 \n", "\n", " Trade Value (US$) \n", "23 10676138 \n", "626 8020014 \n", "637 5966962 \n", "650 4650774 \n", "629 4545873 \n", "4 4472349 \n", "612 3584038 \n", "10 2233438 \n", "667 1850097 \n", "15 1522872 " ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "milkImportsInJanuary2014 = milk_countries_imports[milk_countries_imports['Period'] == 201401]\n", "milkImportsInJanuary2014.sort_values('Trade Value (US$)',ascending=False).head(10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Task\n", "\n", "To complete these tasks you could copy this notebook and amend the code or create a new notebook to do the analysis for your chosen data.\n", "\n", "Using the [Comtrade Data website](http://comtrade.un.org/data/), identify a dataset that describes the import and export trade flows for a particular service or form of goods between your country (as reporter) and all ('All') the other countries in the world. Get the monthly data for all months in 2014.\n", "\n", "Download the data as a CSV file and add the file to the same folder as the one containing this notebook. Load the data in from the file into a pandas dataframe. Create an easier to work with dataframe that excludes data associated with the 'World' partner. Sort this data to see which countries are the biggest partners in terms of import and export trade flow." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Now go back to the course step and mark it complete.**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exercise 2: Grouping data\n", "\n", "On many occasions, a dataframe may be organised as groups of rows where the group membership is identified based on cell values within one or more 'key' columns. **Grouping** refers to the process whereby rows associated with a particular group are collated so that you can work with just those rows as distinct subsets of the whole dataset.\n", "\n", "The number of groups the dataframe will be split into is based on the number of unique values identified within a single key column, or the number of unique combinations of values for two or more key columns.\n", "\n", "The `groupby()` method runs down each row in a data frame, splitting the rows into separate groups based on the unique values associated with the key column or columns.\n", "\n", "The following is an example of the steps and code needed to split the dataframe from the Exercise 1 example. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Grouping the data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Split the data into two different subsets of data (imports and exports), by grouping on trade flow." ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "activity": false, "collapsed": true, "run_control": { "read_only": false } }, "outputs": [], "source": [ "groups = milk_countries.groupby('Trade Flow')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Inspect the first few rows associated with a particular group:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "activity": false, "run_control": { "read_only": false } }, "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", "
YearPeriodTrade FlowReporterPartnerCommodityCommodity CodeTrade Value (US$)
42014201401ImportsUnited KingdomBelgiumMilk and cream, neither concentrated nor sweet...04014472349
102014201401ImportsUnited KingdomDenmarkMilk and cream, neither concentrated nor sweet...04012233438
152014201401ImportsUnited KingdomFranceMilk and cream, neither concentrated nor sweet...04011522872
172014201401ImportsUnited KingdomGermanyMilk and cream, neither concentrated nor sweet...04011028700
232014201401ImportsUnited KingdomIrelandMilk and cream, neither concentrated nor sweet...040110676138
\n", "
" ], "text/plain": [ " Year Period Trade Flow Reporter Partner \\\n", "4 2014 201401 Imports United Kingdom Belgium \n", "10 2014 201401 Imports United Kingdom Denmark \n", "15 2014 201401 Imports United Kingdom France \n", "17 2014 201401 Imports United Kingdom Germany \n", "23 2014 201401 Imports United Kingdom Ireland \n", "\n", " Commodity Commodity Code \\\n", "4 Milk and cream, neither concentrated nor sweet... 0401 \n", "10 Milk and cream, neither concentrated nor sweet... 0401 \n", "15 Milk and cream, neither concentrated nor sweet... 0401 \n", "17 Milk and cream, neither concentrated nor sweet... 0401 \n", "23 Milk and cream, neither concentrated nor sweet... 0401 \n", "\n", " Trade Value (US$) \n", "4 4472349 \n", "10 2233438 \n", "15 1522872 \n", "17 1028700 \n", "23 10676138 " ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "groups.get_group('Imports').head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As well as grouping on a single term, you can create groups based on multiple columns by passing in several column names as a list. For example, generate groups based on commodity code *and* trade flow, and then preview the keys used to define the groups." ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "activity": false, "run_control": { "read_only": false } }, "outputs": [ { "data": { "text/plain": [ "dict_keys([('0401', 'Exports'), ('0401', 'Imports'), ('0402', 'Exports'), ('0402', 'Imports')])" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "GROUPING_COMMFLOW = ['Commodity Code','Trade Flow']\n", "\n", "groups = milk_countries.groupby(GROUPING_COMMFLOW)\n", "groups.groups.keys()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Retrieve a group based on multiple group levels by passing in a tuple that specifies a value for each index column. For example, if a grouping is based on the `'Partner'` and `'Trade Flow'` columns, the argument of `get_group` has to be a partner/flow pair, like `('France', 'Import')` to get all rows associated with imports from France." ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "activity": false, "run_control": { "read_only": false } }, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
YearPeriodTrade FlowReporterPartnerCommodityCommodity CodeTrade Value (US$)
152014201401ImportsUnited KingdomFranceMilk and cream, neither concentrated nor sweet...04011522872
682014201402ImportsUnited KingdomFranceMilk and cream, neither concentrated nor sweet...04011444455
1202014201403ImportsUnited KingdomFranceMilk and cream, neither concentrated nor sweet...04011414291
1712014201404ImportsUnited KingdomFranceMilk and cream, neither concentrated nor sweet...04011912257
2232014201405ImportsUnited KingdomFranceMilk and cream, neither concentrated nor sweet...04011638838
2732014201406ImportsUnited KingdomFranceMilk and cream, neither concentrated nor sweet...04011449614
3272014201407ImportsUnited KingdomFranceMilk and cream, neither concentrated nor sweet...04012096771
3702014201408ImportsUnited KingdomFranceMilk and cream, neither concentrated nor sweet...04011474883
4162014201409ImportsUnited KingdomFranceMilk and cream, neither concentrated nor sweet...04011259777
4662014201410ImportsUnited KingdomFranceMilk and cream, neither concentrated nor sweet...04011483422
5142014201411ImportsUnited KingdomFranceMilk and cream, neither concentrated nor sweet...04011720555
5652014201412ImportsUnited KingdomFranceMilk and cream, neither concentrated nor sweet...04011958660
6262014201401ImportsUnited KingdomFranceMilk and cream, concentrated or sweetened04028020014
6962014201402ImportsUnited KingdomFranceMilk and cream, concentrated or sweetened04026494426
7602014201403ImportsUnited KingdomFranceMilk and cream, concentrated or sweetened04027545848
8302014201404ImportsUnited KingdomFranceMilk and cream, concentrated or sweetened04025917331
9012014201405ImportsUnited KingdomFranceMilk and cream, concentrated or sweetened04027183954
9702014201406ImportsUnited KingdomFranceMilk and cream, concentrated or sweetened04026948169
10482014201407ImportsUnited KingdomFranceMilk and cream, concentrated or sweetened04026630456
11212014201408ImportsUnited KingdomFranceMilk and cream, concentrated or sweetened04027051096
11932014201409ImportsUnited KingdomFranceMilk and cream, concentrated or sweetened04028514848
12712014201410ImportsUnited KingdomFranceMilk and cream, concentrated or sweetened04028638220
13542014201411ImportsUnited KingdomFranceMilk and cream, concentrated or sweetened04027938295
14252014201412ImportsUnited KingdomFranceMilk and cream, concentrated or sweetened04024749124
\n", "
" ], "text/plain": [ " Year Period Trade Flow Reporter Partner \\\n", "15 2014 201401 Imports United Kingdom France \n", "68 2014 201402 Imports United Kingdom France \n", "120 2014 201403 Imports United Kingdom France \n", "171 2014 201404 Imports United Kingdom France \n", "223 2014 201405 Imports United Kingdom France \n", "273 2014 201406 Imports United Kingdom France \n", "327 2014 201407 Imports United Kingdom France \n", "370 2014 201408 Imports United Kingdom France \n", "416 2014 201409 Imports United Kingdom France \n", "466 2014 201410 Imports United Kingdom France \n", "514 2014 201411 Imports United Kingdom France \n", "565 2014 201412 Imports United Kingdom France \n", "626 2014 201401 Imports United Kingdom France \n", "696 2014 201402 Imports United Kingdom France \n", "760 2014 201403 Imports United Kingdom France \n", "830 2014 201404 Imports United Kingdom France \n", "901 2014 201405 Imports United Kingdom France \n", "970 2014 201406 Imports United Kingdom France \n", "1048 2014 201407 Imports United Kingdom France \n", "1121 2014 201408 Imports United Kingdom France \n", "1193 2014 201409 Imports United Kingdom France \n", "1271 2014 201410 Imports United Kingdom France \n", "1354 2014 201411 Imports United Kingdom France \n", "1425 2014 201412 Imports United Kingdom France \n", "\n", " Commodity Commodity Code \\\n", "15 Milk and cream, neither concentrated nor sweet... 0401 \n", "68 Milk and cream, neither concentrated nor sweet... 0401 \n", "120 Milk and cream, neither concentrated nor sweet... 0401 \n", "171 Milk and cream, neither concentrated nor sweet... 0401 \n", "223 Milk and cream, neither concentrated nor sweet... 0401 \n", "273 Milk and cream, neither concentrated nor sweet... 0401 \n", "327 Milk and cream, neither concentrated nor sweet... 0401 \n", "370 Milk and cream, neither concentrated nor sweet... 0401 \n", "416 Milk and cream, neither concentrated nor sweet... 0401 \n", "466 Milk and cream, neither concentrated nor sweet... 0401 \n", "514 Milk and cream, neither concentrated nor sweet... 0401 \n", "565 Milk and cream, neither concentrated nor sweet... 0401 \n", "626 Milk and cream, concentrated or sweetened 0402 \n", "696 Milk and cream, concentrated or sweetened 0402 \n", "760 Milk and cream, concentrated or sweetened 0402 \n", "830 Milk and cream, concentrated or sweetened 0402 \n", "901 Milk and cream, concentrated or sweetened 0402 \n", "970 Milk and cream, concentrated or sweetened 0402 \n", "1048 Milk and cream, concentrated or sweetened 0402 \n", "1121 Milk and cream, concentrated or sweetened 0402 \n", "1193 Milk and cream, concentrated or sweetened 0402 \n", "1271 Milk and cream, concentrated or sweetened 0402 \n", "1354 Milk and cream, concentrated or sweetened 0402 \n", "1425 Milk and cream, concentrated or sweetened 0402 \n", "\n", " Trade Value (US$) \n", "15 1522872 \n", "68 1444455 \n", "120 1414291 \n", "171 1912257 \n", "223 1638838 \n", "273 1449614 \n", "327 2096771 \n", "370 1474883 \n", "416 1259777 \n", "466 1483422 \n", "514 1720555 \n", "565 1958660 \n", "626 8020014 \n", "696 6494426 \n", "760 7545848 \n", "830 5917331 \n", "901 7183954 \n", "970 6948169 \n", "1048 6630456 \n", "1121 7051096 \n", "1193 8514848 \n", "1271 8638220 \n", "1354 7938295 \n", "1425 4749124 " ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "GROUPING_PARTNERFLOW = ['Partner','Trade Flow']\n", "groups = milk_countries.groupby(GROUPING_PARTNERFLOW)\n", "\n", "GROUP_PARTNERFLOW= ('France','Imports')\n", "groups.get_group( GROUP_PARTNERFLOW )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To find the leading partner for a particular commodity, group by commodity, get the desired group, and then sort the result." ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "activity": false, "run_control": { "read_only": false } }, "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", "
YearPeriodTrade FlowReporterPartnerCommodityCommodity CodeTrade Value (US$)
9542014201406ExportsUnited KingdomAlgeriaMilk and cream, concentrated or sweetened040222411564
8802014201405ExportsUnited KingdomAlgeriaMilk and cream, concentrated or sweetened040219656679
8112014201404ExportsUnited KingdomAlgeriaMilk and cream, concentrated or sweetened040214875816
8412014201404ExportsUnited KingdomIrelandMilk and cream, concentrated or sweetened040211712344
7732014201403ExportsUnited KingdomIrelandMilk and cream, concentrated or sweetened040211015471
\n", "
" ], "text/plain": [ " Year Period Trade Flow Reporter Partner \\\n", "954 2014 201406 Exports United Kingdom Algeria \n", "880 2014 201405 Exports United Kingdom Algeria \n", "811 2014 201404 Exports United Kingdom Algeria \n", "841 2014 201404 Exports United Kingdom Ireland \n", "773 2014 201403 Exports United Kingdom Ireland \n", "\n", " Commodity Commodity Code \\\n", "954 Milk and cream, concentrated or sweetened 0402 \n", "880 Milk and cream, concentrated or sweetened 0402 \n", "811 Milk and cream, concentrated or sweetened 0402 \n", "841 Milk and cream, concentrated or sweetened 0402 \n", "773 Milk and cream, concentrated or sweetened 0402 \n", "\n", " Trade Value (US$) \n", "954 22411564 \n", "880 19656679 \n", "811 14875816 \n", "841 11712344 \n", "773 11015471 " ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "groups = milk_countries.groupby(['Commodity Code'])\n", "groups.get_group('0402').sort_values(\"Trade Value (US$)\", ascending=False).head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Task\n", "\n", "Using your own data set from Exercise 1, try to group the data in a variety of ways, finding the most significant trade partner in each case:\n", "\n", "- by commodity, or commodity code\n", "- by trade flow, commodity and year." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Now go back to the course step and mark it complete.**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exercise 3: Experimenting with Split-Apply-Combine – Summary reports\n", "\n", "Having learned how to group data using the `groupby()` method, you will now start to put those groups to work." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Aggregation operations – Generating *Summary* reports\n", "\n", "Aggegration operations can be invoked using the `aggregate()` method.\n", "\n", "To find the total value of imports traded for each commodity within the period, take the world dataframe, and sum the values over the trade value column within each grouping." ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "activity": false, "run_control": { "read_only": false } }, "outputs": [ { "data": { "text/plain": [ "Commodity Code\n", "0401 222107770\n", "0402 341777173\n", "Name: Trade Value (US$), dtype: int64" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "milk_world_imports.groupby('Commodity Code')['Trade Value (US$)'].aggregate(sum)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "So that's 222 million dollars or so on the 0401 commodity, and 341 million dollars or so on 0402.\n", "\n", "If you total (sum) up all the individual country contributions, you should get similar amounts." ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "activity": false, "run_control": { "read_only": false } }, "outputs": [ { "data": { "text/plain": [ "Commodity Code\n", "0401 222107771\n", "0402 341777171\n", "Name: Trade Value (US$), dtype: int64" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "milk_imports_grouped=milk_countries_imports.groupby('Commodity Code')\n", "milk_imports_grouped['Trade Value (US$)'].aggregate(sum)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Not far off – there are perhaps a few rounding errors that would account for the odd couple of million that appear to be missing..." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Finding top ranked elements within a group\n", "\n", "To find the leading import partners across all the milk products, group by partner, sum (total) the trade value within each group, and then sort the result in descending order before displaying the top few entries." ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "activity": false, "run_control": { "read_only": false } }, "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", "
Trade Value (US$)
Partner
Ireland174315886
France105008176
Germany76612700
Netherlands72209235
Belgium58338745
\n", "
" ], "text/plain": [ " Trade Value (US$)\n", "Partner \n", "Ireland 174315886\n", "France 105008176\n", "Germany 76612700\n", "Netherlands 72209235\n", "Belgium 58338745" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "milk_countries_imports_totals=milk_countries_imports.groupby('Partner')[['Trade Value (US$)']].aggregate(sum)\n", "milk_countries_imports_totals.sort_values('Trade Value (US$)', ascending=False).head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Generating simple charts\n", "\n", "One of the useful features of the `aggregate()` method is that it returns an object that can be plotted from directly, in this example a horizontal bar chart." ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "activity": false, "run_control": { "read_only": false } }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAY4AAAEJCAYAAACDscAcAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAEw5JREFUeJzt3X2QXXV9x/H3lyQkgSCZIWlQHhowzlg0ihQBacUVWkUY\npVWw2FTFwTK2RXSkVbQ+4ThDOg5axQeKBU1pC1hEJioIWljbWoskIiIgJdooGVGeFAmPBr79457A\nsuzePb/NnnvPyb5fM3dynvbezx7C/eQ8R2YiSVJdOww7gCSpWywOSVIRi0OSVMTikCQVsTgkSUUs\nDklSEYtDklTE4pAkFbE4JElF5g47QBMWL16cK1asGHaMabn//vvZeeedhx1jWrqavau5wezD0NXc\nMHX29evX35WZS6d6n+2yOJYtW8a6deuGHWNaRkdHGRkZGXaMaelq9q7mBrMPQ1dzw9TZI+Indd7H\nXVWSpCIWhySpiMUhSSpicUiSilgckqQiFockqYjFIUkqYnFIkopYHJKkIhaHJKmIxSFJKmJxSJKK\nWBySpCIWhySpiMUhSSpicUiSilgckqQiFockqYjFIUkqYnFIkopYHJKkIhaHJKmIxSFJKmJxSJKK\nWBySpCIWhySpSGTmsDPMuL33XZE7vPbjw44xLaeu3MKZN8wddoxp6Wr2ruYGsw9Dm3NvXH103/mj\no6OMjIxMOj8i1mfmgVN9jlsckqQiFockqYjFIUkqYnFIkopYHJKkIhaHJKmIxSFJKmJxSJKKWByS\npCIWhySpiMUhSSpicUiSilgckqQiFockqYjFIUkqYnFIkopYHJKkIhaHJKmIxSFJKmJxSJKKWByS\npCIWhySpSKPFERFHRsQtEbEhIk4bN++siNg8Znx+RFxULXtNRCyvpv9hRKyPiBuqPw9vMrMkqb/G\niiMi5gCfAl4B7Ae8LiL2q+YdCCwe9yMnAr/MzBXAx4C/q6bfBbwyM1cCbwTObyqzJGlqTW5xHARs\nyMwfZ+YjwIXAMVWhfAR457jljwHWVMMXA0dERGTmdZn5s2r6jcCCiJjfYG5JUh9NFscewG1jxjdV\n004G1mbm7ZMtn5lbgHuB3cYt8xrgusx8uJHEkqQpzW3wvWOCafOB44CRmsvn4zMjnkNv99XLJvyw\niJOAkwCWLFnK+1duKYzbDssWwqlmH6iu5gazD0Obc4+Ojvadv3nz5imXqaPJ4tgE7DVmfE9gI/BK\nYENEAOwUERuq4xpbl98UEXOBXYF7ACJiT+BLwBsy80cTfVhmngOcA7D3vivyzBua/NWac+rKLZh9\nsLqaG8w+DG3OvXHVSN/5o6OjjIz0X6aOJndVXQs8KyL2iYgdgeOBSzNz98xcnpnLgQeq0gBYS+/g\nN8CxwFWZmRGxGPgq8O7M/FaDeSVJNTRWHNVxipOBK4CbgS9k5o19fuRcYLeI2AC8A9h6+u7JwArg\nfRHxver1W03lliT11+j2VmZeBlzWZ/6iMcMP0Tv+MX6ZDwMfbiSgJKmYV45LkopYHJKkIhaHJKmI\nxSFJKmJxSJKKWBySpCIWhySpSO3iiIidmwwiSeqGKYsjIg6NiJvoXf1NRDw/Ij7deDJJUivV2eL4\nGPBy4G6AzLweOKzJUJKk9qq1qyozbxs36dEGskiSOqDOvapui4hDgazucnsK1W4rSdLsU2eL4y3A\nX9F7Qt8mYP9qXJI0C025xZGZdwGrBpBFktQBkxZHRJzFmEe3jpeZpzSSSJLUav12Va0D1gMLgAOA\nW6vX/nhwXJJmrUm3ODJzDUBEnAC8NDN/U42fDVw5kHSSpNapc3D8GcAuY8YXVdMkSbNQndNxVwPX\nRcTV1fhLgA82lkiS1Gp1zqr6XERcDhxM72D5aZn588aTSZJaqc4WB8BBwIur4QS+3EwcSVLb1bnJ\n4WrgbcBN1euUiDij6WCSpHaqs8VxFLB/Zj4GEBFrgOuAdzcZbFssnDeHW1YfPewY0zI6OsrGVSPD\njjEtXc3e1dxg9mHoau6ZVPd5HIvHDO/aRBBJUjfU2eI4gyfOqgp6t1Rv7daGJKlZdc6quiAiRoEX\n0iuOd3lWlSTNXv3uVfVyYJfMvDgzbwfWVtNXRcQdmfn1QYWUJLVHv2McpwPfnGD6vwMfaiaOJKnt\n+hXHTpl55/iJ1W6qnZuLJElqs37FsSAinrIrKyLmAQubiyRJarN+xXEJ8NmIeHzroho+u5onSZqF\n+hXHe4FfAD+JiPURsR7YCNxZzZMkzUL9nsexBTgtIk4HVlSTN2TmgwNJJklqpTrXcTwI3DCALJKk\nDqh7yxFJkgCLQ5JUqM5t1b8YEUdHhCUjSaq1xfEZ4E+BWyNidUQ8u+FMkqQWm7I4MvMbmbkKOIDe\n6bhfj4j/jog3VRcDSpJmkVq7nyJiN+AE4M30HuL0cXpF4o0OJWmWmfJ03Ii4BHg2cD7wyupOuQAX\nRcS6JsNJktqnzoOc/jEzLxs7ISLmZ+bDmXlgQ7kkSS1VZ1fVhyeY9u2ZDiJJ6oZ+D3LaHdgDWBgR\nL6D39D+ApwE7DSCbJKmF+u2qejm9A+J7Ah8dM/0+4D0NZpIktVi/mxyuAdZExGsy84sDzCRJarF+\nu6r+LDP/GVgeEe8YPz8zPzrBj0mStnP9dlVtfYDTokEEkSR1Q79dVf9Q/Xn64OJIktqu366qT/T7\nwcw8ZebjSJLart91HOur1wJ6txe5tXrtDzzafDRJUhtNdVYVEXEC8NLM/E01fjZw5UDSSZJap86V\n488AdhkzvqiaJkmahercq2o1cF1EXF2NvwT4YGOJJEmtNmVxZObnIuJy4GAggdMy8+eNJ5MktVKd\nLQ6Ag4AXV8MJfLmZOJKktqvzzPHVwNuAm6rXKRFxRtPBJEntVGeL4yhg/8x8DCAi1tB7CuC7mwwm\nSWqnWo+OBRaPGd61iSCSpG6os8VxBk+cVRXAYbi1IUmzVp2zqi6IiFHghfSK412eVSVJs1fdXVVL\nqz/nAIdGxKsbyiNJarkptzgi4jzgecCNwGPV5AQuaTCXJKml6hzjOCQz92s8iSSpE+rsqvp2RFgc\nkiSg3hbHGnrl8XPgYXoHyDMzn9doMklSK9UpjvOA1wM38MQxDknSLFWnOH6amWsbTyJJ6oQ6xfHD\niPhXejc2fHjrxMz0rCpJmoXqFMdCeoXxsjHTPB1XkmapOleOv2kQQSRJ3VDnAsB9gLcCy8cun5mv\nai6WJKmt6uyquhQ4l94xDs+qkqRZrk5xPJSZn2g8iSSpE+oUx8cj4gPAlTz5rKrvNpZKktRadYpj\nJb0LAA/nyTc5PLypUJKk9qpTHH8M7JuZjzQdZqY8+JtHWX7aV4cdY1pOXbmFE8w+UF3NDc1k37j6\n6Bl9P21/6tzk8Hqe/OhYSdIsVmeLYxm9q8ev5cnHODwdV5JmoTrF8YHGU0iSOqPOlePfjIhl9J45\nDvCdzLyj2ViSpLaa8hhHRLwW+A5wHPBa4JqIOLbpYJKkdqqzq+pvgRdu3cqIiKXAN4CLmwwmSWqn\nOmdV7TBu19TdNX9OkrQdqrPF8bWIuAK4oBr/E+Dy5iJJktqszsHxv4mIVwO/T+954+dk5pcaTyZJ\naqVJiyMiVgDLMvNb1dP+LqmmHxYRz8zMHw0qpCSpPfodq/h74L4Jpj9QzZMkzUL9imN5Zn5//MTM\nXEfvoU6SpFmoX3Es6DNv4UwHkSR1Q7/iuDYi/nz8xIg4EVjfXCRJUpv1O6vq7cCXImIVTxTFgcCO\n9G61LkmahSYtjsz8BXBoRLwUeG41+auZedVAkkmSWqnOdRxXA1cPIIskqQO8dYgkqYjFIUkqYnFI\nkopYHJKkIhaHJKmIxSFJKtJocUTEkRFxS0RsiIjTxs07KyI2jxmfHxEXVcteExHLq+m7RcTVEbE5\nIj7ZZF5J0tQaK46ImAN8CngFsB/wuojYr5p3ILB43I+cCPwyM1cAHwP+rpr+EPA+4K+byipJqq/J\nLY6DgA2Z+ePMfAS4EDimKpSPAO8ct/wxwJpq+GLgiIiIzLw/M/+LXoFIkoaszqNjp2sP4LYx45uA\ng4GTgbWZeXtETLh8Zm6JiHuB3YC76nxYRJwEnASwZMlS3r9yyzb/AsOwbCGcavaB6mpuaCb76Ojo\njL7fZDZv3jywz5pJXc0NM5e9yeKICabNB44DRmoun3U/LDPPAc4B2HvfFXnmDU3+as05deUWzD5Y\nXc0NzWTfuGpkRt9vMqOjo4yMDOazZlJXc8PMZW9yV9UmYK8x43sCG4EVwIaI2AjsFBEbxi8fEXOB\nXYF7GswnSZqGJovjWuBZEbFPROwIHA9cmpm7Z+byzFwOPFAdDAdYC7yxGj4WuCoza29xSJIGo7Ht\n8+o4xcnAFcAc4LzMvLHPj5wLnF9tgdxDr2gAqLZOngbsGBF/BLwsM29qKrskaXKN7tjNzMuAy/rM\nXzRm+CF6xz8mWm75jIeTJE2LV45LkopYHJKkIhaHJKmIxSFJKmJxSJKKWBySpCIWhySpiMUhSSpi\ncUiSilgckqQiFockqYjFIUkqYnFIkopYHJKkIhaHJKmIxSFJKmJxSJKKWBySpCIWhySpiMUhSSpi\ncUiSilgckqQic4cdoAkL583hltVHDzvGtIyOjrJx1ciwY0xLV7N3NTd0O7u6yy0OSVIRi0OSVMTi\nkCQVsTgkSUUsDklSEYtDklTE4pAkFbE4JElFLA5JUhGLQ5JUxOKQJBWxOCRJRSwOSVIRi0OSVMTi\nkCQVsTgkSUUsDklSEYtDklTE4pAkFbE4JElFLA5JUhGLQ5JUxOKQJBWxOCRJRSwOSVIRi0OSVCQy\nc9gZZlxE3AfcMuwc07QEuGvYIaapq9m7mhvMPgxdzQ1TZ//tzFw61ZvMnbk8rXJLZh447BDTERHr\nzD5YXc0NZh+GruaGmcvuripJUhGLQ5JUZHstjnOGHWAbmH3wupobzD4MXc0NM5R9uzw4Lklqzva6\nxSFJakiniyMijoyIWyJiQ0ScNsH8+RFxUTX/mohYPviUE6uR/YSIuDMivle93jyMnONFxHkRcUdE\n/GCS+RERn6h+r+9HxAGDzjiRGrlHIuLeMev7/YPOOJmI2Csiro6ImyPixoh42wTLtG6918zdyvUe\nEQsi4jsRcX2V/fQJlmnl90vN7Nv2/ZKZnXwBc4AfAfsCOwLXA/uNW+YvgbOr4eOBi4aduyD7CcAn\nh511guyHAQcAP5hk/lHA5UAAhwDXDDtzzdwjwFeGnXOSbE8HDqiGdwH+d4K/L61b7zVzt3K9V+tx\nUTU8D7gGOGTcMm39fqmTfZu+X7q8xXEQsCEzf5yZjwAXAseMW+YYYE01fDFwRETEADNOpk72VsrM\n/wDu6bPIMcA/Zc//AIsj4umDSTe5GrlbKzNvz8zvVsP3ATcDe4xbrHXrvWbuVqrW4+ZqdF71Gn9A\nuJXfLzWzb5MuF8cewG1jxjfx1L+Ujy+TmVuAe4HdBpKuvzrZAV5T7Xa4OCL2Gky0bVb3d2ujF1Wb\n95dHxHOGHWYi1e6QF9D7V+RYrV7vfXJDS9d7RMyJiO8BdwBfz8xJ13nLvl/qZIdt+H7pcnFM1Ozj\nW7XOMsNQJ9eXgeWZ+TzgGzzxL5u2a+s6n8p36d1u4fnAWcClQ87zFBGxCPgi8PbM/PX42RP8SCvW\n+xS5W7veM/PRzNwf2BM4KCKeO26R1q7zGtm36fuly8WxCRjbknsCP5tsmYiYC+xKO3ZXTJk9M+/O\nzIer0c8CvzugbNuqzn+X1snMX2/dvM/My4B5EbFkyLEeFxHz6H35/ktmXjLBIq1c71Plbvt6B8jM\nXwGjwJHjZrX1++Vxk2Xf1u+XLhfHtcCzImKfiNiR3sGpteOWWQu8sRo+FrgqqyNDQzZl9nH7p19F\nb/9wF6wF3lCd5XMIcG9m3j7sUFOJiN237p+OiIPo/b9x93BT9VS5zgVuzsyPTrJY69Z7ndxtXe8R\nsTQiFlfDC4E/AH44brFWfr/Uyb6t3y+dvclhZm6JiJOBK+idpXReZt4YER8C1mXmWnp/ac+PiA30\n/iVw/PASP6Fm9lMi4lXAFnrZTxha4DEi4gJ6Z8IsiYhNwAfoHXwjM88GLqN3hs8G4AHgTcNJ+mQ1\nch8L/EVEbAEeBI5vw5dA5feA1wM3VPutAd4D7A2tXu91crd1vT8dWBMRc+iV2Rcy8ytd+H6hXvZt\n+n7xynFJUpEu76qSJA2BxSFJKmJxSJKKWBySpCIWhyR1XExxE89xy+5d3XzyuurK8aNKP8/ikKTu\n+zxPvUBxMu+ld4ruC+idQvzp0g+zOCSp4ya6iWdEPDMivhYR6yPiPyPi2VsXB55WDe/KNO4w0NkL\nACVJfZ0DvCUzb42Ig+ltWRwOfBC4MiLeCuxM78ryIhaHJG1nqhtLHgr825g7vc+v/nwd8PnMPDMi\nXkTv6vfnZuZjdd/f4pCk7c8OwK+qO+SOdyLV8ZDM/HZELACW0LsFe+03lyRtR6rb1/9fRBwHjz9a\n+PnV7J8CR1TTfwdYANxZ8v7eq0qSOm7sTTyBX9C7iedVwGfo3fRwHnBhZn4oIvajdyv1RfQOlL8z\nM68s+jyLQ5JUwl1VkqQiFockqYjFIUkqYnFIkopYHJKkIhaHJKmIxSFJKmJxSJKK/D+4F9oh1Ff6\nkAAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "milk_imports_grouped['Trade Value (US$)'].aggregate(sum).plot(kind='barh')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Generating alternative groupings\n", "\n", "Reports can also be generated to show the total imports per month for each commodity: group on commodity, trade flow and period, and then sum the trade values contained within each group." ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "activity": false, "run_control": { "read_only": false } }, "outputs": [ { "data": { "text/plain": [ "Commodity Trade Flow Period\n", "Milk and cream, concentrated or sweetened Imports 201401 30423330\n", " 201402 20614513\n", " 201403 26335257\n", " 201404 24770338\n", " 201405 26409462\n", " 201406 29081876\n", " 201407 25668642\n", " 201408 23360790\n", " 201409 37418160\n", " 201410 38012444\n", " 201411 39465351\n", " 201412 20217008\n", "Milk and cream, neither concentrated nor sweetened Imports 201401 21950746\n", " 201402 18685554\n", " 201403 17984197\n", " 201404 19440269\n", " 201405 21665662\n", " 201406 16022428\n", " 201407 19128109\n", " 201408 16934043\n", " 201409 19284385\n", " 201410 18353099\n", " 201411 17617864\n", " 201412 15041415\n", "Name: Trade Value (US$), dtype: int64" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "monthlies=milk_countries_imports.groupby(['Commodity','Trade Flow','Period'])['Trade Value (US$)'].aggregate(sum)\n", "monthlies" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The `groupby()` method *splits* the data into separate distinct groups of rows, and then the `aggregate()` method takes each group of rows from the results of the `groupby()` operation, *applies* the specified aggregation function, and then *combines* the results in the output. \n", "\n", "The aggregation function itself is applied to all columns of an appropriate type. In the example, the only numeric column that makes sense to aggregate over is the trade value column.\n", "\n", "As well as built in summary operations, such as finding the total (`sum`), or maximum or minimum value in a group (`max`, `min`), aggregating functions imported from other Python packages can also be used. As shown in the next example, the `numpy` package has a function `mean` that will calculate the mean (simple average) value for a set of values.\n", "\n", "### Generating several aggregation values at the same time\n", "To generate several aggregate reports in a single line of code, provide a list of several aggregating operations to the `aggregate()` method:" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "activity": false, "run_control": { "read_only": false } }, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
summinmaxmean
CommodityTrade FlowPeriod
Milk and cream, concentrated or sweetenedExports20140140215103589084606.933638e+05
20140232298379296345866.333015e+05
20140342987355116110154718.266799e+05
201404529005175148758161.037265e+06
2014055598792710196566799.653091e+05
2014065959410124224115641.045511e+06
20140733370590784302855.959034e+05
201408350802152374315346.048313e+05
201409273209153754989554.793143e+05
201410303878622140744244.675056e+05
201411234172853547219744.181658e+05
2014123130103421762673105.491409e+05
Imports2014013042333093280200142.535278e+06
20140220614513142764944261.717876e+06
2014032633525750775458482.025789e+06
2014042477033834659564781.548146e+06
20140526409462771839541.886390e+06
2014062908187635283375971.938792e+06
2014072566864241366304561.711243e+06
2014082336079029270510961.946732e+06
2014093741816028485148482.338635e+06
2014103801244443299419052.111802e+06
2014113946535156086307812.466584e+06
2014122021700841147491241.555154e+06
Milk and cream, neither concentrated nor sweetenedExports2014014692355120320696891.303432e+06
2014024019133715303367271.148324e+06
2014034379406948273028431.183623e+06
2014044229526117300127761.143115e+06
20140540213208175304361211.182741e+06
2014063972179930310436371.134909e+06
20140739508126365299430281.162004e+06
2014082665748828235738489.873144e+05
2014093327937811286192759.244272e+05
2014102661555511213600688.585663e+05
2014112587667327202061007.393335e+05
2014122871420733214344557.003465e+05
Imports2014012195074668106761381.688519e+06
2014021868555412100915441.334682e+06
20140317984197440588432851.383400e+06
2014041944026956774533881.215017e+06
20140521665662912110659261.547547e+06
2014061602242825075974071.232494e+06
20140719128109464477091741.366294e+06
20140816934043454390933821.302619e+06
20140919284385440115833141.483414e+06
201410183530996568103702761.411777e+06
2014111761786442199396121.258419e+06
20141215041415257269561931.157032e+06
\n", "
" ], "text/plain": [ " sum \\\n", "Commodity Trade Flow Period \n", "Milk and cream, concentrated or sweetened Exports 201401 40215103 \n", " 201402 32298379 \n", " 201403 42987355 \n", " 201404 52900517 \n", " 201405 55987927 \n", " 201406 59594101 \n", " 201407 33370590 \n", " 201408 35080215 \n", " 201409 27320915 \n", " 201410 30387862 \n", " 201411 23417285 \n", " 201412 31301034 \n", " Imports 201401 30423330 \n", " 201402 20614513 \n", " 201403 26335257 \n", " 201404 24770338 \n", " 201405 26409462 \n", " 201406 29081876 \n", " 201407 25668642 \n", " 201408 23360790 \n", " 201409 37418160 \n", " 201410 38012444 \n", " 201411 39465351 \n", " 201412 20217008 \n", "Milk and cream, neither concentrated nor sweetened Exports 201401 46923551 \n", " 201402 40191337 \n", " 201403 43794069 \n", " 201404 42295261 \n", " 201405 40213208 \n", " 201406 39721799 \n", " 201407 39508126 \n", " 201408 26657488 \n", " 201409 33279378 \n", " 201410 26615555 \n", " 201411 25876673 \n", " 201412 28714207 \n", " Imports 201401 21950746 \n", " 201402 18685554 \n", " 201403 17984197 \n", " 201404 19440269 \n", " 201405 21665662 \n", " 201406 16022428 \n", " 201407 19128109 \n", " 201408 16934043 \n", " 201409 19284385 \n", " 201410 18353099 \n", " 201411 17617864 \n", " 201412 15041415 \n", "\n", " min \\\n", "Commodity Trade Flow Period \n", "Milk and cream, concentrated or sweetened Exports 201401 5 \n", " 201402 2 \n", " 201403 116 \n", " 201404 5 \n", " 201405 10 \n", " 201406 24 \n", " 201407 7 \n", " 201408 23 \n", " 201409 37 \n", " 201410 21 \n", " 201411 35 \n", " 201412 217 \n", " Imports 201401 932 \n", " 201402 1427 \n", " 201403 507 \n", " 201404 346 \n", " 201405 7 \n", " 201406 352 \n", " 201407 413 \n", " 201408 292 \n", " 201409 284 \n", " 201410 432 \n", " 201411 560 \n", " 201412 411 \n", "Milk and cream, neither concentrated nor sweetened Exports 201401 20 \n", " 201402 15 \n", " 201403 48 \n", " 201404 17 \n", " 201405 175 \n", " 201406 30 \n", " 201407 365 \n", " 201408 28 \n", " 201409 11 \n", " 201410 11 \n", " 201411 27 \n", " 201412 33 \n", " Imports 201401 68 \n", " 201402 12 \n", " 201403 4405 \n", " 201404 567 \n", " 201405 912 \n", " 201406 250 \n", " 201407 4644 \n", " 201408 4543 \n", " 201409 440 \n", " 201410 6568 \n", " 201411 421 \n", " 201412 2572 \n", "\n", " max \\\n", "Commodity Trade Flow Period \n", "Milk and cream, concentrated or sweetened Exports 201401 8908460 \n", " 201402 9634586 \n", " 201403 11015471 \n", " 201404 14875816 \n", " 201405 19656679 \n", " 201406 22411564 \n", " 201407 8430285 \n", " 201408 7431534 \n", " 201409 5498955 \n", " 201410 4074424 \n", " 201411 4721974 \n", " 201412 6267310 \n", " Imports 201401 8020014 \n", " 201402 6494426 \n", " 201403 7545848 \n", " 201404 5956478 \n", " 201405 7183954 \n", " 201406 8337597 \n", " 201407 6630456 \n", " 201408 7051096 \n", " 201409 8514848 \n", " 201410 9941905 \n", " 201411 8630781 \n", " 201412 4749124 \n", "Milk and cream, neither concentrated nor sweetened Exports 201401 32069689 \n", " 201402 30336727 \n", " 201403 27302843 \n", " 201404 30012776 \n", " 201405 30436121 \n", " 201406 31043637 \n", " 201407 29943028 \n", " 201408 23573848 \n", " 201409 28619275 \n", " 201410 21360068 \n", " 201411 20206100 \n", " 201412 21434455 \n", " Imports 201401 10676138 \n", " 201402 10091544 \n", " 201403 8843285 \n", " 201404 7453388 \n", " 201405 11065926 \n", " 201406 7597407 \n", " 201407 7709174 \n", " 201408 9093382 \n", " 201409 11583314 \n", " 201410 10370276 \n", " 201411 9939612 \n", " 201412 6956193 \n", "\n", " mean \n", "Commodity Trade Flow Period \n", "Milk and cream, concentrated or sweetened Exports 201401 6.933638e+05 \n", " 201402 6.333015e+05 \n", " 201403 8.266799e+05 \n", " 201404 1.037265e+06 \n", " 201405 9.653091e+05 \n", " 201406 1.045511e+06 \n", " 201407 5.959034e+05 \n", " 201408 6.048313e+05 \n", " 201409 4.793143e+05 \n", " 201410 4.675056e+05 \n", " 201411 4.181658e+05 \n", " 201412 5.491409e+05 \n", " Imports 201401 2.535278e+06 \n", " 201402 1.717876e+06 \n", " 201403 2.025789e+06 \n", " 201404 1.548146e+06 \n", " 201405 1.886390e+06 \n", " 201406 1.938792e+06 \n", " 201407 1.711243e+06 \n", " 201408 1.946732e+06 \n", " 201409 2.338635e+06 \n", " 201410 2.111802e+06 \n", " 201411 2.466584e+06 \n", " 201412 1.555154e+06 \n", "Milk and cream, neither concentrated nor sweetened Exports 201401 1.303432e+06 \n", " 201402 1.148324e+06 \n", " 201403 1.183623e+06 \n", " 201404 1.143115e+06 \n", " 201405 1.182741e+06 \n", " 201406 1.134909e+06 \n", " 201407 1.162004e+06 \n", " 201408 9.873144e+05 \n", " 201409 9.244272e+05 \n", " 201410 8.585663e+05 \n", " 201411 7.393335e+05 \n", " 201412 7.003465e+05 \n", " Imports 201401 1.688519e+06 \n", " 201402 1.334682e+06 \n", " 201403 1.383400e+06 \n", " 201404 1.215017e+06 \n", " 201405 1.547547e+06 \n", " 201406 1.232494e+06 \n", " 201407 1.366294e+06 \n", " 201408 1.302619e+06 \n", " 201409 1.483414e+06 \n", " 201410 1.411777e+06 \n", " 201411 1.258419e+06 \n", " 201412 1.157032e+06 " ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from numpy import mean\n", "\n", "GROUPING_COMMFLOWPERIOD=['Commodity','Trade Flow','Period']\n", "milk_countries.groupby(GROUPING_COMMFLOWPERIOD)['Trade Value (US$)'].aggregate([sum, min, max, mean])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "By combining different grouping combinations and aggregate functions, you can quickly ask a range of questions over the data or generate a wide variety of charts from it.\n", "\n", "Sometimes, however, it can be quite hard to see any 'outstanding' values in a complex pivot table. In such cases, a chart may help you see which values are significantly larger or smaller than the other values.\n", "\n", "For example, plot the maximum value by month across each code/period combination to see which month saw the maximum peak flow of imports from a single partner." ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "activity": false, "run_control": { "read_only": false } }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAcIAAAEJCAYAAAAHNycyAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJztnXmcJVV5v58vywy7IJug4qiIC6Aoq8YgaAaX/BCN7Iig\naGLQmLglEFf8ubDE3YhKAhIYQQXEUZYJIENAQJkBBgdcWBx11IiAqMM+w5s/zrn07dv3VlX3dHV1\n3f4+n8/9TFfdqlPnvTNzT5/lOa8iAmOMMWamskbTFTDGGGOaxA2hMcaYGY0bQmOMMTMaN4TGGGNm\nNG4IjTHGzGjcEBpjjJnRuCE0xhgzo3FDaIwxZkbjhtAYY8yMZq2mK2DK2XjjjWPbbbdtuhq1cN99\n97H++us3XY1acGztZZjjm0mxLV68+K6I2LzsPjeELWDLLbdk0aJFTVejFhYuXMhee+3VdDVqwbG1\nl2GObybFJukXVe6rbWhU0rqSrpC0Zj4+QtKt+XVEn+vnS1radfx4SZfk6y+RtEk+f5ikm/LraknP\nq1CXeZJ+KmmppFMlrZ3PS9LnJN2Wy3tB1z0XS7pX0ncHlPl5SSu6jveUdL2klZL27zq/k6RrJN2c\nn3FQ13tnS3pGWf2NMcbUR509wjcB50XEKkmPBz4E7AIEsFjS/Ij4A4CkvwFW9Nx/DHBZRBwv6Zh8\n/C/Az4GXRMQfJL0S+Aqwe0ld5gGvzz9/DXgzcDLwSuAZ+bV7Ptcp6yRgPeDveguTtAuwcc/pXwJH\nAu/pOX8/8IaIuFXS1jn2BRFxb37ePwNvKar8A4+sYs4xF5SE2E7eveNKjnRslVl2/F9PannGmHoX\nyxwGfDv//HLgkoi4Jzd+lwCvAJC0AfAu4KM99+8HnJ5/Ph14DUBEXN1pQIFrgSeVVSQiLowM8MOu\ne/YD/iu/dS2wsaSt8j2XAX/uLSv3cE8iNWDdz1gWETcBj/ac/1lE3Jp//g1wJ9AZs74S+CtJHqI2\nxpiGqOULWNIs4GkRsSyfeiLwq65LludzAP8f+CSp59TNlhHxW4CI+K2kLfo86ijgonHUa23gcOAf\nS+r124Ji3g7Mz3Wq+ujO83cDZgG3A0TEo5JuA54HLO659m+BvwXYbLPN+eCOK8f1rLaw5bqp5zSM\n1BHbwoULJ7W8ibJixYppU5c6GOb4HNtY6uqJbAbc23Xcr8UISTsB20bEOyXNGc8DJO1NaghfPI7b\nvgj8T0RcWVSvgmduDRwA7DWOZ3bu3Qo4AzgiIrp7jXcCW9PTEEbEV0jDvmzztG3jkz8azk7ju3dc\niWOrzrLD9prU8ibKMC+4gOGOz7GNpa5voAeAdbqOlzO68XgSsBB4IbCzpGW5LltIWhgRewG/k7RV\n7nltRWowAJD0XOA/gFdGxN1VKiTpQ6Qhye45v+XAk3vq9ZuCYp4PbAvclnuD60m6LSIK3QZJGwEX\nAO/PQ7DdrEP6vAay7tpr8tMhnRtauHDhtPlyn2yGOTZjhola5gjzHN6akjqN4QJgH0mb5NWf+wAL\nIuLkiNg6IuaQenY/y40gwHygs7r0CPJ8o6RtgPOAwyPiZ93PlXSZpCfSg6Q3k+YpD+npjc0H3pBX\nj+4B/LEzHDsgrgsi4gkRMSfX+f4KjeAs4Fukuchv9rlkO+DmojKMMcbUR52LZf6bPGwZEfeQ5gKv\ny6+P5HNFHA/MlXQrMDcfA3wQ2BT4oqQbJS0CkLQGqbfWr9wvAVsC1+R7PpjPXwjcAdwGnAIc3blB\n0pXAN4GXSVou6eVFlZW0q6TlpKHTL0vqNG4HAnsCR+Zn35iHhJG0JfBAUeNrjDGmXuqcnPkCaTXo\npQARcSpw6qCL88KaHbqO7wZe1ue6N5P0h16eA5wbEWOGGSOib5x5FenbBrz3l4Pq2nXNBl0/X0ef\nFawRcSZw5oAiDgW+XPYcY4wx9VFnj/AnwG5d8nqtQn1ELI2Id/WrSJNCfUlZBwPfL/wUjTHG1Erd\nQv0XI+KRGS7UF5X1z8C7sVDfdDVqwbG1l8mIz5sftAcL9TUL9UVlYaHeGGMax0L9FAr1vViot1Df\nVoY5Npic+KartG6hfiwW6vvUq+CZExbqC7BQ79haxzDHBpMT33R1SC3Uj8VC/RQI9SVYqJ+mXxir\ni2NrL8MenxmNhfqahfoKWKg3xpgGsVBfv1A/sCwL9cYY0zwW6msW6kvKslBvjDENY6F+aoT6QbG/\nmRHFxBhjTANYqK9ZqC+J/cRc/seKKm+hvp04tvYyjPFZ8B+Mhfr6hfqBsZMW6xxSVn9jjDH1YaG+\nfqF+YOy5Vztb0qa9GoiF+vbj2NrLMMbXEc0t1I/FQn2fehU8cyJCfdkzOkL9qIbQQn37cWztZRjj\n63iRFurHYqG+fqF+UOwdLNQPqbjs2NrLsMdnRmOhvn6hvm/suV4CngAsKynDGGNMTdTZ9+8I9ZdG\nxD2SOkI9VBfqvyHpKNKKzAPy+W6hHmBlROxSQaj/BUmoBzgvIj5CEupfRRLq7wfe2LkhS/DPAjbI\novxREbFgUGUl7Qp8C9gE2FfScRGxfUnsOwPXRsRwTUYYY0yLsFA/NUL9oNgPJ81bGmOMaQgL9ZMn\n1M+W9PVc1g86i38kzZJ0mqQfSVoiaa+uYuYC11f7OI0xxtSBhfrJE+qPAv4QEdtKOhg4ATiInH0+\nInbMCshFknbNc5UnkPY3tVA/hDi29jLR+CyttxML9ZMk1PfU9xzSBtsiDdlelsu8k6SV7JKvs1Bv\njDENY6F+8oT6x8qKiJWS/kha1LME2E/S2SRVY+f85w8t1A+nuNzBsbWXicbXBlHdQv1YLNT3qVfB\nM4uE+kFlnQo8G1hEWrl6NdD9P8xCvWNrHcMcG0w8vja4hxbqx2KhfvKE+k5ZyyWtBTwOuCcPx76z\nqx5XA7d2lWmhvgVfHhPBsbWXYY/PjMZC/eQJ9d313R/4XkSEpPUkrZ/rMZfkPd6Sjy3UG2NMw1io\nnyShHvhP4AxJt+U6HJzPbwEskPQo8GvSHGUHC/XGGNMwFuonT6h/kJHGuvuaZcAzBxRhod4YYxrG\nQn39Qv3akk7PQv2PJR2bz88ieYxXjOtTNcYYM6lYqK9fqD8AmJ2F+vWAWySdFRHLJM3L18wrqryF\n+nbi2CYXy+qmLizU1y/UB7B+Xkm6LvAw8Kd83fmkz8kYY0xDWKivX6g/h9RI/pbUw3xn10KhpcCu\nA+pqob7lOLbJZSolcEvn7cRCfTWaEOp3A1aRpPlNgCslXRoRd0TEKkkPS9owIkb1Pi3Utx/HNrlM\npddn6bydWKgvoSmhHjgUuDgiHgHulPR90lzpHbnM2cCDRXW3UN9OHJsx7cBCfc1CPcmBfGl+xvrA\nHqQVtUjaFPh9biSNMcY0gIX6+oX6fwdOI80HCjgtIm7K7+2d62CMMaYhLNTXL9Sv6Hc+cyhwbNlz\njDHG1IeF+vqF+sMk3dj1elTSTnll7XZ0zX0aY4yZeizU1yzUR8S8/Hwk7Qh8OyJuzMcn4Qz1ls5b\nyGTFZkneTAcs1Ncv1HdzCHBW17Ez1BtjTMNYqK9fqL+r65qDSA0m+TpnqLd03komK7bpKnZbOm8n\nky7U5+HKgUTEeQVvW6jvKUvS7iTdYmnPNc5Q79hax2TFNl1dREvn7aQOoX7f/OcWwIuA7+XjvUky\nfFFDaKF+RKjvcDCjh0U7OEP9NP0yXF0cmzHtYOAcYUS8MSLeSOrVPCciXhcRrwO2LyvUQv0ooZ7s\nOB4AnN1TL2eoN8aYhqkytjGnp3H4HWnZfxkW6kfYE1geEXf03OMM9cYY0zBVGsKFkhaQhvWC9AV/\neYX7LNSPvLeQtLVaL85Qb4wxDVOqT0TE20k9qucBOwFfiYh/qFC2hfqR954r6RpJNytlqu8MGc8F\nrq/wWRpjjKmJqsu+rgZWknqEP6x4j4V6OCgvnDmTNKe5RGmj7c4m2ydgod7SeQsZ5tigWnzeDGB4\nKO0RSjqQ1PjtDxwI/EDS/hXKtlCfJiT3AW6KiCW53LsjYlW+zkK9McY0TJUe4fuAXSPiTgBJm5Pm\n/c4ZdIOF+lFC/XYkZ3IBSd84OyJOzNdZqLd03kqGOTaoFl9bpXQL9WOp0hCu0WkEM3dT3pO0UD9S\n1lq5jruSGvvLJC3OPU6wUG/pvIUMc2xQLb62epQW6sdSZa/RiyUtkHSkpCOBCyjPoddPqO8nrncL\n9VcB20lamK/5XWeYskCo328CQn33gprVEeqXkYX63rJ6hPrlwBURcVdE3E/67F7QVWapUG+MMaZG\nIqL0BbwO+BTwaeC1Fe/5FbBO/vnxpEUum+TXz4HH91w/B1jadXwScEz++RjgxPzzNiTv70V9nnkZ\n8MQ+599MWvCzbs/5vyYNrYqkN/yw5/29gO8WxLii6+e3AV/KPx8MfCP/vAlpZeh6pN7hpcBfd1x7\n4NfAWkWf5XbbbRfDyuWXX950FWrDsbWXYY5vJsUGLIoK7VWlsY2IOBc4t8q1XVio57F5wE/l2AO4\nMCI6y9Es1BtjTMMUbbp9VUS8WNKfGT1vJpKLvlFJ2RbqR947k6RQ9GKh3hhjGqZor9EX5z83jIiN\nul4bVmgEwUL9nHx+jqQHNJKh/ktdxVioN8aYhikcGs3DjTdFxA5F1w3AQn3KPwhwe0Ts1KdeFuqH\nWMx2bPViod1MFoWrRiNlaliilPFhvFio15gM9b1YqDfGmIapslhmK+BmST8E7uucjIhXD7rBQv0o\noR7gqZJuAP4EvD+yxxgW6odazHZs9VKnFG7pvJ3UKdQfN+5SLdR3l/VbYJuIuFvSzsD5kraPiD/l\nayzUO7bWMR1iq1Not3TeTmoT6iPiClLi2LXzz9dRvsDDQn0W6iPioU4dI2IxcDuj8zlaqDfGmAYp\n/ZVO0ltIQ3SPB55OGgL8En3Uhg55yG9NSetkrWAB8PHOyk/SRtTHZpfw5PycOSR5fa98TSfj+/GM\nI0M98IaI+HXP+U6G+pfF2Az1b5d0NmmRTGmGelJG+U65K2Jshvpr6MpQr7Q36z0RsUrS00gLc+7I\n91fKUL/u2mvy0yFdGLBw4cLWblVVhmMzph1UGdt4G7Ab8AOAiLh1wHxdLxbqE3sCH5G0ElgFvLUr\ndgv1xhjTMFUawoci4uHOwpA87DdwHq0LC/WU7spjod4YYxqmyqbbV0j6V2BdSXOBbwLfqXCfhfrR\n128jaYWk9+TjWSSP8YoKn6UxxpiaqNIjPIa0OvNHJLn8QtJClTIs1I8I9ZA2LH9M9ci97Hn5mnlF\nlbdQ306GNTaL7GbYKOwRSno+8DfAVRFxQETsHxGn5CHFMizU5/FkSa8hLZC5ueee80mfkzHGmIYo\n2nT7g6Re1GLgREmfiIhTqhRqoX5EqJf0AKknOxd4T09ZS0kJe/vV1UJ9yxnW2BYuXDjUUjZYOm8r\ndQj1BwE7RcT9kjYFLgYqNYRYqO8u6zjg0xGxoqfhJCsVD0vaMCL+3POehfqWM6yxLTtsr6GWssHS\neVuZaGxF/0sfjJRRnbwrSpWFNR36CfXdtXsSsJDRQv1awBaSFmaX8HeStso9r0FC/SsnINR3z/mt\njlAPWajPLmGnrOUanaF+d2B/SSeS5hUflfRgRHwhlzkbeLBKDMYYYyafoobw6ZLm55/Vc1y416iF\n+hGhHvjLrus/TMpq/4V8vCnw+4h4ZNAzwUJ9Wxnm2IwZJooawv16jv9tnGVbqC9n71wHY4wxDTGw\nIcz7iq4OFurHXv/hnlOHAseWPccYY0x9jGfeDwBJp0s6WVJZsl4L9en8bhrJTr9E0mvz+fVJjfft\nJZ+jMcaYGpnIkrYvANuQNIR/KbjOQn1aebsU2CUrFVuREh1/JyLuk3QWFuqHUjoHxzZd8AYApozK\nPcLcgyEirouIcyOiqBEEC/Uvk6SIuD9GNtVeh9F6hoV6Y4xpmCppmF5EUhU2ALbJQ5F/FxFHF9xj\noX4kQ/1dknYnzY8+hbTatdMwWqgfUukcHNt0YSKCtaXzdlJnhvpPk3p08wEiYomkPUvusVDfVVZE\n/ADYXtKzgdMlXRQRD1qoH17pHBzbdGEiCoul83ZSW4Z6gIj4Vc+pVSW3OEP9iFD/GBHxY+A+ulbH\nYqHeGGMapcqvdL/Kw6ORhzzfAfy46AYL9aMy1D8V+FUeLn0K8ExyRnoL9cMtnTs2Y9pBlYbwrcBn\nSXNgy0mifF/3rgcL9YkXA8dIegR4FDg6Iu7K71moN8aYhiltCPOX9kRWNlqoT+fPAM4YUISFemOM\naZiBc4RZGP/coFeFsi3Up/NzJS2W9KP850vz+VnAdnTNfRpjjJl6inqEi/Kff0HqbX09Hx9AylFY\nhoX6JMvfBewbEb9R2o1nAfDESBnqTwKOBj5WVHkL9e3EsY3FcruZjgzsEUbE6RFxOqmR2DsiPh8R\nnycNV+5UoWwL9UmovyEiOitRbwbWkTQ7H88HDimrvzHGmPqoslhma2BDRhahbJDPDcRC/Wihvuua\n1wE3RMRD+bo/5CHVTXs1EAv17cexjaUtIrel83ZSp1B/PHCDpMvz8UuAD5fcY6G+pyxJ25OGS/fp\nueZO0i8WoxpCC/Xtx7GNpS3KhaXzdlKbUB8Rp5Hmzb5F8vdemIdMi7BQ3yXUS3oS6fN7Q0T0ZptY\nh/R5GWOMaYCqv9Ltxkim9QC+U3SxhfpRQv3GwAU53u/31Eu5vGWDngkW6tuKYzOmHZT2CCUdT5pT\nuyW/3iHpExXK7gj15AavI9RfR3Whfq6kW4G5+RhGC/U3SlqU61km1G9JEupvlPTBfP5C4A6SUH8K\naQVnJ+4rgW+SFr0sl/Tykvr+J7Bp7iG+i7TKFdKc4rbABzSSl7Az37kzcG3XJtzGGGOmmCo9wlcB\nO3V6UpJOB26gXAS3UJ/Of5SxK2I7HE6atzTGGNMQVfMRdjtzj6t4j4X6dH5TSZdLWiHpCz3FzAWu\nr/BZGmOMqYkqPcJPMLJqVMCeVNsWzEJ9EuofBD5A6u3u0HPPCViot3TeQoY5NoCvvmL9pqtgppAq\nq0bPAvYgLVDprBo9u0LZFuqTUH9fRFxF/1RLFuqNMaZhivYafbmk/SEJ7RExPyK+TfqCn1tUaB1C\nPTCZQv3FFeo1iMeE+p7zo4R6oCPUDyQ36LOV0jEZY4xpgKKh0eOAffucv4zkxF1ScK+F+pKyuugr\n1Htnmfbj2NqLd19pJ3XsLLNeRPy+92RE/K+ksgH0fkL9Xl3HTwIWMlqoXwvYQtLC7BL+TtJWeSuz\nQUL9Kycg1HfP+a2OUA9ZqM8uYaes5b1CfQl9hXrvLNN+HFt7+eor1vfuKy1korEV/UteR9JavY5b\nHl5ct6hQC/UjQn3R52ShfrjFbMfWXoa1x2T6U9QQngecIuntEXEfQO4Jfi6/V4Yz1I+UtQzYCJgl\n6TXAPhFxCxbqjTGmcYoawveTVnL+QtIv8rltSF/4H6hQtoX6kffmDCjCQr0xxjRMUT7ClRFxDGne\n68j82iYijomIRyqUXZdQ/yxJ10h6SNJ7uurbtFC/p6TrJa3srLbN53fK9b05P+OgrmJeSOrtGmOM\naYjS2e7cw/rRBMquS6i/B3gH2SusyFQI9b8k/bLwnp7z95PmLW/Nq04XS1oQEfcC7yX5iG8pqryF\n+nbi2CYHZ7U3dVN1i7WJUJdQf2dEXAdU6ZWS76ldqI+IZRFxE/Boz/mfRcSt+effkFa/bp7fvhL4\nq7zK1BhjTAPU0hBOoVA/3nrVKdRXef5uwCzgdoC8gvU24HnjLcsYY8zkUNoTkXQuaZHLRT3qQRG1\nC/UTpE6hvpDc0zwDOKLnc+wI9Yt7rrdQ33Ic2+TQhMpg6byd1CHUdziZpBV8TtI3ga9GxE9K7qlV\nqJ8IUyDUFz17I1Jy3vfnIdhuLNQ7ttYxlbE14StaOm8ndQj1AETEpcClkh5H2iD6Ekm/IiWyPbPf\nCtI6hfoiGhbqB9VpFmlLuv+KiG/2uWQ74OaiMizUtxPHZkw7qDRHmDeFPpK02vIG4LPACyjeb7SW\nDPWSnpAF93cB71fKHr9RBaG+1gz1knbN9ToA+LKkTuN2ICl11ZEayVC/U75nS+CBicw3GmOMmRyq\nzBGeR9ph5Qxg364v7a9LWlRwa11C/f/SJ/WSpB1oVqi/rl+9IuJM4MwBRRwKfLnsOcYYY+qjyiD/\nf0TEhd0nJM2OiIciYpdBN0XEDUqZ2deMiFWrXdMSImIpqeFtE/eSfsEwxhjTEFUawo+ShhC7uYY0\nNDoQSeuS5vZOz8dHkLZtA/hoRJzec/18knKxQz5+PPB1YA5pU+oD89zjs4DT8vPfFxH/VhaApHkk\nmf8Rkkf4d1n0F2mY91UkfePIiLg+33MxKSHxVRHx//qU+XngjZ1eoaQ9gc8AzwUOjohzuq4dVNbL\ngauAW4vqb6G+nTi29jKM8XljgsEUJeZ9gqSdgXUlPV/SC/JrL9KOK2W8ibS59aqunWV2B3YDPtS1\ncKZsZ5lnkHIgHpPPd3aWKW0Au5hHGt7dkZQ5o7NXaffOMn9LXriTOYnkHI6hZGeZr/W5ZVBZJzM2\n070xxpgppGixzMtJjc2TgE+RpPdPkoYf/7VC2d5ZZuS9vmXhnWWMMaZxBn4B56HL0yW9LiLOHU+h\ndewsI2kyd5b5x5J6Fa3ifGxnmewSTpiIeFQpbdPzsFA/dDi29jKM8XVEcwv1YxnYEEp6fV7xOEfS\nmEUoEfGpgnK9s0x1+u4sY6G+/Ti29jKM8XW8Twv1Yyn6m14//7lBwTWD8M4y1em7s0w3FurbiWNr\nL8MenxlN0dDol/Ofx423UO8sMy5Kd5YxxhhTH0VDo58rujEi3lFSdmdnmUsj4h5JnZ1loPrOMt+Q\ndBRpReYBuV5PABYBGwGPSvonUnb6FRTvLPML0s4ykFazfoSkhbyKtLPM/aQ9VcnPuZK00nSDvGPM\nURGxYFBlJe1K2kptE2BfScdFxPZFZXlnGWOMaZ6iodHOnNVfkBqar+fjA+iZzxqAd5YpL8s7yxhj\nTMMotQUFF0iXA/t0NtfOKy//OyL2LrlvXeBGYIcsr89kob5v7Hk/0pdExF1F9d/madvGGgd+tizM\nVjKMixI6OLb2MszxVY2tjQJ+72IZSYuLdkDrUGXT7a2BDbuON8jnyngT8MXc4MxYob4k9hMZvXjH\nGGPMFFOlITweuEHSVyV9Fbge+HiF+yzUl8ROWqxzSNU4jDHGTD5V8hGeJukiUo8mgGPyPN1ALNSP\nYmDseah3tqRN85xod10t1Lccx9Zehjm+qrG1UbqvM0M9pCG9zoKPAL5Tcr2F+q7bSp7REepHNYQW\n6tuPY2svwxxf5TnCFnqUtWWol3Q8sCtpng3gHZJeFBHHFtxmoX70M/bqecbCrmML9S38D1cFx9Ze\nhjm+YY5tolSZI3wVMDciTs0KxCuAwm/lPBe2pqROY7gA2EfSJnmhyD7Agog4OSK2jog5JOfwZ32E\nehiHUC/piX3Od4T6Q/oI9W9QYg8qCPUR8YSImJPrfH8Fob5v7LleIgn6y8piM8YYUw9V+/4bMyKq\nP67iPRbqI7YviX1n4NqIGM7JCGOMaQFVGsJPkFaNXk6a79oTKBoW7WChfuS9QbEfTpq3NMYY0xCl\nQ6MRcRZJLD8vv14YEWdXKPsnwG55pSaSjpB0a34d0XuxpPmSlnYdP17SJfn6SzrunaRnSbpG0kOS\n3tNVz6URMSZLRr5nnqSfSloq6dSuOknS5yTdJukmSS/ouudiSfdK+u6AMj8vaUXX8WxJX89l/aCz\n+EfSLEmnSfqRpCVKiY07zCXpKMYYYxqi6tDo5vnPNYEXSSIiziu5p59QvwtpxeRiSfPzXGKZUH+8\npGPy8b8wItS/pmLdIS30eX3++Wskof5kRgv1u+dzu+frTgLWo4/wPkCoPwr4Q0RsK+lg4ATgIOAt\nABGxY1ZALpK0a56rPAE4GvhYUeUfeGQVc465YBzhtod377iSIx1b6xjm2GC442tTbFO1u01pj1BS\nZ1jvdcC++TVmy7E+zCihvqe+5wAvy4thnkPaGYeIuJOklXS2/LFQb4wxDVOlR7hHRDxnPIXOUKH+\nsbIiYqWkPwKbAkuA/ZRSPT2ZtEDmycAPLdRbXG4rwxwbDHd8bYptvHJ8nUL9NZKeExG3jKPcmSjU\nDyrrVODZpJWuvwCuBrr/FVqod2ytY5hjg+GOr02xjdd3rE2oJw33XSPpf4GHSF/4ERHPLbhnJgr1\nnbKWS1qLpJnck4dj39lVj6uBW7vKtFA/pHKvY2svwxzfMMc2UaoI9aeShhNfwcj84L5FN8xQob67\nvvsD34uIkLSepPVzPeYCKzu9awv1xhjTPFV6hL+MiPkTKHtGCfXAfwJnSLot1+HgfH4LYIGkR4Ff\nMzq1k4V6Y4xpmCoN4U8kfY200fZDnZMV9ImZJtQ/SG6se65ZBjxzQBEW6o0xpmGqDI2uS2oA92F8\n+oSF+nR+bUmnZ6H+x5KOzednkTzGKyp8lsYYY2qiSj7CN5ZdMwAL9UmoPwCYnYX69YBbJJ0VEcsk\nzcvXzKMAC/XtxLG1l6bimyqB3IymilD/VEmfknRe7rXNl1RlztBCfZqQDGD9vJJ0XeBh4E/5uvNJ\nn5MxxpiGqDJHeD5pIch3gEdLrgUs1PcI9eeQGsnfknqY7+xaKLSUlOuxX10t1Lccx9ZemopvKrLC\nT1Q6bwN1CvUPRsTnxlmuhfqRsnYDVpGk+U2AKyVdGhF3RMQqSQ9L2jAiRvU+LdS3H8fWXpqKbyr8\nvolK522gTqH+s1lG/29GrxotyppgoT4L9cChwMUR8Qhwp6Tvk+ZK78hlzgYeLKq7hfp24tjay7DH\nZ0ZTZdXojqQMCseThjA/Cfxb0Q0W6keEepID+dL8jPVJKa1+kuu1KfD73EgaY4xpgCo9wteS5vse\nHmfZFuoT/w6cRpoPFHBaRNyU39s718EYY0xDVGkIl5BUgfEOTVqoT+dX9DufORQ4tuw5xhhj6qPK\n0OiWpN1lFoxTn7BQn84fJunGrtejknbKK2u3YzXnPo0xxqweVXqEH5pg2Rbq4aCImJefj6QdgW9H\nxI35+CTpfF8rAAANcElEQVScoX5oxWzHNn2xuG66Ke0RRsQVpN7dhvn143yuDAv1PaIhKRv9WV3H\nzlBvjDENU9ojlHQg6Yt/IWmxx+clvTcizim4x0L9iFB/V9c1B5EaTPJ1zlA/xGK2Y5u+lEnXls7b\nSZ1C/fuAXSPiTgBJm5MWwAxsCLFQP6YsSbuTdIulPdc4Q71jax1tj63MEbR03k7qFOrX6DSCmbsp\nH1K1UD8i1Hc4mNHDoh2coX5IxWXHZkw7qLJq9OK8YvRISUcCFwAXFd1goX6UUI+kNUg9ybN76uUM\n9cYY0zBV0jC9N6/qfDFp+O8rEfGtCmVbqB9hT2B5RNzRc48z1BtjTMMMbAglbUtasPL9SNnoz8vn\n95T09Ii4vaRsC/Uj7y0kba3WizPUG2NMwxQNjX6GPvoAqef0mQplW6gfee+5uc43K2Wq7wwZzwWK\nNi83xhhTM0VDo3O69sR8jIhYVHGFp4V6OCgvnDkTODwilihttN1xIE/AQn2rxewiHNv0wQK9KaKo\nR7hOwXvrVijbQn2akNwHuCkiluRy746IVfk6C/XGGNMwRT3C6yS9JSJO6T6ZF68sLirUQv0ooX47\nkjO5gKRvnB0RJ+brLNS3XMwuwrFNH8YrWVs6byd1CPX/BHxL0mGMNHy7ALNIqZmKsFA/UtZapNWz\nu5Ia+8skLc49TrBQ32oxuwjHNn0Yr/No6bydTLpQHxG/A14kaW9GVnNeEBHfq1CuhfoRoX45cEVE\n3JXrcSHwAqDTEFqoH1Ix27EZ0w6qbLp9eUR8Pr+qNIIW6kcL9QuA50paLzeQLwFuyfWyUG+MMQ1T\n59iGhXoemwf8VI49gAsjorPczkK9McY0TJ0NoYX6kffOJCkUvVioN8aYhqmy1+hEsVCfzs+R9IBG\nMtR/qasYC/XGGNMwdfYILdSn/IMAt0fETn3qZaG+ZWL2eHBs7WWY42situm+oUGdPUIL9RqTob4X\nC/XGGNMwtfQILdSPEuoBnirpBuBPwPs7HqOF+vaJ2ePBsbWXYY6vidimSuCvM0P9RLBQP1LWb4Ft\nIuJuSTsD50vaPiL+lK+xUO/YWscwxwbDHV8TsU2Vc1pnhvqJYKE+C/V5OPYhgIhYLOl20rZri3KZ\nFuqHVMx2bO1lmOMb5tgmSi1zhBbqR4R6SZvneUUkPY20MOeOfGyh3hhjGsZCff0Z6vcEPiJpJbAK\neGtX7BbqjTGmYSzU1yzUR8S5wLkDirBQb4wxDWOhfgoy1Of3t5G0olPnvLL2lcAVpZ+kMcaY2rBQ\nPzVCPcCngYs6BxHxsKR5+Zp5RZW3UN9OHFtzTHeB20wvLNRPgVAv6TWkBTI399xzPulzMsYY0xAW\n6msW6iU9QOrJzgXe01PWUlLC3n51tVDfchxbc6yuwO0s7u3EQn01mhDqjwM+HRErendci4hVkh6W\ntGFE/LnnPQv1LcexNcfqenLO4t5OLNSX0JRQT5pz3F/SiaR5xUclPRgRX8hlzgYeLKq7hfp24tiM\naQcW6msW6iPiL7uu/wzw8U4jKGlT4PcRUXm+0xhjzORiob5+ob6IvXMdjDHGNISF+inIUN91zYd7\nTh0KHFv2HGOMMfVhob7+DPW7aSQ7/RJJr83n1yf1ZG+v/IkaY4yZdCzU1y/ULwV2yUrFVsASSd+J\niPsknYWF+mktZq8Ojq291BmfZf/ph4X6moX6iLi/a1PtdRitZ1ioN8aYhrFQX3+G+rsk7U6aH30K\ncHhXw2ihfpqL2auDY2svdcbXtMxuoX4sFur71GvQzRMU6omIHwDbS3o2cLqkiyLiQQv101/MXh0c\nW3upM76m/UsL9WOxUF+/UP8YEfFjSfeRVsd2MtRbqB9SMduxtZdhj8+MxkJ9/Rnqn5obRiQ9BXgm\nOSO9hXpjjGkeC/X1C/UvBo6R9AjwKHB0RNyV37NQb4wxDWOhvv4M9WcAZwwowkK9McY0jIX6+oX6\nuZIWS/pR/vOl+fwsYDtWc+7TGGPM6mGhvn6h/i5g34j4Te61LgCeGClD/UnA0cDHiipvob6dOLb2\nMszxdWKz2D+Chfr6hfobIqKzEvVmYB1Js/PxfOCQqnEYY4yZfCzUT4FQ33XN64AbIuKhfN0f8pDq\npnlOtLuuFupbjmNrL8McXye2YZTqLdRXoxGhPt+7PWm4dJ+ea+4EtgZGNYQW6tuPY2svwxxfJ7Zh\n9CQt1JfQpFAv6UnAt4A3RERvtol1SJ/XQCzUtxPH1l6GOb5hjm2iWKivX6jfGLgAODYivt9TLwFP\nIAv2xhhjph4L9fUL9W/P9fqApA/kc/tExJ3AzsC1XZtwG2OMmWIs1Ncv1H+UsStiOxxOmrc0xhjT\nEBbq6xfqN5V0uaQVkr7QU8xc4PqSz9EYY0yNWKivX6h/EPgAqbe7Q889J2ChfujF5WFkmGOD4Y5v\nsmIbJiHfQn39Qv19EXEV/VMtWag3xpiGsVA/tUL9KCzUzwxxeRgZ5thguOObrNimo5Bvob4ajQn1\nBViod2ytY5hjg+GOb7Jim44u4kSF+rqGRvsJ9f3E9W6h/ipgO0kL8zW/6wxTTrJQ372gZnWE+mVk\nob63rF6hvoRSod4YY0x91PIrTx7yW1PSOlkrWAB8vLPykyTUH5tdwpMBco/wu32E+uMZh1BP2r3l\n1z3nO0L9y/oI9W+XdDZpkUypUE8S4Dvlrugj1F9Dl1BfUt9KQr13lmknjq29DHN8wxzbRLFQX79Q\nT+49bgTMkvQaklB/CxbqjTGmcVTSaZl4wdLzgXdFxOG1PGDs83YA3jTIJZyOSPosaeHNZSXX/Rn4\n6dTUasrZjIIFRS3HsbWXYY5vJsX2lIjYvOym2nqEEXFDFsnXjIhVdT2n63lLGT3/1waWljWCmZ9G\nxC6116YBJC1ybO1jmGOD4Y7PsY2l1mVReVs1M4CIOKXpOhhjzEynTqHeGGOMmfa4IWwHX2m6AjXi\n2NrJMMcGwx2fY+uhtsUyxhhjTBtwj9AYY8yMxg3hNELSK3K6qNtyxo3e9/umemoDFWJ7l6Rbcjqs\nyyQ9pYl6ToSy2Lqu219S5OwlraBKbJIOzH93N0v62lTXcaJU+De5TV75fkP+d/mqJuo5EXK6uTvV\nldqu531pQAq66U6F2A7LMd0k6WpJzystNCL8mgYvYE3gduBpwCxgCfCcnmuOBr6Ufz4Y+HrT9Z7E\n2PYG1ss///0wxZav2xD4H+BaYJem6z2Jf2/PAG4ANsnHWzRd70mM7SvA3+efnwMsa7re44hvT+AF\nJEWr3/uvAi4i7ZG8B/CDpus8ibG9qOvf4yurxOYe4fRhN+C2iLgjIh4Gzialduqmb6qnKazjRCmN\nLSIuj4hOBpJrGUmVNd2p8vcGKcvKifRPxzVdqRLbW4B/j5xbNCJWa0/gKaRKbEHaEQrS3sFF+xBP\nKyLifyje63hgCrrpTllsEXF1598jFb9L3BBOH4pSVY25JtK2bJ1UT9OdKrF1cxTpt9U2UBpb3mXp\nyRHx3ams2CRQ5e9tO9Jm+d+XdK2kV0xZ7VaPKrF9GHh93mLxQuAfpqZqU8J4/0+2lUrfJcOZZ6Sd\nVEnjNNFUT01Tud6SXg/sAryk1hpNHoWxSVoD+DRw5FRVaBKp8ve2Fml4dC/Sb95XStohIu7tvXGa\nUSW2Q4CvRsQnJb2QtJfwDjF64/620tbvkspI2pvUEL647Fr3CKcPVVJCTTTVU9NUSncl6a+A9wGv\njoiHpqhuq0tZbBsCOwAL8+brewDzW7Jgpuq/yW9HxCMR8XPSnrjPmKL6rQ5VYjsK+AZARFxDSpm2\n2ZTUrn7Gm4KuVUh6LvAfwH7Rk/S8H24Ipw/XAc+Q9FRJs0iLYeb3XNNJ9QQVUz1NE0pjy8OHXyY1\ngm2ZZ4KS2CLijxGxWUTMiYg5pDmLV0fEomaqOy6q/Js8n7TQCUmbkYZK75jSWk6MKrH9EngZgKRn\nkxrC309pLetjPvCGvHp0D0pS0LUJSdsA5wGHR8TPqtzjodFpQkSslPR2Uu7GNYFTI+JmSR8BFkXE\nfApSPU1nKsZ2ErAB8M28/ueXEfHqxipdkYqxtZKKsS0A9pF0C7AKeG+V38CbpmJs7wZOkfRO0rDh\nkS35xRNJZ5GGqzfLc5wfAtYGiIgvUZCCbrpTIbYPktZOfDF/l6yMko24vbOMMcaYGY2HRo0xxsxo\n3BAaY4yZ0bghNMYYM6NxQ2iMMWZG44bQGGPMtKJsY+2eaz8t6cb8+pmkcW/m4FWjxhhjphWS9gRW\nkPZD3WEc9/0D8PyIeNN4nuceoTHGmGlFv421JT1d0sWSFku6UtKz+tx6CHDWeJ9nod4YY0wb+Arw\n1oi4VdLuwBeBl3bezDlMnwp8b7wFuyE0xhgzrZG0ASnPYGfnKYDZPZcdDJwTEavGW74bQmOMMdOd\nNYB7I2KngmsOBt420cKNMcaYaUtE/An4uaQDAPJm4c/rvC/pmcAmwDUTKd8NoTHGmGlF3lj7GuCZ\nkpZLOgo4DDhK0hLgZmC/rlsOAc6e6Kbo1ieMMcbMaNwjNMYYM6NxQ2iMMWZG44bQGGPMjMYNoTHG\nmBmNG0JjjDEzGjeExhhjZjRuCI0xxsxo3BAaY4yZ0fwfh3vejS8HZrgAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "milk_countries_imports.groupby(['Commodity Code','Period'])['Trade Value (US$)'].aggregate(max).plot(kind='barh')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For the 0401 commodity, the largest single monthly trade flow in 2014 appears to have taken place in September (201409). For the 0402 commodity, the weakest month was December, 2014." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To chart the mean trade flows by month, simply aggregate on the *mean* rather than the `max`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In some cases, you might want to sort the order of the bars in a bar chart by value. By default, the `sort_values()` operator sorts a series or dataframe 'in place'. That is, it sorts the dataframe and doesn't return anything. Use the `inplace=False` parameter to return the sorted values so that the plot function can work on them.\n", "\n", "The following chart displays the total imports for the combined commodities by partner (including the *World* partner) for the top five partners: the `sort_values()` element sorts the values in descending order, passes them to the `head()` element, which selects the top five and passes those onto the plotting function." ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Partner\n", "Austria 798816\n", "Belgium 58338745\n", "Czech Rep. 1254989\n", "Denmark 30534642\n", "Finland 12\n", "Name: Trade Value (US$), dtype: int64" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "milk_bypartner_total=milk[milk[\"Trade Flow\"]=='Imports'].groupby(['Partner'])['Trade Value (US$)'].aggregate(sum)\n", "milk_bypartner_total.head(5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this case, we don't need to specify the column name when sorting because the aggregation operator returns a *pandas* `Series` and we can sort the values directly:" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "activity": false, "run_control": { "read_only": false } }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "milk_bypartner_total.sort_values(ascending=False, inplace=False).head(5).plot(kind='barh')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Tasks\n", "\n", "For the 0402 trade item, which months saw the greatest average (mean) activity? How does that compare with the maximum flows in each month? How does it compare with the total flow in each month?\n", "\n", "Download your own choice of monthly dataset over one or two years containing both import and export data. (To start with, you may find it convenient to split the data into two dataframes, one for exports and one for imports.)\n", "\n", "Using your own data:\n", "\n", "- find out which months saw the largest total value of imports, or exports? \n", "- assess, by eye, if there appears to be any seasonal trend in the behaviour of imports or exports?\n", "- plot a bar chart showing the top three importers or exporters of your selected trade item over the period you grabbed the data for, compared to the total world trade value.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Now go back to the course step and mark it complete.**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exercise 4: Filtering groups\n", "\n", "If you have a large dataset that can be split into multiple groups but for which you only want to report on groups that have a particular property, the `filter()` method can be used to apply a test to a group and only return rows from groups that pass a particular group-wide test. If the test evaluates as `False`, the rows included in that group will be ignored." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Consider the following simple test dataset:" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "activity": false, "run_control": { "read_only": false } }, "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", "
CommodityTrade FlowValue
0FishImport1
1MilkImport2
2EggsImport4
3FishExport8
4MilkExport16
\n", "
" ], "text/plain": [ " Commodity Trade Flow Value\n", "0 Fish Import 1\n", "1 Milk Import 2\n", "2 Eggs Import 4\n", "3 Fish Export 8\n", "4 Milk Export 16" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = DataFrame({'Commodity' : ['Fish', 'Milk', 'Eggs', 'Fish', 'Milk'],\n", " 'Trade Flow' : ['Import', 'Import', 'Import', 'Export','Export'],\n", " 'Value' : [1,2,4,8,16]})\n", "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "One reason for filtering a dataset might be to exclude 'sparse' or infrequently occurring items, such as trade partners who only seem to trade for less than six months of the year.\n", "\n", "To select just the groups that contain more than a certain number of rows, define a function to test the length (that is, the number of rows) of each group and return a `True` or `False` value depending on the test.\n", "\n", "In the following case, group by trade flow and only return rows from groups containing three or more rows." ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "activity": false, "run_control": { "read_only": false } }, "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", "
CommodityTrade FlowValue
0FishImport1
1MilkImport2
2EggsImport4
\n", "
" ], "text/plain": [ " Commodity Trade Flow Value\n", "0 Fish Import 1\n", "1 Milk Import 2\n", "2 Eggs Import 4" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def groupsOfThreeOrMoreRows(g):\n", " return len(g) >= 3\n", "\n", "df.groupby('Trade Flow').filter(groupsOfThreeOrMoreRows)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can also select groups based on other group properties. For example, you might select just the groups where the total value for a particular column within a group exceeds a certain threshold.\n", "\n", "In the following case, select just those commodities where the sum of import and export values is greater than a certain amount to indicate which ones have a large value of trade, in whatever direction, associated with them. First group by the commodity, then filter on the group property of interest." ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "activity": false, "run_control": { "read_only": false } }, "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", "
CommodityTrade FlowValue
0FishImport1
1MilkImport2
3FishExport8
4MilkExport16
\n", "
" ], "text/plain": [ " Commodity Trade Flow Value\n", "0 Fish Import 1\n", "1 Milk Import 2\n", "3 Fish Export 8\n", "4 Milk Export 16" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def groupsWithValueGreaterThanFive(g):\n", " return g['Value'].sum() > 5\n", "\n", "df.groupby('Commodity').filter(groupsWithValueGreaterThanFive)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Filtering on the Comtrade data\n", "\n", "Now try filtering the Comtrade data relating to the milk imports. Start by creating a subset of the data containing only rows where the total trade value of imports for a particular commodity and partner is greater than $25 million (that is, 25000000)." ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "activity": false, "collapsed": true, "run_control": { "read_only": false } }, "outputs": [], "source": [ "def groupsWithImportsOver25million(g):\n", " return g['Trade Value (US$)'].sum() > 25000000\n", "\n", "rows=milk_countries_imports.groupby(['Commodity','Partner']).filter(groupsWithImportsOver25million)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Check the filtering by grouping on the commodity and partner and summing the result." ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "activity": false, "run_control": { "read_only": false } }, "outputs": [ { "data": { "text/plain": [ "Commodity Partner \n", "Milk and cream, concentrated or sweetened Belgium 36155409\n", " France 85631781\n", " Germany 59776965\n", " Ireland 62936247\n", " Netherlands 61531712\n", "Milk and cream, neither concentrated nor sweetened Denmark 29432607\n", " Ireland 111379639\n", "Name: Trade Value (US$), dtype: int64" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rows.groupby(['Commodity','Partner'])['Trade Value (US$)'].aggregate(sum)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As before, you can plot the results." ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "activity": false, "run_control": { "read_only": false } }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAArsAAAEJCAYAAACUie9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xu8VVW99/HPt60m3lCCfKznoa2RmQlhXspUhA75eCnN\nUulIlunR7BSG1yw7XstQs3Myj/dM6ZCahUeLEozYQCQpd4S8dJQ6PXqyzBuKyuX3/DHGksly3Tbs\nxWav/X2/Xrz2WnOOOeZvjDk3+zfHHGsuRQRmZmZmZq3oTd0dgJmZmZlZszjZNTMzM7OW5WTXzMzM\nzFqWk10zMzMza1lOds3MzMysZTnZNTMzM7OW5WTXzMzMzFqWk10zMzMza1lOds3MzMysZW3W3QGY\nmfV222+/fQwaNKi7w2iql156ia233rq7w2gqt7F19IZ2tkIb586d+7eIGFCvnJNdM7NutuOOOzJn\nzpzuDqOpOjo6GD58eHeH0VRuY+voDe1shTZK+mMj5TyNwczMzMxalpNdMzMzM2tZTnbNzMzMrGU5\n2TUzMzOzluVk18zMzMxalpNdMzMzM2tZfvSYmVk3W7FyNe3nTuruMJrqzMGrOGEjtXHZuMM3yn7M\nrGfwyK6ZmZmZtSwnu2ZmZmbWspzsmpmZmVnLcrJrZmZmZi2racmupD6Spktqk9QuKSRdUljfX9JK\nSVfn96dK+kx+fYuko/PrZZL6NyvOjbWP7iTpYkkj8+uxkrYqrFvefZE1l6Shkg5bj+3aJR23Htu9\nft72dJKGS/rQRtjPCaX/A+rE8ryk+ZIekTRD0kebHVujcnw/r7D8o5Iu6o6YzMxsrWaO7J4ITIyI\n1fn940DxD9QxwJLSm4i4LiLGNzGeLiepRzzNIiLOj4hf5bdjga1qlW9UD2j/UKBislsn9nag08lu\nM3RjHw8Hmp7sdsLMiNgzIt4NnAZcLekfujuoOsdnEnBE8eLSzMw2vmYmu6OBuwvvVwC/l7R3fj8K\n+HFppaQLJZ1VrbI8UnyvpJMrrLtW0hxJS4ojKXnE9iJJ8yQtlrRbXv4WSVPySNH1gKrs85C87UJJ\nUwtx3iBpCjA+j1xfIelBSYskfT6X20bS1MK+j8zL2yU9LOkmSQ9JmiBppKRZkh6TtG+tTs2jSB2S\nfpLrmSBJed1eeTR9rqTJknbKy2+RdLSk04C3AdMkTSvU+c3cxtmSdszLBkj6aW7Xg5L2r9T+CvGd\nk9u7UNK4vGxornuRpLsk7ZCXd0i6TNIDkh6VdGBe3ibp27meRZLG1GnfG+qRtAVwMTBK0gJJoyoc\nu3ZJM/Mxmqe1I5njgAPzdqfXOMaSdLWkpZImAW+tcsyqtXNLST/I7ZwvaURefoKkOyX9DJhSVtfW\nkibl/n0ot2tfSRPz+iMlrZC0Ra7/8bz8nUq/P3Nzm0u/C284zpLagVOB03MfHFjnfLg5t/HxfI6V\nYv10bvMCSddLasvLP5f7YTqwf5VTvaqIWJCP7ZeqtaFWbGrwdzD362/zsfmtpHc3cHz2yeV3iYgA\nOlj3It/MzDaypowa5URjl4hYVrbqduBTkv4HWA08SUq+6tkmbzu+yujveRHx9/zHdKqkIRGxKK/7\nW0S8X9I/A2cB/wRcAPwmIi6WdDhwSoU2DABuBIZFxBOS+hVW7wUcEBErJJ0CPB8R+0h6MzArJ1P/\nDRwVES8oTZGYLemevP0g0sj2KcCDpFHEA4AjgK8BH6/TH3sC7yX13yxgf0m/A74HHBkRf5U0Cvgm\naYQdgIi4StIZwIiI+FtevDUwOyLOk3Q5cDLwDeC7wL9GxG8kDQQmA+8pb39Znx2aY/9ARLxc6LPx\nwJiImC7p4tz/Y/O6zSJiX6XpBhcAI3O/7AzsGRGrJPWTtHmd9q1TT0SMlHQ+sHdElJKiC8uO3VbA\nRyLiFUnvAm4D9gbOBc6KiI/m7aod4z2BdwODgR2BpcDNVY5ZpXZ+MR+XwTn5nCJp11x+P2BIRPy9\nrJ5DgCcj4vAcW1/gpRwLwIHAQ8A+pN/v3+XlNwCnRsRjkj4AXAN8mArHOSLeI+k6YHlEfDvv50fl\n5Vh7PuwGjAC2BR6RdC3pHB8F7B8RKyVdA4yWdB9wUT4OzwPTgPlV+qyWecDZ+XWtc7VSbNDY7+DD\npN//VUrTgC4FPpm3f/34SBqe++hDrD1H/5TLzSEdk9cv7EvyeXUKQP/+Azh/8Kr16IaeY8c+6Vm7\nG0NHR8dG2U+55cuXd9u+N5be0EboHe3sDW0sadYt0v7AcxWW3wtcAvwFuKMT9d0NXB4RE6qsPzb/\n4dgM2AnYHSgluxPzz7nAJ/LrYaXXETFJ0rMV6vwgMCMinsjliknHPYVE72BgiNbO1ewLvAv4M3Cp\npGHAGuDtpIQI4ImIWAwgaQkwNSJC0mLSLfR6HoiIP+ftF+RtngP2AO5TGuhtA55qoK7XgNJ8w7nA\nR/LrkcDuuS6A7SRtW6H9RSOBH0TEy5D6LCdj20fE9FzmVuDOwjbF49NeqOe6iFhVqGePOu2rVE8l\nxdg3J90OH0q6+Nq1yjbVjvEw4LY8VedJSb+usd9K8R1ASo6IiIcl/bEQw30VEl2AxcC3JV0G/Dwi\nZgJI+oOk9wD7At/JsbUBMyVtQ5qScGfheL45/6x1nItqlZsUEa8Cr0p6mnSe/wMpoX0wb9MHeBr4\nANAREX/Ncd9B9X6vpXg3prOxQWO/g32BW/OFUJDOl5Ly4/Me0gXFwRHxZGH501S5oI+IG/I2DNxl\nUFy5eFOfFbRhzhy8io3VxmWjh2+U/ZTr6Ohg+PDu2ffG0hvaCL2jnb2hjSXN+p9nBbBl+cKIeE3S\nXOBM0sjkxxqsbxZwqKQf5VuDr5O0M2nEdp+IeFbSLWX7fjX/XM267V2nngpUo8xLZeXGRMTksrhO\nAAYAe+WRrWWFuF4tFF1TeL+Gxo5JcftSuwQsiYj9Gti+aGWhT4t99CZgvwqjt7Bu+9dZTf1+LVfp\n+FSqp177qh3ncsXYTyddeL2P1N5XqmxT7RgfViHOaqq1s5E4XxcRj0raizQX+VuSpkTExcBM4FBg\nJfAr4BZSsnsWqW3PRcTQClXWOs6Nlqt2Pt4aEV8tK/9xOn+OVLIn8Pv1jK18ebXfwUuAaRFxlNLU\njo7CNuXH5ynS7/eepDsuJVuS/j80M7Nu0pQ5uxHxLNAm6Q0JL3Al8JWIeKYTVZ4PPEO69VpuO9If\nnueV5pse2kB9M0hziku33neoUOZ+4KCcTFM2jaFoMvCFfJsdSbtK2po0KvR0TnRHAO9oIK7X5fmC\nnfnA3iPAAEn75e03l/TeCuVeJN3SrWcKeU5krq9SolRpmxPz9AAk9YuI54FnleepAscD06tVUKjn\nVOUP/+S+b7R9RfXa2hd4KiLW5LjaqmxX7RjPIE3LaVOaPzyiTjzliufhrsBAUjurkvQ24OWI+A/g\n28D7C3WNBe7Po6ZvId3CXxIRLwBPSDom1yFJ78vbVTvO5X3Q2fNhKnC0pLfm8v0kvYM0rWK40rz5\nzUlTCUp1HiXpW3XqRdIQ4F+Af1/P2BrVF/h/+fUJdco+BxxOupszvLB8V9K0EjMz6ybN/IDaFNJt\n2nVExJKIuHU96hsLbKk0r7RY30LSnL8lpPmSsxqo6yJgmKR5pFvUfyovkBOGU4CJkhZSfdrFTaS5\nmvMkPQRcTxoZmgDsLWkOKaF5uIG4igbSiRGhiHgNOBq4LMe7gMqfpr8B+KUKH1Cr4jRS/IskLSV9\nYKleDPcC9wBz8vSK0gcOPwtcIWkR6QkJF9ep6ibSMVmU23JcJ9pXNI10e3uB0hzfctcAn5U0m5SU\nlEbrFgGrlD4EdjrVj/FdwGOkqQXXUj+Jr7T/tnzr/A7ghHzLvZbBwAO5f88jza+GlETuSEp6S21Y\nVBi1Hw2clPtuCXBkXl7tOP8MOCr33YE1ylUUEUuBr5PmIS8C7gN2ioingAtJF5O/Is29LXkn8EKV\nKg9UfvQYKck9LSKm1mnDhrqcNHo+i7UXQlVFxF9Id6v+XWleNKQLoEldFI+Zma0Hlc0K6LqKpT2B\nMyLi+KbsoMVJugL4YeGDdmYtTdJ/AKeX5vP2dPlO048iou4j0gbuMijedOx3N0JU3Wejztkdd/hG\n2U+53jAHsje0EXpHO1uhjZLmRsTe9co17X+eiJgvaZqktlj7rF1rUEScXb+UWeuIiE93dwxdbCDp\n8wlmZtaNmnqZHRHVHsNkZtbSIuLB7o7BzMyanOyamVl9fTZv45FuuvW+sXR0dHTbI8HMrHdr5gfU\nzMzMzMy6lZNdMzMzM2tZTnbNzMzMrGU52TUzMzOzluVk18zMzMxalpNdMzMzM2tZTnbNzMzMrGU5\n2TUzMzOzluVk18zMzMxalpNdMzMzM2tZTnbNzMzMrGU52TUzMzOzluVk18zMzMxalpNdMzMzM2tZ\nm3V3AGZmvd2KlatpP3dSd4fRVGcOXsUJPbCNy8Yd3t0hmNkG8siumZmZmbUsJ7tmZmZm1rKc7JqZ\nmZlZy3KyW4ekPpKmS2qT1C4pJF1SWN9f0kpJV+f3p0r6TH59i6Sj8+tlkvo3Odam76NVSRoq6bD1\n2K5d0nHrsd3r50ZPIWmspK02wn46JO1dp8wtkp6QtEDSw5IuaKDeun0u6QhJ53Y25ip1fUnS57qi\nLjMzW39Odus7EZgYEavz+8eBjxbWHwMsKb2JiOsiYvxGjG+DSfIHFWEoUDHZrdM/7UCnk90N0Y3H\nayzQ9GS3E86OiKGkY/dZSTtvaIURcU9EjNvw0AC4GTiti+oyM7P15GS3vtHA3YX3K4DfF0aeRgE/\nLq2UdKGks6pVlkeK75V0coV110qaI2mJpIsKy5dJukjSPEmLJe2Wl79F0hRJ8yVdD6jKPg/J2y6U\n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\nP5g3k0aB67kIGCZpHukW8Z8qxPlX0pzBiZIWUv1W+E2k293zJD0EXE8akZsA7C1pDikpeLiBuIoG\nUmHEKyLuJc2HnCNpASkRg3R7/Yp8K3soa+eAVnMTqd2LcvuOi4jXgKOBy/KyBaRb27VMA3ZX/oBa\nhfXXAJ+VNJuU2JRGEhcBq5Q+6HQ61fvxLuAx0tdxX0v1JLaz7Yc0XeGh3NYVwC/z8pmk+cl/IM2D\n7ZeXERFLSXNup+R93QfslM+XE4Db8vLZrE2ebwB+KWlanXLVXEKaDrIo903pEX7XAtvkes4BHihs\nM4R1p6A0YjRwUu6PJcCRFcr8C/A7UrsbOaerHr98cboiIjobp5mZdRGV3TGvXEjqIP1heZB15+we\n0bTIeoA8+nRGRBzf3bH0RJKuAH5Y+KCdWUMkbQd8PyKO6e5YaskXOS9ExPdrlRu4y6B407Hf3UhR\ndQ/PZ20NDc3ZHXf4RoqmeXrDfNZWaKOkuRFR89nr0Pic3Qs2MJ6WFBHzJU2T1FZ41q41KCLO7u4Y\nrGfKUxI26UQ3ew74YXcHYWbWmzWU7OZHHe0I7JMXPRARTzcvrJ4jIio9IsrMjIj4QXfHYGbW2zWU\n7Eo6FrgC6CB9Avl7ks6OiJ80MTYzs16hz+ZtPNICt35r6ejoaIlHUtXiNpptmhqdxnAe6bFXT8Pr\nX0bwK9ID1c3MzMzMNkmNPo3hTWXTFp7pxLZmZmZmZt2i0ZHdeyVNJn0NKqSvEv1Fc0IyMzMzM+sa\nNZPd/FD4HSPibEmfID1TVqQH0lf7WlszMzMzs01CvakI/0b6ZiQiYmJEnBERp5NGdf+t2cGZmZmZ\nmW2Ieslue6UH/kfEHKC9KRGZmZmZmXWResnuljXW9enKQMzMzMzMulq9ZPdBSSeXL5R0EjC3OSGZ\nmZmZmXWNek9jGAvcJWk0a5PbvYEtgKOaGZiZmZmZ2YaqmexGxF+AD0kaAeyRF0+KiF83PTIzMzMz\nsw3U0HN2I2IaMK3JsZiZmZmZdSl/C5qZmZmZtSwnu2ZmZmbWspzsmpmZmVnLamjOrpmZNc+Klatp\nP3dSd4fRVGcOXsUJbmOP1xvaCBvezmXjDu/CaGxDeWTXzMzMzFqWk10zMzMza1lOds3MzMysZTnZ\nNTMzM7OW5WR3A0jqI2m6pDZJ7ZJC0iWF9f0lrZR0dX5/qqTP5Ne3SDo6v14mqX+TY236PlqVpKGS\n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\nSUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "rows.groupby(['Commodity','Partner'])['Trade Value (US$)'].aggregate(sum).sort_values(inplace=False,ascending=False).plot(kind='barh')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Logical tests can be combined in a filter function, for example testing for partners that only appear to trade infrequently *or* for small total amounts in any particular commodity." ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "activity": false, "run_control": { "read_only": false } }, "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", "
Trade Value (US$)
lensum
CommodityPartner
Milk and cream, concentrated or sweetenedGreece17
Hungary84956
Latvia1432
Luxembourg123724
New Zealand119291
United Arab Emirates25779
United States of America24375
Milk and cream, neither concentrated nor sweetenedFinland112
Latvia41678
Spain168
Ukraine13733
United States of America12415
\n", "
" ], "text/plain": [ " Trade Value (US$) \\\n", " len \n", "Commodity Partner \n", "Milk and cream, concentrated or sweetened Greece 1 \n", " Hungary 8 \n", " Latvia 1 \n", " Luxembourg 1 \n", " New Zealand 1 \n", " United Arab Emirates 2 \n", " United States of America 2 \n", "Milk and cream, neither concentrated nor sweetened Finland 1 \n", " Latvia 4 \n", " Spain 1 \n", " Ukraine 1 \n", " United States of America 1 \n", "\n", " \n", " sum \n", "Commodity Partner \n", "Milk and cream, concentrated or sweetened Greece 7 \n", " Hungary 4956 \n", " Latvia 432 \n", " Luxembourg 23724 \n", " New Zealand 19291 \n", " United Arab Emirates 5779 \n", " United States of America 4375 \n", "Milk and cream, neither concentrated nor sweetened Finland 12 \n", " Latvia 1678 \n", " Spain 68 \n", " Ukraine 3733 \n", " United States of America 2415 " ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def weakpartner(g):\n", " return len(g)<=3 | g['Trade Value (US$)'].sum()<25000\n", "\n", "weak_milk_countries_imports=milk_countries_imports.groupby(['Commodity','Partner']).filter(weakpartner)\n", "weak_milk_countries_imports.groupby(['Commodity','Partner'])[['Trade Value (US$)']].aggregate([len,sum])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this report, many of the listed countries appear to have traded in only one or two months; but while Hungary traded concentrated/sweetened products eight times, the total trade value was not very significant at all." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Tasks\n", "\n", "Filter the dataset so that it only contains rows where the total exports across all the milk products for a particular country are at least two million dollars in any given monthly period. (HINT: group on partner and period and filter against a function that tests the minimum trade value exceeds the required value.)\n", "\n", "Generate a chart from that dataset that displays the sum total trade value for each partner. (HINT: group on the partner and then aggregate on the sum.)\n", "\n", "Using your own monthly data for a single year, which countries only trade in your selected trade item rarely or for small amounts? Which partners trade on a regular basis (for example, in at least nine of the months)? \n", "\n", "Can you also find countries that trade regularly but only for small amounts (for example whose maximum monthly trade value is less than a certain threshold amount) or who trade infrequently but for large amounts (or other combinations thereof)?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Now go back to the course step and mark it complete.**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exercise 5: Interactive pivot table\n", "\n", "The interactive pivot table contains a fragment of the milk data downloaded from Comtrade relating to the leading partner importers of milk products to the UK. (**Note:** If you can't see the pivot table, check you have downloaded it to the same folder as this notebook and run the cell below.)\n", "\n", "Configure the pivot table by dragging the labels into the appropriate row and column selection areas. (You do not need to add all the labels to those areas). Select the aggregation type using the calculation list (which defauts to *count*). Click on the down arrow associated with a label in order to select a subset of values associated with that label.\n", "\n", "Use the interactive pivot table to generate reports that display:\n", "\n", "- a single column containing the total value of each trade flow for each commodity each year (in rows: Year, Commodity, Trade Flow; no columns; sum Trade Value(US$))\n", "- for each year and each commodity, a column containing the total trade value by Trade flow (rows: year, commodity; cols Trade Flow; sum trade value)\n", "- the total exports for each partner country (rows) by year (columns). Row: partner, trade flow with filter set to export); col: year; sum trade value" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "activity": false, "run_control": { "read_only": false } }, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import HTML,IFrame\n", "\n", "IFrame('comtrade_pivot.html',width=1000,height=600)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Task\n", "\n", "Try to come up with some of your own questions and then see if you can use the pivot table to answer them.\n", "\n", "For example, see if you can use the table to find:\n", "\n", "- the total value by partner country of each commodity type (with each row corresponding to a particular country)\n", "- the total value of trade in commodity type for each month of the year\n", "- the leading partners associated with the 0402 commodity code\n", "- the minimum trade value, by month and commodity type, for Ireland.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Now go back to the course step and mark it complete.**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exercise 6: Pivot tables with pandas\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Pivot tables can be quite hard to understand, so if you want a gentle dataset to pratice with, here is the simple example dataset used in the previous step that you can try out a few pivot table functions on." ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "activity": false, "run_control": { "read_only": false } }, "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", "
CommodityReporterFlowAmount
0APX10
1APY15
2AQX5
3AQY20
4BPX10
5BPY10
6BQX5
7CPX20
8CQY30
\n", "
" ], "text/plain": [ " Commodity Reporter Flow Amount\n", "0 A P X 10\n", "1 A P Y 15\n", "2 A Q X 5\n", "3 A Q Y 20\n", "4 B P X 10\n", "5 B P Y 10\n", "6 B Q X 5\n", "7 C P X 20\n", "8 C Q Y 30" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#Example dataframe\n", "df = DataFrame({\"Commodity\":[\"A\",\"A\",\"A\",\"A\",\"B\",\"B\",\"B\",\"C\",\"C\"],\n", " \"Amount\":[10,15,5,20,10,10,5,20,30],\n", " \"Reporter\":[\"P\",\"P\",\"Q\",\"Q\",\"P\",\"P\",\"Q\",\"P\",\"Q\"],\n", " \"Flow\":[\"X\",\"Y\",\"X\",\"Y\",\"X\",\"Y\",\"X\",\"X\",\"Y\"]},\n", " columns=[\"Commodity\",\"Reporter\",\"Flow\",\"Amount\"])\n", "\n", "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Getting started with pivot tables in pandas \n", "\n", "The pandas library provides a `pivot_table()` function into which you can pass the elements needed to define the pivot table view you would like to generate over a particular dataset.\n", "\n", "If you inspect the documentation for the pandas `pivot_table()` function, you will see that it is quite involved (but *DON'T PANIC!*)." ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "activity": false, "collapsed": true, "run_control": { "read_only": false } }, "outputs": [], "source": [ "##Inspect the documentation for the pandas pivot_table() function\n", "##Uncomment the following command (remove the #) and then click the play button in the toolbar to run the cell\n", "#?pivot_table\n", "##The documentation file should pop up from the bottom of the browser.\n", "##Click the x to close it." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can start to use the pivot table quite straightforwardly, drawing inspiration from the way you configured the interactive pivot table. The function itself takes the form:\n", "\n", "`pd.pivot_table(DATAFRAME,\n", " index= (LIST_OF_)DATA_COLUMN(S)_THAT_DEFINE_PIVOT_TABLE_ROWS,\n", " columns= (LIST_OF_)DATA_COLUMN(S)_THAT_DEFINE_PIVOT_TABLE_COLUMNS\n", " values= DATA_COLUMN_TO_APPLY_THE SUMMARYFUNCTION_TO,\n", " aggfunc=sum\n", " )`\n", "\n", "\n", "You can generate a pivot table that shows the total trade value as a single column, grouped into row based subdivisions based on year, country, trade flow and commodity in the following way.\n", "\n", "The following pivot table reports on a subset of countries. The `isin()` method selects rows whose partner value 'is in' the list of specified partners." ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "activity": false, "run_control": { "read_only": false } }, "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", "
Trade Value (US$)
YearPartnerTrade FlowCommodity
2014BelgiumExportsMilk and cream, concentrated or sweetened6301229
Milk and cream, neither concentrated nor sweetened23041778
ImportsMilk and cream, concentrated or sweetened36155409
Milk and cream, neither concentrated nor sweetened22183336
DenmarkExportsMilk and cream, concentrated or sweetened1849170
Milk and cream, neither concentrated nor sweetened1059287
ImportsMilk and cream, concentrated or sweetened1102035
Milk and cream, neither concentrated nor sweetened29432607
FranceExportsMilk and cream, concentrated or sweetened9025441
Milk and cream, neither concentrated nor sweetened25597541
ImportsMilk and cream, concentrated or sweetened85631781
Milk and cream, neither concentrated nor sweetened19376395
GermanyExportsMilk and cream, concentrated or sweetened24785683
Milk and cream, neither concentrated nor sweetened11310950
ImportsMilk and cream, concentrated or sweetened59776965
Milk and cream, neither concentrated nor sweetened16835735
IrelandExportsMilk and cream, concentrated or sweetened94889874
Milk and cream, neither concentrated nor sweetened326338567
ImportsMilk and cream, concentrated or sweetened62936247
Milk and cream, neither concentrated nor sweetened111379639
NetherlandsExportsMilk and cream, concentrated or sweetened47518672
Milk and cream, neither concentrated nor sweetened21130410
ImportsMilk and cream, concentrated or sweetened61531712
Milk and cream, neither concentrated nor sweetened10677523
\n", "
" ], "text/plain": [ " Trade Value (US$)\n", "Year Partner Trade Flow Commodity \n", "2014 Belgium Exports Milk and cream, concentrated or sweetened 6301229\n", " Milk and cream, neither concentrated nor sweetened 23041778\n", " Imports Milk and cream, concentrated or sweetened 36155409\n", " Milk and cream, neither concentrated nor sweetened 22183336\n", " Denmark Exports Milk and cream, concentrated or sweetened 1849170\n", " Milk and cream, neither concentrated nor sweetened 1059287\n", " Imports Milk and cream, concentrated or sweetened 1102035\n", " Milk and cream, neither concentrated nor sweetened 29432607\n", " France Exports Milk and cream, concentrated or sweetened 9025441\n", " Milk and cream, neither concentrated nor sweetened 25597541\n", " Imports Milk and cream, concentrated or sweetened 85631781\n", " Milk and cream, neither concentrated nor sweetened 19376395\n", " Germany Exports Milk and cream, concentrated or sweetened 24785683\n", " Milk and cream, neither concentrated nor sweetened 11310950\n", " Imports Milk and cream, concentrated or sweetened 59776965\n", " Milk and cream, neither concentrated nor sweetened 16835735\n", " Ireland Exports Milk and cream, concentrated or sweetened 94889874\n", " Milk and cream, neither concentrated nor sweetened 326338567\n", " Imports Milk and cream, concentrated or sweetened 62936247\n", " Milk and cream, neither concentrated nor sweetened 111379639\n", " Netherlands Exports Milk and cream, concentrated or sweetened 47518672\n", " Milk and cream, neither concentrated nor sweetened 21130410\n", " Imports Milk and cream, concentrated or sweetened 61531712\n", " Milk and cream, neither concentrated nor sweetened 10677523" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "KEYPARTNERS = ['Belgium','France','Germany','Ireland','Netherlands','Denmark']\n", "milk_keypartners = milk_countries[milk_countries['Partner'].isin(KEYPARTNERS)]\n", "\n", "pivot_table(milk_keypartners,\n", " index=['Year','Partner','Trade Flow','Commodity'],\n", " values='Trade Value (US$)',\n", " aggfunc=sum)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If you just want to use a single data column from the original dataset to specify the row (that is, the `index`) groupings or the column groupings, you don't need to use a list, just pass in the name of the appropriate original data column.\n", "\n", "So, to look at rows grouped by year, country and commodity, and split columns out by trade flow:" ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "activity": false, "run_control": { "read_only": false } }, "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", "
Trade FlowExportsImports
YearPartnerCommodity
2014IrelandMilk and cream, neither concentrated nor sweetened326338567111379639
FranceMilk and cream, concentrated or sweetened902544185631781
IrelandMilk and cream, concentrated or sweetened9488987462936247
NetherlandsMilk and cream, concentrated or sweetened4751867261531712
GermanyMilk and cream, concentrated or sweetened2478568359776965
BelgiumMilk and cream, concentrated or sweetened630122936155409
DenmarkMilk and cream, neither concentrated nor sweetened105928729432607
BelgiumMilk and cream, neither concentrated nor sweetened2304177822183336
FranceMilk and cream, neither concentrated nor sweetened2559754119376395
GermanyMilk and cream, neither concentrated nor sweetened1131095016835735
NetherlandsMilk and cream, neither concentrated nor sweetened2113041010677523
DenmarkMilk and cream, concentrated or sweetened18491701102035
\n", "
" ], "text/plain": [ "Trade Flow Exports \\\n", "Year Partner Commodity \n", "2014 Ireland Milk and cream, neither concentrated nor sweetened 326338567 \n", " France Milk and cream, concentrated or sweetened 9025441 \n", " Ireland Milk and cream, concentrated or sweetened 94889874 \n", " Netherlands Milk and cream, concentrated or sweetened 47518672 \n", " Germany Milk and cream, concentrated or sweetened 24785683 \n", " Belgium Milk and cream, concentrated or sweetened 6301229 \n", " Denmark Milk and cream, neither concentrated nor sweetened 1059287 \n", " Belgium Milk and cream, neither concentrated nor sweetened 23041778 \n", " France Milk and cream, neither concentrated nor sweetened 25597541 \n", " Germany Milk and cream, neither concentrated nor sweetened 11310950 \n", " Netherlands Milk and cream, neither concentrated nor sweetened 21130410 \n", " Denmark Milk and cream, concentrated or sweetened 1849170 \n", "\n", "Trade Flow Imports \n", "Year Partner Commodity \n", "2014 Ireland Milk and cream, neither concentrated nor sweetened 111379639 \n", " France Milk and cream, concentrated or sweetened 85631781 \n", " Ireland Milk and cream, concentrated or sweetened 62936247 \n", " Netherlands Milk and cream, concentrated or sweetened 61531712 \n", " Germany Milk and cream, concentrated or sweetened 59776965 \n", " Belgium Milk and cream, concentrated or sweetened 36155409 \n", " Denmark Milk and cream, neither concentrated nor sweetened 29432607 \n", " Belgium Milk and cream, neither concentrated nor sweetened 22183336 \n", " France Milk and cream, neither concentrated nor sweetened 19376395 \n", " Germany Milk and cream, neither concentrated nor sweetened 16835735 \n", " Netherlands Milk and cream, neither concentrated nor sweetened 10677523 \n", " Denmark Milk and cream, concentrated or sweetened 1102035 " ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#For convenience, let's assign the output of this pivot table operation to a variable...\n", "report = pivot_table(milk_keypartners,\n", " index=['Year','Partner','Commodity'],\n", " columns='Trade Flow',\n", " values='Trade Value (US$)',\n", " aggfunc=sum)\n", "\n", "#And then display the result, sorted by import value\n", "report.sort_values('Imports', ascending=False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "One of the features of the interactive pivot table you did not explore was its ability to generate bar chart style views over the pivoted data as well as tabulated results. (In fact, this requires a plugin to the pivot table that has not been installed.)\n", "\n", "In the same way that you produced charts from pandas dataframes previously, you can visualise the contents of the dataframe produced from the pivot table operation." ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "activity": false, "run_control": { "read_only": false } }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "report.sort_values('Imports').plot(kind='barh')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here, the `.plot()` command produces a *grouped bar chart* with the bars grouped according to the order of the row index values. The values contained within any numerical columns are then displayed as bars." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Task\n", "\n", "Using your own data set containing data for both imports and exports of a particular trade item, see if you can use a pandas pivot table to answer the same questions you asked of your dataset in Exercise 5, as well as asking some new ones.\n", "\n", "For example, try to use a pivot table to identify partner countries engaging in 'bi-derectional' trade who have total import values and export values greater than a certain threshold every month.\n", "\n", "You can also use a pivot table in combination with other operations. For example, try using one of the filtered datasets you created using the `filter()` function, such as one that limited rows to partners trading above a certain level, as the basis for a pivot table report." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Now go back to the course step and mark it complete.**" ] } ], "metadata": { "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.6.2" } }, "nbformat": 4, "nbformat_minor": 1 }