Skip to content

Instantly share code, notes, and snippets.

@vsingh58
Forked from kevindavenport/FB_quicklook.ipynb
Last active August 29, 2015 14:19
Show Gist options
  • Save vsingh58/696b35b895d3df582518 to your computer and use it in GitHub Desktop.
Save vsingh58/696b35b895d3df582518 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"metadata": {
"name": ""
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "heading",
"level": 2,
"metadata": {},
"source": [
"A quick look at Stackoverflow.com's data for the Facebook Kaggle competition.\n",
"http://kldavenport.com\n"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import numpy as np\n",
"import pandas as pd\n",
"import nltk\n",
"import matplotlib.pylab as pylab\n",
"pylab.rcParams['figure.figsize'] = 10, 6\n",
"pd.options.display.max_columns = 50\n",
"pd.options.display.max_rows = 100"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": "*"
},
{
"cell_type": "heading",
"level": 3,
"metadata": {},
"source": [
"Load a 10,000,000 subset of the 7GB train data to explore."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"data_path = \"FB/train.csv\""
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 127
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%%time\n",
"dfSample = pd.read_csv(data_path, nrows=100000000, encoding='utf-8')\n",
"dfSample.head()"
],
"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>Title</th>\n",
" <th>Body</th>\n",
" <th>Tags</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td> 1</td>\n",
" <td> How to check if an uploaded file is an image w...</td>\n",
" <td> &lt;p&gt;I'd like to check if an uploaded file is an...</td>\n",
" <td> php image-processing file-upload upload mime-t...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td> 2</td>\n",
" <td> How can I prevent firefox from closing when I ...</td>\n",
" <td> &lt;p&gt;In my favorite editor (vim), I regularly us...</td>\n",
" <td> firefox</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td> 3</td>\n",
" <td> R Error Invalid type (list) for variable</td>\n",
" <td> &lt;p&gt;I am import matlab file and construct a dat...</td>\n",
" <td> r matlab machine-learning</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td> 4</td>\n",
" <td> How do I replace special characters in a URL?</td>\n",
" <td> &lt;p&gt;This is probably very simple, but I simply ...</td>\n",
" <td> c# url encoding</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td> 5</td>\n",
" <td> How to modify whois contact details?</td>\n",
" <td> &lt;pre&gt;&lt;code&gt;function modify(.......)\\n{\\n $mco...</td>\n",
" <td> php api file-get-contents</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"metadata": {},
"output_type": "pyout",
"prompt_number": 128,
"text": [
" Id Title \\\n",
"0 1 How to check if an uploaded file is an image w... \n",
"1 2 How can I prevent firefox from closing when I ... \n",
"2 3 R Error Invalid type (list) for variable \n",
"3 4 How do I replace special characters in a URL? \n",
"4 5 How to modify whois contact details? \n",
"\n",
" Body \\\n",
"0 <p>I'd like to check if an uploaded file is an... \n",
"1 <p>In my favorite editor (vim), I regularly us... \n",
"2 <p>I am import matlab file and construct a dat... \n",
"3 <p>This is probably very simple, but I simply ... \n",
"4 <pre><code>function modify(.......)\\n{\\n $mco... \n",
"\n",
" Tags \n",
"0 php image-processing file-upload upload mime-t... \n",
"1 firefox \n",
"2 r matlab machine-learning \n",
"3 c# url encoding \n",
"4 php api file-get-contents "
]
}
],
"prompt_number": 128
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"dfSample.shape"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 129,
"text": [
"(6034195, 4)"
]
}
],
"prompt_number": 129
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"dfSample.info()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"<class 'pandas.core.frame.DataFrame'>\n",
"Int64Index: 6034195 entries, 0 to 6034194\n",
"Data columns (total 4 columns):\n",
"Id 6034195 non-null values\n",
"Title 6034195 non-null values\n",
"Body 6034195 non-null values\n",
"Tags 6034195 non-null values\n",
"dtypes: int64(1), object(3)"
]
}
],
"prompt_number": 130
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"dfSample.columns"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 131,
"text": [
"Index([u'Id', u'Title', u'Body', u'Tags'], dtype=object)"
]
}
],
"prompt_number": 131
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"#tag_count = dfSample.Tags.apply(lambda x:pd.value_counts(x.split(' '))).sum(axis=0) # unnecessarily verbose \n",
"tag_count = dfSample['Tags'].value_counts() # Tag column count as pd.series\n",
"tag_count.sort(ascending=False)\n",
"tag_count.shape # Indices are tag text i.e. 'android', 'c++' etc.\n",
"tag_count[:5]"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 132,
"text": [
"android 49783\n",
"php 30664\n",
"jquery 28079\n",
"javascript 24995\n",
"javascript jquery 24955\n",
"dtype: int64"
]
}
],
"prompt_number": 132
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"type(tag_count)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 133,
"text": [
"pandas.core.series.Series"
]
}
],
"prompt_number": 133
},
{
"cell_type": "heading",
"level": 3,
"metadata": {},
"source": [
"Create a dataframe in order to create a histogram with ggplot"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"tcdf = pd.DataFrame(tag_count, columns=['count'],index=None)\n",
"tcdf['tag'] = tag_count.index"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 134
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"keys = np.arange(0,len(tcdf))\n",
"tcdf = tcdf.set_index(keys, drop = True)\n",
"tcdf15 = tcdf[:15]\n",
"tcdf15.head(3)"
],
"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>count</th>\n",
" <th>tag</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td> 49783</td>\n",
" <td> android</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td> 30664</td>\n",
" <td> php</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td> 28079</td>\n",
" <td> jquery</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"metadata": {},
"output_type": "pyout",
"prompt_number": 135,
"text": [
" count tag\n",
"0 49783 android\n",
"1 30664 php\n",
"2 28079 jquery"
]
}
],
"prompt_number": 135
},
{
"cell_type": "heading",
"level": 4,
"metadata": {},
"source": [
"As of 2013-10-17 the yhat port of ggplot2 is missing the *..count..* and *..density..* functions so lets invoke the \"real\" ggplot from R below"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# from ggplot import *\n",
"# p = ggplot(aes(x = 'tag',y = '..count..'), data = tcdf15) # or __count___\n",
"# p + geom_bar(stat = \"identity\",position = 'stack') \n",
"\n",
"# +scale_y_continuous(limits=(0, 5))\n",
"# + ggtitle(\"Histogram of Tag Counts\") + labs(\"Tags\", \"Freq\") "
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 136
},
{
"cell_type": "heading",
"level": 3,
"metadata": {},
"source": [
"We can have the best of both worlds (Python and R) with one of IPython's \"magic\" extenstions called rmagic which utilizes rpy2"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%load_ext rmagic\n",
"#%reload_ext rmagic"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"The rmagic extension is already loaded. To reload it, use:\n",
" %reload_ext rmagic\n"
]
}
],
"prompt_number": 137
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%%R -i tcdf15 # list object to be transferred to python here\n",
"library(ggplot2)\n",
"df = data.frame(tcdf15)\n",
"df$order = 1:dim(df)[1]\n",
"plot = ggplot(df, aes(x = sort(tag), y = count)) + \n",
"geom_bar(stat = 'identity',alpha = .5, fill = 'dodgerblue') +\n",
"theme(axis.text.x = element_text(size= rel(1.5),angle=90, hjust=1)) \n",
"print(plot)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAeAAAAHgCAYAAAB91L6VAAAEJGlDQ1BJQ0MgUHJvZmlsZQAAOBGF\nVd9v21QUPolvUqQWPyBYR4eKxa9VU1u5GxqtxgZJk6XtShal6dgqJOQ6N4mpGwfb6baqT3uBNwb8\nAUDZAw9IPCENBmJ72fbAtElThyqqSUh76MQPISbtBVXhu3ZiJ1PEXPX6yznfOec7517bRD1fabWa\nGVWIlquunc8klZOnFpSeTYrSs9RLA9Sr6U4tkcvNEi7BFffO6+EdigjL7ZHu/k72I796i9zRiSJP\nwG4VHX0Z+AxRzNRrtksUvwf7+Gm3BtzzHPDTNgQCqwKXfZwSeNHHJz1OIT8JjtAq6xWtCLwGPLzY\nZi+3YV8DGMiT4VVuG7oiZpGzrZJhcs/hL49xtzH/Dy6bdfTsXYNY+5yluWO4D4neK/ZUvok/17X0\nHPBLsF+vuUlhfwX4j/rSfAJ4H1H0qZJ9dN7nR19frRTeBt4Fe9FwpwtN+2p1MXscGLHR9SXrmMgj\nONd1ZxKzpBeA71b4tNhj6JGoyFNp4GHgwUp9qplfmnFW5oTdy7NamcwCI49kv6fN5IAHgD+0rbyo\nBc3SOjczohbyS1drbq6pQdqumllRC/0ymTtej8gpbbuVwpQfyw66dqEZyxZKxtHpJn+tZnpnEdrY\nBbueF9qQn93S7HQGGHnYP7w6L+YGHNtd1FJitqPAR+hERCNOFi1i1alKO6RQnjKUxL1GNjwlMsiE\nhcPLYTEiT9ISbN15OY/jx4SMshe9LaJRpTvHr3C/ybFYP1PZAfwfYrPsMBtnE6SwN9ib7AhLwTrB\nDgUKcm06FSrTfSj187xPdVQWOk5Q8vxAfSiIUc7Z7xr6zY/+hpqwSyv0I0/QMTRb7RMgBxNodTfS\nPqdraz/sDjzKBrv4zu2+a2t0/HHzjd2Lbcc2sG7GtsL42K+xLfxtUgI7YHqKlqHK8HbCCXgjHT1c\nAdMlDetv4FnQ2lLasaOl6vmB0CMmwT/IPszSueHQqv6i/qluqF+oF9TfO2qEGTumJH0qfSv9KH0n\nfS/9TIp0Wboi/SRdlb6RLgU5u++9nyXYe69fYRPdil1o1WufNSdTTsp75BfllPy8/LI8G7AUuV8e\nk6fkvfDsCfbNDP0dvRh0CrNqTbV7LfEEGDQPJQadBtfGVMWEq3QWWdufk6ZSNsjG2PQjp3ZcnOWW\ning6noonSInvi0/Ex+IzAreevPhe+CawpgP1/pMTMDo64G0sTCXIM+KdOnFWRfQKdJvQzV1+Bt8O\nokmrdtY2yhVX2a+qrykJfMq4Ml3VR4cVzTQVz+UoNne4vcKLoyS+gyKO6EHe+75Fdt0Mbe5bRIf/\nwjvrVmhbqBN97RD1vxrahvBOfOYzoosH9bq94uejSOQGkVM6sN/7HelL4t10t9F4gPdVzydEOx83\nGv+uNxo7XyL/FtFl8z9ZAHF4bBsrEwAAQABJREFUeAHtnQn8VkW9/4d9XxRUVhMUTTIgQwuNi2mK\nuREVQdoNTRQLb1ld26ybVl7LbLNbQSvZoqF5SdoQFTSta2pppODGpmgoIIvsy/N/3sN/fpzfw7Oc\ndZ7tM6/X7/c8zzln5nvmPXPmO/Od78xpk8sHoyACIiACIiACIuCVQFuv0iRMBERABERABETAEpAC\nVkUQAREQAREQgSoQkAKuAnSJFAEREAEREAEpYNUBERABERABEagCASngKkCXSBEQAREQARGQAlYd\nEAEREAEREIEqEJACrgJ0iRQBERABERABKWDVAREQAREQARGoAgEp4CpAl0gREAEREAERkAJWHRAB\nERABERCBKhCQAq4CdIkUAREQAREQASlg1QEREAEREAERqAIBKeAqQJdIERABERABEWjfDAjWrl0b\nO5vt27c3vDBqz549sdMIG7FDhw5Wzt69e8NGiX0dsnbv3m3zFjuRkBE7duxodu7cGfLqZJd16tTJ\n7NixI1kiIWP7ylebNm0M9XDXrl0h7yz+ZW3btjXt2rXzIgs55I16mHVAFsHHc0xZ8Qz7eo7Jkw9Z\n1HfqoI8X6Pl6tqgTSduMzp07m+7du5NU5NAUCvjVV1+NDMZF6NOnj610SdJwaVX6POyww8zmzZvN\n1q1bK12a+PyAAQPMunXrvCirwYMHm02bNmXe0NKY9+3b1+YrMaAKCdDIHnTQQWb9+vUVrkx+mgai\nR48e5pVXXkmeWIUUunXrZmhQfMjq2bOn7Vhs2LChwl0lP01ZoTh8PMfUQTqBPmT169fPbNy40Wzb\nti05pAopDBw40ObJR2f68MMPN6tXr868w0SHkzaetjBJiKuAZYJOQl1xRUAEREAERCAmASngmOAU\nTQREQAREQASSEJACTkJPcUVABERABEQgJgEp4JjgFE0EREAEREAEkhCQAk5CT3FFQAREQAREICYB\nKeCY4BRNBERABERABJIQkAJOQk9xRUAEREAERCAmASngmOAUTQREQAREQASSEJACTkJPcUVABERA\nBEQgJoFMd8JiV6fvf//7Lbc2fvx4c9xxx5klS5aYRYsW2Z2RJk2aZNjNhe0i586da7Zs2WLGjRtn\nRo0aZeMtXLjQLF682LBrzpQpU+wuPcXitwjRFxEQAREQARGoAwKZjoCff/55M2TIEPPhD3/Y/g0f\nPtxs377dzJs3z0ydOtVMnDjR3HLLLRbTnDlzDAp62rRpZv78+XY7xuXLl5tly5aZGTNm2HQWLFhQ\nMn4dsNYtioAIiIAIiEALgUxHwChg9sxltPu6173OsP/wmjVrDHsDd+3a1f6xhymbsbNXMMcJQ4cO\nNStXrrR7gY4cOdJuDj969Ggzc+ZMM2LEiKLxkUN44YUXzKpVq+x3/rGHLnssxw28tIA9huPu9RlF\nLhvGsw8v+5NmHZDRpUsXQ/6yDvCjvH1sGE9efJQV/HzVC+o28nzki03wkdeIstgL2ke+3DPl46UF\ntBk8x+5lE1k+y9RBnmPqSNbBtRlZM0QOIUm9gEvckKkCZtNuMojivfnmm815551nR7YUogtUHszP\nToFynPOYotmknbgErnPHCuNzvFevXva6l156yZqs7Y/8P5TvEUcc4X5G/qRikwdXUJETiBCBgqRy\n+3qY2OTfNRYRbjPypbCjY5H1w+RujLqSdXB1wocs6gV/PmRR93zJch0LH/lCFvXPhyz3/DZam0F+\nfLUZPL+UVT20GUneUpapAj777LNb2kFAPvzww+b4449v9QYebp43lQTfsMF3eiQUgHu1HNcxmqUh\nd8dInOO8wcUF5o7d/LE7tmLFCvfVfv744d6tfpf70aXLvleL7dgR/lVwHxgd7+0uvt+GRAcnyLIc\nhyTnsGzw1qCsXztHA0FdePnll5Pcbqi4NOj9+/f3IotGjze2+MgX/HwxxK+DDmDSN9GEKTD3NiQf\nb15yb0PCBybr4PttSLwlK9hWZ5U/3oZEvcj69ZF0NhnQJXm2Eo2eswJIurfffrs1JfMd0zOjWRot\nXjOFQsb8zCcNDCM/RrL8xoRMxRo0aJBxypP54FLxg6NnZCmIgAiIgAiIQK0TyHQEfMIJJ5g77rjD\nmpdxvrrkkktsb8PN59JDnDBhgmXE5+zZs+0oCWet3r17W8/npUuXmlmzZtk54unTp9tjxeLXOmjd\nnwiIgAiIgAgECWSqgDE94sGM8sV07MLYsWPNmDFj7FwTJgDCsGHD7B8mZTcvybnJkydbk0dw4r9Y\nfJe2PkVABERABESgHghkqoAdgKDydcdKmY2d8nXX8RlUvu54qfjuvD5FQAREQAREoJYJxPefruVc\n6d5EQAREQAREoMYJSAHXeAHp9kRABERABBqTgBRwY5arciUCIiACIlDjBKSAa7yAdHsiIAIiIAKN\nSUAKuDHLVbkSAREQARGocQJSwDVeQLo9ERABERCBxiQgBdyY5apciYAIiIAI1DgBKeAaLyDdngiI\ngAiIQGMSkAJuzHJVrkRABERABGqcgBRwjReQbk8EREAERKAxCUgBN2a5KlciIAIiIAI1TkAKuMYL\nSLcnAiIgAiLQmASkgBuzXJUrERABERCBGicgBVzjBaTbEwEREAERaEwCUsCNWa7KlQiIgAiIQI0T\nkAKu8QLS7YmACIiACDQmASngxixX5UoEREAERKDGCUgB13gB6fZEQAREQAQak4AUcGOWq3IlAiIg\nAiJQ4wSkgGu8gHR7IiACIiACjUlACrgxy1W5EgEREAERqHECUsA1XkC6PREQAREQgcYkIAXcmOWq\nXImACIiACNQ4ASngGi8g3Z4IiIAIiEBjEmjfmNnan6tcLmc6d+68/0D+W/v24bPdtu2+PkqUOIXy\nWgkv8wNZHTt2NHv37i1zVTqn2rRpY2XxmXVARqdOnSJxT3JPcflHkdmuXTtDvnzI6tChg1dZ5M1H\nvnimfMoq1hZEKfOw15In8uaDoWszyFvWwbUZrk3MUp5rM7JuC5FD8FFWxXiF10TFYtfBMQBv3769\n1Z3u3t1aIbc6WfCDxo9KsHv37oIzpX8Wyit9ZeszyNm5c+cB99v6qnR+8cAia8eOHekkWCYVZCEn\nCsMyyZU85R6muPxLJlzkBA0s+fIhCzm+ZKE86AT6yBdyij2fRXAnPtSlSxdvDLt3727rug+G1Wgz\naDeyDq7N2LNnT6aiXGciSVlR3nGDTNBxySmeCIiACIiACCQgIAWcAJ6iioAIiIAIiEBcAlLAcckp\nngiIgAiIgAgkICAFnACeooqACIiACIhAXAJSwHHJKZ4IiIAIiIAIJCAgBZwAnqKKgAiIgAiIQFwC\nUsBxySmeCIiACIiACCQgIAWcAJ6iioAIiIAIiEBcAlLAcckpngiIgAiIgAgkICAFnACeooqACIiA\nCIhAXAJSwHHJKZ4IiIAIiIAIJCAgBZwAnqKKgAiIgAiIQFwCUsBxySmeCIiACIiACCQgIAWcAJ6i\nioAIiIAIiEBcAlLAcckpngiIgAiIgAgkICAFnACeooqACIiACIhAXAJSwHHJKZ4IiIAIiIAIJCAg\nBZwAnqKKgAiIgAiIQFwCUsBxySmeCIiACIiACCQgIAWcAJ6iioAIiIAIiEBcAlLAcckpngiIgAiI\ngAgkICAFnACeooqACIiACIhAXAJSwHHJKZ4IiIAIiIAIJCAgBZwAnqKKgAiIgAiIQFwCUsBxySme\nCIiACIiACCQgIAWcAJ6iioAIiIAIiEBcAu3jRowS78knnzSPPPKIOf/88220JUuWmEWLFpndu3eb\nSZMmmX79+pm1a9eauXPnmi1btphx48aZUaNG2WsXLlxoFi9ebHr27GmmTJliOnfubIrFj3I/ulYE\nREAEREAEqk0g8xHw1q1bzW9+8xuzefNmm9ft27ebefPmmalTp5qJEyeaW265xR6fM2eOGT9+vJk2\nbZqZP3++Id7y5cvNsmXLzIwZM8yQIUPMggULTKn41QYp+SIgAiIgAiIQhUDmI+DbbrvNnHHGGebB\nBx+097VmzRozePBg07VrV/u3bds2OxLetGmTPc5FQ4cONStXrjSrV682I0eONO3atTOjR482M2fO\nNCNGjCgav337fVm5//77DaNmF5B1wQUXuJ/2s8eT4fsdbdu2NblcznTs2LFVGuV+DBzYrdzpkufI\nZ4cOHcxBBx1U8pq0TsDrkEMOsXlLK81S6cDwsMMOK3U69eMDBw5MPc1iCZIvH7LatGljnwFfsnzl\nCznkDatW1gFZhG7d4j2bUe6P57hLly7WahclXpxrkdWnTx8vzzFtxqGHHupFFvUCy6ivkOTZQofF\nDZkq4L/+9a+2gRowYEDL/W3YsMEqXneAior52SlQjqOcMUVzrYvLde4Y511wx3v16mUPvf71rzeD\nBg1yp02nTp3Myy+/3PKbL1u39mj1u9wPGoc9e/aYXbt2lbus1bmXX9432m91MMSPgw8+2I78GeVn\nHVC+GzduNDt37sxalH2Q1q9fbzlmLYz6UljeWcik4YOhD1l0/qjfPmRR33m+KK+sA8qQDifPedaB\nKSw60s4Sl6U8OtA7duywz3KWckgb5fvqq69aeVnLQvm+8sorkdrCuPfUv39/s27dOrN37964SYSK\n5xR9kmcLHRM3ZKaAMSH/9re/Naeddpp56KGHLEzmgnnAqZwuoNiosEFFwPfu3bvbXqS7lut69OhR\nNH6wV0tD5ZSxk7FixQr31X6iUMMGKgAPbpQ4wbyElcN1yGFePG78qLJg6lMWecsy8DARfOSJDiPl\n5UMW+fIlC4VInfeRL9oCRqY+ZPH8+mKILP585KvR24wo7W6ctsVZRpKUVRTraOE9hrfFFsas8JsR\nwnnnnWdNPjxo/OZG6dlgWqbiMHTnkx4E5xjh8nvVqlV21MRI1ilP5oMZ3RSLHxw9V7gtnRYBERAB\nERCBmiCQ2QgYpcq8LeGll14yzzzzjHWk4rebz8UcNGHCBA7Zz9mzZ9sR4PDhw03v3r3tHMrSpUvN\nrFmzDHPE06dPt8eKxbeJ6J8IiIAIiIAI1AmBzBRwMP/MHaA8XRg7dqwZM2aMNT85E8CwYcMMf5hF\nMYMRODd58mRrygkO84vFd2nrUwREQAREQATqgYAXBVwMRCmzsVO+wThB5euOl4rvzutTBERABERA\nBGqZQGZzwLWcad2bCIiACIiACFSbgBRwtUtA8kVABERABJqSgBRwUxa7Mi0CIiACIlBtAlLA1S4B\nyRcBERABEWhKAlLATVnsyrQIiIAIiEC1CUgBV7sEJF8EREAERKApCUgBN2WxK9MiIAIiIALVJiAF\nXO0SkHwREAEREIGmJCAF3JTFrkyLgAiIgAhUm4AUcLVLQPJFQAREQASakoAUcFMWuzItAiIgAiJQ\nbQJSwNUuAckXAREQARFoSgJSwE1Z7Mq0CIiACIhAtQlIAVe7BCRfBERABESgKQlIATdlsSvTIiAC\nIiAC1SYgBVztEpB8ERABERCBpiQgBdyUxa5Mi4AIiIAIVJuAFHC1S0DyRUAEREAEmpKAFHBTFrsy\nLQIiIAIiUG0CUsDVLgHJFwEREAERaEoCUsBNWezKtAiIgAiIQLUJSAFXuwQkXwREQAREoCkJSAE3\nZbEr0yIgAiIgAtUm0L7aN5C1/FwuZzp06NBKTNu24fsdbdq0MfxFiVMor5XwMj+Q0759+wPut0yU\n2KecrL1798ZOI2xEJ4tPHyEu/yj31q5dO3u5D1nUCdj5kEW+qOuNJos8FWsLopR52GuRBUcfDN2z\n5VMWHLMOLl9R2t049+TaJB/8it1fwytgMl2oZKJWIK6PEqdQXjHwpY4RN0n8UukWO95ostzD5IOf\nT1nkh/rnI1+urvuQ5TNf1H+fDMmbD4bkS7KgEC/4fI6L3WHDK2AA79mzp1XeoyhTd637bJVQiR+F\n8kpcdsBh10DEjX9AgmUONKIs9zD54OdTlmvIfeQLWdQNH7KQ40tWo+arEZ9jmi1f+XIjbB/1vVhz\nHN4WWyy2jomACIiACIiACMQiIAUcC5siiYAIiIAIiEAyAlLAyfgptgiIgAiIgAjEIiAFHAubIomA\nCIiACIhAMgJSwMn4KbYIiIAIiIAIxCIgBRwLmyKJgAiIgAiIQDICUsDJ+Cm2CIiACIiACMQiIAUc\nC5siiYAIiIAIiEAyAlLAyfgptgiIgAiIgAjEIiAFHAubIomACIiACIhAMgJSwMn4KbYIiIAIiIAI\nxCIgBRwLmyKJgAiIgAiIQDICUsDJ+Cm2CIiACIiACMQiIAUcC5siiYAIiIAIiEAyAlLAyfgptgiI\ngAiIgAjEIiAFHAubIomACIiACIhAMgJSwMn4KbYIiIAIiIAIxCIgBRwLmyKJgAiIgAiIQDICUsDJ\n+Cm2CIiACIiACMQiIAUcC5siiYAIiIAIiEAyAlLAyfgptgiIgAiIgAjEIiAFHAubIomACIiACIhA\nMgJSwMn4KbYIiIAIiIAIxCIgBRwLmyKJgAiIgAiIQDIC7ZNFV+xKBH78cO9Kl7Sc79atvdm5s5vZ\ntatjy7FKXz4wekOlS3ReBERABESgBglkqoC3bNli5s6dazZs2GCGDRtmzjjjDItgyZIlZtGiRWb3\n7t1m0qRJpl+/fmbt2rX2WuKMGzfOjBo1yl67cOFCs3jxYtOzZ08zZcoU07lzZ1Msfg2y1S2JgAiI\ngAiIQEkCmZqgUZ7Dhw83M2bMMM8884xZtWqV2b59u5k3b56ZOnWqmThxornlllvszc2ZM8eMHz/e\nTJs2zcyfP99s3brVLF++3CxbtszGHzJkiFmwYEHJ+CVzqBMiIAIiIAIiUIMEMh0Bn3POOTbLr7zy\nitm4caPp1q2bWbNmjRk8eLDp2rWr/du2bZsdCW/atMkeJ8LQoUPNypUrzerVq83IkSNNu3btzOjR\no83MmTPNiBEjisZv335fVl566SXz4osvtqBGJqPnYOjQoUPwZ9nvbdvu66NEiUPeXIgSr02bNjav\nLm6Yz6CsMNe7a8gX1gTYZh3IF7L27t2btSibflwmUW4ObuTLhyzqEOXlQ1bHjh1tnfAhi3zx3PqS\nlcvlvMgiT9R1H/miXnTq1MnWxSj1N8617jl2bW2cNMLGQVaXLl0ybzOQQ0hSVk5HhM1b8LpMFTCC\nUKy/+MUvTI8ePWwj/Pzzz7fKLJAxPwcLFRiYojFdDxgwwN4v17ljQVjueK9evex1KO4///nP9jv/\niO86Au5gx47hs01DC+AokHv02G9YiCILGTRKUZRiUJbLX5hPZMHRh1Kkknfv3t3QAPoI1LWsA3ni\nz4csV/98yKLu8edDFs+8L4aufYnyHMetQ8hyz3LcNMLGo6xoA1HCWQfXZvh6jhk8+QpJ6vvOnTtj\n32Z4TRRTBKPPyy+/3M75Mu971FFHmR07drSktmvXLnPQQQflnY/2Z4LvNNhULHct1wGJkZQ7RiIc\nDxbUCSecYPgLhhUrVgR/5hV5eMco7gElFZTZKrEiP9as2e8YFUUW+SDv5ClsCMoKG4fr6JisX78+\nUr6ipB+8FosHnSzm/LMMNOavec1rrJUlSzmkTSPbv39/L7JoXPv06eNFFnWQPyxJWQfaBjqc69at\ny1qUbWNQHHTqsw59+/a1z9XmzZuzFmX9Z7AuYknMOgwcONC2GcG2OiuZhx9+uG0z9uzZk5UImy6d\nCtonLLNxA7oqbtg/VIubQpl4t956q5335RKUGDdKo4VpmYeBSsMnDQymL0a4/GauGMesQYMGGac8\nmQ9GaRSL73q3ZW5Fp0RABERABESgpghkOgIeM2aMueOOO+yoldHJe9/7XvvdzefSQ5wwYYIFwufs\n2bPtKAnHrd69e9u526VLl5pZs2ZZU/b06dPtsWLxa4qqbkYEREAEREAEKhDIVAEzgv3Qhz5kzaqM\ncF0YO3asQTkz/OePwDIl/jC/YpYicG7y5Mmh4tsI+icCIiACIiACdUIgUwXsGASVrztWymzslK+7\njs8o8YPx9F0EREAEREAEapVApnPAtZpp3ZcIiIAIiIAIVJuAFHC1S0DyRUAEREAEmpKAFHBTFrsy\nLQIiIAIiUG0CUsDVLgHJFwEREAERaEoCUsBNWezKtAiIgAiIQLUJSAFXuwQkXwREQAREoCkJeFmG\n1JRkq5DpKO8e7tGjXf6NU93Nnj1dQt+p3j0cGpUuFAEREIGKBDQCrohIF4iACIiACIhA+gSkgNNn\nqhRFQAREQAREoCIBKeCKiHSBCIiACIiACKRPIJYCLvb6MF5fVux4+resFEVABERABESg/glEUsDb\nt283/J1yyin20/3eunWr+fCHP2zmzZtX/0SUAxEQAREQARHwQCCSAj777LMNL6j/5z//aT/5zh/v\n+X3ggQfMSSed5OGWJUIEREAEREAE6p9AJAV811132dcF8l5fXhvo/nbv3m2ee+45c/TRR9c/EeVA\nBERABERABDwQiLQOuE2bNobXCP7yl7/0cGsSIQIiIAIiIAKNSyDSCNhhuP/++81b3/pWc+yxx5pj\njjmm5e+Pf/yju0SfIiACIiACIiACZQhEGgG7dC688EJz8cUXW2csRsQuHHXUUe6rPkVABERABERA\nBMoQ2K89y1wUPJXL5cymTZvMpz71KYNJWkEEREAEREAERCA6gcgmaJTu+PHjzY9//GOzc+fO6BIV\nQwREQAREQAREwERWwDDbvHmzmTZtmunTp4957Wtf2/KnOWDVKBEQAREQAREIRyCyCZpkr7nmGnPV\nVVcdIEFzwAcg0QEREAEREAERKEoglgIeOXJk0cR0UAREQAREQAREIByBWAr4zDPPNP/6178OkPDV\nr37VnH766Qcc1wEREAEREAEREIHWBGIpYEzQzgGLT7amnDNnjhk9enTr1PVLBERABERABESgKIFY\nCvhNb3pTq8ROO+008/zzz5u7777bvPvd7251rto/WDbVuXPnVrcRXLvc6kSRH23b7vNTixInKC9K\nPDzM27VrZ7jnsCGuLNJHVpSlZEFZYe+P65DRqVMnu4talHhxr417n1HkOXY+ZHXo0MEy9CWLvPmQ\nxbPhU1axtiBKmYe9ljyRNx8MaZ86duwYqc0Im4/C63iOkeXaxMLzaf52bcbevXvTTPaAtFz756Os\nDhCePxBLARcmRMVeuXKl9YYuPFft3wDmrU3BsHt3a4UcPFf4ncaPSsB+12FDUF4UWXDcs2ePF1nk\nBVn8hQ0uXz9+uHfYKPa6nj2NefXVTpZj2IgfGL3BXhpVVu/8rW3YEL58EeJkhb03rqOBpbwckyhx\no16LHF+yUB40sj7yhZxiz2dUPmGu56UxvhjychraCx8MaZuwQvqQBT9kOetnGO5xr0HWjh07IrVP\ncWS5zkQSfpR33BBLATPPu2bNGisTULwHGEX1ne98J+59KJ4IiIAIiIAINBWBWAr4uuuuM9u2bbOO\nWPT0hg0bZkaMGGF7zk1FT5kVAREQAREQgZgEYingXr162b2gH3/8cdOtWzdrbvn6179upk+fHvM2\nFE0EREAEREAEmotArJ2wLr30UnPuuedaM/T69evNnXfeaTfneOKJJ5qLnnIrAiIgAiIgAjEJxBoB\no2jnz5/fYnI++eSTzUUXXWT+9Kc/meHDh8e8FUUTAREQAREQgeYhEGsEfNxxx5lHH320FaX77rvP\n9O3bt9Ux/RABERABERABEShOINYI+IMf/KDd8eqUU04xhx9+uB0N986v/zjvvPOKS9FREagDAlGW\nPLF8oXv3NvlXc4ZfkhVnuVMdYNMtioAIxCQQawTMZhtsunHCCSdYMzTvBr7//vvtUqSY96FoIiAC\nIiACItBUBGKNgDdt2mRuv/1288UvftHuZIP3M2bpE088sangKbMiIAIiIAIiEJdArBEwXtAbN25s\n2dno1FNPNZMnTzZ4RCuIgAiIgAiIgAhUJhBrBPzggw+aZcuWtewjjPLFM/qOO+4wF154YWWpukIE\nREAEREAEmpxALAXM3pcPPfRQK5Pzvffea/Se4CavTcp+aAJRHL7Yn7lr13Zm82Y5fIUGrAtFoA4I\nxFLAX/rSl8zb3vY2c/zxx5vBgwebRYsWmWOPPVZe0HVQ4LpFERABERCB2iAQSwFPmDDBPPzww3bj\njS1btlhnrCOOOKI2cqS7EAEREAEREIE6IBBLAZOvo48+2v7VQR51iyIgAiIgAiJQcwRieUHXXC50\nQyIgAiIgAiJQZwSkgOuswHS7IiACIiACjUFACrgxylG5EAEREAERqDMCUsB1VmC6XREQAREQgcYg\nIAXcGOWoXIiACIiACNQZASngOisw3a4IiIAIiEBjEJACboxyVC5EQAREQATqjIAUcJ0VmG5XBERA\nBESgMQhIATdGOSoXIiACIiACdUZACrjOCky3KwIiIAIi0BgEpIAboxyVCxEQAREQgTojEHsv6DD5\n3Lx5s/nd735nNmzYYAYMGGDOOuss0759e7NkyRL7BqXdu3ebSZMmmX79+pm1a9eauXPnGl7uMG7c\nODNq1CgrYuHChWbx4sWmZ8+eZsqUKaZz585F44e5H10jAiIgAiIgArVCINMR8D333GOGDRtmLrvs\nMpvfv//972b79u1m3rx5ZurUqWbixInmlltusefmzJljxo8fb6ZNm2bmz59vtm7dapYvX26WLVtm\nZsyYYYYMGWIWLFhQMn6tANV9iIAIiIAIiEAYApmOgE855RTTvXt3ex8dOnSwI+E1a9bYdwh37do1\n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\n/PmStY/F/ue5UnklyRdpB9uZLGWhPHy1GbQXPtoM6oXPNoO2PUpwdeNbC8O376Sff7TM3r2HRhFl\nPvLWPS3XM4iMGzJVwMVuioYY07QLu3btsiPknTt3ukOG7927dzcUgLuW63r06GHngN0xInC8W7du\nLXFPOukkw18wrFixIvjTbN7cu9Xvcj+4h71797bcR7lr3bkXXtjgvkaSRT7IO3kKG+LKgiVm/j17\n9lekSjKdrCj8SJP5ezpPcAwb4srq3bt3nvnmsGLsdXFkoRCpo1FkOTkIjcKQxhyF6EMWSoPGnPIK\nG+Lmi8YcjlEasLiyXAeQKbCwIa4sygr/lmCbVklmXFnUQfKEvLAhriyfbQYDqldffTXSCNjlK8qz\nRaeC9inKswVnJ4vvlEHckOkccLGb6t+/vzUtY1rgweOTB9E99PxetWqVdcwaNGiQccqT+WBGw8Xi\nR+nVFrsnHRMBERABERAB3wS8j4DpbTAvzHwuvY4JEybYPPM5e/Zs25MbPny4YSTDtZiUZ82ald8X\ndJOZPn26PVYsvm9wkicCIiACIiACSQh4UcDnnntuq3scO3asGTNmjDU/YYIiDBs2zP5hfnVzJ5xj\n/hZTTnCOo1j8VgL0QwREQAREQARqnIAXBVyMQSmzsVO+wThB5euOl4rvzutTBERABERABGqZgPc5\n4FqGoXsTAREQAREQAV8EpIB9kZYcERABERABEQgQkAIOwNBXERABERABEfBFQArYF2nJEQEREAER\nEIEAASngAAx9FQEREAEREAFfBKSAfZGWHBEQAREQAREIEJACDsDQVxEQAREQARHwRUAK2BdpyREB\nERABERCBAAEp4AAMfRUBERABERABXwSkgH2RlhwREAEREAERCBCQAg7A0FcREAEREAER8EVACtgX\nackRAREQAREQgQABKeAADH0VAREQAREQAV8EpIB9kZYcERABERABEQgQkAIOwNBXERABERABEfBF\nQArYF2nJEQEREAEREIEAASngAAx9FQEREAEREAFfBKSAfZGWHBEQAREQAREIEJACDsDQVxEQAREQ\nARHwRUAK2BdpyREBERABERCBAAEp4AAMfRUBERABERABXwSkgH2RlhwREAEREAERCBCQAg7A0FcR\nEAEREAER8EVACtgXackRAREQAREQgQCB9oHvDfk1l8uZzp07t8pb+/bhs9227b4+SpQ4QXlR4rVp\n08a0a9fOcM9hQ1xZpI8sZIYNTlaUPJG2y5djGUZeXFmkHfX+4sgiT/xFkeXkRL1Hx82HLFcnfMgi\nX/z5khWVe9zyol74ypd7tshb2JAkX65+RJUVpYxd2sSJ0xbGleXkhvkMMgxzfalrwmuiUinU+HEq\n6Pbt21vd5e7drRVyq5MFPzp06GD27t1rdu/eXXCm9M+gvCiyqGx79uzxIou7RxZ/YYPLV5Q8kbbL\nFxzDhriySD9KWXF9HFk0sOQriiwnZ989hq+DNHr74mRfB12D3mj5co2yj3x17NixIdsM9xz7aDNc\nfUdm2OCeryjtE/XdyQorh+ucLL53796dj1hBJuhY2BRJBERABERABJIRkAJOxk+xRUAEREAERCAW\nASngWNgUSQREQAREQASSEZACTsZPsUVABERABEQgFgEp4FjYFEkEREAEREAEkhGQAk7GT7FFQARE\nQAREIBYBKeBY2BRJBERABERABJIRkAJOxk+xRUAEREAERCAWASngWNgUSQREQAREQASSEZACTsZP\nsUVABERABEQgFgEp4FjYFEkEREAEREAEkhGQAk7GT7FFQAREQAREIBYBKeBY2BRJBERABERABJIR\nkAJOxk+xRUAEREAERCAWASngWNgUSQREQAREQASSEZACTsZPsUVABERABEQgFgEp4FjYFEkEREAE\nREAEkhGQAk7GT7FFQAREQAREIBYBKeBY2BRJBERABERABJIRkAJOxk+xRUAEREAERCAWASngWNgU\nSQREQAREQASSEZACTsZPsUVABERABEQgFgEp4FjYFEkEREAEREAEkhGQAk7GT7FFQAREQAREIBYB\nKeBY2BRJBERABERABJIRkAJOxk+xRUAEREAERCAWgfaxYlU50pIlS8yiRYvM7t27zaRJk0y/fv2q\nfEcSLwIiIAIiIALRCNTdCHj79u1m3rx5ZurUqWbixInmlltuiZZjXS0CIiACIiACNUCg7kbAa9as\nMYMHDzZdu3a1f9u2bbMj4fbt92XlkUceMQ8++GALWkbHZ555ZstvvnTr1qHV73I/2rVrZ3K5nHHp\nl7vWnTv00I7ua2RZnTp1Mh077o/fklCJL3FltW3b1nTp0sXmrUTSBxx2sqLwI5E2bdpYWQckWOZA\nXFkk2a1btzIpH3gqrizyFUWWk7PvHsPXQeRQXo0mizy5vB1YKsWPxGWILALPc9gQVxYy+OvQIXwZ\n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\nIB22fzzuuOOs4p09e7YdfXPurLPOMvx+7rnnzL333msdtzjuAmmStoIIiEBrAlLArXnolwjUDYEv\nfvGLhmVEmJ/5w9uZtwWx7Ic53SFDhlhzMaNPjhULY8eOtR7MpIWSXLp0acvIlt9PPPGEGTVqlDn/\n/PPtuuCRI0eavIOXyTtd2ZFw3gHMekkfffTR1jP6Yx/7mFX2HTt2bBFHGsRTEAERaE1AW1G25qFf\nIlB3BF555RW7FAmTdDBs2rTJOllV2mOZlyDgbIVpeuLEieaiiy4y5513nk2K5UtszuHSwMR90EEH\ntXol4N13321N3Ch8wrvf/W5z6qmnmg996EN2dP3GN77RbsbBawcVREAE9hOQAt7PQt9EoOkJPPvs\ns9aj+a677grNIr+kybD2N780yRA/v5zJ3H///dah67rrrjN9+vSxm3uETlAXikCTEJAJukkKWtkU\ngTAEjjzySPOBD3zAMHoOG/Jrh+0yp927d1uPbDYEcd7UKN+LL744bFK6TgSaioBGwE1V3MqsCIiA\nCIhArRDQCLhWSkL3IQIiIAIi0FQEpICbqriVWREQAREQgVohIAVcKyWh+xABERABEWgqAlLATVXc\nyqwIiIAIiECtEJACrpWS0H2IgAiIgAg0FQEp4KYqbmVWBERABESgVgj8P8euT3fsTZwFAAAAAElF\nTkSuQmCC\n"
}
],
"prompt_number": 138
},
{
"cell_type": "heading",
"level": 3,
"metadata": {},
"source": [
"Using Pandas' abstracted matplotlib syntax, we can create a simple plot without dredging through matplotlib's verbose syntax."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%%time\n",
"#tag_count.plot(color='dodgerblue',linewidth=3)\n",
"plt.figure();\n",
"tcdf15.plot(kind='bar'); plt.axhline(mean(tcdf15['count']), color='k')"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"CPU times: user 114 ms, sys: 7.73 ms, total: 122 ms\n",
"Wall time: 133 ms\n"
]
},
{
"metadata": {},
"output_type": "display_data",
"text": [
"<matplotlib.figure.Figure at 0x11e690d90>"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\ne3XNNddo7969uuWWW2JpcrN161bddttteuedd/Tuu+/q85//vLq7u5VOp9XW1hZL0+9//3vNmTNH\nmUxGV111lerq6mLpGPHvf/9b3d3dyufz+spXvqJXX31V6XRara2tmjdvXixN+/btU09Pj15//XVd\neeWVOn78uAYHB7VmzRoucg1UyJQavLZt26a1a9eOOZbP57VhwwbdeeedkbbkcjkdPHiw6Mf2798f\n2+A1bdr/XwS9+eabtW3bNp08eTKWFkn68MMPtXLlSj388MO67777Cn9ZPvHEE7ENXn/605/0zW9+\ns9Cyf/9+zZkzR/v374+lR5K6u7u1YMEC7d69WwcPHlQ6ndbJkyc1b948XXHFFZH3nDp1StKZoXTV\nqlWF4xs3boy8ZcTs2bO1bNky9fX1aceOHTp58qSmTZumuXPnqrW1NfKef/zjH1qzZo1yuZx+9atf\n6f7779e0adP05JNPxjZ4dXd36/bbb9fXvvY1bd68WatWrdKRI0e0adMmrVmzJpYmfmAO9tFHH2nP\nnj2SpBtuuEGzZ8+WdOZMxV133RV5Dz8wj29KDV65XO6cYzU1NaqpqYm8paamRps2bdJNN910zsfi\nHHTmzZs35n8g7e3tevnll/X222/H1iRJd9xxR+yvUIz4yU9+om3btqm+vl5tbW165513dNVVV+mS\nSy6Jren999/XggUL9K9//Ut33HFH4fhf//rXWAavhQsXavv27WptbdXf//53LVmyRPv27Sv6HIxa\nJpMp/IU9PDysDz/8MJaOkR9yRv7/M/qHnriMXE9xaGio8ArXrFmzYvl/5Ah+YA7mdqaCH5jHN6UG\nr6VLl+qpp55SfX298vm8crmcTpw4ofb29shbpk2bptbWVl111VXnfOzsyTxKV1999TnHvv71r8f2\nE/jFF18sSWOerP39/Zo+fXosPZL0mc98RsuWLdPhw4f17LPPFnbhGhsbY2saEedfkKO1traqsbFR\nr7/+uvr6+vTEE0/oyiuvLPzlEId3331XJ0+eHDPAT5s2Lba/CBYuXKjnnntOuVxO3/72t7V582bV\n1tYW/X9CVL7xjW/ob3/7m6ZPn154VxFJmj9/fmxN/MAczO1MxQh+YC6O63gBCfD000+rrq5OuVyu\n8BfmBx98oA8++CC2n8KBSujt7VVXV9c5PzAvWrRIzc3NkfeMfqu70cZ727tqe/PNN3Xo0KExz/WX\nX35Z27dv1wMPPBB5zyuvvKIbb7xxzLH+/n5t375dy5cvj7xntMOHDyubzergwYP6/ve/H0sDgxcA\nAAnU19fcbvMjAAAAhElEQVRntQeHM+JfKgAAoEQvvfRS3AljuPVIin0392yO/4ziaJpSO14AgMnD\nbZndrUfya3LrkfyaGLwAAJbcltndeiS/Jrceya+JwQsAYMntt7/deiS/Jrceya+J5XoAAICIsFwP\nAAAQEQYvAACAiDB4AQAARITBCwAAICIMXgAAABH5L9T9euH72R9CAAAAAElFTkSuQmCC\n",
"text": [
"<matplotlib.figure.Figure at 0x11e690410>"
]
}
],
"prompt_number": 139
},
{
"cell_type": "heading",
"level": 3,
"metadata": {},
"source": [
"Compute tag frequency with single core "
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"#%%time\n",
"def wordCount(text):\n",
" counts = dict()\n",
" for word in text:\n",
" counts[word] = counts.get(word, 0) + 1\n",
" return counts\n",
" \n",
"tags = np.array(' '.join(dfSample.Tags).split(' ')) # Unique list\n",
"freq = wordCount(tags) # Dict count Occurence of each unique tag\n",
"\n",
"\n",
"#import os\n",
"#np.savetxt('test.txt', tags, delimiter=\",\", newline = os.linesep)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 140
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"len(freq)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 141,
"text": [
"42048"
]
}
],
"prompt_number": 141
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"freq['ubuntu'] # Quick membership test"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 142,
"text": [
"43002"
]
}
],
"prompt_number": 142
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import operator\n",
"sorted_freq = sorted(freq.iteritems(), key=operator.itemgetter(1))"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 143
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"sorted_freq[:5]"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 144,
"text": [
"[(u'spiders', 1),\n",
" (u'mercurial-convert', 1),\n",
" (u'iguana-ui', 1),\n",
" (u'pigment', 1),\n",
" (u'riatest', 1)]"
]
}
],
"prompt_number": 144
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"dfSorted_freq = pd.DataFrame(sorted_freq,columns=('tag','count'))\n",
"dfSorted_freq.head(3)\n",
"dfSorted_freq.to_csv('counts.csv')"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 145
},
{
"cell_type": "code",
"collapsed": false,
"input": [],
"language": "python",
"metadata": {},
"outputs": []
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment