diff --git a/cheat_sheet/Cheat Sheet.ipynb b/cheat_sheet/Cheat Sheet.ipynb deleted file mode 100644 index 83bc104..0000000 --- a/cheat_sheet/Cheat Sheet.ipynb +++ /dev/null @@ -1,2680 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": { - "raw_mimetype": "-" - }, - "source": [ - "# Pandas Cheat Sheet" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Table of contents\n", - "\n", - "\n", - "- **The setup**: anaconda, Python, pandas, Jupyter\n", - "- **Importing data**: from csv (and options), from the web, creating from scratch, convering types, rename cols\n", - "- **Summarizing data**: len(df), shape, value_counts, head, tail, max(), min(), mean, dtype, info(), describe(), memory_usage(), scatter matrix, corr, isnull, notnull, unique(), nlargest\n", - "- **Selecting and computing**: select subset of row and cols, .loc, .iloc, drop columns, assign, apply/map/applymap, multiindex\n", - "- **Filtering and sorting**: >=, AND, OR, ==, ~, str.contains, str.startswith, sort_values, sort_index, filtering on sorted/unsorted, isin()\n", - "- **Split-apply-combine and pivots**: groupby, dt.month, dt.year, groupby.mean(), agg, stack, unstack, pivot, melt, merge\n", - "- **Time series manipulations**: downsampling, upsampling, rolling, mean, simple plotting\n", - "- **Plotting**: built-in plotting, advanced plotting, matplotlib, seaborn, styles, saving\n", - "- **Modeling and machine learning**: .value, feeding data, saving data\n", - "- **Misc tips and tricks**: pandas options, vectorization, timings with %%timeit, profiling with lprun\n", - "\n", - "**principles:** small examples, no more than 5 rows. one or two data sets, no more." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# The setup" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Python and Anaconda\n", - "\n", - "If you haven't done it, start by installing Python.\n", - "The [Anaconda Distribution](https://www.anaconda.com/download/) is great, install version `3.X`.\n", - "- If you're on Windows, you will get a program called *Anaconda Prompt*. Open in at run `conda --version` to verify that everything works.\n", - "- If you're on Linux, open a terminal and run `conda --version`.\n", - "\n", - "## Pandas, NumPy and matplotlib\n", - "\n", - "To install packages, run `conda install `. The Anaconda distribution comes with the three packages we will require, namely [pandas](https://pandas.pydata.org/), [NumPy](http://www.numpy.org/) and [matplotlib](https://matplotlib.org/).\n", - "\n", - "- **NumPy** implements $n$-dimensional arrays in Python for efficient computations. See the [arXiv](https://arxiv.org/pdf/1102.1523.pdf) paper for a nice introduction. To learn basic NumPy, consider doing these [100 NumPy exercises](https://github.com/rougier/numpy-100).\n", - "- **Matplotlib** is the most popular library for plotting in Python. See the beautiful [gallery](https://matplotlib.org/gallery.html) to get an overview of the capabilities of matplotlib.\n", - "- **Pandas** is a library for data analysis based on two objects, the [Series](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.html) and the [DataFrame](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.html).\n", - "\n", - "## Jupyter\n", - "\n", - "The [Jupyter Notebook](https://jupyter-notebook.readthedocs.io/en/stable/) is an environment in which you can run Python code, display graphs and work with data interactively. Think of it as a tool between the simple terminal and the full fledged IDE. Move to a directory using the `cd` command in the terminal, then run `jupyter notebook` to start up a notebook. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Importing packages" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "import matplotlib\n", - "%matplotlib inline" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "To make this Jupyter Notebook reproducible, here are the versions of the libraries we will be using." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "pandas version 0.22.0\n", - "numpy version 1.14.2\n", - "matplotlib version 2.2.2\n" - ] - } - ], - "source": [ - "for lib in [pd, np, matplotlib]:\n", - " print(f'{lib.__name__.ljust(12)} version {lib.__version__}')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Importing data\n", - "\n", - "Using `!` let's us use terminal commands. The `head` command shows the first rows of the file." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "color,director_name,num_critic_for_reviews,duration,director_facebook_likes,actor_3_facebook_likes,actor_2_name,actor_1_facebook_likes,gross,genres,actor_1_name,movie_title,num_voted_users,cast_total_facebook_likes,actor_3_name,facenumber_in_poster,plot_keywords,movie_imdb_link,num_user_for_reviews,language,country,content_rating,budget,title_year,actor_2_facebook_likes,imdb_score,aspect_ratio,movie_facebook_likes\n", - "Color,James Cameron,723,178,0,855,Joel David Moore,1000,760505847,Action|Adventure|Fantasy|Sci-Fi,CCH Pounder,Avatar ,886204,4834,Wes Studi,0,avatar|future|marine|native|paraplegic,http://www.imdb.com/title/tt0499549/?ref_=fn_tt_tt_1,3054,English,USA,PG-13,237000000,2009,936,7.9,1.78,33000\n" - ] - } - ], - "source": [ - "!head data/movie_metadata.csv -n 2" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "It's a huge file, so we'll only load a couple of columns into a pandas DataFrame.\n", - "To familiarize ourselves with with [magic commands](http://ipython.readthedocs.io/en/stable/interactive/magics.html), we'll use `%%time` to time the execution of the cell below." - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Loaded data of size (5043, 6) into memory.\n", - "CPU times: user 44 ms, sys: 525 µs, total: 44.5 ms\n", - "Wall time: 42.9 ms\n" - ] - } - ], - "source": [ - "%%time\n", - "\n", - "cols_to_use = ['movie_title', 'director_name', 'country', 'content_rating', 'imdb_score', 'gross']\n", - "df = pd.read_csv(r'data/movie_metadata.csv', sep=',', usecols=cols_to_use)\n", - "print(f'Loaded data of size {df.shape} into memory.')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The df.shape gives the rows and columns of the DataFrame. \n", - "This leads us naturally to consider summarizations." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Summarizing data" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "There are three methods that are useful to peek at the data, they are df.head, df.tail and df.sample.\n", - "Head and tail are $\\mathcal{O}(1)$ operations, while sample is $\\mathcal{O}(n)$, where $n$ is the number of rows.\n", - "For small datasets, this makes no difference in practice. We'll use df.sample here." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
director_namegrossmovie_titlecountrycontent_ratingimdb_score
3097Darren Lynn Bousman63270259.0Saw IVUSAR5.9
1999Roman PolanskiNaNCarnageFranceR7.2
\n", - "
" - ], - "text/plain": [ - " director_name gross movie_title country content_rating \\\n", - "3097 Darren Lynn Bousman 63270259.0 Saw IV  USA R \n", - "1999 Roman Polanski NaN Carnage  France R \n", - "\n", - " imdb_score \n", - "3097 5.9 \n", - "1999 7.2 " - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.sample(n=2, replace=False, weights=None, random_state=None)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We should make sure the data types are correct. To do so, we can use df.dtypes, or df.info() for some more information." - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "RangeIndex: 5043 entries, 0 to 5042\n", - "Data columns (total 6 columns):\n", - "director_name 4939 non-null object\n", - "gross 4159 non-null float64\n", - "movie_title 5043 non-null object\n", - "country 5038 non-null object\n", - "content_rating 4740 non-null object\n", - "imdb_score 5043 non-null float64\n", - "dtypes: float64(2), object(4)\n", - "memory usage: 236.5+ KB\n" - ] - } - ], - "source": [ - "df.info(verbose=True, memory_usage=True, null_counts=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We have some null values. Let's count them by chaining df.isnull() and df.sum()." - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "director_name 104\n", - "gross 884\n", - "movie_title 0\n", - "country 5\n", - "content_rating 303\n", - "imdb_score 0\n", - "dtype: int64" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "null_values = df.isnull().sum()\n", - "null_values" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The result of the above is not a DataFrame, but a Series." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "pandas.core.series.Series" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "type(null_values)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can make the output prettier by converting null_values to a DataFrame using to_frame(), then transposing using .T, and finally renaming the first index." - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
director_namegrossmovie_titlecountrycontent_ratingimdb_score
Missing values104884053030
\n", - "
" - ], - "text/plain": [ - " director_name gross movie_title country content_rating \\\n", - "Missing values 104 884 0 5 303 \n", - "\n", - " imdb_score \n", - "Missing values 0 " - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "null_values.to_frame().T.rename(index={0:'Missing values'})" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The above is called method chaining, and can be written like so:" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
director_namegrossmovie_titlecountrycontent_ratingimdb_score
Missing values104884053030
\n", - "
" - ], - "text/plain": [ - " director_name gross movie_title country content_rating \\\n", - "Missing values 104 884 0 5 303 \n", - "\n", - " imdb_score \n", - "Missing values 0 " - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(df\n", - " .isnull() # Figure out whether every entry is null (missing), or not\n", - " .sum(axis=0) # Sum over each column, axis=0 is the default\n", - " .to_frame() # The result is a Series, convert to DataFrame\n", - " .T # Transpose (switch rows and columns)\n", - " .rename(index={0:'Missing values'}) # Rename the index and show it\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "A tour of summarization would not be completed without df.describe().\n", - "Calling df.count(), df.nunique(), df.mean(), df.std(), df.min(), df.quantile(), df.max() is also possible." - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
director_namegrossmovie_titlecountrycontent_ratingimdb_score
count493941595043503847405043
unique239849176518
topSteven SpielbergKing KongUSAR
freq26338072118
mean4.84684e+076.44214
std6.8453e+071.12512
min1621.6
50%2.55175e+076.6
max7.60506e+089.5
\n", - "
" - ], - "text/plain": [ - " director_name gross movie_title country content_rating \\\n", - "count 4939 4159 5043 5038 4740 \n", - "unique 2398 4917 65 18 \n", - "top Steven Spielberg King Kong  USA R \n", - "freq 26 3 3807 2118 \n", - "mean 4.84684e+07 \n", - "std 6.8453e+07 \n", - "min 162 \n", - "50% 2.55175e+07 \n", - "max 7.60506e+08 \n", - "\n", - " imdb_score \n", - "count 5043 \n", - "unique \n", - "top \n", - "freq \n", - "mean 6.44214 \n", - "std 1.12512 \n", - "min 1.6 \n", - "50% 6.6 \n", - "max 9.5 " - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.describe(percentiles=[0.5], include='all').fillna('')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Visualizations" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
grossimdb_score
gross1.0000000.096247
imdb_score0.0962471.000000
\n", - "
" - ], - "text/plain": [ - " gross imdb_score\n", - "gross 1.000000 0.096247\n", - "imdb_score 0.096247 1.000000" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.corr(method='spearman', min_periods=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plot = pd.plotting.scatter_matrix(df, alpha=0.5, figsize=(8,5))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Honorable mentions are len(df)." - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [], - "source": [ - "# len(df), shape, value_counts, head, tail, max(), min(), mean, dtype, info(), \n", - "# describe(), memory_usage(), scatter matrix, corr, isnull, notnull, unique(), nlargest" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Selecting and computing" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [], - "source": [ - "# - **Selecting and computing**: select subset of row and cols, .loc, .iloc, \n", - "# drop columns, assign, apply/map/applymap, multiindex" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
movie_titledirector_namecountrycontent_ratingimdb_score
0AvatarJames CameronUSAPG-137.9
1Pirates of the Caribbean: At World's EndGore VerbinskiUSAPG-137.1
2SpectreSam MendesUKPG-136.8
\n", - "
" - ], - "text/plain": [ - " movie_title director_name country \\\n", - "0 Avatar  James Cameron USA \n", - "1 Pirates of the Caribbean: At World's End  Gore Verbinski USA \n", - "2 Spectre  Sam Mendes UK \n", - "\n", - " content_rating imdb_score \n", - "0 PG-13 7.9 \n", - "1 PG-13 7.1 \n", - "2 PG-13 6.8 " - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "columns = ['movie_title', 'director_name', 'country', 'content_rating', 'imdb_score']\n", - "df[columns].head(3)" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
movie_titledirector_namecountrycontent_ratingimdb_score
100The Fast and the FuriousRob CohenUSAPG-136.7
101The Curious Case of Benjamin ButtonDavid FincherUSAPG-137.8
102X-Men: First ClassMatthew VaughnUSAPG-137.8
\n", - "
" - ], - "text/plain": [ - " movie_title director_name country \\\n", - "100 The Fast and the Furious  Rob Cohen USA \n", - "101 The Curious Case of Benjamin Button  David Fincher USA \n", - "102 X-Men: First Class  Matthew Vaughn USA \n", - "\n", - " content_rating imdb_score \n", - "100 PG-13 6.7 \n", - "101 PG-13 7.8 \n", - "102 PG-13 7.8 " - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.loc[100:102, columns]" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/tommy/anaconda3/lib/python3.6/site-packages/ipykernel_launcher.py:1: FutureWarning: \n", - "Passing list-likes to .loc or [] with any missing label will raise\n", - "KeyError in the future, you can use .reindex() as an alternative.\n", - "\n", - "See the documentation here:\n", - "http://pandas.pydata.org/pandas-docs/stable/indexing.html#deprecate-loc-reindex-listlike\n", - " \"\"\"Entry point for launching an IPython kernel.\n", - "/home/tommy/anaconda3/lib/python3.6/site-packages/pandas/core/indexing.py:1367: FutureWarning: \n", - "Passing list-likes to .loc or [] with any missing label will raise\n", - "KeyError in the future, you can use .reindex() as an alternative.\n", - "\n", - "See the documentation here:\n", - "http://pandas.pydata.org/pandas-docs/stable/indexing.html#deprecate-loc-reindex-listlike\n", - " return self._getitem_tuple(key)\n" - ] - }, - { - "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", - "
movie_titledirector_namecountrycontent_ratingimdb_scoredirector_facebook_likesgross
0AvatarJames CameronUSAPG-137.9NaN760505847.0
1Pirates of the Caribbean: At World's EndGore VerbinskiUSAPG-137.1NaN309404152.0
\n", - "
" - ], - "text/plain": [ - " movie_title director_name country \\\n", - "0 Avatar  James Cameron USA \n", - "1 Pirates of the Caribbean: At World's End  Gore Verbinski USA \n", - "\n", - " content_rating imdb_score director_facebook_likes gross \n", - "0 PG-13 7.9 NaN 760505847.0 \n", - "1 PG-13 7.1 NaN 309404152.0 " - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df_cols = df.loc[:, columns + ['director_facebook_likes', 'gross']]\n", - "df_cols.head(2)" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
movie_titledirector_namecountrycontent_ratingimdb_scoregross
0AvatarJames CameronUSAPG-137.9760505847.0
1Pirates of the Caribbean: At World's EndGore VerbinskiUSAPG-137.1309404152.0
\n", - "
" - ], - "text/plain": [ - " movie_title director_name country \\\n", - "0 Avatar  James Cameron USA \n", - "1 Pirates of the Caribbean: At World's End  Gore Verbinski USA \n", - "\n", - " content_rating imdb_score gross \n", - "0 PG-13 7.9 760505847.0 \n", - "1 PG-13 7.1 309404152.0 " - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df_cols = df_cols.drop(columns=['director_facebook_likes'])\n", - "df_cols.head(2)" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
movie_titledirector_namecountrycontent_ratingimdb_scoregross
2765Towering InfernoJohn BlanchardCanadaNaN9.5NaN
1937The Shawshank RedemptionFrank DarabontUSAR9.328341469.0
3466The GodfatherFrancis Ford CoppolaUSAR9.2134821952.0
\n", - "
" - ], - "text/plain": [ - " movie_title director_name country \\\n", - "2765 Towering Inferno  John Blanchard Canada \n", - "1937 The Shawshank Redemption  Frank Darabont USA \n", - "3466 The Godfather  Francis Ford Coppola USA \n", - "\n", - " content_rating imdb_score gross \n", - "2765 NaN 9.5 NaN \n", - "1937 R 9.3 28341469.0 \n", - "3466 R 9.2 134821952.0 " - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df_cols.nlargest(3, columns=['imdb_score'], keep='first')" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": {}, - "outputs": [], - "source": [ - "df_cols = df_cols.assign(gross_log = lambda df: np.log(df.gross))" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
imdb_scoregrossgross_log
count5,0434,1594,159
mean648,468,40816
std168,452,9902
min21625
50%725,517,50017
max10760,505,84720
\n", - "
" - ], - "text/plain": [ - " imdb_score gross gross_log\n", - "count 5,043 4,159 4,159\n", - "mean 6 48,468,408 16\n", - "std 1 68,452,990 2\n", - "min 2 162 5\n", - "50% 7 25,517,500 17\n", - "max 10 760,505,847 20" - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df_cols.describe(percentiles=[0.5]).applymap(lambda x: '{:,}'.format(round(x)))" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
imdb_scoregrossgross_log
imdb_score1.0000000.1980210.074280
gross0.1980211.0000000.616034
gross_log0.0742800.6160341.000000
\n", - "
" - ], - "text/plain": [ - " imdb_score gross gross_log\n", - "imdb_score 1.000000 0.198021 0.074280\n", - "gross 0.198021 1.000000 0.616034\n", - "gross_log 0.074280 0.616034 1.000000" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df_cols.corr()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Filtering and sorting" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
movie_titledirector_namecountrycontent_ratingimdb_scoregrossgross_log
2SpectreSam MendesUKPG-136.8200074175.019.114199
4Star Wars: Episode VII - The Force Awakens  ...Doug WalkerNaNNaN7.1NaNNaN
9Harry Potter and the Half-Blood PrinceDavid YatesUKPG7.5301956980.019.525795
\n", - "
" - ], - "text/plain": [ - " movie_title director_name country \\\n", - "2 Spectre  Sam Mendes UK \n", - "4 Star Wars: Episode VII - The Force Awakens  ... Doug Walker NaN \n", - "9 Harry Potter and the Half-Blood Prince  David Yates UK \n", - "\n", - " content_rating imdb_score gross gross_log \n", - "2 PG-13 6.8 200074175.0 19.114199 \n", - "4 NaN 7.1 NaN NaN \n", - "9 PG 7.5 301956980.0 19.525795 " - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df_cols[df_cols.country != 'USA'].head(3)" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
movie_titledirector_namecountrycontent_ratingimdb_scoregrossgross_log
4498The Good, the Bad and the UglySergio LeoneItalyApproved8.96100000.015.623799
270The Lord of the Rings: The Fellowship of the R...Peter JacksonNew ZealandPG-138.8313837577.019.564386
4029City of GodFernando MeirellesBrazilR8.77563397.015.838831
\n", - "
" - ], - "text/plain": [ - " movie_title director_name \\\n", - "4498 The Good, the Bad and the Ugly  Sergio Leone \n", - "270 The Lord of the Rings: The Fellowship of the R... Peter Jackson \n", - "4029 City of God  Fernando Meirelles \n", - "\n", - " country content_rating imdb_score gross gross_log \n", - "4498 Italy Approved 8.9 6100000.0 15.623799 \n", - "270 New Zealand PG-13 8.8 313837577.0 19.564386 \n", - "4029 Brazil R 8.7 7563397.0 15.838831 " - ] - }, - "execution_count": 25, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "mask = ((df_cols.imdb_score > 8) & (df_cols.country != 'USA') & (df_cols.gross > 10**6))\n", - "df_cols[mask].nlargest(3, columns=['imdb_score'])" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": {}, - "outputs": [], - "source": [ - "# >=, AND, OR, ==, ~, str.contains, \n", - "# str.startswith, sort_values, sort_index, filtering on sorted/unsorted, isin()" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
movie_titledirector_namecountrycontent_ratingimdb_scoregrossgross_log
2765Towering InfernoJohn BlanchardCanadaNaN9.5NaNNaN
339The Lord of the Rings: The Return of the KingPeter JacksonUSAPG-138.9377019252.019.747807
270The Lord of the Rings: The Fellowship of the R...Peter JacksonNew ZealandPG-138.8313837577.019.564386
340The Lord of the Rings: The Two TowersPeter JacksonUSAPG-138.7340478898.019.645864
1196The Conjuring 2James WanUSAR7.8102310175.018.443520
\n", - "
" - ], - "text/plain": [ - " movie_title director_name \\\n", - "2765 Towering Inferno  John Blanchard \n", - "339 The Lord of the Rings: The Return of the King  Peter Jackson \n", - "270 The Lord of the Rings: The Fellowship of the R... Peter Jackson \n", - "340 The Lord of the Rings: The Two Towers  Peter Jackson \n", - "1196 The Conjuring 2  James Wan \n", - "\n", - " country content_rating imdb_score gross gross_log \n", - "2765 Canada NaN 9.5 NaN NaN \n", - "339 USA PG-13 8.9 377019252.0 19.747807 \n", - "270 New Zealand PG-13 8.8 313837577.0 19.564386 \n", - "340 USA PG-13 8.7 340478898.0 19.645864 \n", - "1196 USA R 7.8 102310175.0 18.443520 " - ] - }, - "execution_count": 27, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df_cols[df_cols.movie_title.str.lower().str.contains(\"ring\")].nlargest(5, columns=['imdb_score'])" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "USA 3807\n", - "UK 448\n", - "France 154\n", - "Canada 126\n", - "Germany 97\n", - "Name: country, dtype: int64" - ] - }, - "execution_count": 28, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.country.value_counts().head(5)" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Afghanistan 1\n", - "Argentina 4\n", - "Aruba 1\n", - "Australia 55\n", - "Bahamas 1\n", - "Name: country, dtype: int64" - ] - }, - "execution_count": 29, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.country.value_counts().sort_index().head(5)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Split-apply-combine and pivots" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- **Split-apply-combine and pivots**: groupby, dt.month, dt.year, groupby.mean(), agg, stack, unstack, pivot, melt, merge" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Directors with the most movies" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
movie_title
director_name
Steven Spielberg26
Woody Allen22
Clint Eastwood20
Martin Scorsese20
Ridley Scott16
\n", - "
" - ], - "text/plain": [ - " movie_title\n", - "director_name \n", - "Steven Spielberg 26\n", - "Woody Allen 22\n", - "Clint Eastwood 20\n", - "Martin Scorsese 20\n", - "Ridley Scott 16" - ] - }, - "execution_count": 30, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(df_cols.groupby(df.director_name).nunique().movie_title.nlargest(5).to_frame())" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
imdb_score
director_name
John Blanchard9.5
Cary Bell8.7
Mitchell Altieri8.7
Sadyk Sher-Niyaz8.7
Charles Chaplin8.6
\n", - "
" - ], - "text/plain": [ - " imdb_score\n", - "director_name \n", - "John Blanchard 9.5\n", - "Cary Bell 8.7\n", - "Mitchell Altieri 8.7\n", - "Sadyk Sher-Niyaz 8.7\n", - "Charles Chaplin 8.6" - ] - }, - "execution_count": 31, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(df_cols.groupby(df.director_name).mean().imdb_score.nlargest(5).to_frame())" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
movie_titledirector_namecountrycontent_ratingimdb_scoregrossgross_log
0AvatarJames CameronUSAPG-137.9760505847.020.449494
1Pirates of the Caribbean: At World's EndGore VerbinskiUSAPG-137.1309404152.019.550159
2SpectreSam MendesUKPG-136.8200074175.019.114199
3The Dark Knight RisesChristopher NolanUSAPG-138.5448130642.019.920595
4Star Wars: Episode VII - The Force Awakens  ...Doug WalkerNaNNaN7.1NaNNaN
\n", - "
" - ], - "text/plain": [ - " movie_title director_name \\\n", - "0 Avatar  James Cameron \n", - "1 Pirates of the Caribbean: At World's End  Gore Verbinski \n", - "2 Spectre  Sam Mendes \n", - "3 The Dark Knight Rises  Christopher Nolan \n", - "4 Star Wars: Episode VII - The Force Awakens  ... Doug Walker \n", - "\n", - " country content_rating imdb_score gross gross_log \n", - "0 USA PG-13 7.9 760505847.0 20.449494 \n", - "1 USA PG-13 7.1 309404152.0 19.550159 \n", - "2 UK PG-13 6.8 200074175.0 19.114199 \n", - "3 USA PG-13 8.5 448130642.0 19.920595 \n", - "4 NaN NaN 7.1 NaN NaN " - ] - }, - "execution_count": 32, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df_cols.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
imdb_scoregross_logmovie_title
director_name
A. Raven Cruz1.90.0000001
Aaron Hann6.00.0000001
Aaron Schneider7.116.0321621
\n", - "
" - ], - "text/plain": [ - " imdb_score gross_log movie_title\n", - "director_name \n", - "A. Raven Cruz 1.9 0.000000 1\n", - "Aaron Hann 6.0 0.000000 1\n", - "Aaron Schneider 7.1 16.032162 1" - ] - }, - "execution_count": 33, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "director_stats = (df_cols.groupby(df.director_name).agg({'imdb_score':np.mean, 'gross_log':np.sum, 'movie_title':'nunique'}))\n", - "\n", - "director_stats.head(3)" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
imdb_scoregross_logmovie_title
director_name
A. Raven Cruz-3.885663-0.737455-0.488133
Aaron Hann-0.213965-0.737455-0.488133
Aaron Schneider0.771125-0.321155-0.488133
\n", - "
" - ], - "text/plain": [ - " imdb_score gross_log movie_title\n", - "director_name \n", - "A. Raven Cruz -3.885663 -0.737455 -0.488133\n", - "Aaron Hann -0.213965 -0.737455 -0.488133\n", - "Aaron Schneider 0.771125 -0.321155 -0.488133" - ] - }, - "execution_count": 34, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "director_stats_norm = ((director_stats - director_stats.mean()) / director_stats.std())\n", - "director_stats_norm.head(3)" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
imdb_scoregross_logmovie_titlescore
director_name
Steven Spielberg1.11211711.41921611.60925424.140587
Woody Allen0.6897127.2995739.67367217.662958
Clint Eastwood0.8830678.0419618.70588117.630909
\n", - "
" - ], - "text/plain": [ - " imdb_score gross_log movie_title score\n", - "director_name \n", - "Steven Spielberg 1.112117 11.419216 11.609254 24.140587\n", - "Woody Allen 0.689712 7.299573 9.673672 17.662958\n", - "Clint Eastwood 0.883067 8.041961 8.705881 17.630909" - ] - }, - "execution_count": 35, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "director_stats_norm.assign(score = lambda df: df.sum(axis = 1)).nlargest(3, 'score')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [] - }, - { - "cell_type": "code", - "execution_count": 36, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/tommy/anaconda3/lib/python3.6/site-packages/pandas/core/indexing.py:858: FutureWarning: \n", - "Passing list-likes to .loc or [] with any missing label will raise\n", - "KeyError in the future, you can use .reindex() as an alternative.\n", - "\n", - "See the documentation here:\n", - "http://pandas.pydata.org/pandas-docs/stable/indexing.html#deprecate-loc-reindex-listlike\n", - " return self._getitem_lowerdim(tup)\n" - ] - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
content_rating
title_year
\n", - "
" - ], - "text/plain": [ - "Empty DataFrame\n", - "Columns: []\n", - "Index: []" - ] - }, - "execution_count": 36, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(df.loc[:, ('title_year', 'content_rating', 'movie_title')]\n", - " .groupby(['title_year', 'content_rating']).nunique().movie_title).unstack(1).fillna(0).tail(5)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Pivot table" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
director_namegrossmovie_titlecountrycontent_ratingimdb_score
0James Cameron760505847.0AvatarUSAPG-137.9
1Gore Verbinski309404152.0Pirates of the Caribbean: At World's EndUSAPG-137.1
2Sam Mendes200074175.0SpectreUKPG-136.8
\n", - "
" - ], - "text/plain": [ - " director_name gross movie_title \\\n", - "0 James Cameron 760505847.0 Avatar  \n", - "1 Gore Verbinski 309404152.0 Pirates of the Caribbean: At World's End  \n", - "2 Sam Mendes 200074175.0 Spectre  \n", - "\n", - " country content_rating imdb_score \n", - "0 USA PG-13 7.9 \n", - "1 USA PG-13 7.1 \n", - "2 UK PG-13 6.8 " - ] - }, - "execution_count": 37, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.head(3)" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "metadata": {}, - "outputs": [ - { - "ename": "KeyError", - "evalue": "'title_year'", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0mindex\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'title_year'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0mcolumns\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'content_rating'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 6\u001b[0;31m aggfunc=pd.DataFrame.nunique)\n\u001b[0m\u001b[1;32m 7\u001b[0m \u001b[0;34m.\u001b[0m\u001b[0mfillna\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 8\u001b[0m .tail(5))\n", - "\u001b[0;32m~/anaconda3/lib/python3.6/site-packages/pandas/core/frame.py\u001b[0m in \u001b[0;36mpivot_table\u001b[0;34m(self, values, index, columns, aggfunc, fill_value, margins, dropna, margins_name)\u001b[0m\n\u001b[1;32m 4466\u001b[0m \u001b[0maggfunc\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0maggfunc\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfill_value\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mfill_value\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4467\u001b[0m \u001b[0mmargins\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mmargins\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdropna\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mdropna\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 4468\u001b[0;31m margins_name=margins_name)\n\u001b[0m\u001b[1;32m 4469\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4470\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mstack\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlevel\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdropna\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/anaconda3/lib/python3.6/site-packages/pandas/core/reshape/pivot.py\u001b[0m in \u001b[0;36mpivot_table\u001b[0;34m(data, values, index, columns, aggfunc, fill_value, margins, dropna, margins_name)\u001b[0m\n\u001b[1;32m 79\u001b[0m \u001b[0mvalues\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mlist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvalues\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 80\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 81\u001b[0;31m \u001b[0mgrouped\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdata\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgroupby\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkeys\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 82\u001b[0m \u001b[0magged\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgrouped\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0magg\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0maggfunc\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 83\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/anaconda3/lib/python3.6/site-packages/pandas/core/generic.py\u001b[0m in \u001b[0;36mgroupby\u001b[0;34m(self, by, axis, level, as_index, sort, group_keys, squeeze, **kwargs)\u001b[0m\n\u001b[1;32m 5160\u001b[0m return groupby(self, by=by, axis=axis, level=level, as_index=as_index,\n\u001b[1;32m 5161\u001b[0m \u001b[0msort\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0msort\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mgroup_keys\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mgroup_keys\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msqueeze\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0msqueeze\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 5162\u001b[0;31m **kwargs)\n\u001b[0m\u001b[1;32m 5163\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5164\u001b[0m def asfreq(self, freq, method=None, how=None, normalize=False,\n", - "\u001b[0;32m~/anaconda3/lib/python3.6/site-packages/pandas/core/groupby.py\u001b[0m in \u001b[0;36mgroupby\u001b[0;34m(obj, by, **kwds)\u001b[0m\n\u001b[1;32m 1846\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0mTypeError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'invalid type: %s'\u001b[0m \u001b[0;34m%\u001b[0m \u001b[0mtype\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1847\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1848\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mklass\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mby\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwds\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1849\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1850\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/anaconda3/lib/python3.6/site-packages/pandas/core/groupby.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, obj, keys, axis, level, grouper, exclusions, selection, as_index, sort, group_keys, squeeze, **kwargs)\u001b[0m\n\u001b[1;32m 514\u001b[0m \u001b[0mlevel\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mlevel\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 515\u001b[0m \u001b[0msort\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0msort\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 516\u001b[0;31m mutated=self.mutated)\n\u001b[0m\u001b[1;32m 517\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 518\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mobj\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mobj\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/anaconda3/lib/python3.6/site-packages/pandas/core/groupby.py\u001b[0m in \u001b[0;36m_get_grouper\u001b[0;34m(obj, key, axis, level, sort, mutated, validate)\u001b[0m\n\u001b[1;32m 2932\u001b[0m \u001b[0min_axis\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlevel\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mgpr\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mgpr\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2933\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2934\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mgpr\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2935\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mgpr\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mGrouper\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mgpr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mkey\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2936\u001b[0m \u001b[0;31m# Add key to exclusions\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mKeyError\u001b[0m: 'title_year'" - ] - } - ], - "source": [ - "(df\n", - " .pivot_table(\n", - " values='movie_title', \n", - " index='title_year', \n", - " columns='content_rating', \n", - " aggfunc=pd.DataFrame.nunique)\n", - ".fillna(0)\n", - ".tail(5))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "values : column to aggregate, optional\n", - "\n", - "index : column, Grouper, array, or list of the previous\n", - "\n", - " If an array is passed, it must be the same length as the data. The list can contain any of the other types (except list). Keys to group by on the pivot table index. If an array is passed, it is being used as the same manner as column values.\n", - "\n", - "columns : column, Grouper, array, or list of the previous\n", - "\n", - " If an array is passed, it must be the same length as the data. The list can contain any of the other types (except list). Keys to group by on the pivot table column. If an array is passed, it is being used as the same manner as column values.\n", - "\n", - "aggfunc : function or list of functions, default numpy.mean\n", - "\n", - " If list of functions passed, the resulting pivot table will have hierarchical columns whose top level are the function names (inferred from the function objects themselves)\n", - "\n", - "fill_value : scalar, default None\n", - "\n", - " Value to replace missing values with\n", - "\n", - "margins : boolean, default False\n", - "\n", - " Add all row / columns (e.g. for subtotal / grand totals)\n", - "\n", - "dropna : boolean, default True\n", - "\n", - " Do not include columns whose entries are all NaN\n", - "\n", - "margins_name : string, default ‘All’\n", - "\n", - " Name of the row / column that will contain the totals when margins is True.\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Plotting" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "to_plot = df.groupby(df.title_year).agg({df.duration.name:{'m':np.mean, 'sdf':np.std}})\n", - "\n", - "to_plot.columns = to_plot.columns.droplevel()\n", - "\n", - "#to_plot = to_plot.assign(low = lambda df: df.mean - df.std)\n", - "\n", - "to_plot.plot()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# https://www.kaggle.com/zynicide/wine-reviews" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.4" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/tutorial/Tutorial.ipynb b/tutorial/Tutorial.ipynb new file mode 100644 index 0000000..560d697 --- /dev/null +++ b/tutorial/Tutorial.ipynb @@ -0,0 +1,7627 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "raw_mimetype": "-" + }, + "source": [ + "# Pandas for Data Analysis in Python" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Table of contents\n", + "\n", + "\n", + "- **The setup**: anaconda, Python, pandas, Jupyter\n", + "- **Importing data**: from csv (and options), from the web, creating from scratch, convering types, rename cols\n", + "- **Summarizing data**: len(df), shape, value_counts, head, tail, max(), min(), mean, dtype, info(), describe(), memory_usage(), scatter matrix, corr, isnull, notnull, unique(), nlargest\n", + "- **Selecting and computing**: select subset of row and cols, .loc, .iloc, drop columns, assign, apply/map/applymap, multiindex\n", + "- **Filtering and sorting**: >=, AND, OR, ==, ~, str.contains, str.startswith, sort_values, sort_index, filtering on sorted/unsorted, isin()\n", + "- **Split-apply-combine and pivots**: groupby, dt.month, dt.year, groupby.mean(), agg, stack, unstack, pivot, melt, merge\n", + "- **Time series manipulations**: downsampling, upsampling, rolling, mean, simple plotting\n", + "- **Plotting**: built-in plotting, advanced plotting, matplotlib, seaborn, styles, saving\n", + "- **Modeling and machine learning**: .value, feeding data, saving data\n", + "- **Misc tips and tricks**: pandas options, vectorization, timings with %%timeit, profiling with lprun\n", + "\n", + "**principles:** small examples, no more than 5 rows. one or two data sets, no more.\n", + "\n", + "\n", + "- (1) Setup\n", + " - Installation, packages, Jupyter Notebooks\n", + "- (2) Importing data\n", + " - (2.1) Importing .csv files\n", + " - (2.2) Other ways of creating DataFrames\n", + " - (2.3) Changing names and data types\n", + "- (3) Summarizing data\n", + " - (3.1) Peeking at the data\n", + " - (3.2) Null values and summary statistics\n", + " - (3.3) Unique values, value counts and sorting\n", + " - (3.4) Basic visualizations\n", + "- (4) Selecting and computing new columns\n", + " - (4.1) Accessing rows, columns and data\n", + " - (4.2) Selecting subsets of columns\n", + " - (4.3) Selecting subsets of rows\n", + " - (4.4) Selecting subsets of rows *and* columns\n", + " - (4.5) Creating new columns\n", + " - (4.6) Applying functions\n", + "- (5) Filtering and sorting\n", + " - (5.1) Equality, non-equality and logical operators\n", + " - (5.2) Group membership and string filtering\n", + "- (6) Split-apply-combine and pivots\n", + " - (6.1) The groupby operation\n", + " - (6.2) Several groups and aggregations\n", + " - (6.3) Unstacking and stacking" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---------------------------------" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# (1) Setup" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Python and Anaconda\n", + "\n", + "If you haven't done it yet, start by installing Python.\n", + "The [Anaconda Distribution](https://www.anaconda.com/download/) is great, install version `3.X`.\n", + "- If you're on Windows, you will get a program called *Anaconda Prompt*. Open in at run `conda --version` to verify that everything works.\n", + "- If you're on Linux, open a terminal and run `conda --version`.\n", + "\n", + "## Pandas, NumPy and matplotlib\n", + "\n", + "![](https://indranilsinharoy.files.wordpress.com/2013/01/scientificpythonecosystemsi.png?w=584&h=442)\n", + "\n", + "*Image source: https://indranilsinharoy.com/2013/01/06/python-for-scientific-computing-a-collection-of-resources/*\n", + "\n", + "To install packages, run `conda install `. To upgrade, run `conda update --all` \n", + "The Anaconda distribution comes with the three packages we will require, namely [pandas](https://pandas.pydata.org/), [NumPy](http://www.numpy.org/) and [matplotlib](https://matplotlib.org/).\n", + "\n", + "- **NumPy** implements $n$-dimensional arrays in Python for efficient computations. See the [arXiv](https://arxiv.org/pdf/1102.1523.pdf) paper for a nice introduction. To learn basic NumPy, consider doing these [100 NumPy exercises](https://github.com/rougier/numpy-100).\n", + "- **Matplotlib** is the most popular library for plotting in Python. See the beautiful [gallery](https://matplotlib.org/gallery.html) to get an overview of the capabilities of matplotlib.\n", + "- **Pandas** is a library for data analysis based on two objects, the [Series](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.html) and the [DataFrame](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.html).\n", + "\n", + "## Jupyter\n", + "\n", + "The [Jupyter Notebook](https://jupyter-notebook.readthedocs.io/en/stable/) is an environment in which you can run Python code, display graphs and work with data interactively. Think of it as a tool between a simple terminal and a full fledged IDE. Move to a directory using the `cd` command in the terminal, then run `jupyter notebook` to start up a notebook. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Importing packages" + ] + }, + { + "cell_type": "code", + "execution_count": 433, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To make this Jupyter Notebook more easily reproducible, we list versions of the libraries we will be using." + ] + }, + { + "cell_type": "code", + "execution_count": 435, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Today is 2018-12-14 15:51:54.076989\n", + "----------------------------------------------------------------\n", + "pandas version 0.23.4\n", + "numpy version 1.15.3\n", + "matplotlib version 2.2.3\n" + ] + } + ], + "source": [ + "import datetime\n", + "\n", + "print('Today is', datetime.datetime.utcnow())\n", + "print('-'*2**6)\n", + "\n", + "for lib in [pd, np, matplotlib]:\n", + " print(f'{lib.__name__.ljust(12)} version {lib.__version__}')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Using Jupyter Notebooks**:\n", + "\n", + "- Useful shortcuts.\n", + "- Executing terminal commands from within the notebook.\n", + "- Timing cells.\n", + "- Using markdown.\n", + "- Pitfalls when using notebooks: state, order of execution, tidyness." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# (2) Importing data\n", + "\n", + "Using `!` let's us use terminal commands. The `head` command shows the first rows of the file. **This is a Unix-only command.**" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## (2.1) Importing `.csv` files" + ] + }, + { + "cell_type": "code", + "execution_count": 439, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "movie_metadata.csv wine_data.csv world_population_history.csv\r\n" + ] + } + ], + "source": [ + "!ls data/" + ] + }, + { + "cell_type": "code", + "execution_count": 440, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "color,director_name,num_critic_for_reviews,duration,director_facebook_likes,actor_3_facebook_likes,actor_2_name,actor_1_facebook_likes,gross,genres,actor_1_name,movie_title,num_voted_users,cast_total_facebook_likes,actor_3_name,facenumber_in_poster,plot_keywords,movie_imdb_link,num_user_for_reviews,language,country,content_rating,budget,title_year,actor_2_facebook_likes,imdb_score,aspect_ratio,movie_facebook_likes\r", + "\r\n", + "Color,James Cameron,723,178,0,855,Joel David Moore,1000,760505847,Action|Adventure|Fantasy|Sci-Fi,CCH Pounder,Avatar ,886204,4834,Wes Studi,0,avatar|future|marine|native|paraplegic,http://www.imdb.com/title/tt0499549/?ref_=fn_tt_tt_1,3054,English,USA,PG-13,237000000,2009,936,7.9,1.78,33000\r", + "\r\n" + ] + } + ], + "source": [ + "!head data/movie_metadata.csv -n 2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The file has many columns, so we'll only load a couple of columns into a pandas DataFrame.\n", + "To familiarize ourselves with with [magic commands](http://ipython.readthedocs.io/en/stable/interactive/magics.html), we'll use `%%time` to time the execution of the cell below." + ] + }, + { + "cell_type": "code", + "execution_count": 442, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Loaded data of size (5043, 6) into memory.\n", + "CPU times: user 18.8 ms, sys: 0 ns, total: 18.8 ms\n", + "Wall time: 17.7 ms\n" + ] + } + ], + "source": [ + "%%time\n", + "\n", + "cols_to_use = ['movie_title', 'director_name', 'country', 'content_rating', 'imdb_score', 'gross']\n", + "df = pd.read_csv(r'data/movie_metadata.csv', sep=',', usecols=cols_to_use)\n", + "print(f'Loaded data of size {df.shape} into memory.')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The df.shape gives the rows and columns of the DataFrame. \n", + "This leads us naturally to consider summarizations." + ] + }, + { + "cell_type": "code", + "execution_count": 443, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(5043, 6)" + ] + }, + "execution_count": 443, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.shape # Alternatively, use len(df) for row count" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## (2.2) Other ways of creating DataFrames\n", + "\n", + "**Creating a DataFrame from scratch**" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
nameage
0Max31
1Mark25
2Mia38
\n", + "
" + ], + "text/plain": [ + " name age\n", + "0 Max 31\n", + "1 Mark 25\n", + "2 Mia 38" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.DataFrame({'name':['Max', 'Mark', 'Mia'], 'age':[31, 25, 38]})" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Reading a table form the web**" + ] + }, + { + "cell_type": "code", + "execution_count": 445, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
World rankingNameCitizenshipNet worth (USD)Sources of wealth
021Georg SchaefflerGermany26.9 billionSchaeffler Group
137Beate Heister (b. Albrecht) & Karl Albrecht Jr.Germany21.3 billionAldi Süd
246Dieter SchwarzGermany19.4 billionSchwarz Gruppe
349Theo Albrecht Jr.Germany19 billionAldi Nord and Trader Joe's
450Michael OttoGermany18.1 billionOtto Group
\n", + "
" + ], + "text/plain": [ + " World ranking Name Citizenship \\\n", + "0 21 Georg Schaeffler Germany \n", + "1 37 Beate Heister (b. Albrecht) & Karl Albrecht Jr. Germany \n", + "2 46 Dieter Schwarz Germany \n", + "3 49 Theo Albrecht Jr. Germany \n", + "4 50 Michael Otto Germany \n", + "\n", + " Net worth (USD) Sources of wealth \n", + "0 26.9 billion Schaeffler Group \n", + "1 21.3 billion Aldi Süd \n", + "2 19.4 billion Schwarz Gruppe \n", + "3 19 billion Aldi Nord and Trader Joe's \n", + "4 18.1 billion Otto Group " + ] + }, + "execution_count": 445, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Read HTML tables into a list of DataFrame objects.\n", + "tables = pd.read_html(r'https://en.wikipedia.org/wiki/List_of_Germans_by_net_worth', header=0)\n", + "\n", + "df_net_worth = tables[0]\n", + "df_net_worth.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Reading from databases is also possible.**\n", + "\n", + "Reading from Microsoft SQL using `pyodbc` and `pd.read_sql(sql_code, connection)` is neat." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---------\n", + "\n", + "**Gotcha.** Methods on DataFrames return a new instance by default. In other words, they behave like methods on *immutable* Python object, and not like methods on *mutable* objects." + ] + }, + { + "cell_type": "code", + "execution_count": 449, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1, 2, 4, 6, 9]\n", + "Tommy\n" + ] + } + ], + "source": [ + "# Lists are MUTABLE\n", + "scores = [6, 2, 4, 9, 1]\n", + "scores.sort() # Changes the object in-place, returns None\n", + "print(scores)\n", + "\n", + "# Strings are IMMUTABLE\n", + "my_name = 'tommy'\n", + "my_name = my_name.capitalize() # A new instance is returned\n", + "print(my_name)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## (2.3) Changing names and data types" + ] + }, + { + "cell_type": "code", + "execution_count": 450, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Director_nameGrossMovie_titleCountryContent_ratingImdb_score
0James Cameron760505847.0AvatarUSAPG-137.9
1Gore Verbinski309404152.0Pirates of the Caribbean: At World's EndUSAPG-137.1
\n", + "
" + ], + "text/plain": [ + " Director_name Gross Movie_title \\\n", + "0 James Cameron 760505847.0 Avatar  \n", + "1 Gore Verbinski 309404152.0 Pirates of the Caribbean: At World's End  \n", + "\n", + " Country Content_rating Imdb_score \n", + "0 USA PG-13 7.9 \n", + "1 USA PG-13 7.1 " + ] + }, + "execution_count": 450, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_net_worth = (df_net_worth\n", + " .rename(columns={'Net worth (USD)': 'net_worth',\n", + " 'World ranking': 'world_ranking',\n", + " 'Sources of wealth': 'wealth_source'}))\n", + "\n", + "\n", + "df.rename(columns=str.capitalize).head(2)" + ] + }, + { + "cell_type": "code", + "execution_count": 451, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
world_rankingNameCitizenshipnet_worthwealth_sourcenet_worth_num
021Georg SchaefflerGermany26.9 billionSchaeffler Group26.9
137Beate Heister (b. Albrecht) & Karl Albrecht Jr.Germany21.3 billionAldi Süd21.3
\n", + "
" + ], + "text/plain": [ + " world_ranking Name Citizenship \\\n", + "0 21 Georg Schaeffler Germany \n", + "1 37 Beate Heister (b. Albrecht) & Karl Albrecht Jr. Germany \n", + "\n", + " net_worth wealth_source net_worth_num \n", + "0 26.9 billion Schaeffler Group 26.9 \n", + "1 21.3 billion Aldi Süd 21.3 " + ] + }, + "execution_count": 451, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_net_worth['net_worth_num'] = (df_net_worth['net_worth']\n", + " .str\n", + " .replace(' billion', '')\n", + " .apply(float))\n", + "\n", + "df_net_worth.head(2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# (3) Summarizing data\n", + "\n", + "This section summarizes some important functions, and shows how to summarize data." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## (3.1) Peeking at the data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Three methods that are useful when peeking at the data are `df.head`, `df.tail` and `df.sample`.\n", + "Head and tail are $\\mathcal{O}(1)$ operations, while sample is $\\mathcal{O}(n)$, where $n$ is the number of rows.\n", + "For small datasets, this makes no difference in practice. We'll use `df.sample` here." + ] + }, + { + "cell_type": "code", + "execution_count": 456, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
director_namegrossmovie_titlecountrycontent_ratingimdb_score
0James Cameron760505847.0AvatarUSAPG-137.9
1Gore Verbinski309404152.0Pirates of the Caribbean: At World's EndUSAPG-137.1
\n", + "
" + ], + "text/plain": [ + " director_name gross movie_title \\\n", + "0 James Cameron 760505847.0 Avatar  \n", + "1 Gore Verbinski 309404152.0 Pirates of the Caribbean: At World's End  \n", + "\n", + " country content_rating imdb_score \n", + "0 USA PG-13 7.9 \n", + "1 USA PG-13 7.1 " + ] + }, + "execution_count": 456, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.head(n=2) # df.tail(n=2) returns the last rows" + ] + }, + { + "cell_type": "code", + "execution_count": 457, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
director_namegrossmovie_titlecountrycontent_ratingimdb_score
3922Steven Shainberg4046737.0SecretaryUSAR7.1
569Judd Apatow51814190.0Funny PeopleUSAR6.4
\n", + "
" + ], + "text/plain": [ + " director_name gross movie_title country content_rating \\\n", + "3922 Steven Shainberg 4046737.0 Secretary  USA R \n", + "569 Judd Apatow 51814190.0 Funny People  USA R \n", + "\n", + " imdb_score \n", + "3922 7.1 \n", + "569 6.4 " + ] + }, + "execution_count": 457, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.sample(n=2, replace=False, weights=None, random_state=None)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## (3.2) Null values and summary statistics" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We should make sure the data types are correct. To do so, we can use `df.dtypes`, or `df.info()` for some more information." + ] + }, + { + "cell_type": "code", + "execution_count": 458, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "RangeIndex: 5043 entries, 0 to 5042\n", + "Data columns (total 6 columns):\n", + "director_name 4939 non-null object\n", + "gross 4159 non-null float64\n", + "movie_title 5043 non-null object\n", + "country 5038 non-null object\n", + "content_rating 4740 non-null object\n", + "imdb_score 5043 non-null float64\n", + "dtypes: float64(2), object(4)\n", + "memory usage: 236.5+ KB\n" + ] + } + ], + "source": [ + "df.info(verbose=True, memory_usage=True, null_counts=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We have some null values. Let's count them by chaining `df.isnull()` and `df.sum()`." + ] + }, + { + "cell_type": "code", + "execution_count": 459, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "director_name 104\n", + "gross 884\n", + "movie_title 0\n", + "country 5\n", + "content_rating 303\n", + "imdb_score 0\n", + "dtype: int64" + ] + }, + "execution_count": 459, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "null_values = df.isnull().sum()\n", + "null_values" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result of the above is not a DataFrame, but a Series." + ] + }, + { + "cell_type": "code", + "execution_count": 460, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "pandas.core.series.Series" + ] + }, + "execution_count": 460, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(null_values)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![alt text](https://www.mathsisfun.com/algebra/images/scalar-vector-matrix.svg)\n", + "*Image source:* https://www.mathsisfun.com/algebra/scalar-vector-matrix.html\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can make the output prettier by converting null_values to a DataFrame using the `to_frame()` method, then transposing using `.T`, and finally renaming the first index." + ] + }, + { + "cell_type": "code", + "execution_count": 461, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
director_namegrossmovie_titlecountrycontent_ratingimdb_score
Missing values104884053030
\n", + "
" + ], + "text/plain": [ + " director_name gross movie_title country content_rating \\\n", + "Missing values 104 884 0 5 303 \n", + "\n", + " imdb_score \n", + "Missing values 0 " + ] + }, + "execution_count": 461, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "null_values.to_frame().T.rename(index={0:'Missing values'})" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The above is called method chaining, and can be written like so:" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
director_namegrossmovie_titlecountrycontent_ratingimdb_score
Missing values104884053030
\n", + "
" + ], + "text/plain": [ + " director_name gross movie_title country content_rating \\\n", + "Missing values 104 884 0 5 303 \n", + "\n", + " imdb_score \n", + "Missing values 0 " + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(df\n", + " .isnull() # Figure out whether every entry is null (missing), or not\n", + " .sum(axis=0) # Sum over each column, axis=0 is the default\n", + " .to_frame() # The result is a Series, convert to DataFrame\n", + " .T # Transpose (switch rows and columns)\n", + " .rename(index={0:'Missing values'}) # Rename the index and show it\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A tour of summarization would not be complete without `df.describe()`.\n", + "Calling `df.count()`, `df.nunique()`, `df.mean()`, `df.std()`, `df.min()`, `df.quantile()`, `df.max()` is also possible." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
director_namegrossmovie_titlecountrycontent_ratingimdb_score
count493941595043503847405043
unique239849176518
topSteven SpielbergKing KongUSAR
freq26338072118
mean4.84684e+076.44214
std6.8453e+071.12512
min1621.6
50%2.55175e+076.6
max7.60506e+089.5
\n", + "
" + ], + "text/plain": [ + " director_name gross movie_title country content_rating \\\n", + "count 4939 4159 5043 5038 4740 \n", + "unique 2398 4917 65 18 \n", + "top Steven Spielberg King Kong  USA R \n", + "freq 26 3 3807 2118 \n", + "mean 4.84684e+07 \n", + "std 6.8453e+07 \n", + "min 162 \n", + "50% 2.55175e+07 \n", + "max 7.60506e+08 \n", + "\n", + " imdb_score \n", + "count 5043 \n", + "unique \n", + "top \n", + "freq \n", + "mean 6.44214 \n", + "std 1.12512 \n", + "min 1.6 \n", + "50% 6.6 \n", + "max 9.5 " + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.describe(percentiles=[0.5], include='all').fillna('')" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(4092, 6)" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.dropna(axis=0, how='any').shape" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## (3.3) Unique values, value counts and sorting" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['PG-13', nan, 'PG', 'G', 'R', 'TV-14', 'TV-PG', 'TV-MA', 'TV-G',\n", + " 'Not Rated', 'Unrated', 'Approved', 'TV-Y', 'NC-17', 'X', 'TV-Y7',\n", + " 'GP', 'Passed', 'M'], dtype=object)" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.content_rating.unique() # Not the same as: df.content_rating.is_unique" + ] + }, + { + "cell_type": "code", + "execution_count": 468, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['PG-13', nan, 'PG', 'G', 'R', 'TV-14', 'TV-PG', 'TV-MA', 'TV-G', 'Not Rated', 'Unrated', 'Approved', 'TV-Y', 'NC-17', 'X', 'TV-Y7', 'GP', 'Passed', 'M']\n" + ] + } + ], + "source": [ + "print(df.content_rating.drop_duplicates().tolist())" + ] + }, + { + "cell_type": "code", + "execution_count": 469, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "R 2118\n", + "PG-13 1461\n", + "PG 701\n", + "Not Rated 116\n", + "G 112\n", + "Unrated 62\n", + "Approved 55\n", + "TV-14 30\n", + "TV-MA 20\n", + "TV-PG 13\n", + "X 13\n", + "TV-G 10\n", + "Passed 9\n", + "NC-17 7\n", + "GP 6\n", + "M 5\n", + "TV-Y 1\n", + "TV-Y7 1\n", + "Name: content_rating, dtype: int64" + ] + }, + "execution_count": 469, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.content_rating.value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 471, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
movie_titlegross
0Avatar760505847.0
26Titanic658672302.0
29Jurassic World652177271.0
\n", + "
" + ], + "text/plain": [ + " movie_title gross\n", + "0 Avatar  760505847.0\n", + "26 Titanic  658672302.0\n", + "29 Jurassic World  652177271.0" + ] + }, + "execution_count": 471, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[['movie_title', 'gross']].nlargest(3, 'gross')" + ] + }, + { + "cell_type": "code", + "execution_count": 473, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
director_namegrossmovie_titlecountrycontent_ratingimdb_score
4735Siddiq Barmak1127331.0OsamaAfghanistanPG-137.4
4000Juan José Campanella20167424.0The Secret in Their EyesArgentinaR8.2
4415Fabián Bielinsky1221261.0Nine QueensArgentinaR7.9
4666Jorge GaggeroNaNLive-In MaidArgentinaUnrated7.2
4450Lucrecia Martel304124.0The Holy GirlArgentinaR6.7
\n", + "
" + ], + "text/plain": [ + " director_name gross movie_title \\\n", + "4735 Siddiq Barmak 1127331.0 Osama  \n", + "4000 Juan José Campanella 20167424.0 The Secret in Their Eyes  \n", + "4415 Fabián Bielinsky 1221261.0 Nine Queens  \n", + "4666 Jorge Gaggero NaN Live-In Maid  \n", + "4450 Lucrecia Martel 304124.0 The Holy Girl  \n", + "\n", + " country content_rating imdb_score \n", + "4735 Afghanistan PG-13 7.4 \n", + "4000 Argentina R 8.2 \n", + "4415 Argentina R 7.9 \n", + "4666 Argentina Unrated 7.2 \n", + "4450 Argentina R 6.7 " + ] + }, + "execution_count": 473, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Sort by country, then by IMDB_score. Put NA values last\n", + "df.sort_values(by=['country', 'imdb_score'], \n", + " ascending=[True, False], \n", + " na_position='last').head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## (3.4) Basic visualizations\n", + "\n", + "Some quick visualizations." + ] + }, + { + "cell_type": "code", + "execution_count": 474, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
grossimdb_score
gross1.0000000.198021
imdb_score0.1980211.000000
\n", + "
" + ], + "text/plain": [ + " gross imdb_score\n", + "gross 1.000000 0.198021\n", + "imdb_score 0.198021 1.000000" + ] + }, + "execution_count": 474, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.corr(method='pearson')" + ] + }, + { + "cell_type": "code", + "execution_count": 475, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "df.imdb_score.plot.kde(bw_method=0.09, grid=True, title='IMDB score', lw=3);" + ] + }, + { + "cell_type": "code", + "execution_count": 476, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plot = pd.plotting.scatter_matrix(df, alpha=0.5, figsize=(8,5))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# (4) Selecting and computing new columns\n", + "\n", + "This section is about selecting subsets of a datset, or creating new data from existing data, i.e.:\n", + "\n", + "- Selecting a single column, or a subset of columns\n", + "- Selecting a subset of rows, i.e. filtering\n", + "- Chaining the above operations to do both\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## (4.1) Accessing rows, columns and data" + ] + }, + { + "cell_type": "code", + "execution_count": 486, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['director_name', 'gross', 'movie_title', 'country', 'content_rating',\n", + " 'imdb_score'],\n", + " dtype='object')" + ] + }, + "execution_count": 486, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.columns" + ] + }, + { + "cell_type": "code", + "execution_count": 487, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "RangeIndex(start=0, stop=5043, step=1)" + ] + }, + "execution_count": 487, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.index" + ] + }, + { + "cell_type": "code", + "execution_count": 488, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([['James Cameron', 760505847.0, 'Avatar\\xa0', 'USA', 'PG-13', 7.9],\n", + " ['Gore Verbinski', 309404152.0,\n", + " \"Pirates of the Caribbean: At World's End\\xa0\", 'USA', 'PG-13',\n", + " 7.1],\n", + " ['Sam Mendes', 200074175.0, 'Spectre\\xa0', 'UK', 'PG-13', 6.8],\n", + " ...,\n", + " ['Benjamin Roberds', nan, 'A Plague So Pleasant\\xa0', 'USA', nan,\n", + " 6.3],\n", + " ['Daniel Hsia', 10443.0, 'Shanghai Calling\\xa0', 'USA', 'PG-13',\n", + " 6.3],\n", + " ['Jon Gunn', 85222.0, 'My Date with Drew\\xa0', 'USA', 'PG', 6.6]],\n", + " dtype=object)" + ] + }, + "execution_count": 488, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# This is very useful when piping data to other libraries\n", + "df.values" + ] + }, + { + "cell_type": "code", + "execution_count": 489, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([7.60505847e+08, 3.09404152e+08, 2.00074175e+08, ...,\n", + " 4.58400000e+03, 1.04430000e+04, 8.52220000e+04])" + ] + }, + "execution_count": 489, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.gross.dropna().values" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## (4.2) Selecting subsets of columns" + ] + }, + { + "cell_type": "code", + "execution_count": 491, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['director_name', 'gross', 'movie_title', 'country', 'content_rating', 'imdb_score']\n" + ] + } + ], + "source": [ + "print(df.columns.tolist()) # Get the columns" + ] + }, + { + "cell_type": "code", + "execution_count": 492, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0 James Cameron\n", + "1 Gore Verbinski\n", + "2 Sam Mendes\n", + "Name: director_name, dtype: object" + ] + }, + "execution_count": 492, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.director_name.head(3) # Alternatively, use df['director_name'].head(3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Select two columns." + ] + }, + { + "cell_type": "code", + "execution_count": 493, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
movie_titlecountry
0AvatarUSA
1Pirates of the Caribbean: At World's EndUSA
\n", + "
" + ], + "text/plain": [ + " movie_title country\n", + "0 Avatar  USA\n", + "1 Pirates of the Caribbean: At World's End  USA" + ] + }, + "execution_count": 493, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[['movie_title', 'country']].head(2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The most useful selection function is `df.loc[[row1, row2, ...], [col1, col2, ...]]`.\n", + "\n", + "- `df.loc[:, [col1, col2]]` selects every row, and columns `[col1, col2]`\n", + "- `df.loc[[row1, row2], :]` selects rows `[row1, row2]`, and every column" + ] + }, + { + "cell_type": "code", + "execution_count": 495, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
movie_titlecountry
0AvatarUSA
1Pirates of the Caribbean: At World's EndUSA
\n", + "
" + ], + "text/plain": [ + " movie_title country\n", + "0 Avatar  USA\n", + "1 Pirates of the Caribbean: At World's End  USA" + ] + }, + "execution_count": 495, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.loc[:, ['movie_title', 'country']].head(2)" + ] + }, + { + "cell_type": "code", + "execution_count": 496, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n" + ] + } + ], + "source": [ + "a = df.loc[:, 'gross'] # Returns a Series\n", + "b = df.loc[:, ['gross']] # Returns a DataFrame\n", + "\n", + "print(type(a))\n", + "print(type(b))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Instead of selecting which columns to *keep*, we can select a subset to *drop*." + ] + }, + { + "cell_type": "code", + "execution_count": 497, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
countrycontent_ratingimdb_score
0USAPG-137.9
1USAPG-137.1
2UKPG-136.8
\n", + "
" + ], + "text/plain": [ + " country content_rating imdb_score\n", + "0 USA PG-13 7.9\n", + "1 USA PG-13 7.1\n", + "2 UK PG-13 6.8" + ] + }, + "execution_count": 497, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.drop(columns=['director_name', 'gross', 'movie_title']).head(3)" + ] + }, + { + "cell_type": "code", + "execution_count": 498, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
director_namegrossmovie_title
1Gore Verbinski309404152.0Pirates of the Caribbean: At World's End
2Sam Mendes200074175.0Spectre
\n", + "
" + ], + "text/plain": [ + " director_name gross movie_title\n", + "1 Gore Verbinski 309404152.0 Pirates of the Caribbean: At World's End \n", + "2 Sam Mendes 200074175.0 Spectre " + ] + }, + "execution_count": 498, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Integer-location based indexing\n", + "df.iloc[1:3, [0, 1, 2]]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## (4.3) Selecting subsets of rows" + ] + }, + { + "cell_type": "code", + "execution_count": 499, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
director_namegrossmovie_titlecountrycontent_ratingimdb_score
0James Cameron760505847.0AvatarUSAPG-137.9
\n", + "
" + ], + "text/plain": [ + " director_name gross movie_title country content_rating imdb_score\n", + "0 James Cameron 760505847.0 Avatar  USA PG-13 7.9" + ] + }, + "execution_count": 499, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.head(1)" + ] + }, + { + "cell_type": "code", + "execution_count": 500, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
director_namegrossmovie_titlecountrycontent_ratingimdb_score
0James Cameron760505847.0AvatarUSAPG-137.9
\n", + "
" + ], + "text/plain": [ + " director_name gross movie_title country content_rating imdb_score\n", + "0 James Cameron 760505847.0 Avatar  USA PG-13 7.9" + ] + }, + "execution_count": 500, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.loc[[0], :]" + ] + }, + { + "cell_type": "code", + "execution_count": 501, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
director_namegrossmovie_titlecountrycontent_ratingimdb_score
0James Cameron760505847.0AvatarUSAPG-137.9
\n", + "
" + ], + "text/plain": [ + " director_name gross movie_title country content_rating imdb_score\n", + "0 James Cameron 760505847.0 Avatar  USA PG-13 7.9" + ] + }, + "execution_count": 501, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.loc[[0]]" + ] + }, + { + "cell_type": "code", + "execution_count": 502, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
director_namegrossmovie_titlecountrycontent_ratingimdb_score
2765John BlanchardNaNTowering InfernoCanadaNaN9.5
2824NaN447093.0DekalogPolandTV-MA9.1
3207NaN447093.0DekalogPolandTV-MA9.1
\n", + "
" + ], + "text/plain": [ + " director_name gross movie_title country \\\n", + "2765 John Blanchard NaN Towering Inferno  Canada \n", + "2824 NaN 447093.0 Dekalog  Poland \n", + "3207 NaN 447093.0 Dekalog  Poland \n", + "\n", + " content_rating imdb_score \n", + "2765 NaN 9.5 \n", + "2824 TV-MA 9.1 \n", + "3207 TV-MA 9.1 " + ] + }, + "execution_count": 502, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Top three movies / TV-series not from the USA\n", + "df[df.country != 'USA'].nlargest(3, 'imdb_score')" + ] + }, + { + "cell_type": "code", + "execution_count": 503, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
director_namegrossmovie_titlecountrycontent_ratingimdb_score
4498Sergio Leone6100000.0The Good, the Bad and the UglyItalyApproved8.9
270Peter Jackson313837577.0The Lord of the Rings: The Fellowship of the R...New ZealandPG-138.8
4029Fernando Meirelles7563397.0City of GodBrazilR8.7
\n", + "
" + ], + "text/plain": [ + " director_name gross \\\n", + "4498 Sergio Leone 6100000.0 \n", + "270 Peter Jackson 313837577.0 \n", + "4029 Fernando Meirelles 7563397.0 \n", + "\n", + " movie_title country \\\n", + "4498 The Good, the Bad and the Ugly  Italy \n", + "270 The Lord of the Rings: The Fellowship of the R... New Zealand \n", + "4029 City of God  Brazil \n", + "\n", + " content_rating imdb_score \n", + "4498 Approved 8.9 \n", + "270 PG-13 8.8 \n", + "4029 R 8.7 " + ] + }, + "execution_count": 503, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Best non-American films, with no missing information\n", + "mask = (df.country != 'USA') & (df.isnull().sum(axis=1) == 0)\n", + "df[mask].nlargest(3, 'imdb_score')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## (4.4) Selecting subsets of rows *and* columns" + ] + }, + { + "cell_type": "code", + "execution_count": 505, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
director_namemovie_titlecountry
1196James WanThe Conjuring 2USA
1562Martin ScorseseBringing Out the DeadUSA
2163James WanThe ConjuringUSA
2765John BlanchardTowering InfernoCanada
2969Peter WebberGirl with a Pearl EarringUK
3419NaNWuthering HeightsUK
3858Todd SolondzLife During WartimeUSA
4298Lance MungiaSix-String SamuraiUSA
\n", + "
" + ], + "text/plain": [ + " director_name movie_title country\n", + "1196 James Wan The Conjuring 2  USA\n", + "1562 Martin Scorsese Bringing Out the Dead  USA\n", + "2163 James Wan The Conjuring  USA\n", + "2765 John Blanchard Towering Inferno  Canada\n", + "2969 Peter Webber Girl with a Pearl Earring  UK\n", + "3419 NaN Wuthering Heights  UK\n", + "3858 Todd Solondz Life During Wartime  USA\n", + "4298 Lance Mungia Six-String Samurai  USA" + ] + }, + "execution_count": 505, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Above average movies, with the title containing 'ring'\n", + "row_mask = ((df.imdb_score > df.imdb_score.mean()) & \n", + " df.movie_title.str.contains('ring'))\n", + "df.loc[row_mask, ['director_name', 'movie_title', 'country']]" + ] + }, + { + "cell_type": "code", + "execution_count": 506, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
director_namemovie_titlecontent_ratingimdb_score
0James CameronAvatarPG-137.9
1Gore VerbinskiPirates of the Caribbean: At World's EndPG-137.1
2Sam MendesSpectrePG-136.8
3Christopher NolanThe Dark Knight RisesPG-138.5
4Doug WalkerStar Wars: Episode VII - The Force Awakens  ...NaN7.1
\n", + "
" + ], + "text/plain": [ + " director_name movie_title \\\n", + "0 James Cameron Avatar  \n", + "1 Gore Verbinski Pirates of the Caribbean: At World's End  \n", + "2 Sam Mendes Spectre  \n", + "3 Christopher Nolan The Dark Knight Rises  \n", + "4 Doug Walker Star Wars: Episode VII - The Force Awakens  ... \n", + "\n", + " content_rating imdb_score \n", + "0 PG-13 7.9 \n", + "1 PG-13 7.1 \n", + "2 PG-13 6.8 \n", + "3 PG-13 8.5 \n", + "4 NaN 7.1 " + ] + }, + "execution_count": 506, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Columns containing and underscore\n", + "cols = [c for c in df.columns if '_' in c]\n", + "df.loc[:, cols].head()" + ] + }, + { + "cell_type": "code", + "execution_count": 507, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
grossimdb_score
0760505847.07.9
1309404152.07.1
2200074175.06.8
3448130642.08.5
4NaN7.1
\n", + "
" + ], + "text/plain": [ + " gross imdb_score\n", + "0 760505847.0 7.9\n", + "1 309404152.0 7.1\n", + "2 200074175.0 6.8\n", + "3 448130642.0 8.5\n", + "4 NaN 7.1" + ] + }, + "execution_count": 507, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Columns containing and underscore\n", + "numeric_cols = df.dtypes[df.dtypes == np.float].index.tolist()\n", + "df.loc[:, numeric_cols].head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## (4.5) Creating new columns" + ] + }, + { + "cell_type": "code", + "execution_count": 508, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
director_namegrossmovie_titlecountrycontent_ratingimdb_scorelog_gross
0James Cameron760505847.0AvatarUSAPG-137.98.881103
1Gore Verbinski309404152.0Pirates of the Caribbean: At World's EndUSAPG-137.18.490526
\n", + "
" + ], + "text/plain": [ + " director_name gross movie_title \\\n", + "0 James Cameron 760505847.0 Avatar  \n", + "1 Gore Verbinski 309404152.0 Pirates of the Caribbean: At World's End  \n", + "\n", + " country content_rating imdb_score log_gross \n", + "0 USA PG-13 7.9 8.881103 \n", + "1 USA PG-13 7.1 8.490526 " + ] + }, + "execution_count": 508, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "temp = df.copy() # Copy the DataFrame\n", + "\n", + "# Create a new column - based on the gross income\n", + "temp['log_gross'] = temp['gross'].apply(np.log10)\n", + "\n", + "temp.head(2)" + ] + }, + { + "cell_type": "code", + "execution_count": 509, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXwAAAELCAYAAADawD2zAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzsvWuQXVd23/c79/2+/X4D3Y03QBAkyOZjZjgPDsWhIo1GGlVpIlmKbLniiatix5IqqYrjuJKqJJW4SknFX+LK2E7ssiPVKLY8oxk7lEaaGQ05QxIESRAEiTfQ6Hf37dv3/Tz3npMPe/fFxepmH152N7oBnH8VavfFee2zzzlrr73Wf61l2LaNCxcuXLh4+OHZ6w64cOHChYv7A1fgu3DhwsUjAlfgu3DhwsUjAlfgu3DhwsUjAlfgu3DhwsUjAlfgu3DhwsUjAlfgu3DhwsUjAlfgu3DhwsUjAlfgu3DhwsUjAt9ed6AdfX199sTExF53w4ULFy4eKLzzzjurtm33O+23rwT+xMQE58+f3+tuuHDhwsUDBcMw7nyS/VyTjgsXLlw8Ith1gW8Yxt8zDOOSYRgfGobxu7t9PRcuXLhwsTl2VeAbhnEa+FvAs8ATwFcNwzi6m9d04cKFCxebY7c1/JPAm7Ztl23bbgB/BXx9l6/pwoULFy42wW4L/EvAFwzD6DUMIwL8AnBgl6/pwoULFy42wa6ydGzbvmwYxj8CfgAUgfeBRvs+hmF8E/gmwMGDB3ezOy5cuHDxSGPXnba2bf9z27afsm37C8AacF1s/5Zt21O2bU/19zvSSF24cOHCxafE/WDpDOj2IPCrwB/t9jVduHDx8CFdrPHOnQzpYm2vu/LA4n4EXv1bwzB6ARP4z23bztyHa7pw4eIhw3S6TKZUB6A3Ftzj3jyY2HWBb9v253f7Gi5cuNh5pIs1ptNlJnoj90XAOl1vojdyT+uic+yr1AouXLjYP7jfGrXT9XpjwS37cWM5z7npDM9OdHNkMLFr/XyQ4Qp8Fy5cbIr7rVFv93rnpjMsZCucm8YV+B8DV+C7cOFiUzhp1Pvtes9OdHNuWrV7jfttDvukcAW+CxcuHgocGUzsG81+vzqY3WyZLlw8JNjvtMX93D+nvnXa94neCN3RwL5zMLsavgsXDwnut1YpnaROTlPZv07NHtvZf/36H3fs+7NZrq8UyJXrfPnkoGPfnXC/zWGfFK7Ad+FiD7GTtt777WSVTtIfXV3hylKRUs3cVODL/r1+PcX5Oxmmxrv55bNjjtfrVOi2C/FkJLDlsYYBNgaGsfm5nMZ2v9rsJVyB78LFHqITIeYkVO63VnlsIMqddJljA1EArKbF3FqZY/2fbMJZKVQp15usFKqbbpcrBiehK/dvF+LJkJerS1UmesObHntmrItE+ONNME5ju19t9hKuwHfhYg/RiRDLVZtbmkScTCpyf6ffTjA8Xp6Z6MHweAHweD2M9UTweDd3DUqh+OLxAaJB/8eyauQKwknoyhVGuxCfTpcZiIfIVZubHut0bqexelCCwlyB7+KhwoOytF6HFDSy/+1C7FefUpnF223S7QLUiYcu7dTyeLndaUKRQs5JgNtWk7en13j5pEqS6MSqGYz7eet2mrMH1D5OE1rI56VUMwn5vJuObXtfO31P5FhdnMtydblIvlLnxROD+9ZmL+GydFzsa3TKjlj/MKfT5V3pz43lPH/41h1uLOd35fyy/wPxEJGAl4F4aMO+kgny7EQ3I13hlsCVYyft1PL4YtVkbq1CsWpu2pe7E4pKh5Up1bi6lCdTUuc/Mpjgrz03/rFC/PUbq1xdyvP6jdVN+ydxa7WMz+Ph1urm15dQ9/Xxdvh2dPqeyLGaz5S5MJNhPrM779luwdXwXexrdGob3e2l9U5HczqZBl442s9YT7RllmgfC6lVSo1Z7i/t1PL4WMjPWE+YWMgPbLR7y8AmaUJxMntU6k1yZZNKvblp/+T+xWqdyws5xroCwEaN//ztVX5wOcXLJ/uZmuyjYjaJBn1UzI1mG3mtTt8TOVZbXWs/wxX4LvY1tvth7jScojm3ayqQ/W//rTTquwJYmjjktaXAXtfIkyHvpn174kAXycjdCWFmrUKhajKzVmlNJu0TinTSOpmMTg4nKZtNTg4ngY0TijSTLOaqeAyDxZxy6rZr/C8BP7icYi5T5geXU0xN9m1pUpLvkZMpzQlO5qv9Clfgu9hXkB/efrONOtmdd3NFkqs273E8/vHbs7x9Z43pVJH/5quPbaA5zmYq5KsNZjNKYP/wygpXlwoUq5tr5BKFqslcpsJQYqM5CTY6aeX+8t4+f6yfA73R1m95P/mKyXymzHBC9eVwX4w76SqH+2IARPxeStUGEb+y0T87kWQpX+HZiaTj2DkJ+E6f236K6u0Erg3fxb7CbtvgJXY6+rPTCMveWJCnx7tbQkb2p/13MuRlpVAlGVICL1upYzZtshUlqCTNcaOd2WIuWwEsYONYX5zL8vb0GhfnsoCy6afytZZNX/atL+pnJV+lL6pMQAaArdtPgGypwvcuzpMtVQCwbXUC1cLRoSRfPjnA0SEl0Ie7Ipwd72K4S43tQrZGzWyykFX9kTb+9v7Kvst7X3co21Zz03t9WOAKfBf7Cvc7JP21aym+894sr11L7cj5pACXcHL6vvrBAt/6q5u8+sECcK9gatfYAb4xdYDPHennG1OKvXOoL0LDsjjUp8ZutVinajZZLdb12T2MdYVZ/+zlBDK3VubCzBpza0oIXl7Mc3O1wOVF1df3Z7Ocn07z/qyaEK4sl0mE/VxZVvtbNmDYqmXjBCKPPzedo9G0OTedU/2J+BntjpKMqAkkEfKyVjJJ6P49caCLqYlenjjQpcYyVSBXaXAjVQA2Oq3bryefs3zP3pvNslqs8Z7um+z7wwJX4LvYV3ASmDuNVLFKuW6RKm4e/NOppuck0L9/cZE//3CJ719c3HT71eUiharJ1eUicK9gsm0w2jRgibdurTGTLvHWrTUAgl6Ditkg6FU6d6PZ4P3ZLI1mA4BL83kuL+a4NK/6eu5WivPTGc7dUkKxUG3QtGwKVbX/YrbMe3eyLGaVgH92IonPa7RMKlJgv3M7zZ++N8s7t9PARpbQaNLP3FqZ0aTa/0B3mETIx4FuZdP/s0tLnLu1yp9dWtr0fp8cS+LzGDw5pq7fHQ1yfChBdzS44XryOcv3rD8WIhLw0B9T5iinsX5Q4Qp8FzuOB2k5/OLxAZ4e7+bF4wObbu/UxCTNCudvr/I//4fLnL+tqYiFCvPZMulCZdPtZw8k8HqMFhOlXTBJDffbb8/w0+srfPvtGQCylYY28SgBXW/ahP0+6k0ltV69tESqWONVLUDfmU7z5q0070wrgXxztUTFbHBztQQoARzyeVoCuGw2iYZ8lDUzpVSzSAT9lGpWa/92gX0rXaJpG9xKq/OdGevimYkezoyta+hlIkEvN1JqbOUKJl9tYFo2eT3hyBXCz26scitV4mea5im1+Pb+OD3n06MJTg4nOT2qxl2O9YP0Tm8F12nrYsexl2HmnbItnJxv0vHoFPwjWTzfu7jAteUSVdNkarKPvniY0a4afXElFCXT5PJSkWKtweWlIl8X55aOx5VchVvpMr0R9Rl/Y2qsRVMEMBtNVvIVzEYcgIDXwGw0CWiNP1WoUao2SBWUEJvsiZIq1JnsUakS6k2LoN9LvakE+tkDXawWTc5qIXgzVWR2rUSPtuH/xUdL/OjaKvlyjSODCV4+OUChusjLJwc27f9oMsTVpSKjyc216l+bGqOr7X7kCuHGaplao8kNzdO/ky4xu1ahL6ommHaW0RMHuu7R/iWkA1n29UFJneAEV+C72HHsZZj5dj9MJ5bQ9y8ucGE2x0q+wu++vFHgywkkEfSRK9dJBJXZ4XNHeimbFp870gvAyyf77xHSS7kKuXKdpVxlQ38ypdo9k81MuoJpWsyk1b6T/XG+4vG2xv1mqshayeRmSpmHIn4vhmG0WC4D8SDRkI+BuLq/Vx4foSce5hk9WRmGgW0bGFrCzmerlOsN5rNVpoBSTa18jgyo6712Y5XpVJHXPPC3XzzGwb4Ef/2zIbqjikcvefPRkJ/uaICo5v0f7AmzlK9ysCe86f0c6A6zmKu2VhAvn+znT95dbI1dTzRAyO+hR1+vfYKQlE8Jp3f2QUmd4ARX4LvYcXTCcd5uKoSdzmniFAxUqjbJVeqUtCYoNX4p1LxeLwOJEF6vErL5apOeqJ+8Pl4KtceGEyzn6zw2rCaN166leGdmjacP9nB5Mce52xnurBb5+7/4GIGAB8OAQEBZZiUPvlpvYDYtqnVlEpnL1jCbNnOa1XJ0KMFKqc7RIXWtUyMJivUmp0bUb8mbvzSX49J8lpDXwy+fHePiXJ5cxeTinPIBRHweag2LiO+uU7idZy9XOzJ46c1baV6/kcayLI4MJvj/Pljg9RtpXjjSy299ZnJDXEBXNMzPPz5MV1SdPxn20x8LkQyrCaQ90Oz92ew9qwf5XGWMwm7Tg/cqBciuC3zDMH4P+E8BG/gA+B3btjf3kLl4KNEuRNd/f1r+81bn/iQfppNJRk4Y8vyRgIeqaRPRQlZGm0oTjdVsspKvYjWVUJNmCXn+oa4Ix4biDGnqYbuzcTFbIVeps5hVGv1gzM9cpsJgTAm4dadqLKAmF7/PoGFZ+H3qYs1mk4alWoA7qwWuLBYYS6rx+sGHS/z4eopcSZlk4iEP+WqDeEjda7XRoFhrUm2oCcQLNC0Lrx67Uq2BZdmUamq7NJPU6w1upwpMdKvrBb1wY7nAE6OKZ399pUCuYnJ9RbFufnJthQ/m81hWk9/6zCSL2TLvtt2fzNaZq5ikilVyFfOe9wE2rh6c8hDttglnr0xEu+q0NQxjFPgvgCnbtk+j3pFf381ruth7SAdXO9NEOkGdaJhOzjJJLXTCVlxt2MjekOe/MJNlJV/hwoxyHG4WDNTOXMnVGiQjAXJaCErHpuR/30rleWd6jVsppTWfPdBFXyzI2QNdTPRGCPnvrgYsw0ssFMAy1LXvpEssFyrc0U7SUt0m5PdRqiu1Nhzw4jVUC/DeXJZizeQ9TT382a00t1fL/OyWcuJ+971FPpjN8t33FKOoWm9QrjdaK4beeICgz0NvPKDHsk61YZHWNFA5divFOn6fjxW9/Z3ZPH6fh3dm1b0e7otQrjU4rGmlHgwMW7XqfprEgl5KOjXDXKZKuW4yl1H6Y7XRJBr0U21s5NLLyccpD5HcvtfxGjuF+8HS8QFhwzB8QARYuA/XdLENbBX880kghXq7EJUvuhMN04kl077M/ySQH7YT3/qjhTyXF/J8tKCE0lqpRqneZE0nDJPBQIWqRSLko1BVjs7BeIBUvsqgFoqSiSL532/cTLOYq/DGTSV0f3xlhdeuLfPjKytMr5ZYKdSY1iyaie4whm4BlrIVZtcqLOkVwERPSG3vUU7RkN+L4VEtwERvFMtSLUAi4MG2LBJ69XInnWcuU+FOWt17rWET9HqoNezW9Uq1Zut60aCXgM8gGlTnf/NWmp9cS/GmnkBOjySJBX2cHlGT4ZeO9hL2e/nSUeXPuLRQoGnbXFpQGv5Ydwi/38tYt+r/Uwe76IuHeOqgchpPayfttJ7gZBxC+7sjJx/53snEb3K703vY6Tdyv+nH69hVgW/b9jzwB8AMsAjkbNv+8928povtQ9LfOqUmdqp1b+dcTpWKJCRXWwYbSSzllaNyKa+0yJ6Yn2jAS482o0j63uXFHB/MKX47KCHm9XpaQkwyUWQ2TJ/HoGnZ+Dzqht64lWalYPLGrTS30iXqTatFc6xb0BcLUrd0XwtVmpbFko60bdge+uJBGrb6zAN+L9GAj4AW+GbDpivix9QCvDcRojsapFenRijVLAyDFu3yuUO9HBtM8NwhJaDXKg0als2apoF+9kg/B3sifPaIcqK+fi3FxdkMr2ua5GR/nKmJLib7FWtoJV+j3rBYySshqSaTJkGdqiFfbRIP+lr+jnanMUB/LEDI56U/pibT5YLJge4IywVl0mlXLqSG74StVqmb4UEJ1Nptk0438MvAJDACRA3D+C2xzzcNwzhvGMb5VGpnoh1dbA9OaXSdsJXW3amm5KTBS2630+pETmbpUp2qaZFu8zG048snBnh6oocvnxjQ1+tmMBHizNjmSbMsy8bAxtLhpof7ongN1QLYdpOPFvPYthI8saCHfNUkFlSfYm80SNDvo1dPSEPJIDWzwVAyyGcme+mOBPjMpBK4h/ujRII+DvercyeDPmxbtQBmw2QhU8FsKAF4ZjRJMuznzKjSsLvCfrxegy7t5OyOBBlJhuiOrAcj+TEM1QIcH4oz3hfl+JAS2DGfgaFbgOGuMAd6Ygx3qRWHhYWtW9iYvvgvLy9zbSnPX15eBuCZyV6en+zjGX1/TxzoYqw70ppMZeoIW52O9dioYwNRzKbdsulvtbJ0wlar1M3woARq7bbT9ueA27ZtpwAMw/gT4LPAv17fwbbtbwHfApiamtrnw/VowCmNrhPkhNHOSHBi0UhnllMCL9m3dlbLrzw1toG5cn0pxw+vroJl8eWTgxu0RCdI1s1Pr6d4ezrDMxPdfO3sGGG/h2rDIuxXAjwe9hEP+4mH1af2Zx8ucXO5yJ99uMRLp0b47oUFLs3nsS2Ll06NkK82sCyrFWw0nylj6/bMaBdDiRB9mkZ5dSnHjeUCYzpStVhvYtk2xfX0w2tVPB6D6TUlIHNVk6Zlk9O5cbqjAXweb4s22Rv1kSmb9EZVX9fKDSxLtQDfPneHN25lWSuUmZrsIx4NEMzUievj351O8+F8lpgffvMzk5wcTjCXqXFSM45urRQ4P52hR49FJOjD8BhE9AQlWULPHerF8Hha5jeZoVKyfGQFrs2YNutwYsl0yvaSmUb3K3Zb4M8AzxuGEQEqwEvA+V2+pguBTilg26WgyQmjXYg72S3lh5YI+xntjpDQWqgTZPCNnDBurpYp1Rvc1ME60aCf/kSAaHDz80sWTthnUKk3CWut9tJ8lksLWcJ+g6+dHWOpUMfrMVgqqPu9vlykVDW5rlMldEWC+H1lurQWXa1bVMwmVW2XyZWqFGoNciUlpA1buSwN28M7M1lm1kq8M6M+27fv5CjXm7x9R5mPqg0L21YtQDSgMlBGAzr98EyW5XyVi9rhfDtdomY2uK1NRG/cylBtNHnjVobf/hzU9XnW2wszOVaLVS7MqOvVzCYNq0lNC9z5XJVircG8Tmc8v1ahUG0wr1dn78xkWCtWeWdGOcxPjyRZKdRaNv3/44dX+fG1Nb50rIf/7Tee2UDDlOY4OQHIilpbMWEkL1+ytzr9BvZbVtePw27b8N8C/g3wLoqS6UFr8zuNhyX0eTdwvzNQyuXvVstpJ5aMZLU4Ybw3yoGeMOPrjkgxYUz2RogGvUzqvjhVSVrOljk/vcayzh8jUwKnizVShVqr/4f6IkSDvpbjcDgRwrJVC8rMMpsutcwslt0gW65j2XepjJZFy9Z8ciRGNOjj5EgMbdZvtQe7Ali2zUFdICQR8GDZd52us+kahqFagFK9QcNSLUCzaVGomjR1JG3EB6l8DR24y+GBGOGgl8MD6+mJDWxbtQANy8bjMWho85XfA2aziV7csJSvUW9aLGkbfcijmDSa5YnP52UgEcanSxK+fmONQq3B6zdULqB1GuZ67h5pjpMTgKyotZX/R5pgnKppPSzYdZaObdv/nW3bJ2zbPm3b9n9i2/auSOT7LdQeJOwVBWwdW9k/nZxdktUiJwiZrOzzx/r5lbMH+PwxpeXFg14ypTpxzRw5MZLkxRNDnBjZPIe6PN+V5SJVs8kVraFLJkjDhoDXi/Z7cm0px/WlAteWlBZ8ZTHPXLbCFZ1x8tVLK+QqDV69tALAB3M5zIZqgZYpaL29sVIiVzG5sVKiN6Js9OupFEqmRcBnUDKVwM7XLDyGh7x2shp2g1pTtQD98SA+r2oBMuU6tYZNpqy04FurFcymxa1VNdbDyRAD8SDDOvVBMODF6zUIalpnOOCl0bRbNE+/30dvLITfr/p3fChG2O/l+JCaMPwBH9GAD39AbZfmtKnxJCGfh6lx9WwkDVOaCn96PcV33p3jp9eV78+2jXvadketfG+ks12ytx5WPDSRtg9L6PNuYD8tN6V5aZ0lE/VvrntITcwpYOZ2qtCKdO2NBbm2UsLvNbi2UmJqsm+DuWkpW+ba0t3gI3m+ZMiHbVkkQ+pTkUyQmN+gXG8Q01rvhbk89abFBR19enE+R6na5OK8Fuhem4atWoCuSIDVUpWuiBJ6Qb+XsN9DUDNpptMlqg2b6XQJv8+DDUxrE0mmWKdct8loXntX2E/A52k5YRu2Fy9NGrY6V38iRG/BpF+vNm4t58nXbG7pya1Uq1MzLUo1db6aaVGuW9T0hLJcqFI1bZa10zRTMvF4DDIlNRZT413MpCtMjSshWm/a+H2eVvK2qN+Dx2O0nrWitDZblNavnB6jNxHh6YM9gKJhpktmi4YpUyvcWi0ymynTG1uPrI0zvVbizJhyKrfLhE7LQz6seGiyZe4Vr9VFZ5BamQyWkTjYEyYe8rciJOVqRTIz2iNdYaPmJt+Tmylt00+VN90/HPAS8PtaWqy83u21CrZtcVsL4WcnkngMWoFXEb+ywUe0kAsE/PgN1QKM98UYSAQY11WdmlaTct2iqQOxwl7FhAl7DQqVOulCnYIueFI1m1i6BTg8ECUW8nNY9w3boqlbAJ8BxWoD7X4gVbbvafsTIYJ+790JIVUgU6xyS+ebBwOVNUGd4OhAnEjQz9EBJWDP3VojU65zTqdnrjUsgjrdAkAo4CcS8BLS9y4ZS0u5MteWiyzl1LM4P73GhdkM56fV+b73/hz/+o1pvvf+HKAoqSG/l762Z+kzjNazbH/WO0kV/iTYrybmh0bgu9g/2IoauZ5hcT2hV3sk6WZw4k9LZsbLJ/sZ6460HHcyoEb27cyBJGPdEc4c2DynerHapNm0KOrrL2SrlGsNFjQX3G8YFOoWfm1nCAYCPDbaRTCgzRSTPQx1BZmaVFpruVqnYasW4IvHBnhirJsvHlO0z+l0haZuAbpjQfxe1d5MlWlAS6BVtOa93t5YKVGsKvMPgNfnIeBRLcA7d3KU6hbvaCevriTYaiN+Hx6vQUSbZJZyVaoN1QJ89cww/bEgXz0zDMCzh/qYGu/i2UN9ANxcKZItN7i5op5tf8xPplhv0TpzpRqZUp2cDlr7Vz+b5vVrKf7Vz6YBWMzrGrY65uE7783x7p0M33lPCfg3bmfIVeu8cVvZ2WNBP/3xADHtcI8GvJRqTaKBjUJdmgYldlpA71cT80Nj0nmQsFeJkz4ptts/yYBoX04PxIOE/HczNEqBLeGU20Zun5rsY2qyr3W8TGYmj3/+UC+eNuqf7Pv8WoGVQp35NaXlSlaO1+uhLxrAq524w4kQV5aKLSdtMuzH5/G0EnrVTMVKXzeTSOrhuga23vp9XiIBH36fl6DPoNSwCWoVfd1vsN6ulmqU601W16OAk0GWC3WGtbnKtNSKwNSrh4DXgweLgO572bQIeQ3Kum/9iTC5Wpn+hFpd5SuKBpmvqOMrpkmmbFIxlUnHbDZo6hYU66fWtHjjlhLQJdMmHPBRMlWHp9fK5KsNpnXQ25NjSW6lyq2CJvmqiW2rFuCZg0nm0xWeObh5wZWR7ghPjluMdG806zrx5J1y23T6TexXE7Or4e8B9uvsv47thpHLj6vdDBMP+emPB4nrlLhODmUnxs/tVIE//3CJ29rsIJ2u0sQjl/ZyBSEjb5eLDTyGagEq9SbFapOKdiSeHI7RbNqcHFYmmePDSV48MchxnWHyo8UiFbPJR4tK6/X4fPe0UvMMB3zKhKMdmwd6VPqEAz1hJnvD+A2Y1NknnxyNE/KqFqBUrlFp2JTK6rms5GuYDVqRrANRP4ZuAU6MJIgEPJzQvPfBuB+zaTMYV9v/zktH+PKpAf7OS0cA+OHlRa6lSvzwssqt89NrKW4sF/ipjqRt2MY9bW/YR6Np0at597/5/AHOjnfzm8+rkozJgBePbgFSRZOBeJBUUQn4EwMx/F7VqvN6eXK8u+WTkAyurRhd0jQo4fQedvrN7lcTsyvwPwW2u/zbbdaMU5k9p/5v9+WXDIj2lz8W8jPWEyamBb7Th+HUVynQJb1Omng+XMhzeTHPhzo3jkxeNpcps5yrMacLf3/5RC/hgIcvn+jVV7TBsFmP73x7eo2yqc4BG4XO4f4o8ZC/FQ3rNyw8ugVYyJS5cCfDgr5efyxAwEOLuXJtqUDFbHBtqUC20sS2Ias17PG+GF0Rf8v+n69bGLoFyJYbNHQLUKxrO74OKj4+1MXRwRjHh9RzylYtYiEfWZ0HKBkOMJQIkwyrvuRqzXvaWlNFFNe0Uza4btYy1iNvI/Qngi2n7JMHe/ntz0zy5EE1liWzSd1SLWw0yZi2h0Q4gKlTQ8hnKSfrrRhdTqZBp/dwr5luOwXXpPMpsN+r33zv/QXen82ynKvwe1/ZyDyQ0aGd5v52Wq5udbyMSHRKVyzHWv5+diLJUr7ScpLKlLky3/yleZ3T3adyur9+I83VpTxhv0elM7ZQhbh1fprBZJynxpsMJpUWXa43qdablLWGv1ask680WNNSdL1ObMTv5chggrMHu7idrnBWM01UhG6zFan7xo0V3rmTxWc0+c3PTOL1GNgGeDXZPls2qTdUWzGbSoDr9L9v3c6wVjJ5S9u0B6IBcpUqAzry1dI3sd4mwh6W8qoF6I36CXi99GqNP+S1yZTqhDSD6J++dov35/JMrxaYmuwj5leThTbJc3okwVK+zmm9QuiJh1irlunReYHCQR/RgJ+wjqR9/XqK83cyTI1388tnx5hfq6ko4jU1mcvV30A8wO20wUB83R9yr7lOvoeS8dUeZb2ufHxagd1ppO5+havhfwpsd7bfbZOOxzDAMFS7CWRCMMmFd9Kqt7Nclcc6BbxIE4z8XaxZJEJ+ipp7LlPmyrGu1hsUa3dT/KaLVeazFdK6uPXpsSSnR7s4re3IlbpJrlKnUldCtlxv0mjaLYHvBtcQAAAgAElEQVRfrNRp6hbgp9eX+eHlFD+9rvLD/OGb05yfXuMP35zW52tg6RbgynKJQrXBlWXlaM1WGtgWrbq0B3sjRIMeDvZGiAU8eICYDqyqN1QgVV3np++OB/H7VAuwrsuut3XN6qlrjfqDuQy3UgU+mMvosapg2XbLYTy9UmCtWGNa56c3bZVe2dQmlXg4yERflHhY5/1JBAn4PQxpL/BYd4ShZJAxbVNfL6BySccc9CeUiak/oQT8hZk1Xru+woUZtVo6NhhntCvCscG4flZbB+lJxlenifU6wX43y34cXA3/U2C7vPbdduj84plh+hOhjw0ikfxmJ667kxbuhHZtaP3865qRrAErNaf2ZfqRwcSGpfnt1RKza2V6tVb7+rVl3prOUqma/MpTYxvC7cMBH7Ggr2Uj740FGe0Kt56nTGZm2xaZkomtqY0RHXwU0WaHijZnrLd30hXK9QZ3tNC8kSpSaagWIBkLslapkNTX8xo2ZlO1AD7DpmmrFuCZiV4yFYtnJnrBhky1yGi3Wr0MxAMsFxotDfjyQo5KQ7Xq3NzTLmRNLN0CXNWTzVU92VSqdUqmTUUziLpjQZaLJt26r8MxH+lyk+GYGrvpVJ6Lsxm6deisx+Mh4vfi8ajfYz0RnjR7GOtRz/36co7ry0WSwXWKa4xcLccxbaM/fydDpmRy/o6agGRUs8yTJCFTLbTHXDhVMuv0Hd+vTlknuAJ/D7DbgVCSWighmTHSzCJbGYzkBPnxtH9suXL9nmRmMuBFJjvLlU3mMyWG4ncLkrSXzZvojZIu1Vo53dcqJoahWoDXriuTTcjn0UXE/QR8Xvq0Y/KFI31UTJsXjihTwb85P8eF2Rz1eoOXTo3w0VKBSr3BR0tKy5UsmoFYkGKtxoB+nk2rQbHaoGlpDb0nQmmpzEEt9B4fTlKu2TyunbqSWonXq4qMa5PPh/NZFrMlPpz3c3ggzmqpwWHNe08VG1i2agH0oqPVhvx+vDWTkN+vnztg6RYY6QqxVjYZ6VImmKKpfABF3Zf/+JkD/Ml7i/zqWUXDrOMlHvBS1zWurqdKYBiqBRIRHz6vh4SOBJaBUteWC1QbFteW1VhGw+o7iOoVwtGBGJmyyVE9AUgBLvMkScj3vv07u50qbJlnp9N3fD8FM3YC16SzC9jroAun5aZTERL5WwYjOd2fNNO0X2+zTJrt55LbJfVOpks+PZrg5HCS06PqI/2lM8OM90b5Jc0VX8gUubFcZCFT1L3zMNYVZv3VlznWb60USZfq3NJc8qFECL/PaCVfqzVtAl5Py1E5OZBgIBFgckBdP1tp4vPddax+45kJXjwxyDeemQAg6DcwmxZBHZkb8hl4PaoFCHlszKZNyKPOf3mpSLFmcXmpyGh3mO5YgFEtQBsNZaJpaBOGDgZutccGo4QCHo4NqslwJBnAo1uAl04OMNYd4aWTKgYgHlQmlrjmtRuGl4m+CIauqPX4cAy/1+BxzUj6hceH6IkE+IXHhwDoCgfpiwXo0gJcOsgH4yE8hmoBxnvCBH1exjVz5jeeG+cXzozyG8+NAxtjKMxGk5V8BXOTilaw0TTZTl5oj7gG54pX9xv3S2a4An8XsNf2vZ0uzyY/PHl/8vxb5SWXLBZ5Lrld5ruXE8K6k/TSvBIqXdEQnzvaT1dUCRXD46Er6sfQZgZZNenD+SyX5rN8OK+EhN/nwetRrdq/h9Mj3Tylw/0n+6IE/T4mdX77pw92caAnytP6fBN9YbB1i8ohP9GWQ/4vP1pmuVDnLz9SNv5nD/Uz0Rfh2UNK88zXbHxe1QL0hX14DdWmSyb1RpO0TmUwkAzh96gWoEdP0OttvdGkYVnUtYAM+BQNMqCTlf3o8gpzmTI/uqzy+nRHfIR8qoWNxVxOjHbz4slBTowqobhaqNOwLFZ1ZtD+RICA30t/Qk0or11d5seXV3jt6rJ+DwJE/B56NQOp2rQJ+b1U9eRZqDXpjgYo1DZn0sxkKlQbFjOahfPqBwv807+6yasfqCJ6WyVE2+qdBOdV8W7jfskM16SzC9hr+55cbjoxXTqFUzDUVsFUm9UWbW9lSlwJmQtHLvPlR/+NqQOtwCuAK0sF7qRLXFkKMTXZRzToJxm+mx75xHCcbLXJiWEloGX65HLdIuQ3KGvq40qhykq+2irKUTVt4iE/VR1c9N0L87x5O0O5Vmdqso91y816+ytnR4mGAq3+TfaFSZdNJvWE8cRED2XL4ImJbjLFKql8nYx2MA8nw6wUTYaTat9cxcSrW1CpoJtNWqmgKw0I+Ay0P5jVskmjabNa1hNIV4TFgsmAplGWqg1KdZOSzs1/9kAXq0WzFRX9k+urLBdq/OS6yk6ZLugJSecZurKYZ7VUbSWOqzQtgj4vFZ2dU7lF7PXMD+QrJvOZMsPa6Svt7EGfqtKlST+8dm2F9+fzYCuGUyLkZa1kkgit1xe+6x/KVZtbBvg52fh3G/dLZrga/g7AiT2w15Aa/3ZZRk6FvuXv9vFxurbU4J2yacp0yDLApisSYLw30kpOdu7WGteW8618L5870svxoQSfO6K44V84NsiLxwf4wrFBAEo1k1S+TqmmhFimVCVVqJHR+ep/dDnFQrbCj3QcwKG+GF3hAIc0N/7qYp7VQpWrWuidHUsS8qkW4CdXV3jt2go/uaq07L5YkK6Iv5UfZqwnTE8swFhPmHytSdO2yGsN+OzBbg72RDl7UGncJ4bihPyqBRiKB7Bt1QL8jc8e5OhgnL/x2YMAHO4LYTabHO5TK4Qzo10c6I1wZlQJ9L5EkNGuCH2JzaOijw9EiQW8HNdas2XbYOsWlePHbNzN9fPFY/1M9Mf4os5kOt4XYTARZrxvvR6wSapQo6Aja1+/nuI7783xus671B0J0hcPtCpyVUyLesNq+T9kfeD2lanTeye373VK8d2Cq+HvALarMd9vbWKnHU5OTJqtCqDIsZOOPqn1yRiC06MJymazZcP/wYdL/Ph6ilypxpHBxMbslxEfXo+HpDZbvH17jQuza3SFvExN9jHSFSIS9LUcmdPpMsuFSuvD93i9dEUCeLRT1cLCsu+W8fvSiX7y9SZfOqGEms+jBJ62EBEO+RlOhglrrvnrN9OsFGq8fjPN76NoppZlt2imVxfyzK+VubqQJxHy4vV4WhpsLOSnOxJoBbGdPdhLqmRxVgc29ScjjNRUC/DZIwP4fHedoO/O5mlYqgWVmuDYYKKVmkA6tKXD/Hc+f5ixvrurp4m+KLOZKhPa3BUO+PD7ai1G1FMHe0iXmi3zmOTdywpWkoF1aqSLSsPi1IiakI4PJ8jXmhzXFbUG4iFm1iqt+sBbVbySkNv3epW+W3AF/g5guy/HTufx6PT824Vk0sjxkIKiHXKbnCziIT9j3eGWUJApceX+HyzkyJYbfKCpiWGfYv4c1iaSsa4wPZGSdtxu3P+166tcXcwR8hlMTfZR07z9mubNf2Nq7B4T0VMHu8hX11o+AZk+eSFbxWzSSra2WqiwmKswGFef3guHe/kLM8ULh5WQ9nrAbFpoJiIrJZO6ZbNSMpXGjs06rfz92TUuLWRJhAx+8zOTLOQqeA2bhZyycX/xWB+rxUW+eEwJ7G+/Pcv5O2vcThX5B199jLC25a+3sgSh1Oi/fW6aH1xe5fZKH//gl85ssLlLAX58SJnH1v0X33l3jremM5QqNaYm+yhWTVbyNYpao5cmo75YQGfDVAL/88f6OdAbbb1X35g6wERfrDWBvXC0n7Geu9tlXqRO8KCycJzgmnQ+IbZyfG53ObbTeTw6Pb8TnJy+smqUHI+twtrlNmkOkiYamRJX7v/8ZDchn4fnJ5UQuDCXo2HZXNDBPpLbLfe/vJDlwmyWywvKLGChkgFrM/MGE1HDNuiK+O/mkWmYvHYtRUNXtAr6vXgMWvntry4pXv7VJcUC+sLxAT5/bIAvHFdMGcsGr8eDLiLF0f4oEb+Ho/1RcpUmlmWTq6xrwGVKtSa3tY1eVteay1TxeGgFoV2ay3BzpcglHWj1ymNDHB6I8cpjimXz/nyOYt3kfZ27X6ad+KvradLFOn91PQ3cXX3ltc/g2lKed+6kubakVgxPHOzhsdEET2iN/k6mQq7a4I52usoCJ3f9K4q2qSxDd/0xTo7WDe+dVkRy2kfhwhX4nxi7adPrNI9Hp6wbp/M75d7ZyQlH9l3em6Tyyd+j3RGePNjNqDY7yAmj2oAjAzG0n1ELQbslBPuiflbyVfp0OoFaE44MxlknhqyU6vi8Bit6RRQJ+IgGfUS0WeL7Fxf48w+X+P5FzQyxLJXVUacvaK8LCzDeGyYc8DCuVzCGnhXXW2l37o0GiId8LTPGSr5CqdZgJV8hGfLi9RityW04Ecbr9TCss1l6vB4GEqHWZLaUr5Irm62IahsVhb2eMDIS9JEI+1tFxJ8YTRIL+HliNLlp3x4fjmtaptLYpc398lKeQs3ishb4UhFIBAwqtQaJgPqPw/0RGrbN4X6tkc/mmMuUuTi7XqN361oJTu+lU/nKRxGuwP+E2MvkSVJg7/Tk45TeYCfvXfZd3tvt1SKza2VuryoNWIbjS9pmtlThexfnyZaU1igTcMnslW/eypAp13lTC+Sw30up1iCsNfCzYwmwdQuM90YYjIcZ1/derjXJVeqU9QxRqDawbdUC9IS95MomPWF1vloDfB4PNT0BHe0PE/KqFmB6Jc9Pr6eYXlFC8uRIksP9cU7qEoy30xVK9Sa30xXGemMcGYgz1qscwpMDMU4Px5nUgUq2bbGSr7aigp+b7OXoYILnJpW56IvHBjg+HG/l3r8wm2UmXeKCFughv5dE2EtIj0WuVOfyQpacnvyOj3Tx4okBjmsb+mqxRtVssqon76FkELPRZCi5zrKpUzWbpHWeoZlsDY9hMJNV+38wnydXNvlAU2qHEgGals2QpnU61Upwei/b6xnvdWzMfsEjK/B3Wku+n5BL7e1CcpQ7hSwULtEu5Ldi8ADYls1yvoatbRrRkE/RJnU0kdTo//zDFW6uFPnzDxXLReVE7245HiWPv1ipsZyrUKyo68kiGh8uFGjaNh8u6GhQQcs8PZrk9EgXp7UWHFzPVa9XAIWaTSTopaB59MlogGQkQDK6XsIwQDToI+hXv9+dyVOomrw7o4TeSqHCzFqJlYKawPqiPgxs+qI+/F6bubUyfp3c7PNH+zg+nOTzR5WN/vZqmap518QzlAwSCnhaAviZyR6ePNDDM7oYS8DnIez3EtAe5XO301xfLnLutjLZpIp1PB4PKS2w+2N+Vgq1VkGT/lhQ16TVaSI8Pg71x/B61Fj0RAOE/B569L2Pd4cI+AzGu+86VVUeIx105/EwGA+2YiakD8Hpm5Xb2+sZ73VszH7Brgp8wzCOG4Zxoe1f3jCM393Na35S7OcXwOnFllGDnR6/IbrVoQiJ01hJoSrRrolJgf3+bJbz02ne11pmptKgO+Ino8niL2ja5AuaNim1Or8HamaT9ZK4si9yovb5fcRDAXy6qpPHAGwDnZyScrWhsmFqjV1G+p4aSXByJMEpnSHyybEuxnvDPKmvF/RB3bzLFf/t58d5+dQQv/28ih4NBdUEEQquC0UfHsOgJ6p+X5zLU6yZXNQ1cYt6BVGsNvjLyymyFdVu9twSIT8+r0FCO03/+Pwc526t8cfnVcWof/H6Lf7knRn+xeu3AHjxeD+j3RFePK4c0MWaiW3bFDUFdTAewLJsBjWt873ZPE3L5r02Vk/75BoPGtxZLREPqsGUBVK+cnqUnz89wldOj6rBsdv+ocpAVkyrVQ5SKgfyPZSUXbm9/TtxWg08KiuAXWXp2LZ9FXgSwFDx2fPAv9vNa35S7GfalROrRiYc6/R4ma9mKxYNdJ4OeStWkbyW5N1/7Ynhe1gwTpPRyZEkqVKjZQLJlGpcXcqTDHk3vffx7jDXl4uMa5OQZaPSIWuh8+R4D3VbtbAxH8y6TyEaUOmP42E/3ZEg8fB61aUYRwYbjHQrM4t08n7haD/g4QtH1QT2C2dGiYfTfF7/7gl7eb/abJmEGnjw+7w08NAf9nGz2aBbs2jkWB7oDnNtJdjqa7FqYtl2iwXz0VKBYr3Zygt0ebFAsWZyebHA14EnxrpYKTZ4Qk9emXId07LIlHWR9JCXTLlOlxbA7Ro0wM9urlFtNPnZTRXjMJep4TUM5jJKiH7uaD+jbSyaSt2kYjZamUilQ90pSG+zQjvtbft34vSO7veU5zuF+0nLfAm4adv2nft4zY/FfqJdyZfPScDKhGMSTsdLISt59BKd5gLfKrIXuOcjlpGzTjnP5WQ13BXhqfFmq8jGD6+scHWpQLFqbnov8UiAkyNJ4loASw3/xRP9FOpNXtQ8ehn5K7nh0k59ZizO9FqJM2PKsfnvLy7y3myWVL7K33s5wc8/PsKJka7W/QwlgwTbzC6zWZUjflbbuV95bIA/eXeRVx4bIFdpki43OazvS+bev7aUZyFTbrFk/uYLk/zpxSW+dkaxcD472cNfXF3ls9qks5SvkauYLOmKWINdEaYmehjUY5mrNWladwueZKsmTcsmqyeQdqfu1GQf/fEAt1fL9OsVwReP9ZKrmnzxWG/rXWh/X0zbIOD1YmqG06G+CJcW8hzSgVgy06k8/mBPmKV8tcXgktu3+k7kO+qk9DwsuJ82/F8H/ug+Xu+BgZMjs1M4HS/NHp3S16QZRi6H5VK8fTm9XQewnKxkOP1QIkQk4GslO5MMJMnSkRW4JI/+ZzeW+aO3ZvjZDZ0PRtul1wW+jPSVxxerJrlyvaVly5KM372wwAezWb57QbF+eiLa7q0nJL/PxxMHu/H7fHRH/AT8Hrq1eend6TRv3krz7rSyuWerTTweg6yeTMd7Yzw32cu4dvKeHO3iyQPdnNSRtAMxP5alWlDZKZ8e7+ZFTRF9dqKHY4Nxnp1QE0SmZNJoqnTRACGfl1LNJKR5/IPxMP2JIINxzRryeDk5nMTzMauzqfEejg3FmNKrqZupMj7DaBVpdzJdykR6ncCp1OXDauK5Lxq+YRgB4GvA399k2zeBbwIcPHjwfnQH2NuKNZ1q9DsNqQlJO7VTf6XQldqS/Hjk9baKtHVaassVQbtQmJrs49RIgmK92bKxy0jbK8tlEmE/V5aVUJFaoqyY9e5MlmLN5N0ZNbnJHO8yGEgeP9EXZaYt+vSPz8/x0WKeTEkFH2Ebiuivtdxfe2aMYNDX0sqbTYu5TJmj/RG8Xg9j3ZFWwfRqwybo81LVVcz/2nMH7tHof3R1hStLRUo1tdpZKdSpNpqs6GRnN1MlClWTmzq9sdSITwzFmc1U76ZqSAT4YJ4Wi0aORcivag2EtH9EVqCSODkcZy5b5aSmedqWxWym0hq7wbift26nOXtA9cnpPZTY6ht3Mhc9rCae+2XS+Y+Ad23bXpYbbNv+FvAtgKmpqY+pKb/z2MsHKq+91+YlKUQ7FbpObTucJjt5LbldjpX0Z0gbuxTAL5/sv8dHID986TM4NRRjIVvj1JDSkrOlKj+9nmIwtvmnI4+XJifLapItm1iaYfXLZ4cxvEZLSHdFw/zSmVG69AqiXcjL/PCvnB6gZlm8clpp5FKjl6kGBuIBQj5vq2CKadn4vB5M7cCQdQx+8OEy5+6sgWUxNdlHTte8zemat9K/cXosSbVptaqFzWXKLLXVB5aQJiGP18OBNhu+XC05vYcSW33jTu/VfvbxbQf3S+D/BvvMnLOXD3Snr73d1YpTdk1p39xMY9/qdzucJjuna0lIrXSlUKVcb7ayV+arTXqifvJaoDv5COT1+xIRTgyb9CXU9lc/WmGlWOXVj1b4+tPjG3wK8nyyuExPNEh/PECPjg4t1SwSQT8lnTtHHi+FfDvk5PD9i4tcmM2ykq/yuy8nGO0K8dGij1GdFyhfMclUaq3I2N/53MSWK4Iri3lm0mUSmnI62RvhzlqJyd7Ng95kaoN0ocJqsUpaU0z/3Tt3WgVVvv70+IYJSaZWkJO5fDZODvr2sey0bvNeK2G7hV0X+IZhRICXgf9st6/VCfbygXbqBHXCTq9WpNDZKjXCds8tsZkttZOxkQJys4IrW51vgzkqGtQ2e7Xvga4gVxcLHOhSv4tVk7m1SiuSV0I+69OjXVRMm9Pajn4zVWR2rUSP9inI/bPlemuF8tr11XuK00sBeGMpx4fzWWL+jVG8U5N9XFkusJKvc0VXnEqGAwwlwiTDasKI+L2Uqg0iOvAqFPQS8HkJaRbOiZEkhtfL8UG1gnB6lvUmBLyeVgWub5+fZ3atzLfPz/P1p8c3TBBydSRTJ8hnIyeorcb+nTuZByrB4W5h1wW+bdtloHe3r7PTuJ8PeLvJ0+SHt9Ma/3ZXJLKmbTukGcHJxON0b1Ljl8t+p9oAUogmw376YyGSmnY5kIjw9Hg3A1rjl05fp4Rd0aCHfM0kqmvmHu6PsVYyOdwf23Q8/uXPpvlwIc9CpkTY5+F6qsSATiYmBaBy2npaTlupQTfMBsVqnYapYgx+cDnFXKbMDy6nWrUB2oPMnh7vIltp8PS4mpykCed2qtAyj/XGghtWOwOJANY8DGib/+nhGIu5Kqd1xSyn90yOpdwu70+i/V3p9Bt5WGmbbrbMj8H9fMBOAtWpL04mme1iu6shScvcqpaok4nHaQJwWro7+Rs+WshzeSFPTPsAJE//yycGiIXuriAkS0hyw2V/zk3naDRtzk3neOnUyAZuutRaSzWTXMVUbBh/iO6wH1svV+TYvHCkF9OyW0Fqj40kKNWbPKYd2NmqSc28S6uU/gxJUY0EVPrlSMC/6dh8++0ZLi8WWCtWmJrs20j3XatQazSZ1SyagWSIoWSoVaFLQppo5FjKZynvT2KrtNxOE7OTL0niQVkBuAJfYzvMmZ3WqCU61bD32uEktVQpmNr/dgoi65RN0enkKH/L9MtSCEozw7szWVYLVd6dUWYTabOX/Xl2IslSvsKzE8qxeWEm3bKjv3RqZIPWemQgTqbS4MhAnJPDcZbyNT57uGfTsfm5U0MkIsHWWEqefqnawLKtVgUrGRQmVytXFvLcTBXo0+ytpbyq/7uejC1XrjObrTKiYwhkIJaMpL00nyOVr3JJZ+OUkDEUkkElvzPpoJfY6juQKb2djnX6Rh+UFYAr8DW2w5zZ7YfdqYbttP9uayNSa5eCqf1vpyCyTqOAtxtAM9EbI12qM6GZLlIIymc9lAgxu1Zp8f6dVijS0fqnF5eYz1T404tLvHRqZINd+yuPDWF4vLx8sp93Z7IMxIOkikpDl4FJGwvPFJldq9AbVYnozox1U2rYnBlTE8L33l+4xycgBWyqVKNYbZIqKS56f8zPa4UaLxxRE062bOLBJqvjN2QtgS8cH8DweFtRxIOJCLOZKoOJzc0qciy3KqTTGwtyK6WC4NZjFqSi0f4s5LXkRC7R6Te310rWJ4Ur8DU6sfHtNY9+u9jtCWoDF32T8fmkS2Onj15+mNt1+soKWlJjlwJcVsiS2Czff/vxXzray5+8t8iXtFCUZo32IiOSp/6Dj5Y5dzsDtqJNynP3x4IE25Kbfe3sKOG2+rkewwDDUO0mfe2PBYmH7h4vYxgGE0Fup8sM6mpkVbNJttJolTR87lAvhsfTWnE8f6iblWKN5w91b/ospXlLtnKCO9QfZa1c51C/Gg+paLRDXktO5NvFg8LqcQW+Rid28P3Go+8UnU5QnQpNybbYzIzycZBjKz9yp747mXykFigh7dROE4oM/JJwqujl8XiZ6Iu2olGl0Gq3Y0ue+vWlPHfSJbp13h2ZBiIa9DPQ5oSVz+VzR3opm1arnq9KNb1O0+ymJ+LH5/HQo0060hx1eDBBoW63Uj2cHE5SNpuc1KmopcmlPZL2pU2elZO5TY61tOFLRWMrp62cyB8VuAL/Y7CVaWCvNfrd9hlISAeX0/U7Mas4rZbkR94pf1qebystEFC59xeyhP0GXzs75ti/7fogpFlCnq9dMB3sCd9DOfV5PQT9Hnx6ArixkuOHV1YxsFRSPBFBLSfPq0sFpldLXF0KMTXZx6uXlrm5XOTVS8u8dGqE6XSFaqPJdFpXqBIxA189M8JAItzqj4w6ljER0mQjIcf6Lz9auMe/IQW69FHICa19spff6oOmpO0UXIH/MdiKe77XL8v9dhBJtoTT9Z2SsbXDabUkBWCnk12n57N1ioP11ql/nSayk8f3x1Xd1vWEY1udT277oraRr2felNkpJY1STp5v3kpzfTlPwAu/+ZlJDNsmUzEx9IO2rCbFSqMVFSxjBqQDW5qj1vMWvXBYjbVMeyFpnLJAvfRvbBToJe2jKG061u3tg+JU3W24Av9jsJta/HY19Pu9wpDLX6frywliKzidSwq57cYsOJ1voi/CbKbCRN8nu1cnOCkHqmSj1SrZ2An/W2belKml5cQrc9N0R/x4PHeTsXVFAwzEAy2HciTkZyAZIqLt3BG/h3JbvnopsCWltL2e8Nef3mhykjROyZD62pmheyKB5cpxsi9KulRnUucp2mqsdzpW5UGFK/A/BrupxW9X27jfKwwn26pEJ/bRnWZDdDq2G5yw3RGeHLdaRT1k/5x8ABJOcQJSC++E/y37JtNGLGTKXLiTIR5QAvrNm2vMrJZ48+YaL50aYWqiFxsPU3q10x0JEPB56NbmpVceG6TWtHnlMcVTn81UyJZrzOoi5DLKuNGwmMuUOKIny+FEiCtLxdb2QtVkLnPXpCOD4mSB+pdOjfDSqZHW/chV93Z4+I+qxu8K/D3AXvsAtotOg512Ek7n7lSTk0JECiEp4KUPYDu1ATZjIW31bsi+yN+yL3fSJZYLFe6klcljpVAjVzVZKSiTj2QYZcom9YZFRtMsJYX00nyGO+kyEZ26QTJdFnMV1oomizldXzjopzvibzmNi1WTVL7WShUtn6Vc7Ugbvhwbp//57fcAACAASURBVJQfW43lg/4Nflq4An8PsNc+gO2i02Cn3YTTZOMUmev04UsBL30ATueXKwinuAHZ//9wcYGf3lzlc4f7uLaU483pDJfnu/kffvXJDX2TzvVI0E8yHCCiBe6p4TiL+RqndDpimWsnU6qSytfJlKqb9i1dqGPbqoWNqaVn02XWSjVm04q2WW00iQb9VBtKIMv0zE6rnf/r9dvcSJVZzVfu0fTX4fTsHvTvbDfgCvxHEDvtQ9hLbclpsnGiaTpNEFLASx+A0/mdtFCn7Zfmc8xlKlyazzGfrZCvNLitWTOStZKvmMxnygxrXvxXzwwzkAi1+h4L+emJBFoaeX8sxEygTH9Mafi1JgT8BrrA1Ya+vfL4EH9xeZWfO6nMRtImH/CpgugBXRBFJrKT6ZmdxioW8uMxjI8NetuOQO80R9PDAlfgP4LYaR/C/dSkOtXQnWiaElKrdWLhyPM7afRONnp5f6dHk+SqJqdHk0z2Re7JlSNTPysn+V1nuWTRrBRqVM1Gy6QjaZTPTvZQb9o8q0sgynv59WcnODSQbAnwxWyZd+9kiQWUgP/C8X4Mj6cVWSvHbrgrwtm22gBOY/W3Pn/oHif0TioWTs/lYYUr8B8AdKp9dJpd80HCdrU8p/23mwraqdpXp07nXzgzwqnRu0ycZw71t/6WTlPFdrnLepEsGpmZU0JWuPrT9+b4wZUUS5kSv//zpzZo9KlijVqjSUqXAZSsIfkeShOQ01hP9sf5isf7sWO1k1r5g/xNdAJX4D8A6FT76DSB2IMEpw9zrymvG+zeHTp1t+Lt31jO38Nzl05TA8DWLUoDf69NA5c8eHltydP/0dUUC9kKP7qa4vd/fuMEU6rWmV4tcbR/c/+DPL+kiTpp2Z3+7uTZv3YtxTszazx9sIdfeWrsgf4mOoEr8B8AdCqEHmRtxemjdfow7/fS3Cn3j9SyOxHwEt+/uMCF2Rwr+Qq/+/LGZGe5ikmqWCWnK1pdWcxzK1WkX/PapYYurx32qf4e7ls3sYRZzNdak5dMFT2XrRPye5nL3k193Q45+TnFZzj5hpzaTp59qlilXLdIFatb7vewwRX4DwB22mxxv9GJ5rVdgb3dya7T3DtOAlwGF3Ui4CXK9Sa5iklZl5CSk8taqU7VtFjT/clVTBqW1ZoAZF/ktWVytOcP91O3PDx/WNnkSzWTlXydUk2d7zOHuljIVvjMoa5N+yv7JycoJ/Ncp787efZblY58mPGJBb5hGL8GvGrbdsEwjP8WeAr4H23bfnfXeveIoNNgngcNnQjx7aY33u5kJ4WGU+4dJyEjef3b6d9jI0kqpsVjIyo5mRyr8d4oq6Ua472KtfPcoV7qTdWCSpVweTHXMsHI904mR5PJ11YKNWptTt9qA44MxNDp9TdA9s9phXE/vwMnZ/zDik40/H9o2/b/axjGC8ArwB8A/wR4bld69gih02CeBw2daF47WT/300AKZKfkaHJ/acJxQifPWkaWyrGSrBuZnvjVS0vcXC7w6iUVxSrfO4/Hy8nhZCtzp0y+Jp2+TsnQZP+cVhjb/Q4eFabNdtCJwF//An8R+Ce2bX/XMIz/fue79OjBKZjnQUcnWu1e+x+kkOlUE5RCzcmx2MkE4ZRbXyYvkxp1TzSI31umR9M0JY9fVoGSqxOZr146gSXks5Tnk9jud7DVu/OwKVGfFp0I/HnDMP5P4OeAf2QYRhDw7E63Hi04BfM8Sthr/8N2J1sp1Jwci3KC2Mqs4ZRbXyYvk6yaX5s6wHhfrCVQJY9favRyApG/nbKidhqvIeMGZDpnJ2x1/odNifq06ETgfwP4eeAPbNvOGoYxDPxXTgcZhtEF/DPgNKq65d+0bfuNT9PZRwV7LfQeZux2jEKnjkWZTmArs4YU8FIgyshZG8BolZTdIFBl4JScrOQEImvOyuRsTmPrlIPJiSa6HS19u76hhwWdaOjDwL+3bfu6YRhfAn4NOPcJjvvHKGfvCeAJ4HLHvXThYofw+vUU33lvjtevp/a6K8C9jkxQ5oyRrvAGs8a6oOuO3hXI7QIRVHnGk8PJVnnGeMjPWHeYuEhNMK1z3cyky6wUKszo372x4D1ZJQfiISIBb6ugOljMZSuAKoAyvVpiOV9herW06fnTxRrv3MmQ1oFZcvv7s1nOT6d5fzYLsOH+5FjI/SVuLOf5w7fucGM5v2HbXvuG9gs6Efj/FmgahnEE+OfAJPCHWx1gGEYC+ILeH9u267Ztb/60XOwY5Ie219hP/ZFVmCSkUOoU8l7l74tzWd6eXuPinPoMpElHauHJkJeVQrVlRmkXyMcGophN+64NXq4A7CYfLeax7XtXBLYuaGJr3X+9lX21rCbTq6VWAZTVQp16o8mqTn5WNZsUa81WDdv2vm42llKgy3uXkGPhtP/d1VFmwzZ57UcVnQh8y7btBvCrwP9u2/bvobT+rXAISAH/t2EY7xmG8c8Mw4h+yr66+ITYrtDaaeyn/pw90EVfLMjZA5tzx7crGF67luI7783y2jW1gpD3LoOPzox18cxED2fGujbdv12IS4EsK0BJgX5uOkejaXNuOgfcmx0T4GBvlMFEmIOaximv/ePraSpmkx9fT+u+31sNrFJvUDEbVOqKlylXK3Is5YTldO/yt9xfQq4I2iGv/aiiExu+aRjGbwC/DfyS/j+nku8+FF//79q2/ZZhGP8Y+K+Bf7i+g2EY3wS+CXDw4MEOuuPi47DfnL77qT9SSDqhU7uxjOCU9y6LwzjZ+Nttz9LGLe3Sr99Ic3UpT9jvYWqyj5dP9t+TfCzk81KqmYR0NkuZikGeT1acenwsSbVh8fiY4ul7PF66IoEWjVM6iZ18UXK7UzI1p/Nth1v/qLB4OhH4vwP8beB/sm37tmEYk8C/djhmDpizbfst/fvfoAR+C7Ztfwv4FsDU1NQnKIrnwgk77fTdzaLp9/tD6zR5WafsDhnB2SlTRW5vZ8Ic6A5vydK5655VrayAlQz76Y+FSIaVnlY2m0RDPsraJCNpnOO9MZ6b7GW8V/HuJQ3zldMD1CyLV04P3L1qm5O4UzglnttNPCosnk8s8G3b/sgwjP8SOGYYxmngqm3b/4vDMUuGYcwahnHctu2rwEvAR9vrsov7jd38GLZ77k6ZIZJa6JRuudPVibQ7bxfzmTIXZjLEAh5smy0jVb96ZoSBxOYmDdhYoUpOTtJGLhlDUiCXahaJoJ9STTlxpZO402fTKQ1zJ7GfVqG7iU5SK3wJ+JfANGoVeMAwjL9u2/ZPHA79u8D/YxhGALiFWim4eICwmx/DTue+cdouhVin+Vy22x8nSB5+xWwSDfqomE1Hp6WTSUPmspH7S1qmDMySz0oWHZfmqk6fzXZpmNtZLT4qVOhOTDr/K/AVraljGMYx4I+Ap7c6yLbtC8DUp+6hiz3Hbn4MO537xmm7kxDrFJ0WZHE6Xk5I7Vp4dzR4j0B2Eqhy8pAaupOAlP4O+azCPg/lepOwz7PpdqdU0U7PZqfTgrvoTOD714U9gG3b1wzDcHLaungA8CA7rDq1iXfqtHXCdguyyNQKMr1Au4moU4EqJw8pYGUNXCensMRcpkymXGMuo1g0coJ561aa166nsS3rE62m5LPpdPJ0Uyv8/+2df5BcV3XnP0c/bM2MJevXWLZ+yzY2NjL+wdgJscsFGFgCrENICu8W+I9UqrzFuhJDSKiw2a1UsrVVSbGVIpXaJGihgpcAKWLjKkM5BCfBGBMwlowt29gYLMuyfs7o50gazWg0PvvHeyP1HLX66s7r1+92v/Opmprp6dfvnX4z/b3nnnvuOWFiBH+ziHwR+HL++KPAlvab5HSabvaMYj/IoVIHsdjzxdpjwzQ2zPLEz0fY/NohhtYt4bY3DbasvW8F3A4eVmB3HhzjmR0HGZifeehW4EOlEyZOwYXz5jKRV8u0A8zP9h3lyPhJfrbvaNN7FbqXsXhphTAxgv9x4F7gd8li+I8Df12GUU57SbnlYezCniX2gxxKgwyV6LX22PPF2hMqKPbq/uO8fnCMZQMXsHDB/BmzAWt74wIvhGP6L+8d5ZXh4wwOZE3F7QBii6nZ926zdOwAc+f1K2ekhcZiB7Ai1GVRNsR5Cb6IzAW+qKofA/6iXJOcdpNyy8PYhT1Lu+vnh+rfh+xpt7CsXzbAgeMTrF82ECwv3LjAez6Mn5riwnnC+KmpprbbYmpWgBcP9PEf37qKxfmAYbE9aUP3zoa3Qh2yYp2FOnv205yX4KvqlIgMisgFqtq8n5mTLCl7N0Wn+e2ukRKqf1/0Xm5+df9pr3dow/KgCNoa942zAStoNs3Szlbs8XfdvHaGB25F0RZ2swJs0yi/+ewent15mH1Hxvnke8+O2YfCX3ZAs1k/llDp6ZTCOKk0OYoJ6WwHfiAiDwPHp3+pqu7xJ07Iu6lyQSt20dVSNCvGEsqjD9kTEplHXxxh56ExHn1xhKENy4P2N17P1iKyHvfhsZMzslzsbMV60NYDt6JkN2JZAX56x2H2Hx3n6R2HGdqwHJFsJJj+Htopa+9VbHew0HpMSo5OaObYKWIEf3f+NQdYWI45ThWk5AnF0u48+ZDXGCIUYrJtBGMGYyvYdtH14Wf38IvhY5w4eYqhDcvPmq2EmrNYD92WSrCb1gYumMvxiSkG8vLK161axKsHxrgur9YZem/2XsU6JqH1mJTCOKGZY6eI2Wn7J2Ua4lRHJz2hTs8mYvPk7fOxLQtDISbbRtBivexGUbaCPX5qioEL55+OwV+94iL2jU5w9YqsFEJoY5UV3PGTpzhy4iTjeTE0uzPXeqkrl/Rzw7o3WLkkO9++o5OsWdLPvqOTwft0PvfKkvJaVIhUeujG7LT9JmeXyTgCbAY+r6rN6806ydPJD0qnZxOxefJn5YYHdrfGDig2Dm5fb5uONIry+mUzBXv5wHyGR8e57YrMa7Q9bEPv7YXdo7y4Z5SBC+Zy5YpFXLPyYsZOTXFN3iTdhnDsxig7gKxYOJ8nXz3AjWvOT9hiU1rbHb6rIzEhnW3AINnuWoC7gH3AVcD/Be5ur2np4v9Is6fTnYeKzl5CaZOxA4oVUTuDuGThAnYcPHG66UijF7zEFBb/4bZDHBo7yQ+3HeLX37YuuJPWPt42kqV8Lu3PsmzsAnFoY5R9ftv+MebNmcO2/WPccd53+Nz30tLu8F0diRH8G1X19obH3xSRx1X1dhF5od2GpYz/I82eTnceKjp7sa8vWkohNIN4y8pFHD85xVvyipSN57f/d4v75jF/rrC4L/sY28E0VPnz8sEBDo6d5PLBgaa2WULv9Y2pN3j94BhXDZ7fvfj+yyNs2XGQt61dyoduWt12ZyClRdtUiBH8QRFZq6o7AERkLTBde7VWqZr+jzR7uu3ehVL9ig4odgbRqkRwtmh6RhA/cvNa1g8uPB3Csa+199qmUd72pkFWLx04598iNs9d5sxhzZI+ZE7zvkr2eNs7oN3OQDtDlb0yq48R/E8BT4jIK2Q7bTcA/zXvYHV/GcalSsqLQynQ6sNR9N6V/cELCXy7B6xQpkmrJuY2hTSUpWKrUdqsm1YLxs3uhX38rjdfwkULzuwDsPfShq/svoGUnYFemdXHZOk8IiJvAt5MJvgvNSzUfk5E3qOqj5ZhpNNdpFw/P/b8Vaf6/eDnIzy1/RA3r1/CtSsXtQzZvDpy9PRGqmYxe5saaLNuvrV1D8+8fpjh0XE+8Z6zi62FvtsByAr8nsNjPP3aYS7K0zjt8SnvF0l5MIohxsNHVSeAZ8/x9J8DLvhOqR+Osj94sbnh7caK+N7RccZOnmLv6Dirlg7M8PCtrd/cupuX9x1nfHKSoQ3LzxJcmxpoB4Dj41la5vHxU01ti910ZtcnRo5NMHFqipF8A1nsnocqvexemdVHCX6AcySuOXUj5sMRyiQpcu7ZEIojh+wruoXeDmg3rV3MgeOT3LR28VkxeGvrlYML2Tc6wZWD2b7I3YfH+MmOw6c3Rlnb7ACwcfXFjE+9wca8Z60V2FDIx9pu1yfWL7uIA8dPsj5vmRjaKRu6N0487RR870dbE9o5tQ7FhVPreWvLGYRq0Mfab+PqjamQW7YfmFHKwNr6/reu5NpVixvi/ycZn5ziwLHsfoa299sMITuDCNXXt9jB2aZ9WlzQy6edgu90KbGi1M6pdSguXPY0PrRd32I3Tln7bJgk1n4rqo2ie+miBbx+8ASX5qUOrK328bplA+w/PsG6ZVnaZWh7/1nlkc3jUH392Dz62IynToZ0eiUrx9JOwd/exnM5HST2g9ROTywkWmV7fbHv3W6cst9tmCRkf2hhtVF0r125iGMns+/nw8ZVixibnGJjXtsmVBjO2mo9/NDrQx24QtdLqW9Dr2TlWGJKK3y4ya+PAM+p6rCqNnve6QKKbh6yxMbli1yrKEXfe2hjVuj5R7bu5gev7OfWK5Zz969saDlgbD8wFrW+YDtWxTYUsR5+SARtqYZYjz9kXycXTns1vBTj4f828Hbgu/njdwA/Aq4SkT9V1S+f64VOZ4kV2HZ/kEJx+SqJDeGEXh9bg90+//yuI+w8dILndx0JXjvkQVvBtOEn28HKYl8f8vgtL+w+wvO7jtA3fw6/duPqaNEMNTxpJ1UnB1RFjOC/AVyjqvsARGQF8DfAL5G1O2wq+CKyHTgKTAGnVHWoiMFOmKoFNhSXL0LR2GrRexNq/B16r/b5jasu5sj4JBtXXdz0+MaetqtNWqa1xQr62qV97B0dZ+3STKDnCKCSfW/C6IlJdh0a47JFzfPiQxlM/RfM5eK++fRfMLsG8dbeMqn6M1IVMYK/flrsc4aBq1T1oIiE6qG+U1X3x5vnzIaqp6OhsEcRin5Qi94b64UWPd/br1jG3Llzzrk7dfjoOGMnpxg+Os5bzMYra4ttSWhDOrbcsWXhgvmsXtLHwvz52LpB65b2seW1w6xb2nxjWGh21Mk6S1V/RqoiRvC/LyLfAv4xf/ybwON5aYXDbbfMcZoQ+0EtGsKx2EXbUOZJKOxiRc5ulrp8eT/P7x7l8uVnl1ZQneKne0a5crB53rsdEKzt1jb7vH0vz+w4wMNb93LnWy/ljmtXnnVvXto3xqK++by0bwyIL+bWyUqqvRqyCREj+PcCHwZuI9tkdT/woKoq8M4Wr1PgO5L1Pfu8qm5qfFJE7gHuAVi7dm2EOc65SHm62ul0t9h7ERvbDXnBocbc9ni7O7Wxqci6ZRfNEMTvvbyf4dFxvvfy/qYCHDs4hTKkHt66l12HTvDw1r1Nr/eeawZn9Mi1i7ihUF+nK6nWkZhaOioiT5BVxlTgx7nYh7hVVXeLyCXAoyLykqo+3nDeTcAmgKGhId+81QZSnq4WHYzKTiGNPX9INGMbc1svvTFN0wri1SsWMjx6kqtXLJyV7bEbp+5866WnPfxmDG1YztCG5acfN4ajzuf8oTTNVBqBdzMxaZkfAT4LPEbm4f+ViPyBqj7Q6nWqujv/PiwiDwG3kC3yOiWR8nS16GDU7hTSoucPHR9qzB0aMBrTNH+xb3SGh/++61by5pVndtbakEhoV3Dsvbnj2pVNPftzYathFt2YlUoj8G4mJqTzR8DNqjoMICKDwL8A5xT8PL4/R1WP5j+/F/jTAvY6XU7RwajswSx2j0HoePu89VKtSNvnG69nF2FDWTShXcFlEyrfHMIen0oj8G4mRvDnTIt9zgGgeaeDM6wAHpJsPjsP+KqqfjvORMdJh5BohtYArJdqRdo+33g9m3YZWj+w4aNOt5cs2izGHh/a6euEiRH8b4vIPzOzp+0jrV6gqtuA62dpm+MkR0g0QwOCbQQe8mIbr7fL5NGHBNU+tjOEooTSLNu9lhS7U9g5m5hF2z8Qkd8AbiWL4W9S1YdKs8zpGXqpEFUokyQkcqFG4NaLbbyezaMvupM1tAgaW5++3e0fQ/Y78cQ2QHkQeLAkW5wepZuqHIZEsOxFZ5vG2ejhr1/WOsMnhA3xhBZBY+vTlx0yCmU4OWGCgi8iR2le617IsjV9ubxmxIpqmWmisbVsYmPslpDXGpuJYrFpnDsOnuDo+CQ7Dp5ZqD3fa4UILYKGBNy+F2tru0k5+6xbCAq+qi7shCFO9xArNGV+UGNr2YRsL5oJUnQnsE3jtANAq2sVLexmid0IdXR8kp2HztTrD71Xp/N4AxQnmpQ2dllbQoNLyGu15YljiR3cQnFvOwC0ulYopm7vVWg2E/t3XtQ3n1VL+lnU17xWT5U7wH2wyXDBd6JJaWoda0vR7fvtrPUP8btdW9liB7PQudud195qcDofe8ok5XIjncQF3+kqyhbYEO2u9V9k8LTXDg1m9vhQXnvsekhKjoAlpVlplbjgO11Fpz21UG55lUISsiUU0onNwrHYjKIQVXrZKQ9GncQF3+kq2u2hxx4f2tzUyVhxyJbQ+kZsFo6l1YIyhENOTudxwXe6iqKeWqzohAaYopkwZRK6V6EQUGjwCsXsY0NOTvm44Du1IlbkYvPuYweImOdjZw+h40O2Fi1lkFL4y7N0MlzwnVpRNE8/dL5QiCe2yXkj7Y6ZhwazUCmDlPZjhEhp5lUlLvhOUpTtiYVEp6iHbomdAbQqlxyKmYfOFUuolEG7B88y//a+fpDhgu8kRdWeWGwIJ2SvFZrQ+W15gu/+bJiX9h7j+MQkH75pTcuYuSU2fFW01r8lNoRT5t/e1w8yXPCdpKg6XzrkZYY2N9nX25LEofMfG59k58ETXJaXJ1gwby7HJyZZMG9udEgk1gNvd/nhdttbhKr/r1LBBd9Jik7HeWNj7NZTDJU3sE1LQue3JZBXL+3nhsmlrF7aH73gG+uB93L5Yc/Dz3DBd2pNbIw95NGfVTK4fz6rlgxwcf/51bC3cfM1S/rYc2ScNUv6Ci34NrPVimCnyw+nnNLaq7jg9yBFUv/qRmzxNfu8zZyxzzcK9mzO3zijiF3wtRTN2mk3sYOtUxwX/B6kqCdYJ0IiFxocQ5kzRRcLG0Ww6Eaq0OykbEKzIQ+7lI8Lfg8SG5aIpU4zhNDg2O4KkUUKktlr2e5dofWGsim7BaITpiOCLyJzgc3ALlX9YCeuWWeKptOFqNMMISTYRe+lFfiYzVWhwaExpbOMdo2xlH29Ojkis6VTHv59wIuAt0PsAeq0Rb7swdE+H7O5yr7W3ptLFi5gx8ETXLKweQeq0K7gdt/rsj36Ojkis6V0wReR1cAHgP8F/F7Z13PKx7fInz+x4bVWIaJQ9UmbR3/bmwZZvXRg1hufeu1eO53x8D8HfBrw3rhOYbrtQ93O8Fqo+qTN+S+68andZSbKfr2vCYQpVfBF5IPAsKpuEZF3nOOYe4B7ANauXVumOU4P0Osf6lZedUiQbc5/LPbehu510RlA0Z293TYDSYGyPfxbgTtF5P3AAmCRiPy9qn5s+gBV3QRsAhgaGurBPX5OnYn1Ylt51SFBDmUMtTsmX3S2VXRnb7fN9lKgVMFX1c8AnwHIPfzfbxR7x+l1ipYQjqmPX7ZHHrI1FruzN3ZAirlXTobn4TtOiRT1QluJdNHa/VXT7n0BHuIJ0zHBV9XHgMc6dT3HSYGiXnArkY6t8Z76+kfRASm1AS1F3MN3nIRpJdLtrvHe7SGR1Ae0FJhTtQFO93Hg2ARbXjvEgWMTVZvSc8Tc2/XL+lkyMPvqlvZa0yGR7QfGCts2G0LXd4rjHr4TjcdKz9Burzjm3hYt/BZbrbLsv7uHZMrHBd+Jpk4fzFjRLHq+dt7bkG2hapWh6pbtxrNuyscF34mmTrHS2J61Rc8Xc2+LDh6xaZyd/rv7TLL9uOA7taaoaMYunBbxkmM7RJWZIdQJqr5+L+KC79SaoqIZK0pFRLjTHaKKrhGUfX0nHhd8p9YUFc12i1IrES3aIarKBWYnDVzwnVqTmhfZSkSL2tpugY5dv3CqxwXfcRKizDBNu8/d7o1fTvm44Du1IjasUXacupM13dt9bl9U7T5c8J1aERvWiOkx2wl7UiK1cJgTxgXf6WraWW++GTE9Zjthj+MUwQXf6WqK1psPEWoq0ml7UsJ3wnYfLvhOV1N1Lnqn7UmJbg5H1RUXfKerSc1DTs2eMqnT4NYruOA7jjMr6jS49QpeD99xehTvW+BYXPAdp42kJLLeUMSxeEjHcdpISguZHmN3LC74TtJ0W+pfSiLrMXbHUqrgi8gC4HHgwvxaD6jqH5d5Tae3SMljPh9cZJ2UKdvDnwDeparHRGQ+8ISI/JOq/qjk6zo9Qkoes1Mu3Tab60ZKFXxVVeBY/nB+/qVlXtPpLdxjrg/dNpvrRkrP0hGRuSLyDDAMPKqqT5rn7xGRzSKyeWRkpGxzHMdJlPXL+lkycP5lLJx4Shd8VZ1S1RuA1cAtIrLRPL9JVYdUdWhwcLBscxzHSZRlF13I29Ytce++RDqWh6+qh4HHgPd16pqO08uklPPvdAelCr6IDIrI4vznPuDdwEtlXtNx6oJvrHJiKTtL5zLgfhGZSza4fF1Vv1XyNZ2K6aVsi5TfS2oZTCnfKyej7CydrcCNZV7DSY9eyrZI+b2klsGU8r1yMnynrdN2UvM8i9BL76Vs/F6ljwu+03ZS8zyL0EvvpWz8XqWPV8t0HMepCS74juM4NcEF33Ecpya44DuO49QEF3zHcZya4ILvOI5TE1zwHcdxaoILvuM4Tk1wwXccx6kJLviO4zg1wQXfcRynJrjgO47j1AQXfMdxnJrggu84jlMTXPAdx3Fqggu+47QRbyzupIw3QHGcNuJt/pyUccF3nDbibf6clClV8EVkDfD/gEuBN4BNqvqXZV7TcarE2/w5KVO2h38K+JSqPi0iC4EtIvKoqv605Os6juM4hlIXbVV1j6o+nf98FHgRWFXmNR3HcZzmdCxLR0TWAzcCT3bqmo7jOM4ZOiL4InIR8CDwCVUdNc/dOEv1twAABs1JREFUIyKbRWTzyMhIJ8xxHMepJaULvojMJxP7r6jqN+zzqrpJVYdUdWhwcLBscxzHcWpLqYIvIgJ8EXhRVf+izGs5juM4rSnbw78VuBt4l4g8k3+9v+RrOo7jOE0QVa3ahtOIyAjwWoUmLAf2V3j9VqRsG6RtX8q2Qdr2pWwbpG1fJ21bp6rBmHhSgl81IrJZVYeqtqMZKdsGaduXsm2Qtn0p2wZp25eibV48zXEcpya44DuO49QEF/yZbKragBakbBukbV/KtkHa9qVsG6RtX3K2eQzfcRynJriH7ziOUxNqL/giskZEvisiL4rICyJyX9U2NSIiC0TkxyLybG7fn1Rtk0VE5orIT0TkW1XbYhGR7SLyXL4HZHPV9jQiIotF5AEReSn//3t71TZNIyJXN+ydeUZERkXkE1XbNY2IfDL/PDwvIl8TkQVV29SIiNyX2/ZCUvet7iEdEbkMuKyxhDPwoVRKOOe7lQdU9VhepuIJ4D5V/VHFpp1GRH4PGAIWqeoHq7anERHZDgypanK52iJyP/B9Vf2CiFwA9Kvq4artsojIXGAX8EuqWuU+mWl7VpF9Dq5V1RMi8nXgEVX9UrWWZYjIRuAfgFuAk8C3gY+r6s8rNQz38JMv4awZx/KH8/OvZEZpEVkNfAD4QtW2dBMisgi4naz0CKp6MkWxz7kDeCUFsW9gHtAnIvOAfmB3xfY0cg3wI1UdU9VTwPeAX6/YJsAFfwaplnDOQybPAMPAo6qakn2fAz5N1tEsRRT4johsEZF7qjamgcuBEeDv8nDYF0RkoGqjzsF/Ar5WtRHTqOou4H8DO4A9wBFV/U61Vs3geeB2EVkmIv3A+4E1FdsEuOCfplUJ56pR1SlVvQFYDdySTxkrR0Q+CAyr6paqbWnBrap6E/CrwL0icnvVBuXMA24C/kZVbwSOA39YrUlnk4ea7gT+sWpbphGRJcCvARuAlcCAiHysWqvOoKovAn8OPEoWznmWrPtf5bjgEy7hnAr5lP8x4H0VmzLNrcCdeZz8H8iK5P19tSbNRFV359+HgYfI4qopsBPY2TBbe4BsAEiNXwWeVtV9VRvSwLuBV1V1RFUngW8Av1KxTTNQ1S+q6k2qejtwEKg8fg8u+MmXcBaRQRFZnP/cR/bP/lK1VmWo6mdUdbWqrieb9v+bqibjaYnIQL4QTx4ueS/ZdLtyVHUv8LqIXJ3/6g4giUQBw38moXBOzg7gl0WkP//83kG29pYMInJJ/n0t8GESuYdlNzHvBqZLOD+Xx8kB/puqPlKhTY1cBtyfZ0rMAb6uqsmlPybKCuChTBOYB3xVVb9drUkz+B3gK3nYZBvwWxXbM4M8/vwe4L9UbUsjqvqkiDwAPE0WKvkJ6e1qfVBElgGTwL2qeqhqg8DTMh3HcWpD7UM6juM4dcEF33Ecpya44DuO49QEF3zHcZya4ILvOI5TE1zwHcdxaoILvtO1iMi/F3z9sfz7O1Is7ew47cYF3+laVDWp7fSzId9Q5zgdwQXf6VqMh/49Efm6iLwsIn8mIh/NG8c8JyJX5MdtEJEfishTIvI/zekWichDIvJTEflbEWn62cgrl34pb27xnIh8Mv/9lSLyL3mjmqdF5ArJ+GzDsXc12PtdEfkq8Fz+u4/l9j4jIp/3gcApAxd8p1e4HrgPuI6sVMZVqnoLWZ3+38mP+Uuy6pQ3A3vN628BPpW//gqy+ifNuAFYpaobVfU64O/y338F+D+qej1ZIa89+TluyG17N/DZvOHO9PX+SFWvFZFrgLvIKnveAEwBH53dbXCcc+OC7/QKT+XNbCaAV4Dp+ujPAevzn2/lTBGrL5vX/1hVt6nqVH7Mbee4zjbgchH5KxF5HzCaF2hbpaoPAajquKqO5ef4Wl7eeh9ZI4ybG673av7zHcDbgKfyek53kNXLd5y24sXTnF5houHnNxoev8HM//NzFY+yv296nKoeEpHrgf8A3At8BDhXz1JpYe9xc9z9qvqZFsc7TmHcw3fqxA/IyjjD2SGTW/IY/xyy8MoTzU4gIsuBOar6IPA/gJvyhjk7ReRD+TEX5pUmHwfuyuP+g2QtDX/c5LT/CvxmQ0ndpSKyrtA7dZwmuOA7deI+sq5XTwEXm+d+CPwZWb38V8mapTRjFfBYHnr5EjDtld8N/K6IbAX+Hbg0P8dWso5H/wZ8Oq+DPwNV/Snw38laMW4l65R0mT3OcYri5ZEdx3Fqgnv4juM4NcEXbR3nHIjIk8CF5td3q+pzVdjjOEXxkI7jOE5N8JCO4zhOTXDBdxzHqQku+I7jODXBBd9xHKcmuOA7juPUhP8PKqvUMl2pwY8AAAAASUVORK5CYII=\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "temp.plot.scatter(x='imdb_score', y='log_gross', alpha=0.2, s=3);" + ] + }, + { + "cell_type": "code", + "execution_count": 511, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
log_gross
countrycontent_rating
AustraliaPG8.22
PG-138.19
R8.17
CanadaPG-138.35
PG8.05
\n", + "
" + ], + "text/plain": [ + " log_gross\n", + "country content_rating \n", + "Australia PG 8.22\n", + " PG-13 8.19\n", + " R 8.17\n", + "Canada PG-13 8.35\n", + " PG 8.05" + ] + }, + "execution_count": 511, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Equivalent to the above\n", + "(temp.assign(log_gross=lambda df:df.gross.apply(np.log10))).head()\n", + "\n", + "# One advantage is that method chaining can be used\n", + "(temp\n", + " .assign(log_gross=lambda df:df.gross.apply(np.log10)) # Create a new column\n", + " .loc[lambda df:df.log_gross > 8, ['country', 'content_rating', 'log_gross']] # Filter\n", + " .groupby(['country', 'content_rating']) # Group by and mean\n", + " .mean()\n", + " .reset_index() # Reset the index to sort\n", + " .sort_values(['country', 'log_gross'], ascending=[True, False]) # Sort the results\n", + " .set_index(['country', 'content_rating']) # Re-index\n", + " .assign(log_gross=lambda df:df.log_gross.round(2)) # Re-define the column and round it\n", + " .head(5)\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## (4.6) Applying functions\n", + "\n", + "On a `pd.Series`:\n", + "\n", + "- `pd.Series.map` applies an elementwise $f: \\mathbb{R} \\to \\mathbb{R}$ function (e.g. `str`, or `float`)\n", + "- `pd.Series.apply` applies a vectorized $f: \\mathbb{R}^n \\to \\mathbb{R}^n$ function (e.g. `log`, or `sin`)\n", + "- `pd.Series.aggregate` applies an aggreation $f: \\mathbb{R}^n \\to \\mathbb{R}$ function (e.g. `mean`, or `std`)\n", + "\n", + "On a `pd.DataFrame`:\n", + "\n", + "- `pd.DataFrame.applymap` applies an elementwise $f: \\mathbb{R} \\to \\mathbb{R}$ function\n", + "- `pd.DataFrame.apply` applies a vectorized $f: \\mathbb{R}^n \\to \\mathbb{R}^n$ function\n", + "- `pd.DataFrame.aggregate` applies an aggreation $f: \\mathbb{R}^n \\to \\mathbb{R}$ function" + ] + }, + { + "cell_type": "code", + "execution_count": 512, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0 760505847\n", + "1 309404152\n", + "Name: gross, dtype: int64" + ] + }, + "execution_count": 512, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.gross.dropna().map(int).head(2)" + ] + }, + { + "cell_type": "code", + "execution_count": 513, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
content_rating
NaN2881
inappropriate for children under 131461
may not be suitable for children701
\n", + "
" + ], + "text/plain": [ + " content_rating\n", + "NaN 2881\n", + "inappropriate for children under 13 1461\n", + "may not be suitable for children 701" + ] + }, + "execution_count": 513, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Dictionaries are also maps, but brittle since no keys maps to NaN\n", + "(df.content_rating\n", + " .map({'PG-13':'inappropriate for children under 13', \n", + " 'PG': 'may not be suitable for children'}, na_action='ignore')\n", + " .value_counts(dropna=False)\n", + " .to_frame())" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0 8.881103\n", + "1 8.490526\n", + "Name: gross, dtype: float64" + ] + }, + "execution_count": 50, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.gross.dropna().apply(np.log10).head(2)" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "48468407.52680933" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.gross.dropna().aggregate(np.mean)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---------------" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
grossimdb_score
020.4494942.066863
119.5501591.960095
\n", + "
" + ], + "text/plain": [ + " gross imdb_score\n", + "0 20.449494 2.066863\n", + "1 19.550159 1.960095" + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.loc[:, ['gross', 'imdb_score']].dropna(how='any').apply(np.log).head(2)" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
grossimdb_score
07605058477
13094041527
\n", + "
" + ], + "text/plain": [ + " gross imdb_score\n", + "0 760505847 7\n", + "1 309404152 7" + ] + }, + "execution_count": 53, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.loc[:, ['gross', 'imdb_score']].dropna(how='any').applymap(int).head(2)" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "gross 4.846841e+07\n", + "imdb_score 6.469897e+00\n", + "dtype: float64" + ] + }, + "execution_count": 54, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.loc[:, ['gross', 'imdb_score']].dropna(how='any').mean().head(2)" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "gross 4.846841e+07\n", + "imdb_score 6.469897e+00\n", + "dtype: float64" + ] + }, + "execution_count": 55, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.loc[:, ['gross', 'imdb_score']].dropna(how='any').aggregate(np.mean, axis=0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# (5) Filtering and sorting" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We've already seen basic filtering. \n", + "\n", + "- `==` defines equality\n", + "- `!=` defines inquality equality\n", + "- `~` negates logic, e.g. `True` -> `False`\n", + "- `&` represents elementwise `and`\n", + "- `|` represents elementwise `or`\n", + "\n", + "Remember to parenthesize expressions, write:\n", + "\n", + "> `(df.col_A > 5) & (df.col_B <= 5)`\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## (5.1) Equality, non-equality and logical operators" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
director_namegrossmovie_titlecountrycontent_ratingimdb_score
2594NaNNaNLilyhammerNorwayTV-MA8.1
3336Nils GaupNaNShipwreckedNorwayPG6.7
3690Morten Tyldum1196752.0HeadhuntersNorwayR7.6
\n", + "
" + ], + "text/plain": [ + " director_name gross movie_title country \\\n", + "2594 NaN NaN Lilyhammer  Norway \n", + "3336 Nils Gaup NaN Shipwrecked  Norway \n", + "3690 Morten Tyldum 1196752.0 Headhunters  Norway \n", + "\n", + " content_rating imdb_score \n", + "2594 TV-MA 8.1 \n", + "3336 PG 6.7 \n", + "3690 R 7.6 " + ] + }, + "execution_count": 56, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Movies and TV shows from Norway\n", + "df[df.country == 'Norway'].head(3)" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
director_namegrossmovie_titlecountrycontent_ratingimdb_score
4498Sergio Leone6100000.0The Good, the Bad and the UglyItalyApproved8.9
270Peter Jackson313837577.0The Lord of the Rings: The Fellowship of the R...New ZealandPG-138.8
4029Fernando Meirelles7563397.0City of GodBrazilR8.7
\n", + "
" + ], + "text/plain": [ + " director_name gross \\\n", + "4498 Sergio Leone 6100000.0 \n", + "270 Peter Jackson 313837577.0 \n", + "4029 Fernando Meirelles 7563397.0 \n", + "\n", + " movie_title country \\\n", + "4498 The Good, the Bad and the Ugly  Italy \n", + "270 The Lord of the Rings: The Fellowship of the R... New Zealand \n", + "4029 City of God  Brazil \n", + "\n", + " content_rating imdb_score \n", + "4498 Approved 8.9 \n", + "270 PG-13 8.8 \n", + "4029 R 8.7 " + ] + }, + "execution_count": 57, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "mask = ((df.imdb_score > 8) & (df.country != 'USA') & (df.gross > 10**6))\n", + "df[mask].nlargest(3, columns=['imdb_score'])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## (5.2) Group membership and string filtering" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
director_namegrossmovie_titlecountrycontent_ratingimdb_score
4747Akira Kurosawa269061.0Seven SamuraiJapanUnrated8.7
2373Hayao Miyazaki10049886.0Spirited AwayJapanPG8.6
2323Hayao Miyazaki2298191.0Princess MononokeJapanPG-138.4
98Hideaki AnnoNaNGodzilla ResurgenceJapanNaN8.2
204Hideaki AnnoNaNGodzilla ResurgenceJapanNaN8.2
\n", + "
" + ], + "text/plain": [ + " director_name gross movie_title country content_rating \\\n", + "4747 Akira Kurosawa 269061.0 Seven Samurai  Japan Unrated \n", + "2373 Hayao Miyazaki 10049886.0 Spirited Away  Japan PG \n", + "2323 Hayao Miyazaki 2298191.0 Princess Mononoke  Japan PG-13 \n", + "98 Hideaki Anno NaN Godzilla Resurgence  Japan NaN \n", + "204 Hideaki Anno NaN Godzilla Resurgence  Japan NaN \n", + "\n", + " imdb_score \n", + "4747 8.7 \n", + "2373 8.6 \n", + "2323 8.4 \n", + "98 8.2 \n", + "204 8.2 " + ] + }, + "execution_count": 58, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Top three movies from Japan or Hong Kong\n", + "df[df.country.isin(['Japan', 'Hong Kong'])].nlargest(5, 'imdb_score')" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
director_namegrossmovie_titlecountrycontent_ratingimdb_score
0James Cameron760505847.0AvatarUSAPG-137.9
1Gore Verbinski309404152.0Pirates of the Caribbean: At World's EndUSAPG-137.1
2Sam Mendes200074175.0SpectreUKPG-136.8
\n", + "
" + ], + "text/plain": [ + " director_name gross movie_title \\\n", + "0 James Cameron 760505847.0 Avatar  \n", + "1 Gore Verbinski 309404152.0 Pirates of the Caribbean: At World's End  \n", + "2 Sam Mendes 200074175.0 Spectre  \n", + "\n", + " country content_rating imdb_score \n", + "0 USA PG-13 7.9 \n", + "1 USA PG-13 7.1 \n", + "2 UK PG-13 6.8 " + ] + }, + "execution_count": 59, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Movies and TV shows NOT from scandinavia\n", + "df[~df.country.isin(['Norway, Sweden', 'Denmark'])].head(3)" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
director_namegrossmovie_titlecountrycontent_ratingimdb_score
270Peter Jackson313837577.0The Lord of the Rings: The Fellowship of the R...New ZealandPG-138.8
339Peter Jackson377019252.0The Lord of the Rings: The Return of the KingUSAPG-138.9
340Peter Jackson340478898.0The Lord of the Rings: The Two TowersUSAPG-138.7
1170Andrew Niccol24127895.0Lord of WarUSAR7.6
1974Catherine Hardwicke11008432.0Lords of DogtownUSAPG-137.1
\n", + "
" + ], + "text/plain": [ + " director_name gross \\\n", + "270 Peter Jackson 313837577.0 \n", + "339 Peter Jackson 377019252.0 \n", + "340 Peter Jackson 340478898.0 \n", + "1170 Andrew Niccol 24127895.0 \n", + "1974 Catherine Hardwicke 11008432.0 \n", + "\n", + " movie_title country \\\n", + "270 The Lord of the Rings: The Fellowship of the R... New Zealand \n", + "339 The Lord of the Rings: The Return of the King  USA \n", + "340 The Lord of the Rings: The Two Towers  USA \n", + "1170 Lord of War  USA \n", + "1974 Lords of Dogtown  USA \n", + "\n", + " content_rating imdb_score \n", + "270 PG-13 8.8 \n", + "339 PG-13 8.9 \n", + "340 PG-13 8.7 \n", + "1170 R 7.6 \n", + "1974 PG-13 7.1 " + ] + }, + "execution_count": 60, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Contains the word 'lord'\n", + "mask = df.movie_title.str.lower().str.contains(\"lord\")\n", + "\n", + " # Gross better than 25 % of the movies\n", + "mask = mask & (df.gross > df.gross.quantile(q=[0.25]).values[0])\n", + "\n", + "df[mask]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# (6) Split-apply-combine and pivots" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## (6.1) The groupby operation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![](https://data36.com/wp-content/uploads/2017/06/SQL-GROUP-BY-clause-768x540.png)\n", + "\n", + "*Image source is https://data36.com/sql-functions-beginners-tutorial-ep3/*" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
countryimdb_score
0USA7.9
1USA7.1
2UK6.8
3USA8.5
4NaN7.1
\n", + "
" + ], + "text/plain": [ + " country imdb_score\n", + "0 USA 7.9\n", + "1 USA 7.1\n", + "2 UK 6.8\n", + "3 USA 8.5\n", + "4 NaN 7.1" + ] + }, + "execution_count": 61, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[['country', 'imdb_score']].head()" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
grossimdb_score
country
Afghanistan1.127331e+067.4
Argentina7.230936e+067.5
Aruba1.007614e+074.8
\n", + "
" + ], + "text/plain": [ + " gross imdb_score\n", + "country \n", + "Afghanistan 1.127331e+06 7.4\n", + "Argentina 7.230936e+06 7.5\n", + "Aruba 1.007614e+07 4.8" + ] + }, + "execution_count": 62, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.groupby(df.country).mean().head(3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Directors with the most movies." + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
movie_title
director_name
Steven Spielberg26
Woody Allen22
Clint Eastwood20
Martin Scorsese20
Ridley Scott16
\n", + "
" + ], + "text/plain": [ + " movie_title\n", + "director_name \n", + "Steven Spielberg 26\n", + "Woody Allen 22\n", + "Clint Eastwood 20\n", + "Martin Scorsese 20\n", + "Ridley Scott 16" + ] + }, + "execution_count": 63, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(df\n", + " .groupby(df.director_name)\n", + " .nunique()\n", + " .movie_title\n", + " .nlargest(5)\n", + " .to_frame()\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## (6.2) Several groups and aggregations\n", + "\n", + "A group can be a combination of columns, e.g. [`country`, `content_rating`]." + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
imdb_score
countrycontent_rating
AfghanistanPG-137.40
ArgentinaR7.60
Unrated7.20
ArubaR4.80
AustraliaG6.30
PG6.42
PG-136.55
R6.43
Unrated6.30
BahamasR4.40
\n", + "
" + ], + "text/plain": [ + " imdb_score\n", + "country content_rating \n", + "Afghanistan PG-13 7.40\n", + "Argentina R 7.60\n", + " Unrated 7.20\n", + "Aruba R 4.80\n", + "Australia G 6.30\n", + " PG 6.42\n", + " PG-13 6.55\n", + " R 6.43\n", + " Unrated 6.30\n", + "Bahamas R 4.40" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.groupby(['country', 'content_rating']).mean().imdb_score.round(2).to_frame().head(10)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Serveral aggregation functions may be used. \n", + "Below we see directors and their `average`, `max` and `min` imdb_scores." + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
meanminmax
director_name
A. Raven Cruz1.91.91.9
Aaron Hann6.06.06.0
\n", + "
" + ], + "text/plain": [ + " mean min max\n", + "director_name \n", + "A. Raven Cruz 1.9 1.9 1.9\n", + "Aaron Hann 6.0 6.0 6.0" + ] + }, + "execution_count": 65, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(df\n", + " .groupby(df.director_name)\n", + " .agg(['mean', 'min', 'max'])\n", + " .imdb_score\n", + " .head(2)\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
meanspreadnunique
director_name
Adam McKay6.9166671.56
Adam Rifkin6.5000000.62
\n", + "
" + ], + "text/plain": [ + " mean spread nunique\n", + "director_name \n", + "Adam McKay 6.916667 1.5 6\n", + "Adam Rifkin 6.500000 0.6 2" + ] + }, + "execution_count": 66, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def spread(series):\n", + " \"\"\"Custom aggregation function.\"\"\"\n", + " return series.max() - series.min()\n", + "\n", + "\n", + "(df\n", + " .groupby(df.director_name)\n", + " .agg(['mean', spread, 'nunique'])\n", + " .imdb_score\n", + " .loc[lambda df:df['nunique'] > 1, :]\n", + " .head(2)\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
imdb_scoregross
meanstdmeanmax
countrycontent_rating
AfghanistanPG-137.400000NaN1.127331e+061127331.0
ArgentinaR7.6000000.7937257.230936e+0620167424.0
Unrated7.200000NaNNaNNaN
ArubaR4.800000NaN1.007614e+0710076136.0
AustraliaG6.3000000.7071074.245900e+0766600000.0
PG6.4181821.1443935.703676e+07257756197.0
PG-136.5454550.7216146.369501e+07174635000.0
R6.4307690.8422682.382520e+07153629485.0
Unrated6.300000NaN2.651070e+05265107.0
BahamasR4.400000NaNNaNNaN
BelgiumR5.3666671.5011111.357042e+061357042.0
BrazilR7.7666670.7737363.385652e+067563397.0
Unrated6.100000NaN2.026200e+0420262.0
BulgariaR6.100000NaNNaNNaN
CameroonNot Rated7.500000NaN3.263100e+0432631.0
\n", + "
" + ], + "text/plain": [ + " imdb_score gross \n", + " mean std mean max\n", + "country content_rating \n", + "Afghanistan PG-13 7.400000 NaN 1.127331e+06 1127331.0\n", + "Argentina R 7.600000 0.793725 7.230936e+06 20167424.0\n", + " Unrated 7.200000 NaN NaN NaN\n", + "Aruba R 4.800000 NaN 1.007614e+07 10076136.0\n", + "Australia G 6.300000 0.707107 4.245900e+07 66600000.0\n", + " PG 6.418182 1.144393 5.703676e+07 257756197.0\n", + " PG-13 6.545455 0.721614 6.369501e+07 174635000.0\n", + " R 6.430769 0.842268 2.382520e+07 153629485.0\n", + " Unrated 6.300000 NaN 2.651070e+05 265107.0\n", + "Bahamas R 4.400000 NaN NaN NaN\n", + "Belgium R 5.366667 1.501111 1.357042e+06 1357042.0\n", + "Brazil R 7.766667 0.773736 3.385652e+06 7563397.0\n", + " Unrated 6.100000 NaN 2.026200e+04 20262.0\n", + "Bulgaria R 6.100000 NaN NaN NaN\n", + "Cameroon Not Rated 7.500000 NaN 3.263100e+04 32631.0" + ] + }, + "execution_count": 67, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "funcs = {'imdb_score': [pd.Series.mean, pd.Series.std], 'gross': [pd.Series.mean, pd.Series.max]}\n", + "\n", + "df.groupby(['country', 'content_rating']).agg(funcs).head(15)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "https://github.com/highcharts/highcharts/blob/master/samples/data/world-population-history.csv" + ] + }, + { + "cell_type": "code", + "execution_count": 77, + "metadata": {}, + "outputs": [], + "source": [ + "df_world = pd.read_csv(f'data/world_population_history.csv')" + ] + }, + { + "cell_type": "code", + "execution_count": 81, + "metadata": {}, + "outputs": [], + "source": [ + "df_world = (df_world\n", + " .drop(columns=['Country Name', 'Country Code', 'Indicator Name', 'Indicator Code'])\n", + " .dropna(axis=1, how='all'))" + ] + }, + { + "cell_type": "code", + "execution_count": 83, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Data SourceWorld Development Indicators19601961196219631964196519661967...2006200720082009201020112012201320142015
0ArubaABW56225.056695.057032.057360.057715.058055.058386.058726.0...101353.0101453.0101669.0102053.0102577.0103187.0103795.0104341.0104822.0105000.0
1AfghanistanAFG9345868.09533954.09731361.09938414.010152331.010372630.010604346.010854428.0...27294031.028004331.028803167.029708599.030696958.031731688.032758020.033736494.034656032.035530000.0
2AngolaAGO5866061.05980417.06093321.06203299.06309770.06414995.06523791.06642632.0...21759420.022549547.023369131.024218565.025096150.025998340.026920466.027859305.028813463.029784000.0
3AlbaniaALB1711319.01762621.01814135.01864791.01914573.01965598.02022272.02081695.0...2947314.02927519.02913021.02905195.02900401.02895092.02889104.02880703.02876101.02879000.0
4AndorraAND15370.016412.017469.018549.019647.020758.021890.023058.0...83861.084462.084449.083751.082431.080788.079223.078014.077281.077000.0
\n", + "

5 rows × 58 columns

\n", + "
" + ], + "text/plain": [ + " Data Source World Development Indicators 1960 1961 1962 \\\n", + "0 Aruba ABW 56225.0 56695.0 57032.0 \n", + "1 Afghanistan AFG 9345868.0 9533954.0 9731361.0 \n", + "2 Angola AGO 5866061.0 5980417.0 6093321.0 \n", + "3 Albania ALB 1711319.0 1762621.0 1814135.0 \n", + "4 Andorra AND 15370.0 16412.0 17469.0 \n", + "\n", + " 1963 1964 1965 1966 1967 ... \\\n", + "0 57360.0 57715.0 58055.0 58386.0 58726.0 ... \n", + "1 9938414.0 10152331.0 10372630.0 10604346.0 10854428.0 ... \n", + "2 6203299.0 6309770.0 6414995.0 6523791.0 6642632.0 ... \n", + "3 1864791.0 1914573.0 1965598.0 2022272.0 2081695.0 ... \n", + "4 18549.0 19647.0 20758.0 21890.0 23058.0 ... \n", + "\n", + " 2006 2007 2008 2009 2010 2011 \\\n", + "0 101353.0 101453.0 101669.0 102053.0 102577.0 103187.0 \n", + "1 27294031.0 28004331.0 28803167.0 29708599.0 30696958.0 31731688.0 \n", + "2 21759420.0 22549547.0 23369131.0 24218565.0 25096150.0 25998340.0 \n", + "3 2947314.0 2927519.0 2913021.0 2905195.0 2900401.0 2895092.0 \n", + "4 83861.0 84462.0 84449.0 83751.0 82431.0 80788.0 \n", + "\n", + " 2012 2013 2014 2015 \n", + "0 103795.0 104341.0 104822.0 105000.0 \n", + "1 32758020.0 33736494.0 34656032.0 35530000.0 \n", + "2 26920466.0 27859305.0 28813463.0 29784000.0 \n", + "3 2889104.0 2880703.0 2876101.0 2879000.0 \n", + "4 79223.0 78014.0 77281.0 77000.0 \n", + "\n", + "[5 rows x 58 columns]" + ] + }, + "execution_count": 83, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_world.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## (6.3) Unstacking and stacking" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's load a data set from [https://github.com/highcharts/highcharts](https://github.com/highcharts/highcharts/blob/master/samples/data/world-population-history.csv), which is not tidy.\n", + "\n", + "> (1) Each variable you measure should be in one column. \n", + " (2) Each different observation of that variable should be in a different row. \n", + " (3) There should be one table for each \"kind\" of variable. \n", + " (4) If you have multiple tables, they should include a column in the table that allows them to be linked.\n", + " \n", + "\n", + "\n", + "\n", + "Read [\"Tidy Data\" by H Wickham](https://www.jstatsoft.org/article/view/v059i10/v59i10.pdf) for more information." + ] + }, + { + "cell_type": "code", + "execution_count": 264, + "metadata": {}, + "outputs": [], + "source": [ + "df_world = pd.read_csv(f'data/world_population_history.csv')\n", + "\n", + "drop_cols = ['Country Name', 'Country Code', 'Indicator Name', 'Indicator Code', 'World Development Indicators']\n", + "\n", + "df_world = (df_world\n", + " .drop(columns=drop_cols)\n", + " .dropna(axis=1, how='all'))" + ] + }, + { + "cell_type": "code", + "execution_count": 265, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Data Source1960196119621963
0Aruba56225.056695.057032.057360.0
1Afghanistan9345868.09533954.09731361.09938414.0
2Angola5866061.05980417.06093321.06203299.0
3Albania1711319.01762621.01814135.01864791.0
4Andorra15370.016412.017469.018549.0
\n", + "
" + ], + "text/plain": [ + " Data Source 1960 1961 1962 1963\n", + "0 Aruba 56225.0 56695.0 57032.0 57360.0\n", + "1 Afghanistan 9345868.0 9533954.0 9731361.0 9938414.0\n", + "2 Angola 5866061.0 5980417.0 6093321.0 6203299.0\n", + "3 Albania 1711319.0 1762621.0 1814135.0 1864791.0\n", + "4 Andorra 15370.0 16412.0 17469.0 18549.0" + ] + }, + "execution_count": 265, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_world.iloc[:5,:5]" + ] + }, + { + "cell_type": "code", + "execution_count": 266, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
CountryYearPopulation
0Aruba1960-01-0156225.0
1Aruba1961-01-0156695.0
2Aruba1962-01-0157032.0
3Aruba1963-01-0157360.0
4Aruba1964-01-0157715.0
\n", + "
" + ], + "text/plain": [ + " Country Year Population\n", + "0 Aruba 1960-01-01 56225.0\n", + "1 Aruba 1961-01-01 56695.0\n", + "2 Aruba 1962-01-01 57032.0\n", + "3 Aruba 1963-01-01 57360.0\n", + "4 Aruba 1964-01-01 57715.0" + ] + }, + "execution_count": 266, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_world_tidy = (df_world\n", + " .set_index(['Data Source'])\n", + " .stack(0)\n", + " .rename('Population')\n", + " .to_frame()\n", + " .reset_index()\n", + " .rename(columns={'level_1':'Year', 'Data Source':'Country'})\n", + " .assign(Year=lambda df:pd.to_datetime(df.Year)))\n", + "\n", + "df_world_tidy.iloc[:5,:5]" + ] + }, + { + "cell_type": "code", + "execution_count": 267, + "metadata": {}, + "outputs": [], + "source": [ + "to_plot = (df_world_tidy\n", + " .set_index(['Country', 'Year'])\n", + " .unstack(level=0)\n", + " .loc[:, (slice(None), ['Norway', 'Sweden'])])" + ] + }, + { + "cell_type": "code", + "execution_count": 268, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "to_plot.columns = to_plot.columns.droplevel(0)\n", + "\n", + "(to_plot / 10**6).plot(grid=True);\n", + "plt.ylabel('Population (millions)'); \n", + "plt.ylim([0, 11]); plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## (6.4) Pivoting and melting\n", + "\n", + "We'll show how pivoting and meling can help us create data for plotting." + ] + }, + { + "cell_type": "code", + "execution_count": 269, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
CountryYearPopulation
0Aruba1960-01-0156225.0
1Aruba1961-01-0156695.0
2Aruba1962-01-0157032.0
\n", + "
" + ], + "text/plain": [ + " Country Year Population\n", + "0 Aruba 1960-01-01 56225.0\n", + "1 Aruba 1961-01-01 56695.0\n", + "2 Aruba 1962-01-01 57032.0" + ] + }, + "execution_count": 269, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# The tidy data set\n", + "df_world_tidy.head(3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The `.pivot()` method is more powerful than unstack. Both move rows up to the columns." + ] + }, + { + "cell_type": "code", + "execution_count": 270, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
CountryAfghanistanAlbaniaAlgeriaAmerican SamoaAndorra
Year
1960-01-019345868.01711319.011690153.021117.015370.0
1961-01-019533954.01762621.011985136.021882.016412.0
1962-01-019731361.01814135.012295970.022698.017469.0
1963-01-019938414.01864791.012626952.023520.018549.0
1964-01-0110152331.01914573.012980267.024321.019647.0
\n", + "
" + ], + "text/plain": [ + "Country Afghanistan Albania Algeria American Samoa Andorra\n", + "Year \n", + "1960-01-01 9345868.0 1711319.0 11690153.0 21117.0 15370.0\n", + "1961-01-01 9533954.0 1762621.0 11985136.0 21882.0 16412.0\n", + "1962-01-01 9731361.0 1814135.0 12295970.0 22698.0 17469.0\n", + "1963-01-01 9938414.0 1864791.0 12626952.0 23520.0 18549.0\n", + "1964-01-01 10152331.0 1914573.0 12980267.0 24321.0 19647.0" + ] + }, + "execution_count": 270, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Demonstrating the pivot method\n", + "df_world_pivot = df_world_tidy.pivot(index='Year', columns='Country', values='Population')\n", + "df_world_pivot.iloc[:5, :5]" + ] + }, + { + "cell_type": "code", + "execution_count": 271, + "metadata": {}, + "outputs": [], + "source": [ + "# Drop every country where there are any missing values\n", + "df_world_pivot = df_world_pivot.dropna(how='any', axis=1)" + ] + }, + { + "cell_type": "code", + "execution_count": 272, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
CountryAfghanistanAlbaniaAlgeriaAmerican SamoaAndorra
Year
1960-01-019345868.01711319.011690153.021117.015370.0
1961-01-019533954.01762621.011985136.021882.016412.0
1962-01-019731361.01814135.012295970.022698.017469.0
1963-01-019938414.01864791.012626952.023520.018549.0
1964-01-0110152331.01914573.012980267.024321.019647.0
\n", + "
" + ], + "text/plain": [ + "Country Afghanistan Albania Algeria American Samoa Andorra\n", + "Year \n", + "1960-01-01 9345868.0 1711319.0 11690153.0 21117.0 15370.0\n", + "1961-01-01 9533954.0 1762621.0 11985136.0 21882.0 16412.0\n", + "1962-01-01 9731361.0 1814135.0 12295970.0 22698.0 17469.0\n", + "1963-01-01 9938414.0 1864791.0 12626952.0 23520.0 18549.0\n", + "1964-01-01 10152331.0 1914573.0 12980267.0 24321.0 19647.0" + ] + }, + "execution_count": 272, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Compute the relative change since 1960\n", + "df_world_rel = (df_world_pivot / df_world_pivot.iloc[0, :])\n", + "df_world_pivot.iloc[:5, :5]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The `.melt()` method is more powerful than stack. Both move columns up to the index.\n", + "\n", + "> `unstack` and `stack` are inverses. \n", + " `pivot` and `melt` are inverses." + ] + }, + { + "cell_type": "code", + "execution_count": 273, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
YearCountryPopulation
01960-01-01Afghanistan1.000000
11961-01-01Afghanistan1.020125
21962-01-01Afghanistan1.041247
31963-01-01Afghanistan1.063402
41964-01-01Afghanistan1.086291
\n", + "
" + ], + "text/plain": [ + " Year Country Population\n", + "0 1960-01-01 Afghanistan 1.000000\n", + "1 1961-01-01 Afghanistan 1.020125\n", + "2 1962-01-01 Afghanistan 1.041247\n", + "3 1963-01-01 Afghanistan 1.063402\n", + "4 1964-01-01 Afghanistan 1.086291" + ] + }, + "execution_count": 273, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_world_rel = df_world_rel.reset_index().melt(id_vars='Year', value_name='Population')\n", + "df_world_rel.iloc[:5, :5]" + ] + }, + { + "cell_type": "code", + "execution_count": 281, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgQAAAEKCAYAAABt4E17AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzs3Xl4VPXZ+P/3mX0mmewb2QghZCMBkR0RV0RU0Ba0Iq7V2tbHVru4fLW1ldb+qn20LbXurcqDilWsKK5oXVBEBRHCFtZA9n0mmUxmPef3xyRsDRAgyWS5X9d1rjNz5syZO0PI5z6fVdE0DSGEEEIMbbpwByCEEEKI8JOEQAghhBCSEAghhBBCEgIhhBBCIAmBEEIIIZCEQAghhBBIQiCEEEIIJCEQQgghBJIQCCGEEAIw9OWHJSQkaFlZWX35kUIIMeCtX7++QdO0xHDHIQa3Pk0IsrKyWLduXV9+pBBCDHiKouwLdwxi8JMmAyGEEEJIQiCEEEIISQiEEEIIQR/3IRBCCNEz1q9fn2QwGJ4BipCbO9E9KrA5EAjcNH78+LojX5SEQAghBiCDwfBMSkpKQWJiYrNOp9PCHY/o/1RVVerr6wtramqeAeYe+bpklUIIMTAVJSYmtkgyILpLp9NpiYmJTkK1Sv/9eh/HI4QQomfoJBkQJ6rjd6bLsl8SAiGE6EW76lwsenMrgaAa7lCEOCZJCIQQohfsrndx+7INXPDnT3jpq/1sq24Nd0g9qrS01DRq1KjRhx77+c9/nnrfffclH+t9n376qe3666/PAFi5cqV91apVESf62WlpacXV1dVd9oH7/PPPrYqijF++fHnUiV73eNfutHjx4vjY2Nix+fn5hZ3b+vXrLd39jIceeijx0UcfjT+RuE72uzoR0qlQCCF60O56F3/7cCdvbKzCbNDzgxnZ3HxmNvGR5nCH1i/MmDHDPWPGDDfAf/7zH3tkZGRw5syZbT11/f/7v/+LP/30010vvvhi3Lx581qOfF1VVTRNQ6/Xn9LnzJkzp3nJkiX7T+a9d955Z31Xx/1+P0ajscv39MZ3dSSpIRBCiB5QUuHktmUbmPnIJ7y3pZYfzMjms7vO4f/NLhiSycCkSZPyfvzjH6cVFxcXZGVlFb377ruRELrTPeecc3JKS0tNS5YsSXziiSeS8/PzC999993Iqqoqw6xZs0YWFRUVFBUVFbz//vsRADU1NfozzjhjVEFBQeFVV101XNO67jqhqiorV66MXbJkSdnq1auj3G63AqHajOzs7NFXX3115ujRowt3795tWrhwYWZRUVFBTk7O6J/97Geph15n0aJFycXFxQXFxcUFmzdv7vY/3sqVK+0TJ07Mu+iii7KzsrKKbrnllrTHH388rri4uCA3N7dwy5YtZji8JmXSpEl5t956a9rEiRPzfv/73ye/+OKL0WPGjMkvKCgonDZtWm55ebnhRL6rt956K7Kz1qKgoKCwubm52+W81BAIIcRJCqoaH2yr5R+f7eWrvU1Emg384MxsfjAjm4Q+TALueHVjxo6aVltPXjM3xe7+0/yx5adyjUAgoJSUlGx7+eWXoxctWpR64YUX7uh8LS8vz3fttdfWR0ZGBhctWlQLMGfOnBE///nPa2fNmuXauXOnadasWaP27Nmz5e67706dOnWq63//93+rly1bFv3SSy8ldPV5q1atiszIyPCOHj3aO3ny5NZXXnkl+rrrrnMAlJWVWZ5++umypUuX7gd45JFHKpOTk4OBQIBp06blffnll9bJkye3A0RFRQVLSkq2Pfroo/E/+clPMj766KNdR37Wm2++GZufnx/Z+XzdunXbALZv32599dVX9yQlJQWGDx9ebDabG0pKSrb97ne/S3r44YeT/vnPf/7Xd+pwOPRff/11KUB9fb3+yiuv3K7T6XjkkUcSFi1alPL0009XdPe7evjhh1MWL16874ILLmhzOp06m83W7c4rkhAIIcQJcrh9vL6hkmfXlLGv0U1ajJVfXVzAFRMziLJ0XeU72CiKctzjl19+eTPAtGnT2u644w7T8a75+eefR+3cudPa+dzlcumbm5t1a9eutb/22mu7AK688krnD3/4w2BX71+6dGnc/PnzmzrOa1q6dGl8Z0IwbNgw33nnnXeguv3555+Pe+655xICgYBSX19v3Lhxo6UzIbjuuuuaAH7wgx80/epXv8ro6rOO1mRQXFzcNnz4cD9AZmamd/bs2U6AsWPHtn/yySf2rq61YMGCps7He/fuNV122WXp9fX1Rp/Pp8vIyPCeyHc1ZcoU1y9/+cuMK664omnBggXNI0eO7NmEQFGUnwE3ARpQAtwADAOWAXHAN8A1mqb5uvvBQggxkNS1enh/Sy3v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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "top_n = 5\n", + "countries = (df_world_rel\n", + " .groupby('Country')\n", + " .max()\n", + " .Population\n", + " .nlargest(top_n)\n", + " .index)\n", + "\n", + "df_world_rel.pivot(index='Year', columns='Country', values='Population').loc[:, countries].plot()\n", + "plt.legend(bbox_to_anchor=(1,1));" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## (6.4) Merging" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![](https://www.dofactory.com/Images/sql-joins.png)\n", + "\n", + "*Image source is https://www.dofactory.com/sql/join*" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Add a column showing every directors average imdb score." + ] + }, + { + "cell_type": "code", + "execution_count": 284, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
director_imdb_score
director_name
A. Raven Cruz1.9
\n", + "
" + ], + "text/plain": [ + " director_imdb_score\n", + "director_name \n", + "A. Raven Cruz 1.9" + ] + }, + "execution_count": 284, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "director_means = (df.groupby(df.director_name).mean().round(1)\n", + " .loc[:, ['imdb_score']]\n", + " .rename(columns={'imdb_score':'director_imdb_score'}))\n", + "director_means.head(1)" + ] + }, + { + "cell_type": "code", + "execution_count": 285, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
director_namegrossmovie_titlecountrycontent_ratingimdb_scoredirector_imdb_score
0James Cameron760505847.0AvatarUSAPG-137.97.9
1Gore Verbinski309404152.0Pirates of the Caribbean: At World's EndUSAPG-137.17.0
2Sam Mendes200074175.0SpectreUKPG-136.87.5
3Christopher Nolan448130642.0The Dark Knight RisesUSAPG-138.58.4
4Doug WalkerNaNStar Wars: Episode VII - The Force Awakens  ...NaNNaN7.17.1
\n", + "
" + ], + "text/plain": [ + " director_name gross \\\n", + "0 James Cameron 760505847.0 \n", + "1 Gore Verbinski 309404152.0 \n", + "2 Sam Mendes 200074175.0 \n", + "3 Christopher Nolan 448130642.0 \n", + "4 Doug Walker NaN \n", + "\n", + " movie_title country content_rating \\\n", + "0 Avatar  USA PG-13 \n", + "1 Pirates of the Caribbean: At World's End  USA PG-13 \n", + "2 Spectre  UK PG-13 \n", + "3 The Dark Knight Rises  USA PG-13 \n", + "4 Star Wars: Episode VII - The Force Awakens  ... NaN NaN \n", + "\n", + " imdb_score director_imdb_score \n", + "0 7.9 7.9 \n", + "1 7.1 7.0 \n", + "2 6.8 7.5 \n", + "3 8.5 8.4 \n", + "4 7.1 7.1 " + ] + }, + "execution_count": 285, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.merge(director_means, how='left', left_on='director_name', right_index=True).head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The inner join, or `merge(how='inner')` can be used if you want the intersection." + ] + }, + { + "cell_type": "code", + "execution_count": 286, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
imdb_score_USAimdb_score_Canada
director_name
Adam Shankman6.25.5
Andrzej Bartkowiak5.83.7
Atom Egoyan6.37.0
Bennett Miller7.67.4
Bob Clark5.36.2
\n", + "
" + ], + "text/plain": [ + " imdb_score_USA imdb_score_Canada\n", + "director_name \n", + "Adam Shankman 6.2 5.5\n", + "Andrzej Bartkowiak 5.8 3.7\n", + "Atom Egoyan 6.3 7.0\n", + "Bennett Miller 7.6 7.4\n", + "Bob Clark 5.3 6.2" + ] + }, + "execution_count": 286, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# For every director which has made movies in the USA and Cananda\n", + "# get average imdb scores for both locations\n", + "\n", + "american_directors = (df[df.country == 'USA'].groupby('director_name')\n", + " .mean().imdb_score.to_frame())\n", + "canadian_directors = (df[df.country == 'Canada'].groupby('director_name')\n", + " .mean().imdb_score.to_frame())\n", + "\n", + "(american_directors.merge(canadian_directors, how='inner', \n", + " left_index=True, right_index=True, \n", + " suffixes=('_USA', '_Canada'))\n", + " .round(1)\n", + " .head())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# (7) Plotting" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## (7.1) Built-int `plot()` methods\n", + "\n", + "Excellent for creating plots quickly. The downside is less control." + ] + }, + { + "cell_type": "code", + "execution_count": 371, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Plot countries by number of occurences\n", + "df.country.value_counts().head(n=10).sort_values(ascending=True).to_frame().plot.barh();" + ] + }, + { + "cell_type": "code", + "execution_count": 372, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAa0AAAENCAYAAAC8SjrZAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzt3Xuc1FX9x/HXW0RwBTVZFWhXEZW8ZdZ6SSvdjdS8ZSqWqCimkeUlUyr6aQqKVrYZmZfEVPKeWt611HQkSS3pYt4zRV0viCDCgtw/vz/Od+jLMLM7s8zszIHP8/HYx8x8v+ec72e+O+yHc75nvkdmhnPOOReDtaodgHPOOVcsT1rOOeei4UnLOedcNDxpOeeci4YnLeecc9HwpOWccy4anrRcVCRNkjS+SseWpGskvS/pr9WIIYnjc5JerEC7vSQ9J6l/8ros51rSlyTdvOoROudJy60iSdMkTZe0XmrbCZIyVQyrUj4L7A00mNmu1QrCzP5sZh+rQNOjgMlm9k45GzWzu4AdJO1YznZrnSSTtFW141jdeNJy5bA28O1qB1EqST1KrLI5MM3M5lUinhrwDeC6CrV9EyEpVpSktSt9jHKJKdZa4knLlcNPgdGSNszdIWlQ8j/OtVPbMpJOSJ6PlDRF0s8lzZb0iqQ9ku1vSHpX0rE5zdZLelDSXEmPSto81fY2yb5Zkl6U9JXUvkmSLpd0n6R5QEueeAdKuiup/7Kkryfbjwd+DewuqV3SuDx1S3ovkjaQdK2kGZJek3SWpLWSYbrZknZIld1Y0oeSNpHULKktJ+bfJe28KunU1L5dJT0laU7SI74o3y9Q0mbAlsCT+fYnZb6enJNZyTkamNq3T3K+P5B0WfJ7OSFVPQMc0EHb0yT9IBmefD8Zhu2d2n+gpH8m5+Uv6V5bUvf7kp4G5uVLBpK2T30upkv6v2R7L0kTJL2V/EyQ1CvZN1LSYzntLO89JZ+nSyXdm3wWn5S0ZbJvclLlX8nn5avZ31sS6zvANZKekXRQqv2ekt6TtFOhc7Wm86TlyuEpwh+l0V2svxvwNNAPuBG4GdgF2Ao4GrhEUp9U+aOA84B64J/ADQAKQ5QPJm1sAgwHLpO0farukcD5QF9ghT9IiZuANmAgMAy4QNJQM7sKOBF43Mz6mNk5ZXgvvwQ2AAYDewHHAMeZ2ULg90n8WV8BHjWzd9MHk7QWcDfwL+CjwFDgNEn7JkV+AfzCzNYnJKVbCsT9ceAVM1uSb6ekzwM/SuIYALyWvDck1QO3AT9I3veLwB45TTwPDJK0foHjQ/i97pvEOQQ4K2n/U8DVhJ5gP+AK4K5sckkMJyTFDXPfg6S+wEPAHwi/162APyW7zwQ+DewEfALYNXvcIg0HxgEfAV4mfLYwsz2T/Z9IPi+/TV73BzYi9NpHAdcSPhdZ+wNvm9k/S4hhzWJm/uM/Xf4BpgFfAHYAPgA2Bk4AMsn+QYABa6fqZIATkucjgf+k9n08Kb9pattMYKfk+STg5tS+PsBSoBH4KvDnnPiuAM5J1b22g/fSmLTVN7XtR8CkVKyPdVC/6PcC9AAWAtul9n0jdd6+QEgi2X1TgGOS581AW/J8N+D1nDh+AFyTPJ9M+KNa38nv8SjgiZxtk4DxyfOrgAtzzvvi5Pd7DCGZZ/cJeCP7O0629UzOxWYdfI5OTL3eH/hv8vxy4Lyc8i8Ce6Xqfq2D9zYc+EeBff8F9k+93pcwBJz39528h61S5+fXOTG/kK9s6ve2COid2jYQmAusn7y+Dfhepf/dxvzjPS1XFmb2DHAPMKYL1aennn+YtJe7Ld3TeiN13HZgFuEf/+bAbskQ0mxJswl/jPvnq5vHQGCWmc1NbXuN0IMp93upB9ZJ2s93rIeBdSXtpjD8uRNwe57jbQ4MzHnP/wdsmuw/ntBreUHS3yQdWCDu9wm9z0IGpmNNzvvMJN6BrPg7MUJvNS3b9uwOjpH+3byWtAvhPZ6R8x4bU/tz6+ZqJCSnfFZ4XznHLUZ60sp8Vvyc5jPDzBZkX5jZW4T/kBymMLy+H8nIgcvPLwS6cjoH+Dvws9S27KSFOmBO8jydRLqiMfskGWrbCHiL8IfrUTPbu4O6HS1r8BawkaS+qcS1GfDmKsabz3uEnsrmwHO5xzKzZZJuIfQSpgP35CTTrDeAV81s63wHMbP/AMOTYcRDgdsk9bOVJ5M8DQyWtLblHyJ8K4kVWD4U2y+J922gIbVP6deJbQk9mDkU1ph6vllyzOx7PN/Mzu+gbke/1zdYcag1Lfu+ns1z3HmEzy0ASr4KsIryxfkbwujE2oQeayU+b6sN72m5sjGzl4HfAqemts0g/GE7WlIPSV8jXLNYFftL+qykdQjXtp40szcIPb0hkkYkF7R7StpF0rZFxv8G8BfgR5J6Jxf7j6cC//M1s6WE60vnS+qb9KZOB65PFbuRMOR5VPI8n78Cc5KL++sm53gHSbsASDpa0sZmtoz/9XKW5omnDfgP4ZpOPjcCx0naKbmWdAHhvE8D7gU+LunLySSIk1j5PyZ7AfcXPCHBSZIaJG1E6C1mrwNdCZyY9DolaT1JByTXqopxD9Bf0mnJxIu+knZL9t0EnKUw0aUeOJv//Q7+BWyfvOfewNgij5c1nXC9sjN3AJ8izMC9tsRjrHE8ablyOxdYL2fb14HvEoaTtickhlVxI6FXNwtoIvxRJ+mJ7AMcQfjf8jvAT4Be+ZvJazjhOs1bhOG4c8zswVWMt5BTCP+bf4UwKeRGwoQDAMzsyWT/QAr8wU+S30GE4cNXCT24XxMmeAB8EXhWUjthUsYR6eGpHFcAIwoc50/AD4HfEXpWWxLOM2b2HnA4cCHhd7wdYXLOwlQTw5P2O3Ij8ADhfLwCjE/af4rwGbqEMIz5MuF6U1GSz8XehPP0DiE5Z2eOjk9ifRr4N2GkIHvclwif54eSOvkm7nRkLPCbZEjzK4UKmdmHhPO6BWECjuuAkot/zrk1XNKD+gcw1MzeXoV21iJc0zrKzB5JpnSPMLOCf7glTSNM3Hioq8eNmaSzgSFmdnSnhddwfk3LOQeAhan223WlbjLF/knCRJPvEmYQPpG0ezdhWr7LIxkOPZ4CvVy3Ih8edM6Vw+6EGXrvEYbhvpwMe7kOKHx5/Q3gfjOb3Fl558ODzjnnIuI9Leecc9Hwa1pltuGGG9pWW8VzY+d58+ax3nq5k/1qW2wxxxYvxBdzbPFCfDFXOt6pU6e+Z2Ybd1bOk1aZbbrppjz11FPVDqNomUyG5ubmaodRkthiji1eiC/m2OKF+GKudLySXuu8lA8POueci4gnLeecc9HwpOWccy4anrScc85FI+qJGJIywHtmNizPvqeAZ8xspKSehPu8fY1wA8v5hC9C3m5mP85TdxzhxpnjzeyHpcQ0f/F8NE4lv5dqaR3SSsu4lRbwrWmxxRxbvBBfzLHFC/HF3Fm8dk73fOd3TelpXUK48eUNwIGEFUMfJXxzP58jksdCyxk455yrgqh7WsWQVAccB5xpZj9N7fp9su5PbvkmwqJ5fwKGStrFzP7WPdE655zryJrQ01qPsNT3O7k7LP89rIYTllQ4DliA97acc65mrPZJK1mE8A1grKRDO1o4Lul5fRW4L1kQ8D7gq8lSC84556os6hvmljAR4/PAzcDGwDLCmkE3Axeb2aJUnT0J17q+ama3SDqcsLpsi5llOohjFOE6GfX19U1jLh5TpndYeQ29Gmhb2FbtMEoSW8yxxQvxxRxbvBBfzJ3F2zSgaZXab2lpmWpmO3dWbrW/pgVgZg9L2hI4ABgKfAH4KfBlSXsmS5FDGAqcR1iem+RxbrI900H7E4GJAI2DG230S6Mr8TYqonVIKzHFC/HFHFu8EF/MscUL8cXcWbw23GcPFmMJ0KPAvh7JfiAsuW1mN5vZ1wnT3s8DPkMyg1DS2sAwwnLf60jakLBM+x+BYcm0eeecc1UUe9KaAfQvsG8A8G6+HckEjOxMwm2Sx72BeuAQ4P3UzzBgI2Cf8oTsnHOuq2IfHvwzcJikj5rZm9mNknYDNgX+nPSQ1jOz2Tl1t04epyePwwlJ6tA8x/ltsv/ecgbvnHOuNLEnrWuB04HJksYDrwHbAucAfyEM7W0EvCTpN8AjwAfAx4AfAG8Ct0vqDXwZuCHfhAtJvwWOk1RnZvMr/q6cc87lFXXSMrP2ZMbfBcCPCQlqOqFndKaZLZM0B7gQ2B84ElifkKz+SLhN0weShgF9gesKHOp6wm2gDkraLqiuZ1233c6kHDKZTLddQC2X2GKOLV6IL+bY4oX4Yq6VeKNOWgBm9hYwsoP9iwgJbaV7DKbK3AYUvGGgmf21o/3OOee6R+wTMZxzzq1BPGk555yLhict55xz0fCk5ZxzLhqetJxzzkXDk5ZzzrloeNJyzjkXDU9azjnnouFJyznnXDSivyNGMUpYLHISsEN6ITJJ6xJulLsT8Hkz+2dHx5q/eD4aF8/NM1qHtNIyrqXaYZQktphjixfii7mr8cZ0yzUXrBFJq6skrQPcDjQBe3eWsJxzzlWWJ60CkiVNbgU+C+yb3H/QOedcFXnSykNSD+AGwsKQB5jZlCqH5JxzDk9a+awFXAN8CfiSmT1S5Xicc84lFFaeX72VOBHj2GTXt83s4iLbHwWMAqivr28ac/GYssTdHRp6NdC2sK3aYZQktphjixfii7mr8TYNaKpANMVpb2+nT58+VTt+qSodb0tLy9T0JLhCvKe1slcAA74r6XYze6OzCmY2EZgI0Di40Ua/NLrCIZZP65BWYooX4os5tnghvpi7Gm81FzXMZDI0NzdX7filqpV415TvaS0BehTY1yPZn/U+sA8hoT8gqV+FY3POOVekNSVpzQD6F9g3AHg3vcHMXgH2AwYC90iqq2x4zjnnirGmJK0/A02SPpreKGk3YNNk/wqS72QdDHwSuE2SD6U651yVrSl/iK8FTgcmSxoPvAZsC5wD/AX4Y75KZpaRdBRwC3C1pGOtk5krdT3rovqWfSaTqeq4flfEFnNs8UJ8MccWr+u6NaKnZWbtwJ6EHtWPCUnqB8Bvgf3MbFkHdX8HnASMAC6sfLTOOecKWVN6WpjZW8DITsrk3W9mvwJ+Vf6onHPOlWKN6Gk555xbPXjScs45Fw1PWs4556LhScs551w0PGk555yLhict55xz0fCk5ZxzLhqetJxzzkVjjflycXeZv3g+Gqdqh1G01iGttIxrqXYYJYkt5tjihfLEHNPtzFw8urWnJWmsJMvz81B3xuGccy5O1ehpfQB8Mc8255xzrkPVSFpLzOyJYgpKWtfMPqx0QM455+JQMxMxJK2dDBV+W9LFkmYA/0j2HSTpIUkzJM2R9LikL+TUHy/pHUk7S3pS0nxJf5e0R55jfUPSM5IWSJou6RZJfVP795I0OWljpqQrJPWp+ElwzjnXoaokrSRBpX/SMxfGAPWEpUC+k2zbArgTOAo4DHgS+GOyiGNaH+Aa4PKk3BLgdkm9U8cem+x/GPgy8E1gHlCX7N8TeBB4M2njdOBLwK/L8uadc851mTpZ07C8BwsJ45w8u/YGMsBi4Ckz26WDNtYiJNs/Av81s1HJ9vHAmcBeZjY52bYz8DdgbzN7SFI/QjK62My+V6D9x4F2M9s7tW0f4A/Admb2Qp46o4BRAPX19U1jLh7T0WmoKQ29Gmhb2FbtMEoSW8yxxQvliblpQFOZoulce3s7ffrENRgSW8yVjrelpWWqme3cWblqTcT4Qs62F1PP782tIKkRuAD4PDAAyPbMeuQUXUBY6DHrueSxIXncA+hF6I2tJBkC3A34hqT0uZkMLAOagJWSlplNBCYCNA5utNEvjc7XfE1qHdJKTPFCfDHHFi+UJ+buXEk4k8nQ3Nzcbccrh9hirpV4qzUR46ncjakkMT1new/gHqA3cBbwCmE47wJg/ZxmPrAVu46Lksfs8GC/5PHtArH1IyTE5UkoR2OBes4557pBLX65OPe/Zx8DdiQZ4stulLRuF9qemTwOAGbn2f9+8ngWYfgx15tdOKZzzrkyqcWklSubnBZmN0gaDHwamFpiW1MIQ4jHEiZ8rMDM5kj6GzDEzM7vWrjOOecqJYak9SzwFvBzSWcDGwDnAiVfJTazWZIuAMYlMwrvJyTFA4EzzWw68D3ggWRC4++AdmBz4ADg+2b2346OUdezLqrb12QymW699lAOscUcW7wQZ8xuzVDzScvMFkg6FLiUkETeICStfYGtutDeeZLeA04lTHd/H3iUcJ0MM8tI2gsYC1xPmOzxGiHBzVjV9+Occ67rujVpmdlYQjLIt28J/5sVmLvvSSB3KuR1OWXOIlyL6rRNM7uc8F2tQnE+TkiKzjnnakjN3BHDOeec64wnLeecc9HwpOWccy4anrScc85Fw5OWc865aHjScs45Fw1PWs4556LhScs551w0Kvrl4uROFicDnyLcLuk14BZggpm9V8ljF0tSKzDMzAaVo735i+ejcXm/I12TWoe00jKupdphlCS2mGOLF4qLOabblbnVR8V6WpJ+BtxKWEpkBLAP8HPgIODKSh3XOefc6qsiPS1JBxGWqT/ezK5O7XpU0kRCAnPOOedKUqme1neAv+ckLADMbKmZ3Q8g6ceS/i2pXVKbpBsk9U+XlzRNUquk7yRl3pd0s6QNU2XWk3SJpBclzZf0qqRLJa2f09aGkm6UNE/S25LOzI1P0gBJV0t6RdKHkl6SNF7SOmU7O84557qk7D0tST0Jy9r/rIjimxBWIH4L2Bg4A3hY0sfNbGmq3FeAp4FRQANwUVLvW8n+OsLd2M8k3Im9MXl+Kyve+PYaoBk4DXgHGA1sCSxJlakHZhF6iu8DQwg3+d0Y+EYR78k551yFaMXV6cvQYOgpvQ2caGZXlFCvB9CfsE7WXmY2Odk+DVgKfCy5azuSJgBHmFn/Am2tDewGPAZsbmavS9oeeCap99ukXB/gdWBOoYkYSVtfAa4G1jezRXnKjCIkVOrr65vGXLzS+pI1q6FXA20LS16arKpiizm2eKG4mJsGNHVTNJ1rb2+nT58+1Q6jJLHFXOl4W1papppZ7moeK6nk7MFOs6Gk/YAfAtsD6aG8IcDk1OtHsgkr8RywiaR1sklE0ghC72hrYL2ctl4Hdkle37U8QLN2SQ8SElw2JgHfJiShLYDeqbY2A15e6Y2aTQQmAjQObrTRL43u7K3XjNYhrcQUL8QXc2zxQnEx19IikZlMhubm5mqHUZLYYq6VeCtxTWsmsJDwB74gSbsQEkgbYXbh7sCnk929c4rPznm9iLBO1jpJW4cA1wKPA4cn7RyS01Z/YK6ZfZjT1rs5r08jDG3eDhwM7AqcVCAu55xz3ajsPS0zWyxpCuFa0lkdFD2EcP3pq5aMUUravIuHPRx40syy17hIVh9OewfoK2ndnMS1SZ62bjWz5ZM0JG3Xxbicc86VUaVmD04AdpZ0bO4OSWtJ+iLhy8aLbcWLakd18XjrEnp3ablt/S15/FIqlj7A3l1oyznnXBVU5JqWmd0t6SLgKkmfAe4E2oFtgBOBaYQvGJ+WTKq4mzDj8OguHvJB4NJkCvuTwP7A0JyYnpV0F3B5MhX+beC7wPw8bZ0q6Ungv4SEtVUX43LOOVdGFZuIYWZnSPoL4TZONxJ6MNMI17FazewdSd8HTgG+TrgedSDwUhcOdwUwmDCBojch8RwJPJFTbiRwOaEn2A5cSuiBDUuVOZcwvX188vr3wKmExNqpup51Ud3eJpPJ1NQF9WLEFnNs8UKcMbs1Q0XvPWhmvwN+18H+C4ELczYrp8ygPPUmAZNSr5cSvnOVO90pt633gSPyhDI6VaYdOC5PmXhuKOicc6spv8u7c865aHjScs45Fw1PWs4556LhScs551w0PGk555yLhict55xz0fCk5ZxzLhqetJxzzkXDk5ZzzrlolHRHDElfJqwW3AT0Jdyl/c/AL81sSvnDi8/8xfPRuHhuntE6pJWWcS3VDqMkscUcW7wx3YbMrXmK7mlJ+jnhlkxvAicAXwDGEJLXY5K2rEiEzjnnXKKonpakgwmLIx6X3Pcv7TpJBwG5iysWTVJPYFlyD0HnnHMur2J7WqcBf8uTsICwFImZvQXL18saI+llSQslvZS7rpakjKTbJI2S9F9gATBQ0lhJ70naTdJTkj6U9JikLSRtIukOSe2Snpf0+Zw2j0nKzpL0vqRHJO2cU2ZS0u7ekp6WNC+ps32qzK2SHsl9j5LGSZqeJFjnnHNV0GnSkrQ2sDvwQJFt/pKwYvFE4ADCsvVXSzowp9xngG8C3wcOAj5IttcldX8ODAc2A64DbgIeAw4lDFHeKqku1d4g4FrCysNHAm3AZEmDc467GfBT4Pyk/U2AWyRlL0T9GthL0hapcyDgGOB6M1tc5HlwzjlXZlpx4eA8BaRNCUvVn2hmV6S2C+iRKroU2JKwHtZxZvabVNlrgW3NbJfkdQbYDdjCzN5JlRsLnAM0m9mjybZvEda9OsfMzk22bQc8C+xvZvfniXktQkJ+BrgxVW8SYaHJbc3sP8m2LxMS67Zm9kJS91Vgkpmdk5T5PPAn4ONm9kye440CRgHU19c3jbl4TIfntJY09GqgbWFbtcMoSWwxxxZv04Am2tvb6dOnT7VDKVps8UJ8MVc63paWlqlmtnNn5Yq5ppXtgeRmtzMIPZasU4DFwDLg9qSHlvUnYLikHqnrVlPTCStlEWFGYtbLyePDebZ9dHmQ0rbABYQVkDdJlR2S0/60bMJKPJc8NgAvmNmyJLkdI2mshaw+EngqX8ICMLOJhN4hjYMbbfRLuct61a7WIa3EFC/EF3Ns8dpwI5PJ0NzcXO1QihZbvBBfzLUSbzHXtN4DFhL+qKddB+yS/GTVE3pfHxASWPZnEiFBDkiVnV7geHPNbFnq9aLkcXZ2g5llt/UGkNSXMHzZCJwOfC6J61/ZMimzc16v0FbiGmBzoCVp+zDg6gLxOuec6yad9rTMbImkx4F9gLNT26eTJJ7/XQ5iFrCEcL1qGSt7N91010LOa3dCUt3bzF7IbpS0QVcaM7Npkh4i9LC2ICT3m8oQp3POuVVQ7JeLJwB3SBphZtd1UO5hQk9rAzN7cJWjK966yePC7AZJexAmZ0ztYptXEXpX2wN3mFluD80551w3KyppmdmdkiYAkyS1AHcThg37AXsnxdrN7EVJvwJulnQh8BRh2G17YIiZnVD2dxA8AbQDVybHbQDGEmYZdtUdwGXAp4AfrGqAzjnnVl3Rt3Eys+9Imky4jdNV/O82To+z4iy+kwgzCL8OnAvMIUx2uKqMcefGNl3S4UArcCfwH+BE4Hur0OZCSfcDewIPFVuvrmddVLfByWQy2PB44oX4Yo4tXudqWUn3HjSz2wnTwzsqY4ThxAkdlGkusH0soYeU3pbhfzMY09uV8/oPwB9yit2XU2Zknnam5Ws/mf3YAlydMzHEOedclZSUtNYEktYBPkH4gnI/4IqOazjnnOsunrRWNhD4K2Gm4zfMLJ5vhTrn3GrOk1aOQsOFzjnnqs8XgXTOORcNT1rOOeei4UnLOedcNDxpOeeci4YnLeecc9HwpOWccy4aXZryniwA+QrhhrRbm9nLHdcouf11gP8j3Kj2n2VsdxKwQ3ahMUkjCcuQ9DWz9nIcY/7i+WhcPDPmW4e00jKupdphlCS2mCsVb0y3C3OuXLra09qdkLAAjihPKCtYh7CC8U4VaDvtXsJ7mV/h4zjnnCuDriat4cA84MnkedVIWrfzUvmZ2Qwze8LvLeicc3EoOWlJ6gEcDtxFWG9qO0k7pvaPlfRennom6eTU6y9JmippnqT3JT0paa9k99zk8ZqknkkalPyYpKMkXStpNmGZFCQdI+kxSbOS9h6RtHMn72Vk0l6f1LYfS/q3pHZJbZJukNS/1PPknHOu/LrS0/o8sClwM3AbsJgSe1uStkzqPgwcBBwF3ANslDoGwHjC8N3uwNupJloJie1w4IJk2yDg2mTbkUAbMFnS4FJiAzZJ2jwAOA0YDDycJGvnnHNVpLCSSAkVpKuBQ4BNzWyRpHuB7YDBZmaSxgInm1l9Tj0DTjGzSyQNA64ws34FjtGHkJSOM7NJqe2DgFcJEzQO6SDGtQgJ+RngRjM7N9k+iRImYiSJqj8hAe5lZpMLHG8UMAqgvr6+aczFYwqFVnMaejXQtjCuewLHFnOl4m0a0FT2NrPa29vp06dP5wVrRGzxQnwxVzrelpaWqdm/zR0pafagpF6EhHW7mS1KNt8EXAd8mrAgZDH+DWwg6TfADcAUM5tXQij35oltW0IPaQ9CbylrSAntImk/4IeE1ZbXz2knb9Iys4nARIDGwY02+qXRpRyyqlqHtBJTvBBfzJWKt5ILS2YyGZqbmyvWfrnFFi/EF3OtxFvq8OB+wIbAfZI2lLQhkAEWUsIQoZm9CBxMGHq7D3hP0o2SNi6yienpF5L6Ag8AjcDpwOeAXYB/Ab2LjUvSLoRrdW3ACMKw5KeT3UW345xzrjJK/Z5WNjHdmmffVyR9B1hAmLK+nKSP5BY2s3uBeyVtQLh+NAH4JcVNoc/9L+buQAOwt5m9kDruBkW0lXYIMAP4arICM5I2L7EN55xzFVJ00kquMx1IGA6cmLP7k8BFhOXp24C+kj5qZm8m+/cp1K6ZfQDcmMwc3D3ZnB16LLZ3k532vjAV7x6EyRlTi2wj285iW/FC31El1HfOOVdBpfS0DgbqgF+Y2ZPpHZKmAGcSemLfBz4Erpb0M2AL4MSc8t8gJKg/AG8BWxNm/V0LkEzweJXQe3uG0Ht7uoPYngDagSslXUjodY0F3uygTj4PAqdJmkCYSr8HcHQpDdT1rIvqTgWZTKai10YqIbaYY4vXuVpWyjWt4cB/chMWgJktBm4BDiXM+juMkDjuIPzRPzKnytPAxoTe2QPAWcCVhISXdSJQDzwE/A0YWCgwM5tOSHr9gTsJU9VPBEq6vZSZ3ZfEcBjh2tZehN6lc865GlB0T8vMOvzjbWbfAr6VvLw/+UlTquzjhOtYHbX3ALBjnl15b+xnZn8g9NzS7sspMzLn9SRgUs62C4ELizmDsmDwAAAWzElEQVSmc8657uV3eXfOORcNT1rOOeei4UnLOedcNDxpOeeci4YnLeecc9HwpOWccy4anrScc85Fw5OWc865aJR6w1zXifmL56Nx8XwXuXVIKy3jWqodRkliizkdb0y3+HKuFkXR05I0VtJ7ZWhnB0kmqTm1zSSdvKptO+ecqzzvaYUb975a7SCcc851bo1PWmb2RLVjcM45V5wohgfTJDVnh/gk3SqpXdIrkr6Vp+y3JL0haZ6ku4EBecqsMDwo6QBJD0p6V9IcSU9IKrgemHPOue4TXdJKuRL4F2G14QxwqaRdszslHQxcCtxDWDLl38DVRbS7BWEtrRGEJUr+Atwv6TPlDN4551zptOIivbVJ0ljgZDOrTyZRPAKcZ2ZnJ/t7EhaTvMrMxiTb/grMNLP9Uu1cCZwAtJhZJtlmwClmdkme465FSOz3Am+a2dcKxDcKGAVQX1/fNObiMeV4292ioVcDbQvbqh1GSWKLOR1v04CmKkdTnPb2dvr06VPtMIoWW7wQX8yVjrelpWWqme3cWbmYr2k9kH1iZosl/Yew8CSSegCfBE7JqfN7QtIqSFIDcD7wBcJwYnb++pRCdcxsIjARoHFwo41+aXRJb6SaWoe0ElO8EF/M6XhjWcE4k8nQ3Nxc7TCKFlu8EF/MtRJvzElrds7rRUDv5PnGhPf2bk6Z3NcrSHpWdwF9gbMJKx/PA84FNlnFeJ1zzq2imJNWR2YAS1g50XSWeLYi9ND2S1ZCBkDSuuUNzznnXFfEPBGjIDNbCvwTODhn16GdVM0mp4XZDZI2B3wShnPO1YDVtacFcAHwe0mXA7cDewFf7KTOC0Ab8DNJPyQME44D3iz2oHU966K6VU8mk4nmOktWbDHHFq9ztWy17GkBmNnthIkYBwF3EIb9ju+kzkJCb2wJcBtwHvAj4NGKBuucc64oUfS0zGwsMDZ5nuF/M/rSZZrzbLsEyJ3Krpwyua//BuzKiiaVFLBzzrmKWG17Ws4551Y/nrScc85Fw5OWc865aHjScs45Fw1PWs4556LhScs551w0PGk555yLhict55xz0ai5LxdLGkm4k8UQwp0ppgGPmNnpFThWM2Ftro+b2TPlaHP+4vlo3Erffa5ZrUNaaRnXUu0wShJbzNl4Y7q9l3O1qqZ6WpJ+APwa+CPhdkrHAHcCX6rQIf8O7A78t0LtO+ecK6Na62mdDFxhZv+X2na3pHGVOJiZzQGeqETbzjnnyq+melrAhsA7uRvNbPm4iqRBkkzSkZKukzRX0ruSzknXkbSNpJslvSFpvqRnJZ2WLPSYLdOctLVDaptJ+rakCyTNSNq+VFKvCr1n55xzRaq1ntbfgVMkvQ7cY2YzOyj7U+AeYBiwJ3COpPfM7NJk/0eBF4EbgLnAToRlRtYl3Lm9I2cADwNHAzsm5V8DLuzKm3LOOVceSnViqk7SjoRlRLYADHge+B3QmgzlIWkQ8CrwoJntk6p7JbA/0Ghmy3LaFdAD+B5wgpkNTrY3kzMRQ5IBfzazPVP17wD6m9mnC8Q9ChgFUF9f3zTm4jGrdB66U0OvBtoWtlU7jJLEFnM23qYBTdUOpWjt7e306dOn2mEULbZ4Ib6YKx1vS0vLVDPbubNyNdXTMrOnJW0L7APsC3we+CFwhKRPmVl7qvjtOdV/D5wANACvS+oN/AA4CtgM6JktKGltM1vSQSgP5Lx+Dih4Ms1sIjARoHFwo41+aXQHTdeW1iGtxBQvxBdzNt6YFoLMZDI0NzdXO4yixRYvxBdzrcRba9e0MLOFZna3mZ1sZtsREtHWrLyA47sFXg9IHn8CjCYkk/2BXYDxyb7enYQxO+f1oiLqOOecq7CaS1q5zOwqYBawTc6uTQq8fjt5PBz4pZldaGYPmdlThO99Oeeci1RNJS1JuYkISRsDGwDTc3YdkvP6UELCyl7sWBdYmGqnB3BE2YJ1zjnX7Wrqmhbwb0l3Eq4pvQtsThjimw/8Jqfs9pKuIEzU2JMwfPjt1CSMB4GTJL1M6KmdBPi0deeci1itJa1zgYOBi4GNCN/Z+gvwVTN7Nafs94ADCUlrAXAecElq/ynAr4BLgQ8JSe92kgkTlVLXsy6q2/VkMpmoJghAfDHHFq9ztaymklbyHatLOy0YfGBmwztoazorDyECXJkqkwFWuFGgma1040AzGwuMLTIu55xzFVJT17Scc865jnjScs45F42aGh4shplNI2dIzznn3JrBe1rOOeei4UnLOedcNDxpOeeci4YnLeecc9HwpOWccy4anrScc85FoyanvEs6FDgZ+BThxrevAbcAE4A+hEUgDzKzezpoYyxwspnVVzzglPmL56Nx8czIbx3SSsu4lmqHUZJYYo7pdl7OxaLmelqSfgbcCrwCjCAsCPlz4CBSt2Aqwq8JC0k655xbTdRUT0vSQcDpwPFmdnVq16OSJhISWFHMrI3/LVPinHNuNVBrPa3vAH/PSVgAmNlSM7s/talO0hWSPpDUJmmcpOXvR9JYSe+lXjdLsuTxVkntkl6R9K30cSTtLukuSW9Jmifpn5KOqsSbdc45V5qaSVqSegJ7AH8ossqFQDswDLgeODt53pkrgX8R7gCfAS6VtGtq/+bAFOAEwpDk74BrJBW8o7xzzrnuIbPauFgsqT9h5eETzeyKDsoNIkzEuM7Mjklt/yfwgpkdkbweS2oihqRm4BHgPDM7O9nWE3gLuMrMxuQ5loAehOVStjazzxeIaRQwCqC+vr5pzMUrNVWzGno10LYwrlHUWGJuGtAEQHt7O3369KlyNKWJLebY4oX4Yq50vC0tLVPNbOfOytXUNa1EsVn0gZzXzwGblVLPzBZL+g/QkN0m6SPAOMJilB8lJC2ANwsGbDaRZHHJxsGNNvql0cXEXxNah7QSU7wQT8zZhR8zmQzNzc3VDaZEscUcW7wQX8y1Em8tJa2ZwEKKSzwAs3NeLwJ6l6HeJODThJWQnwPmAN8kJDHnnHNVVDNJK+n1TCFMUz+rGjFI6g0cQBhW/FVqe81c+3POuTVZrf0xngDsLOnY3B2S1pL0xQofvxdhOHBh6rh9gS9V+LjOOeeKUDM9LQAzu1vSRcBVkj4D3EmYIbgNcCIwjTAtvlLH/0DS34CzJc0BlgFjgA+A9St1XOecc8WpqaQFYGZnSPoL4TZONxJu4zQNuAtopbjrVqviSMKkimsJ19kuAeqSeDpV17Muqtv3ZDKZ5RMGYhFjzM658qi5pAVgZr8jfD+qkJVu7mdmI3NejwXGpl5nCtRrznn9MpBvavvYPNucc851o1q7puWcc84V5EnLOedcNGpyeNA552KzePFi2traWLBgQVHlN9hgA55//vkKR1U+5Yq3d+/eNDQ00LNnzy7V96TlnHNl0NbWRt++fRk0aBDhDnAdmzt3Ln379u2GyMqjHPGaGTNnzqStrY0tttiiS2348KBzzpXBggUL6NevX1EJa00liX79+hXdG83Hk5ZzzpWJJ6zOreo58qTlnHMuGn5NyznnKkDjytvrqoWbFkyYMIFRo0ZRV1dXtRg8aZXZ/MXzy/5hraTWIa20jGupdhglqXbMtfDHw7lqmDBhAkcffXTepLV06VJ69OiRp1Z51dzwoKSxkt6rdhzOOReja6+9lh133JFPfOITjBgxgtdee42hQ4ey4447MnToUF5//XUARo4cyW233ba8XnaBx+y6WcOGDWObbbbhqKOOwsy4/PLLeeutt2hpaaGlpWV5nbPPPpvddtuN8ePHc8ghhyxv78EHH+TQQw8t+/vznpZzzq0mnn32Wc4//3ymTJlCfX09s2bN4thjj+WYY47h2GOP5eqrr+bUU0/ljjvu6LCdf/zjHzz77LMMHDiQz3zmM0yZMoVvfvObXHbZZTzyyCPU19cDMG/ePHbYYQfOPfdczIxtt92WGTNmsPHGG3PNNddw3HHHlf091lxPyznnXNc8/PDDDBs2bHlS2WijjXj88cc58sgjARgxYgSPPfZYp+3suuuuNDQ0sNZaa7HTTjsxbdq0vOV69OjBYYcdBoRZgSNGjOD6669n9uzZPP744+y3337leWMpNZ20JK0n6RJJL0qaL+lVSZdKWj+nnEk6XdIvJM2SNFvSLyWtkyozQNLVkl6R9KGklySNzykzKGnrK5KukPSBpDZJ43whSOdcrTOzTqeUZ/evvfbaLFu2bHm9RYsWLS/Tq1ev5c979OjBkiVL8rbVu3fvFa5jHXfccVx//fXcdNNNHH744ay9dvkH82r9D3EdYVHGM4H9gB8S7sB+a56yZwANwFHAeGAUcH5qfz0wCzgd+CLwU+A44Jd52rqQsI7XMOB64OzkuXPO1ayhQ4dyyy23MHPmTABmzZrFHnvswc033wzADTfcwGc/+1kABg0axNSpUwG48847Wbx4caft9+3bl7lz5xbcP3DgQAYOHMj48eMZOXLkKr6b/Gr6mpaZzQC+mX0taW3gVeAxSZuZ2eup4nOBw81sGXC/pF7AmZJ+ZGazzOzfwOhUW1OAecDVkk4xs0Wptiab2RnJ8weTFZMPBW7JF6ekUYQkSX19Pa1DWlfxnXefhl4NUcUL1Y85k8mUVL69vb3kOtUWW8y1EO8GG2ywwh/0OafP6bB8qbPtOkoWWZttthmnn346n/vc5+jRowc77rgjF1xwASeddBI/+clPqK+v57LLLmPu3LkMHz6cI444gqamJpqbm1lvvfWYO3cu8+fPZ8mSJcuPt2jRIhYsWMDSpUs55phj2Hfffenfvz/33ntv3rgOPfRQ3nnnHRobGwvGvGDBgi7/vmRWW9N3JY0FTjaz+uT1CELvaGtgvVTRvc3soaSMARea2fdT7WwLPAfsZWaTFfrE3yYkly1YcTHJrc3sZUmDCElxhJldn2rrRmAzM/tsZ/E3Dm60tmPbSn7f1dI6pJXRL43uvGANqXbMpU55z87GiklsMddCvM8//zzbbrtt0eVX13sPnnzyyXzyk5/k+OOPL1gm37mSNNXMdu6s/ZoeHpR0CGEF4ceBw4FPA9k5lbkrGL9b4PWA5PE04GfA7cDBwK7ASQXamp3zelGeMs4551Kampp4+umnOfrooyt2jJoeHiQkqifN7FvZDZL2KlB2kwKv3061dauZnZlqa7tyBeqcc2u67DWySqrpnhawLrAwZ9tRBcoenDPD71DgQ+CZLrTlnHMlq7XLLbVoVc9Rrfa0su/qQeBSSWcCTwL7A0ML1OkL3CrpSmB7woy/S8xsVqqtUyU9CfyXkLC2KnfgdT3rorrNTyaTwYbHEy/EGbNb/fXu3ZuZM2f68iQdyK6n1bt316+21GLSWpdwDQngCmAwYQJFb0LiORJ4Ik+9nyVlbyL0IH8N/F9q/7nAxoTp8AC/B04F7i5v+M65NVFDQwNtbW3MmDGjqPILFixYpT/e3a1c8WZXLu6qWkxaWwKvA5jZUsI09dypYvn+G7PIzE4GTs7XqJm1E76XlUupMtPytW1mI4uI2zm3BuvZs2dJq/FmMhk++clPVjCi8qqVeGvmmpak7SWdDBwIdHxjLOecc2ukWuppXULoZf0CuKjKsTjnnKtBNZO0zKzLCySZmV/1dM65NUDN3REjdpLmAi9WO44S1AOxrV8WW8yxxQvxxRxbvBBfzJWOd3Mz27izQjXT01qNvFjMrUhqhaSnYooX4os5tnghvphjixfii7lW4q2ZiRjOOedcZzxpOeeci4YnrfKbWO0AShRbvBBfzLHFC/HFHFu8EF/MNRGvT8RwzjkXDe9pOeeci4YnLeecc9HwpFUkSdtJ+pOk+ZLeknSupE7Xypa0gaRrJL0v6QNJN0jqV4vxShokyfL83FzpeJPjbyXpCkn/krRUUqbIetU6xyXHW81zLOlwSXdJelNSu6SpkoYXUa+XpJ9JelfSPEn3Jqt8V9wqxJzvHOe70Xa54x0m6S+SZkpaIOlFSWdJWqeTelX5DHc15mp+jv17WkWQ9BHgIeA5wqrHWxLuKr8WcFYn1X8LfAw4AVgG/IRwb8XP1Wi8EG5QPCX1uru+ALk9YfmZJ4AO/5Hn6PZznOhqvFCdc3w68CrwneR4+wM3Sqo3s192UO9iYFhSbwYwFnhQ0sfNbEFlQ+5yzBA+87elXs+tTIgr6Ac8AvyUsAL6roTz1Z8CN/NOVOszDF2PGarxOTYz/+nkB/gB8D6wfmrb94D56W156u1OWBtsz9S2XZNtX6jBeAclsR1YpfO8Vur5bUCmiDpVOcerEG/VzjFQn2fbjcCrHdRpAJYAx6S2fZSwfNAJtRhzUsaAk7v7HBeI5XxCMlCB/VX7DK9CzFX7HPvwYHH2A/5oZnNS224mrP21Vyf1ppvZ5OwGM/sr4X+O+1Ui0NRxuxJvVZnZsi5Uq9Y57mq8VWNm+f4X/A9gkw6q7ZM8/j7VzpvAY1T4/CbH6krMtWYmHffEq/YZ7kBnMVeNJ63ibAO8kN5gZq8Tei7blFIv8Xwn9VZVV+PNuia5RvO2pIskrVuJIMukWud4VdXKOd6DMIxcyDZAm4X16NKqeX47izlrrKQlkt6TdLWkjSodWJakHpLqJH2WsNjs5ZZ0UfKoic9wiTFndfvn2K9pFecjhK5yrveTfV2pN7gMcXXluB3FuxC4FHgAmAM0A98nXBM7uLwhlk21znFX1cw5ljQ0OebXOijW1c9SRRQZM8BvCKuSzwB2Bn4IfELSrhYWl620eUCv5Pm1wHc7KFsrn+FSYq7a59iTVvHy/Y9DBbaXo96qKvm4ZvY2K154zUiaDlwmaScz+2eZYyyXap3jktXKOU5m/90I3GlmkzopXhPnt5SYbcXVxidLeh64DziI7llkdg+gjnBt6mzCeoHf6qB8LZzjomOu5ufYhweL8z6wYZ7tG5D/f0id1duwk3qrqqvx5pOdffWpVYqocqp1jsupW89xMkx2P/A6cHQnxWvi/JYYcz5/ANrppnNsZn83s8fM7CLCUNs3JW1ZoHhNnOMSY86nWz7HnrSK8wI5Y8uSGoH1yD8WXbBeotAYdrl0Nd58LOex1lTrHJdTt51jSXXAPYSL7AeY2bxOqrwANEpaL2d7t53fLsS8ktS1mWp8jv+ePG5RYH8tfoY7izmfbjnHnrSKcz+wr6S+qW1fBT4EHu2kXv/kwiYAknYmjFPfX4lAU8ftSrz5DEsep5YjsAqo1jkup245x5LWBm4Ftgb2M7N3i6j2QPJ4SKqdgYTvD1X8/HYx5nztfBHoQ3U+x59JHl8tsL8WP8OdxZxP93yOO58c4pIv6z4HPEP40t9g4CJggpmdlSr3MvComR2f2vYHYAjhS3jZLw2+a2aV/nJxyfFKGgv0JXxZcA6wJ+Fi7H1mdlil4k3FU0f48ijAGcD6wDnJ6/vMbH6tnOOuxlvNcyxpIvB14NvAX3N2/8PMFkr6E4CZDU3VuwI4jBW/XNwPqPiXi7sSs6RRhMkXDxG+7PopwpfqXwT2qOREjOSz+BDwLLCU8Mf/DOAeMzsiKVMzn+GuxlzVvxXd/cWwWH+A7YCHCb2Vt4HzgB45ZaYBk3K2bQhcQxibnkO4kLzSFyZrIV7gCOAp4APCl0dfBs4FenXTOR5EGFrI9zOoBs9xyfFW8xwnsXQWb4acL0kTZpRdREhY8wgTGrbops9EyTEDQwl/TGcCi4E3CHf12KAb4j2P8J/F9uTz+HfgFKBnznuqic9wV2Ou5ufYe1rOOeei4de0nHPORcOTlnPOuWh40nLOORcNT1rOOeei4UnLOedcNDxpOeeci4YnLeecc9HwpOWccy4a/w93/uF12DNhhAAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "(df.country\n", + " .value_counts()\n", + " .apply(np.log10)\n", + " .head(n=10)\n", + " .sort_values(ascending=True)\n", + " .to_frame()\n", + " .plot\n", + " .barh(grid=True, color='green', fontsize=15, title='Number of movies (log) per country'));" + ] + }, + { + "cell_type": "code", + "execution_count": 373, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 373, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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3x9Oz/Hx9vbbb/PVr34Vu91OXl4e55xzDlu2bCE1NXXA67785S8DsHTpUl566aV+z7viiiuw2+0A3HTTTVx22WWsXr2aJ598khtvvHH0vohSSqkemtq7+P3mI/xm00Eqmo99DPaM47K4acUszpuXO+6dzKIRbU27DHgzYv/7weVp4AagADgu9KIxpllELgQeBbYCjcCPgZ+MvMijZ+HChbzwwgvHHO/v7wqHw0EgEAjv937uOT4+HgC73Y7P1//9kOTk5PD2jBkzyMvL44033uDdd9/lmWeeGdJ3UEopNbhPalp5csNBXnqvnE5voMdrcXYbly0p5MYVs1hQOHDlbKJFVd83xqwzxkgfyw3B128wxpT2uuZDY8zZxpgEY0yBMWbS1bLPO+88PB4PTzzxRPjYli1byMjI4LnnnsPv91NbW8tbb73F8uXLmTlzJh999BEej4fm5mZef/31QT8jJSWF1tbWAc+5+eabufbaa7nyyivDNXCllFIjEwgY3txTw8onN3PBT97id+8e7hHY2a44Vl8whw13n8ePrlg86QMbYmTs8bEiIvzhD39g9erVPPDAAyQkJIQf+XK73SxevBgR4d///d/Jz7f61V155ZWcdNJJzJkzh5NPPnnQz7jkkkv4yle+wssvv8wjjzzS5zmXXnopN954ozaNK6XUKGju8PLH7Ud5etNB9te2HfP6goJUbjpzFpcsLiDeEVsVJZlklV/KysrM1q1bexzbvXs38+fPn6ASjb2tW7fyzW9+k/Xr14/p50z1n6NSavoyxvBBeTPPvHuI/36/4pgmcBG4aEEeN62YxfJZmZNulEgR2WaMKRvsvGld054MHnjgAX7+85/rvWyllBoGt8fHf++o4Jl3D7GrouWY11PiHVy1bAbXn1HKjMykCSjh6NLQnmB33303d99990QXQymlYoY/YNhysIGXd1Twp/crcHuO7fg7Lz+Fr502ky+dXIQrfupE3dT5JkoppaYsYwzbjzTxp/cr+POHlVS3eI45J95h4+9OKuRrp5Vw8oz0SdcEPho0tJVSSk1Kxhh2VbTwygeVvPJBBeWNfc8MfVxOMl87dSZfPqWI9KS4cS7l+NLQVkopNWl0ev1s2l/PG7treOPjGo429R3UWclxfG5RPpcuLmJZacaUrFX3RUNbKaXUhKpq7uTNPTW8vruGDZ/U0eH193leaoKDi0/M55LFhZw+OwuHfXIMLTqeNLSH4Ic//CG/+93vsNvt2Gw2fvGLX3DqqaeOynu7XC7cbveovJdSSk1mxhh2Hm3htd3VvP5xNTuPHtvrOyQlwcH583K5ZHEhZ83JmTRjgE8UDe0obdq0iVdeeYX33nuP+Ph46urq6OrqmuhiKaVUTOj0+tnwSR2v7a7hjY+r++xIFjI7J5nz5+Vy3rw8ykozcE7DGnV/NLSjVFlZSXZ2dnh88ezsbDZv3swdd9zBSy+9xMsvv8zVV19Nc3MzgUCABQsWsH//fj799FNuv/12amtrSUpK4oknnmDevHkcOHCAa665Bp/Px8UXX9zjs370ox/xX//1X3g8Hr70pS/x/e9/n4MHD/K5z32OM888k40bN1JUVMTLL79MYuLETRGnlFIDae308vruGv7nw0rW76s9ZsCTEIdNOHV2JufNy+O8ebnMyk7u8zwVg6Fdevf/jNl7H3zgC/2+dtFFF/GDH/yAuXPncsEFF3DVVVexYsUKtm/fDsD69es58cQT2bJlCz6fL9xsfsstt/D4448zZ84c3n33XW677TbeeOMNvvGNb3DrrbeycuVKHn300fDnrF27ln379rF582aMMVx66aW89dZblJSUsG/fPn7/+9/zxBNPcOWVV/Liiy9y7bXXjtnPQymlhsrt8fH67mr+54NK1u2tpcvXd1CnJzn5zAm5nD8/l7Pn5pCa4BznksammAvtieJyudi2bRvr16/nzTff5KqrruKBBx7g+OOPZ/fu3WzevJm77rqLt956C7/fz1lnnYXb7Wbjxo1cccUV4ffxeKwmoQ0bNvDiiy8CcN111/Hd734XsEJ77dq14XHN3W43+/bto6SkhFmzZrFkyRLAmv7z4MGD4/gTUEqpvrV3+Xjj4xr+54NK3vi4Bk8/QX18rovz5+dywfw8TinJwD4Jp76c7DS0h8But3Puuedy7rnnsmjRIp5++mnOOussXn31VZxOJxdccAE33HADfr+fBx98kEAgQHp6Ojt27Ojz/fp6RMEYwz333MPXv/71HscPHjwYbpoPlaWjo+9HIZRSaqyFgvrPH1pB3V/T98LCVL5wUgGfO7FAm71HQcyF9kBN2GNpz5492Gw25syZA8COHTuYOXMmZ599NitXrmTlypXk5ORQX19PVVUVCxcuRESYNWsWzz//PFdccYU1oP0HH7B48WJWrFjBs88+y7XXXttj3PHPfvazfO973+NrX/saLpeLo0eP4nRqs5FSauJFG9Tz8lP4u5MK+PyiAmbnuMa5lFNbzIX2RHG73dx55500NTXhcDg4/vjjWbNmDcnJyVRXV3P22WcDcNJJJ5GbmxuuRT/zzDPceuut3H///Xi9Xq6++moWL17Mww8/zDXXXMPDDz/M5ZdfHv6ciy66iN27d3P66acDVrP8b3/7W51nWyk1IerdHt7cU8trH1Wzbm//QT03z8XnFxXwdycVcHxuyjiXcvrQqTmnEf05KqUGY4zh01o3f/2ohtd3V7PtcCP9xUQoqL+wqIA5eRrUI6FTcyqllIqKx+dn84EG3vy4ltc/ruZQfXu/52pQTywNbaWUmoaONLSzbm8tf9tTw8ZP62nv6nvoUJvAKSUZXLAgjwvm52rT9wTT0FZKqWmgttXDjiNNvLu/nnV7a/mkpv9hk5Pj7Jw9N4fz5+fxmRNyyHLF93uuGl9Rh7aI3AZ8GygAdgGrjTHrBzj/duAOoBQ4DPzQGPPrEZVWKaXUoDq9fnZVNLP9cBM7jlhLf9NahpRmJXHuCbmce0IOpx+XRbxDO79ORlGFtohcBTwM3Aa8HVy/KiILjDGH+zj/VuD/Af8AvAssB54QkUZjzJ9Gq/BKKTWduT0+DtS2sb/Ozae1beyvtdb7qlvxBQbuZBzvsHHa7CzOPSGHc0/QoUNjRbQ17buAp4wxTwT37xSRi4FbgXv6OP864AljzO+D+/tFZBnwXUBDWymlouT1Byhv7OBAnZv9tW3sr2sLB/VAk270FuewsagojSUz0jnz+GxOm51FYpzWpmPNoKEtInHAUuDBXi+tBc7o57J4oLPXsQ5guYg4jTHeoRZ0otntdhYtWoTX68XhcHD99dezevVqbLbJMfuMTu2pVOzy+QNUNndysL6Ng/XtHKpr42C9FdCH69sHrTX3ZXZ2MktmpLOkJJ0lM9KZl5867ae1nAqiqWlnA3agutfxauCCfq75C/D3IvISsBUr9G8GnMH3q4w8WURuAW4BKCkpibbs4yoxMTE8HGlNTQ3XXHMNzc3NfP/735/QchljmGzP2iulejLG0NjupbyxnaONHZQ3dnC0qYND9W0cqm/nSGM7Xv/Q/x877UJJZhKzc1zMzknmuGxrPSc3hbQkHUlxKhpK7/He/6Kkj2Mh/wLkAxuD51UDTwPfAY55rsAYswZYA9bgKkMo04TIzc1lzZo1LFu2jPvuu49AIMDdd9/NunXr8Hg83H777Xz9619n3bp13HfffWRnZ7Nz506WLl3Kb3/7W0SE0tJSrrnmGt588028Xi9r1qzhnnvu4ZNPPuHb3/42q1atwu12c9lll9HY2IjX6+X+++/nsssuC0/T+ZnPfIZNmzbxxz/+MVy2uro6LrnkEu69916+8IWJGfJVqenEHzDUuz1Ut3iobumkurWT6hYPNS2dVLV0hkO6w9v3I1XRyE9NYFZ2MrNykpmdncys7GRm57iYkZGIQ+eanlaiCe06rKDN73U8l2Nr3wAYYzqAm0Tk60AeVs36FqA1+H7Dd1/aiC4f+L2boz519uzZBAIBampqePnll0lLS2PLli14PB5WrFjBRRddBMD27dvZtWsXhYWFrFixgg0bNnDmmWcCMGPGDDZt2sQ3v/lNbrjhBjZs2EBnZycLFy5k1apVJCQk8Ic//IHU1FTq6uo47bTTuPTSSwFrLPRf/epXPPbYY+EyVVdXc+mll3L//fdz4YUXjuIPRqnYYIzB6zd4/QF8fkOXP4AvELEdfM3rD+ALGLy+AN7g2uML0OX30xXaDq49Xj9uj5+WTi+tnV5aO33BbR+tnT6a2rsYRuv1MXJS4inNSmJmVnJ4PSsY0Mnx+nSusgz6L8EY0yUi24ALgecjXroQeHGQa71AOYCIXA28Yozpe+DaGBRqll67di0ffPABL7zwAgDNzc3s27ePuLg4li9fTnFxMQBLlizh4MGD4dAOBfCiRYtwu92kpKSQkpJCQkICTU1NJCcn83/+z//hrbfewmazcfToUaqrrb+TZs6cyWmnnRYui9fr5fzzz+fRRx/lnHPOGbefgVJjrc3jY3dlCzuPNnOooZ2WDl84PFs93vC+2+MbVhPzeHHFOyhKT6QoI5HijESK0hOZkZlEaVYyM7OSNJhVVKL9V/IT4DcishnYAKwCCoHHAUTk1wDGmJXB/bnAqcA7QAZW7/MTgetHs/ATaf/+/djtdnJzczHG8Mgjj/DZz362xznr1q07ZjpNn88X3g+9ZrPZepxns9nw+Xw888wz1NbWsm3bNpxOJ6WlpXR2Wv37kpN7Pp7hcDhYunQpf/nLXzS0Vcxq7vCy62gzOyua2Xm0hV0Vzeyva+t37OvJIis5jtzUBPJS48lLSSA3Nd7aT4mnMD2RGRlJpCY6+pyOV6mhiCq0jTHPiUgWcC/W4Co7gc8bYw4FT+nde8yOFdQnAF7gTeAMY8zBEZd4CE3YY6W2tpZVq1Zxxx13ICJ89rOf5ec//znnnXceTqeTvXv3UlRUNOLPaW5uJjc3F6fTyZtvvsmhQ4f6PVdEePLJJ7niiit44IEHuPvuu0f8+UqNtY4uP1sPNfD2J3Vs/KSenRXNIw5oh01w2m047aG1DYe9+5jDZsPpsOG0ScRxG3F2G/HOyLWdOIeNOIeNlHgHKQkOUhOd1jrBGd5PTXBqr2w1bqJujzHGPAY81s9r5/ba3w2cPKKSTTIdHR0sWbIk/MjXddddx1133QXAzTffzMGDBznllFMwxpCTk9Ojc9hwfe1rX+OSSy6hrKyMJUuWMG/evAHPt9vtPPvss1xyySWkpqZy2223jbgMSo0mrz/Ah0eb2fhJHW9/Usd7h5ro8g98x8wmMCc3hYVFqZyQl0J6kjMYmlZwWou1He+waW1WTWk6Nec0oj9HNZ6MMRxp6GBHeRM7Djex40gjOyta6PL1H9I2gfkFqSwqSmNhURonFqYyLz9VBwFRU55OzamUGlfN7V52lDfxfnCs6/ePNFHf1jXodXNyXaw4PpsVx2dz6uxMUhP0+WKl+qOhrZQasi5fgN2VLbwfrkU3sb+uLaprizMSOW12FiuOz+KM47LJS00Y49IqNXVoaCulBtXp9bP9cBPv7K/n3QP1bD/chGeAZu6QlASHNZRmcFk8I51sneZRqWHT0FZKHaPT6+e9Q428s7+edw40sOPw4B3GHDZhQWEqi4vTw2Nez8pKxmbTjmFKjRYNbaUUxhg+rXWzbk8tb+2r49399YPWpGdkJrJkRka4Fr2wMJUEp3YYU2osaWgrNU01d3jZ+Ekdb+2r5W97aqlo7j0xX0/H5SRz6uwsTpudxamzMvVetFITQEM7SiLCXXfdxY9//GMAHnzwQdxuN/fdd9/EFkypKNW0dLL5YANbDjSw+WAjH1e1DDiQyXE5yZxxnNWje/msTHJTNKSVmmga2lGKj4/npZde4p577iE7O3vI1/t8PhwO/XGr8dHe5ePTmjZ2V7aw5WADWw42cLC+fcBrUhIcrDgum3NOyOHsuTkUpSeOU2mVUtHSFImSw+Hglltu4aGHHuKHP/xhj9cOHTrETTfdRG1tLTk5OfzqV7+ipKSEG264gczMTLZv384pp5zC2rVrWb9+PWlpaWRnZ/PQQw+xcuVKrrvuOq6//nqOP/54rrvuOtrarEdnfvazn3HGGWdw3XXX8ZWvfIXLLrsMsEZKu+qqq8ITjqjpyRhDU7uXg/Vt7Ktx80mNm33VreyrcVPe2DHo9TaBRUVpnD03h3Pm5rBkRrpO86jUJBdzob3o6UVj9t4fXv/hgK/ffvvtnHTSSXznO9/pcfyOO+5g5cqVXH/99Tz55JP84z/+Y3gY07179/Laa69ht9tZtWoVGzZsYObMmcyePZv169ezcuVK3nnnHX7+859js9n461//SkJCAvv27eOrX/0qW7du5eabb+ahhx7isssuo7m5mY0bN/L000+P2c9BTTyfP0Bju5eGti7q2zxUNVvzMlc0d3C0qZOKpg4qmjpo74p+juY4h42TZ6SzfFYmy0ozOWVmBi6dWUqpmKL/Y4cgNTWVlStX8tOf/pTExO6mw02bNvHSSy8BcN111/UI9SuuuAK73epRe9ZZZ/HWW28xc+ZMbr31VtasWcPRo0fJzMzE5XLR3NzMHXfcwY4dO7Db7ezduxeAc845h9tvv52amhpeeuklLr/8cm1qn4SMseZstuZgDtDp9VvbPmvd7vH3OR+zOzi9ZENbF3VtHhraumju8I5o4gy7TSjNSuL4XBeLZ6SzvDSTRcVpxDu0d7dSsUx/8w/R6tWrOeWUU7jxxhv7PSdywoLIKTTPPvtsHn30UQ4fPswPf/hD/vCHP/DCCy9w1llnAfDQQw+Rl5fH+++/TyAQICGhu+PPddddxzPPPMOzzz7Lk08+OQbfbOoJBAytnT6aOrpoavfS2G6FYXOHlzaPn44uH+1dfjq8fjq6/LR3+Wn3+uny+fH5Dd6AwecP4PUHgvsB/H6DLxBc/AH8we3Qerwlx9kpzkji+DwXc3JdzMlNYU6ei9KsZJ15SqkpKOZCe7Am7LGWmZnJlVdeyS9/+UtuuukmAM444wyeffbZcLCeeeaZfV47Y8YM6urq6OrqYvbs2Zx55pk8+OCD/OxnPwOsqTiLi4ux2Ww8/fTT+P3dTZ833HADy5cvJz8/n4ULF479F52EfP4Ade4uqls6qW7ppKGti4Z2K5Ab2rpoau+ioa2LxmBAt3R4mYAcHTXpSU4yk+PCczUXpydSGFyKgovO0azU9BJzoT0Z/NM//VM4aAF++tOfctNNN/GjH/0o3BGtP6eeemo4jM866yzuueeecMjfdtttXH755Tz//PN85jOf6VFLz8vLY/78+Xzxi18co281sfwBQ02rdd+2vLGD8sZ2jjZ1UtPSSXVrJ9UtHurcnhHPtTzW4uw24h3WfMzxDjvxwfmY4512Ep228BSSqb2mlUxNcJKR7CQrOZ7M5DgykpzaKUwpdQydmjNGtLe3s2jRIt577z3S0tKG9R4T+XMMBAw1rR6ONLZT3thOeUMwnJvaKW+0OlV5/aP/bzEl3kFakpOR9Wg2AAAgAElEQVT0JCfpiXGkJzlJS3SSHO8g0WknKc5aEpx2kuIcJMVZQeuw23DYBactuLbbcNoFu83attus1+x2wWGzjttFdMhOpdSw6NScU8hrr73GTTfdxF133TXswB4PbR4fhxvaOVTfxqH6dg41tHO43grpiqbOQceujka2K47clARyU+PJdoVqpVbNNCO4nZnsJD0pjrREJ06trSqlphAN7RhwwQUXcPjw4Qktg9vjo7qlk5oWDzWtneHt6lYPFU0dHKpvp87tGdFnZCXHUZSRSHFGIsUZSRSlJ5KXmkBeajx5qQnkpMRrCCulprWYCW1jjHa4GYHI2yBtHh81rZ5wh66aFg+1bg/N7V5aPaFHknzdjyd1eKOahnEwmclxwUBOZEZGEsUZiRQFt4syEkmKi5l/jkopNSFi4rdkQkIC9fX1ZGVlaXAPQcAYOrr8tHm81NU1sONoG1c8+xfcHt+YfJ7TLhRnJFGSmcTMrNA6mZJMK5R1IA+llBqZqH+LishtwLeBAmAXsNoYs36A868BvgPMBVqA14BvGWOqhlrI4uJiysvLqa2tHeql00rAGLp8Abp81gAfXf4AxoDBcKjJyyPvNuL2DK/GHO+wkZsaT15KQripOrLpuiQzicL0ROzaEUsppcZMVKEtIlcBDwO3AW8H16+KyAJjzDE3W0VkBfAb4FvAH4E84DHgGeD8oRbS6XQya9asoV42LVQ0dbB2VxV/2VXN5oMN+KN4MDnOHgzgYOjmplghnJ7k7PFIUmrwcaSUBKtXtbZyKKXUxIq2pn0X8JQx5ong/p0icjFwK3BPH+efDpQbYx4K7h8QkUeAR0ZUWgXAJzVu/rKrirW7qni/vHnAc2dkJrJsZibLZmVyUnEahWmJpCc5NYCVUioGDRraIhIHLAUe7PXSWuCMfi7bAPyriFwCvAJkAVcDfx5+UaevmtZOth5sZMvBBt7aW8untW39nrugIJXlszIpK82gbGYm+Wk6B7JSSk0V0dS0swE7UN3reDVwQV8XGGM2ichXsZrDE4Of81fg+r7OF5FbgFsASkpKoir4VGWM4UBdG1sPNrL5YANbB5kH2WETTpudxWcX5nHhgnwNaaWUmsKG0p23981S6eOY9YLIAuCnwL8Af8HqvPYj4BfAymPe2Jg1wBqwRkQbQplimtcfYH9tGx9VNvNRRQsfVbbwUUULje3eAa9LdNo5Z24OFy3M4/x5eaQlOcepxEoppSZSNKFdB/iB/F7Hczm29h1yD7DZGPOj4P4HItIGrBeR/2uMOTKs0sa4iqYONn1az5aDDeyqaGFPdStdUTz/HOewsaQ4nbLSDJbNyuS0WVkkxukUi0opNd0MGtrGmC4R2QZcCDwf8dKFwIv9XJaEFfSRQvvTpgdUTUsnm/bXs+nTejbtr+fQAM3ckVITHJSVZrKsNJNlpRk6D7JSSikg+ubxnwC/EZHNWJ3MVgGFwOMAIvJrAGNMqOn7T8ATInIr3c3j/wG819cjYlOFzx9g88EG1u6qZv2+gTuMhRSmJbCgMJUFBanBdRrFGYk68YRSSqljRBXaxpjnRCQLuBcrgHcCnzfGHAqeUtLr/KdEJAW4A/gx0Ay8iTXYypTS0eXnrX21rN1VzesfV9M0wP3oeIeNstIMTp+dxSklGcwvSCUjOW4cS6uUUiqWxcTUnJNNvdvDGx/XsPYjq0bd6e37vnSc3cbJJemcflwWp8/OYklJujZzK6WUOoZOzTnK9te6+etH1by2u5pthxrpb+Cx/NQELlyQx4UL8lg+K5MEp4a0Ukqp0aGh3Q+fP8D75U2s/aia1z6qHvD+9JxcFxctzOOiBfksKkrT+9FKKaXGhIZ2kMfn54PyZjYfaODdAw1sO9hAW1fvDvAWEVhaksEFC/K4aEEes3Nc41xapZRS09G0DG1jDFUtneyubGH74SbePdDAjiNNAz4zneC0cfacHC5YkMd583LJdsWPY4mVUkqpaRDaHV1+9la38nFVC7srW9ld2cLHVa00dww86hhY96fPPSGHC+bnceacbL0/rZRSakJN2dA2xnDpzzawq6K5305jvc3KTmZ5aSbLZ1lLcUaizoallFJq0piyoS0i2G3Sb2CnxDuYV5DCwsI0ykozWF6aSW6qTrahlFJq8pqyoQ0wvyCV98ubmJWdzPz8VOblpzC/IJV5BSkUpWstWimlVGyZ0qH9rYvm8v/93QKdXEMppdSUMKVDO0t7eCullJpCbBNdAKWUUkpFR0NbKaWUihEa2koppVSM0NBWSimlYoSGtlJKKRUjNLSVUkqpGKGhrZRSSsUIDW2llFIqRmhoK6WUUjFCQ1sppZSKEVGHtojcJiIHRKRTRLaJyFkDnPuUiJg+lrbRKbZSSik1/UQV2iJyFfAw8K/AycBG4FURKennkm8ABb2W/cB/jbTASiml1HQVbU37LuApY8wTxpjdxpg7gUrg1r5ONsY0G2OqQgtwHDAbeGJUSq2UUkpNQ4OGtojEAUuBtb1eWgucEeXn/AOwyxizcWjFU0oppVRINDXtbMAOVPc6Xg3kD3axiKQBVzBALVtEbhGRrSKytba2NooiKaWUUtPPUHqPm1770sexvlyLFfq/6feNjVljjCkzxpTl5OQMoUhKKaXU9BFNaNcBfo6tVedybO27L/8AvGiMaRhi2ZRSSikVYdDQNsZ0AduAC3u9dCFWL/J+ichyYDHaAU0ppZQaMUeU5/0E+I2IbAY2AKuAQuBxABH5NYAxZmWv624B9gF/G5XSKqWUUtNYVKFtjHlORLKAe7Geud4JfN4Ycyh4yjHPa4tICnA18ANjTDT3vpVSSik1gGhr2hhjHgMe6+e1c/s41gq4hl0ypZRSSvWgY48rpZRSMUJDWymllIoRGtpKKaVUjNDQVkoppWKEhrZSSikVIzS0lVJKqRihoa2UUkrFCA1tpZRSKkZoaCullFIxQkNbKaWUihEa2koppVSM0NBWSimlYoSGtlJKKRUjNLSVUkqpGKGhrZRSSsUIDW2llFIqRmhoK6WUUjFCQ1sppZSKERraSimlVIzQ0FZKKaVihIa2UkopFSOiDm0RuU1EDohIp4hsE5GzBjk/TkR+ELzGIyKHReQfR15kpZRSanpyRHOSiFwFPAzcBrwdXL8qIguMMYf7uez3wAzgFmAfkAckjrjESiml1DQVVWgDdwFPGWOeCO7fKSIXA7cC9/Q+WUQuAi4AjjPG1AUPHxxhWZVSSqlpbdDmcRGJA5YCa3u9tBY4o5/LvghsAe4SkXIR2SciPxURVz+fcYuIbBWRrbW1tUMovlJKKTV9RHNPOxuwA9W9jlcD+f1cMxs4E1gMXA7cAVwMPNXXycaYNcaYMmNMWU5OThRFUkoppaafaJvHAUyvfenjWIgt+No1xphmABG5A/iLiOQZY3r/AaCUUkqpQURT064D/Bxbq87l2Np3SCVwNBTYQbuD65IhlVAppZRSQBShbYzpArYBF/Z66UJgYz+XbQAKe93DnhtcHxpqIZVSSikV/XPaPwFuEJGbRWS+iDwMFAKPA4jIr0Xk1xHn/w6oB34lIgtFZAXWI2MvGGNqRrH8Siml1LQR1T1tY8xzIpIF3AsUADuBzxtjQrXmkl7nu0XkAuARrF7kjcAfgbtHq+BKKaXUmPJ7ob0e2mqhrc5a2uusfU8rfP5H414kMaa/vmQTo6yszGzdunWii6GUUmq68HuhZjdUbIfKHda64QB0Ng183b014IgflSKIyDZjTNlg5w2l97hSSikV2zytULsHqndB5ftWSFftBL9n6O/VVgdpRaNfxgFoaCullJp6Opqg8QDUfAy1u62adM3H0NzfyNt9EBskZUFSNiSHlpzu/bjksSt/PzS0lVJKxRZvJ7iroLUaWsqh6Qg0Hwmuy61tT8vQ3jOtBAqXQOHJ1jrvRCuwbfax+Q7DpKGtlFJq4gX8Vqcvdw201YC7NtgBrMYK59ZKcFdDa9Xg95oHYnNA1vGQMw/yT7RCuuBkSM4ave8yhjS0lVJKjZ2u9p6BG17XdNeW3dVWYPc7yOYwOBIhfQZkz4XcBZA7D3LmW4HtiBu9zxlnGtpKKaWGp6vNapJuOmzdK26ptAK6tTK4XQGdzYO/z1CJHVx5kJIHKYVWOKfNiFiXWE3bIqP/2RNMQ1sppVTf/F7r/nDDAatTV+MhK6BDS3vd4O8xFIkZkJwLrlyrw1dyDrhywJUPKfnBoC4I3muOdmywqUVDWymlpitPa0TtuMqqGTcesgK64YDVqcv4R/YZNqcVuKHQdeVFBHC+FdCuPCug7c7R+V5TmIa2UkpNBX4vdLZYnbQ6mqCjwbpP3N7Qc7u9vjuku9wj+0ybE9KKrebo9BmQWmTVhFMLg0FdOK1rxWNBQ1sppSaaMeDrtO7/9l48LcEwjtj2tBx73kgDuD8phZA5CzJKrSV9ZjCkS6xgnmSPRE11GtpKKTWautqte73t9dBWDx2NVk23ozFY643Y72jqDt2Ad/zL6kgI1ogLutdpM4IhPQsyZoIzcfzLpfqloa2UUv3xdgTDtnczc/BYaL8tGNLt9eBtn6DCCiSkWUtiutUsnZgJSZm9tjO7QzohfUr2sJ7KNLSVUtODrysYrHU9QzZyu6PBCuSOBiukfR3jVz57nBWioeBNSIX41Ih1Wvc6ITXivDTrujiX3jseB8YYjrqPUt1ezdK8peP++RraSqnY1tXePYSlOzRoR401YEd4dK3qsXleuC82pzUudVJ2RC03w9pOzOiu8SZmWEsojJ0J41M+NSQBE2Bf4z6212znver32FazjZr2GvKT8/nrV/467uXR0FZKTW6dzdB8tHtM6fBzwsFnhttqx+6zbc5gwAbDNymjnybnbGsYzKRsiE/RJucY1tLVwp6GPXxQ+wHv1bzH9prttHa1HnNeVVsVFe4KCl2F41o+DW2l1PgyxhpJK9QEHV4HO2q1VnSHdMvRoU/80J/IGZuSsrpDNjn72Hu+oe04lwbwFGWMobKtko8bPmZPwx5r3biHo+6jg16b5EhiSe4S2rxt41DSnjS0lVLD5/MEe0H30TO6RyA39Qzn4cxd3B+bw3pWOG2G9XywKzc4qlZe98AdrjyrKVrv+U5bzZ5mPqz7kA9rP+T9uvfZWbeTZk90t0wyEzJZmreUU3JP4ZS8U5ibMReHbWLiU0NbqVhljDWghr8LTMAauSoQXJuANWuS8QfXwf2AL+KY3+qc5euwpjr0tlvPCns7utfh54JbrW1Pa/d+RyOMR03DkWCFcmpR97jS6SXW40jpJVZPaH1WWEWIvA/9Yd2HfFD7AQdbDkZ1rcPmYE76HOZlzuPk3JM5Je8USlJKkEnS4qKhrSa/UHNqaKSn0NrT2h0mXe6IfbcVJr4uq0bn67KCLXJbBBCryVRs1n54bbdqb+Glv/1ea7Fb22K3anSR+6H3NoFjl1DQ+jxW2Xyd1rbPEyyzJ+K1yPUo1lbHmz2+ZzN05LYrr2dIJ2VqE7UakC/g4+OGj9lWvY2tVVt5r+Y9WroGv62SGpfKvMx5nJB5grXOOIHZabNxTuLhVDW01dgLha6nNRiuLd0B29li1dh6BHJjz3DubLJqiGrysTm6e0EnRvSITszo2Wmrd69pZ5IGsRo2X8DHR/UfsblqM1urtrK9ZjvtvoGfj3eIg3mZ81iUs4iTck5icfZiilOKJ00NOlpRh7aI3AZ8GygAdgGrjTHr+zn3XODNPl6ab4z5eBjlVJOFz9NzTtzWKqv3bniIxd7DMLZAV6tVo1Sjz+awnu8N1eZDNXyx9az1R7YE2Bzdr9vjrUeNHIl9rBOtntCh54TjUyLWKVb4ak9pNQ5Czd2bqzazuXIzW6u34vYOPGxr6D70kpwlnJRzEvMy55HgiP3H6qIKbRG5CngYuA14O7h+VUQWGGMOD3DpQqAhYn8Mn81QI2aMNcBE06HgFHzBR2oaD3XPkdvRODFlcyRaozwlpHevE9Ig3mUFR5wrIlBcVk3OkWAFmiPOCie7Exzx1jEINk+b7mZqzLH3f8NLaN8b3I543fgjzvH3vGcc8Ac/I7i22Xs1x0cs4fImWGUO78f33I5c671cNUVVtVWx4egGNlVuYkvVFho6GwY8Py8pj7L8MpbmLaUsr4zS1NKYq0VHI9qa9l3AU8aYJ4L7d4rIxcCtwD0DXFdjjBnlCVfVsAUCVg059Kxr+LnXI9a68dDYdSxyJgWDNSViCYZsZBgnZvQM5tBaB55Qakrr8HWwrXobG45uYGPFRvY37x/w/NykXE4rOI1l+csoyyujyFU0JUO6t0FDW0TigKXAg71eWgucMcjlW0UkHvgIuN8Y01eTOSJyC3ALQElJyWBFUgMJBKClHOo/hYZPrXVou+mw1YlpJMRuPUaTkh+cmD7PerwmNLJT7+EV44NNq3btPqGU6maMYW/jXjZVbGJjxUa2VW+jK9D/76eM+AyWFyxnef5yTi04dVL16B5P0fwmzQbsQHWv49XABf1cU4lVC98CxAHXAa+LyLnGmLd6n2yMWQOsASgrKzPRFX2a87RC3b7gsje47LMmr/d1Dv9941K6H6VJn9m9nVZshXRytjbJKqWGpbqtmncq32FjxUbeqXxnwCbvOFscS/OWsqJoBacVnMacjDnYRJ+zH0r1p3eYSh/HrBON2QPsiTi0SURKgW8Bx4S26kNXuzUaVGhUqOZya2k6bIVza8Xw3jcxo/tZ17QZ1sT1aTOsUM4otV6fhn+9KqVGX0tXC1urtrKlagubKjbxafOnA54/O202ZxSewYqiFSzNW0qiQ6cF7S2a0K4D/EB+r+O5HFv7Hsi7wNVDOH9q62yJGEO511jKzeXW6FHDlZQNWcdB5nGQNRuyjre2M2dZ95CVUmoMtHvbea/mPTZXbmZz1WZ2N+wmMMCTI+nx6ZxacCqnF5zOiqIV5Cf3jhnV26ChbYzpEpFtwIXA8xEvXQi8OITPWoLVbD59BAJWENfthdo9ULcHavdC/b6R98K2Oa1gzp4D2XOtJWsOZB9v3UtWSqkx1unr5P3a93m38l22VG1hZ91OfKb/MRWcNien5J7CaYWncXrh6czPnK9N3kMUbfP4T4DfiMhmYAOwCigEHgcQkV8DGGNWBvdXAwexnueOA64FvghcPoplnzz8XmjYD7UfW+EcWur3Df/+ss1pjaMcHhmqqHuEqOw51v1m7dyllBpHXr+XD+s+5N0qK6Tfr3l/wM5jNrExP3M+y/OXs7xguTZ5j4KofusbY54TkSzgXqzBVXYCnzfGHAqe0rvLdxxWb/MioAMrvL9gjPnzqJR6onjcVhCHOn+Fwrnh06GP2OVI6DmOcniZad1nTs7VyQ2UUhPKG/Cyq24XW6ut+9Lba7bT4esY8Jq5GXOtkM5fztL8paTGpY5TaacHMWZyddYuKyszW7dunbgCGGON8lW359ie2S2DT9l2jOQcyD4BcuZCzjyrGTvnBGuSA+3wpZSaRIYT0rPSZrE8fznL8pexLH8ZmQmZ41TaqUVEthljygY7b/q2r/q91mAidXuCtea93UE9nPl702YEA3meFdDZJ1jhnKT/gJVSk0/ABDjUcohd9bvYVbeLXfW72F2/m07/wLf0il3F4eell+UvIzcpd5xKrGA6hHZHE9R/0rPGXLcXGg5YQ1IOhc1h9cKO7PyVc4K1jneNTfmVUmqE2r3tHGg+wP7m/exr2seuul18VP/RoON3AxS5iijLK7NGHsu3Rh5TE2dqh/ajp0Ht7qFfF58aEcrBdfYJ1kAjk3jKNqXU9OUL+Khqq6LcXc6h5kPsb94fDurq9uifzi1yFYWbusvyyih0FY5hqdVQTe3QThikA0RqkfUMc6i2HKo5u/L0frNSalLxB/zUddRR1V5FZVslR1uPUu4up7zVWirbKvEb/5DeMzMhk4VZC1mYvZATs05kYfZCshOzx+gbqNEwtUM7ew5U7LCCOfv47mDOnmMd04FGlFKTgDGGJk8TVW1V1tJe1b0dXGraawZ8BnogDnFQklrCrLRZzE6bzfys+ZyYdSL5yfnTcvzuWDa1Q/viB+CSn+pY2UqpCeMNeKnvqKemvSa81HbUUtNeQ1VbFdXt1VS1VeHxe0b8WTmJORSnFDMjZQaz0maFQ7o4pRinTW/tTQVTO7S1Jq2UGiO+gI/a9lqq26up7ailtr2Wuo466jrqqO2wtmvba2nobMD0PU3DkKXHp5OfnE9+Uj5FKUXMSJlBsauY4pRiCl2FOnDJNDC1Q1sppYbJG/BS1VbFUfdRKt2V1rqtkgp3BRXuCqrbq4d8D3kgyc5k8pPyrVBOzicvOY/8pHwKXAXkJ1n7GspKQ1spNS15/V6q26upbq/u0bHrqPsoR1uPjlooC0JmQia5SbnkJuWSk5RjbSda+6GQTonTlkE1OA1tpdSUYoyh1dtKbXttuNm6pr3GCui2aqraq6huq6a+s37En5WVkEVBcgHZSdnkJOaQk5hDVmKWtZ2UQ3ZiNlmJWXo/WY0aDW2lVEzwBXw0dDaE7xvXd9SHtyPvJde21w46qle0chNzKUopotBVSGFyYY91gauAeHv8qHyOUtHS0FZKTaguf1d3z+qOGurauztyRS6NnY2j1qELrBmoshOzw/eLi13FFLmKKEoposhlBbWGsppsNLSVUmPCGENLV0u4WTrcRN1e3ePxpyZP06h/dqIjMdxEnZvYfR851LkrPzmf7MRsHDb9Fahii/6LVUoNmdfvDT9r3GPp6N6ubqsetWZqsDp0ZSRkkJWYRXZCNtmJ2eF7xqHtUEgnO5N10BA1JWloKzWNGWPo9HfS2tV6zNLc1UxjZyMNnQ00dDZQ31Ef3m7pGsZMeP2wi53sxOxw7+rsRKtTVyiEQx27MhIytEOXmvY0tJWaQkKjb0XeC27yNNHU2USTp4nmrmaaPc3WtqeZFk/LsIfGjEaiI5H85HyraTopL7zkJuWSm2w99pSZkIldRy1UKioa2kpNYv6AH7fXTWNnI40eq9bb2NkYrgE3ehpp6GigtqOW+o56Gj2N41IuQchKzArXjvOS8shJzAlvh+4fu5wubaZWahRpaCs1BvwBP+2+dtq97bT52qy1t63fxe1192iabulqobWrNar5jkfKaXOSGpdKSlxKeO2Kc5Eal0pGQgaZCZlkJWSRmZBpLYmZpMWlae1YqQmgoa1UL76AD3eXOxyeoSUyVN1eN23etvC2u8sdPtbubR/VDlhDERp9KzywRzBs0+LTSI9PJy0+LbydHp9OanyqPtakVAzR0FZTSpe/i9auVitQva20dbX1CNjIWq27y02rtzUcuC1dLbi73LT72if6a/TgcrpIi08jMyGTjIQMMuIzureDNeFQx62MhAx9jEmpKSzq/90ichvwbaAA2AWsNsasj+K6M4F1wMfGmBOHWU41TYTu4YY7SnW10OJp6bPWGwrZyBDuCnRN9FcIS3IkkexMJsmZFN52OV0kOZNwOV0kO5N7LKGm6cjF5XRpM7RSKiyq0BaRq4CHgduAt4PrV0VkgTHm8ADXZQC/Bl4HikZeXBVLAiZAs6eZRo/Vcaqps4kGT4O17mywejUHwznUo7m1q3VUR70aDkHC93QjgzQ1LhVXnIsUp3XP1+V0he//upyuHkGc4EjAJrYJ/R5Kqakn2pr2XcBTxpgngvt3isjFwK3APQNc90vgaUCArwy7lGpS8Qa81LXXhQfSCM0jXN/Z81Gjho6GMX2cqC8OceCKs8IzJS4lXLsNBWvkfkpcSjiAI7eTnckauEqpSWnQ0BaROGAp8GCvl9YCZwxw3W1APnAF8L0RlFGNI2/AS017DZXuSirbKqlqq6KqrarH0JMNnQ1jWhtOcaaQGp9qdZqKS7NqufGp4Zpvanywp7PTqvlG1n4T7An6iJFSasqKpqadDdiB6l7Hq4EL+rpARBYB/wycZozxD/ZLVERuAW4BKCkpiaJIari8fi+VbZWUu8upcFdYcwe7j1LhrqCyrZLa9tpRDeQUZwqZiZmkx6eHO1GlJ6STGZ9JekJ6uBdzqFdzalyqdqRSSql+DOW3Y+/f5NLHMUQkHngW+JYx5kBUb2zMGmANQFlZ2cTe0IxhxhiaPE3h2nFlWyVV7VVUuauoaq+iwl1BTXvNiEO5x8AawckYQvMIh8aADo0JrY8TKaXU6IkmtOsAP1ZTd6Rcjq19g9W7fAHwKxH5VfCYDRAR8QGfN8asHWZ5pzVvwEt1WzWVbVbTdagJO7RUtVXR4esY8efkJOZQkFxAfnI+BckFFLgKuoeeDI4NrbVhpZQaf4P+5jXGdInINuBC4PmIly4EXuzjkqPAol7Hbgue/yXg4LBKOg0YY2j2NFPuLqe8tfyYdVVbFX7jH9FnCEJech6FyYXhuYND26FwjrPHjdI3UkopNZqirS79BPiNiGwGNgCrgELgcQAR+TWAMWalMcYL7Iy8WERqAI8xpsfx6cgX8FHVVsWR1iOUu8utdWt5eGn1to7o/ZMcSVYt2ZVPflJ+jxpzaO2060xJSikVi6IKbWPMcyKSBdyL1fy9E6uZ+1DwFO09FqGlq6U7iN3dgXyk9QiVbZUjqi3nJOZQ4CqgMLkw3HRdkFwQDuXUuFTtPa2UUlOUGDO5+n2VlZWZrVu3TnQxBtTS1UKluzLc6zqyB3aFu2JEteVERyJFriJmpMygOKWYYldxeF3oKiTBkTCK30QppdRkICLbjDFlg52nvYl6CZgADZ0NVLorqWirOGZd4a4Y8cxL2YnZzEiZYQVzMJRDIZ2VkKU1ZaWUUn2adqHd4evofhwquK50W9sVbRVUtVXhDXhH9BkJ9gQKXYXdYRwRzIWuQhIdiaP0bZRSSk0nUzq0n/v4OQ60HOgxulejp3HE7xtvj6fQVRjudV3o6rnOTMjU2rJSSqlRN7VDe+9z7GvcN+TrUuNSw527wp2+XAXWY+AWhXkAAAprSURBVFHJBRrKSimlJsSUDu2C5IJjQtshDvKS83r0uO7dAzvZmTxBJVZKKaX6N6VD+5LjLmFZ3jLyXfnhUM5KyNL5iZVSSsWkKR3aF5dePNFFUEoppUaNThqslFJKxQgNbaWUUipGaGgrpZRSMUJDWymllIoRGtpKKaVUjNDQVkoppWKEhrZSSikVIybd1JwiUgscGvTEoSkBDo/ye45U2v/f3rnH2FXUcfzzpdhS++BVSiFQgQqkWgLy0oKQUorAHwQVaKiYABEUX2DkpaBIRY0RUJCogRjSUCQi4INigLaRN1UEpYEIwQgoQrduQegDSin9+cfMdU8Pu91D9+69e+5+P8nk3DszZ+7M986Z35k5M2eA19qdiRJDTSdrVA3rVA3rVA3rVI1m6/S+iNihv0hDzmgPBpK6q4jRSiRdFxGfbXc+igw1naxRNaxTNaxTNaxTNdql03AZHn+13RnohQXtzkAvDDWdrFE1rFM1rFM1rFM12qLTcDHaQ22oh4gYihfGkNLJGlXDOlXDOlXDOlWjXToNF6N9XbszUBOsU/9Yo2pYp2pYp2pYp8yweKZtjDHGdALDpadtjDHG1B4bbWOMMaYm2GgbY4wxNaEWRlvS4ZJul/SipJB0Wil8R0nzJL0k6XVJd0nas5d0Dpa0SNJqSaskPSxpQiF8W0nzJb2W3XxJ27SgiANmoBpJ2i2f15s7vxBvlKRrJK2QtCb/5i4tLOqAaEZdkjQp142urMFSSaeU4tS2LkHTdJoi6TeSuiWtlPQrSTuW4tRWJ0lfl/TnXLZuSQskTSvFkaRLs05vSLpX0gdLcfrVQNI+ku7Labwo6RJJakU5B0oTdbpY0kP5mut1MpakyTn9NbmN+rGkkYNZvlZTC6MNjAWeBM4B3igG5Ir7W2BP4OPAh0hvVFssaUwh3oeBhcC9wEeAA4ArgLcKyd0E7A8cCxyTP88fjAINAgPV6AVgp5L7AhDArYXkrgJOAOYAhwHjgTskjRiUUjWfAdcl4AZgKnA8sE/+Pl/S4YU4da5LMECd8nEhIOBI4FBgJLBAUrHdqbNOM4CfAocAM4H1JA22K8S5ADgX+DJwEPAfYJGkcYU4m9RA0nhgEbA8p3E2cD7w1cEo1CAwg+boNAr4NakNege5Dfo9MI7UNs0BTgSubGJZ2k9E1MoBq4HTCt/3IhmWfQt+W5D+9DMKfg8D391EulNzOocW/D6a/fZud7lboVEv6SwCFha+bw2sA04p+O0KbACObne5W1iXVgOnl9L6J3Bep9WlzdUJ+FiuF9uW6s8GYFaH6jQWeBs4Ln8XsAy4uBBnNLAK+FxVDYDPAyuB0YU43wBeJK8AqpPbHJ1K558IRC/+x+b6tWvB79PAWmB8u8vdLFeXnvamGJWPaxseEbEBeJNU+ZE0EZgOLJP0oKTlkh6QdGQhnemkxunhgt9DwBrSHWKd6VejMpJ2J/WQiusjDwDeQ+pBNdJ5AXiK+msE1XV6EJgtaXtJW0g6HtgBWJzDO7kuQTWdRpEMz9rCeWtJjWojTqfpNI508/Lf/H13YBIbXy9vAPfTU74qGkwHHsjnNrgb2BnYraklaA2bo1MVpgNP5Tapwd2kunjAQDI8lOgEo/00qZfzPUnbSRop6UJgF9IQL8Ae+TgXuJ40BPUAcLekfXPYJKA78u0Z5Fu51HuYNPjFGFSqaFTmTGAF8LuC3yTSHfKKUtzl1F8jqK7TbJJBWkEyVL8A5kTE4zm8k+sSVNPpjyRjdLmkMXm4/ApgRCFOp+l0NfA4sCR/b5RheSle8XqposGkPtIo/kad2BydqtCbTitIbVYddeqV2hvtiHiL9Ix1CvAy8DpwBHAn6c+CnnJeGxHXR8RfI+Ii4BHgrGJyvfyE+vCvDRU1+j+StgROA+blc/uj9hrBu9LpO8AEYBZwIHA5cEPhBhA6tC5BNZ0iohs4iTRkuYr0GsptgL+wsZYdoZOkH5JGEE6IiPI1VS5LuXxVNOgtjb7OHbIMUKcq9BW/Vjptii3bnYFmEBGPAftJ2hoYGRHdkv4EPJqjLMvHv5VOfYq05RtAFzBRkhp3vXnCzQ688+6tdlTQqMhxpN7Qz0v+XaSe0gSgu+A/kTSUVXv600nSFNJkmf0iYmk+bamkw7L/GXR4XYJq9SkiFgJTlFZorI+IVyV1Ac/lKB2hk6QfAScDR0TEs4WgrnycRJro2WAiPeWrokEX7+wpTszH4aJTFbpIEx6LTCC1WbXRqT9q39MuEhGv5cZjT1IPqDG0+zzwErB36ZS96Nm7ewlpgsT0Qvh0YAwbP2+qNZvQqMiZwH0R8UzJ/zHSbPujGh5Ky72m0kEawSZ1em8+lnsJb9NzPQ2LugTV6lNErMgGeyapIb49B9VeJ0lXA58CZkbE06Xg50iGpHi9bEWa2dwoXxUNlgCH5XMbHEVq055vSkEGmSboVIUlwFRtvAT1KNIjrMc2J99DknbPhKviSJV6v+xeBy7Jnyfn8JNIw3N7kJbhPA/cVkrjK6QhupOA9wMXkQxQcQbsncATpCVh0/PnBe0uf6s0yvEmkwzQKX38zs9Is1ZnkZb63EN6PjWi3Rq0QifSRLy/k0YWDiYNEZ9LmmB1XCfUpWbVJ+D0XPYppFm8LwNXluLUVifgJ6RZ3TNJvcSGG1uIc2GO80lgGvBLkrEdV1UD0qz7rnzutJzWSuDcdmvQYp0m5zp4Hmm4u1E/x+bwEVm7P+S2aRaprbqm3Ro0Vc92Z6Dinz4j/0llNy+Hn00aVllH6jlfRhqyK6dzAfAv0szMR8hLTwrh2wE35sqzMn/ept3lb7FGc4FXgK36+J2tgGvoeZa5gMISi6HumqETaX3ybaQhtzXAUuDUTqlLTdTp+yRjsw54hrSuWKU4tdWpD30CuLQQR8ClpEd0a4H7gGnvVgPS+wDuz2ksA75V1nKouibqNK+PdGYU4kwG7sht08u5rRrVbg2a6bzLlzHGGFMTOuqZtjHGGNPJ2GgbY4wxNcFG2xhjjKkJNtrGGGNMTbDRNsYYY2qCjbYxxhhTE2y0jelglHhQ0rEFv9mS7mpnvowxm4fXaRvT4UiaBtxCekvUCNIb7I6JiH8MIM0tI2J9k7JojKmIjbYxwwBJPyC9vW0MsCoiLpN0KvBFYCTpHc9fiogNkq4D9gdGAzdHxLdzGv8GriVtbXtVRNzShqIYM6zpiF2+jDH9Mpe0LeY64MDc+/4EcEhErM+G+mTgJuBrEfFK3qL1Hkm3RkRjh7w1EVHeSckY0yJstI0ZBkTEGkk3A6sj4k1Js4CDgEfTTpCMpmdbxDmSPkNqH3YGPkDPtrY3tzbnxpgiNtrGDB82ZAdpg4brI+KbxQh5i81zgIMjbad5I2mTmAZrWpJTY0yvePa4McOTxcBsSRMAJG0vaTIwHlgFrJS0E3B0G/NojCnhnrYxw5CIeELSXGCxpC1Ie8ufBTxKGgp/EngWeKh9uTTGlPHscWOMMaYmeHjcGGOMqQk22sYYY0xNsNE2xhhjaoKNtjHGGFMTbLSNMcaYmmCjbYwxxtQEG21jjDGmJvwPmW9A0W2SkIgAAAAASUVORK5CYII=\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "countries = set(['Norway', 'Sweden', 'Denmark'])\n", + "df_world_pivot.loc[:, countries].plot(linewidth=3, title='Population growth', fontsize=14, figsize=(8, 4))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## (7.2) Using matplotlib\n", + "\n", + "Greater control. Allows creating of publication-quality plots. \n", + "Does require more code and knowledge of matplotlib." + ] + }, + { + "cell_type": "code", + "execution_count": 414, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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twkRj2hkDtHJHKKTH3H0gjACyCqRwRGNzCE6mUN08iOOXjgtX/jCF1i7dm24zYh6onnYYaQQjcwhOplDdPIjjn4AImFqXV1dHTfddBOTJ08mLi6OnJwcLrroIt58881wm+YjEnSKBlasWBFuEyIe0cgcopM5RCc/4ugHoKOjI9wmsHr1at5//32eeuopDhw4wGuvvcall15KQ0NDuE3zEQk6RQO7du0KtwkRj2hkDtHJHKKTH3H0A+ByucJ6/5MnT/LOO+/w0EMPcdFFFzFp0iTOPvtsbrvtNv71X/+V3/zmN8yePdt3/ptvvolSiocffthXtmbNGq6//nrf43fffZcVK1b45qT/27/9Gy0tLb7nOzo6WLt2LXa7nZycHB588MFT7Oru7ubOO++koKCApKQkiouL+fvf/+57vqSkBKUUb7/9NkuXLiUxMZGioiJKS0tDLVFU0dTUFG4TIh7RyByikzlEJz9jIjNeXyb/6K9hu3fFQ583dZ7dbsdut/OXv/yF4uJi4uPjez2/cuVKbrrpJo4fP05eXh4lJSVkZWWxceNG7rzzTsCIOvU6/o8//piLL76Ye++9l9/97nc0NjZy66238q1vfYuXX34ZgNtuu40333yTV155hfz8fO699142b97MFVdc4bvvtddeS3l5Oc8//zwFBQX86U9/4otf/CI7duzoNZ3lxz/+MQ8//DB5eXnccsstrFmzhr1798q4mSAIwgijRktkYlFRkd65c2e/z+3bt69X6zcaHD3AK6+8wvXXX09HRweLFi1i+fLlfPWrX2Xp0qUA5Obm8vjjj/P1r3+d5cuX86UvfYn777+fkydPcuTIEWbMmEFVVRX5+flcffXV2Gw2nnrqKV/9H330EYsWLaKmpobExEQyMzN5+umnWbNmDQBtbW0UFBRw+eWX8+yzz1JeXs706dOpqKhg4sSJgNHzsXr1asaPH8+6desoKSlh1apVvPHGG1xyySUAbN26leLiYiorKykoKDgj/fq+l9FCS0tLVKbuHUlEI3OITuYYCzoppT7QWhcFO0+67iOY1atXc+zYMV599VUuvfRS3n33Xc4991xfl/qKFSsoKSmho6ODnTt3snbtWrKystixYwclJSVMmzaN/Px8AD744AM2bNjg6ymw2+0sX74cgPLycsrLy+nu7mbZsmW++9vtdubPn+97XFpaitaa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0YhG5hCdzHEmOtW2dvHn0mpe/qCKg7VtpzxvUXDBjHH8S9EELpqdTVxMZM8+GlFHr7UuAQZckFwbkYH3eLawMpYXYBkMopM5vNGzwsCIRuYQncwxWJ06u128/UkN/9+H1WzcX4fLfWqg+uTMRK5cUsDqJQXkpSb0U0tkIoM9Qlh49tlnufnmm3tNpRMEQRhJnC43W8sb+H8fVfP3shO0d586JS4x1srn5+fx1aIJnD053bcaZzQhjn4AEhMTw20Ca9euZf369YARWJKens7cuXO58sorueGGG3otBRsuIkGnaKCoKOgMmDGPaGQO0ckcA+mktebDypP85aNjvLb7GPVt3f2ed86UDL66pIDL5ueRFBfdrjK6rR9Genp6IiLr22c+8xmee+45XC4XdXV1/POf/+SnP/0pzz33HG+//XbYx8eHopM3odBYoqamBrvdHm4zIhrRyByikzkCderqcfFueT1v7avln/tqOdHS1e81hVlJfPmsfL581ngmZ42e2KPIiP2PQCLFGcXFxZGbm0t+fj5nnXUWP/jBDygpKaG0tJRHHnkEgO7ubu68804KCgpISkri7LPP5u9//7uvjpKSEpRSvP322yxdupTExESKiop82Z3A6Eq32+387W9/Y9asWSQmJvKlL32J5uZmXn75ZaZPn05qairf/OY3fdmsAF5//XXOP/980tPTycjI4JJLLmHfvn2+5ysqKlBK8cILL3DhhReSkJDAk0+ems24qamJ5cuXc8kll5yyYt5owJvRShgY0cgcopM5dh88yu+3H+Xbz+7grPv+wbee3cnz2z89xcnnpMRxXfEUXvteMW//cAW3fGb6qHLyMFZb9PekBj1l2CaN3dN8xlXMmzePz33uc7zyyivce++9XHvttZSXl/P8889TUFDA66+/zhe/+EV27NjBwoULfdf9+Mc/5uGHHyYvL49bbrmFNWvWsHfvXt+Yk8Ph4LHHHuP3v/893d3drF69miuvvJL4+HheeeUVGhoauOKKK1i3bh0//OEPAejo6ODWW29lwYIFdHZ28rOf/YwvfvGL7N27l9jY2F73fvTRR3nqqaew2Wy89dZbvueOHz/OxRdfzOzZs9mwYUOv6wRBEMzQ2tXDjopG3j3UwNbyBvYd7wTK+j03NcHG5+bm8uVF41k6JROrJfrG3QfD2HT0o4A5c+bw1ltvUV5e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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = plt.subplots(figsize=(8, 4))\n", + "\n", + "ax = (df_world_pivot.loc[:, countries] / 10**6).plot(ax=ax, lw=3, zorder=50)\n", + "\n", + "ax.set_title('Population growth', fontsize=17)\n", + "ax.legend(fontsize=14, loc='upper left')\n", + "ax.tick_params(axis='both', which='both', labelsize=14)\n", + "ax.set_ylabel('Population', fontsize=14)\n", + "ax.set_xlabel(ax.get_xlabel(), fontsize=14)\n", + "ax.grid(True, zorder=-50, ls='--')\n", + "ax.set_ylim([3, 11]);\n", + "\n", + "#plt.savefig('my_figure.pdf')" + ] + }, + { + "cell_type": "code", + "execution_count": 415, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = plt.subplots(figsize=(8, 4))\n", + "\n", + "# Compute kernel density estimates\n", + "from KDEpy import FFTKDE\n", + "data = df[['imdb_score', 'gross']].dropna(how='any')\n", + "\n", + "kde = FFTKDE(bw='ISJ', kernel='gaussian')\n", + "\n", + "x, y = kde.fit(data.imdb_score.values).evaluate()\n", + "ax.plot(x, y, label='imdb_score', lw=2)\n", + "\n", + "y = kde.fit(data.imdb_score.values, weights=data.gross.values).evaluate(x)\n", + "ax.plot(x, y, label='imdb_score weighted by gross', lw=2)\n", + "\n", + "ax.set_title('Score distribution', fontsize=17)\n", + "ax.legend(fontsize=14, loc='upper left')\n", + "ax.tick_params(axis='x', which='both', labelsize=14)\n", + "ax.set_yticklabels([])\n", + "ax.set_xlabel('Score', fontsize=14)\n", + "ax.grid(True, zorder=-50, ls='--')\n", + "ax.set_xlim([0, 10]);\n", + "\n", + "#plt.savefig('my_figure.pdf')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# (8) Time series manipulations" + ] + }, + { + "cell_type": "code", + "execution_count": 419, + "metadata": {}, + "outputs": [], + "source": [ + "df_stocks = pd.read_csv(r'https://raw.githubusercontent.com/vega/datalib/master/test/data/stocks.csv')" + ] + }, + { + "cell_type": "code", + "execution_count": 420, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
symboldateprice
0MSFTJan 1 200039.81
1MSFTFeb 1 200036.35
2MSFTMar 1 200043.22
3MSFTApr 1 200028.37
4MSFTMay 1 200025.45
\n", + "
" + ], + "text/plain": [ + " symbol date price\n", + "0 MSFT Jan 1 2000 39.81\n", + "1 MSFT Feb 1 2000 36.35\n", + "2 MSFT Mar 1 2000 43.22\n", + "3 MSFT Apr 1 2000 28.37\n", + "4 MSFT May 1 2000 25.45" + ] + }, + "execution_count": 420, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_stocks.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 421, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
symboldateprice
0MSFT2000-01-0139.81
1MSFT2000-02-0136.35
2MSFT2000-03-0143.22
3MSFT2000-04-0128.37
4MSFT2000-05-0125.45
\n", + "
" + ], + "text/plain": [ + " symbol date price\n", + "0 MSFT 2000-01-01 39.81\n", + "1 MSFT 2000-02-01 36.35\n", + "2 MSFT 2000-03-01 43.22\n", + "3 MSFT 2000-04-01 28.37\n", + "4 MSFT 2000-05-01 25.45" + ] + }, + "execution_count": 421, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_stocks = df_stocks.assign(date=lambda df:pd.to_datetime(df.date))\n", + "df_stocks.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 427, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
symboldatepriceyear
0MSFT2000-01-0139.812000
1MSFT2000-02-0136.352000
2MSFT2000-03-0143.222000
3MSFT2000-04-0128.372000
4MSFT2000-05-0125.452000
\n", + "
" + ], + "text/plain": [ + " symbol date price year\n", + "0 MSFT 2000-01-01 39.81 2000\n", + "1 MSFT 2000-02-01 36.35 2000\n", + "2 MSFT 2000-03-01 43.22 2000\n", + "3 MSFT 2000-04-01 28.37 2000\n", + "4 MSFT 2000-05-01 25.45 2000" + ] + }, + "execution_count": 427, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_stocks.assign(year=lambda df:df.date.dt.year).head()" + ] + }, + { + "cell_type": "code", + "execution_count": 432, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
price
meanstd
symboldate
AAPL200021.7483339.622822
200110.1758331.380932
20029.4083332.155993
20039.3475001.709099
200418.7233337.723485
200548.17166712.035228
200672.04333310.322289
2007133.35333340.334396
2008138.48083333.998239
2009150.39333342.152117
2010206.56666715.571530
AMZN200043.93083317.159926
200111.7391673.664516
200216.7233332.799420
200339.01666712.326313
\n", + "
" + ], + "text/plain": [ + " price \n", + " mean std\n", + "symbol date \n", + "AAPL 2000 21.748333 9.622822\n", + " 2001 10.175833 1.380932\n", + " 2002 9.408333 2.155993\n", + " 2003 9.347500 1.709099\n", + " 2004 18.723333 7.723485\n", + " 2005 48.171667 12.035228\n", + " 2006 72.043333 10.322289\n", + " 2007 133.353333 40.334396\n", + " 2008 138.480833 33.998239\n", + " 2009 150.393333 42.152117\n", + " 2010 206.566667 15.571530\n", + "AMZN 2000 43.930833 17.159926\n", + " 2001 11.739167 3.664516\n", + " 2002 16.723333 2.799420\n", + " 2003 39.016667 12.326313" + ] + }, + "execution_count": 432, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_stocks.groupby([df_stocks.symbol, df_stocks.date.dt.year]).agg([pd.Series.mean, pd.Series.std]).head(15)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# https://www.kaggle.com/zynicide/wine-reviews" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# (9) Machine Learning and modeling" + ] + }, + { + "cell_type": "code", + "execution_count": 632, + "metadata": {}, + "outputs": [], + "source": [ + "pd.set_option('display.max_rows', 2**6)\n", + "pd.set_option('display.max_columns', 2**6)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## (9.1) Dummy variables for categorical data" + ] + }, + { + "cell_type": "code", + "execution_count": 633, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Loaded data of size (5043, 6) into memory.\n" + ] + } + ], + "source": [ + "cols_to_use = ['movie_title', 'duration', 'genres', 'content_rating', 'budget', 'gross']\n", + "df_model = pd.read_csv(r'data/movie_metadata.csv', sep=',', usecols=cols_to_use)\n", + "print(f'Loaded data of size {df_model.shape} into memory.')" + ] + }, + { + "cell_type": "code", + "execution_count": 634, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(3840, 6)" + ] + }, + "execution_count": 634, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Drop any row with missing information\n", + "df_model = df_model.dropna(how='any')\n", + "df_model.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 635, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
ApprovedGGPMNC-17Not RatedPGPG-13PassedRUnratedX
0000000010000
1000000010000
\n", + "
" + ], + "text/plain": [ + " Approved G GP M NC-17 Not Rated PG PG-13 Passed R Unrated X\n", + "0 0 0 0 0 0 0 0 1 0 0 0 0\n", + "1 0 0 0 0 0 0 0 1 0 0 0 0" + ] + }, + "execution_count": 635, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dummies = pd.get_dummies(df_model.content_rating)\n", + "dummies.head(2)" + ] + }, + { + "cell_type": "code", + "execution_count": 636, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
durationgrossgenresmovie_titlebudgetApprovedGGPMNC-17Not RatedPGPG-13PassedRUnratedX
0178.0760505847.0Action|Adventure|Fantasy|Sci-FiAvatar237000000.0000000010000
1169.0309404152.0Action|Adventure|FantasyPirates of the Caribbean: At World's End300000000.0000000010000
\n", + "
" + ], + "text/plain": [ + " duration gross genres \\\n", + "0 178.0 760505847.0 Action|Adventure|Fantasy|Sci-Fi \n", + "1 169.0 309404152.0 Action|Adventure|Fantasy \n", + "\n", + " movie_title budget Approved G GP M \\\n", + "0 Avatar  237000000.0 0 0 0 0 \n", + "1 Pirates of the Caribbean: At World's End  300000000.0 0 0 0 0 \n", + "\n", + " NC-17 Not Rated PG PG-13 Passed R Unrated X \n", + "0 0 0 0 1 0 0 0 0 \n", + "1 0 0 0 1 0 0 0 0 " + ] + }, + "execution_count": 636, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_model = df_model.merge(dummies, how='left', left_index=True, right_index=True)\n", + "df_model = df_model.drop(columns='content_rating', errors='ignore')\n", + "df_model.head(2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "-----------------\n", + "\n", + "A more advanced example follows." + ] + }, + { + "cell_type": "code", + "execution_count": 637, + "metadata": {}, + "outputs": [], + "source": [ + "from functools import reduce\n", + "\n", + "# Split the genres, take the union over every set to get every genre in the data set\n", + "genres_sets = df_model.genres.str.split('|').apply(set)\n", + "genres = reduce(set.union, genres_sets)" + ] + }, + { + "cell_type": "code", + "execution_count": 638, + "metadata": {}, + "outputs": [], + "source": [ + "# For every genre, add a dummy column\n", + "for genre in genres:\n", + " df_model[genre] = np.where(df_model.genres.str.contains(genre), 1, 0)\n", + " \n", + "df_model = df_model.drop(columns='genres', errors='ignore')" + ] + }, + { + "cell_type": "code", + "execution_count": 639, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
durationgrossmovie_titlebudgetApprovedGGPMNC-17Not RatedPGPG-13PassedRUnratedXWesternFamilyMusicSportRomanceAdventureFilm-NoirBiographyMysteryActionComedyHorrorFantasyDramaHistoryCrimeThrillerMusicalWarDocumentarySci-FiAnimation
0178.0760505847.0Avatar237000000.00000000100000000010001001000000010
1169.0309404152.0Pirates of the Caribbean: At World's End300000000.00000000100000000010001001000000000
\n", + "
" + ], + "text/plain": [ + " duration gross movie_title \\\n", + "0 178.0 760505847.0 Avatar  \n", + "1 169.0 309404152.0 Pirates of the Caribbean: At World's End  \n", + "\n", + " budget Approved G GP M NC-17 Not Rated PG PG-13 Passed R \\\n", + "0 237000000.0 0 0 0 0 0 0 0 1 0 0 \n", + "1 300000000.0 0 0 0 0 0 0 0 1 0 0 \n", + "\n", + " Unrated X Western Family Music Sport Romance Adventure Film-Noir \\\n", + "0 0 0 0 0 0 0 0 1 0 \n", + "1 0 0 0 0 0 0 0 1 0 \n", + "\n", + " Biography Mystery Action Comedy Horror Fantasy Drama History Crime \\\n", + "0 0 0 1 0 0 1 0 0 0 \n", + "1 0 0 1 0 0 1 0 0 0 \n", + "\n", + " Thriller Musical War Documentary Sci-Fi Animation \n", + "0 0 0 0 0 1 0 \n", + "1 0 0 0 0 0 0 " + ] + }, + "execution_count": 639, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_model.head(2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## (9.2) Training a model" + ] + }, + { + "cell_type": "code", + "execution_count": 640, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.linear_model import LinearRegression\n", + "from sklearn.model_selection import train_test_split" + ] + }, + { + "cell_type": "code", + "execution_count": 646, + "metadata": {}, + "outputs": [], + "source": [ + "df_model['gross_log'] = df_model['gross'].apply(np.log1p)\n", + "df_model['budget_log'] = df_model['budget'].apply(np.log1p)" + ] + }, + { + "cell_type": "code", + "execution_count": 647, + "metadata": {}, + "outputs": [], + "source": [ + "linreg = LinearRegression()\n", + "X = df_model.drop(columns=['movie_title', 'gross', 'budget', 'gross_log']).values\n", + "y = df_model.gross_log.values\n", + "\n", + "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=123)" + ] + }, + { + "cell_type": "code", + "execution_count": 648, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None,\n", + " normalize=False)" + ] + }, + "execution_count": 648, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "linreg.fit(X_train, y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 649, + "metadata": {}, + "outputs": [], + "source": [ + "y_pred = linreg.predict(X_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 659, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1.6093703080115105" + ] + }, + "execution_count": 659, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.Series(y_test.mean() - y_test).abs().mean()" + ] + }, + { + "cell_type": "code", + "execution_count": 660, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1.1842132628414064" + ] + }, + "execution_count": 660, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.Series(y_pred - y_test).abs().mean()" + ] + }, + { + "cell_type": "code", + "execution_count": 658, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 658, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "pd.Series(y_test.mean() - y_test).plot()" + ] + }, + { + "cell_type": "code", + "execution_count": 655, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 655, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "pd.Series(y_pred - y_test).plot()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# (10) Misc tips and tricks" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Performance" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "There might exists built in methods which are optimal for your use case. Finding the maximum is an $\\mathcal{O}(n)$ operation, while sorting is $\\mathcal{O}(n \\log n)$. Finding the top $k$ rows can be done in $\\mathcal{O}(k + n \\log k)$ time." + ] + }, + { + "cell_type": "code", + "execution_count": 151, + "metadata": {}, + "outputs": [], + "source": [ + "# Create a series with a million entries\n", + "ser = pd.Series(np.random.randn(1000000))" + ] + }, + { + "cell_type": "code", + "execution_count": 155, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 155, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(ser.nlargest(50) == ser.sort_values(ascending=False).head(50)).all()" + ] + }, + { + "cell_type": "code", + "execution_count": 161, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "4.53 ms ± 186 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n" + ] + } + ], + "source": [ + "%%timeit\n", + "\n", + "ser.max()" + ] + }, + { + "cell_type": "code", + "execution_count": 152, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "18.8 ms ± 873 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)\n" + ] + } + ], + "source": [ + "%%timeit\n", + "\n", + "ser.nlargest(50)" + ] + }, + { + "cell_type": "code", + "execution_count": 153, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "168 ms ± 6.99 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n" + ] + } + ], + "source": [ + "%%timeit\n", + "\n", + "ser.sort_values(ascending=False).head(50)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "-------------" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It's generally better to apply filters *before* computations, especially if the computations are expensive." + ] + }, + { + "cell_type": "code", + "execution_count": 162, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "57 ms ± 1.14 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n" + ] + } + ], + "source": [ + "%%timeit\n", + "\n", + "df.mean().imdb_score" + ] + }, + { + "cell_type": "code", + "execution_count": 163, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "39.8 µs ± 1.28 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)\n" + ] + } + ], + "source": [ + "%%timeit\n", + "\n", + "df.imdb_score.mean()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "-----------------" + ] + }, + { + "cell_type": "code", + "execution_count": 302, + "metadata": {}, + "outputs": [], + "source": [ + "df = df.sort_values('gross').dropna(how='any')\n", + "temp = df.set_index('director_name').sort_index()" + ] + }, + { + "cell_type": "code", + "execution_count": 303, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "495 µs ± 7.89 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n" + ] + } + ], + "source": [ + "%%timeit\n", + "\n", + "temp.loc[lambda df:df.index > 'o', :]" + ] + }, + { + "cell_type": "code", + "execution_count": 304, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "628 µs ± 20.5 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n" + ] + } + ], + "source": [ + "%%timeit\n", + "\n", + "df.loc[lambda df:df.director_name > 'o', :]" + ] + }, + { + "cell_type": "code", + "execution_count": 305, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "129 µs ± 1.42 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)\n" + ] + } + ], + "source": [ + "%%timeit\n", + "\n", + "temp.loc[slice('o', None), :]" + ] + }, + { + "cell_type": "code", + "execution_count": 306, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 306, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "temp.index.dropna().is_monotonic" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "------------------------" + ] + }, + { + "cell_type": "code", + "execution_count": 387, + "metadata": {}, + "outputs": [], + "source": [ + "import math\n", + "\n", + "temp = df.gross.dropna()" + ] + }, + { + "cell_type": "code", + "execution_count": 388, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "923 µs ± 4.03 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n" + ] + } + ], + "source": [ + "%%timeit\n", + "\n", + "temp.map(math.log)" + ] + }, + { + "cell_type": "code", + "execution_count": 389, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "141 µs ± 1.2 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)\n" + ] + } + ], + "source": [ + "%%timeit\n", + "\n", + "temp.apply(np.log)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "------------------" + ] + }, + { + "cell_type": "code", + "execution_count": 401, + "metadata": {}, + "outputs": [], + "source": [ + "import statistics\n", + "\n", + "vector = np.arange(1000000)" + ] + }, + { + "cell_type": "code", + "execution_count": 402, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1.88 ms ± 85.3 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n" + ] + } + ], + "source": [ + "%%timeit\n", + "\n", + "np.mean(vector[1:] - vector[:-1])" + ] + }, + { + "cell_type": "code", + "execution_count": 403, + "metadata": {}, + "outputs": [], + "source": [ + "vector = list(vector)" + ] + }, + { + "cell_type": "code", + "execution_count": 404, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "649 ms ± 7.63 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n" + ] + } + ], + "source": [ + "%%timeit\n", + "\n", + "statistics.mean((i - j for (i, j) in zip(vector[1:], vector[:-1])))\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.6" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}