diff --git a/README.md b/README.md index 2fc95ab..d0b4ec0 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ # awesome-pandas A collection of resources for [pandas](http://pandas.pydata.org/) ([Python](https://www.python.org/)) and related subjects. -**Pull requests are very welcome.** +**Pull requests are very welcome!** **Contents:** This is an unofficial collection of resources for learning pandas, an open source Python library for data analysis. Here you will find videos, diff --git a/cheat_sheet/Cheat Sheet.ipynb b/cheat_sheet/Cheat Sheet.ipynb index 72ecffc..83bc104 100644 --- a/cheat_sheet/Cheat Sheet.ipynb +++ b/cheat_sheet/Cheat Sheet.ipynb @@ -2,7 +2,9 @@ "cells": [ { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "raw_mimetype": "-" + }, "source": [ "# Pandas Cheat Sheet" ] @@ -81,10 +83,16 @@ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import matplotlib\n", - "\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, @@ -95,8 +103,8 @@ "output_type": "stream", "text": [ "pandas version 0.22.0\n", - "numpy version 1.13.3\n", - "matplotlib version 2.1.1\n" + "numpy version 1.14.2\n", + "matplotlib version 2.2.2\n" ] } ], @@ -105,58 +113,26 @@ " print(f'{lib.__name__.ljust(12)} version {lib.__version__}')" ] }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "pd.set_option(\"display.max_rows\", 2**6)\n", - "pd.set_option(\"display.max_columns\", 2**6)" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "64" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "2**6" - ] - }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Importing data\n", "\n", - "We'll use" + "Using `!` let's us use terminal commands. The `head` command shows the first rows of the file." ] }, { "cell_type": "code", - "execution_count": 5, + "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\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" + "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" ] } ], @@ -164,25 +140,43 @@ "!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": 6, + "execution_count": 4, "metadata": {}, "outputs": [ { - "data": { - "text/plain": [ - "(5043, 28)" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" + "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": [ - "df = pd.read_csv(r'data/movie_metadata.csv', sep = ',')\n", - "df.shape" + "%%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." ] }, { @@ -192,6 +186,132 @@ "# 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, @@ -200,7 +320,13 @@ { "data": { "text/plain": [ - "(5043, 28)" + "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, @@ -209,7 +335,15 @@ } ], "source": [ - "df.shape" + "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." ] }, { @@ -220,17 +354,7 @@ { "data": { "text/plain": [ - "color object\n", - "director_name object\n", - "num_critic_for_reviews float64\n", - "duration float64\n", - "director_facebook_likes float64\n", - "actor_3_facebook_likes float64\n", - "actor_2_name object\n", - "actor_1_facebook_likes float64\n", - "gross float64\n", - "genres object\n", - "dtype: object" + "pandas.core.series.Series" ] }, "execution_count": 8, @@ -239,7 +363,14 @@ } ], "source": [ - "df.dtypes.head(10)" + "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." ] }, { @@ -268,149 +399,22 @@ " \n", " \n", " \n", - " 0\n", - " 1\n", + " director_name\n", + " gross\n", + " movie_title\n", + " country\n", + " content_rating\n", + " imdb_score\n", " \n", " \n", " \n", " \n", - " color\n", - " Color\n", - " Color\n", - " \n", - " \n", - " director_name\n", - " James Cameron\n", - " Gore Verbinski\n", - " \n", - " \n", - " num_critic_for_reviews\n", - " 723\n", - " 302\n", - " \n", - " \n", - " duration\n", - " 178\n", - " 169\n", - " \n", - " \n", - " director_facebook_likes\n", + " Missing values\n", + " 104\n", + " 884\n", " 0\n", - " 563\n", - " \n", - " \n", - " actor_3_facebook_likes\n", - " 855\n", - " 1000\n", - " \n", - " \n", - " actor_2_name\n", - " Joel David Moore\n", - " Orlando Bloom\n", - " \n", - " \n", - " actor_1_facebook_likes\n", - " 1000\n", - " 40000\n", - " \n", - " \n", - " gross\n", - " 7.60506e+08\n", - " 3.09404e+08\n", - " \n", - " \n", - " genres\n", - " Action|Adventure|Fantasy|Sci-Fi\n", - " Action|Adventure|Fantasy\n", - " \n", - " \n", - " actor_1_name\n", - " CCH Pounder\n", - " Johnny Depp\n", - " \n", - " \n", - " movie_title\n", - " Avatar\n", - " Pirates of the Caribbean: At World's End\n", - " \n", - " \n", - " num_voted_users\n", - " 886204\n", - " 471220\n", - " \n", - " \n", - " cast_total_facebook_likes\n", - " 4834\n", - " 48350\n", - " \n", - " \n", - " actor_3_name\n", - " Wes Studi\n", - " Jack Davenport\n", - " \n", - " \n", - " facenumber_in_poster\n", - " 0\n", - " 0\n", - " \n", - " \n", - " plot_keywords\n", - " avatar|future|marine|native|paraplegic\n", - " goddess|marriage ceremony|marriage proposal|pi...\n", - " \n", - " \n", - " movie_imdb_link\n", - " http://www.imdb.com/title/tt0499549/?ref_=fn_t...\n", - " http://www.imdb.com/title/tt0449088/?ref_=fn_t...\n", - " \n", - " \n", - " num_user_for_reviews\n", - " 3054\n", - " 1238\n", - " \n", - " \n", - " language\n", - " English\n", - " English\n", - " \n", - " \n", - " country\n", - " USA\n", - " USA\n", - " \n", - " \n", - " content_rating\n", - " PG-13\n", - " PG-13\n", - " \n", - " \n", - " budget\n", - " 2.37e+08\n", - " 3e+08\n", - " \n", - " \n", - " title_year\n", - " 2009\n", - " 2007\n", - " \n", - " \n", - " actor_2_facebook_likes\n", - " 936\n", - " 5000\n", - " \n", - " \n", - " imdb_score\n", - " 7.9\n", - " 7.1\n", - " \n", - " \n", - " aspect_ratio\n", - " 1.78\n", - " 2.35\n", - " \n", - " \n", - " movie_facebook_likes\n", - " 33000\n", + " 5\n", + " 303\n", " 0\n", " \n", " \n", @@ -418,65 +422,11 @@ "" ], "text/plain": [ - " 0 \\\n", - "color Color \n", - "director_name James Cameron \n", - "num_critic_for_reviews 723 \n", - "duration 178 \n", - "director_facebook_likes 0 \n", - "actor_3_facebook_likes 855 \n", - "actor_2_name Joel David Moore \n", - "actor_1_facebook_likes 1000 \n", - "gross 7.60506e+08 \n", - "genres Action|Adventure|Fantasy|Sci-Fi \n", - "actor_1_name CCH Pounder \n", - "movie_title Avatar  \n", - "num_voted_users 886204 \n", - "cast_total_facebook_likes 4834 \n", - "actor_3_name Wes Studi \n", - "facenumber_in_poster 0 \n", - "plot_keywords avatar|future|marine|native|paraplegic \n", - "movie_imdb_link http://www.imdb.com/title/tt0499549/?ref_=fn_t... \n", - "num_user_for_reviews 3054 \n", - "language English \n", - "country USA \n", - "content_rating PG-13 \n", - "budget 2.37e+08 \n", - "title_year 2009 \n", - "actor_2_facebook_likes 936 \n", - "imdb_score 7.9 \n", - "aspect_ratio 1.78 \n", - "movie_facebook_likes 33000 \n", + " director_name gross movie_title country content_rating \\\n", + "Missing values 104 884 0 5 303 \n", "\n", - " 1 \n", - "color Color \n", - "director_name Gore Verbinski \n", - "num_critic_for_reviews 302 \n", - "duration 169 \n", - "director_facebook_likes 563 \n", - "actor_3_facebook_likes 1000 \n", - "actor_2_name Orlando Bloom \n", - "actor_1_facebook_likes 40000 \n", - "gross 3.09404e+08 \n", - "genres Action|Adventure|Fantasy \n", - "actor_1_name Johnny Depp \n", - "movie_title Pirates of the Caribbean: At World's End  \n", - "num_voted_users 471220 \n", - "cast_total_facebook_likes 48350 \n", - "actor_3_name Jack Davenport \n", - "facenumber_in_poster 0 \n", - "plot_keywords goddess|marriage ceremony|marriage proposal|pi... \n", - "movie_imdb_link http://www.imdb.com/title/tt0449088/?ref_=fn_t... \n", - "num_user_for_reviews 1238 \n", - "language English \n", - "country USA \n", - "content_rating PG-13 \n", - "budget 3e+08 \n", - "title_year 2007 \n", - "actor_2_facebook_likes 5000 \n", - "imdb_score 7.1 \n", - "aspect_ratio 2.35 \n", - "movie_facebook_likes 0 " + " imdb_score \n", + "Missing values 0 " ] }, "execution_count": 9, @@ -485,7 +435,14 @@ } ], "source": [ - "df.head(2).T" + "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:" ] }, { @@ -495,36 +452,53 @@ "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": [ - "cast_total_facebook_likes 0\n", - "imdb_score 0\n", - "movie_imdb_link 0\n", - "num_voted_users 0\n", - "movie_title 0\n", - "genres 0\n", - "movie_facebook_likes 0\n", - "country 5\n", - "actor_1_facebook_likes 7\n", - "actor_1_name 7\n", - "language 12\n", - "actor_2_facebook_likes 13\n", - "actor_2_name 13\n", - "facenumber_in_poster 13\n", - "duration 15\n", - "color 19\n", - "num_user_for_reviews 21\n", - "actor_3_facebook_likes 23\n", - "actor_3_name 23\n", - "num_critic_for_reviews 50\n", - "director_facebook_likes 104\n", - "director_name 104\n", - "title_year 108\n", - "plot_keywords 153\n", - "content_rating 303\n", - "aspect_ratio 329\n", - "budget 492\n", - "gross 884\n", - "dtype: int64" + " 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, @@ -533,13 +507,274 @@ } ], "source": [ - "df.isnull().sum().sort_values()" + "(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", @@ -555,7 +790,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 15, "metadata": {}, "outputs": [], "source": [ @@ -565,7 +800,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 16, "metadata": {}, "outputs": [ { @@ -637,7 +872,7 @@ "2 PG-13 6.8 " ] }, - "execution_count": 13, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -649,7 +884,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 17, "metadata": {}, "outputs": [ { @@ -721,7 +956,7 @@ "102 PG-13 7.8 " ] }, - "execution_count": 14, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } @@ -732,9 +967,29 @@ }, { "cell_type": "code", - "execution_count": 15, + "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": [ @@ -773,7 +1028,7 @@ " USA\n", " PG-13\n", " 7.9\n", - " 0.0\n", + " NaN\n", " 760505847.0\n", " \n", " \n", @@ -783,7 +1038,7 @@ " USA\n", " PG-13\n", " 7.1\n", - " 563.0\n", + " NaN\n", " 309404152.0\n", " \n", " \n", @@ -796,11 +1051,11 @@ "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 0.0 760505847.0 \n", - "1 PG-13 7.1 563.0 309404152.0 " + "0 PG-13 7.9 NaN 760505847.0 \n", + "1 PG-13 7.1 NaN 309404152.0 " ] }, - "execution_count": 15, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } @@ -812,7 +1067,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 19, "metadata": {}, "outputs": [ { @@ -877,7 +1132,7 @@ "1 PG-13 7.1 309404152.0 " ] }, - "execution_count": 16, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" } @@ -889,7 +1144,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 20, "metadata": {}, "outputs": [ { @@ -965,7 +1220,7 @@ "3466 R 9.2 134821952.0 " ] }, - "execution_count": 17, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" } @@ -976,7 +1231,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 21, "metadata": {}, "outputs": [], "source": [ @@ -985,7 +1240,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 22, "metadata": {}, "outputs": [ { @@ -1065,7 +1320,7 @@ "max 10 760,505,847 20" ] }, - "execution_count": 19, + "execution_count": 22, "metadata": {}, "output_type": "execute_result" } @@ -1076,7 +1331,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 23, "metadata": {}, "outputs": [ { @@ -1135,7 +1390,7 @@ "gross_log 0.074280 0.616034 1.000000" ] }, - "execution_count": 20, + "execution_count": 23, "metadata": {}, "output_type": "execute_result" } @@ -1153,7 +1408,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 24, "metadata": {}, "outputs": [ { @@ -1233,7 +1488,7 @@ "9 PG 7.5 301956980.0 19.525795 " ] }, - "execution_count": 21, + "execution_count": 24, "metadata": {}, "output_type": "execute_result" } @@ -1244,7 +1499,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 25, "metadata": {}, "outputs": [ { @@ -1324,7 +1579,7 @@ "4029 Brazil R 8.7 7563397.0 15.838831 " ] }, - "execution_count": 22, + "execution_count": 25, "metadata": {}, "output_type": "execute_result" } @@ -1336,7 +1591,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 26, "metadata": {}, "outputs": [], "source": [ @@ -1346,7 +1601,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 27, "metadata": {}, "outputs": [ { @@ -1450,7 +1705,7 @@ "1196 USA R 7.8 102310175.0 18.443520 " ] }, - "execution_count": 24, + "execution_count": 27, "metadata": {}, "output_type": "execute_result" } @@ -1461,7 +1716,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 28, "metadata": {}, "outputs": [ { @@ -1475,7 +1730,7 @@ "Name: country, dtype: int64" ] }, - "execution_count": 25, + "execution_count": 28, "metadata": {}, "output_type": "execute_result" } @@ -1486,7 +1741,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 29, "metadata": {}, "outputs": [ { @@ -1500,7 +1755,7 @@ "Name: country, dtype: int64" ] }, - "execution_count": 26, + "execution_count": 29, "metadata": {}, "output_type": "execute_result" } @@ -1517,10 +1772,8 @@ ] }, { - "cell_type": "code", - "execution_count": null, + "cell_type": "markdown", "metadata": {}, - "outputs": [], "source": [ "- **Split-apply-combine and pivots**: groupby, dt.month, dt.year, groupby.mean(), agg, stack, unstack, pivot, melt, merge" ] @@ -1534,7 +1787,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 30, "metadata": {}, "outputs": [ { @@ -1600,7 +1853,7 @@ "Ridley Scott 16" ] }, - "execution_count": 36, + "execution_count": 30, "metadata": {}, "output_type": "execute_result" } @@ -1611,7 +1864,7 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 31, "metadata": {}, "outputs": [ { @@ -1677,7 +1930,7 @@ "Charles Chaplin 8.6" ] }, - "execution_count": 41, + "execution_count": 31, "metadata": {}, "output_type": "execute_result" } @@ -1688,7 +1941,7 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 32, "metadata": {}, "outputs": [ { @@ -1792,7 +2045,7 @@ "4 NaN NaN 7.1 NaN NaN " ] }, - "execution_count": 43, + "execution_count": 32, "metadata": {}, "output_type": "execute_result" } @@ -1803,7 +2056,7 @@ }, { "cell_type": "code", - "execution_count": 49, + "execution_count": 33, "metadata": {}, "outputs": [ { @@ -1869,7 +2122,7 @@ "Aaron Schneider 7.1 16.032162 1" ] }, - "execution_count": 49, + "execution_count": 33, "metadata": {}, "output_type": "execute_result" } @@ -1882,7 +2135,7 @@ }, { "cell_type": "code", - "execution_count": 69, + "execution_count": 34, "metadata": {}, "outputs": [ { @@ -1948,7 +2201,7 @@ "Aaron Schneider 0.771125 -0.321155 -0.488133" ] }, - "execution_count": 69, + "execution_count": 34, "metadata": {}, "output_type": "execute_result" } @@ -1960,7 +2213,7 @@ }, { "cell_type": "code", - "execution_count": 71, + "execution_count": 35, "metadata": {}, "outputs": [ { @@ -2031,7 +2284,7 @@ "Clint Eastwood 0.883067 8.041961 8.705881 17.630909" ] }, - "execution_count": 71, + "execution_count": 35, "metadata": {}, "output_type": "execute_result" } @@ -2047,9 +2300,22 @@ }, { "cell_type": "code", - "execution_count": 82, + "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": [ @@ -2071,155 +2337,23 @@ " \n", " \n", " content_rating\n", - " Approved\n", - " G\n", - " GP\n", - " M\n", - " NC-17\n", - " Not Rated\n", - " PG\n", - " PG-13\n", - " Passed\n", - " R\n", - " TV-14\n", - " TV-G\n", - " TV-PG\n", - " Unrated\n", - " X\n", " \n", " \n", " title_year\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", " \n", " \n", " \n", - " \n", - " 2012.0\n", - " 0.0\n", - " 2.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 18.0\n", - " 26.0\n", - " 71.0\n", - " 0.0\n", - " 84.0\n", - " 0.0\n", - " 1.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " \n", - " \n", - " 2013.0\n", - " 0.0\n", - " 1.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 14.0\n", - " 26.0\n", - " 68.0\n", - " 0.0\n", - " 93.0\n", - " 1.0\n", - " 0.0\n", - " 0.0\n", - " 1.0\n", - " 0.0\n", - " \n", - " \n", - " 2014.0\n", - " 0.0\n", - " 3.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 9.0\n", - " 28.0\n", - " 72.0\n", - " 0.0\n", - " 86.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 5.0\n", - " 0.0\n", - " \n", - " \n", - " 2015.0\n", - " 0.0\n", - " 1.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 5.0\n", - " 22.0\n", - " 59.0\n", - " 0.0\n", - " 77.0\n", - " 1.0\n", - " 0.0\n", - " 0.0\n", - " 1.0\n", - " 0.0\n", - " \n", - " \n", - " 2016.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 2.0\n", - " 11.0\n", - " 41.0\n", - " 0.0\n", - " 31.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " \n", " \n", "\n", "" ], "text/plain": [ - "content_rating Approved G GP M NC-17 Not Rated PG PG-13 \\\n", - "title_year \n", - "2012.0 0.0 2.0 0.0 0.0 0.0 18.0 26.0 71.0 \n", - "2013.0 0.0 1.0 0.0 0.0 0.0 14.0 26.0 68.0 \n", - "2014.0 0.0 3.0 0.0 0.0 0.0 9.0 28.0 72.0 \n", - "2015.0 0.0 1.0 0.0 0.0 0.0 5.0 22.0 59.0 \n", - "2016.0 0.0 0.0 0.0 0.0 0.0 2.0 11.0 41.0 \n", - "\n", - "content_rating Passed R TV-14 TV-G TV-PG Unrated X \n", - "title_year \n", - "2012.0 0.0 84.0 0.0 1.0 0.0 0.0 0.0 \n", - "2013.0 0.0 93.0 1.0 0.0 0.0 1.0 0.0 \n", - "2014.0 0.0 86.0 0.0 0.0 0.0 5.0 0.0 \n", - "2015.0 0.0 77.0 1.0 0.0 0.0 1.0 0.0 \n", - "2016.0 0.0 31.0 0.0 0.0 0.0 0.0 0.0 " + "Empty DataFrame\n", + "Columns: []\n", + "Index: []" ] }, - "execution_count": 82, + "execution_count": 36, "metadata": {}, "output_type": "execute_result" } @@ -2238,7 +2372,7 @@ }, { "cell_type": "code", - "execution_count": 83, + "execution_count": 37, "metadata": {}, "outputs": [ { @@ -2262,182 +2396,59 @@ " \n", " \n", " \n", - " color\n", " director_name\n", - " num_critic_for_reviews\n", - " duration\n", - " director_facebook_likes\n", - " actor_3_facebook_likes\n", - " actor_2_name\n", - " actor_1_facebook_likes\n", " gross\n", - " genres\n", - " actor_1_name\n", " movie_title\n", - " num_voted_users\n", - " cast_total_facebook_likes\n", - " actor_3_name\n", - " facenumber_in_poster\n", - " plot_keywords\n", - " movie_imdb_link\n", - " num_user_for_reviews\n", - " language\n", " country\n", " content_rating\n", - " budget\n", - " title_year\n", - " actor_2_facebook_likes\n", " imdb_score\n", - " aspect_ratio\n", - " movie_facebook_likes\n", " \n", " \n", " \n", " \n", " 0\n", - " Color\n", " James Cameron\n", - " 723.0\n", - " 178.0\n", - " 0.0\n", - " 855.0\n", - " Joel David Moore\n", - " 1000.0\n", " 760505847.0\n", - " Action|Adventure|Fantasy|Sci-Fi\n", - " CCH Pounder\n", " Avatar\n", - " 886204\n", - " 4834\n", - " Wes Studi\n", - " 0.0\n", - " avatar|future|marine|native|paraplegic\n", - " http://www.imdb.com/title/tt0499549/?ref_=fn_t...\n", - " 3054.0\n", - " English\n", " USA\n", " PG-13\n", - " 237000000.0\n", - " 2009.0\n", - " 936.0\n", " 7.9\n", - " 1.78\n", - " 33000\n", " \n", " \n", " 1\n", - " Color\n", " Gore Verbinski\n", - " 302.0\n", - " 169.0\n", - " 563.0\n", - " 1000.0\n", - " Orlando Bloom\n", - " 40000.0\n", " 309404152.0\n", - " Action|Adventure|Fantasy\n", - " Johnny Depp\n", " Pirates of the Caribbean: At World's End\n", - " 471220\n", - " 48350\n", - " Jack Davenport\n", - " 0.0\n", - " goddess|marriage ceremony|marriage proposal|pi...\n", - " http://www.imdb.com/title/tt0449088/?ref_=fn_t...\n", - " 1238.0\n", - " English\n", " USA\n", " PG-13\n", - " 300000000.0\n", - " 2007.0\n", - " 5000.0\n", " 7.1\n", - " 2.35\n", - " 0\n", " \n", " \n", " 2\n", - " Color\n", " Sam Mendes\n", - " 602.0\n", - " 148.0\n", - " 0.0\n", - " 161.0\n", - " Rory Kinnear\n", - " 11000.0\n", " 200074175.0\n", - " Action|Adventure|Thriller\n", - " Christoph Waltz\n", " Spectre\n", - " 275868\n", - " 11700\n", - " Stephanie Sigman\n", - " 1.0\n", - " bomb|espionage|sequel|spy|terrorist\n", - " http://www.imdb.com/title/tt2379713/?ref_=fn_t...\n", - " 994.0\n", - " English\n", " UK\n", " PG-13\n", - " 245000000.0\n", - " 2015.0\n", - " 393.0\n", " 6.8\n", - " 2.35\n", - " 85000\n", " \n", " \n", "\n", "" ], "text/plain": [ - " color director_name num_critic_for_reviews duration \\\n", - "0 Color James Cameron 723.0 178.0 \n", - "1 Color Gore Verbinski 302.0 169.0 \n", - "2 Color Sam Mendes 602.0 148.0 \n", + " 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", - " director_facebook_likes actor_3_facebook_likes actor_2_name \\\n", - "0 0.0 855.0 Joel David Moore \n", - "1 563.0 1000.0 Orlando Bloom \n", - "2 0.0 161.0 Rory Kinnear \n", - "\n", - " actor_1_facebook_likes gross genres \\\n", - "0 1000.0 760505847.0 Action|Adventure|Fantasy|Sci-Fi \n", - "1 40000.0 309404152.0 Action|Adventure|Fantasy \n", - "2 11000.0 200074175.0 Action|Adventure|Thriller \n", - "\n", - " actor_1_name movie_title \\\n", - "0 CCH Pounder Avatar  \n", - "1 Johnny Depp Pirates of the Caribbean: At World's End  \n", - "2 Christoph Waltz Spectre  \n", - "\n", - " num_voted_users cast_total_facebook_likes actor_3_name \\\n", - "0 886204 4834 Wes Studi \n", - "1 471220 48350 Jack Davenport \n", - "2 275868 11700 Stephanie Sigman \n", - "\n", - " facenumber_in_poster plot_keywords \\\n", - "0 0.0 avatar|future|marine|native|paraplegic \n", - "1 0.0 goddess|marriage ceremony|marriage proposal|pi... \n", - "2 1.0 bomb|espionage|sequel|spy|terrorist \n", - "\n", - " movie_imdb_link num_user_for_reviews \\\n", - "0 http://www.imdb.com/title/tt0499549/?ref_=fn_t... 3054.0 \n", - "1 http://www.imdb.com/title/tt0449088/?ref_=fn_t... 1238.0 \n", - "2 http://www.imdb.com/title/tt2379713/?ref_=fn_t... 994.0 \n", - "\n", - " language country content_rating budget title_year \\\n", - "0 English USA PG-13 237000000.0 2009.0 \n", - "1 English USA PG-13 300000000.0 2007.0 \n", - "2 English UK PG-13 245000000.0 2015.0 \n", - "\n", - " actor_2_facebook_likes imdb_score aspect_ratio movie_facebook_likes \n", - "0 936.0 7.9 1.78 33000 \n", - "1 5000.0 7.1 2.35 0 \n", - "2 393.0 6.8 2.35 85000 " + " 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": 83, + "execution_count": 37, "metadata": {}, "output_type": "execute_result" } @@ -2448,181 +2459,25 @@ }, { "cell_type": "code", - "execution_count": 90, + "execution_count": 38, "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", - "
content_ratingApprovedGGPMNC-17Not RatedPGPG-13PassedRTV-14TV-GTV-PGUnratedX
title_year
2012.00.02.00.00.00.018.026.071.00.084.00.01.00.00.00.0
2013.00.01.00.00.00.014.026.068.00.093.01.00.00.01.00.0
2014.00.03.00.00.00.09.028.072.00.086.00.00.00.05.00.0
2015.00.01.00.00.00.05.022.059.00.077.01.00.00.01.00.0
2016.00.00.00.00.00.02.011.041.00.031.00.00.00.00.00.0
\n", - "
" - ], - "text/plain": [ - "content_rating Approved G GP M NC-17 Not Rated PG PG-13 \\\n", - "title_year \n", - "2012.0 0.0 2.0 0.0 0.0 0.0 18.0 26.0 71.0 \n", - "2013.0 0.0 1.0 0.0 0.0 0.0 14.0 26.0 68.0 \n", - "2014.0 0.0 3.0 0.0 0.0 0.0 9.0 28.0 72.0 \n", - "2015.0 0.0 1.0 0.0 0.0 0.0 5.0 22.0 59.0 \n", - "2016.0 0.0 0.0 0.0 0.0 0.0 2.0 11.0 41.0 \n", - "\n", - "content_rating Passed R TV-14 TV-G TV-PG Unrated X \n", - "title_year \n", - "2012.0 0.0 84.0 0.0 1.0 0.0 0.0 0.0 \n", - "2013.0 0.0 93.0 1.0 0.0 0.0 1.0 0.0 \n", - "2014.0 0.0 86.0 0.0 0.0 0.0 5.0 0.0 \n", - "2015.0 0.0 77.0 1.0 0.0 0.0 1.0 0.0 \n", - "2016.0 0.0 31.0 0.0 0.0 0.0 0.0 0.0 " - ] - }, - "execution_count": 90, - "metadata": {}, - "output_type": "execute_result" + "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": [ @@ -2680,455 +2535,9 @@ }, { "cell_type": "code", - "execution_count": 124, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/tommy/anaconda3/lib/python3.6/site-packages/pandas/core/groupby.py:4291: FutureWarning: using a dict with renaming is deprecated and will be removed in a future version\n", - " return super(DataFrameGroupBy, self).aggregate(arg, *args, **kwargs)\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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
msdf
title_year
1916.0123.000000NaN
1920.0110.000000NaN
1925.0151.000000NaN
1927.0145.000000NaN
1929.0105.0000007.071068
1930.096.000000NaN
1932.079.000000NaN
1933.077.50000016.263456
1934.065.000000NaN
1935.081.000000NaN
1936.093.5000009.192388
1937.092.00000012.727922
1938.0116.00000014.142136
1939.0149.33333367.002488
1940.0108.00000021.059440
1941.0118.000000NaN
1942.076.0000008.485281
1943.0122.000000NaN
1944.0101.000000NaN
1945.0103.75000010.500000
1946.0144.66666727.006172
1947.0101.66666714.224392
1948.098.66666729.143324
1949.0106.0000004.242641
1950.0107.000000NaN
1951.0134.66666732.593455
1952.0106.75000031.223656
1953.0106.25000024.878036
1954.0140.60000036.073536
1955.0112.50000019.091883
1956.0103.00000013.114877
1957.0128.50000045.961941
.........
1985.0108.72413820.325734
1986.0104.65384614.707664
1987.0105.50000029.359837
1988.0107.00000018.638669
1989.0113.12121219.582769
1990.0114.10000032.563307
1991.0113.06451626.856328
1992.0116.08823524.342714
1993.0120.22916743.293280
1994.0111.48148125.176165
1995.0114.52857124.225224
1996.0110.01010118.521083
1997.0110.25423721.591858
1998.0109.46268720.978204
1999.0108.64285720.332059
2000.0107.53529420.673610
2001.0106.94148923.319033
2002.0104.22966518.260268
2003.0106.40236722.667451
2004.0107.29906520.988579
2005.0107.50454522.870790
2006.0107.14705920.243023
2007.0106.89705924.419854
2008.0105.38222217.785318
2009.0105.12741318.262597
2010.0105.43421115.323819
2011.0105.03571416.797356
2012.0105.90000022.001640
2013.0108.09322022.074145
2014.0105.42629519.384879
2015.0106.02232117.848250
2016.0109.63207517.020618
\n", - "

91 rows × 2 columns

\n", - "
" - ], - "text/plain": [ - " m sdf\n", - "title_year \n", - "1916.0 123.000000 NaN\n", - "1920.0 110.000000 NaN\n", - "1925.0 151.000000 NaN\n", - "1927.0 145.000000 NaN\n", - "1929.0 105.000000 7.071068\n", - "1930.0 96.000000 NaN\n", - "1932.0 79.000000 NaN\n", - "1933.0 77.500000 16.263456\n", - "1934.0 65.000000 NaN\n", - "1935.0 81.000000 NaN\n", - "1936.0 93.500000 9.192388\n", - "1937.0 92.000000 12.727922\n", - "1938.0 116.000000 14.142136\n", - "1939.0 149.333333 67.002488\n", - "1940.0 108.000000 21.059440\n", - "1941.0 118.000000 NaN\n", - "1942.0 76.000000 8.485281\n", - "1943.0 122.000000 NaN\n", - "1944.0 101.000000 NaN\n", - "1945.0 103.750000 10.500000\n", - "1946.0 144.666667 27.006172\n", - "1947.0 101.666667 14.224392\n", - "1948.0 98.666667 29.143324\n", - "1949.0 106.000000 4.242641\n", - "1950.0 107.000000 NaN\n", - "1951.0 134.666667 32.593455\n", - "1952.0 106.750000 31.223656\n", - "1953.0 106.250000 24.878036\n", - "1954.0 140.600000 36.073536\n", - "1955.0 112.500000 19.091883\n", - "1956.0 103.000000 13.114877\n", - "1957.0 128.500000 45.961941\n", - "... ... ...\n", - "1985.0 108.724138 20.325734\n", - "1986.0 104.653846 14.707664\n", - "1987.0 105.500000 29.359837\n", - "1988.0 107.000000 18.638669\n", - "1989.0 113.121212 19.582769\n", - "1990.0 114.100000 32.563307\n", - "1991.0 113.064516 26.856328\n", - "1992.0 116.088235 24.342714\n", - "1993.0 120.229167 43.293280\n", - "1994.0 111.481481 25.176165\n", - "1995.0 114.528571 24.225224\n", - "1996.0 110.010101 18.521083\n", - "1997.0 110.254237 21.591858\n", - "1998.0 109.462687 20.978204\n", - "1999.0 108.642857 20.332059\n", - "2000.0 107.535294 20.673610\n", - "2001.0 106.941489 23.319033\n", - "2002.0 104.229665 18.260268\n", - "2003.0 106.402367 22.667451\n", - "2004.0 107.299065 20.988579\n", - "2005.0 107.504545 22.870790\n", - "2006.0 107.147059 20.243023\n", - "2007.0 106.897059 24.419854\n", - "2008.0 105.382222 17.785318\n", - "2009.0 105.127413 18.262597\n", - "2010.0 105.434211 15.323819\n", - "2011.0 105.035714 16.797356\n", - "2012.0 105.900000 22.001640\n", - "2013.0 108.093220 22.074145\n", - "2014.0 105.426295 19.384879\n", - "2015.0 106.022321 17.848250\n", - "2016.0 109.632075 17.020618\n", - "\n", - "[91 rows x 2 columns]" - ] - }, - "execution_count": 124, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "to_plot = df.groupby(df.title_year).agg({df.duration.name:{'m':np.mean, 'sdf':np.std}})\n", "\n", @@ -3136,7 +2545,7 @@ "\n", "#to_plot = to_plot.assign(low = lambda df: df.mean - df.std)\n", "\n", - "to_plot" + "to_plot.plot()" ] }, { @@ -3173,6 +2582,78 @@ "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": {