{ "cells": [ { "cell_type": "markdown", "metadata": { "editable": true, "slideshow": { "slide_type": "slide" }, "tags": [] }, "source": [ "

Introduction to Data Analysis in

\n", " \n", "
\"Python\"
\n", "\n", "

using

\n", "\n", "
\"Pandas\"
" ] }, { "cell_type": "markdown", "metadata": { "editable": true, "slideshow": { "slide_type": "slide" }, "tags": [] }, "source": [ "#
What is \"Pandas\"?
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "**pandas** is a fast, powerful, flexible and easy to use open source data analysis and manipulation tool, built on top of the Python programming language." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" }, "tags": [] }, "source": [ "#
What is \"Pandas\" for?
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [] }, "source": [ "* **pandas** is the right tool when working with tabular data\n", " * such as data stored in spreadsheets or databases " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "* **pandas** will help you to \n", " * explore\n", " * clean\n", " * transform\n", " * merge \n", " * process" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" }, "tags": [] }, "source": [ "* In **pandas**, a data table is called a ``DataFrame``\n", "
\"Pandas
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "* In **pandas**, a column of a data table is called a `Series`\n", " * A `DataFrame` is a collection of `Series`" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "With [pandas](http://pandas.pydata.org) you can \n", "1. Import many types of data, including\n", " * CSV files\n", " * Tab or other types of delimited files \n", " * Excel (xls, xlsx) files\n", " * Stata files" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "2. Open files directly from a website\n", "3. Merge, select, join data\n", "4. Perform statistical analyses\n", "5. Create plots of your data\n", "\n", "and much more." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "* **pandas** is imported as\n", "```python\n", "import pandas as pd\n", "```\n", "I suggest you follow this convention, which will make using other people's code and snippets easier." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [] }, "outputs": [], "source": [ "# Let's import pandas and some other basic packages we will use \n", "from __future__ import division\n", "%matplotlib inline\n", "import os\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "np.random.seed(123456)\n", "import pandas as pd" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" }, "tags": [] }, "source": [ "#
How to create a \"Pandas\" `Series`?
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "# Create a New `Series`\n", "
\"Pandas
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "* To create a new [`Series`](https://pandas.pydata.org/docs/reference/api/pandas.Series.html)\n", "```python\n", "my_new_series = pd.Series(a_list_with_data, \n", " name='Name of Column in data table')\n", "```" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "0 Taylor\n", "1 John\n", "2 Fela\n", "3 Manu\n", "4 Şebnem\n", "Name: First Name, dtype: object" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "first_names = pd.Series(['Taylor', 'John', 'Fela', 'Manu', 'Şebnem'], name='First Name')\n", "first_names" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "0 Swift\n", "1 Lennon\n", "2 Kuti\n", "3 Chau\n", "4 Ferrah\n", "Name: Last Name, dtype: object" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "last_names = pd.Series({0:'Swift',\n", " 1:'Lennon',\n", " 2:'Kuti',\n", " 3:'Chau', \n", " 4:'Ferrah'}, name='Last Name')\n", "last_names" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "0 34\n", "1 75\n", "2 83\n", "3 82\n", "4 76\n", "Name: Age, dtype: int64" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "age = pd.Series(np.random.randint(33, 85, size=5), name='Age')\n", "age" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" }, "tags": [] }, "source": [ "#
How to create a \"Pandas\" `DataFrame`?
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "# Create a New `DataFrame`\n", "
\"Pandas
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "* To create a new [`DataFrame`](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.html)\n", "```python\n", "df = pd.DataFrame({'Column1 Name':column_1_data, \n", " 'Column2 Name':column_2_data, \n", " 'Column3 Name':column_3_data, \n", " ...\n", " })\n", "```" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "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", "
First NameLast NameAge
0TaylorSwift34
1JohnLennon75
2FelaKuti83
3ManuChau82
4ŞebnemFerrah76
\n", "
" ], "text/plain": [ " First Name Last Name Age\n", "0 Taylor Swift 34\n", "1 John Lennon 75\n", "2 Fela Kuti 83\n", "3 Manu Chau 82\n", "4 Şebnem Ferrah 76" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "musicians = pd.DataFrame({'First Name':first_names, \n", " 'Last Name':last_names, \n", " 'Age':age})\n", "musicians" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "First Name object\n", "Last Name object\n", "Age int64\n", "dtype: object" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "musicians.dtypes" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "outputs": [], "source": [ "musicians['Age'] = musicians['Age'].astype(int)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "slideshow": { "slide_type": "-" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "First Name object\n", "Last Name object\n", "Age int64\n", "dtype: object" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "musicians.dtypes" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "* To create a new [`DataFrame`](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.html)\n", "```python\n", "df = pd.DataFrame(a_list_of_series_or_raw_data,\n", " columns=list_with_column_names,\n", " index=list_of_indices_if_you_need).T\n", "```" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "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", "
First NameLast NameAge
0TaylorSwift34
1JohnLennon75
2FelaKuti83
3ManuChau82
4ŞebnemFerrah76
\n", "
" ], "text/plain": [ " First Name Last Name Age\n", "0 Taylor Swift 34\n", "1 John Lennon 75\n", "2 Fela Kuti 83\n", "3 Manu Chau 82\n", "4 Şebnem Ferrah 76" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "musicians = pd.DataFrame([first_names, last_names, age]).T\n", "musicians" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "First Name object\n", "Last Name object\n", "Age object\n", "dtype: object" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "musicians.dtypes" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "outputs": [], "source": [ "musicians['Age'] = musicians['Age'].astype(int)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "slideshow": { "slide_type": "-" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "First Name object\n", "Last Name object\n", "Age int64\n", "dtype: object" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "musicians.dtypes" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "* To create a new [`DataFrame`](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.html)\n", "```python\n", "df = pd.DataFrame(a_list_of_series_or_raw_data,\n", " columns=list_with_column_names,\n", " index=list_of_indices_if_you_need).T\n", "```" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "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", "
Random Series 1Random Series 2Random Series 3
0-0.2543090.819640-0.589863
1-1.986831-2.1731470.736309
2-1.066293-0.1496400.255856
30.287392-1.218527-0.664951
40.4743481.385173-0.563933
\n", "
" ], "text/plain": [ " Random Series 1 Random Series 2 Random Series 3\n", "0 -0.254309 0.819640 -0.589863\n", "1 -1.986831 -2.173147 0.736309\n", "2 -1.066293 -0.149640 0.255856\n", "3 0.287392 -1.218527 -0.664951\n", "4 0.474348 1.385173 -0.563933" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "random_data = pd.DataFrame(np.random.normal(size=(5,3)), columns=['Random Series 1', 'Random Series 2', 'Random Series 3'])\n", "random_data" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "# Import and Export Data" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "-" }, "tags": [] }, "source": [ "
\"Pandas\"
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "# Import Existing Data" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "**pandas** supports the integration with many file formats or data sources\n", "* csv\n", "* excel\n", "* sql\n", "* json\n", "* parquet\n", "* Stata\n", "* HTML" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "To import data in a specific format you use the function with the prefix `read_*`, e.g., \n", "* csv: [`pd.read_csv(path_to_file, other options and settings)`](https://pandas.pydata.org/docs/reference/api/pandas.read_csv.html)\n", "* excel: [`pd.read_excel(path_to_file, other options and settings)`](https://pandas.pydata.org/docs/reference/api/pandas.read_excel.html)\n", "* stata: [`pd.read_stata(path_to_file, other options and settings)`](https://pandas.pydata.org/docs/reference/api/pandas.read_stata.html)\n", "* html: [`pd.read_html(url_or_path_to_file, other options and settings)`](https://pandas.pydata.org/docs/reference/api/pandas.read_html.html)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "# Export Data" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [] }, "source": [ "To export data in a specific format you use the function with the prefix `to_*`, e.g., \n", "* csv: [`pd.to_csv(path_to_file, other options and settings)`](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.to_csv.html)\n", "* excel: [`pd.to_excel(path_to_file, other options and settings)`](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.to_excel.html)\n", "* stata: [`pd.to_stata(path_to_file, other options and settings)`](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.to_stata.html)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "## Let's write our dataframe to file (try different formats)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "slideshow": { "slide_type": "-" }, "tags": [] }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/var/folders/2r/7vb_23y1427bffj2wbz7mxfc0000gq/T/ipykernel_20030/1893305794.py:4: InvalidColumnName: \n", "Not all pandas column names were valid Stata variable names.\n", "The following replacements have been made:\n", "\n", " First Name -> First_Name\n", " Last Name -> Last_Name\n", "\n", "If this is not what you expect, please make sure you have Stata-compliant\n", "column names in your DataFrame (strings only, max 32 characters, only\n", "alphanumerics and underscores, no Stata reserved words)\n", "\n", " musicians.to_stata(pathout + 'musicians.dta', write_index=False, version=118)\n" ] } ], "source": [ "pathout = './data/'\n", "musicians.to_csv(pathout + 'musicians.csv', encoding='utf8', index=False)\n", "musicians.to_excel(pathout + 'musicians.xlsx', index=False)\n", "musicians.to_stata(pathout + 'musicians.dta', write_index=False, version=118)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "## Let's read our dataframe from file (try different formats) and put it into different dataframes" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "slideshow": { "slide_type": "-" }, "tags": [] }, "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", "
First NameLast NameAge
0TaylorSwift34
1JohnLennon75
2FelaKuti83
3ManuChau82
4ŞebnemFerrah76
\n", "
" ], "text/plain": [ " First Name Last Name Age\n", "0 Taylor Swift 34\n", "1 John Lennon 75\n", "2 Fela Kuti 83\n", "3 Manu Chau 82\n", "4 Şebnem Ferrah 76" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pathout = './data/'\n", "musicians_csv = pd.read_csv(pathout + 'musicians.csv', encoding='utf8')\n", "musicians_csv" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "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", "
First NameLast NameAge
0TaylorSwift34
1JohnLennon75
2FelaKuti83
3ManuChau82
4ŞebnemFerrah76
\n", "
" ], "text/plain": [ " First Name Last Name Age\n", "0 Taylor Swift 34\n", "1 John Lennon 75\n", "2 Fela Kuti 83\n", "3 Manu Chau 82\n", "4 Şebnem Ferrah 76" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "musicians_excel = pd.read_excel(pathout + 'musicians.xlsx')\n", "musicians_excel" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" }, "tags": [] }, "source": [ "# Create New Columns/Variables" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "-" }, "tags": [] }, "source": [ "
\"New
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "# From Other Columns/Variables" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [] }, "source": [ "* To create a new column in a dataframe from other columns in the dataframe just perform any operations on the existing variables" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [] }, "source": [ "* All operations are performed across all rows" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [] }, "source": [ "* E.g., to create the new variable $Y$ defined as $Y=2\\cdot X^2-\\ln(Z)$, where $X$ and $Z$ are existing variables\n", "```python\n", "df['Y'] = 2 * df['X']**2 - df['Z'].apply(np.log)\n", "```" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "# From a `list` or `numpy.array`" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "* To create a new column in the dataframe from a list or array, just define the new column to be equal to the list or array\n", "```python\n", "df['new variable'] = list_or_array\n", "```" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [] }, "source": [ "
\n", "Careful: The list or array must have the same dimension as the dataframe. Check it using df.shape and array.shape or len(list)\n", "
" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "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", "
First NameLast NameAgeGender
0TaylorSwift34Female
1JohnLennon75Male
2FelaKuti83Male
3ManuChau82Male
4ŞebnemFerrah76Female
\n", "
" ], "text/plain": [ " First Name Last Name Age Gender\n", "0 Taylor Swift 34 Female\n", "1 John Lennon 75 Male\n", "2 Fela Kuti 83 Male\n", "3 Manu Chau 82 Male\n", "4 Şebnem Ferrah 76 Female" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "musicians['Gender'] = ['Female', 'Male', 'Male', 'Male', 'Female']\n", "musicians" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "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", "
Random Series 1Random Series 2Random Series 3New Series
0-0.2543090.819640-0.589863-0.208442
1-1.986831-2.1731470.7363094.317676
2-1.066293-0.1496400.2558560.159560
30.287392-1.218527-0.664951-0.350195
40.4743481.385173-0.5639330.657054
\n", "
" ], "text/plain": [ " Random Series 1 Random Series 2 Random Series 3 New Series\n", "0 -0.254309 0.819640 -0.589863 -0.208442\n", "1 -1.986831 -2.173147 0.736309 4.317676\n", "2 -1.066293 -0.149640 0.255856 0.159560\n", "3 0.287392 -1.218527 -0.664951 -0.350195\n", "4 0.474348 1.385173 -0.563933 0.657054" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "random_data['New Series'] = random_data['Random Series 1'] * random_data['Random Series 2']\n", "random_data" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "# Applying Functions to Dataframe" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "-" }, "tags": [] }, "source": [ "
\"New
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "* **pandas** also let's you apply a function to a column or to the whole dataset using the `apply` function." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [] }, "source": [ "* To apply a function to the whole dataset:\n", "```python\n", "df.apply(my_function, axis=1)\n", "```\n", "This is useful when the function uses data from various columns" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "* To apply a function to only a column:\n", "```python\n", "df['My Column'].apply(my_function, axis=1)\n", "```\n", "or\n", "```python\n", "df.my_column.apply(my_function, axis=1)\n", "```" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "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", "
First NameLast NameAgeGenderYoung FemaleYoung Female (as integer)
0TaylorSwift34FemaleTrue1
1JohnLennon75MaleFalse0
2FelaKuti83MaleFalse0
3ManuChau82MaleFalse0
4ŞebnemFerrah76FemaleFalse0
\n", "
" ], "text/plain": [ " First Name Last Name Age Gender Young Female Young Female (as integer)\n", "0 Taylor Swift 34 Female True 1\n", "1 John Lennon 75 Male False 0\n", "2 Fela Kuti 83 Male False 0\n", "3 Manu Chau 82 Male False 0\n", "4 Şebnem Ferrah 76 Female False 0" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "musicians['Young Female'] = (musicians['Age']<35) * (musicians['Gender']=='Female')\n", "musicians['Young Female (as integer)'] = (musicians['Age']<35) * (musicians['Gender']=='Female').astype(int)\n", "musicians" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "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", "
Random Series 1Random Series 2Random Series 3New SeriesSome Transformation
0-0.2543090.819640-0.589863-0.2084420.381421
1-1.986831-2.1731470.7363094.3176763.581367
2-1.066293-0.1496400.2558560.159560-0.096295
30.287392-1.218527-0.664951-0.3501950.314757
40.4743481.385173-0.5639330.6570541.220986
\n", "
" ], "text/plain": [ " Random Series 1 Random Series 2 Random Series 3 New Series Some Transformation\n", "0 -0.254309 0.819640 -0.589863 -0.208442 0.381421\n", "1 -1.986831 -2.173147 0.736309 4.317676 3.581367\n", "2 -1.066293 -0.149640 0.255856 0.159560 -0.096295\n", "3 0.287392 -1.218527 -0.664951 -0.350195 0.314757\n", "4 0.474348 1.385173 -0.563933 0.657054 1.220986" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "random_data['Some Transformation'] = random_data.apply(lambda x: x['New Series'] - x['Random Series 3'], axis=1)\n", "random_data" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Select subset of data" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "-" }, "tags": [] }, "source": [ "
\"Subset
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "# Select subset of columns" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "-" }, "tags": [] }, "source": [ "
\"Subset
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "* To select 1 column and get a `Series`\n", "```python \n", "df['name of column']\n", "```\n", "or \n", "```python \n", "df.name_of_column\n", "```" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [] }, "source": [ "
\n", "Careful: The second method only works if there are no spaces in the name of the variable/row.\n", "
" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "0 Taylor\n", "1 John\n", "2 Fela\n", "3 Manu\n", "4 Şebnem\n", "Name: First Name, dtype: object" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "musicians['First Name']" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "* To select a subset of columns and get a `DataFrame`\n", "```python \n", "df[list_of_columns]\n", "```\n", "* In particular, to get a `DataFrame` from a single column\n", "```python \n", "df[['name of column']]\n", "```" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "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", "
First NameAge
0Taylor34
1John75
2Fela83
3Manu82
4Şebnem76
\n", "
" ], "text/plain": [ " First Name Age\n", "0 Taylor 34\n", "1 John 75\n", "2 Fela 83\n", "3 Manu 82\n", "4 Şebnem 76" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "musicians[['First Name', 'Age']]" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [] }, "source": [ "
\n", " Note: Notice the small difference when selecting a unique column\n", "
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "# Select subset of rows" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "-" }, "tags": [] }, "source": [ "
\"Subset
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "* To select specific rows, you need to pass the index of the rows you want and use `df.iloc`.\n", " \n", " E.g., if you want the observations in index [0,2,5,9], then\n", " ```python\n", " df.iloc[[0,2,5,9]]\n", " ```" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "* To select rows that satisfy a condition, e.g., variable_1>0, use `df.loc`\n", "\n", " ```python\n", " df.loc[df['variable_1']>0]\n", " ``` " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [] }, "source": [ "* or more generally\n", " \n", " ```python\n", " df.loc[condition to be satisfied by data in df]\n", " ```" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "First Name Taylor\n", "Last Name Swift\n", "Age 34\n", "Gender Female\n", "Young Female True\n", "Young Female (as integer) 1\n", "Name: 0, dtype: object" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "musicians.iloc[0]" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 24, "metadata": { "scrolled": true, "slideshow": { "slide_type": "subslide" }, "tags": [] }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
First Name
0Taylor
\n", "
" ], "text/plain": [ " First Name\n", "0 Taylor" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "musicians.loc[musicians['Age']<50, ['First Name']]" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "# Select subset of rows and columns" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "-" }, "tags": [] }, "source": [ "
\"Subset
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "* To select jointly a subset of rows that satisfy a condition and some of the variables\n", "```python\n", "df.loc[condition to be satisfied by data in df, list_of_columns]\n", "```\n", "e.g., select rows that satisfy `variable_1>0` and only the subset of columns `['variable_1', 'variable_2']`\n", "```python\n", "df.loc[df['variable_1']>0, ['variable_1', 'variable_2']]\n", "```" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
First NameLast Name
4ŞebnemFerrah
\n", "
" ], "text/plain": [ " First Name Last Name\n", "4 Şebnem Ferrah" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "musicians.loc[(musicians['Age']>=50) & (musicians['Gender']=='Female') , ['First Name', 'Last Name']]" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Create Statistics for Columns in Dataframe" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "-" }, "tags": [] }, "source": [ "
\"groupby\"
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "The **pandas** `DataFrame` has various properties that compute statistics based on columns in the dataframe\n", "* mean\n", "* min\n", "* max\n", "* std\n", "* median\n", "* quantile" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "These statistics can be computed across rows or columns" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [] }, "source": [ "* Statistic across rows (for all columns): `df.statistic()` or `df.statistic(axis=0)`" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [] }, "source": [ "* Statistics across columns: `df.statistic(axis=1)`" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "The special method `describe` generates various summary statistics\n", "```python\n", "df.describe()\n", "```" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [] }, "source": [ "
\n", " Note: You can apply these statistics to a single column or a subset of columns.\n", "
" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "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", "
AgeYoung Female (as integer)
count5.0000005.000000
mean70.0000000.200000
std20.4328170.447214
min34.0000000.000000
25%75.0000000.000000
50%76.0000000.000000
75%82.0000000.000000
max83.0000001.000000
\n", "
" ], "text/plain": [ " Age Young Female (as integer)\n", "count 5.000000 5.000000\n", "mean 70.000000 0.200000\n", "std 20.432817 0.447214\n", "min 34.000000 0.000000\n", "25% 75.000000 0.000000\n", "50% 76.000000 0.000000\n", "75% 82.000000 0.000000\n", "max 83.000000 1.000000" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "musicians.describe()" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "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", "
First NameLast NameAgeGenderYoung FemaleYoung Female (as integer)Mean Age
0TaylorSwift34FemaleTrue170.0
1JohnLennon75MaleFalse070.0
2FelaKuti83MaleFalse070.0
3ManuChau82MaleFalse070.0
4ŞebnemFerrah76FemaleFalse070.0
\n", "
" ], "text/plain": [ " First Name Last Name Age Gender Young Female Young Female (as integer) Mean Age\n", "0 Taylor Swift 34 Female True 1 70.0\n", "1 John Lennon 75 Male False 0 70.0\n", "2 Fela Kuti 83 Male False 0 70.0\n", "3 Manu Chau 82 Male False 0 70.0\n", "4 Şebnem Ferrah 76 Female False 0 70.0" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "musicians['Mean Age'] = musicians['Age'].mean()\n", "musicians" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "# Apply Functions or Create Aggregate Statistics by Groups of Rows" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "-" }, "tags": [] }, "source": [ "
\"groupby\"
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "* To generate statistics or apply functions my groups in the data we use the `groupby` method" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [] }, "source": [ "* To generate a dataframe that contains the statistics for each group defined by columns named `Variable1` and `Variable2`\n", " \n", "```python\n", "df.groupby(['Variable1', 'Variable2']).statistic()\n", "```" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [] }, "source": [ "* To apply a function to all rows in each group and generate a dataframe with the group level result\n", "```python\n", "df.groupby(['Variable1', 'Variable2']).apply(my_function)\n", "```" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "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", "
AgeYoung FemaleYoung Female (as integer)Mean Age
Gender
Female55.00.50.570.0
Male80.00.00.070.0
\n", "
" ], "text/plain": [ " Age Young Female Young Female (as integer) Mean Age\n", "Gender \n", "Female 55.0 0.5 0.5 70.0\n", "Male 80.0 0.0 0.0 70.0" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "musicians_gender = musicians.groupby(['Gender']).mean(numeric_only=True)\n", "musicians_gender" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [] }, "source": [ "## Notice the rows are not numbered now, but are using the `Gender` categories, so we can select rows using them" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "Age 55.0\n", "Young Female 0.5\n", "Young Female (as integer) 0.5\n", "Mean Age 70.0\n", "Name: Female, dtype: float64" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "musicians_gender.loc['Female']" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "## If you want to put the categories back to columns and have numbers as indices, use the `reset_index()` function" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "slideshow": { "slide_type": "-" }, "tags": [] }, "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", "
GenderAgeYoung FemaleYoung Female (as integer)Mean Age
0Female55.00.50.570.0
1Male80.00.00.070.0
\n", "
" ], "text/plain": [ " Gender Age Young Female Young Female (as integer) Mean Age\n", "0 Female 55.0 0.5 0.5 70.0\n", "1 Male 80.0 0.0 0.0 70.0" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "musicians_gender = musicians_gender.reset_index()\n", "musicians_gender" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" }, "tags": [] }, "source": [ "# Plot Data" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "-" }, "tags": [] }, "source": [ "
\"Plotting\"
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "**pandas** can easily create various types of plots based on the data\n", "* Plot all variables, where $x$ is the index\n", "```python\n", "df.plot()\n", "```" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "* Plot only one specific variable (against the index)\n", "```python\n", "df['variable'].plot()\n", "```\n", "or\n", "```python\n", "df.variable_name.plot()\n", "```" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "* Plot `variable X` against `variable Y`\n", "```python\n", "df.plot.scatter(x='Variable X', y='Variable Y')\n", "```" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "* Other plot types:\n", " * Box plot: `df.plot.box()`\n", " * Area plot: df.plot.area()\n", " * (Vertical) Bar plot: df.plot.bar()\n", " * (Horizontal) Bar plot: df.plot.barh()\n", " * Density plot: df.plot.density()\n", " * Historam: df.plot.hist()\n", " * KDE plot: df.plot.kde()\n", " * Pie Chart: df.plot.pie()" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAGwCAYAAABVdURTAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAABAvElEQVR4nO3deVxWdf7//+cFKKLAZS4sJilqau4LTpGKa5o25jbfaZzGtGyhTEt0Pqa22IqtWpqa5VLTlE4hZWWOVLK4tKCipmRWuKSgGQquIHB+f/Djmi5B5OAFFxwe99vt3PS8z/uc63VdqNfT93mfc2yGYRgCAACwCA93FwAAAOBKhBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGApXu4uoLIVFBToyJEj8vPzk81mc3c5AACgDAzD0KlTp9SkSRN5eJQ+NlPjws2RI0cUEhLi7jIAAEA5HDp0SE2bNi21T40LN35+fpIKPxx/f383VwMAAMoiOztbISEhju/x0tS4cFN0Ksrf359wAwBANVOWKSVMKAYAAJZCuAEAAJZCuAEAAJZS4+bclFV+fr4uXLjg7jIAy6pVq5Y8PT3dXQYACyLcXMQwDGVkZOjkyZPuLgWwvPr16ysoKIh7TgFwKcLNRYqCTUBAgOrWrcs/ukAFMAxDZ8+e1bFjxyRJwcHBbq4IgJUQbv4gPz/fEWwaNmzo7nIAS/Px8ZEkHTt2TAEBAZyiAuAyTCj+g6I5NnXr1nVzJUDNUPR3jfltAFyJcFMCTkUBlYO/a4AFnTsnHT1a+KubEG4AAMCV27hRGjVK8vWVgoIKfx01Stq0qdJLIdwAAIArs2iRFBEhffKJVFBQ2FZQULjeu7e0eHGllkO4qUhVYGgO1jZ79mx16dKlyhwHQA20caM0caJkGFJenvO2vLzC9gceqNQRHMJNRajkoblhw4Zp4MCBJW7bsmWLbDabtm3bViGvXZIVK1aofv36lfZ65dG8eXPNmzevQo5ts9n00Ucflalf0eLr66vOnTtrxYoVFVLT5eqbNm2avvzyS5e/FqEJqAFeeUW63NWOnp7S3LmVU48IN67nhqG5CRMm6KuvvtKBAweKbVu2bJm6dOmibt26mT5ubm6uK8qrUqrae1q+fLnS09O1Y8cO3Xbbbbrzzjv13//+t9Lr8PX15fYHAMw7d076+OPiIzYXy8uTYmMr7UwG4caV3DQ09+c//1kBAQHF/td/9uxZrVq1ShMmTJAkbd68WREREfLx8VFISIgmT56sM2fOOPo3b95czzzzjMaPHy+73a577rlH/fv314MPPuh03N9//13e3t766quvylRf0f/ely1bpmuuuUa+vr66//77lZ+frxdeeEFBQUEKCAjQs88+67SfzWbTokWLNGTIEPn4+Cg0NFQffPCBU59du3apf//+8vHxUcOGDXXvvffq9OnTju3jx4/XiBEjFB0drSZNmqh169bq27evDhw4oClTpjhGTore15gxY9S0aVPVrVtXHTt21Pvvv+/0en379tXkyZP1f//3f2rQoIGCgoI0e/Zsp89QkkaOHCmbzeZYv5SiO/S2bNlSM2fOVIMGDbR+/XrH9qysLN17770KCAiQv7+/+vfvrx07dlzyeN99951uuukmNWrUSHa7XX369HEatbtUfRePsBQUFOipp55S06ZN5e3trS5dumjdunWO7fv375fNZtPq1avVr18/1a1bV507d9aWLVtKfb8ALCY7+3//kb+cgoLC/pWAcONKbhqa8/Ly0h133KEVK1bIMAxH+wcffKDc3Fzdfvvt2rVrlwYPHqxRo0Zp586dWrVqlTZu3FgsuLz44ovq0KGDtm7dqscee0x333233nvvPeXk5Dj6/Pvf/1aTJk3Ur1+/Mtf4888/6/PPP9e6dev0/vvva9myZbrlllv066+/KiEhQc8//7weffRRff311077PfbYYxo9erR27Nihf/zjHxozZoxSU1MlFYa3m2++WVdddZW+++47ffDBB/riiy+Kvacvv/xSqampiouL06effqrVq1eradOmeuqpp5Senq709HRJ0vnz59W9e3d9+umn+v7773Xvvfdq7Nix+uabb5yO9/bbb6tevXr65ptv9MILL+ipp55SXFycpMJwIf1vRKZo/XLy8/P1n//8R5mZmapVq5akwrv43nLLLcrIyNDatWu1detWdevWTQMGDFBmZmaJxzl16pTGjRunpKQkff3117r22ms1dOhQnTp1ylR9r776ql5++WW99NJL2rlzpwYPHqxbb71V+/btc+o3a9YsTZs2TSkpKWrdurXGjBmjvMv9Dw6Adfj7Sx5ljBIeHoX9K4NRw2RlZRmSjKysrGLbzp07Z+zZs8c4d+6c+QOfPWsYHh6GUTg+U/ri4VHY34VSU1MNScZXX33laIuIiDDGjBljGIZhjB071rj33nud9klKSjI8PDwc77dZs2bGiBEjnPqcP3/eaNCggbFq1SpHW5cuXYzZs2dfspbly5cbdrvdsf7EE08YdevWNbKzsx1tgwcPNpo3b27k5+c72tq0aWNER0c71iUZkZGRTse+/vrrjfvvv98wDMNYsmSJcdVVVxmnT592bP/ss88MDw8PIyMjwzAMwxg3bpwRGBho5OTkOB2nWbNmxty5cy/5HooMHTrUmDp1qmO9T58+Rq9evZz69OjRw5g+fbpT3bGxsZc9tiSjTp06Rr169QxPT09DktGgQQNj3759hmEYxpdffmn4+/sb58+fd9qvZcuWxhtvvGEYRuFn27lz50u+Rl5enuHn52d88sknpdZ38XGaNGliPPvss8Xe5wMPPGAYhmGkpaUZkoy33nrLsX337t2GJCM1NdXR9uSTTxpdu3a9ZH1X9HcOQNUwcqRheHmV/r3n5WUYo0df0cuU9v19MUZuXMXNQ3Nt27bVjTfeqGXLlkkqHClJSkrSXXfdJUnaunWrVqxYIV9fX8cyePBgFRQUKC0tzXGcsLAwp+N6e3vrH//4h+O4KSkp2rFjh8aPH2+qvubNm8vPz8+xHhgYqHbt2snjD4k/MDDQ8ayhIuHh4cXWi0ZuUlNT1blzZ9WrV8+xvWfPniooKNDevXsdbR07dlTt2rUvW2N+fr6effZZderUSQ0bNpSvr6/Wr1+vgwcPOvXr1KmT03pwcHCxustq7ty5SklJUVxcnLp06aK5c+eqVatWkgp/ZqdPn3bUUrSkpaXp559/LvF4x44dU2RkpFq3bi273S673a7Tp08Xew+lyc7O1pEjR9SzZ0+n9p49ezo++yJ//CyKng/1x8+iqGYAFhYVJeXnl94nP1+aMqVy6pGbny21aNEiLVq0SPv375cktW/fXo8//riGDBlSYv/4+PgST4Wkpqaqbdu2FVnq5RUNzZUl4FTQ0NyECRP04IMP6vXXX9fy5cvVrFkzDRgwQFLhHIr77rtPkydPLrbfNddc4/j9H4NCkbvvvltdunTRr7/+qmXLlmnAgAFq1qyZqdqKTrUUsdlsJbYVlOHzK5ojYxjGJe9w+8f2kt5TSV5++WXNnTtX8+bNU8eOHVWvXj09/PDDxSYhl7fukgQFBalVq1Zq1aqVPvjgA3Xt2lVhYWFq166dCgoKFBwcrPj4+GL7XepqtPHjx+u3337TvHnz1KxZM3l7eys8PLxcE6kv/mxL+rz/+FkUbfvjZ2G32wk3gNX16iUtXFg4p9TT03nOqZdXYbBZuFC66D9MFcmtIzdNmzbVnDlzlJycrOTkZPXv31/Dhw/X7t27S91v7969jrkS6enpuvbaayup4lL4+EjDhxf+IEvj5SWNHFnY38X++te/ytPTU++9957efvtt3XnnnY4vnG7dumn37t2OL9I/Lpcb1ejYsaPCwsL05ptv6r333nOMBlWGi+fgfP31144g265dO6WkpDhNit60aZM8PDzUunXrUo9bu3Zt5V/0P42kpCQNHz5c//jHP9S5c2e1aNGi2ByTsqhVq1axY5dFq1atNHr0aM2YMUNS4c8sIyNDXl5exX5mjRo1KvEYSUlJmjx5soYOHar27dvL29tbx48fN1Wfv7+/mjRpoo0bNzq1b968Wdddd52p9zRhwgStXbvW1D4AqqHISCkpqfB7sGhE3sOjcD0pqXB7JXJruBk2bJiGDh2q1q1bq3Xr1nr22Wfl6+tb7AvtYgEBAQoKCnIspT1NOCcnR9nZ2U5LhXHz0Jyvr69uu+02zZw5U0eOHHE6dTR9+nRt2bJFEydOVEpKivbt26c1a9Zo0qRJZTr23XffrTlz5ig/P18jR46skPpL8sEHH2jZsmX68ccf9cQTT+jbb791TBi+/fbbVadOHY0bN07ff/+9NmzYoEmTJmns2LEKDAws9bjNmzdXYmKiDh8+7Pjyb9WqleLi4rR582alpqbqvvvuU0ZGhumamzdvri+//FIZGRk6ceKEqX2nTp2qTz75RMnJyRo4cKDCw8M1YsQI/fe//9X+/fu1efNmPfroo0pOTi5x/1atWulf//qXUlNT9c033+j22293PH3bTH3//Oc/9fzzz2vVqlXau3evHnnkEaWkpOihhx4y9X4WLFhQqX9eALhRz57Shx9Kp09LGRmFv374YaWO2BSpMnNu8vPztXLlSp05c6bYPIuLde3aVcHBwRowYIA2bNhQat/o6GjH3AO73a6QkBBXlu2saGjOZis+guPlVdhewUNzEyZM0IkTJzRw4ECn002dOnVSQkKC9u3bp969e6tr16567LHHHPMkLmfMmDHy8vLS3//+d9WpU6eiyi/mySef1MqVK9WpUye9/fbb+ve//6127dpJKnyi9H//+19lZmaqR48e+stf/qIBAwZowYIFlz3uU089pf3796tly5Zq3LixpMIrs7p166bBgwerb9++CgoK0ogRI0zX/PLLLysuLk4hISHq2rWrqX07duyogQMH6vHHH5fNZtPatWsVERGhu+66S61bt9bf/vY37d+//5LhbdmyZTpx4oS6du2qsWPHavLkyQoICDBd3+TJkzV16lRNnTpVHTt21Lp167RmzRrTo6THjx93mtMFoAbw8ZECAyvkDEVZ2QzjD9cOu8GuXbsUHh6u8+fPy9fXV++9956GDh1aYt+9e/cqMTFR3bt3V05Ojv71r39p8eLFio+PV0RERIn75OTkOF3GnJ2drZCQEGVlZcn/onkv58+fV1pamkJDQ6/sC3zTpsLLvWNjC+fgeHgUnoqaMsUtCdYVDh06pObNm+u7774r1w0By8Nmsyk2NrZcAQPVg8v+zgGwvOzsbNnt9hK/vy/m1gnFktSmTRulpKTo5MmTiomJ0bhx45SQkOD43/nFfdu0aeNYDw8P16FDh/TSSy9dMtx4e3vL29u7wuovUc+ehcu5c4VXRfn7uzXBXokLFy4oPT1djzzyiG644YZKCzYAAJSX209L1a5dW61atVJYWJiio6PVuXNnvfrqq2Xe/4YbbijXpM9KUQWG5q7Upk2b1KxZM23dulWLK/mprgAAlIfbR24uZhiG02mky9m+fXuZ543AvL59+8pdZy7dfMYUAFBNuTXczJw5U0OGDFFISIhOnTqllStXKj4+3vEMmxkzZujw4cN65513JEnz5s1T8+bN1b59e+Xm5urdd99VTEyMYmJiXFoXX6pA5eDvGoCK4NZwc/ToUY0dO1bp6emy2+3q1KmT1q1bp5tuukmSlJ6e7nRn1dzcXE2bNk2HDx+Wj4+P2rdvr88+++ySE5DNKroh2dmzZ4tdPgvA9c6ePSup+I0RAeBKuP1qqcp2udnW6enpOnnypAICAlS3bt1L3gEXQPkZhqGzZ8/q2LFjql+/PqeWAVxWtbpaqqoJCgqSpHI/KwhA2dWvX9/xdw4AXIVwcxGbzabg4GAFBATowoUL7i4HsKxatWqVendxACgvws0leHp68g8vAADVkNvvcwMAAOBKhBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGApbg03ixYtUqdOneTv7y9/f3+Fh4fr888/L3WfhIQEde/eXXXq1FGLFi20ePHiSqoWAABUB24NN02bNtWcOXOUnJys5ORk9e/fX8OHD9fu3btL7J+WlqahQ4eqd+/e2r59u2bOnKnJkycrJiamkisHAABVlc0wDMPdRfxRgwYN9OKLL2rChAnFtk2fPl1r1qxRamqqoy0yMlI7duzQli1bynT87Oxs2e12ZWVlyd/f32V1AwCAimPm+7vKzLnJz8/XypUrdebMGYWHh5fYZ8uWLRo0aJBT2+DBg5WcnKwLFy6UuE9OTo6ys7OdFgAAYF1uDze7du2Sr6+vvL29FRkZqdjYWLVr167EvhkZGQoMDHRqCwwMVF5eno4fP17iPtHR0bLb7Y4lJCTE5e8BAABUHW4PN23atFFKSoq+/vpr3X///Ro3bpz27Nlzyf42m81pveis2sXtRWbMmKGsrCzHcujQIdcVDwAAqhwvdxdQu3ZttWrVSpIUFham7777Tq+++qreeOONYn2DgoKUkZHh1Hbs2DF5eXmpYcOGJR7f29tb3t7eri8cAABUSW4fubmYYRjKyckpcVt4eLji4uKc2tavX6+wsDDVqlWrMsoDAABVnFvDzcyZM5WUlKT9+/dr165dmjVrluLj43X77bdLKjyldMcddzj6R0ZG6sCBA4qKilJqaqqWLVumpUuXatq0ae56CwAAoIpx62mpo0ePauzYsUpPT5fdblenTp20bt063XTTTZKk9PR0HTx40NE/NDRUa9eu1ZQpU/T666+rSZMmeu211zR69Gh3vQUAAFDFVLn73FQ07nMDAED1Uy3vcwMAAOAKhBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsA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uXnhhRd0yy236IsvvlB4eLhsNps2b96sQ4cOae3atRVRIwAAQJmZHrnp06ePfvzxR40cOVInT55UZmamRo0apb1796p3794VUSMAAECZlWnkZtSoUVqxYoX8/f31zjvv6LbbbuOqKAAAUCWVaeTm008/1ZkzZyRJd955p7Kysiq0KAAAgPIq08hN27ZtNWPGDPXr10+GYeg///nPJS/DuuOOO1xaIAAAgBllus/N5s2bFRUVpZ9//lmZmZny8/Mr8SGZNputyl8Ozn1uAACofsx8f5u+iZ+Hh4cyMjIUEBBwRUW6C+EGAIDqp0Jv4peWlqbGjRuXuzgAAICKZDrcpKamatOmTY71119/XV26dNHf//53nThxwqXFAQAAmGU63Pzzn/9Udna2JGnXrl2aOnWqhg4dql9++UVRUVEuLxAAAMAM03coTktLU7t27SRJMTEx+vOf/6znnntO27Zt09ChQ11eIAAAgBmmR25q166ts2fPSpK++OILDRo0SJLUoEEDx4gOAACAu5geuenVq5eioqLUs2dPffvtt1q1apUk6ccff1TTpk1dXiAAAIAZpkduFixYIC8vL3344YdatGiRrr76aknS559/rptvvtnlBQIAAJhh+j431R33uQEAoPox8/1t+rSUJBUUFOinn37SsWPHVFBQ4LQtIiKiPIcEAABwCdPh5uuvv9bf//53HThwQBcP+thsNuXn57usOAAAALNMh5vIyEiFhYXps88+U3BwcInPmAIAAHAX0+Fm3759+vDDD9WqVauKqAcAAOCKmL5a6vrrr9dPP/1UEbUAAABcMdMjN5MmTdLUqVOVkZGhjh07qlatWk7bO3Xq5LLiAAAAzDJ9KbiHR/HBHpvNJsMwqsWEYi4FBwCg+qnQS8HT0tLKXRgAAEBFMx1umjVrVhF1AAAAuES5buInSXv27NHBgweVm5vr1H7rrbdecVEAAADlZTrc/PLLLxo5cqR27drlmGsjyXG/m6o+5wYAAFib6UvBH3roIYWGhuro0aOqW7eudu/ercTERIWFhSk+Pr4CSgQAACg70yM3W7Zs0VdffaXGjRvLw8NDHh4e6tWrl6KjozV58mRt3769IuoEAAAoE9MjN/n5+fL19ZUkNWrUSEeOHJFUONF47969rq0OAADAJNMjNx06dNDOnTvVokULXX/99XrhhRdUu3ZtLVmy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q0vu27dvXz300EP68MMPHUGmT58++uKLL7R582Y99NBDpmq56qqrFBwc7JjIW5YayqJbt26KiYlR8+bNL3kFlc1mU8+ePdWzZ089/vjjatasmWJjYxUVFXVFrw2gbBi5AeAyHTt21O2336758+c7tU+fPl1btmzRxIkTHaMca9as0aRJkxx9OnTooIYNG+rf//63I9z07dtXH330kc6dO6devXpd8nXfeOMN3X///Vq/fr1+/vln7d69W9OnT9fu3bs1bNiwMtdQFhMnTlRmZqbGjBmjb7/9Vr/88ovWr1+vu+66S/n5+frmm2/03HPPKTk5WQcPHtTq1av122+/6brrrjP1OgDKj3ADwKWefvrpYlcGderUSQkJCdq3b5969+6trl276rHHHlNwcLCjj81mc1wN1bt3b8d+drtdXbt2lb+//yVf809/+pNOnz6tyMhItW/fXn369NHXX3+tjz76yHHMstRQFk2aNNGmTZuUn5+vwYMHq0OHDnrooYdkt9vl4eEhf39/JSYmaujQoWrdurUeffRRvfzyyxoyZIip1wFQfjbj4n+FAAAAqjFGbgAAgKUQbgAAgKUQbgAAgKUQbgAAgKUQbgAAgKUQbgAAgKUQbgAAgKUQbgAAgKUQbgAAgKUQbgAAgKUQbgAAgKX8f9JnhQXyBJeEAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "random_data.plot.scatter(x='New Series', y='Some Transformation', \n", " color='r', s=50, label='Very Important Relation!')" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## **pandas** uses `matplotlib`, so we can pass options or use axes and figures as we learned before" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "## We can also pass **pandas** dataframes to **seaborn**, **statsmodels**, and many other packages" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" }, "tags": [] }, "source": [ "# Reshape DataFrame" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "-" }, "tags": [] }, "source": [ "
\"melt\"\"pivot\"
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "## Many times you may need to reshape you data\n", "* To be used in other python commands\n", "* For further processing" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "# Reshape DataFrame From Wide To Long" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "-" }, "tags": [] }, "source": [ "
\"melt\"
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "## Original dataframe has units (countries, households, individuals) in rows and variables or yearly observations in columns" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [] }, "source": [ "## New dataframe has unit $\\times$ variable/year in each row and values in columns" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "## Useful commands\n", "* [`pd.wide_to_long(df, stubnames, i, j, sep='', suffix='\\\\d+')`](https://pandas.pydata.org/docs/reference/api/pandas.wide_to_long.html)\n", "* [`pd.melt(frame, id_vars=None, value_vars=None, var_name=None, value_name='value', col_level=None, ignore_index=True)`](https://pandas.pydata.org/docs/reference/api/pandas.melt.html#pandas.melt)\n", "* [`df.melt(id_vars=None, value_vars=None, var_name=None, value_name='value', col_level=None, ignore_index=True)`](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.melt.html#pandas.DataFrame.melt)\n", "* [`df.stack(level=- 1, dropna=True)`](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.stack.html#pandas.DataFrame.stack)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "
\"melt\"
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "
\"melt\"
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "# Reshape DataFrame From Long To Wide" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "-" }, "tags": [] }, "source": [ "
\"pivot\"
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "## Original dataframe has unit $\\times$ variable/year in each row and values in columns" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [] }, "source": [ "## New dataframe has units (countries, households, individuals) in rows and variables or yearly observations in columns" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "## Useful commands\n", "* [`pd.pivot(data, index=None, columns=None, values=None)`](https://pandas.pydata.org/docs/reference/api/pandas.pivot.html#pandas.pivot)\n", "* [`df.pivot(index=None, columns=None, values=None)`](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.pivot.html#pandas.DataFrame.pivot)\n", "* [`df.unstack(level=- 1, fill_value=None)`](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.unstack.html#pandas.DataFrame.unstack)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "
\"melt\"
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "
\"melt\"
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" }, "tags": [] }, "source": [ "# Combine Data from Multiple DataFrames" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "-" }, "tags": [] }, "source": [ "
\"concatenate\"
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "# Concatenating Dataframes" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "-" }, "tags": [] }, "source": [ "
\"concatenate\"
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "## **pandas** let's you easily concatenate various `Series` or `DataFrames` to create a new `DataFrame`\n", "[`pd.concat(objs, axis=0, join='outer', ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, sort=False, copy=True)`](https://pandas.pydata.org/docs/reference/api/pandas.concat.html)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "```python\n", "pd.concat([df1, df2, df3])\n", "```" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "-" }, "tags": [] }, "source": [ "
\"concatenate\"
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "```python\n", "pd.concat([df1, df4], axis=1)\n", "```" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "-" }, "tags": [] }, "source": [ "
\"concatenate\"
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "```python\n", "pd.concat([df1, df4], axis=1, join='inner')\n", "```" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "-" }, "tags": [] }, "source": [ "
\"concatenate\"
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "# Merging/Joining Dataframes" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "-" }, "tags": [] }, "source": [ "
\"concatenate\"
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "## **pandas** let's you easily merge/join `Series` or `DataFrames` to create a new `DataFrame`" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [] }, "source": [ "* [`pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'), copy=True, indicator=False, validate=None)`](https://pandas.pydata.org/docs/reference/api/pandas.merge.html)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [] }, "source": [ "* [`df.merge(right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'), copy=True, indicator=False, validate=None)`](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.merge.html)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "```python\n", "pd.merge([left, right])\n", "```\n", "or\n", "```python\n", "left.merge(right)\n", "```\n", "or\n", "```python\n", "right.merge(left)\n", "```" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "-" }, "tags": [] }, "source": [ "
\"concatenate\"
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "```python\n", "pd.merge([left, right])\n", "```\n", "or\n", "```python\n", "pd.merge([left, right], on=[\"key1\", \"key2\"])\n", "```" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "-" }, "tags": [] }, "source": [ "
\"concatenate\"
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "```python\n", "pd.merge([left, right], how=\"left\", on=[\"key1\", \"key2\"])\n", "```\n", "or\n", "```python\n", "left.merge(right, how=\"left\", on=[\"key1\", \"key2\"])\n", "```\n", "or\n", "```python\n", "right.merge(left, how=\"right\", on=[\"key1\", \"key2\"])\n", "```" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "-" }, "tags": [] }, "source": [ "
\"concatenate\"
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "```python\n", "pd.merge([left, right], how=\"right\", on=[\"key1\", \"key2\"])\n", "```\n", "or\n", "```python\n", "left.merge(right, how=\"right\", on=[\"key1\", \"key2\"])\n", "```\n", "or\n", "```python\n", "right.merge(left, how=\"left\", on=[\"key1\", \"key2\"])\n", "```" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "-" }, "tags": [] }, "source": [ "
\"concatenate\"
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "```python\n", "pd.merge([left, right], how=\"outer\", on=[\"key1\", \"key2\"])\n", "```\n", "or\n", "```python\n", "left.merge(right, how=\"outer\", on=[\"key1\", \"key2\"])\n", "```\n", "or\n", "```python\n", "right.merge(left, how=\"outer\", on=[\"key1\", \"key2\"])\n", "```" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "-" }, "tags": [] }, "source": [ "
\"concatenate\"
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Many Other Options and Possibilities\n", "* [Working with Time Series](https://pandas.pydata.org/docs/getting_started/intro_tutorials/09_timeseries.html#min-tut-09-timeseries)\n", "* [Working with Text](https://pandas.pydata.org/docs/getting_started/intro_tutorials/10_text_data.html#min-tut-10-text)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" }, "tags": [] }, "source": [ "#
Examples
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "# Example - Import data" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Let's import the table of countries' ISO codes from [Wikipedia](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes)" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Import display options for showing websites\n", "from IPython.display import IFrame\n", "url = 'https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes'\n", "IFrame(url, width=800, height=400)" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "scrolled": true, "slideshow": { "slide_type": "subslide" }, "tags": [] }, "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", "
ISO 3166[1] name[5]Official state name[6][a]Sovereignty [6][7][8]ISO 3166-1[2]ISO 3166-2[3] subdivision codes linkTLD [9]
ISO 3166[1] name[5]Official state name[6][a]Sovereignty [6][7][8]A-2 [5]A-3 [5]Num. [5]ISO 3166-2[3] subdivision codes linkTLD [9]
0Afghanistanthe Islamic Republic of Afghanistan[b]UN memberAFAFG004ISO 3166-2:AF.af
1Åland IslandsÅland[c][d]FinlandAXALA248ISO 3166-2:AX.ax
2Albaniathe Republic of AlbaniaUN memberALALB008ISO 3166-2:AL.al
3Algeriathe People's Democratic Republic of AlgeriaUN memberDZDZA012ISO 3166-2:DZ.dz
4American SamoaAmerican Samoa[c]United StatesASASM016ISO 3166-2:AS.as
...........................
266Wallis and Futunathe Territory of the Wallis and Futuna IslandsFranceWFWLF876ISO 3166-2:WF.wf
267Western Sahara [an]the Sahrawi Arab Democratic Republic[c][d]Disputed [ao]EHESH732ISO 3166-2:EH[ap]
268Yementhe Republic of YemenUN memberYEYEM887ISO 3166-2:YE.ye
269Zambiathe Republic of ZambiaUN memberZMZMB894ISO 3166-2:ZM.zm
270Zimbabwethe Republic of ZimbabweUN memberZWZWE716ISO 3166-2:ZW.zw
\n", "

271 rows × 8 columns

\n", "
" ], "text/plain": [ " ISO 3166[1] name[5] Official state name[6][a] Sovereignty [6][7][8] ISO 3166-1[2] ISO 3166-2[3] subdivision codes link TLD [9]\n", " ISO 3166[1] name[5] Official state name[6][a] Sovereignty [6][7][8] A-2 [5] A-3 [5] Num. [5] ISO 3166-2[3] subdivision codes link TLD [9]\n", "0 Afghanistan the Islamic Republic of Afghanistan[b] UN member AF AFG 004 ISO 3166-2:AF .af\n", "1 Åland Islands Åland[c][d] Finland AX ALA 248 ISO 3166-2:AX .ax\n", "2 Albania the Republic of Albania UN member AL ALB 008 ISO 3166-2:AL .al\n", "3 Algeria the People's Democratic Republic of Algeria UN member DZ DZA 012 ISO 3166-2:DZ .dz\n", "4 American Samoa American Samoa[c] United States AS ASM 016 ISO 3166-2:AS .as\n", ".. ... ... ... ... ... ... ... ...\n", "266 Wallis and Futuna the Territory of the Wallis and Futuna Islands France WF WLF 876 ISO 3166-2:WF .wf\n", "267 Western Sahara [an] the Sahrawi Arab Democratic Republic[c][d] Disputed [ao] EH ESH 732 ISO 3166-2:EH [ap]\n", "268 Yemen the Republic of Yemen UN member YE YEM 887 ISO 3166-2:YE .ye\n", "269 Zambia the Republic of Zambia UN member ZM ZMB 894 ISO 3166-2:ZM .zm\n", "270 Zimbabwe the Republic of Zimbabwe UN member ZW ZWE 716 ISO 3166-2:ZW .zw\n", "\n", "[271 rows x 8 columns]" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "isocodes = pd.read_html(url, encoding='utf-8')[0]\n", "isocodes" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Not perfect, but we can correct it and make it look nice" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "MultiIndex([( 'ISO 3166[1] name[5]', 'ISO 3166[1] name[5]'),\n", " ( 'Official state name[6][a]', 'Official state name[6][a]'),\n", " ( 'Sovereignty [6][7][8]', 'Sovereignty [6][7][8]'),\n", " ( 'ISO 3166-1[2]', 'A-2 [5]'),\n", " ( 'ISO 3166-1[2]', 'A-3 [5]'),\n", " ( 'ISO 3166-1[2]', 'Num. [5]'),\n", " ('ISO 3166-2[3] subdivision codes link', 'ISO 3166-2[3] subdivision codes link'),\n", " ( 'TLD [9]', 'TLD [9]')],\n", " )" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "isocodes.columns" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## First, let's drop the first column index" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [] }, "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", "
ISO 3166[1] name[5]Official state name[6][a]Sovereignty [6][7][8]A-2 [5]A-3 [5]Num. [5]ISO 3166-2[3] subdivision codes linkTLD [9]
0Afghanistanthe Islamic Republic of Afghanistan[b]UN memberAFAFG004ISO 3166-2:AF.af
1Åland IslandsÅland[c][d]FinlandAXALA248ISO 3166-2:AX.ax
2Albaniathe Republic of AlbaniaUN memberALALB008ISO 3166-2:AL.al
3Algeriathe People's Democratic Republic of AlgeriaUN memberDZDZA012ISO 3166-2:DZ.dz
4American SamoaAmerican Samoa[c]United StatesASASM016ISO 3166-2:AS.as
\n", "
" ], "text/plain": [ " ISO 3166[1] name[5] Official state name[6][a] Sovereignty [6][7][8] A-2 [5] A-3 [5] Num. [5] ISO 3166-2[3] subdivision codes link TLD [9]\n", "0 Afghanistan the Islamic Republic of Afghanistan[b] UN member AF AFG 004 ISO 3166-2:AF .af\n", "1 Åland Islands Åland[c][d] Finland AX ALA 248 ISO 3166-2:AX .ax\n", "2 Albania the Republic of Albania UN member AL ALB 008 ISO 3166-2:AL .al\n", "3 Algeria the People's Democratic Republic of Algeria UN member DZ DZA 012 ISO 3166-2:DZ .dz\n", "4 American Samoa American Samoa[c] United States AS ASM 016 ISO 3166-2:AS .as" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "isocodes = isocodes.droplevel(0, axis=1)\n", "isocodes.head()" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Second, let's correct column names" ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "['ISO 3166',\n", " 'Official state name',\n", " 'Sovereignty',\n", " 'A-2',\n", " 'A-3',\n", " 'Num.',\n", " 'ISO 3166-2',\n", " 'TLD']" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mycols = isocodes.columns\n", "mycols = [c[:c.find('[')].strip() for c in mycols]\n", "mycols" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "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", "
ISO 3166Official state nameSovereigntyA-2A-3Num.ISO 3166-2TLD
0Afghanistanthe Islamic Republic of Afghanistan[b]UN memberAFAFG004ISO 3166-2:AF.af
1Åland IslandsÅland[c][d]FinlandAXALA248ISO 3166-2:AX.ax
2Albaniathe Republic of AlbaniaUN memberALALB008ISO 3166-2:AL.al
3Algeriathe People's Democratic Republic of AlgeriaUN memberDZDZA012ISO 3166-2:DZ.dz
4American SamoaAmerican Samoa[c]United StatesASASM016ISO 3166-2:AS.as
\n", "
" ], "text/plain": [ " ISO 3166 Official state name Sovereignty A-2 A-3 Num. ISO 3166-2 TLD\n", "0 Afghanistan the Islamic Republic of Afghanistan[b] UN member AF AFG 004 ISO 3166-2:AF .af\n", "1 Åland Islands Åland[c][d] Finland AX ALA 248 ISO 3166-2:AX .ax\n", "2 Albania the Republic of Albania UN member AL ALB 008 ISO 3166-2:AL .al\n", "3 Algeria the People's Democratic Republic of Algeria UN member DZ DZA 012 ISO 3166-2:DZ .dz\n", "4 American Samoa American Samoa[c] United States AS ASM 016 ISO 3166-2:AS .as" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "isocodes.columns = mycols\n", "isocodes.head()" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Third, let's correct `Alpha-2 code` using `ISO 3166-2`" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [] }, "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", "
ISO 3166Official state nameSovereigntyA-2A-3Num.ISO 3166-2TLDAlpha-2 code originalAlpha-2 code
0Afghanistanthe Islamic Republic of Afghanistan[b]UN memberAFAFG004ISO 3166-2:AF.afAFAF
1Åland IslandsÅland[c][d]FinlandAXALA248ISO 3166-2:AX.axAXAX
2Albaniathe Republic of AlbaniaUN memberALALB008ISO 3166-2:AL.alALAL
3Algeriathe People's Democratic Republic of AlgeriaUN memberDZDZA012ISO 3166-2:DZ.dzDZDZ
4American SamoaAmerican Samoa[c]United StatesASASM016ISO 3166-2:AS.asASAS
\n", "
" ], "text/plain": [ " ISO 3166 Official state name Sovereignty A-2 A-3 Num. ISO 3166-2 TLD Alpha-2 code original Alpha-2 code\n", "0 Afghanistan the Islamic Republic of Afghanistan[b] UN member AF AFG 004 ISO 3166-2:AF .af AF AF\n", "1 Åland Islands Åland[c][d] Finland AX ALA 248 ISO 3166-2:AX .ax AX AX\n", "2 Albania the Republic of Albania UN member AL ALB 008 ISO 3166-2:AL .al AL AL\n", "3 Algeria the People's Democratic Republic of Algeria UN member DZ DZA 012 ISO 3166-2:DZ .dz DZ DZ\n", "4 American Samoa American Samoa[c] United States AS ASM 016 ISO 3166-2:AS .as AS AS" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "isocodes['Alpha-2 code original'] = isocodes['A-2']\n", "isocodes['Alpha-2 code'] = isocodes['ISO 3166-2'].apply(lambda x: x[x.find(':')+1:])\n", "isocodes.head()" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Now, let's import the table of countries' GDP per capita (PPP) from [Wikipedia](https://en.wikipedia.org/wiki/List_of_countries_by_GDP_(PPP)_per_capita)" ] }, { "cell_type": "code", "execution_count": 39, "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "url = 'https://en.wikipedia.org/wiki/List_of_countries_by_GDP_(PPP)_per_capita'\n", "IFrame(url, width=800, height=400)" ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "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", "
Country/TerritoryIMF[5][6]World Bank[7]CIA[8][9][10]
Country/TerritoryProjectionYearEstimateYearEstimateYear
0Luxembourg *151146202414334220231157002021
1Singapore *148186202414150020231060002021
2Liechtenstein *1391002009
3Macau *13041720241131832023648002021
4Ireland *127750202412762320231025002021
........................
225Malawi *171420241868202315002021
226North Korea *17002015
227Central African Republic *12962024113020238002021
228Burundi *986202495120237002021
229South Sudan *76320241146201516002017
\n", "

230 rows × 7 columns

\n", "
" ], "text/plain": [ " Country/Territory IMF[5][6] World Bank[7] CIA[8][9][10] \n", " Country/Territory Projection Year Estimate Year Estimate Year\n", "0 Luxembourg * 151146 2024 143342 2023 115700 2021\n", "1 Singapore * 148186 2024 141500 2023 106000 2021\n", "2 Liechtenstein * — — — — 139100 2009\n", "3 Macau * 130417 2024 113183 2023 64800 2021\n", "4 Ireland * 127750 2024 127623 2023 102500 2021\n", ".. ... ... ... ... ... ... ...\n", "225 Malawi * 1714 2024 1868 2023 1500 2021\n", "226 North Korea * — — — — 1700 2015\n", "227 Central African Republic * 1296 2024 1130 2023 800 2021\n", "228 Burundi * 986 2024 951 2023 700 2021\n", "229 South Sudan * 763 2024 1146 2015 1600 2017\n", "\n", "[230 rows x 7 columns]" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gdppc_wiki = pd.read_html(url, encoding='utf-8')[1]\n", "gdppc_wiki" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "## Again we need to clean the data a little bit" ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [] }, "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", "
Country/Territorygdppc_IMFyear_IMFgdppc_WByear_WBgdppc_CIAyear_CIA
0Luxembourg *151146202414334220231157002021
1Singapore *148186202414150020231060002021
2Liechtenstein *1391002009
3Macau *13041720241131832023648002021
4Ireland *127750202412762320231025002021
\n", "
" ], "text/plain": [ " Country/Territory gdppc_IMF year_IMF gdppc_WB year_WB gdppc_CIA year_CIA\n", "0 Luxembourg * 151146 2024 143342 2023 115700 2021\n", "1 Singapore * 148186 2024 141500 2023 106000 2021\n", "2 Liechtenstein * — — — — 139100 2009\n", "3 Macau * 130417 2024 113183 2023 64800 2021\n", "4 Ireland * 127750 2024 127623 2023 102500 2021" ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gdppc_wiki.columns = ['Country/Territory', 'gdppc_IMF', 'year_IMF',\n", " 'gdppc_WB', 'year_WB', 'gdppc_CIA', 'year_CIA']\n", "gdppc_wiki.head()" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "## Let's eliminate the * in the country names" ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [] }, "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", "
Country/Territorygdppc_IMFyear_IMFgdppc_WByear_WBgdppc_CIAyear_CIAcountry_name
0Luxembourg *151146202414334220231157002021Luxembourg
1Singapore *148186202414150020231060002021Singapore
2Liechtenstein *1391002009Liechtenstein
3Macau *13041720241131832023648002021Macau
4Ireland *127750202412762320231025002021Ireland
\n", "
" ], "text/plain": [ " Country/Territory gdppc_IMF year_IMF gdppc_WB year_WB gdppc_CIA year_CIA country_name\n", "0 Luxembourg * 151146 2024 143342 2023 115700 2021 Luxembourg\n", "1 Singapore * 148186 2024 141500 2023 106000 2021 Singapore\n", "2 Liechtenstein * — — — — 139100 2009 Liechtenstein\n", "3 Macau * 130417 2024 113183 2023 64800 2021 Macau\n", "4 Ireland * 127750 2024 127623 2023 102500 2021 Ireland" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gdppc_wiki['country_name'] = gdppc_wiki['Country/Territory'].str.replace('*', '').str.strip()\n", "gdppc_wiki.head()" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "# Let's make sure years and GDPpc columns are treated as numbers" ] }, { "cell_type": "code", "execution_count": 43, "metadata": { "scrolled": true, "slideshow": { "slide_type": "fragment" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "Country/Territory object\n", "gdppc_IMF object\n", "year_IMF object\n", "gdppc_WB object\n", "year_WB object\n", "gdppc_CIA int64\n", "year_CIA object\n", "country_name object\n", "dtype: object" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gdppc_wiki.dtypes" ] }, { "cell_type": "code", "execution_count": 44, "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "outputs": [], "source": [ "for c in gdppc_wiki.columns[1:-1]:\n", " if gdppc_wiki[c].dtype=='O':\n", " gdppc_wiki[c] = pd.to_numeric(gdppc_wiki[c].str.replace('—', 'nan'), errors='coerce')\n", " if c.startswith('year'):\n", " gdppc_wiki[c] = gdppc_wiki[c].astype('Int64')" ] }, { "cell_type": "code", "execution_count": 45, "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "Country/Territory object\n", "gdppc_IMF float64\n", "year_IMF Int64\n", "gdppc_WB float64\n", "year_WB Int64\n", "gdppc_CIA int64\n", "year_CIA Int64\n", "country_name object\n", "dtype: object" ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gdppc_wiki.dtypes" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "## Let's try to merge the data from both dataframes" ] }, { "cell_type": "code", "execution_count": 46, "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [] }, "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", "
ISO 3166Official state nameSovereigntyA-2A-3Num.ISO 3166-2TLDAlpha-2 code originalAlpha-2 code
0Afghanistanthe Islamic Republic of Afghanistan[b]UN memberAFAFG004ISO 3166-2:AF.afAFAF
1Åland IslandsÅland[c][d]FinlandAXALA248ISO 3166-2:AX.axAXAX
\n", "
" ], "text/plain": [ " ISO 3166 Official state name Sovereignty A-2 A-3 Num. ISO 3166-2 TLD Alpha-2 code original Alpha-2 code\n", "0 Afghanistan the Islamic Republic of Afghanistan[b] UN member AF AFG 004 ISO 3166-2:AF .af AF AF\n", "1 Åland Islands Åland[c][d] Finland AX ALA 248 ISO 3166-2:AX .ax AX AX" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "isocodes.head(2)" ] }, { "cell_type": "code", "execution_count": 47, "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [] }, "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", "
Country/Territorygdppc_IMFyear_IMFgdppc_WByear_WBgdppc_CIAyear_CIAcountry_name
0Luxembourg *151146.02024143342.020231157002021Luxembourg
\n", "
" ], "text/plain": [ " Country/Territory gdppc_IMF year_IMF gdppc_WB year_WB gdppc_CIA year_CIA country_name\n", "0 Luxembourg * 151146.0 2024 143342.0 2023 115700 2021 Luxembourg" ] }, "execution_count": 47, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gdppc_wiki.head(1)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "## The only common information in both dataframes is the country's name, so let's merge using the corrected `country_name` and `ISO 3166`" ] }, { "cell_type": "code", "execution_count": 48, "metadata": { "scrolled": true, "slideshow": { "slide_type": "subslide" }, "tags": [] }, "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", "
ISO 3166Official state nameSovereigntyA-2A-3Num.ISO 3166-2TLDAlpha-2 code originalAlpha-2 codeCountry/Territorygdppc_IMFyear_IMFgdppc_WByear_WBgdppc_CIAyear_CIAcountry_name
0Afghanistanthe Islamic Republic of Afghanistan[b]UN memberAFAFG004ISO 3166-2:AF.afAFAFAfghanistan *2116.020222093.0202215002021Afghanistan
1Albaniathe Republic of AlbaniaUN memberALALB008ISO 3166-2:AL.alALALAlbania *21377.0202421395.02023145002021Albania
2Algeriathe People's Democratic Republic of AlgeriaUN memberDZDZA012ISO 3166-2:DZ.dzDZDZAlgeria *17718.0202417027.02023110002021Algeria
3American SamoaAmerican Samoa[c]United StatesASASM016ISO 3166-2:AS.asASASAmerican Samoa *NaN<NA>NaN<NA>112002016American Samoa
4Andorrathe Principality of AndorraUN memberADAND020ISO 3166-2:AD.adADADAndorra *68612.0202471588.02023499002015Andorra
.........................................................
170Vanuatuthe Republic of VanuatuUN memberVUVUT548ISO 3166-2:VU.vuVUVUVanuatu *2878.020243315.0202328002021Vanuatu
171Wallis and Futunathe Territory of the Wallis and Futuna IslandsFranceWFWLF876ISO 3166-2:WF.wfWFWFWallis and Futuna *NaN<NA>NaN<NA>38002004Wallis and Futuna
172Yementhe Republic of YemenUN memberYEYEM887ISO 3166-2:YE.yeYEYEYemen *1996.020243437.0201325002017Yemen
173Zambiathe Republic of ZambiaUN memberZMZMB894ISO 3166-2:ZM.zmZMZMZambia *4190.020244126.0202332002021Zambia
174Zimbabwethe Republic of ZimbabweUN memberZWZWE716ISO 3166-2:ZW.zwZWZWZimbabwe *5071.020243900.0202321002021Zimbabwe
\n", "

175 rows × 18 columns

\n", "
" ], "text/plain": [ " ISO 3166 Official state name Sovereignty A-2 A-3 Num. ISO 3166-2 TLD Alpha-2 code original Alpha-2 code Country/Territory \\\n", "0 Afghanistan the Islamic Republic of Afghanistan[b] UN member AF AFG 004 ISO 3166-2:AF .af AF AF Afghanistan * \n", "1 Albania the Republic of Albania UN member AL ALB 008 ISO 3166-2:AL .al AL AL Albania * \n", "2 Algeria the People's Democratic Republic of Algeria UN member DZ DZA 012 ISO 3166-2:DZ .dz DZ DZ Algeria * \n", "3 American Samoa American Samoa[c] United States AS ASM 016 ISO 3166-2:AS .as AS AS American Samoa * \n", "4 Andorra the Principality of Andorra UN member AD AND 020 ISO 3166-2:AD .ad AD AD Andorra * \n", ".. ... ... ... .. ... ... ... ... ... ... ... \n", "170 Vanuatu the Republic of Vanuatu UN member VU VUT 548 ISO 3166-2:VU .vu VU VU Vanuatu * \n", "171 Wallis and Futuna the Territory of the Wallis and Futuna Islands France WF WLF 876 ISO 3166-2:WF .wf WF WF Wallis and Futuna * \n", "172 Yemen the Republic of Yemen UN member YE YEM 887 ISO 3166-2:YE .ye YE YE Yemen * \n", "173 Zambia the Republic of Zambia UN member ZM ZMB 894 ISO 3166-2:ZM .zm ZM ZM Zambia * \n", "174 Zimbabwe the Republic of Zimbabwe UN member ZW ZWE 716 ISO 3166-2:ZW .zw ZW ZW Zimbabwe * \n", "\n", " gdppc_IMF year_IMF gdppc_WB year_WB gdppc_CIA year_CIA country_name \n", "0 2116.0 2022 2093.0 2022 1500 2021 Afghanistan \n", "1 21377.0 2024 21395.0 2023 14500 2021 Albania \n", "2 17718.0 2024 17027.0 2023 11000 2021 Algeria \n", "3 NaN NaN 11200 2016 American Samoa \n", "4 68612.0 2024 71588.0 2023 49900 2015 Andorra \n", ".. ... ... ... ... ... ... ... \n", "170 2878.0 2024 3315.0 2023 2800 2021 Vanuatu \n", "171 NaN NaN 3800 2004 Wallis and Futuna \n", "172 1996.0 2024 3437.0 2013 2500 2017 Yemen \n", "173 4190.0 2024 4126.0 2023 3200 2021 Zambia \n", "174 5071.0 2024 3900.0 2023 2100 2021 Zimbabwe \n", "\n", "[175 rows x 18 columns]" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ "merged = isocodes.merge(gdppc_wiki, left_on='ISO 3166', right_on='country_name')\n", "merged" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "
\n", "Careful: Remember that merge will create a complete dataset only for the countries that have common names in both.\n", "
" ] }, { "cell_type": "code", "execution_count": 49, "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "(175, 18)" ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ "merged.shape" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## What are the not common country names in both dataframes?" ] }, { "cell_type": "code", "execution_count": 50, "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [] }, "outputs": [], "source": [ "isocodes_names = set(isocodes['ISO 3166'])\n", "gdppc_wiki_names = set(gdppc_wiki['country_name'])" ] }, { "cell_type": "code", "execution_count": 51, "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "{'Antarctica\\u200a[e]',\n", " 'Australia\\u200a[f]',\n", " 'Bahamas (the)',\n", " 'Bolivia (Plurinational State of)',\n", " 'Bonaire \\xa0Sint Eustatius \\xa0Saba',\n", " 'Bouvet Island',\n", " 'British Indian Ocean Territory (the)',\n", " 'British Virgin Islands – See Virgin Islands (British).',\n", " 'Brunei Darussalam\\u200a[i]',\n", " 'Burma – See Myanmar.',\n", " 'Cabo Verde\\u200a[j]',\n", " 'Cape Verde – See Cabo Verde.',\n", " 'Caribbean Netherlands – See Bonaire, Sint Eustatius and Saba.',\n", " 'Cayman Islands (the)',\n", " 'Central African Republic (the)',\n", " 'China, The Republic of – See Taiwan (Province of China).',\n", " 'Christmas Island',\n", " 'Cocos (Keeling) Islands (the)',\n", " 'Comoros (the)',\n", " 'Congo (the Democratic Republic of the)',\n", " 'Congo (the)\\u200a[k]',\n", " 'Cook Islands (the)',\n", " 'Czechia\\u200a[m]',\n", " \"Côte d'Ivoire\\u200a[l]\",\n", " \"Democratic People's Republic of Korea – See Korea, The Democratic People's Republic of.\",\n", " 'Democratic Republic of the Congo – See Congo, The Democratic Republic of the.',\n", " 'Dominican Republic (the)',\n", " 'East Timor – See Timor-Leste.',\n", " 'Eswatini\\u200a[n]',\n", " 'Falkland Islands (the) [Malvinas]\\u200a[o]',\n", " 'Faroe Islands (the)',\n", " 'France\\u200a[p]',\n", " 'French Guiana',\n", " 'French Southern Territories (the)\\u200a[q]',\n", " 'Gambia (the)',\n", " 'Great Britain – See United Kingdom, The.',\n", " 'Guadeloupe',\n", " 'Heard Island and McDonald Islands',\n", " 'Holy See (the)\\u200a[r]',\n", " 'Iran (Islamic Republic of)[s]',\n", " \"Ivory Coast – See Côte d'Ivoire.\",\n", " 'Jan Mayen – See Svalbard and Jan Mayen.',\n", " \"Korea (the Democratic People's Republic of)\\u200a[t]\",\n", " 'Korea (the Republic of)\\u200a[u]',\n", " \"Lao People's Democratic Republic (the)\\u200a[v]\",\n", " 'Macao\\u200a[w]',\n", " 'Marshall Islands (the)',\n", " 'Martinique',\n", " 'Mayotte',\n", " 'Micronesia (Federated States of)',\n", " 'Moldova (the Republic of)',\n", " 'Myanmar\\u200a[x]',\n", " 'Netherlands (Kingdom of the)',\n", " 'Niger (the)',\n", " 'Norfolk Island',\n", " \"North Korea – See Korea, The Democratic People's Republic of.\",\n", " 'North Macedonia\\u200a[y]',\n", " 'Northern Mariana Islands (the)',\n", " 'Palestine, State of',\n", " \"People's Republic of China – See China.\",\n", " 'Philippines (the)',\n", " 'Pitcairn\\u200a[z]',\n", " 'Republic of China – See Taiwan (Province of China).',\n", " 'Republic of Korea – See Korea, The Republic of.',\n", " 'Republic of the Congo – See Congo, The.',\n", " 'Russian Federation (the)\\u200a[aa]',\n", " 'Réunion',\n", " 'Saba – See Bonaire, Sint Eustatius and Saba.',\n", " 'Sahrawi Arab Democratic Republic – See Western Sahara.',\n", " 'Saint Barthélemy',\n", " 'Saint Helena \\xa0Ascension Island \\xa0Tristan da Cunha',\n", " 'Sao Tome and Principe',\n", " 'Sint Eustatius – See Bonaire, Sint Eustatius and Saba.',\n", " 'South Georgia and the South Sandwich Islands',\n", " 'South Korea – See Korea, The Republic of.',\n", " 'Sudan (the)',\n", " 'Svalbard \\xa0Jan Mayen',\n", " 'Syrian Arab Republic (the)\\u200a[ac]',\n", " 'Taiwan (Province of China)\\u200a[ad]',\n", " 'Tanzania, the United Republic of',\n", " 'Timor-Leste\\u200a[af]',\n", " 'Turks and Caicos Islands (the)',\n", " 'Türkiye [ag]',\n", " 'Ukraine[c]',\n", " 'United Arab Emirates (the)',\n", " 'United Kingdom of Great Britain and Northern Ireland (the)',\n", " 'United States Minor Outlying Islands (the)[13][ai]',\n", " 'United States Virgin Islands – See Virgin Islands (U.S.).',\n", " 'United States of America (the)',\n", " 'Vatican City – See Holy See, The.',\n", " 'Venezuela (Bolivarian Republic of)',\n", " 'Viet Nam\\u200a[ak]',\n", " 'Virgin Islands (British)\\u200a[al]',\n", " 'Virgin Islands (U.S.)\\u200a[am]',\n", " 'Western Sahara\\u200a[an]',\n", " 'Åland Islands'}" ] }, "execution_count": 51, "metadata": {}, "output_type": "execute_result" } ], "source": [ "isocodes_names.difference(gdppc_wiki_names)" ] }, { "cell_type": "code", "execution_count": 52, "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "{'Australia',\n", " 'Bahamas',\n", " 'Bolivia',\n", " 'British Virgin Islands',\n", " 'Brunei',\n", " 'Cape Verde',\n", " 'Cayman Islands',\n", " 'Central African Republic',\n", " 'Comoros',\n", " 'Congo',\n", " 'Cook Islands',\n", " 'Czech Republic',\n", " 'DR Congo',\n", " 'Dominican Republic',\n", " 'East Timor',\n", " 'Eswatini',\n", " 'European Union\\u202f[n 1]',\n", " 'Falkland Islands',\n", " 'Faroe Islands',\n", " 'France',\n", " 'Gambia',\n", " 'Iran',\n", " 'Ivory Coast',\n", " 'Kosovo',\n", " 'Laos',\n", " 'Macau',\n", " 'Marshall Islands',\n", " 'Micronesia',\n", " 'Moldova',\n", " 'Myanmar',\n", " 'Netherlands',\n", " 'Niger',\n", " 'North Korea',\n", " 'North Macedonia',\n", " 'Northern Mariana Islands',\n", " 'Palestine',\n", " 'Philippines',\n", " 'Russia',\n", " 'Saint Helena, Ascension and Tristan da Cunha',\n", " 'South Korea',\n", " 'Sudan',\n", " 'Syria',\n", " 'São Tomé and Príncipe',\n", " 'Taiwan',\n", " 'Tanzania',\n", " 'Turkey',\n", " 'Turks and Caicos Islands',\n", " 'U.S. Virgin Islands',\n", " 'Ukraine',\n", " 'United Arab Emirates',\n", " 'United Kingdom',\n", " 'United States',\n", " 'Venezuela',\n", " 'Vietnam',\n", " 'World'}" ] }, "execution_count": 52, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gdppc_wiki_names.difference(isocodes_names)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "## Clearly to create the full dataset, we'd need to standardize the country names. " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [] }, "source": [ "## This is a major reason to use ISO CODES!" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [] }, "source": [ "## We'll learn methods to do this in another lecture, for now let's use the merged subset" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "# Simple Plots" ] }, { "cell_type": "code", "execution_count": 53, "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 53, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA04AAAIICAYAAABZ1r5EAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAACPwUlEQVR4nOzdd3yV5f3/8dd9ZvaeQCZhCrIUQWXVrXW3dY9arVatba21xba2jlZrrV+1ddSfq9ZdQWu1riqIiIMtsmeAkEHInmfdvz9OEkAIkHDOuTPez8fjPHLGPT6hJebNdV2fyzBN00REREREREQ6ZbO6ABERERERkZ5OwUlEREREROQgFJxEREREREQOQsFJRERERETkIBScREREREREDkLBSURERERE5CAUnERERERERA5CwUlEREREROQgFJxEREREREQOQsFJRERERETkIPp1cJo3bx5nnnkmAwYMwDAM3njjjbDe7/e//z2GYez1yMrKCus9RURERETk8PXr4NTY2MiYMWP429/+FrF7HnHEEZSWlnY8VqxYEbF7i4iIiIhI9zisLsBKp512Gqeddlqnn3s8Hn7zm9/wwgsvUFNTw6hRo/jTn/7E9OnTu31Ph8OhUSYRERERkV6mX484Hcz3v/99Pv30U15++WW++uorvvvd73Lqqaeyfv36bl9z/fr1DBgwgIKCAi688EI2bdoUwopFRERERCQcDNM0TauL6AkMw+D111/nnHPOAWDjxo0MGTKE7du3M2DAgI7jTjzxRCZOnMgf//jHLt/jnXfeoampiaFDh1JeXs7dd9/NmjVrWLlyJampqaH6VkREREREJMQ04tSJJUuWYJomQ4cOJS4uruPx8ccfs3HjRgC2bNmyT7OHbz5uvPHGjmuedtppnH/++YwePZoTTzyRt99+G4B//OMflnyPIiIiIiJyaPr1GqcDCQQC2O12Fi9ejN1u3+uzuLg4AAYOHMjq1asPeJ3k5OROP4uNjWX06NGHNfVPRERERETCT8GpE+PGjcPv91NRUcGUKVP2e4zT6WT48OHdvkdrayurV6/u9PoiIiIiItIz9Ovg1NDQwIYNGzpeb968mWXLlpGSksLQoUO55JJLuPzyy/nLX/7CuHHjqKys5KOPPmL06NGcfvrpXb7fLbfcwplnnklubi4VFRXcfffd1NXVccUVV4Ty2xIRERERkRDr180h5s6dy4wZM/Z5/4orruDZZ5/F6/Vy991389xzz1FSUkJqaiqTJ0/mjjvuYPTo0V2+34UXXsi8efOorKwkPT2dSZMmcddddzFy5MhQfDsiIiIiIhIm/To4iYiIiIiIHAp11RMRERERETmIfrfGKRAIsGPHDuLj4zEMw+pyRERERETEIqZpUl9fz4ABA7DZDjym1O+C044dO8jJybG6DBERERER6SG2bdvGoEGDDnhMvwtO8fHxQPAPJyEhweJqRERERETEKnV1deTk5HRkhAPpd8GpfXpeQkKCgpOIiIiIiBzSEh41hxARERERETkIBScREREREZGDUHASERERERE5iH63xklEREREpK/x+/14vV6ry+iRXC7XQVuNHwoFJxERERGRXso0TcrKyqipqbG6lB7LZrNRUFCAy+U6rOsoOImIiIiI9FLtoSkjI4OYmJhD6g7XnwQCAXbs2EFpaSm5ubmH9eej4CQiIiIi0gv5/f6O0JSammp1OT1Weno6O3bswOfz4XQ6u30dNYcQEREREemF2tc0xcTEWFxJz9Y+Rc/v9x/WdRScRERERER6MU3PO7BQ/fkoOImIiIiIiByEgpOIiIiIiMhBKDiJiIiIiIgchIKTiIiIiIhYoqysjB//+McUFhbidrvJycnhzDPP5MMPPwQgPz+fBx98cJ/z/vjHP2K327n33nsjVquCk4iIiIiIRNyWLVuYMGECH330Effddx8rVqzg3XffZcaMGdxwww0HPPeZZ57h1ltv5emnn45QtdrHSURERESkzzBNk2bv4bXd7q5op71LHeyuv/56DMPgyy+/JDY2tuP9I444gquuuqrT8z7++GOam5u58847ee6555g3bx5Tp049rNoPhYKTiIiIiEgf0ez1M/L29yy596o7TyHGdWjxoqqqinfffZc//OEPe4WmdklJSZ2e+9RTT3HRRRfhdDq56KKLeOqppyISnDRVT0REREREImrDhg2Ypsnw4cO7dF5dXR2zZs3i0ksvBeDSSy/ltddeo66uLhxl7kUjTiJiuYZWH09+sokvN1eREe/mimPzGZebbHVZIiIivU60086qO0+x7N6HyjRNoOub07744osUFhYyZswYAMaOHUthYSEvv/wyP/zhD7t0ra5ScBIRS1XUt3DhE5+zaWdjx3v/Xr6DP5wzmouPybWwMhERkd7H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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Set the size of the figure and get a figure and axis object\n", "fig, ax = plt.subplots(figsize=(10,6))\n", "merged.gdppc_CIA.plot.kde(ax=ax, label='CIA')\n", "merged.gdppc_IMF.plot.kde(ax=ax, label='IMF')\n", "merged.gdppc_WB.plot.kde(ax=ax, label='WB')\n", "ax.legend()" ] }, { "cell_type": "code", "execution_count": 54, "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0oAAAH5CAYAAAC/G84fAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAyGElEQVR4nO3dfZRWZb0H/N/IwAg0DAoy48iLQw6ZYoWQphEDmmgSlZ5TiQIq9iwNUVAT9bFT5DFQLEIzMT2GuAy1kjrWOSmogC9gIC+KaGqFgMg0mcigvDP7+cOH+zR78IVhZvYAn89a91rc177uff/uH6MzX669r8lLkiQJAAAAcg7IugAAAIDmRlACAABIEZQAAABSBCUAAIAUQQkAACBFUAIAAEgRlAAAAFLysy6gsdXU1MQbb7wRhYWFkZeXl3U5AABARpIkiQ0bNkRpaWkccMAHrxnt80HpjTfeiC5dumRdBgAA0EysXr06Onfu/IFz9vmgVFhYGBHvNaNdu3YZVwMAAGSluro6unTpkssIH2SfD0o7L7dr166doAQAAHykW3Js5gAAAJAiKAEAAKQISgAAACn7/D1KAACwr9mxY0ds27Yt6zKanZYtW0aLFi0a5FyCEgAA7CWSJInKysp4++23sy6l2Wrfvn2UlJTs8e9QFZQAAGAvsTMkderUKdq0abPHYWBfkiRJbNy4MaqqqiIi4tBDD92j8wlKAACwF9ixY0cuJHXo0CHrcpql1q1bR0REVVVVdOrUaY8uw7OZAwAA7AV23pPUpk2bjCtp3nb2Z0/v4RKUAABgL+Jyuw/WUP0RlAAAAFIEJQAAgBSbOQAAwF7u8Kv/p8ne67UbBjXZe2XJihIAANDoKisr45JLLonu3btHQUFBdOnSJQYPHhyPPfZYREQcfvjhMXny5DqvGz9+fLRo0SJuuOGGJq1XUAIAABrVa6+9Fr17947HH388Jk6cGMuWLYuHH344BgwYEBdffPEHvnbq1KkxduzY+MUvftFE1b7HpXcAAECjGjlyZOTl5cWCBQuibdu2ufGjjz46RowY8b6vmzt3bmzatCmuu+66uOeee+KJJ56Ifv36NUXJVpQAAIDG89Zbb8XDDz8cF198ca2QtFP79u3f97V33XVXDBkyJFq2bBlDhgyJu+66qxErrU1QAgAAGs1f/vKXSJIkjjzyyN16XXV1dTz44IMxdOjQiIgYOnRo/OY3v4nq6urGKLMOQQkAAGg0SZJExO7/Itjp06dH9+7d49Of/nRERHzmM5+J7t27x/3339/gNe6KoAQAADSa8vLyyMvLi5deemm3XveLX/wili9fHvn5+bnH8uXLm+zyO5s5NLGm3OO+udpf9t4HACDi4IMPjlNPPTV+9rOfxaWXXlrnPqW33367zn1Ky5Yti2effTbmzJkTBx98cK25/fr1ixdeeCF69uzZqHVbUQIAABrVbbfdFjt27IjjjjsuHnzwwXj11VfjpZdeiltuuSVOOOGEOvPvuuuuOO6446Jfv37Rs2fP3KNv375xwgknNMmqkhUlAADYyzX3K3bKyspi8eLF8cMf/jCuuOKKWLt2bRxyyCHRu3fvmDJlSq25W7dujXvvvTeuuuqqXZ7r3/7t32LChAlx4403RqtWrRqt5rxk591V+6jq6uooKiqK9evXR7t27bIux6V30fz/QwYAaI42b94cK1asiLKysjjwwAOzLqfZ+qA+7U42cOkdAABAiqAEAACQIigBAACkCEoAAAApghIAAECKoAQAAJAiKAEAAKQISgAAACmCEgAAQEp+1gUAAAB76Pejm+69Bt+82y8577zz4u23347f/e53cd5558W0adPiwgsvjNtvv73WvJEjR8aUKVPi3HPPjbvvvjv32mnTptU556uvvhpHHHFEvT7CR2FFCQAAaFJdunSJ+++/PzZt2pQb27x5c9x3333RtWvXOvNPO+20WLt2ba1HWVlZo9YoKAEAAE3q2GOPja5du8aMGTNyYzNmzIguXbpEr1696swvKCiIkpKSWo8WLVo0ao2CEgAA0OTOP//8mDp1au75L37xixgxYkSGFdUmKAEAAE1u2LBh8dRTT8Vrr70WK1eujKeffjqGDh26y7l/+MMf4mMf+1ju8fWvf73R67OZAwAA0OQ6duwYgwYNimnTpkWSJDFo0KDo2LHjLucOGDAgpkyZknvetm3bRq9PUAIAADIxYsSIGDVqVERE/OxnP3vfeW3btm3UHe52RVACAAAycdppp8XWrVsjIuLUU0/NuJraBCUAACATLVq0iJdeein35+ZEUAIAADLTrl27rEvYJUEJAAD2doNvzrqCD3T33Xfv8s+78rvf/e59X9uUbA8OAACQIigBAACkCEoAAAApghIAAECKoAQAAJAiKAEAAKQISgAAACmCEgAAQIqgBAAAkCIoAQAApORnXQAAALBn5qye02Tv1b9L/92af/vtt8eVV14Z69ati/z89+LHO++8EwcddFB87nOfiyeffDI398knn4x+/frFyy+/HAMHDoyVK1dGRMQBBxwQxcXF8aUvfSl+9KMfxUEHHdRgn+f9WFECAAAazYABA+Kdd96JZ599Njf25JNPRklJSSxcuDA2btyYG58zZ06UlpZGjx49IiLiuuuui7Vr18aqVavil7/8ZTzxxBNx6aWXNkndghIAANBoPvGJT0RpaWnMmTMnNzZnzpz46le/Gh//+Mdj3rx5tcYHDBiQe15YWBglJSVx2GGHxYABA2L48OGxePHiJqk706C0ffv2+O53vxtlZWXRunXr6N69e1x33XVRU1OTm5MkSYwbNy5KS0ujdevW0b9//1i+fHmGVQMAALujf//+MXv27Nzz2bNnR//+/aOioiI3vnXr1pg/f36toPSv1qxZE3/4wx/i+OOPb5KaMw1KN954Y9x+++1x6623xksvvRQTJ06Mm266KX7605/m5kycODEmTZoUt956ayxcuDBKSkrilFNOiQ0bNmRYOQAA8FH1798/nn766di+fXts2LAhlixZEv369YuKiorcStMzzzwTmzZtqhWUrrrqqvjYxz4WrVu3js6dO0deXl5MmjSpSWrONCjNnz8/vvrVr8agQYPi8MMPj3//93+PgQMH5q5fTJIkJk+eHNdee22ceeaZ0bNnz5g2bVps3Lgxpk+fvstzbtmyJaqrq2s9AACA7AwYMCDefffdWLhwYTz55JPRo0eP6NSpU1RUVMTChQvj3XffjTlz5kTXrl2je/fuudddeeWVsXTp0nj++efjsccei4iIQYMGxY4dOxq95kyDUt++feOxxx6LV155JSIinnvuuXjqqafi9NNPj4iIFStWRGVlZQwcODD3moKCgqioqKh1LeO/mjBhQhQVFeUeXbp0afwPAgAAvK8jjjgiOnfuHLNnz47Zs2dHRUVFRESUlJREWVlZPP300zF79uw46aSTar2uY8eOccQRR0R5eXmcdNJJMXny5Jg3b16ty/gaS6ZB6aqrroohQ4bEkUceGS1btoxevXrFmDFjYsiQIRERUVlZGRERxcXFtV5XXFycO5Z2zTXXxPr163OP1atXN+6HAAAAPtSAAQNizpw5MWfO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NCh99rOfjd/+9rdxzTXXxHXXXRdlZWUxefLkOOecc3Jzxo4dG5s2bYqRI0fGunXr4vjjj4+ZM2dGYWFhhpUDAAD7srwkSZKsi2hM1dXVUVRUFOvXr4927dplXU4cfvX/xPlFN2ddRqYqehyS+3P/Vh3/78Dg/bsvAAA0rt3JBpneowQAANAcCUoAAAApghIAAECKoAQAAJAiKAEAAKQISgAAACmCEgAAQIqgBAAAkCIoAQAApAhKAAAAKYISAABAiqAEAACQIigBAACkCEoAAAApghIAAECKoAQAAJAiKAEAAKQISgAAACmCEgAAQIqgBAAAkCIoAQAApAhKAAAAKYISAABAiqAEAACQIigBAACkCEoAAAApghIAAECKoAQAAJAiKAEAAKTUKyitWLGioesAAABoNuoVlI444ogYMGBA3HvvvbF58+aGrgkAACBT9QpKzz33XPTq1SuuuOKKKCkpiQsvvDAWLFjQ0LUBAABkol5BqWfPnjFp0qRYs2ZNTJ06NSorK6Nv375x9NFHx6RJk+If//hHQ9cJAADQZPZoM4f8/Pw444wz4le/+lXceOON8de//jW+853vROfOnWP48OGxdu3ahqoTAACgyexRUHr22Wdj5MiRceihh8akSZPiO9/5Tvz1r3+Nxx9/PNasWRNf/epXG6pOAACAJpNfnxdNmjQppk6dGi+//HKcfvrpcc8998Tpp58eBxzwXu4qKyuLn//853HkkUc2aLEAAABNoV5BacqUKTFixIg4//zzo6SkZJdzunbtGnfdddceFQcAAJCFegWlV1999UPntGrVKs4999z6nB4AACBT9bpHaerUqfHrX/+6zvivf/3rmDZt2h4XBQAAkKV6BaUbbrghOnbsWGe8U6dOMX78+D0uCgAAIEv1CkorV66MsrKyOuPdunWLVatW7XFRAAAAWapXUOrUqVM8//zzdcafe+656NChwx4XBQAAkKV6BaWzzjorLr300pg9e3bs2LEjduzYEY8//niMHj06zjrrrIauEQAAoEnVa9e766+/PlauXBknn3xy5Oe/d4qampoYPny4e5QAAIC9Xr2CUqtWreKBBx6I//zP/4znnnsuWrduHcccc0x069atoesDAABocvUKSjv16NEjevTo0VC1AAAANAv1Cko7duyIu+++Ox577LGoqqqKmpqaWscff/zxBikOAAAgC/UKSqNHj4677747Bg0aFD179oy8vLyGrgsAACAz9QpK999/f/zqV7+K008/vaHrAQAAyFy9tgdv1apVHHHEEQ1dCwAAQLNQr6B0xRVXxM033xxJkjR0PQAAAJmr16V3Tz31VMyePTv++Mc/xtFHHx0tW7asdXzGjBkNUhwAAEAW6hWU2rdvH2eccUZD1wIAANAs1CsoTZ06taHrAAAAaDbqdY9SRMT27dvj0UcfjZ///OexYcOGiIh444034p133mmw4gAAALJQrxWllStXxmmnnRarVq2KLVu2xCmnnBKFhYUxceLE2Lx5c9x+++0NXScAAECTqdeK0ujRo6NPnz6xbt26aN26dW78jDPOiMcee6zBigMAAMhCvXe9e/rpp6NVq1a1xrt16xZr1qxpkMIAAACyUq8VpZqamtixY0ed8ddffz0KCwv3uCgAAIAs1SsonXLKKTF58uTc87y8vHjnnXfi+9//fpx++ukNVRsAAEAm6nXp3U9+8pMYMGBAHHXUUbF58+Y4++yz49VXX42OHTvGfffd19A1AgAANKl6BaXS0tJYunRp3HfffbF48eKoqamJCy64IM4555xamzsAAADsjeoVlCIiWrduHSNGjIgRI0Y0ZD0AAACZq1dQuueeez7w+PDhw+tVDAAAQHNQr6A0evToWs+3bdsWGzdujFatWkWbNm0EJQAAYK9Wr13v1q1bV+vxzjvvxMsvvxx9+/a1mQMAALDXq1dQ2pXy8vK44YYb6qw2AQAA7G0aLChFRLRo0SLeeOONhjwlAABAk6vXPUoPPfRQredJksTatWvj1ltvjc9//vMNUhgAAEBW6hWUvva1r9V6npeXF4ccckicdNJJ8eMf/7gh6gIAAMhMvYJSTU1NQ9cBAADQbDToPUoAAAD7gnqtKF1++eUfee6kSZPq8xYAAACZqVdQWrJkSSxevDi2b98en/jEJyIi4pVXXokWLVrEsccem5uXl5fXMFUCAAA0oXoFpcGDB0dhYWFMmzYtDjrooIh475fQnn/++fGFL3whrrjiigYtEgAAoCnV6x6lH//4xzFhwoRcSIqIOOigg+L666+36x0AALDXq1dQqq6ujr///e91xquqqmLDhg17XBQAAECW6hWUzjjjjDj//PPjN7/5Tbz++uvx+uuvx29+85u44IIL4swzz2zoGgEAAJpUve5Ruv322+M73/lODB06NLZt2/beifLz44ILLoibbrqpQQsEAABoavUKSm3atInbbrstbrrppvjrX/8aSZLEEUccEW3btm3o+gAAAJrcHv3C2bVr18batWujR48e0bZt20iSpKHqAgAAyEy9gtI///nPOPnkk6NHjx5x+umnx9q1ayMi4lvf+patwQEAgL1evYLSZZddFi1btoxVq1ZFmzZtcuPf/OY34+GHH26w4gAAALJQr3uUZs6cGY888kh07ty51nh5eXmsXLmyQQoDAADISr1WlN59991aK0k7vfnmm1FQULDHRQEAAGSpXkGpX79+cc899+Se5+XlRU1NTdx0000xYMCABisOAAAgC/W69O6mm26K/v37x7PPPhtbt26NsWPHxvLly+Ott96Kp59+uqFrBAAAaFL1WlE66qij4vnnn4/jjjsuTjnllHj33XfjzDPPjCVLlsTHP/7xhq4RAACgSe32itK2bdti4MCB8fOf/zx+8IMfNEZNAAAAmdrtFaWWLVvGCy+8EHl5eQ1ayIQJEyIvLy/GjBmTG0uSJMaNGxelpaXRunXr6N+/fyxfvrxB3xcAACCtXpfeDR8+PO66664GK2LhwoVxxx13xKc+9ala4xMnToxJkybFrbfeGgsXLoySkpI45ZRTYsOGDQ323gAAAGn12sxh69at8V//9V8xa9as6NOnT7Rt27bW8UmTJn3kc73zzjtxzjnnxJ133hnXX399bjxJkpg8eXJce+21ceaZZ0ZExLRp06K4uDimT58eF1544S7Pt2XLltiyZUvueXV19e58NAAAgN1bUfrb3/4WNTU18cILL8Sxxx4b7dq1i1deeSWWLFmSeyxdunS3Crj44otj0KBB8cUvfrHW+IoVK6KysjIGDhyYGysoKIiKioqYN2/e+55vwoQJUVRUlHt06dJlt+oBAADYrRWl8vLyWLt2bcyePTsiIr75zW/GLbfcEsXFxfV68/vvvz8WL14cCxcurHOssrIyIqLOuYuLi2PlypXve85rrrkmLr/88tzz6upqYQkAANgtuxWUkiSp9fyPf/xjvPvuu/V649WrV8fo0aNj5syZceCBB77vvPSmEUmSfOBGEgUFBVFQUFCvmgAAACLquZnDTungtDsWLVoUVVVV0bt378jPz4/8/PyYO3du3HLLLZGfn59bSdq5srRTVVVVvVewAAAA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HdP35k9QaiTHHXdcctFFF9UaO/LII5Orr746o4r2HlVVVUlEJHPnzk2SJElqamqSkpKS5IYbbsjN2bx5c1JUVJTcfvvtSZK8982gZcuWyf3335+bs2bNmuSAAw5IHn744SRJkuTFF19MIiJ55plncnPmz5+fRETy5z//OUmS9/7Hd8ABByRr1qzJzbnvvvuSgoKCZP369Y33oTO0YcOGpLy8PJk1a1ZSUVGRC0r63jiuuuqqpG/fvu97XN8b3qBBg5IRI0bUGjvzzDOToUOHJkmi540h/YNjc+vxbbfdlhQVFSWbN2/OzZkwYUJSWlqa1NTUNGAnmtYH/cC+04IFC5KIyP3Drb7vuffr++uvv54cdthhyQsvvJB069atVlDS972DS+8awdatW2PRokUxcODAWuMDBw6MefPmZVTV3mP9+vUREXHwwQdHRMSKFSuisrKyVj8LCgqioqIi189FixbFtm3bas0pLS2Nnj175ubMnz8/ioqK4vjjj8/N+dznPhdFRUW15vTs2TNKS0tzc0499dTYsmVLrUuj9iUXX3xxDBo0KL74xS/WGtf3xvHQQw9Fnz594utf/3p06tQpevXqFXfeeWfuuL43vL59+8Zjjz0Wr7zySkREPPfcc/HUU0/F6aefHhF63hSaW4/nz58fFRUVUVBQUGvOG2+8Ea+99lrDN6AZWb9+feTl5UX79u0jQt8bS01NTQwbNiyuvPLKOProo+sc1/e9g6DUCN58883YsWNHFBcX1xovLi6OysrKjKraOyRJEpdffnn07ds3evbsGRGR69kH9bOysjJatWoVBx100AfO6dSpU5337NSpU6056fc56KCDolWrVvvk3939998fixcvjgkTJtQ5pu+N429/+1tMmTIlysvL45FHHomLLrooLr300rjnnnsiQt8bw1VXXRVDhgyJI488Mlq2bBm9evWKMWPGxJAhQyJCz5tCc+vxrubsfL4v/z1s3rw5rr766jj77LOjXbt2EaHvjeXGG2+M/Pz8uPTSS3d5XN/3DvlZF7Avy8vLq/U8SZI6Y9Q2atSoeP755+Opp56qc6w+/UzP2dX8+szZF6xevTpGjx4dM2fOjAMPPPB95+l7w6qpqYk+ffrE+PHjIyKiV69esXz58pgyZUoMHz48N0/fG84DDzwQ9957b0yfPj2OPvroWLp0aYwZMyZKS0vj3HPPzc3T88bXnHq8q1re77X7gm3btsVZZ50VNTU1cdttt33ofH2vv0WLFsXNN98cixcv3u3Ppe/NixWlRtCxY8do0aJFnZReVVVVJ9Hzfy655JJ46KGHYvbs2dG5c+fceElJSUTU/VePf+1nSUlJbN26NdatW/eBc/7+97/Xed9//OMfteak32fdunWxbdu2fe7vbtGiRVFVVRW9e/eO/Pz8yM/Pj7lz58Ytt9wS+fn57/uvTfq+Zw499NA46qijao198pOfjFWrVkWEr/fGcOWVV8bVV18dZ511VhxzzDExbNiwuOyyy3IrqXre+Jpbj3c1p6qqKiLqrnrtC7Zt2xbf+MY3YsWKFTFr1qzcalKEvjeGJ598MqqqqqJr1665768rV66MK664Ig4//PCI0Pe9haDUCFq1ahW9e/eOWbNm1RqfNWtWnHjiiRlV1XwlSRKjRo2KGTNmxOOPPx5lZWW1jpeVlUVJSUmtfm7dujXmzp2b62fv3r2jZcuWteasXbs2XnjhhdycE044IdavXx8LFizIzfnTn/4U69evrzXnhRdeiLVr1+bmzJw5MwoKCqJ3794N/+EzdPLJJ8eyZcti6dKluUefPn3inHPOiaVLl0b37t31vRF8/vOfr7P9/SuvvBLdunWLCF/vjWHjxo1xwAG1v921aNEitz24nje+5tbjE044IZ544olaWyjPnDkzSktLcz/I7it2hqRXX301Hn300ejQoUOt4/re8IYNGxbPP/98re+vpaWlceWVV8YjjzwSEfq+12j8/SL2Tzu3B7/rrruSF198MRkzZkzStm3b5LXXXsu6tGbn29/+dlJUVJTMmTMnWbt2be6xcePG3JwbbrghKSoqSmbMmJEsW7YsGTJkyC63le3cuXPy6KOPJosXL05OOumkXW6z+alPfSqZP39+Mn/+/OSYY47Z5TabJ598crJ48eLk0UcfTTp37rxPbN37UfzrrndJou+NYcGCBUl+fn7ywx/+MHn11VeTX/7yl0mbNm2Se++9NzdH3xvWueeemxx22GG57cFnzJiRdOzYMRk7dmxujp7vuQ0bNiRLlixJlixZkkREMmnSpGTJkiW53dWaU4/ffvvtpLi4OBkyZEiybNmyZMaMGUm7du32yu2SP6jv27ZtS77yla8knTt3TpYuXVrre+yWLVty59D33fdhX+9p6V3vkkTf9waCUiP62c9+lnTr1i1p1apVcuyxx+a2u6a2iNjlY+rUqbk5NTU1yfe///2kpKQkKSgoSPr165csW7as1nk2bdqUjBo1Kjn44IOT1q1bJ1/+8peTVatW1Zrzz3/+MznnnHOSwsLCpLCwMDnnnHOSdevW1ZqzcuXKZNCgQUnr1q2Tgw8+OBk1alStLTX3ZemgpO+N4/e//33Ss2fPpKCgIDnyyCOTO+64o9ZxfW9Y1dXVyejRo5OuXbsmBx54YNK9e/fk2muvrfWDop7vudmzZ+/y/+XnnntukiTNr8fPP/988oUvfCEpKChISkpKknHjxu2VWyV/UN9XrFjxvt9jZ8+enTuHvu++D/t6T9tVUNL35i8vSfxaXgAAgH/lHiUAAIAUQQkAACBFUAIAAEgRlAAAAFIEJQAAgBRBCQAAIEVQAgAASBGUAAAAUgQlAACAFEEJAAAgRVACAABI+f8AKDS4vj/nRp0AAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Set the size of the figure and get a figure and axis object\n", "fig, ax = plt.subplots(figsize=(10,6))\n", "merged.gdppc_CIA.plot.hist(ax=ax, label='CIA')\n", "merged.gdppc_IMF.plot.hist(ax=ax, label='IMF', alpha=0.6)\n", "merged.gdppc_WB.plot.hist(ax=ax, label='WB', alpha=0.3)\n", "ax.legend()" ] }, { "cell_type": "code", "execution_count": 55, "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 55, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA20AAAINCAYAAACtcZckAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB7IklEQVR4nO3de1yUZf7/8fcwICHpiBLgeCgTtIxOi5tpFlIkeMzvb7/bJkX5ra9tWZlrudW2tdWWdnCtLbPTttm2Je23srVWUSmPiWkopZ1GXTePhAWCmgLC/ftjYmJgjjjDzMDr+XjwqLnva+65Zu7MeXNd1+cyGYZhCAAAAAAQlqJC3QEAAAAAgHuENgAAAAAIY4Q2AAAAAAhjhDYAAAAACGOENgAAAAAIY4Q2AAAAAAhjhDYAAAAACGOENgAAAAAIY9Gh7kBH09DQoH379qlLly4ymUyh7g4AAACAEDEMQ4cOHZLValVUlPvxNEJbG9u3b5/69OkT6m4AAAAACBO7d+9W79693Z4ntLWxLl26SLLfmK5du4a4NwAAAABCpbq6Wn369HFkBHcIbW2scUpk165dCW0AAAAAvC6bohAJAAAAAIQxQhsAAAAAhDFCGwAAAACEMUIbAAAAAIQxQhsAAAAAhDFCGwAAAACEMUIbAAAAAIQxQhsAAAAAhDFCGwAAAACEMUIbAAAAAIQxQhsAAAAAhDFCGwAAAACEMUIbAAAAAIQxQhsAAAAAhLHoUHcAAAAAANqCzSbt2CGlpkppaaHuje8YaQMAAADQrlVUSLm50sCB0ujR0oAB9seVlaHumW8IbQAAAADatbw8qajI+VhRkTRxYmj64y9CGwAAAIB2y2aTli6V6uudj9fX249v2xaafvmD0AYAAACg3dqxw/P57dvbph8ngtAGAAAAoN3q39/z+dTUtunHiSC0AQAAAGi3BgyQcnIks9n5uNlsPx4JVSQJbQAAAADatQULpOxs52PZ2fbjkYB92gAAAABEPE97sCUkSIWF9qIj27dH3j5thDYAAAAAEauiwl7Sf+nSn47l5NhH0RISnNumpUVWWGvE9EgAAAAAESvS92DzBaENAAAAQERqD3uw+YLQBgAAACAitYc92HxBaAMAAAAQkdrDHmy+ILQBAAAAiEjtYQ82XxDaAAAAAESsSN+DzReU/AcAAAAQsSJ9DzZfENoAAAAARLxI3YPNF0yPBAAAAIAwRmgDAAAAgDBGaAMAAACAMEZoAwAAAIAwRmgDAAAAgDBGaAMAAACAMEZoAwAAAIAwRmgDAAAAgDBGaAMAAACAMEZoAwAAAIAwRmgDAAAAgDBGaAMAAACAMEZoAwAAAIAwFtLQtnr1ao0bN05Wq1Umk0nvvvuu27a//vWvZTKZ9NRTTzkdr6mp0W233abExETFx8dr/Pjx2rNnj1ObyspK5efny2KxyGKxKD8/XwcPHnRqs2vXLo0bN07x8fFKTEzU1KlTVVtb69Rmy5YtyszMVFxcnHr16qWHHnpIhmGcyEcAAAAAAB6FNLQdOXJE5557rubOneux3bvvvquPP/5YVqu1xblp06Zp4cKFKigo0Nq1a3X48GGNHTtW9fX1jjZ5eXkqLS1VYWGhCgsLVVpaqvz8fMf5+vp6jRkzRkeOHNHatWtVUFCgt99+W3fccYejTXV1tS6//HJZrVZt3LhRzzzzjGbPnq05c+YE4JMAAAAAADeMMCHJWLhwYYvje/bsMXr16mVs3brVOPXUU40nn3zSce7gwYNGTEyMUVBQ4Di2d+9eIyoqyigsLDQMwzC++OILQ5Kxfv16R5vi4mJDkvHVV18ZhmEYixcvNqKiooy9e/c62ixYsMCIjY01qqqqDMMwjHnz5hkWi8U4duyYo82sWbMMq9VqNDQ0+Pw+q6qqDEmO6wIAAADomHzNBmG9pq2hoUH5+fmaMWOGzjrrrBbnS0pKVFdXp5EjRzqOWa1Wpaena926dZKk4uJiWSwWDRkyxNHmwgsvlMVicWqTnp7uNJKXk5OjmpoalZSUONpkZmYqNjbWqc2+ffv0n//8x+17qKmpUXV1tdMPAAAAAPgqrEPbY489pujoaE2dOtXl+bKyMnXq1EkJCQlOx5OTk1VWVuZok5SU1OK5SUlJTm2Sk5OdzickJKhTp04e2zQ+bmzjyqxZsxxr6SwWi/r06ePpLQMAAACAk7ANbSUlJfrzn/+s+fPny2Qy+fVcwzCcnuPq+YFoY/xYhMRT/+655x5VVVU5fnbv3u37GwEAAADQ4YVtaFuzZo3Ky8vVt29fRUdHKzo6Wt98843uuOMOnXbaaZKklJQU1dbWqrKy0um55eXljlGwlJQUffvtty2uf+DAAac2zUfLKisrVVdX57FNeXm5JLUYgWsqNjZWXbt2dfoBAAAAAF+FbWjLz8/XZ599ptLSUseP1WrVjBkztHTpUklSRkaGYmJitHz5csfz9u/fr61bt2rYsGGSpKFDh6qqqkobNmxwtPn4449VVVXl1Gbr1q3av3+/o82yZcsUGxurjIwMR5vVq1c7bQOwbNkyWa1WR4gEAAAAgECLDuWLHz58WNu3b3c83rlzp0pLS9W9e3f17dtXPXr0cGofExOjlJQUDRw4UJJksVh0ww036I477lCPHj3UvXt33XnnnTr77LOVnZ0tSTrzzDOVm5uryZMn64UXXpAk3XjjjRo7dqzjOiNHjtSgQYOUn5+vJ554QhUVFbrzzjs1efJkx8hYXl6eHnzwQU2aNEm/+93vtG3bNs2cOVP333+/39M3AQAAAMBXIQ1tn3zyibKyshyPp0+fLkm67rrrNH/+fJ+u8eSTTyo6OlpXXnmljh49qssuu0zz58+X2Wx2tHn99dc1depUR5XJ8ePHO+0NZzab9a9//UtTpkzRRRddpLi4OOXl5Wn27NmONhaLRcuXL9ctt9yiwYMHKyEhQdOnT3f0GQAAAACCwWQ0VtNAm6iurpbFYlFVVRXr2wAAAIAOzNdsELZr2gAAAAAAhDYAAAAACGuENgAAAAAIY4Q2AAAAAAhjhDYAAAAACGOENgAAAAAIY4Q2AAAAAAhjhDYAAAAACGOENgAAAAAIY4Q2AAAAAAhjhDYAAAAACGOENgAAAAAIY4Q2AAAAAAhjhDYAAAAACGOENgAAAAAIY4Q2AAAAAAhjhDYAAAAACGOENgAAAAAIY4Q2AAAAAAhjhDYAAAAACGOENgAAAAAIY4Q2AAAAAAhjhDYAAAAACGPRoe4AAAAAAP/ZbNKOHVJqqpSWFureIJgYaQMAAAAiSEWFlJsrDRwojR4tDRhgf1xZGeqeIVgIbQAAAEAEycuTioqcjxUVSRMnhqY/CD5CGwAAABAhbDZp6VKpvt75eH29/fi2baHpF4KL0AYAAABEiB07PJ/fvr1t+oG2RWgDAAAAIkT//p7Pp6a2TT/QtghtAAAAQIQYMEDKyZHMZufjZrP9OFUk2ydCGwAAABBBFiyQsrOdj2Vn24+jfWKfNgAAACCCJCRIhYX2oiPbt7NPW0dAaAMAAAAiUFoaYa2jYHokAAAAAIQxQhsAAAAAhDFCGwAAAACEMUIbAAAAAIQxQhsAAAAAhDFCGwAAAACEMUIbAAAAAIQxQhsAAAAAhDFCGwAAAACEMUIbAAAAAIQxQhsAAAAAhLGQhrbVq1dr3LhxslqtMplMevfddx3n6urqdNddd+nss89WfHy8rFarrr32Wu3bt8/pGjU1NbrtttuUmJio+Ph4jR8/Xnv27HFqU1lZqfz8fFksFlksFuXn5+vgwYNObXbt2qVx48YpPj5eiYmJmjp1qmpra53abNmyRZmZmYqLi1OvXr300EMPyTCMgH4mAAAAANBUSEPbkSNHdO6552ru3Lktzv3www/atGmT7rvvPm3atEnvvPOObDabxo8f79Ru2rRpWrhwoQoKCrR27VodPnxYY8eOVX19vaNNXl6eSktLVVhYqMLCQpWWlio/P99xvr6+XmPGjNGRI0e0du1aFRQU6O2339Ydd9zhaFNdXa3LL79cVqtVGzdu1DPPPKPZs2drzpw5QfhkAAAAAMDOZITJUJHJZNLChQs1YcIEt202btyoCy64QN9884369u2rqqoqnXLKKXrttdf0q1/9SpK0b98+9enTR4sXL1ZOTo6+/PJLDRo0SOvXr9eQIUMkSevXr9fQoUP11VdfaeDAgVqyZInGjh2r3bt3y2q1SpIKCgo0adIklZeXq2vXrnruued0zz336Ntvv1VsbKwk6dFHH9UzzzyjPXv2yGQy+fQ+q6urZbFYVFVVpa5du57AJwYAAAAgkvmaDSJqTVtVVZVMJpO6desmSSopKVFdXZ1GjhzpaGO1WpWenq5169ZJkoqLi2WxWByBTZIuvPBCWSwWpzbp6emOwCZJOTk5qqmpUUlJiaNNZmamI7A1ttm3b5/+85//BOstAwAAAOjgIia0HTt2THfffbfy8vIcKbSsrEydOnVSQkKCU9vk5GSVlZU52iQlJbW4XlJSklOb5ORkp/MJCQnq1KmTxzaNjxvbuFJTU6Pq6mqnHwAAAADwVUSEtrq6Ol111VVqaGjQvHnzvLY3DMNpuqKrqYuBaNM4s9TT1MhZs2Y5CqBYLBb16dPHa/8BAAAAoFHYh7a6ujpdeeWV2rlzp5YvX+401zMlJUW1tbWqrKx0ek55ebljFCwlJUXffvtti+seOHDAqU3z0bLKykrV1dV5bFNeXi5JLUbgmrrnnntUVVXl+Nm9e7evbx0AAAAAwju0NQa2bdu2qaioSD169HA6n5GRoZiYGC1fvtxxbP/+/dq6dauGDRsmSRo6dKiqqqq0YcMGR5uPP/5YVVVVTm22bt2q/fv3O9osW7ZMsbGxysjIcLRZvXq10zYAy5Ytk9Vq1Wmnneb2PcTGxqpr165OPwAAAADgq5BWjzx8+LC2b98uSTr//PM1Z84cZWVlqXv37rJarfrFL36hTZs26f3333cazerevbs6deokSbr55pv1/vvva/78+erevbvuvPNOff/99yopKZHZbJYkjRo1Svv27dMLL7wgSbrxxht16qmn6r333pNkL/l/3nnnKTk5WU888YQqKio0adIkTZgwQc8884wkexGUgQMH6tJLL9Xvfvc7bdu2TZMmTdL999/vtDWAN1SPBAAAACD5ng1CGtpWrlyprKysFsevu+46PfDAA+rXr5/L561YsUIjRoyQZC9QMmPGDL3xxhs6evSoLrvsMs2bN89p7VhFRYWmTp2qRYsWSZLGjx+vuXPnOqpQSvbNtadMmaIPP/xQcXFxysvL0+zZs52qRW7ZskW33HKLNmzYoISEBN100026//77fS73LxHaAAAAANhFRGjriAhtAAAAAKR2uk8bAAAAAHQ0hDYAAAAACGPRoe4AAAAAALQJm03asUNKTZXS0kLdG58x0gYAAAD4yWaTliyRtm0LdU/gk4oKKTdXGjhQGj1aGjDA/rjZfs/hitAGAAAA+CjCv/t3XHl5UlGR87GiImnixND0x0+ENgAAAMBHEf7dv2Oy2aSlS6X6eufj9fX24xEwXEpoAwAAAHzQDr77d0w7dng+v3172/TjBBDaAAAAAB+0g+/+HVP//p7Pp6a2TT9OAKENAAAA8EE7+O7fMQ0YIOXkSGaz83Gz2X48AqpIEtoAAAAAH7SD7/4d14IFUna287HsbPvxCMA+bQAAAICPFiywFx1ZuvSnYxH03b/jSkiQCgvtCw+3b4+4fdoIbQAAAICPIvy7P9LSIvKGEdoAAAAAP0Xod39EKNa0AQAAAEAYI7QBAAAAQBgjtAEAAABAGCO0AQAAAEAYI7QBAAAAQBgjtAEAAABAGCO0AQAAAEAYI7QBAAAAQBgjtAEAAABAGCO0AQAAAEAYI7QBAAAAQBgjtAEAAABAGCO0AQAAAEAYI7QBAAAAQBgjtAEAAABAGCO0AQAAAEAYiw51BwAAAADghNls0o4dUmqqlJYW6t4EFCNtAAAAACJXRYWUmysNHCiNHi0NGGB/XFkZ6p4FDKENAAAAQOTKy5OKipyPFRVJEyeGpj9BQGgDAAAAEJlsNmnpUqm+3vl4fb39+LZtoelXgBHaAAAAAESmHTs8n9++vW36EWSENgAAAACRqX9/z+dTU9umH0FGaAMAAAAQmQYMkHJyJLPZ+bjZbD/eTqpIEtoAAAA6EJtNWrKk3Sz1AaQFC6TsbOdj2dn24+0E+7QBAAB0ABUV9iJ7S5f+dCwnx/69NiEhdP0CTlhCglRYaP9NxPbt7XKfNkIbAABAB+CpKnphYWj6BARUWlq7C2uNmB4JAADQznWQqugdD3NdOwxCGwAAQDvXQaqidxwVFVJurjRwoDR6tL0YR26uVFkZ6p4hSAhtAAAA7VwHqYrecXia64p2idAGAADQznWQqugdA3NdOyRCGwAAQAfQAaqidwzMde2QqB4JAADQAXSAqugdA3NdO6SQjrStXr1a48aNk9Vqlclk0rvvvut03jAMPfDAA7JarYqLi9OIESP0+eefO7WpqanRbbfdpsTERMXHx2v8+PHas2ePU5vKykrl5+fLYrHIYrEoPz9fBw8edGqza9cujRs3TvHx8UpMTNTUqVNVW1vr1GbLli3KzMxUXFycevXqpYceekiGYQTs8wAAAAi2tDRp1CgCW8RirmuHFNLQduTIEZ177rmaO3euy/OPP/645syZo7lz52rjxo1KSUnR5ZdfrkOHDjnaTJs2TQsXLlRBQYHWrl2rw4cPa+zYsapvMs83Ly9PpaWlKiwsVGFhoUpLS5Wfn+84X19frzFjxujIkSNau3atCgoK9Pbbb+uOO+5wtKmurtbll18uq9WqjRs36plnntHs2bM1Z86cIHwyAAAAgBvMde14jDAhyVi4cKHjcUNDg5GSkmI8+uijjmPHjh0zLBaL8fzzzxuGYRgHDx40YmJijIKCAkebvXv3GlFRUUZhYaFhGIbxxRdfGJKM9evXO9oUFxcbkoyvvvrKMAzDWLx4sREVFWXs3bvX0WbBggVGbGysUVVVZRiGYcybN8+wWCzGsWPHHG1mzZplWK1Wo6Ghwef3WVVVZUhyXBcAAABoFZvNMBYvtv8TEcnXbBC2hUh27typsrIyjRw50nEsNjZWmZmZWrdunSSppKREdXV1Tm2sVqvS09MdbYqLi2WxWDRkyBBHmwsvvFAWi8WpTXp6uqxWq6NNTk6OampqVFJS4miTmZmp2NhYpzb79u3Tf/7zn8B/AAAAAIAnzHXtMMI2tJWVlUmSkpOTnY4nJyc7zpWVlalTp05KSEjw2CYpKanF9ZOSkpzaNH+dhIQEderUyWObxseNbVypqalRdXW10w8AAAAA+CpsQ1sjk8nk9NgwjBbHmmvexlX7QLQxfixC4qk/s2bNchRAsVgs6tOnj8e+AwAAAEBTYRvaUlJSJLUcxSovL3eMcKWkpKi2tlaVlZUe23z77bctrn/gwAGnNs1fp7KyUnV1dR7blJeXS2o5GtjUPffco6qqKsfP7t27Pb9xAAAAAGgibENbv379lJKSouXLlzuO1dbWatWqVRo2bJgkKSMjQzExMU5t9u/fr61btzraDB06VFVVVdqwYYOjzccff6yqqiqnNlu3btX+/fsdbZYtW6bY2FhlZGQ42qxevdppG4Bly5bJarXqtNNOc/s+YmNj1bVrV6cfAAAAAPBVSEPb4cOHVVpaqtLSUkn24iOlpaXatWuXTCaTpk2bppkzZ2rhwoXaunWrJk2apM6dOysvL0+SZLFYdMMNN+iOO+7QBx98oM2bN+uaa67R2Wefrewfy6CeeeaZys3N1eTJk7V+/XqtX79ekydP1tixYzVw4EBJ0siRIzVo0CDl5+dr8+bN+uCDD3TnnXdq8uTJjpCVl5en2NhYTZo0SVu3btXChQs1c+ZMTZ8+3et0TQAAAABorehQvvgnn3yirKwsx+Pp06dLkq677jrNnz9fv/3tb3X06FFNmTJFlZWVGjJkiJYtW6YuXbo4nvPkk08qOjpaV155pY4eParLLrtM8+fPl7nJhoOvv/66pk6d6qgyOX78eKe94cxms/71r39pypQpuuiiixQXF6e8vDzNnj3b0cZisWj58uW65ZZbNHjwYCUkJGj69OmOPgMAAABAMJiMxmoaaBPV1dWyWCyqqqpiqiQAAADQgfmaDcJ2TRsAAAAAIMTTIwEAAMKJzSbt2CGlprJfMYDwwUgbAADo8CoqpNxcaeBAafRoacAA++NmuwoBQEgQ2gAAQIeXlycVFTkfKyqSJk4MTX8AoClCGwAA6NBsNmnpUqm+3vl4fb39+LZtoekXADQitAEAgA5txw7P57dvb5t+AIA7hDYAANCh9e/v+Xxqatv0AwDcIbQBAIAObcAAKSdHMpudj5vN9uNUkQQQaoQ2AADQ4S1YIGVnOx/LzrYfB4BQY582AADQ4SUkSIWF9qIj27ezTxuA8EJoAwAA+FFaGmENQPghtAEAAAD+stnspUcZlkUbYE0bAAAA4KuKCik3Vxo4UBo92l7JJjdXqqwMdc/QjhHaAAAAAF/l5UlFRc7HioqkiRND0x90CIQ2AAAAwBc2m7R0qVRf73y8vt5+fNu20PQL7R6hDQAAAPDFjh2ez2/f3jb9QIdDaAMAAAB80b+/5/OpqW3TD3Q4rQptO3bs0O9//3tNnDhR5eXlkqTCwkJ9/vnnAe0cAAAAEDYGDJByciSz2fm42Ww/ThVJBInfoW3VqlU6++yz9fHHH+udd97R4cOHJUmfffaZ/vCHPwS8gwAAAEDYWLBAys52PpadbT8OBInfoe3uu+/Www8/rOXLl6tTp06O41lZWSouLg5o5wAAAICwkpAgFRbai5IsXmz/Z2Gh/TgQJH5vrr1lyxa98cYbLY6fcsop+v777wPSKQAAACCspaUxHRJtxu+Rtm7dumn//v0tjm/evFm9evUKSKcAAAAAAHZ+h7a8vDzdddddKisrk8lkUkNDgz766CPdeeeduvbaa4PRRwAAAADosPwObY888oj69u2rXr166fDhwxo0aJAuueQSDRs2TL///e+D0UcAAAAA6LBMhmEYrXniv//9b23atEkNDQ06//zzlcacXp9UV1fLYrGoqqpKXbt2DXV3AAAAAISIr9nA70IkjU4//XSdfvrprX06AAAAAMAHfk+P/O///m89+uijLY4/8cQT+uUvfxmQTgEAAAAA7Fq1ufaYMWNaHM/NzdXq1asD0ikAAAAAgJ3foe3w4cNOm2o3iomJUXV1dUA6BQAAAACw8zu0paen680332xxvKCgQIMGDQpIpwAAAAAAdn4XIrnvvvv0i1/8Qjt27NCll14qSfrggw+0YMEC/d///V/AOwgAAAAAHZnfoW38+PF69913NXPmTL311luKi4vTOeeco6KiImVmZgajjwAAAADQYfkV2o4fP65HHnlE119/vT766KNg9QkAAAAA8CO/1rRFR0friSeeUH19fbD6AwAAAABowu9CJNnZ2Vq5cmUQugIAAAAAaM7vNW2jRo3SPffco61btyojI0Px8fFO58ePHx+wzgEAAABAR2cyDMPw5wlRUe4H50wmE1MnvaiurpbFYlFVVZW6du0a6u4AANoRm03asUNKTZXS0kLdGwCAN75mA7+nRzY0NLj9IbABAND2Kiqk3Fxp4EBp9GhpwAD748rKUPcMABAIfoc2AAAQXvLypKIi52NFRdLEiaHpDwAgsPxe0/bQQw95PH///fe3ujMAAMA/Npu0dGnL4/X19uPbtjFVEgAind+hbeHChU6P6+rqtHPnTkVHR6t///6ENgAA2tCOHZ7Pb99OaAOASOd3aNu8eXOLY9XV1Zo0aZL+67/+KyCdAgAAvunf3/P51NS26QcAIHgCsqata9eueuihh3TfffcF4nIAAMBHAwZIOTmS2ex83Gy2H2eUDQAiX8AKkRw8eFBVVVWBuhwAAPDRggVSdrbzsexs+3EAQOTze3rk008/7fTYMAzt379fr732mnJzcwPWMQAAgqW97WeWkCAVFtqLjmzf3n7eFwDAzu+RtieffNLp5+mnn9bKlSt13XXX6cUXXwxo544fP67f//736tevn+Li4nT66afroYceUkNDg6ONYRh64IEHZLVaFRcXpxEjRujzzz93uk5NTY1uu+02JSYmKj4+XuPHj9eePXuc2lRWVio/P18Wi0UWi0X5+fk6ePCgU5tdu3Zp3Lhxio+PV2JioqZOnara2tqAvmcAQPC09/3M0tKkUaMIbAgwm01assT+WwEAIeH3SNvOnTuD0Q+XHnvsMT3//PN69dVXddZZZ+mTTz7R//zP/8hisej222+XJD3++OOaM2eO5s+frwEDBujhhx/W5Zdfrq+//lpdunSRJE2bNk3vvfeeCgoK1KNHD91xxx0aO3asSkpKZP5xEUBeXp727NmjwsJCSdKNN96o/Px8vffee5Kk+vp6jRkzRqeccorWrl2r77//Xtddd50Mw9AzzzzTZp8JAKD1PO1n9uP//gE0qqiw/6FpuqdETo593m1CQuj6BXRAJsMwjNY+ec+ePTKZTOrVq1cg++QwduxYJScn6+WXX3Yc+8UvfqHOnTvrtddek2EYslqtmjZtmu666y5J9lG15ORkPfbYY/r1r3+tqqoqnXLKKXrttdf0q1/9SpK0b98+9enTR4sXL1ZOTo6+/PJLDRo0SOvXr9eQIUMkSevXr9fQoUP11VdfaeDAgVqyZInGjh2r3bt3y2q1SpIKCgo0adIklZeXq2vXrj69p+rqalksFlVVVfn8HADAibPZ7CNsns4zQgU0kZtr/61Gff1Px8xm+4JJfssBBISv2cDv6ZENDQ166KGHZLFYdOqpp6pv377q1q2b/vjHPzpNWwyE4cOH64MPPpDNZpMkffrpp1q7dq1Gjx4tyT7qV1ZWppEjRzqeExsbq8zMTK1bt06SVFJSorq6Oqc2VqtV6enpjjbFxcWyWCyOwCZJF154oSwWi1Ob9PR0R2CTpJycHNXU1KikpMTte6ipqVF1dbXTDwCg7fmynxmAHzXu2t40sEnOu7YDaDN+T4+899579fLLL+vRRx/VRRddJMMw9NFHH+mBBx7QsWPH9MgjjwSsc3fddZeqqqp0xhlnyGw2q76+Xo888ogmTpwoSSorK5MkJScnOz0vOTlZ33zzjaNNp06dlNBsGD85Odnx/LKyMiUlJbV4/aSkJKc2zV8nISFBnTp1crRxZdasWXrwwQf9edsAEHbaQ+GOjrqfWXu4dwgBdm0HworfI22vvvqq/vKXv+jmm2/WOeeco3PPPVdTpkzRSy+9pPnz5we0c2+++ab+/ve/64033tCmTZv06quvavbs2Xr11Ved2plMJqfHhmG0ONZc8zau2remTXP33HOPqqqqHD+7d+/22C8ACCftqXBHR9vPrD3dO4RAR/0tBxCm/A5tFRUVOuOMM1ocP+OMM1RRURGQTjWaMWOG7r77bl111VU6++yzlZ+fr9/85jeaNWuWJCklJUWSWox0lZeXO0bFUlJSVFtbq8pmf0s1b/Ptt9+2eP0DBw44tWn+OpWVlaqrq2sxAtdUbGysunbt6vQDAJHCU+GOSNSR9jNrb/cObayj/ZYDCHN+h7Zzzz1Xc+fObXF87ty5OvfccwPSqUY//PCDoqKcu2g2mx1r5/r166eUlBQtX77ccb62tlarVq3SsGHDJEkZGRmKiYlxarN//35t3brV0Wbo0KGqqqrShg0bHG0+/vhjVVVVObXZunWr9u/f72izbNkyxcbGKiMjI6DvGwDCQXtc0tK4n5nNJi1ebP9nYWH7K4TXHu8dQqAj/ZYDCHN+r2l7/PHHNWbMGBUVFWno0KEymUxat26ddu/ercWLFwe0c+PGjdMjjzyivn376qyzztLmzZs1Z84cXX/99ZLs0xWnTZummTNnKi0tTWlpaZo5c6Y6d+6svLw8SZLFYtENN9ygO+64Qz169FD37t1155136uyzz1b2j/8jOvPMM5Wbm6vJkyfrhRdekGQv+T927FgN/LHU2MiRIzVo0CDl5+friSeeUEVFhe68805NnjyZ0TMA7VJ7XtKSlha5ffdFe753aEPs2g6EjVaV/N+3b5+effZZffXVVzIMQ4MGDdKUKVOcKisGwqFDh3Tfffdp4cKFKi8vl9Vq1cSJE3X//ferU6dOkuxryh588EG98MILqqys1JAhQ/Tss88qPT3dcZ1jx45pxowZeuONN3T06FFddtllmjdvnvr06eNoU1FRoalTp2rRokWSpPHjx2vu3Lnq1q2bo82uXbs0ZcoUffjhh4qLi1NeXp5mz56t2NhYn98TJf8BRApK5Ecu7h0ARAZfs8EJ7dMG/xHaAEQStmmKXNw7AAh/Ad+nraKiQnv27HE69vnnn+t//ud/dOWVV+qNN95ofW8BAGGJJS2Ri3sHAO2Hz2vabrnlFvXs2VNz5syRZK++ePHFF8tqtap///6aNGmS6uvrlZ+fH7TOAgDaFktaIhf3DgDaD59D2/r16/XKK684Hv/tb39T9+7dVVpaqujoaM2ePVvPPvssoQ0A2qH2XrijPePeAUDk83l6ZFlZmfr16+d4/OGHH+q//uu/FB1tz33jx4/XNmoIAwDgks0mLVlCuX0AgP98Dm1du3bVwYMHHY83bNigCy+80PHYZDKppqYmoJ0DACDSVVTYi4IMHCiNHm3fszg3V6qsDHXPAACRwufQdsEFF+jpp59WQ0OD3nrrLR06dEiXXnqp47zNZnMqoQ8AAKS8PHsVx6aKiqSJE0PTHwBA5PE5tP3xj3/UP//5T8XFxelXv/qVfvvb3yohIcFxvqCgQJmZmUHpJAAAkchmk5YudS67L9kfL13KVEkAgG98LkRy3nnn6csvv9S6deuUkpKiIUOGOJ2/6qqrNGjQoIB3EACASLVjh+fz27dTJAQA4J3PoU2STjnlFF1xxRUuz40ZMyYgHQIAINLZbPbAZjZ7bpea2jb9AQBENr9CGwAA4aAxFIXb3mMVFfY1bEuX/nSsRw/p4EHnKZJms32ja3d9D9f3BwAIDZ/XtAEAEGrhXonRVdGRykqpWzfnY9nZ0oIFLZ8f7u8PABAaJsMwjFB3oiOprq6WxWJRVVWVunbtGuruAEBEyc21hyJXo1aFhaHrl2QfHRs40P35Zcuk48c9j56F8/sDAASer9nAr5G248eP69VXX1VZWdkJdxAAAH+EeyVGb0VHjh+XRo3yPCUynN8fACB0/Apt0dHRuvnmm9lEGwDQ5nypxBgqFRXSzJme23grOhLO7w8AEFp+r2kbMmSISktLg9AVAADc69/f8/lQVmLMy5OKi12fM5ulnBzvBUXC+f11KDabtGQJQ5sAworf1SOnTJmi6dOna/fu3crIyFB8fLzT+XPOOSdgnQMAoNGAAfbw427NVyiqLNps0qpVztUimxs61HXRkebC8f11KK5Kf+bk2G9eQkLo+gUAakUhkqioloNzJpNJhmHIZDKpvvlkfDihEAkAtF5lpTRxYui/V7v6fu/O4sX2tWy+CJf31yFRBQZACPiaDfwObd98843H86eeeqo/l+twCG0AcOK2bbOv8QrVPmauvt+7Y7P538dQv78Ox1vpz9bcRADwga/ZwO/pkYQyAECopaWF7jt0Y5VHb05kWmMo31+H5EsVGG4IgBBq1ebar732mi666CJZrVbHyNtTTz2lf/7znwHtHAAA4cbb9/tG7jbQRhiiCgyAMOd3aHvuuec0ffp0jR49WgcPHnSsYevWrZueeuqpQPcPAICw4u37/Usv2UfjCgtZhxYxGqvAmM3Ox30t/QkAQeZ3aHvmmWf00ksv6d5775W5yf/cBg8erC1btgS0cwAAhBtv3+//939df8enknyYW7DAPjzaFMOlAMKE36Ft586dOv/881scj42N1ZEjRwLSKQAAwpk/3+8rKuyFSwYOlEaPtoe+3Fx7pUiEkYQE+/CozWYv+clwKYAw4nchkn79+qm0tLRFQZIlS5Zo0KBBAesYAADhqvH7vS9VHvPy7JUmmyoqspf2p5J8GKIKDIAw5HdomzFjhm655RYdO3ZMhmFow4YNWrBggWbNmqW//OUvwegjAABhydv3e3eVJuvr7ce3bSMfAAC88zu0/c///I+OHz+u3/72t/rhhx+Ul5enXr166c9//rOuuuqqYPQRAICIRCV5AEAg+L25dlPfffedGhoalJSUFMg+tWtsrg0AHQd7NgMAPPE1G7Rqn7ZGiYmJBDYAANygkjwAIBD8Dm3ffvut8vPzZbVaFR0dLbPZ7PQDAAB+QiV5AMCJ8ntN26RJk7Rr1y7dd9996tmzp0wmUzD6BQBAu+BPpUmgTdhs9gWX/McIRAy/Q9vatWu1Zs0anXfeeUHoDgAAJyZcv49SSR4hV1Fh34OiaUnTnBz7sC/70QFhze/pkX369NEJ1C4BACAo2MQa8MLTpoEAwprfoe2pp57S3Xffrf/85z9B6A4AAK3j7fuozSYtWWKfpgh0OI2bBtbXOx9vumkggLDl0/TIhIQEp7VrR44cUf/+/dW5c2fFxMQ4ta2oqAhsDwEA8MLbJtaXXCKtWfPTcWaEocNh00AgovkU2p566qkgdwMAgNbz9n30o4+cHzeOwBUWBq9PQFjp39/z+dTUtukHgFY5oc214T821waAwPO2ibWn5zG4gA4jN9f+G4umUyTNZvseFPwGAwiJoG2ubTabVV5e3uL4999/zz5tANAORcJaMHebWEd5+Vtu+/bg9QkIO2waCEQsv0Obu4G5mpoaderU6YQ7BAAID+FUjdGX4Ojq++iwYZ6vy4wwdCiNmwbabNLixfZ/FhayuBOIAD7v0/b0009Lkkwmk/7yl7/o5JNPdpyrr6/X6tWrdcYZZwS+hwCAkPBUjbGtZlL5s62Uu02sPc0IY2okOiQ2DQQijs9r2vr16ydJ+uabb9S7d2+nqZCdOnXSaaedpoceekhDhgwJTk/bCda0AYgE3taItdVasEAswamstAdN9hMGAIQbX7OBzyNtO3fulCRlZWXpnXfeUQJ/0wFAuxUO1cG9lfHfts23PrgbgQMAIFL4HNoarVixQpL03XffyWQyqUePHgHvFAAgtMKhOniggyMzwgAAkcqvQiQHDx7ULbfcosTERCUnJyspKUmJiYm69dZbdfDgwSB1EQDQ1txVYzSb7cdbG378qUQZDsERAIBw4PNIW0VFhYYOHaq9e/fq6quv1plnninDMPTll19q/vz5+uCDD7Ru3TqmTQJAO7FgQcu1YK2tDu5PQZFGjcGRIiIAgI7O50Ik06ZN0wcffKCioiIlJyc7nSsrK9PIkSN12WWX6cknnwxKR9sLCpEAiDSBWAvW2oIiFBEBALRnAd9c+91339Xs2bNbBDZJSklJ0eOPP66FCxe2rrce7N27V9dcc4169Oihzp0767zzzlNJSYnjvGEYeuCBB2S1WhUXF6cRI0bo888/d7pGTU2NbrvtNiUmJio+Pl7jx4/Xnj17nNpUVlYqPz9fFotFFotF+fn5LaZ87tq1S+PGjVN8fLwSExM1depU1dbWBvw9A0A4SUuTRo06sSmRS5c6BzbJuaCIO+1qW6lI2KUcABCWfA5t+/fv11lnneX2fHp6usrKygLSqUaVlZW66KKLFBMToyVLluiLL77Qn/70J3Xr1s3R5vHHH9ecOXM0d+5cbdy4USkpKbr88st16NAhR5tp06Zp4cKFKigo0Nq1a3X48GGNHTtW9U2+QeTl5am0tFSFhYUqLCxUaWmp8vPzHefr6+s1ZswYHTlyRGvXrlVBQYHefvtt3XHHHQF9zwAQyVzlEl8KinhzosExpMJpl3IAQGQyfGS1Wo01a9a4Pb969WrDarX6ejmf3HXXXcbw4cPdnm9oaDBSUlKMRx991HHs2LFjhsViMZ5//nnDMAzj4MGDRkxMjFFQUOBos3fvXiMqKsooLCw0DMMwvvjiC0OSsX79ekeb4uJiQ5Lx1VdfGYZhGIsXLzaioqKMvXv3OtosWLDAiI2NNaqqqnx+T1VVVYYkv54DAOHu++8NIyfHMKSffnJyDKOiwjC+/tr5ePMfmy3UvQ+ynBzDMJud37TZbD8OAOjQfM0GPo+05ebm6t5773U5HbCmpkb33XefcnNzAxYmJWnRokUaPHiwfvnLXyopKUnnn3++XnrpJcf5nTt3OtbTNYqNjVVmZqbWrVsnSSopKVFdXZ1TG6vVqvT0dEeb4uJiWSwWp43BL7zwQlksFqc26enpslqtjjY5OTmqqalxmq7ZXE1Njaqrq51+AKC9ycuzr1lrqqjIvh4tWJUoI8KJzA0FAOBHPoe2Bx98UF9//bXS0tL0+OOPa9GiRVq0aJEeffRRpaWl6csvv9QDDzwQ0M79+9//1nPPPae0tDQtXbpUN910k6ZOnaq//e1vkuSYjtl8nV1ycrLjXFlZmTp16tSiqmXzNklJSS1ePykpyalN89dJSEhQp06dPE4LnTVrlmOdnMViUZ8+ffz5CAAg7PmSSxYssBcdaaq1lSgjSiDmhgIAOjyfS/737t1bxcXFmjJliu655x4ZPxadNJlMuvzyyzV37tyAB5KGhgYNHjxYM2fOlCSdf/75+vzzz/Xcc8/p2muvdbQzmUxOzzMMo8Wx5pq3cdW+NW2au+eeezR9+nTH4+rqaoIbgHbF102wCwsDU4kyorDZHAAgAHwObZLUr18/LVmyRJWVldr245SO1NRUde/ePSid69mzpwYNGuR07Mwzz9Tbb78tyV61UrKPgvXs2dPRpry83DEqlpKSotraWlVWVjqNtpWXl2vYsGGONt9++22L1z9w4IDTdT7++GOn85WVlaqrq3NZUbNRbGysYmNjfX7PABBp/MklaWkdJKw1auvN5mw2e4ruMKkYADoGn6dHNpWQkKALLrhAF1xwQdACmyRddNFF+vrrr52O2Ww2nXrqqZLsITIlJUXLly93nK+trdWqVascgSwjI0MxMTFObfbv36+tW7c62gwdOlRVVVXasGGDo83HH3+sqqoqpzZbt27V/v37HW2WLVum2NhYZWRkBPidA0Dk6NBr1nzRFnNDqVAJAO2az5trh8LGjRs1bNgwPfjgg7ryyiu1YcMGTZ48WS+++KKuvvpqSdJjjz2mWbNm6ZVXXlFaWppmzpyplStX6uuvv1aXLl0kSTfffLPef/99zZ8/X927d9edd96p77//XiUlJTL/+C1j1KhR2rdvn1544QVJ0o033qhTTz1V7733niR7yf/zzjtPycnJeuKJJ1RRUaFJkyZpwoQJeuaZZ3x+T2yuDaA9YhNsHwRzbmhrdy8HAISUr9kgrEObJL3//vu65557tG3bNvXr10/Tp0/X5MmTHecNw9CDDz6oF154QZWVlRoyZIieffZZpaenO9ocO3ZMM2bM0BtvvKGjR4/qsssu07x585zWllVUVGjq1KlatGiRJGn8+PGaO3eu055wu3bt0pQpU/Thhx8qLi5OeXl5mj17tl/THwltANqzDrdmLRzYbPYRNk/nuRkAEJbaTWhrbwhtABAG2tParyVL7FMi3Vm82L4zOQAg7PiaDVq1pg0AgIjUHtd+UaESANo9QhsAwCObzT6Y0y72gfa0C3ikohIMALR7hDYAgEvtblDKl13AI1WH3b0cADoGQhsAdEC+jJ61u0EpX3YBj1QJCfYqkTabfQ2bzWZ/TOlOAGgX/NpcGwAQ2Soq7GHMW2n+xkGp5poOSkXcrLuOsParw+1eDgAdAyNtANCBuBs9y852HnVrl4NSrP0CAEQoQhsAdBCelnRt2uS8Zq3dDkpFytqvdlX9BQBwoghtANAB2GxSQYH3do1r1trtoFSw136daNgKRvUXAiAARDw2125jbK4NoC25WsPmC5tNSky0Bzhv6986tMZNuhMTpfvuO/EPKzfXnpybDoeazfbRwMJC//rm6wJGAEDI+JoNCG1tjNAGdDyN3+tTU4MzQuXp+q4ygC8efNAe2NLS7AM027cHr/8RyVUgMpmkpn+l+hu2bDb7CJun8/7cgEAGQABAUPiaDZgeCQBBEux9zrxd390aNl/84Q8/XS8xURo1isDmxFVFl+a/A/V3/7dAVn9pz3vSAUAHRGgDgCAJ9j5n3q7vLQP07y9FeflbIKL3ZQsWf9Owr2ErkNVf2mX5TwDouAhtABAEwR7o8OX63jJAQYF0+eWe2zAw44K3QNScr2ErkNVf2m35TwDomAhtABAEwR7oWLXK+/W9ZYDBg38qpPjgg8Htb7viLRA1d9ttvs+JDdSWBO22/CcAdEyENgAIgmANdDSuY7vxRt+u70sGSEuTrrrKt+tB7gORO/7MMQ3klgSRsicdAMArqke2MapHAh1HMIr3easG6e76vlSApNigHyorW+6HMHy4tHat++f4W/0xUCj/CQBhi5L/YYrQBnQcrr7Xn8g2Wd4qwp/o9QPd3w6haSDavt1extOdxYvtZTgBAPiRr9kgug37BAAdSuNMt0ANdHhbJ/fSS9L//m/rrx/o/nYIaWk/fUjefgdqNktLlvDBAgD8xkhbG2OkDYA37jbLDvTey4EQ7I3DI467Oabduknff//TMYYwAQBic20AiDieNstuDEfDh4dHQcBgbxx+Qmw2+4hWKPYpcFX8o1u3lh8MG+ABAPzASFsbY6QN6Ng8jUz5OkjTo0foB23CsmhJRYV9x3F3i/LacliwcY5pY6J2J1TFSQAAYYGRNgAII95Gpjxtlt00oEnSwYPSxRefeEX41gr2xuGtlpdnT5JNFRVJv/hF2w8LpqXZi464K/PZiA3wAAA+ILQBQBtwlycaZ8h5KzLSVH29tGZN6NaRBXvj8FbxlCRXrPD84QdTsDbsAwB0KIQ2AAgyX0amvH23dyVUgzQhySHe1ql5S5KhGhZ0txF3KBYiAgAiFqENAILMl5Epd9/tPTnllBPrV2u1aQ7xteJJa1Kv1DbJ11Vxkuxs+3EAAHxAaAOAIPN1ZMpd4UF3fv/7E+rWCWmzHOJtXmkjd0kyystfc20xPbFxAzybLXQLEQEAEY3qkW2M6pFAx+RrtcWKCmnCBPuaNV+EuvhgUDfi9ndjuspKe5hrXj2yrk5atSrMSl0CAED1SAAIK/PmtRw169ZNeu4552N5edK6db5fN9TFBxuLJAYlOPpb8cTdiNZbbzE9EQAQ0aJD3QEA6AimTLGX6m/q4EHp5pt/GuxpLFjij3ZdfLC1FU/S0pxTZGOYC+qwIAAAwUNoA4AgaLqPs2G4DmNNCximpflX9r9xdl+7zh6N69TczSv19803D3MAAEQIpkcCQAC5KnbobTuwxll+/hRA7DCz+6i8CAAAI20AEEiuih1++qnn5zTO8vM2sPTMMx1wdh9TGwEAoHpkW6N6JNB+eSt2GBUlNTT89NhVAUN3BRAXLKBCvJOm808JcQCACOVrNmCkDQACxNuatPPOkzZt+umxq1l+YTmwFE4BqaLCPpxJqgUAdCCMtLUxRtqA9suXbcWkMApj3vgSkNo60Pm64R0AABGAfdoAIMBsNmnJEvsomCuNa9LMZufjZrP9eGPxwqDtaxZorhboFRXZ52+6qriSm2uf3xksjXsiNA1sknMZTgAA2iFCGwB44U8+aTfFDr0FpCuucB/ogsXfzbYBAGgnCG0A4IWnAafmGtek2WzS4sX2fxYWRthyK5tNKijw3Gbt2rYf8WrtZtsAAEQ4CpEAgAeNA07NNd8Yu7mI3MfZ1Rq21ti+PThvPtCbbQMAECEYaQOAZpquXesQM/Ia3/CECS2HFJszm6Xhwz23CeaIV7uZfwoAgO8YaQOAH7kaaGpNPgmnCvketWZkrTEgTZzoesRr6NCfkqyrN3+iH05Y7okAAEBwUfK/jVHyHwgtm01atUoymaTMTOfv++6qyXfrJh086L3KfMRtIebqDbvz4IP2oNb4gbnaBbxHD+n773963PTNR9yHAwBA8PmaDQhtbYzQho4sWCNQvly3okL67/+WVqxwPn7ppdJbb0kHDnjeY+3ii6U1a3567CpvRNQWYt42lXPV3tWH2zjiNXOmVFzs/s1H1IcDAEDbYJ82AGEjWFt6+XPdvLyWgU2yH5s40fvatXvu8VwRMqRbiHnbQM4Vb2+4UdNN5lxJS7NXdfRUTXLZMvZXAwDgBBDaAASdPyXzg3FddxUgJckw7Oeab4jdXOMonruNsUNSsORE0rC38vmNfCny4e3Nr1/v+Xy7qOYCAEDwRFRomzVrlkwmk6ZNm+Y4ZhiGHnjgAVmtVsXFxWnEiBH6/PPPnZ5XU1Oj2267TYmJiYqPj9f48eO1Z88epzaVlZXKz8+XxWKRxWJRfn6+Dh486NRm165dGjdunOLj45WYmKipU6eqtrY2WG8XaBeCNQLlz3V9GVSqr7cPKDUPb94GmhqFZAuxE0nDjeXzXb3h4cOdhxQPHPA8kuftzV94oefz7K8GAIBHERPaNm7cqBdffFHnnHOO0/HHH39cc+bM0dy5c7Vx40alpKTo8ssv16FDhxxtpk2bpoULF6qgoEBr167V4cOHNXbsWNU3+baXl5en0tJSFRYWqrCwUKWlpcrPz3ecr6+v15gxY3TkyBGtXbtWBQUFevvtt3XHHXcE/80DESxYI1D+XNeXQaXU1BOrJu8pA/kS+vwWiDTs7g0vWmQfUuzRw7eRPG9vfuTINv5wAABoZ4wIcOjQISMtLc1Yvny5kZmZadx+++2GYRhGQ0ODkZKSYjz66KOOtseOHTMsFovx/PPPG4ZhGAcPHjRiYmKMgoICR5u9e/caUVFRRmFhoWEYhvHFF18Ykoz169c72hQXFxuSjK+++sowDMNYvHixERUVZezdu9fRZsGCBUZsbKxRVVXl83upqqoyJPn1HCCSff21YdgnIbr+sdmCe92vvzaMxYsN4+KLXbczmQwjJ8f52jab/Tn+9q2iwn6tptfPybEfD7jFiz1/AIsXO7dv/CBcvSl3bzgnxzDMZufrms0tPzDD8P7m2/TDAQAgMviaDSJipO2WW27RmDFjlN3sN8I7d+5UWVmZRo4c6TgWGxurzMxMrVu3TpJUUlKiuro6pzZWq1Xp6emONsXFxbJYLBoyZIijzYUXXiiLxeLUJj09XVar1dEmJydHNTU1Kikpcdv3mpoaVVdXO/0AHUmwRqC8Xbf5INGaNa4ry2dltRxJ87R2zZPGLcRaFCw50IpCId74Oh/Tl3Vvrt6wvyN5bt98gm/nAQCAW2G/uXZBQYE2bdqkjRs3tjhXVlYmSUpOTnY6npycrG+++cbRplOnTkpo9sUgOTnZ8fyysjIlJSW1uH5SUpJTm+avk5CQoE6dOjnauDJr1iw9+OCD3t4m0K417sXctBiIr9MOW3vdxr2fm6quti/Xuu46++Pm+7QFSlraj9etqJByA7g3WdO9DRpTq7sy+o1vzNO6N0+l9n2Zf+rqw3O8eTe8nQcAAC2E9Ujb7t27dfvtt+vvf/+7TjrpJLftTCaT02PDMFoca655G1ftW9OmuXvuuUdVVVWOn927d3vsF9AeBWuQxd11DxxwP0i0dq09rP3v/7ZBdghU2Ux3o2XPPed5Ed6JrHsLSWUVAADgSliHtpKSEpWXlysjI0PR0dGKjo7WqlWr9PTTTys6Otox8tV8pKu8vNxxLiUlRbW1tapstnC+eZtvv/22xesfOHDAqU3z16msrFRdXV2LEbimYmNj1bVrV6cfoKNq7bRDf68bkvL7zQWybKa78HfzzZ7TsLcPYsEC9/1o88oqAADAnbAObZdddpm2bNmi0tJSx8/gwYN19dVXq7S0VKeffrpSUlK0fPlyx3Nqa2u1atUqDRs2TJKUkZGhmJgYpzb79+/X1q1bHW2GDh2qqqoqbdiwwdHm448/VlVVlVObrVu3av/+/Y42y5YtU2xsrDIyMoL6OQDwT1gMEgUqOfoS/tylYW8fxB/+4HlvtxMppwkAAAImrNe0denSRenp6U7H4uPj1aNHD8fxadOmaebMmUpLS1NaWppmzpypzp07Ky8vT5JksVh0ww036I477lCPHj3UvXt33XnnnTr77LMdhU3OPPNM5ebmavLkyXrhhRckSTfeeKPGjh2rgQMHSpJGjhypQYMGKT8/X0888YQqKip05513avLkyYyeAWHG1+VeQRWo5NjatWWS+w+iOXdr3Brnn27bZn+dxh3GAQBAmwrrkTZf/Pa3v9W0adM0ZcoUDR48WHv37tWyZcvUpUsXR5snn3xSEyZM0JVXXqmLLrpInTt31nvvvSdzk2k/r7/+us4++2yNHDlSI0eO1DnnnKPXXnvNcd5sNutf//qXTjrpJF100UW68sorNWHCBM2ePbtN3y8A34R8kChQ0wtPNPy5+iCa8zZlM1jzWgEAgE9MhmEYoe5ER1JdXS2LxaKqqipG6IA2ENJBosrKluUtW1M9MjfX/bChpwqQTW3bZn/dP/zBfZvFi+3hDAAAtAlfswGhrY0R2oAO6ESTY6DCn81mr0Dp6TyjaQAAtBlfs0FYr2kDgHbhRPcmC9TasrBY7AcAAPwV8WvaAEQmm01assS/yvcdXmvWljX/oEO+2A8AAPiLkTYAAWez2YseuhoQqqiwbzt2ojP9OjxPH7Lk+YOmIiQAABGFkTYAAVNRYa+ZMXCgNHq06y3A3O0TPXFi2/Y1YvnyIUveP2gqQgIAEDEoRNLGKESCYPM2ABNM3oocequD8dJLUmZmO8gRwbwJvlSSpOAIAAARwddswEgb0E74OgATLDabfSZe8z2cm24B5m2f6MmT277fARXsm+DLhyz5tiE3AACIGIQ2oJ0I9bRDX3KCt32iG0XsdElfbkJrK7DYbFJBgec2jWHsRDfkBgAAYYXQBrQDvg7ABJMvOWHAAOnSSyWTyXPbtux3wHi7CRs3tm4UrunonaeNsaWfwlhjaX+z2fm82Ww/ztRIAAAiCqENaAfCYTacPznB15W0ETWLz9tNuOmm1g2Fuhq9a87Vh0xpfwAA2g1K/gPtQLjMhluwwJ5BmlaZb5oTbDbpww99v15EzeLzdhM2bWp5rOmQYtPA1VjIxGx2/jDdcRXGArUhNwAACDlCG9AONI5yuSsqGKjv6u6KIjY97ikneBuMCla/A8ZTVUhPN+Hcc12Htkbbt9uv52pvNU8efNCekj19UGlpYfhBAgAAfzA9Emgngjkbzl1RxH//u+Xxiy+WNm92nWt8LUQSdrP4fK0K6eomDB0qPf+85+s3Din6MhWyKW+BDQAAtAvs09bG2KcNwRaM2XDutgbr1k06eLBl7Y1GP/uZ9MIL0uDB3q81dKj0u9+F6Sw+X/ZGa1RRIU2YIK1Z89OxnBzphx+ktWudF/SZTFJWlvTBB973VmvK3WsDAICIwj5tQAeVliaNGhXYKZHuiiJ+/737wCbZZwT+/OfOg1LuRgQXLQpsvwPG39KceXnSunXOx4qKpM8/b1mBpeljX+eOSmE4FAkAAIKJNW0APPInS7izfLl9Jl9hYQTWx/ClNGfjG2gMeM3V19tH4Fz58EP7h+Ft7uiyZdLx4xHwgQEAgEAjtAHwyNd1aJ40NLQskhgx9TH8Kc3Z2oS7fbt9mDEnx55wGxqcz/foYZ9jmpDQuusDAICIxvRIAB552n+tR4+Wxz2JqH3XGvmzAV1rE25j8FuwwHUwO3jQ+35uAACg3SK0AXCw2aQlS1ou03K3Dm3jxpbHPYmYfdeafxC+lub0N+E2D34HDtgXCjbnbv0cAADoEAhtALxWtG9ch2azSYsX2/9ZWCj16/fT8TfftJf7d8XVoFRYcvdBSK4/AFejYv4k3ObBz5f1cwAAoMOh5H8bo+Q/wtHFF9sLHjZdStXaqvKffCL9+tfOe0nn5Pw48++Ah82p25K7TbL9Ke3vjbtKK54qsHgr+2+zRUDyBQAAvvI1GxDa2hihDeGkokK64gr79mHuNOYEdznHHads0qPCXgq/aWVFR5Jrw+IaFR76ceBAeASmQAZHAAAQ1tinDYBXrrYUa27zZs9TJ91x2i8uL88eRJoqKmr74hqe+hEuUxN9XT8HAAA6DEba2hgjbQgX3mbiNRo+XCouPoGBn3CZ8uetH0uX2kfdPD2/LacmRsxGdgAAoLUYaQM6IHfVH13xNrAUFWUPbGvXOgc2yc9ihuEyguWtH/X1vpf2bwtOQ5UAAKAjI7QB7YCroocZGfaiIO5421Js2DDptts8t/Epb/mzOXUw+dIPpiYCAIAwRGgDWsmfUa1gc7VUa9Mm6ec/d7/+zN2WYlFR9mqSa9ZI553n+XV9ylv+bE4dTL70w93eBm1ZLAUAAKAZQhvgJ297mrU1m80+VbH5FMZGnup9uBpYuvxy6Z//tP97wPKWqxcaOlS6/vrApF5fE7SvI2lMTQQAAGGEQiRtjEIkkS/cKrIvWWIPj954qqPhqeZFZaU99AWkWv+2bfZylM8847zPQGsv6KmEv7tr2WzS6tX2f8/MJJgBAICQYZ+2MEVoi2zhUgix+Wv6UgVy8WL74FFrBayYYSBTrz/Xak3AAwAACCKqRwJBEC6FEFuznu5E630EZMagu7mcfpWjbOW1wmWvOAAAAD8R2gA/hLoQoqv1dN4yR1SU9LOfBbdfPgtk6vXnWoEMiwAAAG2M0Ab4IdSFEF0NFpWWen5OQ4O9kmSoC6ZICmzq9eda4TJECgAA0AqENsBPbbWVV/MpkO4Gixoa7P+M8uFPc7uaDehrgrbZpD17PF+rrfaKAwAAaAVCG+CnYG/l5W5LAW8javHx3q8d8tmAgR7x8pSgm36QN95oP2cyObdt673iAAAAWiE61B0AIlVaWnC+67url3HkiOfnHTokLVsmHT8u7d0rTZ7svu327SHKKYFeFNiYoF2VtmysLNlU82K5wRgiBQAACDBCGxBGGqdANldf77ytmTvHj9srPNpsntsFfTagzWYfVWu+P0DjlEZ3ZfpbmySbJ2h3H2Sjl15ijzYAABAxmB4JhBFvswe9aQxjISuY4m5uZ9PqJ+6mNP7xj/7vY+COtw+yVy8CGwAAiBiENiCMeJs96I6rMNZWBVOc+LIXWvNFgRs22I9fcIH7oOevUO/NAAAAEEAmw2i+yAPB5Ouu52hfbDZpx6o9SjXtUFqm1ZGuXM0ibFyK1bxKpCc5OfYw5qoYiqvlXkFhs9lH2Dydd9UBV2+4cbpkYWHr+xOs6wIAAASIr9mAkTYgSGw26R//kC4eWmufLXhjbw2YnKncATv070smKfeyOpezCF2NkHmybJnn6pVpafZ1bkGfDdiaypDB3PQ6JEON7VjzPSgAAECbYaStjTHS1v5VVNhnCbqrg2HWcXVTpQ6auqve+GnRWVSUdP750q9/ba9Mf+qp9sIiqanSbbdJy5f/tCebFKRBI3cFRLydazzv70jbkiX21OrO4sX2xHki2myosZ1y9R+0p6FdAADgM1+zAdUjgQBztayrqXpF63udIjX7dUlDg1RS8tOWYpJ06aX2Qod1dc6BTbIXPwzYoJGnL+aG0fLc8OHSokXOX9pbUxmyLdaeBWtvho7C0zpFppkCANAmGGlrY4y0tW/eBpv8ZTJJ3btLBw8GeWmWp/VfUsthPknq0cM+itU0uFVWSuPHO+9P4G1UhrVn4au16xQBAIBPWNMGtJGmS31OtGR/c4Yhff99cJZ8OXhbV7Z0acvAJtk71nRqY0WFffSlaWAbPtz7NDrWnoWv1qxTBAAAARfWoW3WrFn6+c9/ri5duigpKUkTJkzQ119/7dTGMAw98MADslqtiouL04gRI/T55587tampqdFtt92mxMRExcfHa/z48dqzZ49Tm8rKSuXn58tischisSg/P18HDx50arNr1y6NGzdO8fHxSkxM1NSpU1VbWxuU947w52pLspkzvT/PrOPqoQOKkh/lId0IyHfmE0ma69fbk6PNJl1+ectpdMXFzuX+XWm+BYDN5rmyCtoOWycAABAWwjq0rVq1SrfccovWr1+v5cuX6/jx4xo5cqSOHDniaPP4449rzpw5mjt3rjZu3KiUlBRdfvnlOnTokKPNtGnTtHDhQhUUFGjt2rU6fPiwxo4dq/omIwt5eXkqLS1VYWGhCgsLVVpaqvz8fMf5+vp6jRkzRkeOHNHatWtVUFCgt99+W3fccUfbfBgIO66W+hQXe3/euSrVPwY/oWEXuhi98tMJf2euqPAtaXoyYYI9uW7adGJDgm1W5hI+C9ku7QAAwIkRQcrLyw1JxqpVqwzDMIyGhgYjJSXFePTRRx1tjh07ZlgsFuP55583DMMwDh48aMTExBgFBQWONnv37jWioqKMwsJCwzAM44svvjAkGevXr3e0KS4uNiQZX331lWEYhrF48WIjKirK2Lt3r6PNggULjNjYWKOqqsrn91BVVWVI8us5CD9ff20Y9smLrf/JyTGMCy80jKgo921MJsPo0cMwzGbn42az/fk+d3bxYsOw2Vqey8lpefHmLzJokOc3YjJ5f7OLFwf080cbqqiw/3fQ/D/eiopQ9wwAgIjnazYI65G25qqqqiRJ3bt3lyTt3LlTZWVlGjlypKNNbGysMjMztW7dOklSSUmJ6urqnNpYrValp6c72hQXF8tisWjIkCGONhdeeKEsFotTm/T0dFmtVkebnJwc1dTUqKSkxG2fa2pqVF1d7fSDyBeItWtFRVLnzvZZhe5kZUkbN/q55Ktxkd3GjS3nbzZuBtfYztVatkZDh9pfZP58z2/El1pGM2f+9LqILExfBQAg5CKm5L9hGJo+fbqGDx+u9PR0SVJZWZkkKTk52altcnKyvvnmG0ebTp06KaHZF4zk5GTH88vKypSUlNTiNZOSkpzaNH+dhIQEderUydHGlVmzZunBBx/0560iAnhb6uOL+nrpww/t34El+/q06Gjpx/90lZn50+yzwkIfthtzVbbfZHJu07RUu7fk+bvf2b+Y//zn9r0HPvywVe9T0k9r26gGGbnYOgEAgJCJmNB266236rPPPtPappXpfmRq9sXUMIwWx5pr3sZV+9a0ae6ee+7R9OnTHY+rq6vVp08fj31D+BswwJ5jVqzwbaDJk+3bfVvK5fU7s6tFds0713SNmT9FJt56yx66mu/V5uLPo0tNX5cv/gAAAH6JiOmRt912mxYtWqQVK1aod+/ejuMpKSmS1GKkq7y83DEqlpKSotraWlU2m5rVvM23337b4nUPHDjg1Kb561RWVqqurq7FCFxTsbGx6tq1q9MPIpvNZt/weu/eEw9sUoAK8Hmb6tjc9u3+FZlwNUVuzRrXz/f2ugAAAPBLWIc2wzB066236p133tGHH36ofv36OZ3v16+fUlJStHz5csex2tparVq1SsOGDZMkZWRkKCYmxqnN/v37tXXrVkeboUOHqqqqShs2bHC0+fjjj1VVVeXUZuvWrdq/f7+jzbJlyxQbG6uMjIzAv3mEnYoK6bLL7EvEbrxRarb7hFtRbv6UBbQAn7+L7BqTor97pDWv8Ojq+b68LgAAAHxmMoxAjBUEx5QpU/TGG2/on//8pwYOHOg4brFYFBcXJ0l67LHHNGvWLL3yyitKS0vTzJkztXLlSn399dfq0qWLJOnmm2/W+++/r/nz56t79+6688479f3336ukpETmH0cJRo0apX379umFF16QJN1444069dRT9d5770myl/w/77zzlJycrCeeeEIVFRWaNGmSJkyYoGeeecbn9+TrrucIP7m50rJlvo+umc32dWkxMc6zChvl5Hjfd9otm80e1BoXuG3YIDUppOOxU9nZLdeWeV0w50XT5992m32aZtNRP3evCwAA0IH5mg3COrS5Wyv2yiuvaNKkSZLso3EPPvigXnjhBVVWVmrIkCF69tlnHcVKJOnYsWOaMWOG3njjDR09elSXXXaZ5s2b57S2rKKiQlOnTtWiRYskSePHj9fcuXPVrVs3R5tdu3ZpypQp+vDDDxUXF6e8vDzNnj1bsbGxPr8nQlt4a5qFDMP535v83sAnTUNZY6aJjpaOH299NnJZbCQnR6qr861QyAklRR9VVrZc/9YWrwsAABBh2kVoa48IbeHJVRZqqn9/32cgdu0qffJJkOpt5Oa6HsXytJbt7beluLgTSIqtdKKjdwAAAO2cr9kgYqpHAsHkqvBiU/4sGfNrK77m0xy9tXWVKr0VH4mLs69Da2uUiAcAAAiIsC5EArQFfwsv+sJrkcSKCs8bX7uyalXrOkPxDwAAgIhGaEOH52/hRV+4ykk2m7RkiX3WoMuhvcaNr5trDHg33uh/Ry69lNEuAACACMf0SHRYNpv0j3/Y/xlIw4c756SKCinviiNaujbecSxH07RAHytBB39q6G4Dam9zN81myWKxj9I1XaLqZYN5AAAARAYKkbQxCpGEXkWFNGGCfW/o1rq42xatO3im6pv93qNHD3vmSkiQPQ2Wlir316eq6GCGU1uzjitbRSqUi7VmfftK06fbp036UrYyI0MqKXF/3mZjtA0AACAM+ZoNmB6JDicv78QC28+62PTP6ixly3n06+JuW+yBzfhpvZrtV7/X0oNDWoS7ekVrqXK1TS7mUe7aJU2bZl/nduWV3jvkKbBJPiywAwAAQDhjeiQ6lA0b3Jf199ULhyYqQd+rUKO0TanarlSlarvSDm6XvrP9tLm0pB3q7/Fa25WqNHkIVZ9+emKdlShEAgAAEOEIbehQbr659c81m6Xscw9o8KZNjmNp2u4cus49Vzp61PGwvzxXOUn1FNhOlNksZWczNRIAACDCMT0S7ZqjYuOynbK9tEpN8pZXgwc7P87OlhY8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YoyCggJHm7179xpRUVFGYWGhYRiG8cUXXxiSjPXr1zvaFBcXG5KMr776yjAM+/8Io6KijL179zraLFiwwIiNjTWqqqqC96bDyKFDh4y0tDRj+fLlRmZmpiO0cR/a1l133WUMHz7c7XnuR9sZM2aMcf311zsd+3//7/8Z11xzjWEY3Iu20vzLabh97vPmzTMsFotx7NgxR5tZs2YZVqvVaGhoCOAnEXqegkKjDRs2GJIcv8TmXgSHu3uxZ88eo1evXsbWrVuNU0891Sm0cS9cY3pkO1ZbW6uSkhKNHDnS6fjIkSO1bt26EPUq8lVVVUmSunfvLknauXOnysrKnD7n2NhYZWZmOj7nkpIS1dXVObWxWq1KT093tCkuLpbFYtGQIUMcbS688EJZLBanNunp6bJarY42OTk5qqmpcZqW1p7dcsstGjNmjLKzs52Ocx/a1qJFizR48GD98pe/VFJSks4//3y99NJLjvPcj7YzfPhwffDBB7LZbJKkTz/9VGvXrtXo0aMlcS9CJdw+9+LiYmVmZjptSJyTk6N9+/bpP//5T+A/gDBXVVUlk8mkbt26SeJetKWGhgbl5+drxowZOuuss1qc5164Rmhrx7777jvV19crOTnZ6XhycrLKyspC1KvIZhiGpk+fruHDhys9PV2SHJ+lp8+5rKxMnTp1UkJCgsc2SUlJLV4zKSnJqU3z10lISFCnTp06xD0tKCjQpk2bNGvWrBbnuA9t69///reee+45paWlaenSpbrppps0depU/e1vf5PE/WhLd911lyZOnKgzzjhDMTExOv/88zVt2jRNnDhREvciVMLtc3fVpvFxR7s3x44d09133628vDx17dpVEveiLT322GOKjo7W1KlTXZ7nXrgWHeoOIPhMJpPTY8MwWhyDb2699VZ99tlnWrt2bYtzrfmcm7dx1b41bdqj3bt36/bbb9eyZct00kknuW3HfWgbDQ0NGjx4sGbOnClJOv/88/X555/rueee07XXXutox/0IvjfffFN///vf9cYbb+iss85SaWmppk2bJqvVquuuu87RjnsRGuH0ubvqi7vntld1dXW66qqr1NDQoHnz5nltz70IrJKSEv35z3/Wpk2b/H6vHf1eMNLWjiUmJspsNrf4TUF5eXmL3yrAu9tuu02LFi3SihUr1Lt3b8fxlJQUSS1/I9P0c05JSVFt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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Set the size of the figure and get a figure and axis object\n", "fig, ax = plt.subplots(figsize=(10,6))\n", "merged.plot.scatter(x='gdppc_WB', y='gdppc_CIA', ax=ax, label='WB-CIA', c='r')\n", "merged.plot.scatter(x='gdppc_WB', y='gdppc_IMF', ax=ax, label='WB-IMF', c='b')\n", "ax.set_xlabel('World Bank')\n", "ax.set_ylabel('Other Source')\n", "ax.legend(loc='lower right')" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Example - Create Data" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Let's create a `DataFrame` with some artificial data for some countries. \n", "1. Create `Series` of countries\n", "2. Create `Series` of data for each country\n", "3. Create `DataFrame`" ] }, { "cell_type": "code", "execution_count": 56, "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "0 Colombia\n", "1 Turkey\n", "2 United States\n", "3 Germany\n", "4 Chile\n", "Name: country, dtype: object" ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ], "source": [ "countries = pd.Series(['Colombia', 'Turkey', 'United States', 'Germany', 'Chile'], name='country')\n", "countries" ] }, { "cell_type": "code", "execution_count": 57, "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", " There are 5 countries in this series.\n" ] } ], "source": [ "print('\\n', 'There are ', countries.shape[0], 'countries in this series.')" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## We can apply a function on the data using the `apply` method. \n", "E.g., let's find the length of each country name using the `len` function." ] }, { "cell_type": "code", "execution_count": 58, "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "0 8\n", "1 6\n", "2 13\n", "3 7\n", "4 5\n", "Name: country, dtype: int64" ] }, "execution_count": 58, "metadata": {}, "output_type": "execute_result" } ], "source": [ "countries.apply(len)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Let's create the data using some of the functions we already learned." ] }, { "cell_type": "code", "execution_count": 59, "metadata": { "scrolled": true, "slideshow": { "slide_type": "fragment" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "0 0.469112\n", "1 -0.282863\n", "2 -1.509059\n", "3 -1.135632\n", "4 1.212112\n", "Name: noise, dtype: float64" ] }, "execution_count": 59, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.random.seed(123456)\n", "data = pd.Series(np.random.normal(size=(countries.shape)), name='noise')\n", "data" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "## We can perform certain computation using some of the properties of the `pd.Series`:\n", "* mean\n", "* std\n", "* max" ] }, { "cell_type": "code", "execution_count": 60, "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", " The average in this sample is -0.24926597871826645\n", "\n", " The average in this sample is -0.25\n", "\n", " The maximum in this sample is 1.21\n", "\n", " The standard deviation in this sample is 1.12\n" ] } ], "source": [ "print('\\n', 'The average in this sample is ', data.mean())\n", "print('\\n', 'The average in this sample is ', \"{:.2f}\".format(data.mean()))\n", "print('\\n', 'The maximum in this sample is ', \"{:.2f}\".format(data.max()))\n", "print('\\n', 'The standard deviation in this sample is ', \"{:.2f}\".format(data.std()))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Here we have used the ``mean()`` function of the series to compute its mean. There are many other properties/functions for these series including ``std()``, ``shape``, ``count()``, ``max()``, ``min()``, etc. You can access these by writing ``series.name_of_function_or_property``. To see what functions are available you can hit ``tab`` after writing ``series.``." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## We can transform the data using the `apply` method" ] }, { "cell_type": "code", "execution_count": 61, "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "0 1.598575\n", "1 0.753623\n", "2 0.221118\n", "3 0.321219\n", "4 3.360575\n", "Name: noise, dtype: float64" ] }, "execution_count": 61, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data.apply(np.exp)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Let's create a ``pd.DataFrame`` using these two series." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "## Method 1" ] }, { "cell_type": "code", "execution_count": 62, "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [] }, "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", "
01234
countryColombiaTurkeyUnited StatesGermanyChile
noise0.469112-0.282863-1.509059-1.1356321.212112
\n", "
" ], "text/plain": [ " 0 1 2 3 4\n", "country Colombia Turkey United States Germany Chile\n", "noise 0.469112 -0.282863 -1.509059 -1.135632 1.212112" ] }, "execution_count": 62, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = pd.DataFrame([countries, data])\n", "df" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Not exactly what we'd like, but don't worry, we can just transpose it so it has each country with its data in a row." ] }, { "cell_type": "code", "execution_count": 63, "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [] }, "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", "
countrynoise
0Colombia0.469112
1Turkey-0.282863
2United States-1.509059
3Germany-1.135632
4Chile1.212112
\n", "
" ], "text/plain": [ " country noise\n", "0 Colombia 0.469112\n", "1 Turkey -0.282863\n", "2 United States -1.509059\n", "3 Germany -1.135632\n", "4 Chile 1.212112" ] }, "execution_count": 63, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = df.T\n", "df" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Method 2" ] }, { "cell_type": "code", "execution_count": 64, "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [] }, "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", "
countrynoise
0Colombia0.469112
1Turkey-0.282863
2United States-1.509059
3Germany-1.135632
4Chile1.212112
\n", "
" ], "text/plain": [ " country noise\n", "0 Colombia 0.469112\n", "1 Turkey -0.282863\n", "2 United States -1.509059\n", "3 Germany -1.135632\n", "4 Chile 1.212112" ] }, "execution_count": 64, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = pd.concat([countries, data], axis=1)\n", "df" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "## Method 3" ] }, { "cell_type": "code", "execution_count": 65, "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [] }, "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", "
countrynoise
0Colombia0.469112
1Turkey-0.282863
2United States-1.509059
3Germany-1.135632
4Chile1.212112
\n", "
" ], "text/plain": [ " country noise\n", "0 Colombia 0.469112\n", "1 Turkey -0.282863\n", "2 United States -1.509059\n", "3 Germany -1.135632\n", "4 Chile 1.212112" ] }, "execution_count": 65, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = pd.DataFrame({'country':countries,\n", " 'noise':data})\n", "df" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Adding more variables/rows" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Now let us add some more data to this dataframe. This is done easily by defining a new column. \n", "\n", "Let's create the square of ``noise``, create the sum of ``noise`` and its square, and get the length of the country's name. " ] }, { "cell_type": "code", "execution_count": 66, "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "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", "
countrynoisenoise_sqnoise and its squarename length
0Colombia0.4691120.2200660.6891798
1Turkey-0.2828630.080012-0.2028526
2United States-1.5090592.2772580.76819913
3Germany-1.1356321.2896610.1540297
4Chile1.2121121.4692162.6813285
\n", "
" ], "text/plain": [ " country noise noise_sq noise and its square name length\n", "0 Colombia 0.469112 0.220066 0.689179 8\n", "1 Turkey -0.282863 0.080012 -0.202852 6\n", "2 United States -1.509059 2.277258 0.768199 13\n", "3 Germany -1.135632 1.289661 0.154029 7\n", "4 Chile 1.212112 1.469216 2.681328 5" ] }, "execution_count": 66, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df['noise_sq'] = df.noise**2\n", "df['noise and its square'] = df.noise + df.noise_sq\n", "df['name length'] = df.country.apply(len)\n", "df" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "This shows some of the ways in which you can create new data. \n", "\n", "Especially useful is the ``apply`` method, which applies a function to the series. \n", "\n", "You can also apply a function to the whole dataframe, which is useful if you want to perform computations using various columns.\n", "\n", "Let's see some other ways in which we can interact with dataframes. " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "## First, let's identify some observations, e.g., all countries in the South America." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "## Let's create a list of South American countries" ] }, { "cell_type": "code", "execution_count": 67, "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [] }, "outputs": [], "source": [ "south_america = ['Colombia', 'Chile']" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Let's create a new dummy variable that identifies countries in South America \n", "## using `apply` and our `south_america` list" ] }, { "cell_type": "code", "execution_count": 68, "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "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", "
countrynoisenoise_sqnoise and its squarename lengthSouth America Logical
0Colombia0.4691120.2200660.6891798True
1Turkey-0.2828630.080012-0.2028526False
2United States-1.5090592.2772580.76819913False
3Germany-1.1356321.2896610.1540297False
4Chile1.2121121.4692162.6813285True
\n", "
" ], "text/plain": [ " country noise noise_sq noise and its square name length South America Logical\n", "0 Colombia 0.469112 0.220066 0.689179 8 True\n", "1 Turkey -0.282863 0.080012 -0.202852 6 False\n", "2 United States -1.509059 2.277258 0.768199 13 False\n", "3 Germany -1.135632 1.289661 0.154029 7 False\n", "4 Chile 1.212112 1.469216 2.681328 5 True" ] }, "execution_count": 68, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df['South America Logical'] = df.country.apply(lambda x: x in south_america)\n", "df" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Notice the new column takes on *logical* values, i.e., `True` or `False`" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "## More useful to have numerical values, where `1:True` and `0:False`" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Method 1: Dictionary and `map`" ] }, { "cell_type": "code", "execution_count": 69, "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "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", "
countrynoisenoise_sqnoise and its squarename lengthSouth America LogicalSouth America Dict
0Colombia0.4691120.2200660.6891798True1
1Turkey-0.2828630.080012-0.2028526False0
2United States-1.5090592.2772580.76819913False0
3Germany-1.1356321.2896610.1540297False0
4Chile1.2121121.4692162.6813285True1
\n", "
" ], "text/plain": [ " country noise noise_sq noise and its square name length South America Logical South America Dict\n", "0 Colombia 0.469112 0.220066 0.689179 8 True 1\n", "1 Turkey -0.282863 0.080012 -0.202852 6 False 0\n", "2 United States -1.509059 2.277258 0.768199 13 False 0\n", "3 Germany -1.135632 1.289661 0.154029 7 False 0\n", "4 Chile 1.212112 1.469216 2.681328 5 True 1" ] }, "execution_count": 69, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mydict = {True:1,\n", " False:0}\n", "df['South America Dict'] = df['South America Logical'].map(mydict)\n", "df" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Method 2: Change type" ] }, { "cell_type": "code", "execution_count": 70, "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [] }, "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", "
countrynoisenoise_sqnoise and its squarename lengthSouth America LogicalSouth America DictSouth America
0Colombia0.4691120.2200660.6891798True11
1Turkey-0.2828630.080012-0.2028526False00
2United States-1.5090592.2772580.76819913False00
3Germany-1.1356321.2896610.1540297False00
4Chile1.2121121.4692162.6813285True11
\n", "
" ], "text/plain": [ " country noise noise_sq noise and its square name length South America Logical South America Dict South America\n", "0 Colombia 0.469112 0.220066 0.689179 8 True 1 1\n", "1 Turkey -0.282863 0.080012 -0.202852 6 False 0 0\n", "2 United States -1.509059 2.277258 0.768199 13 False 0 0\n", "3 Germany -1.135632 1.289661 0.154029 7 False 0 0\n", "4 Chile 1.212112 1.469216 2.681328 5 True 1 1" ] }, "execution_count": 70, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df['South America'] = df.country.apply(lambda x: x in south_america).astype(int)\n", "df" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "#
Exercises
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "
\n", "Exercise 0: Create a new folder and notebook called Intro-Data-Analysis-Pandas-Exercises where you will perform all the exercises below. Make sure to copy any code you need from this notebook to that one. You will use that folder to create a new GitHub repo with the code, html, and slides as usual.\n", "
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [] }, "source": [ "
\n", "Exercise 1: Create a new dataframe pop with population data downloaded from Wikipedia. Make sure to clean the data so it can be used further.\n", "
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [] }, "source": [ "
\n", "Exercise 2: Merge the isocodes and pop dataframes.\n", "
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "
\n", "Exercise 3: Merge the dataframes we have created so far to have a unique dataframe that has ISO codes, GDP per capita, and population data.\n", "
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [] }, "source": [ "
\n", "Exercise 4: Use the os package to create folders to export data and figures. \n", "Since you will be using the names of these folders a lot, save their names in variables called path, pathout, and pathgraphs, where path = './data/', pathout = './data/', and pathgraphs = './graphs/'\n", "
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [] }, "source": [ "
\n", " Exercise 5: Save the dataframe created in Exercise 3 as a CSV, XLSX, and Stata file into the pathout folder. Use a variable called filename = 'Wiki_Data' so you can use similar code to save all file types. Notice only the filetype will change.\n", "
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "
\n", "Exercise 6: Create plots showing the relation between GDP per capita and Population. Create all 4 types of possible regression plots and save them as PNG, PDF, and JPG files. Make sure to save them in the folder you created for graphs\n", "
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [] }, "source": [ "
\n", "Exercise 7: Create plots showing the relation between GDP per capita and Population Growth. Create all 4 types of possible regression plots and save them as PNG, PDF, and JPG files. Make sure to save them in the folder you created for graphs\n", "
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [] }, "source": [ "
\n", "Exercise 8: Using the notebook create slides for presenting your work and results. Once you have your slides, create a new public repo, publish it, and make sure to create a READ.ME file that show links to the notebook, html, and slides. Also, create the gh-pages branch to have a working slides webpage.\n", "
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" }, "tags": [] }, "source": [ "Notebook written by [Ömer Özak](http://omerozak.com) for his students and anyone wanting to learn. Feel free to use, distribute, or contribute." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "-" }, "tags": [] }, "source": [ "[
](http://omerozak.com)" ] } ], "metadata": { "celltoolbar": "Slideshow", "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.11.8" }, "nbTranslate": { "displayLangs": [ "*" ], "hotkey": "alt-t", "langInMainMenu": true, "sourceLang": "en", "targetLang": "fr", "useGoogleTranslate": true }, "widgets": { "application/vnd.jupyter.widget-state+json": { "state": {}, "version_major": 2, "version_minor": 0 } } }, "nbformat": 4, "nbformat_minor": 4 }