Skip to content

Instantly share code, notes, and snippets.

@trevormunoz
Created January 10, 2014 17:35
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save trevormunoz/8358810 to your computer and use it in GitHub Desktop.
Save trevormunoz/8358810 to your computer and use it in GitHub Desktop.
An IPython notebook demonstrating how the Pandas data analysis library can be used to help curate data from the New York Public Library's What's On the Menu? Project
Display the source blob
Display the rendered blob
Raw
{
"metadata": {
"name": "Cleaning and Clustering Data with Pandas"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": "##Using Pandas to Curate Data from the New York Public Library's *What's On the Menu?* Project\n\nTrevor Mu\u00f1oz\n\n10 January 2014"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "For more background, please see the accompanying [blog post](http://www.trevormunoz.com/notebook/2014/01/10/borrowing-data-science-tools-more-work-with-nypl-open-data-part-three.html)"
},
{
"cell_type": "code",
"collapsed": false,
"input": "# By convention\nimport pandas as pd",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 1
},
{
"cell_type": "markdown",
"metadata": {},
"source": "#### Loading Data\n\nFor this I want to setup two DataFrames\u2014one with the contents of Dish.csv (~25 MB in the latest download) and one with the contents of MenuItem.csv (~114 MB).\n\nAs mentioned, Open Refine hangs before it can load MenuItem.csv (without increasing the Java heap size to provide more memory). So, though the timings will vary across systems, I've included time profiling information to show how speedily Pandas handles this job."
},
{
"cell_type": "code",
"collapsed": false,
"input": "%%time\n\ndish_data = '/Users/libraries/Dropbox/NYPL_Data/2013_12_18_11_50_34_data/Dish.csv'\ndish_df = pd.read_csv(dish_data, index_col='id')",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "CPU times: user 701 ms, sys: 111 ms, total: 812 ms\nWall time: 888 ms\n"
}
],
"prompt_number": 2
},
{
"cell_type": "code",
"collapsed": false,
"input": "%%time\n\nmenu_item_data = '/Users/libraries/Dropbox/NYPL_Data/2013_12_18_11_50_34_data/MenuItem.csv'\nitem_df = pd.read_csv(menu_item_data, index_col='dish_id')",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "CPU times: user 3.43 s, sys: 519 ms, total: 3.95 s\nWall time: 4.42 s\n"
}
],
"prompt_number": 3
},
{
"cell_type": "markdown",
"metadata": {},
"source": "We can make it easier to join up data by selecting the dish id (equal to the \"primary key\" of the first DataFrame) as the column to index by when loading up the second DataFrame."
},
{
"cell_type": "markdown",
"metadata": {},
"source": "With both DataFrames set up, we can print the first few rows to check that everything looks right."
},
{
"cell_type": "code",
"collapsed": false,
"input": "dish_df[:5]",
"language": "python",
"metadata": {},
"outputs": [
{
"html": "<div style=\"max-height:1000px;max-width:1500px;overflow:auto;\">\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>name</th>\n <th>description</th>\n <th>menus_appeared</th>\n <th>times_appeared</th>\n <th>first_appeared</th>\n <th>last_appeared</th>\n <th>lowest_price</th>\n <th>highest_price</th>\n </tr>\n <tr>\n <th>id</th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>1</th>\n <td> Consomme printaniere royal</td>\n <td>NaN</td>\n <td> 10</td>\n <td> 10</td>\n <td> 1897</td>\n <td> 1927</td>\n <td> 0.20</td>\n <td> 0.4</td>\n </tr>\n <tr>\n <th>2</th>\n <td> Chicken gumbo</td>\n <td>NaN</td>\n <td> 110</td>\n <td> 116</td>\n <td> 1895</td>\n <td> 1960</td>\n <td> 0.10</td>\n <td> 0.8</td>\n </tr>\n <tr>\n <th>3</th>\n <td> Tomato aux croutons</td>\n <td>NaN</td>\n <td> 15</td>\n <td> 15</td>\n <td> 1893</td>\n <td> 1917</td>\n <td> 0.25</td>\n <td> 0.4</td>\n </tr>\n <tr>\n <th>4</th>\n <td> Onion au gratin</td>\n <td>NaN</td>\n <td> 41</td>\n <td> 41</td>\n <td> 1900</td>\n <td> 1971</td>\n <td> 0.35</td>\n <td> 1.0</td>\n </tr>\n <tr>\n <th>5</th>\n <td> St. Emilion</td>\n <td>NaN</td>\n <td> 62</td>\n <td> 64</td>\n <td> 1881</td>\n <td> 1981</td>\n <td> 0.00</td>\n <td> 18.0</td>\n </tr>\n </tbody>\n</table>\n</div>",
"metadata": {},
"output_type": "pyout",
"prompt_number": 4,
"text": " name description menus_appeared times_appeared \\\nid \n1 Consomme printaniere royal NaN 10 10 \n2 Chicken gumbo NaN 110 116 \n3 Tomato aux croutons NaN 15 15 \n4 Onion au gratin NaN 41 41 \n5 St. Emilion NaN 62 64 \n\n first_appeared last_appeared lowest_price highest_price \nid \n1 1897 1927 0.20 0.4 \n2 1895 1960 0.10 0.8 \n3 1893 1917 0.25 0.4 \n4 1900 1971 0.35 1.0 \n5 1881 1981 0.00 18.0 "
}
],
"prompt_number": 4
},
{
"cell_type": "code",
"collapsed": false,
"input": "item_df[:5]",
"language": "python",
"metadata": {},
"outputs": [
{
"html": "<div style=\"max-height:1000px;max-width:1500px;overflow:auto;\">\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>id</th>\n <th>menu_page_id</th>\n <th>price</th>\n <th>high_price</th>\n <th>created_at</th>\n <th>updated_at</th>\n <th>xpos</th>\n <th>ypos</th>\n </tr>\n <tr>\n <th>dish_id</th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>1</th>\n <td> 1</td>\n <td> 1389</td>\n <td> 0.4</td>\n <td>NaN</td>\n <td> 2011-03-28 15:00:44 UTC</td>\n <td> 2011-04-19 04:33:15 UTC</td>\n <td> 0.111429</td>\n <td> 0.254735</td>\n </tr>\n <tr>\n <th>2</th>\n <td> 2</td>\n <td> 1389</td>\n <td> 0.6</td>\n <td>NaN</td>\n <td> 2011-03-28 15:01:13 UTC</td>\n <td> 2011-04-19 15:00:54 UTC</td>\n <td> 0.438571</td>\n <td> 0.254735</td>\n </tr>\n <tr>\n <th>3</th>\n <td> 3</td>\n <td> 1389</td>\n <td> 0.4</td>\n <td>NaN</td>\n <td> 2011-03-28 15:01:40 UTC</td>\n <td> 2011-04-19 19:10:05 UTC</td>\n <td> 0.140000</td>\n <td> 0.261922</td>\n </tr>\n <tr>\n <th>4</th>\n <td> 4</td>\n <td> 1389</td>\n <td> 0.5</td>\n <td>NaN</td>\n <td> 2011-03-28 15:01:51 UTC</td>\n <td> 2011-04-19 19:07:01 UTC</td>\n <td> 0.377143</td>\n <td> 0.262720</td>\n </tr>\n <tr>\n <th>5</th>\n <td> 5</td>\n <td> 3079</td>\n <td> 0.5</td>\n <td> 1</td>\n <td> 2011-03-28 15:21:26 UTC</td>\n <td> 2011-04-13 15:25:27 UTC</td>\n <td> 0.105714</td>\n <td> 0.313178</td>\n </tr>\n </tbody>\n</table>\n</div>",
"metadata": {},
"output_type": "pyout",
"prompt_number": 5,
"text": " id menu_page_id price high_price created_at \\\ndish_id \n1 1 1389 0.4 NaN 2011-03-28 15:00:44 UTC \n2 2 1389 0.6 NaN 2011-03-28 15:01:13 UTC \n3 3 1389 0.4 NaN 2011-03-28 15:01:40 UTC \n4 4 1389 0.5 NaN 2011-03-28 15:01:51 UTC \n5 5 3079 0.5 1 2011-03-28 15:21:26 UTC \n\n updated_at xpos ypos \ndish_id \n1 2011-04-19 04:33:15 UTC 0.111429 0.254735 \n2 2011-04-19 15:00:54 UTC 0.438571 0.254735 \n3 2011-04-19 19:10:05 UTC 0.140000 0.261922 \n4 2011-04-19 19:07:01 UTC 0.377143 0.262720 \n5 2011-04-13 15:25:27 UTC 0.105714 0.313178 "
}
],
"prompt_number": 5
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Pandas integrates with the Notebook to display DataFrames as nice HTML tables. It's also possible to print a summary description of a DataFrame."
},
{
"cell_type": "code",
"collapsed": false,
"input": "dish_df",
"language": "python",
"metadata": {},
"outputs": [
{
"html": "<pre>\n&lt;class 'pandas.core.frame.DataFrame'&gt;\nInt64Index: 399455 entries, 1 to 477346\nData columns (total 8 columns):\nname 399455 non-null values\ndescription 0 non-null values\nmenus_appeared 399455 non-null values\ntimes_appeared 399455 non-null values\nfirst_appeared 399455 non-null values\nlast_appeared 399455 non-null values\nlowest_price 377962 non-null values\nhighest_price 377962 non-null values\ndtypes: float64(3), int64(4), object(1)\n</pre>",
"metadata": {},
"output_type": "pyout",
"prompt_number": 6,
"text": "<class 'pandas.core.frame.DataFrame'>\nInt64Index: 399455 entries, 1 to 477346\nData columns (total 8 columns):\nname 399455 non-null values\ndescription 0 non-null values\nmenus_appeared 399455 non-null values\ntimes_appeared 399455 non-null values\nfirst_appeared 399455 non-null values\nlast_appeared 399455 non-null values\nlowest_price 377962 non-null values\nhighest_price 377962 non-null values\ndtypes: float64(3), int64(4), object(1)"
}
],
"prompt_number": 6
},
{
"cell_type": "markdown",
"metadata": {},
"source": "#### Clustering to Find Duplicate Values\n\nFor the moment, I'll focus on the Dish data."
},
{
"cell_type": "markdown",
"metadata": {},
"source": "With a single function call, we can see how many different values we have in the 'name' column before we start de-duping"
},
{
"cell_type": "code",
"collapsed": false,
"input": "unique_values_t0 = len(dish_df.name.unique())\nprint unique_values_t0",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "399421\n"
}
],
"prompt_number": 7
},
{
"cell_type": "markdown",
"metadata": {},
"source": "To start, almost all the values of dish name are supposedly unique"
},
{
"cell_type": "code",
"collapsed": false,
"input": "# Drop the 'description' column because it's empty and taking up screen real estate\ndel dish_df['description']",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 8
},
{
"cell_type": "markdown",
"metadata": {},
"source": "In order to find very similar values that we can identify as duplicates and normalize, I'll pursue the same series of steps I would take using Open Refine."
},
{
"cell_type": "code",
"collapsed": false,
"input": "def strip_and_lower(x):\n \"\"\"\n Basic string normalization:\n 1) strip leading and trailing whitespace\n 2) convert to lowercase\n 3) normalize internal whitespace (remove extra spaces between tokens)\n \"\"\"\n \n tokens = x.strip().lower().split()\n result = ' '.join(filter(None, tokens))\n \n return result\n\n# Apply the function to every value of name using map() \u2014 rather than, for instance, using a loop\ndish_df['name_modified'] = dish_df['name'].map(strip_and_lower)",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 9
},
{
"cell_type": "markdown",
"metadata": {},
"source": "A new column has been created:"
},
{
"cell_type": "code",
"collapsed": false,
"input": "dish_df[:5]",
"language": "python",
"metadata": {},
"outputs": [
{
"html": "<div style=\"max-height:1000px;max-width:1500px;overflow:auto;\">\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>name</th>\n <th>menus_appeared</th>\n <th>times_appeared</th>\n <th>first_appeared</th>\n <th>last_appeared</th>\n <th>lowest_price</th>\n <th>highest_price</th>\n <th>name_modified</th>\n </tr>\n <tr>\n <th>id</th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>1</th>\n <td> Consomme printaniere royal</td>\n <td> 10</td>\n <td> 10</td>\n <td> 1897</td>\n <td> 1927</td>\n <td> 0.20</td>\n <td> 0.4</td>\n <td> consomme printaniere royal</td>\n </tr>\n <tr>\n <th>2</th>\n <td> Chicken gumbo</td>\n <td> 110</td>\n <td> 116</td>\n <td> 1895</td>\n <td> 1960</td>\n <td> 0.10</td>\n <td> 0.8</td>\n <td> chicken gumbo</td>\n </tr>\n <tr>\n <th>3</th>\n <td> Tomato aux croutons</td>\n <td> 15</td>\n <td> 15</td>\n <td> 1893</td>\n <td> 1917</td>\n <td> 0.25</td>\n <td> 0.4</td>\n <td> tomato aux croutons</td>\n </tr>\n <tr>\n <th>4</th>\n <td> Onion au gratin</td>\n <td> 41</td>\n <td> 41</td>\n <td> 1900</td>\n <td> 1971</td>\n <td> 0.35</td>\n <td> 1.0</td>\n <td> onion au gratin</td>\n </tr>\n <tr>\n <th>5</th>\n <td> St. Emilion</td>\n <td> 62</td>\n <td> 64</td>\n <td> 1881</td>\n <td> 1981</td>\n <td> 0.00</td>\n <td> 18.0</td>\n <td> st. emilion</td>\n </tr>\n </tbody>\n</table>\n</div>",
"metadata": {},
"output_type": "pyout",
"prompt_number": 10,
"text": " name menus_appeared times_appeared \\\nid \n1 Consomme printaniere royal 10 10 \n2 Chicken gumbo 110 116 \n3 Tomato aux croutons 15 15 \n4 Onion au gratin 41 41 \n5 St. Emilion 62 64 \n\n first_appeared last_appeared lowest_price highest_price \\\nid \n1 1897 1927 0.20 0.4 \n2 1895 1960 0.10 0.8 \n3 1893 1917 0.25 0.4 \n4 1900 1971 0.35 1.0 \n5 1881 1981 0.00 18.0 \n\n name_modified \nid \n1 consomme printaniere royal \n2 chicken gumbo \n3 tomato aux croutons \n4 onion au gratin \n5 st. emilion "
}
],
"prompt_number": 10
},
{
"cell_type": "markdown",
"metadata": {},
"source": "This already yields some duplicates which had been showing up as distinct values because of small (inconsequential) differences in whitespace or capitalization."
},
{
"cell_type": "code",
"collapsed": false,
"input": "len(dish_df.name_modified.unique())",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 11,
"text": "373336"
}
],
"prompt_number": 11
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Now, if we implement Open Refine-style clustering, we should find more candidates for de-duping."
},
{
"cell_type": "code",
"collapsed": false,
"input": "import re\n\ndef fingerprint(x):\n \"\"\"\n A modified version of the fingerprint clustering algorithm implemented by Open Refine.\n See https://github.com/OpenRefine/OpenRefine/wiki/Clustering-In-Depth\n This does not normalize to ASCII characters since diacritics may be significant in this dataset\n \"\"\"\n alphanumeric_tokens = filter(None, re.split('\\W', x))\n seen = set()\n seen_add = seen.add\n deduped = sorted([i for i in alphanumeric_tokens if i not in seen and not seen_add(i)])\n fingerprint = ''.join(deduped)\n \n return fingerprint\n\ndish_df['fingerprint'] = dish_df['name_modified'].map(fingerprint)",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 12
},
{
"cell_type": "markdown",
"metadata": {},
"source": "We can see the results as another new column"
},
{
"cell_type": "code",
"collapsed": false,
"input": "dish_df[:5]",
"language": "python",
"metadata": {},
"outputs": [
{
"html": "<div style=\"max-height:1000px;max-width:1500px;overflow:auto;\">\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>name</th>\n <th>menus_appeared</th>\n <th>times_appeared</th>\n <th>first_appeared</th>\n <th>last_appeared</th>\n <th>lowest_price</th>\n <th>highest_price</th>\n <th>name_modified</th>\n <th>fingerprint</th>\n </tr>\n <tr>\n <th>id</th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>1</th>\n <td> Consomme printaniere royal</td>\n <td> 10</td>\n <td> 10</td>\n <td> 1897</td>\n <td> 1927</td>\n <td> 0.20</td>\n <td> 0.4</td>\n <td> consomme printaniere royal</td>\n <td> consommeprintaniereroyal</td>\n </tr>\n <tr>\n <th>2</th>\n <td> Chicken gumbo</td>\n <td> 110</td>\n <td> 116</td>\n <td> 1895</td>\n <td> 1960</td>\n <td> 0.10</td>\n <td> 0.8</td>\n <td> chicken gumbo</td>\n <td> chickengumbo</td>\n </tr>\n <tr>\n <th>3</th>\n <td> Tomato aux croutons</td>\n <td> 15</td>\n <td> 15</td>\n <td> 1893</td>\n <td> 1917</td>\n <td> 0.25</td>\n <td> 0.4</td>\n <td> tomato aux croutons</td>\n <td> auxcroutonstomato</td>\n </tr>\n <tr>\n <th>4</th>\n <td> Onion au gratin</td>\n <td> 41</td>\n <td> 41</td>\n <td> 1900</td>\n <td> 1971</td>\n <td> 0.35</td>\n <td> 1.0</td>\n <td> onion au gratin</td>\n <td> augratinonion</td>\n </tr>\n <tr>\n <th>5</th>\n <td> St. Emilion</td>\n <td> 62</td>\n <td> 64</td>\n <td> 1881</td>\n <td> 1981</td>\n <td> 0.00</td>\n <td> 18.0</td>\n <td> st. emilion</td>\n <td> emilionst</td>\n </tr>\n </tbody>\n</table>\n</div>",
"metadata": {},
"output_type": "pyout",
"prompt_number": 13,
"text": " name menus_appeared times_appeared \\\nid \n1 Consomme printaniere royal 10 10 \n2 Chicken gumbo 110 116 \n3 Tomato aux croutons 15 15 \n4 Onion au gratin 41 41 \n5 St. Emilion 62 64 \n\n first_appeared last_appeared lowest_price highest_price \\\nid \n1 1897 1927 0.20 0.4 \n2 1895 1960 0.10 0.8 \n3 1893 1917 0.25 0.4 \n4 1900 1971 0.35 1.0 \n5 1881 1981 0.00 18.0 \n\n name_modified fingerprint \nid \n1 consomme printaniere royal consommeprintaniereroyal \n2 chicken gumbo chickengumbo \n3 tomato aux croutons auxcroutonstomato \n4 onion au gratin augratinonion \n5 st. emilion emilionst "
}
],
"prompt_number": 13
},
{
"cell_type": "markdown",
"metadata": {},
"source": "To see the \"clusters\" of potential duplicate name values that the fingerprinting method identifies, we can group the data by the contents of the fingerprint column"
},
{
"cell_type": "code",
"collapsed": false,
"input": "clusters = dish_df.groupby('fingerprint')\n\n# Order the clusters by size\ns = clusters.size()\ns.order()",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 14,
"text": "fingerprint\n000000dedouzainehuitreslazelande 1\n0001001938duringhavemenmoreorplacedwho 1\n000100populationportslopesunnyto 1\n000112bottledrinkginhollandperrum 1\n000112bottledrinkginjamaicaperrum 1\n000112bottledrinkginoldperrumtom 1\n000112bottledrinkginperplymouthrum 1\n000113030aacresafterallandareasavebeenbeingbodegasbuttsbybyasscocompanyconsidereddelicatedondryextremelyfamilyfavoritefinestfirmforfoundedgenerationsgonzalesgonzalezhavinginisitjerezjoejudgedkeptknownlargestliterallymanuelmariamaturingmembersminimumnamedofoldolderoneoroverownerspepeproducingsschieffelinselectedsherriessherrysolerasspainstandardthethroughouttiotodaytranslatedultimateunclevineyardvineyardswarehouseswaswhichwhosewithworldyears 1\n00012belosdzlalesno 1\n000150additioncupsinofpintpricequarttowine 1\n000150boxcigarettesfranclargepersizesmall 1\n000150boxcigarettesfrancslargepersizesmall 1\n0001550andchampagnejouetmilsperrier 1\n000160cgermainegorgelmacons 1\n000165amontilladoptsqtssherry 1\n...\nbroiledchickenhalf 36\nbrownedhashedpotatoes 36\ncodryextraghmumm 36\neggsfriedtwo 36\nalecgingerimported 38\nmashedpotatoes 38\ndryextraghmumms 39\ncreamhashedinpotatoes 40\ncreamicevanilla 40\naugratinpotatoes 41\n2eggsonpoachedtoast 44\nfriedpotatoessweet 45\nboiledpotatoes 46\nfrenchfriedpotatoes 47\n 81\nLength: 330038, dtype: int64"
}
],
"prompt_number": 14
},
{
"cell_type": "markdown",
"metadata": {},
"source": "We might want to know what scope of variation there is in the size of the clusters. This can be accomplished with 1 line:,"
},
{
"cell_type": "code",
"collapsed": false,
"input": "s.value_counts()",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 15,
"text": "1 294118\n2 23204\n3 6230\n4 2564\n5 1370\n6 788\n7 491\n8 323\n9 249\n10 178\n11 110\n12 102\n15 50\n14 46\n13 39\n18 24\n20 20\n16 20\n17 20\n19 14\n22 12\n21 10\n25 7\n36 6\n31 5\n26 5\n30 5\n24 4\n23 3\n33 3\n38 2\n29 2\n40 2\n27 2\n45 1\n44 1\n46 1\n41 1\n32 1\n39 1\n35 1\n47 1\n28 1\n81 1\ndtype: int64"
}
],
"prompt_number": 15
},
{
"cell_type": "markdown",
"metadata": {},
"source": "So, by this measure, there are still 294,118 singleton values (down from 399,421), but there are 23,204 two-item clusters that could be normalized, 110 11-item clusters, just 1 47-item cluster, etc."
},
{
"cell_type": "markdown",
"metadata": {},
"source": "The print display of the various clusters above shows only the fingerprint value and the count of rows that share that common value but this is not the most immediately-apprehensible way of seeing what's going on. For clarity, let's print the 5 largest clusters:"
},
{
"cell_type": "code",
"collapsed": false,
"input": "# Actually we'll be excluding the last item of the series since the value there is blank\nfor f in s.order()[-6:-1].index:\n print dish_df[dish_df.fingerprint == f].name",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "id\n2759 Potatoes, au gratin\n7176 Potatoes au Gratin\n8373 Potatoes--Au gratin\n35728 Potatoes: au gratin\n44271 Au Gratin Potatoes\n84510 Au Gratin (Potatoes)\n94968 Potatoes, au Gratin, \n97166 POTATOES:- Au gratin\n185040 Au Gratin [potatoes]\n313168 Au Gratin Potatoes\n315697 (Potatoes) Au Gratin\n325940 Au Gratin Potatoes\n330420 au-Gratin Potatoes\n353435 Potatoes: Au gratin\n373639 Potatoes Au Gratin\n376396 Potatoes - au gratin\n376414 Potatoes, Au Gratin\n378597 Au gratin potatoes\n378732 Potatoes au gratin\n379157 Potatoes, au Gratin\n379534 Potatoes AuGratin\n379829 [Potatoes] au gratin\n380247 [Potatoes] Au Gratin\n380907 Potatoes au Gratin \n383920 Au gratin Potatoes\n385327 Potatoes Au Gratin \n385777 Au Gratin potatoes\n387869 Potatoes Au gratin\n388838 potatoes au gratin\n389716 Potatoes - Au gratin\n391056 POTATOES: Au Gratin\n398307 Potatoes: Au gratin\n398348 Potatoes-Au gratin\n414322 au gratin potatoes\n414927 Potatoes -Au Gratin\n420093 POTATOES Au Gratin\n435770 Potatoes, Au gratin\n441471 POTATOES: AU GRATIN\n448532 POTATOES - Au gratin\n450243 POTATOES AU GRATIN\n453840 potatoes, au gratin\nName: name, dtype: object\nid\n22361 Poached Eggs (2) on toast\n22562 Eggs, 2 Poached on Toast\n22763 2 Poached Eggs on Toast\n31324 Eggs, Poached on toast (2) \n48043 Eggs poached on toast (2)\n51940 Poached eggs on toast (2)\n79275 2 Poached (Eggs) on Toast\n81059 Eggs Poached (2), on Toast\n81421 2 Eggs, poached on toast\n90960 2 Poached (eggs) on Toast\n91432 2 (Eggs) Poached on Toast\n108224 Poached Eggs, 2 on toast\n111031 Poached Eggs on Toast, [2]\n127128 Eggs, Poached (2) on Toast\n128696 Eggs (2) poached on toast\n183077 EGGS Poached (2) on Toast\n206923 2 Poached on Toast, Eggs\n224031 Eggs: 2 Poached on Toast\n296286 Eggs - Poached on Toast (2)\n334815 (2) Poached Eggs on Toast\n369966 Eggs (2), Poached on Toast\n375226 Eggs, poached on toast(2)\n376027 Eggs, poached on toast (2)\n376449 EGGS, poached on toast (2) \n376635 [EGGS] poached on toast (2)\n376746 EGGS, poached on toast (2)\n377100 Poached eggs (2), on toast\n380354 EGGS poached on toast (2)\n381711 2 Poached Eggs on toast\n382721 EGGS, poached on toast [2]\n383950 Poached Eggs on Toast (2)\n389804 Poached eggs on Toast (2)\n399299 2 Eggs, Poached on Toast\n408143 Poached eggs (2) on toast\n417205 Eggs, poached on toast [2]\n433441 2 eggs poached on toast\n440712 Eggs, Poached on Toast (2)\n442689 Eggs poached on toast [2]\n445035 2 eggs, poached on toast\n452711 POACHED EGGS ON TOAST (2)\n458993 Eggs, Poached on Toast [2]\n465510 EGGS poached on toast (2)\n466056 EGGS poached on toast [2]\n476441 Eggs poached, on toast (2)\nName: name, dtype: object"
},
{
"output_type": "stream",
"stream": "stdout",
"text": "\nid\n2089 Sweet Potatoes Fried\n3780 Sweet Potatoes, Fried\n4075 fried Sweet Potatoes\n9476 Potatoes, sweet fried\n17042 Fried sweet [potatoes]\n17116 Potatoes, Sweet, Fried\n38431 Sweet Potatoes - Fried\n42055 Potatoes sweet, fried\n56061 Potatoes, fried sweet\n76902 Potatoes Sweet Fried\n78525 Sweet (potatoes), fried\n86202 POTATOES: Fried sweet\n92455 Sweet Potatoes: fried\n101532 Potatoes Fried Sweet\n136255 Sweet fried potatoes\n198754 Sweet Potatoes, fried\n349957 Sweet Potatoes--Fried\n354008 Potatoes SWEET Fried\n356717 Sweet Potatoes---Fried\n373866 Fried sweet potatoes\n373917 FRIED SWEET POTATOES\n373973 Sweet potatoes - Fried\n374052 Fried Sweet Potatoes\n376416 Potatoes, Fried Sweet\n376488 Sweet Potatoes: Fried\n379831 Fried [Sweet Potatoes]\n380251 Fried [sweet potatoes]\n387427 Sweet potatoes - fried\n390331 Sweet potatoes, fried\n392859 Fried Sweet potatoes\n396587 SWEET POTATOES---Fried\n397513 Sweet potatoes -- Fried\n397930 SWEET POTATOES - Fried\n401304 Sweet potatoes-fried\n402285 Sweet potatoes-Fried\n406090 fried sweet potatoes\n409582 Sweet potatoes fried\n411471 Sweet potatoes--Fried\n431756 Sweet Potatoes - fried\n452385 Sweet Potatoes, fried\n454978 fried sweet potatoes\n456340 Sweet Fried Potatoes\n461269 SWEET POTATOES - fried\n465671 Sweet Potatoes, Fried \n471570 Fried Sweet Potatoes.\nName: name, dtype: object"
},
{
"output_type": "stream",
"stream": "stdout",
"text": "\nid\n219 Boiled potatoes\n2752 Potatoes, boiled\n4290 Potatoes--Boiled\n17902 Boiled Potatoes,\n20308 Potatoes Boiled\n31198 Potatoes: boiled\n34056 Boiled Potatoes.\n37644 Potatoes - Boiled\n40611 Boiled Potatoes\n44255 Boiled (potatoes)\n59475 Boiled [Potatoes]\n63979 POTATOES-boiled\n74342 Potatoes Boiled\n76369 POTATOES Boiled\n85397 Potatoes , boiled\n94958 Potatoes, Boiled,\n97154 Potatoes:- Boiled\n125408 POTATOES: *Boiled\n194143 Boiled Potatoes\n199538 Boiled-Potatoes\n225209 Potatoes:--boiled\n362463 Potatoes---Boiled\n374956 Boiled Potatoes\n376397 Potatoes, Boiled\n379856 Potatoes -- Boiled \n380179 Potatoes -- Boiled\n380244 Boiled [potatoes]\n385714 potatoes, boiled\n389060 *Boiled Potatoes\n394137 boiled potatoes\n394579 Boiled POTATOES\n395878 BOILED POTATOES\n398306 Potatoes: Boiled\n398346 Potatoes-Boiled\n401302 Potatoes boiled\n407244 Potatoes - boiled\n412613 Potatoes, boiled \n426362 Potatoes boiled \n427434 BoiledPotatoes\n427492 Potatoes Boiled \n432003 Boiled Potatoes \n436408 Potatoes, Boiled \n451614 POTATOES--Boiled\n452667 POTATOES - Boiled\n465416 POTATOES: Boiled\n471029 Boiled potatoes.\nName: name, dtype: object"
},
{
"output_type": "stream",
"stream": "stdout",
"text": "\nid\n1259 French fried potatoes\n2761 Potatoes, French fried\n11893 Potatoes---French Fried\n14987 Potatoes: French fried\n17047 French fried [potatoes]\n17949 Potatoes - French Fried\n18441 Potatoes French fried\n21120 Potatoes-French Fried\n21264 Potatoes--French Fried\n29043 POTATOES: French Fried.\n32765 Potatoes French, fried\n35844 French Fried Potatoes.\n37852 French Fried (POTATOES)\n39455 Potatoes, French, fried\n57562 Potatoes- French Fried\n74346 Potatoes French Fried\n76376 POTATOES French Fried\n97164 POTATOES:- French fried\n100589 Potatoes - French Fried,\n112767 Potatoes, Fried, French\n147020 Potatoes: French Fried\n181396 Potatoes -- French Fried\n248905 French Fried Potatoes\n328845 French-Fried Potatoes\n373638 Potatoes French Fried\n375011 French Fried Potatoes\n376400 Potatoes, French Fried\n376487 Potatoes: French Fried\n376508 Potatoes - French fried\n379156 French Fried potatoes\n379828 French Fried [Potatoes]\n386120 Potatoes, french fried\n387212 Potatoes--French fried\n387671 French Fried (potatoes)\n393034 French fried Potatoes\n395877 FRENCH FRIED POTATOES\n398352 Potatoes-French fried\n401306 Potatoes french fried\n401838 French fried potatoes\n404612 Potatoes: French fried\n407806 French fried potatoes \n410281 french fried potatoes\n410591 Potatoes: French fried \n436571 POTATOES - French Fried\n441467 POTATOES: FRENCH FRIED\n455232 potatoes, french fried\n473731 POTATOES--FRENCH FRIED\nName: name, dtype: object"
},
{
"output_type": "stream",
"stream": "stdout",
"text": "\n"
}
],
"prompt_number": 16
},
{
"cell_type": "markdown",
"metadata": {},
"source": "At a glance these do indeed look like values that should be normalized to a single \"name\". Since the default way that IPython prints a Pandas Series object includes the 'id', it is easy to construct URLs to allow for some sanity checking. \n\n(I'm not automating the sanity checking here because I don't want to get in bad odor with NYPL's anti-spambot mechanisms.)"
},
{
"cell_type": "code",
"collapsed": false,
"input": "testing_cluster = dish_df[dish_df.fingerprint == 'augratinpotatoes']\n\nfor item in testing_cluster.index.tolist():\n url = \"http://menus.nypl.org/dishes/{0}\".format(item)\n print url",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "http://menus.nypl.org/dishes/2759\nhttp://menus.nypl.org/dishes/7176\nhttp://menus.nypl.org/dishes/8373\nhttp://menus.nypl.org/dishes/35728\nhttp://menus.nypl.org/dishes/44271\nhttp://menus.nypl.org/dishes/84510\nhttp://menus.nypl.org/dishes/94968\nhttp://menus.nypl.org/dishes/97166\nhttp://menus.nypl.org/dishes/185040\nhttp://menus.nypl.org/dishes/313168\nhttp://menus.nypl.org/dishes/315697\nhttp://menus.nypl.org/dishes/325940\nhttp://menus.nypl.org/dishes/330420\nhttp://menus.nypl.org/dishes/353435\nhttp://menus.nypl.org/dishes/373639\nhttp://menus.nypl.org/dishes/376396\nhttp://menus.nypl.org/dishes/376414\nhttp://menus.nypl.org/dishes/378597\nhttp://menus.nypl.org/dishes/378732\nhttp://menus.nypl.org/dishes/379157\nhttp://menus.nypl.org/dishes/379534\nhttp://menus.nypl.org/dishes/379829\nhttp://menus.nypl.org/dishes/380247\nhttp://menus.nypl.org/dishes/380907\nhttp://menus.nypl.org/dishes/383920\nhttp://menus.nypl.org/dishes/385327\nhttp://menus.nypl.org/dishes/385777\nhttp://menus.nypl.org/dishes/387869\nhttp://menus.nypl.org/dishes/388838\nhttp://menus.nypl.org/dishes/389716\nhttp://menus.nypl.org/dishes/391056\nhttp://menus.nypl.org/dishes/398307\nhttp://menus.nypl.org/dishes/398348\nhttp://menus.nypl.org/dishes/414322\nhttp://menus.nypl.org/dishes/414927\nhttp://menus.nypl.org/dishes/420093\nhttp://menus.nypl.org/dishes/435770\nhttp://menus.nypl.org/dishes/441471\nhttp://menus.nypl.org/dishes/448532\nhttp://menus.nypl.org/dishes/450243\nhttp://menus.nypl.org/dishes/453840\n"
}
],
"prompt_number": 17
},
{
"cell_type": "markdown",
"metadata": {},
"source": "#### Better Dish Statistics"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Identifying the clusters is great and we can use this information not only to improve the quality of the curated data set but also to clarify and improve analysis of the data about dish frequencies and \"timespans.\" For the purposes of example, I'll use the \"french fried potatoes\" cluster.\n\nWith 47 values to choose from, what should we select for a normalized value? How about the most common string already represented in the cluster?"
},
{
"cell_type": "code",
"collapsed": false,
"input": "# Get a Dataframe consisting of all the rows that share a common fingerprint\nresult_df = dish_df[dish_df.fingerprint == 'frenchfriedpotatoes']\n\n# Get the number of times appeared for each result by selecting that column (Series) and sort in descending order\nby_appearance = result_df.times_appeared.order(ascending=False)\n\n#Use the index of the max value to look up the most common value for the name\nprint \"Most common value: '{0}'\".format(dish_df.name[by_appearance.idxmax()])",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "Most common value: 'French fried potatoes'\n"
}
],
"prompt_number": 18
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Does clustering the values change the number of times a dish appeared or the earliest and latest dates it appears?"
},
{
"cell_type": "code",
"collapsed": false,
"input": "result_df.times_appeared[:5]",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 19,
"text": "id\n1259 1392\n2761 243\n11893 1\n14987 23\n17047 3\nName: times_appeared, dtype: int64"
}
],
"prompt_number": 19
},
{
"cell_type": "markdown",
"metadata": {},
"source": "According to this data (it varies slightly from what appears on [the web site](http://menus.nypl.org/dishes/1259)), the dish with id 1259 and name 'French fried potatoes' appears 1,392 times. Dish 2761 (name \"Potatoes, French Fried\") appears 243 times, etc.\n\nIf we assert that all of these instances are in fact the same type of dish, we can quickly calculate a new total for how often this dish appears on the menus in the data set."
},
{
"cell_type": "code",
"collapsed": false,
"input": "total_appearances = result_df.times_appeared.sum()\nprint \"French fried potatoes appear {0} times in the menus digitized by NYPL.\".format(total_appearances)",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "French fried potatoes appear 2140 times in the menus digitized by NYPL.\n"
}
],
"prompt_number": 20
},
{
"cell_type": "markdown",
"metadata": {},
"source": "We can do something similar for the date ranges. (It isn't even necessary to do anything with the data type of the values for first_appeared and last_appeared.)"
},
{
"cell_type": "code",
"collapsed": false,
"input": "# aggregate_last_appeared = result_df.last_appeared.max()\n\n# It turns out we can't completely straightforwardly use min() as well as max() \n# because some dishes apparently have '0' for first appeared.\naggregate_first_appeared = result_df.first_appeared.values[0]\naggregate_last_appeared = result_df.last_appeared.max()\n\nprint \"French fried potatoes first appeared on a menu in {0} and last appeared on a menu in {1}\"\\\n.format(aggregate_first_appeared, aggregate_last_appeared)",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "French fried potatoes first appeared on a menu in 1884 and last appeared on a menu in 1989\n"
}
],
"prompt_number": 21
},
{
"cell_type": "markdown",
"metadata": {},
"source": "For an apparently ever-popular dish like 'French fried potatoes' this 100-or-so year range is not that different from what appears on the page for the most-popular variant [(Dish 1259)](http://menus.nypl.org/dishes/1259). The aggregate values might shift more for other dishes."
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Of course, there are also still 'pommes frites' to account for &hellip;"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "#### Plotting Results\n\nReproducing NYPL's lovely appearance by year frequency plots takes a little more doing but it provides a good opportunity to demonstrate the facilities that Pandas provides for pulling together different sets of data using SQL-like mechanisms."
},
{
"cell_type": "code",
"collapsed": false,
"input": "# Load data from the other CSV files included in the NYPL's regular data dumps because we'll need it all \npage_data = '/Users/libraries/Dropbox/NYPL_Data/2013_12_18_11_50_34_data/MenuPage.csv'\npage_df = pd.read_csv(page_data, index_col='id')\n\nmenu_data = '/Users/libraries/Dropbox/NYPL_Data/2013_12_18_11_50_34_data/Menu.csv'\nmenu_df = pd.read_csv(menu_data, index_col='id', parse_dates=True)",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 22
},
{
"cell_type": "markdown",
"metadata": {},
"source": "(For this final bit, I'm not entirely confident that I'm doing this in the best way. It seems to \"work\" but it feels a little verbose. Caveat lector.)"
},
{
"cell_type": "code",
"collapsed": false,
"input": "# This should create a DataFrame from the Menu Items data set that contains \n# only \"rows\" related to our example cluster of 'French fried potato' dishes\nlookup_items_df = item_df[item_df.index.isin(result_df.index)]",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 23
},
{
"cell_type": "code",
"collapsed": false,
"input": "# The length of this DataFrame should be same as the sum of occurrences we calculated above \ntry:\n assert len(lookup_items_df) == result_df.times_appeared.sum()\n print \"Length of the DataFrame is consistent\"\nexcept:\n print \"Something's wrong\"",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "Length of the DataFrame is consistent\n"
}
],
"prompt_number": 24
},
{
"cell_type": "code",
"collapsed": false,
"input": "lookup_items_df.head(10)",
"language": "python",
"metadata": {},
"outputs": [
{
"html": "<div style=\"max-height:1000px;max-width:1500px;overflow:auto;\">\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>id</th>\n <th>menu_page_id</th>\n <th>price</th>\n <th>high_price</th>\n <th>created_at</th>\n <th>updated_at</th>\n <th>xpos</th>\n <th>ypos</th>\n </tr>\n <tr>\n <th>dish_id</th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>1259</th>\n <td> 454</td>\n <td> 5217</td>\n <td> NaN</td>\n <td>NaN</td>\n <td> 2011-04-19 03:29:41 UTC</td>\n <td> 2011-10-05 21:07:14 UTC</td>\n <td> 0.342857</td>\n <td> 0.761442</td>\n </tr>\n <tr>\n <th>1259</th>\n <td> 530</td>\n <td> 130</td>\n <td> NaN</td>\n <td>NaN</td>\n <td> 2011-04-19 13:17:01 UTC</td>\n <td> 2011-05-13 05:14:16 UTC</td>\n <td> 0.667143</td>\n <td> 0.735197</td>\n </tr>\n <tr>\n <th>1259</th>\n <td> 1194</td>\n <td> 6471</td>\n <td> NaN</td>\n <td>NaN</td>\n <td> 2011-04-19 19:22:19 UTC</td>\n <td> 2011-05-06 18:52:50 UTC</td>\n <td> 0.315714</td>\n <td> 0.747705</td>\n </tr>\n <tr>\n <th>1259</th>\n <td> 1792</td>\n <td> 134</td>\n <td> NaN</td>\n <td>NaN</td>\n <td> 2011-04-19 20:42:20 UTC</td>\n <td> 2011-04-19 20:42:20 UTC</td>\n <td> 0.550000</td>\n <td> 0.685084</td>\n </tr>\n <tr>\n <th>1259</th>\n <td> 2093</td>\n <td> 146</td>\n <td> NaN</td>\n <td>NaN</td>\n <td> 2011-04-19 22:22:22 UTC</td>\n <td> 2011-04-19 22:22:22 UTC</td>\n <td> 0.568571</td>\n <td> 0.683963</td>\n </tr>\n <tr>\n <th>1259</th>\n <td> 2953</td>\n <td> 1627</td>\n <td> NaN</td>\n <td>NaN</td>\n <td> 2011-04-20 02:18:30 UTC</td>\n <td> 2011-04-20 02:18:30 UTC</td>\n <td> 0.508571</td>\n <td> 0.623720</td>\n </tr>\n <tr>\n <th>1259</th>\n <td> 3715</td>\n <td> 4783</td>\n <td> 0.10</td>\n <td>NaN</td>\n <td> 2011-04-20 05:06:28 UTC</td>\n <td> 2011-10-02 16:31:41 UTC</td>\n <td> 0.301429</td>\n <td> 0.338671</td>\n </tr>\n <tr>\n <th>2761</th>\n <td> 3966</td>\n <td> 3531</td>\n <td> 0.10</td>\n <td>NaN</td>\n <td> 2011-04-20 05:25:58 UTC</td>\n <td> 2011-04-20 05:25:58 UTC</td>\n <td> 0.342857</td>\n <td> 0.477359</td>\n </tr>\n <tr>\n <th>1259</th>\n <td> 4565</td>\n <td> 1432</td>\n <td> 0.10</td>\n <td>NaN</td>\n <td> 2011-04-20 16:04:24 UTC</td>\n <td> 2011-05-11 20:53:58 UTC</td>\n <td> 0.131429</td>\n <td> 0.824837</td>\n </tr>\n <tr>\n <th>2761</th>\n <td> 5788</td>\n <td> 5006</td>\n <td> 0.15</td>\n <td>NaN</td>\n <td> 2011-04-20 19:12:01 UTC</td>\n <td> 2011-05-31 20:07:02 UTC</td>\n <td> 0.535714</td>\n <td> 0.652158</td>\n </tr>\n </tbody>\n</table>\n</div>",
"metadata": {},
"output_type": "pyout",
"prompt_number": 25,
"text": " id menu_page_id price high_price created_at \\\ndish_id \n1259 454 5217 NaN NaN 2011-04-19 03:29:41 UTC \n1259 530 130 NaN NaN 2011-04-19 13:17:01 UTC \n1259 1194 6471 NaN NaN 2011-04-19 19:22:19 UTC \n1259 1792 134 NaN NaN 2011-04-19 20:42:20 UTC \n1259 2093 146 NaN NaN 2011-04-19 22:22:22 UTC \n1259 2953 1627 NaN NaN 2011-04-20 02:18:30 UTC \n1259 3715 4783 0.10 NaN 2011-04-20 05:06:28 UTC \n2761 3966 3531 0.10 NaN 2011-04-20 05:25:58 UTC \n1259 4565 1432 0.10 NaN 2011-04-20 16:04:24 UTC \n2761 5788 5006 0.15 NaN 2011-04-20 19:12:01 UTC \n\n updated_at xpos ypos \ndish_id \n1259 2011-10-05 21:07:14 UTC 0.342857 0.761442 \n1259 2011-05-13 05:14:16 UTC 0.667143 0.735197 \n1259 2011-05-06 18:52:50 UTC 0.315714 0.747705 \n1259 2011-04-19 20:42:20 UTC 0.550000 0.685084 \n1259 2011-04-19 22:22:22 UTC 0.568571 0.683963 \n1259 2011-04-20 02:18:30 UTC 0.508571 0.623720 \n1259 2011-10-02 16:31:41 UTC 0.301429 0.338671 \n2761 2011-04-20 05:25:58 UTC 0.342857 0.477359 \n1259 2011-05-11 20:53:58 UTC 0.131429 0.824837 \n2761 2011-05-31 20:07:02 UTC 0.535714 0.652158 "
}
],
"prompt_number": 25
},
{
"cell_type": "markdown",
"metadata": {},
"source": "From this intermediate DataFrame we want to grab the values for menu_page_id so that we can look up the relevant menus to which they belong:"
},
{
"cell_type": "code",
"collapsed": false,
"input": "target_pages = lookup_items_df.menu_page_id.values\n\nlookup_pages_df = page_df[page_df.index.isin(target_pages)]",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 26
},
{
"cell_type": "code",
"collapsed": false,
"input": "lookup_pages_df.head(10)",
"language": "python",
"metadata": {},
"outputs": [
{
"html": "<div style=\"max-height:1000px;max-width:1500px;overflow:auto;\">\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>menu_id</th>\n <th>page_number</th>\n <th>image_id</th>\n <th>full_height</th>\n <th>full_width</th>\n <th>uuid</th>\n </tr>\n <tr>\n <th>id</th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>130</th>\n <td> 12463</td>\n <td> 1</td>\n <td> 466928</td>\n <td> 3049</td>\n <td> 2004</td>\n <td> 510D47DB-491F-A3D9-E040-E00A18064A99</td>\n </tr>\n <tr>\n <th>134</th>\n <td> 12465</td>\n <td> 1</td>\n <td> 466931</td>\n <td> 3411</td>\n <td> 2291</td>\n <td> 510d47db-4923-a3d9-e040-e00a18064a99</td>\n </tr>\n <tr>\n <th>146</th>\n <td> 12470</td>\n <td> 1</td>\n <td> 466940</td>\n <td> 3427</td>\n <td> 2282</td>\n <td> 510d47db-4933-a3d9-e040-e00a18064a99</td>\n </tr>\n <tr>\n <th>263</th>\n <td> 12505</td>\n <td> 1</td>\n <td> 475815</td>\n <td> 4949</td>\n <td> 3261</td>\n <td> 510d47db-4309-a3d9-e040-e00a18064a99</td>\n </tr>\n <tr>\n <th>265</th>\n <td> 12506</td>\n <td> 3</td>\n <td> 4000008161</td>\n <td> 5559</td>\n <td> 3229</td>\n <td> 510d47db-430b-a3d9-e040-e00a18064a99</td>\n </tr>\n <tr>\n <th>309</th>\n <td> 12518</td>\n <td> 3</td>\n <td> 4000013961</td>\n <td> 4659</td>\n <td> 2823</td>\n <td> 510d47db-662f-a3d9-e040-e00a18064a99</td>\n </tr>\n <tr>\n <th>332</th>\n <td> 12523</td>\n <td> 5</td>\n <td> 4000013986</td>\n <td> 3703</td>\n <td> 2427</td>\n <td> 510d47db-6652-a3d9-e040-e00a18064a99</td>\n </tr>\n <tr>\n <th>460</th>\n <td> 12562</td>\n <td> 1</td>\n <td> 466438</td>\n <td> 2803</td>\n <td> 1979</td>\n <td> 510d47db-44a4-a3d9-e040-e00a18064a99</td>\n </tr>\n <tr>\n <th>482</th>\n <td> 12569</td>\n <td> 1</td>\n <td> 466597</td>\n <td> 2600</td>\n <td> 1811</td>\n <td> 510d47db-461a-a3d9-e040-e00a18064a99</td>\n </tr>\n <tr>\n <th>501</th>\n <td> 12577</td>\n <td> 1</td>\n <td> 466783</td>\n <td> 2884</td>\n <td> 2083</td>\n <td> 510d47db-47c1-a3d9-e040-e00a18064a99</td>\n </tr>\n </tbody>\n</table>\n</div>",
"metadata": {},
"output_type": "pyout",
"prompt_number": 27,
"text": " menu_id page_number image_id full_height full_width \\\nid \n130 12463 1 466928 3049 2004 \n134 12465 1 466931 3411 2291 \n146 12470 1 466940 3427 2282 \n263 12505 1 475815 4949 3261 \n265 12506 3 4000008161 5559 3229 \n309 12518 3 4000013961 4659 2823 \n332 12523 5 4000013986 3703 2427 \n460 12562 1 466438 2803 1979 \n482 12569 1 466597 2600 1811 \n501 12577 1 466783 2884 2083 \n\n uuid \nid \n130 510D47DB-491F-A3D9-E040-E00A18064A99 \n134 510d47db-4923-a3d9-e040-e00a18064a99 \n146 510d47db-4933-a3d9-e040-e00a18064a99 \n263 510d47db-4309-a3d9-e040-e00a18064a99 \n265 510d47db-430b-a3d9-e040-e00a18064a99 \n309 510d47db-662f-a3d9-e040-e00a18064a99 \n332 510d47db-6652-a3d9-e040-e00a18064a99 \n460 510d47db-44a4-a3d9-e040-e00a18064a99 \n482 510d47db-461a-a3d9-e040-e00a18064a99 \n501 510d47db-47c1-a3d9-e040-e00a18064a99 "
}
],
"prompt_number": 27
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Now we can grab all the relevant values of 'menu_id' for menus and do the last lookup:"
},
{
"cell_type": "code",
"collapsed": false,
"input": "target_menus = lookup_pages_df.menu_id.values",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 28
},
{
"cell_type": "code",
"collapsed": false,
"input": "lookup_menus_df = menu_df[menu_df.index.isin(target_menus)]",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 29
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Now we should have a DataFrame containing only menus that have pages on which one of the dishes from our 'French fried potato' cluster appears:"
},
{
"cell_type": "code",
"collapsed": false,
"input": "lookup_menus_df.head(10)",
"language": "python",
"metadata": {},
"outputs": [
{
"html": "<div style=\"max-height:1000px;max-width:1500px;overflow:auto;\">\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>name</th>\n <th>sponsor</th>\n <th>event</th>\n <th>venue</th>\n <th>place</th>\n <th>physical_description</th>\n <th>occasion</th>\n <th>notes</th>\n <th>call_number</th>\n <th>keywords</th>\n <th>language</th>\n <th>date</th>\n <th>location</th>\n <th>location_type</th>\n <th>currency</th>\n <th>currency_symbol</th>\n <th>status</th>\n <th>page_count</th>\n <th>dish_count</th>\n </tr>\n <tr>\n <th>id</th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>12463</th>\n <td> NaN</td>\n <td> HOTEL EASTMAN</td>\n <td> BREAKFAST</td>\n <td> COMMERCIAL</td>\n <td> HOT SPRINGS, AR</td>\n <td> CARD; 4.75X7.5;</td>\n <td> EASTER;</td>\n <td> NaN</td>\n <td> 1900-2822</td>\n <td>NaN</td>\n <td>NaN</td>\n <td> 1900-04-15</td>\n <td> Hotel Eastman</td>\n <td>NaN</td>\n <td> NaN</td>\n <td> NaN</td>\n <td> under review</td>\n <td> 2</td>\n <td> 67</td>\n </tr>\n <tr>\n <th>12465</th>\n <td> NaN</td>\n <td> NORDDEUTSCHER LLOYD BREMEN</td>\n <td> FRUHSTUCK/BREAKFAST;</td>\n <td> COMMERCIAL</td>\n <td> DAMPFER KAISER WILHELM DER GROSSE;</td>\n <td> CARD; ILLU; COL; 5.5X8.0;</td>\n <td> NaN</td>\n <td> MENU IN GERMAN AND ENGLISH; ILLUS, STEAMSHIP A...</td>\n <td> 1900-2827</td>\n <td>NaN</td>\n <td>NaN</td>\n <td> 1900-04-16</td>\n <td> Norddeutscher Lloyd Bremen</td>\n <td>NaN</td>\n <td> NaN</td>\n <td> NaN</td>\n <td> under review</td>\n <td> 2</td>\n <td> 84</td>\n </tr>\n <tr>\n <th>12470</th>\n <td> NaN</td>\n <td> NORDDEUTSCHER LLOYD BREMEN</td>\n <td> FRUHSTUCK/BREAKFAST</td>\n <td> COMMERCIAL</td>\n <td> SCHNELLDAMPFER KAISER WILHELM DER GROSSE;</td>\n <td> BROADSIDE; ILLUS; COL; 5.5X8.50;</td>\n <td> NaN</td>\n <td> MENU IN GERMAN AND ENGLISH; ILLUS, LIGHTHOUSE;...</td>\n <td> 1900-2839</td>\n <td>NaN</td>\n <td>NaN</td>\n <td> 1900-04-17</td>\n <td> Norddeutscher Lloyd Bremen</td>\n <td>NaN</td>\n <td> NaN</td>\n <td> NaN</td>\n <td> under review</td>\n <td> 2</td>\n <td> 80</td>\n </tr>\n <tr>\n <th>12505</th>\n <td> NaN</td>\n <td> BARTHOLDI HOTEL</td>\n <td> BREAKFAST</td>\n <td> COMMERCIAL</td>\n <td> NY</td>\n <td> BROADSIDE; COL; 7 X 11.75;</td>\n <td> DAILY</td>\n <td> VERY POOR CONDITION;</td>\n <td> 1900-1137</td>\n <td>NaN</td>\n <td>NaN</td>\n <td> 1900-02-18</td>\n <td> Bartholdi Hotel</td>\n <td>NaN</td>\n <td> Dollars</td>\n <td> $</td>\n <td> under review</td>\n <td> 2</td>\n <td> 203</td>\n </tr>\n <tr>\n <th>12506</th>\n <td> NaN</td>\n <td> BARTHOLDI HOTEL</td>\n <td> LUNCH &amp; DINNER</td>\n <td> COMMERCIAL</td>\n <td> 23RD ST &amp; BWAY NY</td>\n <td> FOLDER; ILLUS;8.25 X 14;</td>\n <td> DAILY</td>\n <td> MANY ITEMS HANDWRITTEN; HOURS INCLUDED;</td>\n <td> 1900-1138</td>\n <td>NaN</td>\n <td>NaN</td>\n <td> 1900-02-18</td>\n <td> Bartholdi Hotel</td>\n <td>NaN</td>\n <td> Dollars</td>\n <td> $</td>\n <td> under review</td>\n <td> 4</td>\n <td> 336</td>\n </tr>\n <tr>\n <th>12518</th>\n <td> NaN</td>\n <td> COLUMBIA RESTAURANT</td>\n <td> DAILY MENU</td>\n <td> COMMERCIAL</td>\n <td> 48 EAST 14TH STREET,[NEW YORK,NY?]</td>\n <td> FOLDER;ILLUS;7.25X11.5;</td>\n <td> DAILY;</td>\n <td> 2 COPIES;WINE LIST;</td>\n <td> 1901-1527</td>\n <td>NaN</td>\n <td>NaN</td>\n <td> 1901-06-03</td>\n <td> Columbia Restaurant</td>\n <td>NaN</td>\n <td> Dollars</td>\n <td> $</td>\n <td> under review</td>\n <td> 4</td>\n <td> 475</td>\n </tr>\n <tr>\n <th>12523</th>\n <td> NaN</td>\n <td> CITIZENS'STEAMBOAT COMPANY</td>\n <td> LUNCH</td>\n <td> COMMERCIAL</td>\n <td> STEAMER SARATOGA,TROY LINE</td>\n <td> BOOKLET;ILLUS;COL;6.25X9;</td>\n <td> DAILY;</td>\n <td> AU SABLE CHASM ON FRONT COVER;BLUE MOUNTAIN LA...</td>\n <td> 1901-1537</td>\n <td>NaN</td>\n <td>NaN</td>\n <td> 1901-01-01</td>\n <td> Citizens'steamboat Company</td>\n <td>NaN</td>\n <td> Dollars</td>\n <td> $</td>\n <td> under review</td>\n <td> 8</td>\n <td> 246</td>\n </tr>\n <tr>\n <th>12562</th>\n <td> NaN</td>\n <td> CUNARD LINE</td>\n <td> BREAKFAST</td>\n <td> COMMERCIAL</td>\n <td> EN ROUTE ON BOARD R.M.S. CAMPANIA</td>\n <td> CARD; 4.5 X 6.5;</td>\n <td> NaN</td>\n <td> PRICED WINE LIST ON BACK OF MENU; PRICES IN BR...</td>\n <td> 1900-2170</td>\n <td>NaN</td>\n <td>NaN</td>\n <td> 1900-02-28</td>\n <td> Cunard Line</td>\n <td>NaN</td>\n <td> NaN</td>\n <td> NaN</td>\n <td> under review</td>\n <td> 2</td>\n <td> 110</td>\n </tr>\n <tr>\n <th>12569</th>\n <td> NaN</td>\n <td> MAXWELL HOUSE</td>\n <td> SUPPER</td>\n <td> COMMERCIAL</td>\n <td> NASHVILLE, [TN?]</td>\n <td> CARD; ILLUS; 4.25X6.25</td>\n <td> NaN</td>\n <td> ELABORATE PRINTING OF HOTEL NAME FORMS ILLUSTR...</td>\n <td> 1900-2397</td>\n <td>NaN</td>\n <td>NaN</td>\n <td> 1900-03-12</td>\n <td> Maxwell House</td>\n <td>NaN</td>\n <td> NaN</td>\n <td> NaN</td>\n <td> under review</td>\n <td> 2</td>\n <td> 38</td>\n </tr>\n <tr>\n <th>12577</th>\n <td> NaN</td>\n <td> HADDON HALL</td>\n <td> SUPPER</td>\n <td> COMMERCIAL</td>\n <td> [PHILADELPHIA,PA.]</td>\n <td> BROADSIDE; ILLUS; COL; 5 X 7;</td>\n <td> DAILY</td>\n <td> NaN</td>\n <td> 1900-2625</td>\n <td>NaN</td>\n <td>NaN</td>\n <td> 1900-03-31</td>\n <td> Haddon Hall</td>\n <td>NaN</td>\n <td> NaN</td>\n <td> NaN</td>\n <td> under review</td>\n <td> 2</td>\n <td> 60</td>\n </tr>\n </tbody>\n</table>\n</div>",
"metadata": {},
"output_type": "pyout",
"prompt_number": 30,
"text": " name sponsor event venue \\\nid \n12463 NaN HOTEL EASTMAN BREAKFAST COMMERCIAL \n12465 NaN NORDDEUTSCHER LLOYD BREMEN FRUHSTUCK/BREAKFAST; COMMERCIAL \n12470 NaN NORDDEUTSCHER LLOYD BREMEN FRUHSTUCK/BREAKFAST COMMERCIAL \n12505 NaN BARTHOLDI HOTEL BREAKFAST COMMERCIAL \n12506 NaN BARTHOLDI HOTEL LUNCH & DINNER COMMERCIAL \n12518 NaN COLUMBIA RESTAURANT DAILY MENU COMMERCIAL \n12523 NaN CITIZENS'STEAMBOAT COMPANY LUNCH COMMERCIAL \n12562 NaN CUNARD LINE BREAKFAST COMMERCIAL \n12569 NaN MAXWELL HOUSE SUPPER COMMERCIAL \n12577 NaN HADDON HALL SUPPER COMMERCIAL \n\n place \\\nid \n12463 HOT SPRINGS, AR \n12465 DAMPFER KAISER WILHELM DER GROSSE; \n12470 SCHNELLDAMPFER KAISER WILHELM DER GROSSE; \n12505 NY \n12506 23RD ST & BWAY NY \n12518 48 EAST 14TH STREET,[NEW YORK,NY?] \n12523 STEAMER SARATOGA,TROY LINE \n12562 EN ROUTE ON BOARD R.M.S. CAMPANIA \n12569 NASHVILLE, [TN?] \n12577 [PHILADELPHIA,PA.] \n\n physical_description occasion \\\nid \n12463 CARD; 4.75X7.5; EASTER; \n12465 CARD; ILLU; COL; 5.5X8.0; NaN \n12470 BROADSIDE; ILLUS; COL; 5.5X8.50; NaN \n12505 BROADSIDE; COL; 7 X 11.75; DAILY \n12506 FOLDER; ILLUS;8.25 X 14; DAILY \n12518 FOLDER;ILLUS;7.25X11.5; DAILY; \n12523 BOOKLET;ILLUS;COL;6.25X9; DAILY; \n12562 CARD; 4.5 X 6.5; NaN \n12569 CARD; ILLUS; 4.25X6.25 NaN \n12577 BROADSIDE; ILLUS; COL; 5 X 7; DAILY \n\n notes call_number \\\nid \n12463 NaN 1900-2822 \n12465 MENU IN GERMAN AND ENGLISH; ILLUS, STEAMSHIP A... 1900-2827 \n12470 MENU IN GERMAN AND ENGLISH; ILLUS, LIGHTHOUSE;... 1900-2839 \n12505 VERY POOR CONDITION; 1900-1137 \n12506 MANY ITEMS HANDWRITTEN; HOURS INCLUDED; 1900-1138 \n12518 2 COPIES;WINE LIST; 1901-1527 \n12523 AU SABLE CHASM ON FRONT COVER;BLUE MOUNTAIN LA... 1901-1537 \n12562 PRICED WINE LIST ON BACK OF MENU; PRICES IN BR... 1900-2170 \n12569 ELABORATE PRINTING OF HOTEL NAME FORMS ILLUSTR... 1900-2397 \n12577 NaN 1900-2625 \n\n keywords language date location \\\nid \n12463 NaN NaN 1900-04-15 Hotel Eastman \n12465 NaN NaN 1900-04-16 Norddeutscher Lloyd Bremen \n12470 NaN NaN 1900-04-17 Norddeutscher Lloyd Bremen \n12505 NaN NaN 1900-02-18 Bartholdi Hotel \n12506 NaN NaN 1900-02-18 Bartholdi Hotel \n12518 NaN NaN 1901-06-03 Columbia Restaurant \n12523 NaN NaN 1901-01-01 Citizens'steamboat Company \n12562 NaN NaN 1900-02-28 Cunard Line \n12569 NaN NaN 1900-03-12 Maxwell House \n12577 NaN NaN 1900-03-31 Haddon Hall \n\n location_type currency currency_symbol status page_count \\\nid \n12463 NaN NaN NaN under review 2 \n12465 NaN NaN NaN under review 2 \n12470 NaN NaN NaN under review 2 \n12505 NaN Dollars $ under review 2 \n12506 NaN Dollars $ under review 4 \n12518 NaN Dollars $ under review 4 \n12523 NaN Dollars $ under review 8 \n12562 NaN NaN NaN under review 2 \n12569 NaN NaN NaN under review 2 \n12577 NaN NaN NaN under review 2 \n\n dish_count \nid \n12463 67 \n12465 84 \n12470 80 \n12505 203 \n12506 336 \n12518 475 \n12523 246 \n12562 110 \n12569 38 \n12577 60 "
}
],
"prompt_number": 30
},
{
"cell_type": "markdown",
"metadata": {},
"source": "This next bit is a workaround since parsing the dates in the date column doesn't seem to be working for me as expected. I need to extract the year for each menu so I can group the number of appearances of dish by year"
},
{
"cell_type": "code",
"collapsed": false,
"input": "import dateutil\n\ndef extract_year(x):\n try:\n datestring = dateutil.parser.parse(x)\n return datestring.year\n except:\n return None\n\nlookup_menus_df['date_year'] = lookup_menus_df['date'].map(extract_year)",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 31
},
{
"cell_type": "markdown",
"metadata": {},
"source": "With a little IPython magic, it's possible to plot frequency of appearances:"
},
{
"cell_type": "code",
"collapsed": false,
"input": "%matplotlib inline\n\nby_year = lookup_menus_df.groupby(lookup_menus_df['date_year'])\nyear_series = by_year.size()\nyear_series.plot(figsize=(20,10))\n",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 32,
"text": "<matplotlib.axes.AxesSubplot at 0x10e5ff4d0>"
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\nt789ue22yZ0LAACA5tNhBFOqW4fR/LwbRgAAAMwWgRHU6MyZ51fSVnYYCYxoKl0AlMCcUwJzTgnM\nOVQjMIIarfWUNKXXAAAAzBKBEdRoZWC0Z8+eJG4Y0WydOYcmM+eUwJxTAnMO1fQMjI4cOZI3vvGN\nedWrXpVXv/rV+fjHP54k+ehHP5pt27blpptuyk033ZQvfOEL5/7OXXfdlZ07d+b666/Pgw8+ON7T\nw5Q5c6b7DSOBEQAAALOkZ2A0NzeXu+++O9/85jfzla98JZ/4xCfyrW99K61WKx/84Afz0EMP5aGH\nHspb3/rWJMnBgwfz2c9+NgcPHswDDzyQD3zgA1laWlqXfyMwDRYXL+wwUnpNk+kCoATmnBKYc0pg\nzqGanoHRNddckxtvvDFJsnnz5rzyla/M0aNHk6TrY9ruu+++3HbbbZmbm8v27duzY8eOHDhwYAzH\nhum0VoeRwAgAAIBZMnCH0aOPPpqHHnoor3/965Mkv/mbv5kbbrgh733ve3PixIkkybFjx7Jt27Zz\nf2fbtm3nAiYowcqVtJUdRkqvaSpdAJTAnFMCc04JzDlUM1Bg9Mwzz+Rnf/Zn87GPfSybN2/O+9//\n/jzyyCN5+OGHc+211+YXf/EX1/y7rVartsPCtFu5ktbhhhEAAACzZmO/L1hcXMw73/nOvOtd78o7\n3vGOJMnVV1997vPve9/78ra3vS1JsnXr1hw5cuTc5x577LFs3bq16/e94447sn379iTJ5Zdfnhtv\nvPFc4tvZLfXa61l7vbiYPPXU/nTWo/fs2ZPDh/fnsceSZPLn89rrul/fc889fn573fjXnY9Ny3m8\n9nocr/0897qE152PTct5vPa6jtf33HNPHn744XP5Sp1ay93KiP7W8vJy9u7dm6uuuip33333uY8/\n/vjjufbaa5Mkd999d7761a/m937v93Lw4MHcfvvtOXDgQI4ePZqbb745hw8fvuCWUavV6tqBBLPu\nt34r+drXkv/0n9r/Qd6zZ0/+4A+Sf//vkz/4g0mfDurXmXNoMnNOCcw5JTDnlKDOvKXnDaMvf/nL\n+fSnP53Xvva1uemmm5Ikv/7rv57PfOYzefjhh9NqtfLyl788v/Vbv5Uk2b17d2699dbs3r07Gzdu\nzL333msljaLoMKI0/ksXJTDnlMCcUwJzDtX0vGE0tjd1w4iGuuee5JFHko997PmPPfxwsndv8ud/\n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\ngAEjIiIiIiIiIiIqgAEjIiIiIiIiIiIqgAEjIiIiIiIiIiIqgAEjIiIiIiIiIiIqgAEjIiIiIiIi\nIiIqgAEjIiIiihqjR4/GuHHjAn5/3rx5+Omnn8I4IiIiIiJ3YsCIiIiIoobH4wn6/a+//ho//vhj\nmEZTtOzs7EgPgYiIiMgvBoyIiIjI1d588000btwYnTp1ws8//wwAmDhxIpKSkpCYmIj77rsPly9f\nxtq1azF//nyMHDkSrVu3RkZGBvbu3YuePXuibdu26Ny5c977Czt//jzq1auXF+A5d+4c6tWrh5yc\nnIDbmD9/Pjp06ICbb74Z3bp1w/HjxwFIFtTvf/97JCcnY/DgwWH4CREREREZx4ARERERudamTZvw\n+eefY9u2bVi4cCE2bNgAj8eDe++9F+np6di6dSuaNm2KSZMm4ZZbbkFqairGjh2LLVu2oG7dunj8\n8cfx4YcfYuPGjXj33Xfx1FNP+d1P+fLl0aVLFyxYsAAAMGvWLPTr1w8lSpQIuI1OnTph3bp12Lx5\nMx544AG88847edvbvXs3li9fjhkzZtj/QyIiIiIyoWSkB0BERERk1nfffYd7770XZcqUQZkyZZCa\nmgpN07Bjxw688sorOHv2LC5cuICUlJS892iaBgC4cOECfvjhB9x///1538vKygq4r8ceewzvvPMO\n7r77bkyZMgUTJ07EhQsXsHbtWr/bOHjwIPr374+jR48iKysL9erVAyBlc6mpqbjuuuuU/iyIiIiI\nVGLAiIiIiFzL4/HkBYB8Pfroo5g3bx5atGiBqVOnIi0trcB7ACA3NxcVK1bEli1bQtrXLbfcgn37\n9iEtLQ05OTlo1qwZzp07h0qVKvndxvDhwzFixAj06dMHq1atwujRo/O+V65cOWP/o0RERERhxpI0\nIiIicq3OnTtj7ty5uHLlCs6fP4/58+cDkJ5DsbGx8Hq9mD59el6QqHz58jh37hwAoEKFCqhbty6+\n/PJLAJJ5tH379qD7e/jhhzFo0CAMGTKkyG2cO3cONWrUAABMmTIlbxv+AlxERERETsOAEREREblW\n69at8cADD6BVq1bo1asXkpKS4PF48Prrr6N9+/ZITk5G06ZN814/YMAAvPvuu2jTpg0yMjIwY8YM\nTJo0CYmJiUhISMA333wTdH8PPvggTp8+jYEDB+Y9F2gbo0ePxv3334+2bduiatWqeUErj8dT5Gpu\nRERERJHm0Xibi4iIiCgkX375JebPn4+pU6dGeihEREREtmIPIyIiIqIQDB8+HEuWLMHChQsjPRQi\nIiIi2zFgREREROTjrbfewhdffFHguf79++PDDz+M0IiIiIiIwo8laUREREREREREVACbXhMRERER\nERERUQEMGBERERERERERUQEMGBERERERERERUQEMGBERERERERERUQEMGBERERERERERUQH/HzkN\n1ski9sXxAAAAAElFTkSuQmCC\n",
"text": "<matplotlib.figure.Figure at 0x10e54bfd0>"
}
],
"prompt_number": 32
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Of course, this graph does not look right. What's going on with that huge spike at the beginning of the 20th century? And why do the number of appearances decrease toward mid-century? \n\nThis skew is an artifact of the coverage of the underlying menu collection that NYPL holds. From the Library's own [collection guide](http://digitalgallery.nypl.org/nypldigital/explore/dgexplore.cfm?col_id=159): \n> Thousands of menus beginning with the oldest items in the collection from 1851. The collection is strongest for the period between 1890 and 1910.\n\nThis is why NYPL, on their own site, has normalized the plot of dish appearances by total number of menus held for a given year."
},
{
"cell_type": "code",
"collapsed": false,
"input": "# Extract years in the complete DataFrame for menus\nmenu_df['date_year'] = menu_df['date'].map(extract_year)\n\n# Group by year and calculate the number of menus held for each year\ntotal_menu_by_year = menu_df.groupby(menu_df['date_year'])\nmenu_total_series = total_menu_by_year.size()",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 33
},
{
"cell_type": "markdown",
"metadata": {},
"source": "With this information, we can create a normalized graph:"
},
{
"cell_type": "code",
"collapsed": false,
"input": "normed = [year_series[date_year]/menu_total_series[date_year].astype(float) for date_year in year_series.index.tolist()]\npd.Series(normed, index=year_series.index).plot(figsize=(20,10))",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 34,
"text": "<matplotlib.axes.AxesSubplot at 0x10e60a0d0>"
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\n8odWS141zLx50oUL1T2XLaqdSUS7GQC4q2xINDExodtvv109PT06fPiw9uzZoyNHjhR93Ec+8hHd\ndNNNyrv+VzZwGj3PcEG5fT4yQkiURqUqiVxuN6t1JlGxdjMqiSqHRC0t1YdE/tBqH8Orq59J5OrP\nPezE63MgnLIh0YEDB7RmzRp1dnYqm81qy5Yt2rdv35zHfe5zn9O73vUuLfbPegUAOKlwcLVESJQW\n5SqJeLMYXrFKImYSeSHR7N+X2ebNq756zR9a7WMuETOJAADhlQ2J+vv7tXLlyqnrjo4O9c86z7i/\nv1/79u3T+973PklSJpOJYJlAOtDzDBcEnUkkeSHRrP9toM74w35pN5vJ9Ewi2s2in0k0MjKzkoiQ\nqPqZRLSbwSa8PgfCKRsSBQl8PvjBD+qTn/ykMpmM8vk87WYA4DBmEqXP+Lg36Lepae7XXG43q0W5\ndjOXXyZFHRLNbjfzh1e7rNqZRPzcA4C7irwknNbe3q6+vr6p676+PnV0dMx4zI9+9CNt2bJFknT6\n9Gndd999ymazuvnmm+c839atW9XZ2SlJamtr04YNG6Z6RP2El2uuueaa6/q+9j9X7OvDw9Lzz/eq\nt9e7bm+Xfvzj6et6WD/XM6+/971eZbOSNPfrzc3Sww/36vnn62e9abju75eWLZv79WxW+u53e9Xa\nWl/rjeP6xhu7NTgoPfVUr557rvTjH364V7mclM93K5MJ9/1GRqRcbvp+c/XV3vO1tSX/35/U9ZNP\n9ur0aanYz7evd9b9fHBQWrOmPtbPNddcc8118eudO3fq0KFDU/mKSZl8mdKf8fFxrVu3Tvv379eK\nFSt0ww03aM+ePerq6ir6+Pe+971629vepne84x1zv9H/rzQCANjrk5/0/ub+k5/0rp97Tnrta6WC\nv29AnTl9Wlq3TjpzZu7XXvMaaccO788QwQwNeVVDFy5Iswuyf+mXpHvv9X6/XfPCC15l4dBQ5cfO\nm+fdR4oNUy/nu9+V/uIvpL//e+/6gx+UXvQi6fd+L/x6bbFzp/Tss97HoO64Q1q0yPsIAEgHk3lL\nQ7kvNjU1adeuXdq0aZOuueYavfvd71ZXV5d2796t3bt3G1kAYBM/4QVsVm6fzx5cvXy512IyPh79\nulCdUiebSW63m1V7P/eHVhfr2Hf5hLMgrWa+alvOGFw919hY+XazYvu8udndn3vYidfnQDhl280k\n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\nPyv/uJERaeFCr1rDFbmcdNttvbrnnm594APSHXcEa2dK0hNPeH+eTzxhrpKnGjfdJP3u70pveUvt\nz/WKV3jtdNdfX/5xq1dL998vrVlT+TnnzfOqier9z7NWjzwi/af/5A1YL6fc65amJu/nPps1vz4g\nTrw+hwtM5i1lK4mampq0a9cubdq0SRMTE9q2bZu6urq0e/duSdL27dv1zW9+U1/+8peVzWbV2tqq\nvXv3GlkYkEb8Dwhxmpz0WjE6O9M9k+iRR2pfE8Kj3ay0//7fpaef7tZjj0kveUnSqwnmuuukW2+V\nPvAB6RvfSG4dptvNgszDCtpuJk3PJbI9JKp1JpE03XJGSIS04/U5EE6FM02kzZs3a/OsyYzbt2+f\n+vc77rhDd9xxh/mVAQDK8oe1rliR7plEDK5ORtDB1f7pZxMTUmNjtGuqF889J/3Wb6UnIPJ9/OPe\n3J2gf7ZRGBiQli0z81ymB1dL0yHRihW1ra3emdgD/glnQQM4AIAdGpJeAGCTwt5nIGp+OLNsWbwh\n0ex9TkiUTkEriST3Tjg7fVo6frw36WWEdtll0sqV0rPPJvP9x8els2elJUvMPJ/pwdWSO8Orx8aC\nDa4u97rFxSpC2InX50A4hEQAkFIXLnjhzNVXe/+e1Jv4kRFCojQKU2ng2pvF06elq65KehXVWbNG\nevrpZL734KC0aJG5irMgIdHEhNcSFSQQkaYriWxnopLIbzcDALiFkAgwiJ5nxMmv4GlokJYu9d6g\nxaHYTKJq2xHa2rzqg6Gh2teFcMJUErW0uBcSbdrUnfQyqpJkSGRyHpEULCS6eNGroMpkgj3n1VdL\n587VvrZ6F7SSqNzrFr/dDEg7Xp8D4RASAUBKFbZ5xd1yVmodYWUyUnu71N9vdk2oLGwlkWvtZosW\nJb2K6rgWEo2MhAupqSQKzrUKQgCAh5AIMIieZ8QpqZDI5EwiiZazpISdSeTKm8XRUe+/9Uc/6k16\nKVVxLSTyK4mCciUkMjWTiHYz2IDX50A4hEQAkFLDw1Jrq/fvSVYS1TKTSCIkSkqYSgOX2s3OnPGq\niIK2L9UbF0OiMJVErgyuNnm6GQDALYREgEH0PCNOSVUSFZtJREiUPpxuVtypU15IlNb7+UteIv38\n58lUgCTVbkYl0VwmZhK5VEEIu6X1fg4khZAIAFKqnmYSVTu4WiIkSgqnmxWX5nlEkvdnumyZFxTF\n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\n",
"text": "<matplotlib.figure.Figure at 0x10e62e610>"
}
],
"prompt_number": 34
},
{
"cell_type": "markdown",
"metadata": {},
"source": "I hope this notebook demonstrates some ways to use the data analysis tools provided by Pandas in the service of curating data from *What's On the Menu?*"
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment