├── .gitignore ├── .ipynb_checkpoints ├── A Look at Outliers-checkpoint.ipynb ├── Continuous Prior-checkpoint.ipynb ├── Logistic Gradient Descent-checkpoint.ipynb └── Python_For_Data_Mining-checkpoint.ipynb ├── Bayes_Primer.ipynb ├── Bayesian_Logistic_Regression.ipynb ├── Biggest_Misses.ipynb ├── Continuous Prior.ipynb ├── Get_Debate_Data.ipynb ├── Getting_Started_With_Spark_DataFrame.ipynb ├── LSTM_Debate_Model.ipynb ├── Logistic Gradient Descent.ipynb ├── NFL_Draft_Analyze.ipynb ├── NFL_Draft_Scrape.ipynb ├── Predict Fantasy Football Points.ipynb ├── Python_For_Data_Mining.ipynb ├── README.md ├── TalkPay.ipynb ├── Top100_OT.png ├── Top_Offensive_Tackles.ipynb └── us_state_map_makefile /.gitignore: -------------------------------------------------------------------------------- 1 | in_progress/ 2 | data/ 3 | .ipynb_checkpoints/ 4 | -------------------------------------------------------------------------------- /Get_Debate_Data.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": { 7 | "collapsed": false 8 | }, 9 | "outputs": [ 10 | { 11 | "name": "stderr", 12 | "output_type": "stream", 13 | "text": [ 14 | "/Users/tylerfolkman/anaconda/lib/python2.7/site-packages/ipykernel/__main__.py:19: UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal\n" 15 | ] 16 | } 17 | ], 18 | "source": [ 19 | "import requests\n", 20 | "from bs4 import BeautifulSoup\n", 21 | "from collections import defaultdict\n", 22 | "\n", 23 | "\n", 24 | "def text_to_dict(paragraph_array, d, candidates):\n", 25 | " '''takes an array of text paragraphs from debate and returns dict \n", 26 | " where key is person and value is list of text spoken by that candidate'''\n", 27 | " # just a default speaker that won't end up in our returned data\n", 28 | " # will get replaced when an actual speaker is found\n", 29 | " speaker = \"\"\n", 30 | " for paragraph in paragraph_array:\n", 31 | " words = paragraph.text.split(' ')\n", 32 | " first_word = words[0]\n", 33 | " # only new speaker when have SPEAKER: format\n", 34 | " if first_word[-1] == \":\":\n", 35 | " speaker = first_word[:-1]\n", 36 | " # only keep candidates text\n", 37 | " if speaker in candidates:\n", 38 | " d[speaker].append(words[1:])\n", 39 | " return d\n", 40 | "\n", 41 | "\n", 42 | "def process_url(url, speaker_dict, candidates):\n", 43 | " # requests gets the source code from the url and extracts it as text\n", 44 | " html = requests.get(url).text\n", 45 | " # beautifulsoup is a library that takes in text source code and returns a structured format of that\n", 46 | " # source code that you can more easily search and parse.\n", 47 | " soup = BeautifulSoup(html, 'html5lib')\n", 48 | " # get all the 'p' tags from the source with class = 'story-body-text'\n", 49 | " # this was determined by looking at the source code\n", 50 | " # the first and last paragraphs are intro and ending\n", 51 | " paragraphs = soup('p', {'class': 'story-body-text'})[1:-1]\n", 52 | " text_to_dict(paragraphs, speaker_dict, candidates)\n", 53 | " \n", 54 | " \n", 55 | "def process_url_list(urls, speaker_dict, candidates):\n", 56 | " for url in urls:\n", 57 | " process_url(url, speaker_dict, candidates)\n", 58 | " \n", 59 | " \n", 60 | "candidates = ['BUSH', 'TRUMP', 'RUBIO', 'CARSON', 'FIORINA', 'KASICH', 'CRUZ', 'PAUL',\n", 61 | " 'SANDERS', 'CLINTON', \"O’MALLEY\"]\n", 62 | "urls = ['http://www.nytimes.com/2015/11/11/us/politics/transcript-republican-presidential-debate.html',\n", 63 | " 'http://www.nytimes.com/2016/02/14/us/politics/transcript-of-the-republican-presidential-debate.html',\n", 64 | " 'http://www.nytimes.com/2016/01/15/us/politics/transcript-of-republican-presidential-debate.html',\n", 65 | " 'http://www.nytimes.com/2016/01/29/us/politics/republican-presidential-debate-transcript.html?_r=0',\n", 66 | " 'http://www.nytimes.com/2016/01/18/us/politics/transcript-of-the-democratic-presidential-debate.html',\n", 67 | " 'http://www.nytimes.com/2016/02/12/us/politics/transcript-of-the-democratic-presidential-debate-in-milwaukee.html',\n", 68 | " 'http://www.nytimes.com/2016/02/07/us/politics/transcript-of-the-republican-presidential-debate-in-new-hampshire.html',\n", 69 | " 'http://www.nytimes.com/2016/02/05/us/politics/transcript-of-the-democratic-presidential-debate.html',\n", 70 | " 'http://www.nytimes.com/2016/01/29/us/politics/republican-presidential-debate-preliminary-transcript.html',\n", 71 | " 'http://www.nytimes.com/2015/12/16/us/politics/transcript-main-republican-presidential-debate.html']\n", 72 | "speaker_dict = defaultdict(list)\n", 73 | "\n", 74 | "process_url_list(urls, speaker_dict, candidates)" 75 | ] 76 | }, 77 | { 78 | "cell_type": "code", 79 | "execution_count": 2, 80 | "metadata": { 81 | "collapsed": false 82 | }, 83 | "outputs": [], 84 | "source": [ 85 | "def pargraphs_to_words(speaker_dict):\n", 86 | " d = defaultdict(list)\n", 87 | " for candidate, paragraphs in speaker_dict.items():\n", 88 | " for paragraph in paragraphs:\n", 89 | " for word in paragraph:\n", 90 | " d[candidate].append(word)\n", 91 | " return d" 92 | ] 93 | }, 94 | { 95 | "cell_type": "code", 96 | "execution_count": 3, 97 | "metadata": { 98 | "collapsed": false 99 | }, 100 | "outputs": [], 101 | "source": [ 102 | "candidate_words = pargraphs_to_words(speaker_dict)" 103 | ] 104 | }, 105 | { 106 | "cell_type": "code", 107 | "execution_count": 4, 108 | "metadata": { 109 | "collapsed": true 110 | }, 111 | "outputs": [], 112 | "source": [ 113 | "import json\n", 114 | "\n", 115 | "with open('candidate_words_dict.json', 'w') as f:\n", 116 | " json.dump(candidate_words, f)" 117 | ] 118 | } 119 | ], 120 | "metadata": { 121 | "kernelspec": { 122 | "display_name": "Python 2", 123 | "language": "python", 124 | "name": "python2" 125 | }, 126 | "language_info": { 127 | "codemirror_mode": { 128 | "name": "ipython", 129 | "version": 2 130 | }, 131 | "file_extension": ".py", 132 | "mimetype": "text/x-python", 133 | "name": "python", 134 | "nbconvert_exporter": "python", 135 | "pygments_lexer": "ipython2", 136 | "version": "2.7.11" 137 | } 138 | }, 139 | "nbformat": 4, 140 | "nbformat_minor": 0 141 | } 142 | -------------------------------------------------------------------------------- /Getting_Started_With_Spark_DataFrame.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "#Spark\n", 8 | "\n", 9 | "[Spark](https://spark.apache.org/) is a really awesome tool to easily do distributed computations in order to process large-scale data. To be honest, most people probably don't need spark for their own side projects - most of these data will fit in memory or work well in a traditional database like PostgreSQL. That being said, there is a good chance you might need Spark if you are doing data science type work for your job. A lot of companies have a tremendous amount of data and Spark is a great tool to help effectively process these large data.\n", 10 | "\n", 11 | "In case you are not familiar with the map reduce structure, here is a very [brief introduction](http://hci.stanford.edu/courses/cs448g/a2/files/map_reduce_tutorial.pdf). Spark is based on this map reduce paradigm, but has made some nice improvements to the open source version Hadoop. A few of these improvements include the ability to cache data to memory, a simpler API supported in multiple languages (scala, python, and java I believe), and some really nice libraries - including a machine learning and SQL library. In my opinion, these additions really make Spark a powerful tool with a realtively easy learning curve.\n", 12 | "\n", 13 | "My goal today is to show you how to get started with Spark and get introduced to Spark data frames." 14 | ] 15 | }, 16 | { 17 | "cell_type": "markdown", 18 | "metadata": {}, 19 | "source": [ 20 | "#Installation\n", 21 | "\n", 22 | "Fortunately, you don't need a cluster to get started with Spark. You can run it locally as well. This obviously doesn't provide the benefits of a cluster, but is great for learning.\n", 23 | "\n", 24 | "Go ahead and install the latest verison of Spark (I would recommend pre-built with latest version of Hadoop) [here](https://spark.apache.org/downloads.html).\n", 25 | "\n", 26 | "Once you download and unpack Spark, you can navigate to that directory. From there you can go to bin/pyspark to launch an interactive version of pyspark. This is really useful for experimentation, but let's see if we can't get Spark to work in your ipython notebook.\n", 27 | "\n", 28 | "Follow the \"Create PySpark Profile for IPython\" [here](http://ramhiser.com/2015/02/01/configuring-ipython-notebook-support-for-pyspark/) **with the exception of changing PYSPARK_SUBMIT_ARGS to \"--master local[2] pyspark-shell\"** Adding the pyspark-shell to the end is now necessary.\n", 29 | "\n", 30 | "You should now be able to run: ipython notebook --profile=pyspark. To test that it works make sure you can do the following:" 31 | ] 32 | }, 33 | { 34 | "cell_type": "code", 35 | "execution_count": 11, 36 | "metadata": { 37 | "collapsed": false 38 | }, 39 | "outputs": [ 40 | { 41 | "data": { 42 | "text/plain": [ 43 | "" 44 | ] 45 | }, 46 | "execution_count": 11, 47 | "metadata": {}, 48 | "output_type": "execute_result" 49 | } 50 | ], 51 | "source": [ 52 | "sc" 53 | ] 54 | }, 55 | { 56 | "cell_type": "code", 57 | "execution_count": 12, 58 | "metadata": { 59 | "collapsed": true 60 | }, 61 | "outputs": [], 62 | "source": [ 63 | "a=sc.parallelize([1,2,3,4])" 64 | ] 65 | }, 66 | { 67 | "cell_type": "code", 68 | "execution_count": 13, 69 | "metadata": { 70 | "collapsed": false 71 | }, 72 | "outputs": [ 73 | { 74 | "data": { 75 | "text/plain": [ 76 | "[1, 2, 3, 4]" 77 | ] 78 | }, 79 | "execution_count": 13, 80 | "metadata": {}, 81 | "output_type": "execute_result" 82 | } 83 | ], 84 | "source": [ 85 | "a.collect()" 86 | ] 87 | }, 88 | { 89 | "cell_type": "markdown", 90 | "metadata": {}, 91 | "source": [ 92 | "You should also now be able to go to http://localhost:4040/ and see the spark application UI. Hopefully you are now up and running with Spark in your IPython notebook! Also, as a quick side note, if you prefer using an IDE, check out this [post](https://gist.github.com/bigaidream/40fe0f8267a80e7c9cf8) on how to get autocompletion for Spark in PyCharm." 93 | ] 94 | }, 95 | { 96 | "cell_type": "markdown", 97 | "metadata": { 98 | "collapsed": true 99 | }, 100 | "source": [ 101 | "#[NY Data](https://data.ny.gov/)\n", 102 | "New York provides a lot of open data that is easily accessible. A great resource to discovery some really interesting things about NY as well as cities in general. To showcase some of the Spark features, I will be taking a look at salary information for state authorities.\n", 103 | "\n", 104 | "We are first going to use their API to grab up to 50,000 observations, convert the data to JSON and save to disk. We can then load the file into a Spark data frame." 105 | ] 106 | }, 107 | { 108 | "cell_type": "code", 109 | "execution_count": 14, 110 | "metadata": { 111 | "collapsed": true 112 | }, 113 | "outputs": [], 114 | "source": [ 115 | "import urllib2\n", 116 | "import json\n", 117 | "req = urllib2.Request('https://data.ny.gov/resource/unag-2p27.json?$limit=50000')\n", 118 | "resp = urllib2.urlopen(req)\n", 119 | "content = json.loads(resp.read())\n", 120 | "with open(\"data/ny_salaries.json\", \"w\") as f:\n", 121 | " json.dump(content, f)" 122 | ] 123 | }, 124 | { 125 | "cell_type": "markdown", 126 | "metadata": {}, 127 | "source": [ 128 | "#[Spark Data Frames](http://spark.apache.org/docs/latest/api/python/pyspark.sql.html)" 129 | ] 130 | }, 131 | { 132 | "cell_type": "code", 133 | "execution_count": 15, 134 | "metadata": { 135 | "collapsed": false 136 | }, 137 | "outputs": [], 138 | "source": [ 139 | "from pyspark.sql import SQLContext\n", 140 | "sqlContext = SQLContext(sc)\n", 141 | "df = sqlContext.read.json(\"data/ny_salaries.json\")" 142 | ] 143 | }, 144 | { 145 | "cell_type": "markdown", 146 | "metadata": {}, 147 | "source": [ 148 | "Lets take a look at the schema" 149 | ] 150 | }, 151 | { 152 | "cell_type": "code", 153 | "execution_count": 16, 154 | "metadata": { 155 | "collapsed": false 156 | }, 157 | "outputs": [ 158 | { 159 | "name": "stdout", 160 | "output_type": "stream", 161 | "text": [ 162 | "root\n", 163 | " |-- actual_salary_paid: string (nullable = true)\n", 164 | " |-- authority_name: string (nullable = true)\n", 165 | " |-- base_annualized_salary: string (nullable = true)\n", 166 | " |-- department: string (nullable = true)\n", 167 | " |-- exempt_indicator: string (nullable = true)\n", 168 | " |-- extra_pay: string (nullable = true)\n", 169 | " |-- first_name: string (nullable = true)\n", 170 | " |-- fiscal_year_end_date: string (nullable = true)\n", 171 | " |-- group: string (nullable = true)\n", 172 | " |-- has_employees: string (nullable = true)\n", 173 | " |-- last_name: string (nullable = true)\n", 174 | " |-- middle_initial: string (nullable = true)\n", 175 | " |-- other_compensation: string (nullable = true)\n", 176 | " |-- overtime_paid: string (nullable = true)\n", 177 | " |-- paid_by_another_entity: string (nullable = true)\n", 178 | " |-- paid_by_state_or_local_government: string (nullable = true)\n", 179 | " |-- pay_type: string (nullable = true)\n", 180 | " |-- performance_bonus: string (nullable = true)\n", 181 | " |-- title: string (nullable = true)\n", 182 | " |-- total_compensation: string (nullable = true)\n", 183 | "\n" 184 | ] 185 | } 186 | ], 187 | "source": [ 188 | "df.printSchema()" 189 | ] 190 | }, 191 | { 192 | "cell_type": "markdown", 193 | "metadata": {}, 194 | "source": [ 195 | "And now a specific column" 196 | ] 197 | }, 198 | { 199 | "cell_type": "code", 200 | "execution_count": 17, 201 | "metadata": { 202 | "collapsed": false 203 | }, 204 | "outputs": [ 205 | { 206 | "name": "stdout", 207 | "output_type": "stream", 208 | "text": [ 209 | "+------------------+\n", 210 | "|total_compensation|\n", 211 | "+------------------+\n", 212 | "| 28725.55|\n", 213 | "| 31973.09|\n", 214 | "| 68654.00|\n", 215 | "| 25826.95|\n", 216 | "| 60114.08|\n", 217 | "| 15257.43|\n", 218 | "| 85000.00|\n", 219 | "| 44454.64|\n", 220 | "| 39474.83|\n", 221 | "| 2240.00|\n", 222 | "| 56267.98|\n", 223 | "| 1817.60|\n", 224 | "| 4530.33|\n", 225 | "| 59186.44|\n", 226 | "| 57664.04|\n", 227 | "| 1333.50|\n", 228 | "| 63339.92|\n", 229 | "| 59782.21|\n", 230 | "| 48451.11|\n", 231 | "| 68632.35|\n", 232 | "+------------------+\n", 233 | "\n" 234 | ] 235 | } 236 | ], 237 | "source": [ 238 | "df.select(\"total_compensation\").show()" 239 | ] 240 | }, 241 | { 242 | "cell_type": "markdown", 243 | "metadata": {}, 244 | "source": [ 245 | "We can easily filter by column" 246 | ] 247 | }, 248 | { 249 | "cell_type": "code", 250 | "execution_count": 18, 251 | "metadata": { 252 | "collapsed": false 253 | }, 254 | "outputs": [ 255 | { 256 | "data": { 257 | "text/plain": [ 258 | "Row(actual_salary_paid=u'133040.96', authority_name=u'Battery Park City Authority', base_annualized_salary=u'133041.00', department=u'Administration/BPCPC', exempt_indicator=u'Y', extra_pay=u'0.00', first_name=u'Tessa', fiscal_year_end_date=u'2011-10-31T00:00:00', group=u'Executive', has_employees=None, last_name=u'Huxley', middle_initial=None, other_compensation=u'750.00', overtime_paid=u'0.00', paid_by_another_entity=u'N', paid_by_state_or_local_government=None, pay_type=u'FT', performance_bonus=u'0.00', title=u'Executive Director', total_compensation=u'133790.96')" 259 | ] 260 | }, 261 | "execution_count": 18, 262 | "metadata": {}, 263 | "output_type": "execute_result" 264 | } 265 | ], 266 | "source": [ 267 | "df.filter(df[\"total_compensation\"] > 100000).first()" 268 | ] 269 | }, 270 | { 271 | "cell_type": "markdown", 272 | "metadata": {}, 273 | "source": [ 274 | "Now lets take a look at the highest paying departments on average. We first make sure to convert the column to float, and then use Spark's groupby and orderby operations to get the data we need." 275 | ] 276 | }, 277 | { 278 | "cell_type": "code", 279 | "execution_count": 19, 280 | "metadata": { 281 | "collapsed": false 282 | }, 283 | "outputs": [], 284 | "source": [ 285 | "from pyspark.sql.functions import desc\n", 286 | "df_cast = df.withColumn(\"total_compensation_float\", df.total_compensation.astype(\"float\"))\n", 287 | "top10 = (df_cast\n", 288 | " .groupBy(\"department\")\n", 289 | " .mean(\"total_compensation_float\")\n", 290 | " .orderBy(desc(\"AVG(total_compensation_float)\"))\n", 291 | " .take(10))" 292 | ] 293 | }, 294 | { 295 | "cell_type": "code", 296 | "execution_count": 20, 297 | "metadata": { 298 | "collapsed": false 299 | }, 300 | "outputs": [ 301 | { 302 | "data": { 303 | "image/png": "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\n", 304 | "text/plain": [ 305 | "" 306 | ] 307 | }, 308 | "metadata": {}, 309 | "output_type": "display_data" 310 | } 311 | ], 312 | "source": [ 313 | "import seaborn as sns\n", 314 | "import numpy as np\n", 315 | "import matplotlib.pyplot as plt\n", 316 | "%matplotlib inline\n", 317 | "\n", 318 | "department = np.empty(10, dtype=\"S30\")\n", 319 | "salary = np.empty(10)\n", 320 | "for i, row in enumerate(top10):\n", 321 | " department[i] = row[0]\n", 322 | " salary[i] = row[1]\n", 323 | "sns.barplot(x=department, y=salary, x_order=department)\n", 324 | "plt.xticks(rotation='vertical')\n", 325 | "sns.despine()" 326 | ] 327 | }, 328 | { 329 | "cell_type": "markdown", 330 | "metadata": {}, 331 | "source": [ 332 | "Looks like a nice place to be is the Office of Strategic Initative...but I wonder how many people are in that department in our data? Let's utilize the SQL query method on our data frame\n", 333 | "#To SQL" 334 | ] 335 | }, 336 | { 337 | "cell_type": "code", 338 | "execution_count": 21, 339 | "metadata": { 340 | "collapsed": false 341 | }, 342 | "outputs": [ 343 | { 344 | "data": { 345 | "text/plain": [ 346 | "[Row(c0=1)]" 347 | ] 348 | }, 349 | "execution_count": 21, 350 | "metadata": {}, 351 | "output_type": "execute_result" 352 | } 353 | ], 354 | "source": [ 355 | "df_cast.registerTempTable(\"df_cast\")\n", 356 | "sqlContext.sql(\"select count(*) from df_cast where department = 'Office of Strategic Initiative'\").collect()" 357 | ] 358 | }, 359 | { 360 | "cell_type": "markdown", 361 | "metadata": {}, 362 | "source": [ 363 | "Looks like there is only one lucky person :). We could also convert our Spark data frame to a pandas data frame and do the same calculation. Nice.\n", 364 | "#To Pandas" 365 | ] 366 | }, 367 | { 368 | "cell_type": "code", 369 | "execution_count": 22, 370 | "metadata": { 371 | "collapsed": false 372 | }, 373 | "outputs": [ 374 | { 375 | "data": { 376 | "text/plain": [ 377 | "1" 378 | ] 379 | }, 380 | "execution_count": 22, 381 | "metadata": {}, 382 | "output_type": "execute_result" 383 | } 384 | ], 385 | "source": [ 386 | "df_pandas = df_cast.toPandas()\n", 387 | "df_pandas.department.value_counts()['Office of Strategic Initiative']" 388 | ] 389 | }, 390 | { 391 | "cell_type": "markdown", 392 | "metadata": {}, 393 | "source": [ 394 | "#Summary Statistics / Functions" 395 | ] 396 | }, 397 | { 398 | "cell_type": "code", 399 | "execution_count": 23, 400 | "metadata": { 401 | "collapsed": false 402 | }, 403 | "outputs": [ 404 | { 405 | "name": "stdout", 406 | "output_type": "stream", 407 | "text": [ 408 | "+-------+------------------------+\n", 409 | "|summary|total_compensation_float|\n", 410 | "+-------+------------------------+\n", 411 | "| count| 49997|\n", 412 | "| mean| 63374.58037148814|\n", 413 | "| stddev| 35402.40384989916|\n", 414 | "| min| 0.0|\n", 415 | "| max| 735124.75|\n", 416 | "+-------+------------------------+\n", 417 | "\n" 418 | ] 419 | } 420 | ], 421 | "source": [ 422 | "df_cast.describe('total_compensation_float').show()" 423 | ] 424 | }, 425 | { 426 | "cell_type": "markdown", 427 | "metadata": {}, 428 | "source": [ 429 | "Wow - that is a high max. Lets take a look at the departments by max salary. Excuse the pandas oneliner - would just be the same Spark code as used above to get the average" 430 | ] 431 | }, 432 | { 433 | "cell_type": "code", 434 | "execution_count": 24, 435 | "metadata": { 436 | "collapsed": false 437 | }, 438 | "outputs": [ 439 | { 440 | "data": { 441 | "text/plain": [ 442 | "" 443 | ] 444 | }, 445 | "execution_count": 24, 446 | "metadata": {}, 447 | "output_type": "execute_result" 448 | }, 449 | { 450 | "data": { 451 | "image/png": "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\nSAAAAABJRU5ErkJggg==\n", 452 | "text/plain": [ 453 | "" 454 | ] 455 | }, 456 | "metadata": {}, 457 | "output_type": "display_data" 458 | } 459 | ], 460 | "source": [ 461 | "df_pandas.groupby('department')[\"total_compensation_float\"].max().order(ascending=False)[:10].plot(kind=\"bar\")" 462 | ] 463 | }, 464 | { 465 | "cell_type": "markdown", 466 | "metadata": {}, 467 | "source": [ 468 | "There are definitely a few outliers here. Let's just quickly see the distribution for the highest department" 469 | ] 470 | }, 471 | { 472 | "cell_type": "code", 473 | "execution_count": 25, 474 | "metadata": { 475 | "collapsed": false 476 | }, 477 | "outputs": [ 478 | { 479 | "data": { 480 | "image/png": "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\nYII=\n", 481 | "text/plain": [ 482 | "" 483 | ] 484 | }, 485 | "metadata": {}, 486 | "output_type": "display_data" 487 | } 488 | ], 489 | "source": [ 490 | "salaries = sqlContext.sql(\"\"\"\n", 491 | " select total_compensation_float \n", 492 | " from df_cast\n", 493 | " where department = '3147 Personnel Human Resources' \"\"\").collect()\n", 494 | "sns.distplot(salaries, kde=False)\n", 495 | "sns.despine()" 496 | ] 497 | }, 498 | { 499 | "cell_type": "markdown", 500 | "metadata": {}, 501 | "source": [ 502 | "Wow - someone is making a killing in this department. Or maybe an error?\n", 503 | "\n", 504 | "Spark also has some nifty functions. For example, we can quickly make cross tabulations. Check out the API for a lot more functions available." 505 | ] 506 | }, 507 | { 508 | "cell_type": "code", 509 | "execution_count": 26, 510 | "metadata": { 511 | "collapsed": false 512 | }, 513 | "outputs": [], 514 | "source": [ 515 | "from pyspark.sql import DataFrameStatFunctions as sf" 516 | ] 517 | }, 518 | { 519 | "cell_type": "code", 520 | "execution_count": 27, 521 | "metadata": { 522 | "collapsed": false 523 | }, 524 | "outputs": [ 525 | { 526 | "data": { 527 | "text/plain": [ 528 | "[Row(paid_by_another_entity_fiscal_year_end_date=u'Y', 2011-03-31T00:00:00=7, 2011-12-31T00:00:00=0, 2012-03-31T00:00:00=5, 2012-12-31T00:00:00=0, 2013-03-31T00:00:00=5, 2012-10-31T00:00:00=0, 2013-12-31T00:00:00=0, 2013-10-31T00:00:00=0, 2011-06-30T00:00:00=0, 2011-10-31T00:00:00=0, 2012-06-30T00:00:00=0, 2013-06-30T00:00:00=0),\n", 529 | " Row(paid_by_another_entity_fiscal_year_end_date=u'N', 2011-03-31T00:00:00=2376, 2011-12-31T00:00:00=35169, 2012-03-31T00:00:00=2348, 2012-12-31T00:00:00=3548, 2013-03-31T00:00:00=2272, 2012-10-31T00:00:00=183, 2013-12-31T00:00:00=3602, 2013-10-31T00:00:00=208, 2011-06-30T00:00:00=24, 2011-10-31T00:00:00=202, 2012-06-30T00:00:00=24, 2013-06-30T00:00:00=24),\n", 530 | " Row(paid_by_another_entity_fiscal_year_end_date=u'null', 2011-03-31T00:00:00=1, 2011-12-31T00:00:00=0, 2012-03-31T00:00:00=1, 2012-12-31T00:00:00=0, 2013-03-31T00:00:00=1, 2012-10-31T00:00:00=0, 2013-12-31T00:00:00=0, 2013-10-31T00:00:00=0, 2011-06-30T00:00:00=0, 2011-10-31T00:00:00=0, 2012-06-30T00:00:00=0, 2013-06-30T00:00:00=0)]" 531 | ] 532 | }, 533 | "execution_count": 27, 534 | "metadata": {}, 535 | "output_type": "execute_result" 536 | } 537 | ], 538 | "source": [ 539 | "sf(df_cast).crosstab(\"paid_by_another_entity\", \"fiscal_year_end_date\").collect()" 540 | ] 541 | }, 542 | { 543 | "cell_type": "markdown", 544 | "metadata": {}, 545 | "source": [ 546 | "#Learn More\n", 547 | "* [Databricks Spark SQL blog](https://databricks.com/blog/category/sparksql)\n", 548 | "* [Spark SQL API](http://spark.apache.org/docs/latest/api/python/pyspark.sql.html)" 549 | ] 550 | }, 551 | { 552 | "cell_type": "markdown", 553 | "metadata": {}, 554 | "source": [ 555 | "Well I hope this helped you get started with Spark locally and showcased some of the features of data frames. As always, please feel free to email me with questions / comments." 556 | ] 557 | } 558 | ], 559 | "metadata": { 560 | "kernelspec": { 561 | "display_name": "Python 2", 562 | "language": "python", 563 | "name": "python2" 564 | }, 565 | "language_info": { 566 | "codemirror_mode": { 567 | "name": "ipython", 568 | "version": 2 569 | }, 570 | "file_extension": ".py", 571 | "mimetype": "text/x-python", 572 | "name": "python", 573 | "nbconvert_exporter": "python", 574 | "pygments_lexer": "ipython2", 575 | "version": "2.7.10" 576 | } 577 | }, 578 | "nbformat": 4, 579 | "nbformat_minor": 0 580 | } 581 | -------------------------------------------------------------------------------- /LSTM_Debate_Model.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": { 7 | "collapsed": false 8 | }, 9 | "outputs": [ 10 | { 11 | "name": "stderr", 12 | "output_type": "stream", 13 | "text": [ 14 | "Using Theano backend.\n", 15 | "/Users/tylerfolkman/anaconda/lib/python2.7/site-packages/theano/tensor/signal/downsample.py:5: UserWarning: downsample module has been moved to the pool module.\n", 16 | " warnings.warn(\"downsample module has been moved to the pool module.\")\n" 17 | ] 18 | } 19 | ], 20 | "source": [ 21 | "'''\n", 22 | "Most of this code is borrowed from: https://github.com/fchollet/keras/blob/master/examples/lstm_text_generation.py\n", 23 | "'''\n", 24 | "\n", 25 | "import theano\n", 26 | "from __future__ import print_function\n", 27 | "from keras.models import Sequential, model_from_json\n", 28 | "from keras.layers.core import Dense, Activation, Dropout\n", 29 | "from keras.layers.recurrent import LSTM\n", 30 | "from keras.datasets.data_utils import get_file\n", 31 | "import numpy as np\n", 32 | "import random\n", 33 | "import sys" 34 | ] 35 | }, 36 | { 37 | "cell_type": "code", 38 | "execution_count": 2, 39 | "metadata": { 40 | "collapsed": false 41 | }, 42 | "outputs": [ 43 | { 44 | "name": "stdout", 45 | "output_type": "stream", 46 | "text": [ 47 | "131792\n" 48 | ] 49 | } 50 | ], 51 | "source": [ 52 | "import json\n", 53 | "\n", 54 | "with open(\"candidate_words_dict.json\") as f:\n", 55 | " candidate_word_dict = json.load(f)\n", 56 | "text = []\n", 57 | "start_indexes = []\n", 58 | "i = 0\n", 59 | "for v in candidate_word_dict.values():\n", 60 | " text.append(\"\")\n", 61 | " start_indexes.append(i)\n", 62 | " i+=1\n", 63 | " for word in v:\n", 64 | " if word[-1] == '.':\n", 65 | " text.append(word[:-1].lower())\n", 66 | " text.append(\"\")\n", 67 | " text.append(\"\")\n", 68 | " i+=3\n", 69 | " start_indexes.append(i-1)\n", 70 | " else:\n", 71 | " text.append(word.lower())\n", 72 | " i+=1\n", 73 | "print (len(text))" 74 | ] 75 | }, 76 | { 77 | "cell_type": "code", 78 | "execution_count": 3, 79 | "metadata": { 80 | "collapsed": false 81 | }, 82 | "outputs": [ 83 | { 84 | "name": "stdout", 85 | "output_type": "stream", 86 | "text": [ 87 | "total chars: 9198\n" 88 | ] 89 | } 90 | ], 91 | "source": [ 92 | "## Get unique characters and create dictionaries from character to index and index to character\n", 93 | "\n", 94 | "chars = set(text)\n", 95 | "print('total chars:', len(chars))\n", 96 | "char_indices = dict((c, i) for i, c in enumerate(chars))\n", 97 | "indices_char = dict((i, c) for i, c in enumerate(chars))" 98 | ] 99 | }, 100 | { 101 | "cell_type": "code", 102 | "execution_count": 4, 103 | "metadata": { 104 | "collapsed": false 105 | }, 106 | "outputs": [ 107 | { 108 | "name": "stdout", 109 | "output_type": "stream", 110 | "text": [ 111 | "nb sequences: 43929\n" 112 | ] 113 | } 114 | ], 115 | "source": [ 116 | "maxlen = 5\n", 117 | "step = 3\n", 118 | "sentences = []\n", 119 | "next_chars = []\n", 120 | "## i goes to len(text) - maxlen because grabbing in those sets\n", 121 | "for i in range(0, len(text) - maxlen, step):\n", 122 | " # get the first set of max len, next time around move start forward step and get max len chars\n", 123 | " sentences.append(text[i: i + maxlen])\n", 124 | " # character immediately following the sentences set\n", 125 | " next_chars.append(text[i + maxlen])\n", 126 | "print('nb sequences:', len(sentences))" 127 | ] 128 | }, 129 | { 130 | "cell_type": "code", 131 | "execution_count": 5, 132 | "metadata": { 133 | "collapsed": false 134 | }, 135 | "outputs": [ 136 | { 137 | "name": "stdout", 138 | "output_type": "stream", 139 | "text": [ 140 | "Vectorization...\n" 141 | ] 142 | } 143 | ], 144 | "source": [ 145 | "print('Vectorization...')\n", 146 | "# row for each sentence, column for each word in sentence, depth for possible characters\n", 147 | "X = np.zeros((len(sentences), maxlen, len(chars)), dtype=np.bool)\n", 148 | "# row for each sentence prediction, column for each possible character\n", 149 | "y = np.zeros((len(next_chars), len(chars)), dtype=np.bool)\n", 150 | "for i, sentence in enumerate(sentences):\n", 151 | " for t, char in enumerate(sentence):\n", 152 | " # char indicies return index for a given character\n", 153 | " X[i, t, char_indices[char]] = 1\n", 154 | " y[i, char_indices[next_chars[i]]] = 1" 155 | ] 156 | }, 157 | { 158 | "cell_type": "code", 159 | "execution_count": 7, 160 | "metadata": { 161 | "collapsed": false 162 | }, 163 | "outputs": [ 164 | { 165 | "name": "stdout", 166 | "output_type": "stream", 167 | "text": [ 168 | "Build model...\n" 169 | ] 170 | } 171 | ], 172 | "source": [ 173 | "# build the model: 2 stacked LSTM\n", 174 | "print('Build model...')\n", 175 | "\n", 176 | "# once build model and have some weights, can re-use\n", 177 | "\n", 178 | "#model = model_from_json(open('candidate_model_architecture.json').read())\n", 179 | "#model.load_weights('candidate_lstm_weights.h5')\n", 180 | "\n", 181 | "model = Sequential()\n", 182 | "\n", 183 | "model.add(LSTM(512, return_sequences=True, input_shape=(maxlen, len(chars))))\n", 184 | "model.add(Dropout(0.2))\n", 185 | "model.add(LSTM(512, return_sequences=False))\n", 186 | "model.add(Dropout(0.2))\n", 187 | "model.add(Dense(len(chars)))\n", 188 | "model.add(Activation('softmax'))\n", 189 | "\n", 190 | "model.compile(loss='categorical_crossentropy', optimizer='rmsprop')" 191 | ] 192 | }, 193 | { 194 | "cell_type": "code", 195 | "execution_count": 35, 196 | "metadata": { 197 | "collapsed": true 198 | }, 199 | "outputs": [], 200 | "source": [ 201 | "json_string = model.to_json()\n", 202 | "open('candidate_model_architecture.json', 'w').write(json_string)" 203 | ] 204 | }, 205 | { 206 | "cell_type": "code", 207 | "execution_count": 9, 208 | "metadata": { 209 | "collapsed": true 210 | }, 211 | "outputs": [], 212 | "source": [ 213 | "def sample(a, temperature=1.0):\n", 214 | " # helper function to sample an index from a probability array\n", 215 | " # take log of probabilities\n", 216 | " a = np.log(a) / temperature\n", 217 | " # convert back to probabilities\n", 218 | " a = np.exp(a) / np.sum(np.exp(a))\n", 219 | " # Sample one given the probabilities and get that index\n", 220 | " return np.argmax(np.random.multinomial(1, a, 1))" 221 | ] 222 | }, 223 | { 224 | "cell_type": "code", 225 | "execution_count": 10, 226 | "metadata": { 227 | "collapsed": false 228 | }, 229 | "outputs": [ 230 | { 231 | "name": "stdout", 232 | "output_type": "stream", 233 | "text": [ 234 | "\n", 235 | "--------------------------------------------------\n", 236 | "Iteration 1\n", 237 | "Epoch 1/1\n", 238 | "43929/43929 [==============================] - 605s - loss: 4.9875 \n", 239 | "\n", 240 | "--------------------------------------------------\n", 241 | "Iteration 2\n", 242 | "Epoch 1/1\n", 243 | "43929/43929 [==============================] - 2801s - loss: 4.9129 \n", 244 | "\n", 245 | "--------------------------------------------------\n", 246 | "Iteration 3\n", 247 | "Epoch 1/1\n", 248 | "43929/43929 [==============================] - 644s - loss: 4.8380 \n" 249 | ] 250 | } 251 | ], 252 | "source": [ 253 | "# train the model, output generated text after each iteration\n", 254 | "for iteration in range(1, 4):\n", 255 | " print()\n", 256 | " print('-' * 50)\n", 257 | " print('Iteration', iteration)\n", 258 | " model.fit(X, y, batch_size=64, nb_epoch=1)" 259 | ] 260 | }, 261 | { 262 | "cell_type": "code", 263 | "execution_count": 11, 264 | "metadata": { 265 | "collapsed": false 266 | }, 267 | "outputs": [], 268 | "source": [ 269 | "model.save_weights('candidate_lstm_weights_v2.h5', overwrite=True)" 270 | ] 271 | }, 272 | { 273 | "cell_type": "code", 274 | "execution_count": null, 275 | "metadata": { 276 | "collapsed": false 277 | }, 278 | "outputs": [], 279 | "source": [ 280 | "start_index = random.choice(start_indexes)\n", 281 | "\n", 282 | "for diversity in [.1, .5, .75, .9, 1.0]:\n", 283 | " print()\n", 284 | " print('----- diversity:', diversity)\n", 285 | "\n", 286 | " generated = []\n", 287 | " # get a random sentence of correct length for model\n", 288 | " sentence = text[start_index: start_index + maxlen]\n", 289 | " generated.extend(sentence)\n", 290 | " print('----- Generating with seed: {}\\n'.format(u\" \".join(sentence).encode('utf-8').strip()))\n", 291 | "\n", 292 | " next_char = \"\"\n", 293 | " while next_char != \"\":\n", 294 | " # convert the sentence into the x format necessary for model\n", 295 | " # meaning # sentences, # characters in sentence, # vocab\n", 296 | " x = np.zeros((1, maxlen, len(chars)))\n", 297 | " for t, char in enumerate(sentence):\n", 298 | " x[0, t, char_indices[char]] = 1.\n", 299 | "\n", 300 | " preds = model.predict(x, verbose=0)[0]\n", 301 | " next_index = sample(preds, diversity)\n", 302 | " next_char = indices_char[next_index]\n", 303 | "\n", 304 | " # generated keeps track of text im generating\n", 305 | " generated.append(next_char)\n", 306 | " # sentence shifts down by 1 for next loop\n", 307 | " sentence = sentence[1:]\n", 308 | " sentence.append(next_char)\n", 309 | "\n", 310 | " print(\"Resulting Setence: {}\".format(u\" \".join(generated).encode('utf-8').strip()))" 311 | ] 312 | } 313 | ], 314 | "metadata": { 315 | "kernelspec": { 316 | "display_name": "Python 2", 317 | "language": "python", 318 | "name": "python2" 319 | }, 320 | "language_info": { 321 | "codemirror_mode": { 322 | "name": "ipython", 323 | "version": 2 324 | }, 325 | "file_extension": ".py", 326 | "mimetype": "text/x-python", 327 | "name": "python", 328 | "nbconvert_exporter": "python", 329 | "pygments_lexer": "ipython2", 330 | "version": "2.7.11" 331 | } 332 | }, 333 | "nbformat": 4, 334 | "nbformat_minor": 0 335 | } 336 | -------------------------------------------------------------------------------- /NFL_Draft_Analyze.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 34, 6 | "metadata": { 7 | "collapsed": true 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "import pandas as pd\n", 12 | "import pickle\n", 13 | "import seaborn as sns\n", 14 | "import matplotlib.pyplot as plt\n", 15 | "%matplotlib inline" 16 | ] 17 | }, 18 | { 19 | "cell_type": "code", 20 | "execution_count": 24, 21 | "metadata": { 22 | "collapsed": false 23 | }, 24 | "outputs": [], 25 | "source": [ 26 | "with open(\"../data/2015_draft\",'r') as f:\n", 27 | " player_data = pickle.load(f)\n", 28 | "df = pd.DataFrame(player_data[1:], columns=player_data[0])" 29 | ] 30 | }, 31 | { 32 | "cell_type": "code", 33 | "execution_count": 25, 34 | "metadata": { 35 | "collapsed": true 36 | }, 37 | "outputs": [], 38 | "source": [ 39 | "df = df.convert_objects(convert_numeric=True)" 40 | ] 41 | }, 42 | { 43 | "cell_type": "code", 44 | "execution_count": 26, 45 | "metadata": { 46 | "collapsed": false 47 | }, 48 | "outputs": [ 49 | { 50 | "data": { 51 | "text/html": [ 52 | "
\n", 53 | "\n", 54 | " \n", 55 | " \n", 56 | " \n", 57 | " \n", 58 | " \n", 59 | " \n", 60 | " \n", 61 | " \n", 62 | " \n", 63 | " \n", 64 | " \n", 65 | " \n", 66 | " \n", 67 | " \n", 68 | " \n", 69 | " \n", 70 | " \n", 71 | " \n", 72 | " \n", 73 | " \n", 74 | " \n", 75 | " \n", 76 | " \n", 77 | " \n", 78 | " \n", 79 | " \n", 80 | " \n", 81 | " \n", 82 | " \n", 83 | " \n", 84 | " \n", 85 | " \n", 86 | " \n", 87 | " \n", 88 | " \n", 89 | " \n", 90 | " \n", 91 | " \n", 92 | " \n", 93 | " \n", 94 | " \n", 95 | " \n", 96 | " \n", 97 | " \n", 98 | " \n", 99 | " \n", 100 | " \n", 101 | " \n", 102 | " \n", 103 | " \n", 104 | " \n", 105 | " \n", 106 | " \n", 107 | " \n", 108 | " \n", 109 | " \n", 110 | " \n", 111 | " \n", 112 | " \n", 113 | " \n", 114 | " \n", 115 | " \n", 116 | " \n", 117 | " \n", 118 | " \n", 119 | " \n", 120 | " \n", 121 | " \n", 122 | " \n", 123 | " \n", 124 | " \n", 125 | " \n", 126 | " \n", 127 | " \n", 128 | " \n", 129 | " \n", 130 | " \n", 131 | " \n", 132 | " \n", 133 | " \n", 134 | " \n", 135 | " \n", 136 | " \n", 137 | " \n", 138 | " \n", 139 | " \n", 140 | " \n", 141 | " \n", 142 | " \n", 143 | " \n", 144 | " \n", 145 | " \n", 146 | " \n", 147 | " \n", 148 | " \n", 149 | " \n", 150 | " \n", 151 | " \n", 152 | " \n", 153 | " \n", 154 | " \n", 155 | " \n", 156 | " \n", 157 | " \n", 158 | " \n", 159 | " \n", 160 | " \n", 161 | " \n", 162 | " \n", 163 | " \n", 164 | " \n", 165 | " \n", 166 | " \n", 167 | " \n", 168 | " \n", 169 | " \n", 170 | " \n", 171 | " \n", 172 | " \n", 173 | " \n", 174 | " \n", 175 | " \n", 176 | " \n", 177 | " \n", 178 | " \n", 179 | " \n", 180 | " \n", 181 | " \n", 182 | " \n", 183 | " \n", 184 | " \n", 185 | " \n", 186 | " \n", 187 | " \n", 188 | " \n", 189 | " \n", 190 | " \n", 191 | " \n", 192 | " \n", 193 | " \n", 194 | " \n", 195 | " \n", 196 | " \n", 197 | " \n", 198 | " \n", 199 | " \n", 200 | " \n", 201 | " \n", 202 | "
RndPickTmNamePosAgeToAP1PBSt...TDRecYdsTDTklIntSkCollege/UnivCollege_Statsyear
011CLECourtney BrownDE222005004...NaNNaNNaNNaN155NaN19.0Penn St.College Stats2000
112WASLaVar ArringtonLB222006035...NaNNaNNaNNaN331323.5Penn St.College Stats2000
213WASChris SamuelsT232009069...NaNNaNNaNNaN1NaNNaNAlabamaCollege Stats2000
314CINPeter WarrickWR232005004...227529911812NaNNaNFlorida St.College Stats2000
415BALJamal LewisRB212009119...58221187948NaNNaNTennesseeCollege Stats2000
\n", 203 | "

5 rows × 30 columns

\n", 204 | "
" 205 | ], 206 | "text/plain": [ 207 | " Rnd Pick Tm Name Pos Age To AP1 PB St ... TD Rec \\\n", 208 | "0 1 1 CLE Courtney Brown DE 22 2005 0 0 4 ... NaN NaN \n", 209 | "1 1 2 WAS LaVar Arrington LB 22 2006 0 3 5 ... NaN NaN \n", 210 | "2 1 3 WAS Chris Samuels T 23 2009 0 6 9 ... NaN NaN \n", 211 | "3 1 4 CIN Peter Warrick WR 23 2005 0 0 4 ... 2 275 \n", 212 | "4 1 5 BAL Jamal Lewis RB 21 2009 1 1 9 ... 58 221 \n", 213 | "\n", 214 | " Yds TD Tkl Int Sk College/Univ College_Stats year \n", 215 | "0 NaN NaN 155 NaN 19.0 Penn St. College Stats 2000 \n", 216 | "1 NaN NaN 331 3 23.5 Penn St. College Stats 2000 \n", 217 | "2 NaN NaN 1 NaN NaN Alabama College Stats 2000 \n", 218 | "3 2991 18 12 NaN NaN Florida St. College Stats 2000 \n", 219 | "4 1879 4 8 NaN NaN Tennessee College Stats 2000 \n", 220 | "\n", 221 | "[5 rows x 30 columns]" 222 | ] 223 | }, 224 | "execution_count": 26, 225 | "metadata": {}, 226 | "output_type": "execute_result" 227 | } 228 | ], 229 | "source": [ 230 | "df.head()" 231 | ] 232 | }, 233 | { 234 | "cell_type": "code", 235 | "execution_count": 27, 236 | "metadata": { 237 | "collapsed": false 238 | }, 239 | "outputs": [ 240 | { 241 | "data": { 242 | "text/plain": [ 243 | "" 244 | ] 245 | }, 246 | "execution_count": 27, 247 | "metadata": {}, 248 | "output_type": "execute_result" 249 | }, 250 | { 251 | "data": { 252 | "image/png": "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\nQMgN6ZAN+w4AAAAASUVORK5CYII=\n", 253 | "text/plain": [ 254 | "" 255 | ] 256 | }, 257 | "metadata": {}, 258 | "output_type": "display_data" 259 | } 260 | ], 261 | "source": [ 262 | "sns.distplot(df.CarAV.dropna())" 263 | ] 264 | }, 265 | { 266 | "cell_type": "code", 267 | "execution_count": 31, 268 | "metadata": { 269 | "collapsed": false 270 | }, 271 | "outputs": [ 272 | { 273 | "data": { 274 | "text/plain": [ 275 | "(3709, 30)" 276 | ] 277 | }, 278 | "execution_count": 31, 279 | "metadata": {}, 280 | "output_type": "execute_result" 281 | } 282 | ], 283 | "source": [ 284 | "df_clean = df[pd.notnull(df.CarAV)]\n", 285 | "df_clean.shape" 286 | ] 287 | }, 288 | { 289 | "cell_type": "code", 290 | "execution_count": 47, 291 | "metadata": { 292 | "collapsed": false 293 | }, 294 | "outputs": [], 295 | "source": [ 296 | "top_10_pos = df_clean.Pos.value_counts()[:10].index\n", 297 | "df_pos = df_clean[df_clean.Pos.isin(top_10_pos)]" 298 | ] 299 | }, 300 | { 301 | "cell_type": "code", 302 | "execution_count": 49, 303 | "metadata": { 304 | "collapsed": false 305 | }, 306 | "outputs": [ 307 | { 308 | "data": { 309 | "text/plain": [ 310 | "(3415, 30)" 311 | ] 312 | }, 313 | "execution_count": 49, 314 | "metadata": {}, 315 | "output_type": "execute_result" 316 | } 317 | ], 318 | "source": [ 319 | "df_pos.shape" 320 | ] 321 | }, 322 | { 323 | "cell_type": "code", 324 | "execution_count": 55, 325 | "metadata": { 326 | "collapsed": false 327 | }, 328 | "outputs": [ 329 | { 330 | "data": { 331 | "image/png": "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\nnerZGTQi4jUR8W+t/wHfBN6WmT8OvA34c2AMeKjlTyeArb3KtYRDD8gwG41T3vTDw8A7MvOlwGuB\nvzhg+l5qenwy8yoap2JZMNLy88LzdCiPno6n9fa6Mn0R+L3MPIXG6YDeQuM1VWemhzNzb0SM0Sjr\nm3hst7r2WNmrFbFTy8tkp+xUFUX0qsROLZHLXtmrToroFJTZKztlp1bATi0/V197ZaeWVEqnwF4t\nN5PbKnvViZ1aXiY7ZaeqKKJXJXZqiVz2yl51UkSnoMxe2Sk7tQJ2avm51uyxip6dQSMzPwB8oPW2\niNhM84HNzBsi4nuaIcdaZjsU2N2rXEt46IAMo5k5V3OGBbfSGCFEZt4WETuB41umj1H/47Og9TFZ\neJ4OfOzGgF01Zro6Mxde9FcDFwPX1Z0pIo4CrgIuycy/jIg/bpnctcfKXq2InVoeO2Wnqii1VyV2\nCuyVveqs1E5Bmb2yU3aqEzu1fH3vlZ1aVCmdAnu1XH3vFNirJZTSKzu1PHbKTlVRaq9K7BTYK3vV\nWamdgjJ7ZafsVCd2avn63qtedaruEUJvoXH6ESLiWcA9mfkQsD8ivi8iRmicCuS6NvfRCzcAP9XM\ndSLwf2tefqtX07z+UfMfrzHg2og4pTn9VOp/fBZ8dZEcNwI/FhEbI2IrcCxwc42ZPhkRz2n+/GIa\np4upNVNEHAlcC/x+Zl7evLnOx8petWenlsdO2akqSu1ViZ0CewX2qpNSOwVl9spO2alO7NTy9bVX\ndmpJpXQK7NVyua2yV53YqeWxU3aqilJ7VWKnwF6Bveqk1E5Bmb2yU3aqEzu1fGv2WEXPzqCxhLcD\nfx4RP03jOi2/3rx94VQuBwGfzMwv1ZzrauAnI+KG5u+n17z8Vh8ALo+I64H5ZpadwKURsQH4Oo9e\n76Yu883/v/7AHJk5HxEXAdfTGPCzLTP315jpt4CLI2IauB84s3m6mTozbaNxqpo3R8Sbm7edA1xU\n02Nlr9qzU8vLZKfsVBWl9arETrXmslf2qpPSOgVl9spOPcpOtWenlp+r372yU4srpVNgr5abqd+d\nAnu1lFJ6ZaeWl8lO2akqSutViZ1qzWWv7FUnpXUKyuyVnXqUnWrPTi0/V7971bNOjczPz7ebLkmS\nJEmSJEmSJEmSpFWq+xInkiRJkiRJkiRJkiRJQ8cBGpIkSZIkSZIkSZIkST3mAA1JkiRJkiRJkiRJ\nkqQec4CGJEmSJEmSJEmSJElSjzlAQ5IkSZIkSZIkSZIkqcccoCFJkiRJkiRJkiRJktRj6/odQMsX\nEYcC5wMvAGaAXcDrM/Ory7yfnwE+BvxIZn4lIl4D/EJmvuyA+T4IfCUzL+7KCkiFsVNS99krqbvs\nlNR99krqLjsldZedkrrPXkndZaek7rNXw8EzaAyYiBgF/gHYATwrM48H/gj4eEQcvsy7Ox24Anht\n8/ePACdGxHjL8rYAPw38+WqzSyWyU1L32Supu+yU1H32SuouOyV1l52Sus9eSd1lp6Tus1fDY2R+\nfr7fGbQMEfETwPsz82kH3P4y4MvA24AfAI4EEngF8CTgE8B2YF9m/mREfBdwG/DDwL8AR2Xm3uZI\nqS9n5rub9/tK4Gcz85dqWUGpZnZK6j57JXWXnZK6z15J3WWnpO6yU1L32Supu+yU1H32anh4Bo3B\nczxw44E3ZuYngGfSKN9JwPcDm4Gfas7yDOBVmfmTzd9fBXwyM+8GbgJ+pXn7B4FXttz1rwJ/1u2V\nkApip6Tus1dSd9kpqfvsldRddkrqLjsldZ+9krrLTkndZ6+GxLp+B9CyzbLEwJrMvD4idkbEWTSK\n+nTg4Obkb2fmPS2znw78YfPnjwBnAe8Frge+KyKOAfYBT8/MT3V7JaSC2Cmp++yV1F12Suo+eyV1\nl52SustOSd1nr6TuslNS99mrIeEZNAbPTcCzD7wxIt4WEacBfwHspTHi6TpgpDnLVMu8xwM/CLwr\nIu4E/jvwgxFxYmbOAx+iMYLqlcCHe7guUgnslNR99krqLjsldZ+9krrLTkndZaek7rNXUnfZKan7\n7NWQcIDGgMnM64FvR8RbImIUICJeCvw68FLgI5n5IeAB4AXAQYvczenA+zLz6Mz83sx8Ko0S/mZz\n+oeAnwf+M43T3Uhrlp2Sus9eSd1lp6Tus1dSd9kpqbvslNR99krqLjsldZ+9Gh5e4mQwvRx4J3Bz\nREwD24FTaZz65n9HxC8AjwD/DHwv8BlgHiAiNgC/BLzwgPu8EPjniDg3M++LiG8Do83rE0lrnZ2S\nus9eSd1lp6Tus1dSd9kpqbvslNR99krqLjsldZ+9GgIj8/Pz/c4gSZIkSZIkSZIkSZK0pnmJE0mS\nJEmSJEmSJEmSpB5zgIYkSZIkSZIkSZIkSVKPOUBDkiRJkiRJkiRJkiSpxxygIUmSJEmSJEmSJEmS\n1GMO0JAkSZIkSZIkSZIkSeoxB2hIkiRJkiRJkiRJkiT1mAM0JEmSJEmSJEmSJEmS/v927VgAAAAA\nYJC/9Sj2FUczQQMAAAAAAAAAYBbmNEdq10BLswAAAABJRU5ErkJggg==\n", 332 | "text/plain": [ 333 | "" 334 | ] 335 | }, 336 | "metadata": {}, 337 | "output_type": "display_data" 338 | } 339 | ], 340 | "source": [ 341 | "g = sns.FacetGrid(df_pos, col=\"Pos\")\n", 342 | "g.map(plt.hist, \"CarAV\");" 343 | ] 344 | }, 345 | { 346 | "cell_type": "code", 347 | "execution_count": 56, 348 | "metadata": { 349 | "collapsed": false 350 | }, 351 | "outputs": [ 352 | { 353 | "data": { 354 | "text/plain": [ 355 | "Rnd\n", 356 | "1 34.477228\n", 357 | "2 22.810379\n", 358 | "3 15.054511\n", 359 | "4 12.107527\n", 360 | "5 8.713178\n", 361 | "6 7.211650\n", 362 | "7 6.280069\n", 363 | "Name: CarAV, dtype: float64" 364 | ] 365 | }, 366 | "execution_count": 56, 367 | "metadata": {}, 368 | "output_type": "execute_result" 369 | } 370 | ], 371 | "source": [ 372 | "df_clean.groupby('Rnd').CarAV.mean()" 373 | ] 374 | }, 375 | { 376 | "cell_type": "code", 377 | "execution_count": 69, 378 | "metadata": { 379 | "collapsed": false 380 | }, 381 | "outputs": [], 382 | "source": [ 383 | "pos_car = df_clean.groupby('Pos').CarAV.mean()" 384 | ] 385 | }, 386 | { 387 | "cell_type": "code", 388 | "execution_count": 72, 389 | "metadata": { 390 | "collapsed": false 391 | }, 392 | "outputs": [ 393 | { 394 | "data": { 395 | "text/plain": [ 396 | "Pos\n", 397 | "NT 22.222222\n", 398 | "T 21.215328\n", 399 | "C 20.228916\n", 400 | "QB 18.553571\n", 401 | "G 18.355330\n", 402 | "DE 17.868657\n", 403 | "LB 16.454139\n", 404 | "DT 15.182724\n", 405 | "RB 14.769231\n", 406 | "DB 13.488732\n", 407 | "WR 13.396552\n", 408 | "P 11.321429\n", 409 | "K 11.125000\n", 410 | "TE 8.654545\n", 411 | "FS 4.000000\n", 412 | "FB 3.075000\n", 413 | "ILB 2.818182\n", 414 | "OLB 2.388889\n", 415 | "SS 2.285714\n", 416 | "OL 2.194444\n", 417 | "CB 1.909091\n", 418 | "LS 1.000000\n", 419 | "DL 0.000000\n", 420 | "Name: CarAV, dtype: float64" 421 | ] 422 | }, 423 | "execution_count": 72, 424 | "metadata": {}, 425 | "output_type": "execute_result" 426 | } 427 | ], 428 | "source": [ 429 | "pos_car.order(ascending=False)" 430 | ] 431 | }, 432 | { 433 | "cell_type": "code", 434 | "execution_count": 81, 435 | "metadata": { 436 | "collapsed": false 437 | }, 438 | "outputs": [ 439 | { 440 | "data": { 441 | "text/html": [ 442 | "
\n", 443 | "\n", 444 | " \n", 445 | " \n", 446 | " \n", 447 | " \n", 448 | " \n", 449 | " \n", 450 | " \n", 451 | " \n", 452 | " \n", 453 | " \n", 454 | " \n", 455 | " \n", 456 | " \n", 457 | " \n", 458 | " \n", 459 | " \n", 460 | " \n", 461 | " \n", 462 | " \n", 463 | " \n", 464 | " \n", 465 | " \n", 466 | " \n", 467 | " \n", 468 | " \n", 469 | " \n", 470 | " \n", 471 | " \n", 472 | " \n", 473 | " \n", 474 | " \n", 475 | " \n", 476 | " \n", 477 | " \n", 478 | " \n", 479 | " \n", 480 | " \n", 481 | " \n", 482 | " \n", 483 | " \n", 484 | " \n", 485 | " \n", 486 | " \n", 487 | " \n", 488 | " \n", 489 | " \n", 490 | " \n", 491 | " \n", 492 | " \n", 493 | " \n", 494 | " \n", 495 | " \n", 496 | " \n", 497 | " \n", 498 | " \n", 499 | " \n", 500 | " \n", 501 | " \n", 502 | " \n", 503 | " \n", 504 | " \n", 505 | " \n", 506 | " \n", 507 | " \n", 508 | " \n", 509 | " \n", 510 | " \n", 511 | " \n", 512 | " \n", 513 | " \n", 514 | " \n", 515 | " \n", 516 | " \n", 517 | " \n", 518 | " \n", 519 | " \n", 520 | " \n", 521 | " \n", 522 | " \n", 523 | " \n", 524 | " \n", 525 | " \n", 526 | " \n", 527 | " \n", 528 | " \n", 529 | " \n", 530 | " \n", 531 | " \n", 532 | " \n", 533 | " \n", 534 | " \n", 535 | " \n", 536 | "
NamePosRndPickCarAV
208Tom BradyQB6199160
299Drew BreesQB232147
270LaDainian TomlinsonRB15128
522Julius PeppersDE12126
1071Philip RiversQB14121
8Brian UrlacherLB19118
295Reggie WayneWR130117
1355Aaron RodgersQB124112
1078Ben RoethlisbergerQB111108
544Ed ReedDB124106
\n", 537 | "
" 538 | ], 539 | "text/plain": [ 540 | " Name Pos Rnd Pick CarAV\n", 541 | "208 Tom Brady QB 6 199 160\n", 542 | "299 Drew Brees QB 2 32 147\n", 543 | "270 LaDainian Tomlinson RB 1 5 128\n", 544 | "522 Julius Peppers DE 1 2 126\n", 545 | "1071 Philip Rivers QB 1 4 121\n", 546 | "8 Brian Urlacher LB 1 9 118\n", 547 | "295 Reggie Wayne WR 1 30 117\n", 548 | "1355 Aaron Rodgers QB 1 24 112\n", 549 | "1078 Ben Roethlisberger QB 1 11 108\n", 550 | "544 Ed Reed DB 1 24 106" 551 | ] 552 | }, 553 | "execution_count": 81, 554 | "metadata": {}, 555 | "output_type": "execute_result" 556 | } 557 | ], 558 | "source": [ 559 | "df_clean.sort(['CarAV'], ascending=False)[['Name', 'Pos', 'Rnd', 'Pick', 'CarAV']].head(10)" 560 | ] 561 | }, 562 | { 563 | "cell_type": "code", 564 | "execution_count": 88, 565 | "metadata": { 566 | "collapsed": false 567 | }, 568 | "outputs": [], 569 | "source": [ 570 | "from sklearn.cross_validation import train_test_split\n", 571 | "\n", 572 | "df_prediction = df[['Pos', 'Rnd', 'Pick', 'CarAV']]\n", 573 | "df_prediction = df_prediction.dropna()\n", 574 | "features = ['Pos', 'Rnd', 'Pick']\n", 575 | "X = df_prediction[features]\n", 576 | "X = pd.get_dummies(X)\n", 577 | "y = df_prediction['CarAV']\n", 578 | "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)" 579 | ] 580 | }, 581 | { 582 | "cell_type": "code", 583 | "execution_count": 94, 584 | "metadata": { 585 | "collapsed": false 586 | }, 587 | "outputs": [ 588 | { 589 | "name": "stdout", 590 | "output_type": "stream", 591 | "text": [ 592 | "Test RMSE: 19.0394556784\n" 593 | ] 594 | } 595 | ], 596 | "source": [ 597 | "from sklearn.ensemble import RandomForestRegressor\n", 598 | "import numpy as np\n", 599 | "from sklearn.metrics import mean_squared_error\n", 600 | "clf = RandomForestRegressor(n_estimators=100, n_jobs=-1)\n", 601 | "clf.fit(X_train, y_train)\n", 602 | "pred = clf.predict(X_test)\n", 603 | "print(\"Test RMSE: {0}\".format(np.sqrt(mean_squared_error(y_test, pred))))" 604 | ] 605 | }, 606 | { 607 | "cell_type": "code", 608 | "execution_count": 95, 609 | "metadata": { 610 | "collapsed": false 611 | }, 612 | "outputs": [ 613 | { 614 | "data": { 615 | "text/plain": [ 616 | "" 617 | ] 618 | }, 619 | "execution_count": 95, 620 | "metadata": {}, 621 | "output_type": "execute_result" 622 | }, 623 | { 624 | "data": { 625 | "image/png": "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\n/x8CKAO+75k4tQAAAABJRU5ErkJggg==\n", 626 | "text/plain": [ 627 | "" 628 | ] 629 | }, 630 | "metadata": {}, 631 | "output_type": "display_data" 632 | } 633 | ], 634 | "source": [ 635 | "sns.distplot(y_test - pred)" 636 | ] 637 | }, 638 | { 639 | "cell_type": "code", 640 | "execution_count": 102, 641 | "metadata": { 642 | "collapsed": false 643 | }, 644 | "outputs": [ 645 | { 646 | "data": { 647 | "text/plain": [ 648 | "[(u'Pick', 0.74057355030955418),\n", 649 | " (u'Pos_WR', 0.027251325026239556),\n", 650 | " (u'Pos_QB', 0.026284907953210087),\n", 651 | " (u'Rnd', 0.024608358747377927),\n", 652 | " (u'Pos_LB', 0.023325271548009431),\n", 653 | " (u'Pos_DB', 0.023244069808998812),\n", 654 | " (u'Pos_DE', 0.022416329004330184),\n", 655 | " (u'Pos_RB', 0.020809612266325495),\n", 656 | " (u'Pos_T', 0.019328648430449551),\n", 657 | " (u'Pos_DT', 0.016179252959674748),\n", 658 | " (u'Pos_G', 0.015783498291433298),\n", 659 | " (u'Pos_C', 0.010605214872418485),\n", 660 | " (u'Pos_TE', 0.0098016266470714788),\n", 661 | " (u'Pos_NT', 0.0061282718000366231),\n", 662 | " (u'Pos_CB', 0.0033879088823145376),\n", 663 | " (u'Pos_OLB', 0.0022238058553690535),\n", 664 | " (u'Pos_K', 0.0021160134638889883),\n", 665 | " (u'Pos_ILB', 0.0013145299160797032),\n", 666 | " (u'Pos_P', 0.0012959567575557965),\n", 667 | " (u'Pos_FB', 0.001160939197053856),\n", 668 | " (u'Pos_OL', 0.00097489972575304262),\n", 669 | " (u'Pos_SS', 0.00068067392576227556),\n", 670 | " (u'Pos_FS', 0.00043987713249530035),\n", 671 | " (u'Pos_LS', 3.2781030621886093e-05),\n", 672 | " (u'Pos_DL', 3.2676447975885517e-05)]" 673 | ] 674 | }, 675 | "execution_count": 102, 676 | "metadata": {}, 677 | "output_type": "execute_result" 678 | } 679 | ], 680 | "source": [ 681 | "fi = zip(X.columns, clf.feature_importances_)\n", 682 | "fi = sorted(fi, key=lambda x:x[1], reverse=True)\n", 683 | "fi" 684 | ] 685 | }, 686 | { 687 | "cell_type": "code", 688 | "execution_count": null, 689 | "metadata": { 690 | "collapsed": true 691 | }, 692 | "outputs": [], 693 | "source": [] 694 | } 695 | ], 696 | "metadata": { 697 | "kernelspec": { 698 | "display_name": "Python 2", 699 | "language": "python", 700 | "name": "python2" 701 | }, 702 | "language_info": { 703 | "codemirror_mode": { 704 | "name": "ipython", 705 | "version": 2 706 | }, 707 | "file_extension": ".py", 708 | "mimetype": "text/x-python", 709 | "name": "python", 710 | "nbconvert_exporter": "python", 711 | "pygments_lexer": "ipython2", 712 | "version": "2.7.11" 713 | } 714 | }, 715 | "nbformat": 4, 716 | "nbformat_minor": 0 717 | } 718 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | This repository stores the code for my blog: http://learningwithdata.com/. 2 | 3 | Each post on my blog is a Jupyter Notebook, which is stored here. See the blog for my context around each Notebook. 4 | -------------------------------------------------------------------------------- /TalkPay.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "#TALKPAY" 8 | ] 9 | }, 10 | { 11 | "cell_type": "code", 12 | "execution_count": 137, 13 | "metadata": { 14 | "collapsed": true 15 | }, 16 | "outputs": [], 17 | "source": [ 18 | "import tweepy\n", 19 | "import json\n", 20 | "import re\n", 21 | "import matplotlib.pyplot as plt\n", 22 | "import seaborn as sns\n", 23 | "import numpy as np\n", 24 | "import pandas as pd\n", 25 | "sns.set(style='ticks', palette='Set2')\n", 26 | "%matplotlib inline\n", 27 | " \n", 28 | "# Consumer keys and access tokens, used for OAuth - insert your keys\n", 29 | "consumer_key = ''\n", 30 | "consumer_secret = ''\n", 31 | "access_token = ''\n", 32 | "access_token_secret = ''\n", 33 | " \n", 34 | "# OAuth process, using the keys and tokens\n", 35 | "auth = tweepy.OAuthHandler(consumer_key, consumer_secret)\n", 36 | "auth.set_access_token(access_token, access_token_secret)\n", 37 | " \n", 38 | "# Creation of the actual interface, using authentication\n", 39 | "api = tweepy.API(auth)" 40 | ] 41 | }, 42 | { 43 | "cell_type": "code", 44 | "execution_count": null, 45 | "metadata": { 46 | "collapsed": true 47 | }, 48 | "outputs": [], 49 | "source": [ 50 | "c = tweepy.Cursor(api.search, q='talkpay')\n", 51 | "c_iter = c.items()\n", 52 | "all_text = []\n", 53 | "for tweet in c_iter:\n", 54 | " all_text.append(tweet.text)" 55 | ] 56 | }, 57 | { 58 | "cell_type": "markdown", 59 | "metadata": {}, 60 | "source": [ 61 | "I do probably the most naive approach to extracting the data I want. I just pull out the digits that fall in between \\$ and k. For example, $125k returns 125. This obviously doesn't get all the data and even gets some data we might not care about. For example, some people put multiple salaries over time, for which we maybe only want the most recent. For the sake of quickness and getting more data, I include everything my naive approach finds." 62 | ] 63 | }, 64 | { 65 | "cell_type": "code", 66 | "execution_count": 152, 67 | "metadata": { 68 | "collapsed": false 69 | }, 70 | "outputs": [], 71 | "source": [ 72 | "thous_dollars_raw = [re.findall(r'\\$(\\d*)[k|K]', t, re.DOTALL | re.MULTILINE) for t in all_text]\n", 73 | "thous_dollars = []\n", 74 | "for dollar in thous_dollars_raw:\n", 75 | " if len(dollar) > 0:\n", 76 | " for d in dollar:\n", 77 | " thous_dollars.append(int(d))\n", 78 | "thous_dollars = np.array(thous_dollars)" 79 | ] 80 | }, 81 | { 82 | "cell_type": "code", 83 | "execution_count": 154, 84 | "metadata": { 85 | "collapsed": false 86 | }, 87 | "outputs": [ 88 | { 89 | "data": { 90 | "image/png": [ 91 | "iVBORw0KGgoAAAANSUhEUgAAAmoAAAFXCAYAAAAS3mKRAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\n", 92 | "AAALEgAACxIB0t1+/AAAIABJREFUeJzt3XucXWV97/HPTiBRcLjZoKOkjKj8PLVSAQVKuYSC1Vgt\n", 93 | "qO2xp4hCUaRSwQsapEoGxSoaOEq5VLmlWEorFLRUA1igQL2AKBUB+4soOWgNNtIg4aLJJPv8sdY0\n", 94 | "mzEze08ya++1Zz7v1ysv9rr/9iwzfvOs51lPo9lsIkmSpPqZ1esCJEmStGkGNUmSpJoyqEmSJNWU\n", 95 | "QU2SJKmmDGqSJEk1ZVCTJEmqKYOapK6LiOsiYveImBMRWa57eURc0MGxSyPiveXnDRGxU9X1tlx7\n", 96 | "+4i4qQvXeWtE/FnV15FUfwY1SV0VEVsBu2XmcuC3gTvKTS8GdungFM3yTy/sCLy8C9c5ANimC9eR\n", 97 | "VHNb9boASTNHRHwZCGC7iLgLeC7waEScBhwLbB8RFwNvBT4F7AsMAA3grZn5tXHO+2zgX4DzM/P8\n", 98 | "iNgAfAI4DNgWODUzr4mIbYELgBcCOwFrgD8BfgHcA+ySmY9GRANI4A2Z+d2WS10KPL2s/Wbg8cz8\n", 99 | "UHn9nwCHZubNEXEk8AeZ+caIOBb4M4p/GD8M/HlmZkTMAc4EDgJmA3cBJ5Y1vxY4LCKeKK9zMTC3\n", 100 | "/DlclJltWx4lTQ+2qEnqmsx8NfBJYElm7gncRhGGPgycBtyWmccC+wHPzsz9MvPFwGXAKeOcdj5w\n", 101 | "I/DRzDy/Zf1jmfky4H8Dl0TErwGvAv47M387MwP4JkVwerA8x5HlsYcAq8aENICjgSfL2q8pz0f5\n", 102 | "34coQhbA4cCVEXEw8GbgwMzcq/zuV5f7nAKsy8y9M/OlwErg45l5DfBPwNllIHsf8E/ld3k1cFAZ\n", 103 | "JCXNALaoSeq2l1KEHCged95Xfv6f8JGZX4+Ih8t+WrsBC4BHxznfl4EfZeYVY9afW57ruxHxXeCg\n", 104 | "zPzHiHggIt4JvKA872gr3XkUrXAXAG8v/ztWa0D6KrBLRMyjCGpnAEdHxDBFK9nRwHB5na9FxOhx\n", 105 | "O0bEjsBrKFoQX1GunwP8dBPXuhq4LCL2oWg1PDEznftPmiFsUZPUNeWjz6OAJWV42gW4IyLeQUu/\n", 106 | "s4j4feBLwAbgC8BfM/7vq+OAZkS8Z8z69S2fZwEjZfC7CHgMuBy4ouW8NwLbRMShwIHA5yf6Lpm5\n", 107 | "AbiWInDtC1wIDAJ/BHwtM58oz/25zNyzbIXbC9gvM1eX205s2bYvRevfqGZ5nS9RPKr9PLAn8N2I\n", 108 | "2G2i2iRNHwY1Sd30R8CKzHwJ8EGK/lZ7lo8sR4Cty/0OA67NzM8A3wJeR9GPC57aqgXwdeAtwAcj\n", 109 | "4sUt698MEBF7UfSLuxX4PWBpZl4KLAf+YPS8ZSvV+RRB7vLMXLuJ+kda6oCiZfD9wN2ZuQ64CfgY\n", 110 | "cFW5/Qbg/5R92ADeVq4DuB54ZznydRZFGP1oy3XmlPX/HfDGzPwH4ASKlsVOBl1ImgYMapK6aX/g\n", 111 | "38rPBwK3tGz7OvCiiPhHitBycNlp/8vAV4Chsm9W62O/0Van5cBHgM9FxGjY2zcivgVcAvxxZj4C\n", 112 | "LAHeHhF3Av9A0Vr3/JbzXUYRgj4zTv0/Ab4dEfeVjy9vAp5T1gdF+NqZoqWNzLyBYsDAVyLiO8Cb\n", 113 | "KEInZb0rKAYR3Evx+/i95bZlwIkRsQj4MHBkRPw78A3g6sy8dZz6JE0zjWbTrg6Sppdy1OezM/O/\n", 114 | "JnncHwNHZebvV1OZJE1OZYMJImI2RZ+N3Sn+1Xs88EtgKUW/k3uAE+wUK6kCk/69EhH/CswD3jDl\n", 115 | "1UjSZqpy1OdrgA2ZeUA5RP0vy/WnZuat5RvID6d49CBJUyYzZ7ff61eOWVBBKZK0RSrro5aZX6QY\n", 116 | "4g4wBKwG9m7pW7GMje8ckiRJ0hiVvkctM9dHxFLgCIrRXq9o2fwYsP3mnLecgmYX4MeZObKldUqS\n", 117 | "JNVR5S+8zcyjI+JZFPP5Pa1l0wDwSLvjy5dHLh5n8/MoRk1JkiRNO5U9+oyIoyLiA+XikxQvn7yz\n", 118 | "7K8GsJDivUYTyszhzGy0/qEIaJIkSdNalS1qVwFLI+IWipdYngT8B3BhORnxfWx8KaQkSZLGqCyo\n", 119 | "ZeaTwBs3sWlBVdeUJEmaTpyZQJIkqaYMapIkSTVlUJMkSaopg5okSVJNGdQkSZJqyqAmSZJUUwY1\n", 120 | "SZKkmjKoSZIk1ZRBTZIkqaYMapIkSTVlUJMkSaopg5okSVJNGdQkSZJqaqteF1BHjUZjDjA0iUNW\n", 121 | "NJvNtRWVI0mSZiiD2qYNLVyyKAcG57Xdcc3KVSw7+cwAlldfliRJmkkMauMYGJzHDvMHe12GJEma\n", 122 | "weyjJkmSVFMGNUmSpJoyqEmSJNWUQU2SJKmmDGqSJEk1ZVCTJEmqKYOaJElSTRnUJEmSasqgJkmS\n", 123 | "VFMGNUmSpJoyqEmSJNWUQU2SJKmmDGqSJEk1ZVCTJEmqKYOaJElSTRnUJEmSasqgJkmSVFMGNUmS\n", 124 | "pJoyqEmSJNWUQU2SJKmmDGqSJEk1ZVCTJEmqqa2qOnFEbA1cAuwKzAXOAH4M/DOwvNztgsz8fFU1\n", 125 | "SJIk9bPKghpwJLAqM4+KiB2B7wCnA2dl5tkVXleSJGlaqDKoXQlcVX6eBawD9gYiIg4Hvg+8KzMf\n", 126 | "q7AGSZKkvlVZUMvMxwEiYoAitP0F8DTgwsy8KyJOBRYD76uqhrppNBpzgKFJHLKi2WyuragcSZJU\n", 127 | "c1W2qBER84GrgfMy8+8jYvvM/Hm5+QvAOR2cY5gi0E0HQwuXLMqBwXltd1yzchXLTj4z2NifT5Ik\n", 128 | "zTBVDiZ4FnAD8I7MvLlcfV1EnJiZ3wQOBe5sd57MHAaGx5x7CHhgKuvtloHBeewwf7DXZUiSpD5Q\n", 129 | "ZYvaqcD2wGkRcVq57l3A/42IdcBK4LgKry9JktTXquyjdhJw0iY2HVDVNSVJkqYTX3grSZJUUwY1\n", 130 | "SZKkmjKoSZIk1ZRBTZIkqaYMapIkSTVV6QtvZ4L1IyMAQ41Go5PdhyotRpIkTSsGtS30xKrVLFyy\n", 131 | "6PpOZht46O7sQkWSJGm6MKhNgU5nG1izclUXqpEkSdOFfdQkSZJqyqAmSZJUUwY1SZKkmjKoSZIk\n", 132 | "1ZRBTZIkqaYMapIkSTVlUJMkSaopg5okSVJNGdQkSZJqyqAmSZJUUwY1SZKkmjKoSZIk1ZRBTZIk\n", 133 | "qaYMapIkSTVlUJMkSaqprXpdgOqt0WjMAYYmcciKZrO5tqJyZjzvhyTNLAY1tTO0cMmiHBic13bH\n", 134 | "NStXsezkMwNYXn1ZM5b3Q5JmEIOa2hoYnMcO8wd7XYZK3g9JmjnsoyZJklRTBjVJkqSaMqhJkiTV\n", 135 | "lEFNkiSppgxqkiRJNWVQkyRJqimDmiRJUk35HrVpwjfWS5I0/RjUpg/fWC9J0jRjUJtGfGO9JEnT\n", 136 | "i33UJEmSasqgJkmSVFMGNUmSpJqqrI9aRGwNXALsCswFzgC+BywFNgD3ACdkZrOqGiRJkvpZlS1q\n", 137 | "RwKrMvMg4FXAecBZwKnlugZweIXXlyRJ6mtVBrUrgdNarrMO2Cszby3XLQMOq/D6kiRJfa2yR5+Z\n", 138 | "+ThARAxQhLYPAktadnkM2L6q60uSJPW7St+jFhHzgauB8zLzioj4RMvmAeCRDs4xDCyupkJJkqT6\n", 139 | "qnIwwbOAG4B3ZObN5eq7IuLgzLwFWAjc2O48mTkMDI859xDwwFTWK0mSVDdVtqidSvFo87SIGO2r\n", 140 | "dhJwTkTMAe4Drqrw+pIkSX2to6AWEUcCvwF8DHh9Zl7W7pjMPIkimI21YDIFSpIkzVRtR31GxJnA\n", 141 | "q4HXA1sDx0TE2VUXJkmSNNN18nqOVwJHAb/IzNXAKyj6l0mSJKlCnQS19WOW525inSRJkqZYJ0Ht\n", 142 | "SuDvgZ0i4t3AbcAVlVYlSZKk9oMJMvPjEfEq4EFgPnBaZv5z5ZVJkiTNcOMGtYg4GBidMP1J4NqW\n", 143 | "bQe1TAUlSZKkCkzUonY6G4PaphwyxbVIkiSpxbhBLTMXtC5HxDOB9ZnZdtonSZIkbbm2fdQi4qXA\n", 144 | "3wC7ALMi4j7gLZl5f9XFSZIkzWSdjPq8BPiLzHxmZu4ILAEurbYsSZIkdRLUaB3lmZnXAM+orCJJ\n", 145 | "kiQBnc31eXNEnAJcQPGi2yOB+yJiZ4DM/K8K65MkSZqxOglqb6AY/fn2MetvL9fvNtVFSZIkqbMX\n", 146 | "3g51oQ5JkiSN0cmoz52Bc4FDy/1vAo7PzJ9WXJskSdKM1slggs8Ad1A84twV+DpwcZVFSZIkqbM+\n", 147 | "artl5utalj8REW+uqiBJkiQVOmlR2xARvz66EBG7AmurK0mSJEnQWYvah4CvRcQd5fJ+wHHVlSRJ\n", 148 | "kiTobNTnP0fEXsDLKVrgjvfdaZIkSdVr++gzIuYCbwPeCNwGHB8Rc6ouTJIkaabrpI/aeRRTRu0N\n", 149 | "jAAvxFGfkiRJleskqO2dmR8A1mbmY8Cbgb2qLUuSJEmdjvpsfdT5a8CGiuqRJElSqZOg9mngX4Bn\n", 150 | "R8SngW8Bn6q0KkmSJHU06vOyiPgWcAhFsHtNZt5deWWSJEkz3LhBLSJmAydQDB74amae27WqJEmS\n", 151 | "NOGjz/OBPwSeAD4QEYu7U5IkSZJg4qB2MLAgMxcBvwu8oTslSZIkCSYOak9m5gaAzHwYR3pKkiR1\n", 152 | "VSejPkc1K6tCkiRJv2KiUZ+7RsQlQKNc/vWW5WZm/mnl1UmSJM1gEwW19/DUVrRbyuUGfdi61mg0\n", 153 | "5gBDHe7e6X6VWT8yAjDUaDTa7TpqqLJiOrQZNa9oNptrq6tIkqT+Nm5Qy8ylXayjG4YWLlmUA4Pz\n", 154 | "2u740N3ZhXIm9sSq1Sxcsuj6TuqF/qt5zcpVLDv5zACWV1+ZJEn9qe0Lb6eTgcF57DB/sO1+a1au\n", 155 | "6kI17XVaL/RnzZIkaWLjDiaIiGd0sxBJkiQ91USjPm8GiIjzu1SLJEmSWkz06HMgIi4HXhURT2Pj\n", 156 | "6E9w1KckSVLlJgpqvwcsAA6gGPE5OtpzUqM+I2Jf4OOZeUhE7AlcC3y/3HxBZn5+M+qWJEma9iYa\n", 157 | "9fkgcFlEfAf4HhDAbOCezBzp5OQR8X7gTcBj5aq9gbMz8+wtqlqSJGkG6GRmgq0pXqHwN8ClwIMR\n", 158 | "sV+H578feD0bH5vuDfx+RNwSERc5YEGSJGl8nbye4xzgjZl5O0AZ0s4B9ml3YGZeHRFDLatuBz6b\n", 159 | "mXdFxKnAYuB9k65aM8okX1a8dfnfdVO87yhf0itJ6ppOgtq2oyENIDO/UQ4u2BzXZObPy89foAh8\n", 160 | "E4qIYYpAp5lrUi8r3nbeTkz1vuBLeiVJ3ddJUFsdEUdk5hcAIuJ1wMObeb3rIuLEzPwmcChwZ7sD\n", 161 | "MnMYGG5dV7bSPbCZNagPTeZlxVXsK0lSL3QS1I4D/jYiLqboa/YDigECkzE6SvR44LyIWAesLM8t\n", 162 | "SZKkTWgb1DJzObBP2fF/VmY+OpkLZOYKYP/y83coXvchSZKkNjqe6zMzH2u/lyRJkqZKJ6/nkCRJ\n", 163 | "Ug+0DWoRcXw3CpEkSdJTddKi9s7Kq5AkSdKv6KSP2o8i4iaKl9X+olzXzMwPV1eWJEmSOglq3yj/\n", 164 | "O/qKjcZ4O0qSJGnqdPJ6juHy1RzPB74LbOMIUEmSpOp1MpjgUODfgS8Cg8CKiHhl1YVJkiTNdJ0M\n", 165 | "JvgYcCCwOjP/EzgY+GSlVUmSJKmjoDYrM1eOLmTmvWzsryZJkqSKdDrq87UAEbEDcALwYKVVSZIk\n", 166 | "qaMWteOBI4H5wA+BPXEydUmSpMp1Murzp8AfR8R2wLrMfLL6siRJktQ2qEXEbwBLKV7PQUR8D3hL\n", 167 | "Zv6g2tIkSZJmtk76qF0IDGfmlwEi4nXAxcCCCutShdaPjAAMNRodvbt4qNJi+sgkf24AK5rN5trq\n", 168 | "KpIkTXedBLWnj4Y0gMy8JiJOq7AmVeyJVatZuGTR9QOD89ru+9Dd2YWK+sNkfm5rVq5i2clnBrC8\n", 169 | "+sokSdPVuEEtInaimC7q2xHxbuAiYD3FwIJbu1OeqjIwOI8d5g+23W/NylVdqKZ/dPpzkyRpKkzU\n", 170 | "ovZtNr4v7VDgxPJzo1x/UoV1SZIkzXjjBrXMHOpiHZIkSRqjk1GfL6J4b9qOLaubmfmnlVUlSZKk\n", 171 | "jgYTXANcAdzdss4ppCRJkirWSVBbnZkfrrwSSZIkPUUnQW1pRHwUuBEYGV2ZmY78lCRJqlAnQW0B\n", 172 | "8HJg/zHrD5nyaiRJkvQ/OglqLwN2z0z7pUmSJHXRrA72+S6wR9WFSJIk6ak6aVF7PsXsBA8Bo/MW\n", 173 | "NjNzt+rKkiRJUidB7XCK2Qha+RhUkiSpYp0OJthUMLtsakuRJElSq06C2iFsDGpbAwdSTMpuUJMk\n", 174 | "SapQ26CWmUe3LkfETsDnqypIkiRJhU5GfY71ODA0xXVIkiRpjE4mZb+5ZbEB7AZ8qbKKJEmSBHTW\n", 175 | "R+30ls9N4GeZeW9F9UjqgUajMYfJtZSvaDaba9vvJknaEuMGtYj49fLjDze1LTMfrKwqSd02tHDJ\n", 176 | "ohwYnNd2xzUrV7Hs5DMDWF59WZI0s03UonYrm34tx3PK42ZXUpGknhgYnMcO8wd7XYYkqcW4QS0z\n", 177 | "h1qXI+IZwNnA7wFvq7YsSZIkdTTqMyIOo5jzE+AlmfmV6kqSJEkStBlMULainQW8EnibAU2SJKl7\n", 178 | "JhpMcBhwIXADRSvams25QETsC3w8Mw+JiBcAS4ENwD3ACZnpvKGSJEmbMFGL2g3AOoo+aXdHROu2\n", 179 | "Zmbu1u7kEfF+4E3AY+Wqs4FTM/PWiLiAYsL3L2xO4ZIkSdPdREGtbRDrwP3A64HPlct7Zeat5edl\n", 180 | "FCHQoCZJkrQJE436XLGlJ8/MqyNiqGVVo+XzY8D2W3oNSZu2fmQEYKjRaLTbFZwWTpJqqZOZCabS\n", 181 | "hpbPA8Aj7Q6IiGFgcVUFSdPVE6tWs3DJous7eYntQ3dnFyqSJE1Wt4PaXRFxcGbeAiwEbmx3QGYO\n", 182 | "A8Ot68pWugcqqE+aVjp9ie2alau6UI0kabK6FdRGR3a+F7gwIuYA9wFXden6kiRJfafyoFb2ddu/\n", 183 | "/Px9YEHV15QkSZoOOpqZQJIkSd1nUJMkSaopg5okSVJNGdQkSZJqqtuv55hSIyMjsxuNxkCHu29b\n", 184 | "aTFSi0m+bBZgRbPZXFtdRZKkftTXQe3JWRsOOOwjJ509Z5unt53YfdXyB/r6u6q/TOZls2tWrmLZ\n", 185 | "yWcGsLz6yiRJ/aSvw0tj9uzZz93rxTvNHWjfWDZrq9ldqEjaqNOXzUqSNB77qEmSJNWUQU2SJKmm\n", 186 | "DGqSJEk1ZVCTJEmqKYOaJElSTRnUJEmSasqgJkmSVFMGNUmSpJoyqEmSJNWUQU2SJKmmDGqSJEk1\n", 187 | "ZVCTJEmqKYOaJElSTRnUJEmSasqgJkmSVFMGNUmSpJoyqEmSJNWUQU2SJKmmDGqSJEk1ZVCTJEmq\n", 188 | "KYOaJElSTRnUJEmSasqgJkmSVFMGNUmSpJoyqEmSJNWUQU2SJKmmDGqSJEk1ZVCTJEmqKYOaJElS\n", 189 | "TRnUJEmSasqgJkmSVFNb9eKiEfFt4Ofl4g8z89he1CFJklRnXQ9qEfE0gMw8pNvXliRJ6ie9aFH7\n", 190 | "LWCbiLi+vP6pmXl7D+qQJEmqtV4EtceBT2bmxRHxQmBZROyemRt6UIt6ZP3ICMBQo9HoZPehSouR\n", 191 | "JKmmehHUlgP3A2Tm9yPiYWAQ+M9N7RwRw8DirlWnrnhi1WoWLll0/cDgvLb7PnR3dqEiSZLqpxdB\n", 192 | "7RhgD+CEiHgOsB2wcrydM3MYGG5dFxFDwAOVVaiuGBicxw7zB9vut2blqi5UI0lS/fQiqF0MXBoR\n", 193 | "t5bLx/jYU5Ik6Vd1Pahl5ghwVLevK0mS1G984a0kSVJNGdQkSZJqyqAmSZJUUwY1SZKkmjKoSZIk\n", 194 | "1VRPJmWXpG5qNBpzmNwMFyuazebaisqZUtP5u0kyqEmaGYYWLlmUncyEsWblKpadfGZQzKLSD6bz\n", 195 | "d5NmPIOapBmh05kw+tF0/m7STGcfNUmSpJoyqEmSJNWUQU2SJKmmDGqSJEk1ZVCTJEmqKYOaJElS\n", 196 | "TRnUJEmSasqgJkmSVFMGNUmSpJoyqEmSJNWUQU2SJKmmDGqSJEk1ZVCTJEmqKYOaJElSTRnUJEmS\n", 197 | "amqrXhcgSZLUbxqNxhxgqNP9m83m8s25jkFNkiRp8oYWLlmUA4Pz2u64ZuUqgMbmXMSgJkmStBkG\n", 198 | "Buexw/zBSq9hHzVJkqSaMqhJkiTVlEFNkiSppgxqkiRJNWVQkyRJqimDmiRJUk0Z1CRJkmrKoCZJ\n", 199 | "klRTBjVJkqSaMqhJkiTVlEFNkiSppgxqkiRJNWVQkyRJqqmtun3BiJgFnA/sAfwSeGtm/qDbdUiS\n", 200 | "JNVdL1rUjgDmZOb+wCnAWT2oQZIkqfZ6EdR+B7gOIDNvB17WgxokSZJqr+uPPoHtgEdbltdHxKzM\n", 201 | "3DCJc8wGaIxs2G75tf/6o62fPrftsasf/MncZ/3mC5/9y0fWtD35z1f8hHVrHqdf9q1LHdN53yrP\n", 202 | "/fh/PczAwMC+z3zmM5/bbt+BgYFd/nv5ip7+LCZTb11M5ufWb99vOn83qc4m+3cvIoaAH2fmyGSu\n", 203 | "02g2m5tZ4uaJiLOAb2TmleXyjzJz/gT7DwOLu1SeJElSVZ6XmSsmc0AvWtS+CrwWuDIi9gPunmjn\n", 204 | "zBwGhlvXRcRc4BfAC4D1lVSpKj0APK/XRWizef/6l/euv3n/+tsDwI8ne1AvWtQabBz1CXBMZi7f\n", 205 | "jPM0M7MxpcWpK7x3/c3717+8d/3N+9ffNvf+db1FLTObwJ91+7qSJEn9xhfeSpIk1ZRBTZIkqab6\n", 206 | "Oaid3usCtNm8d/3N+9e/vHf9zfvX3zbr/nV9MIEkSZI6088tapIkSdOaQU2SJKmmDGqSJEk1ZVCT\n", 207 | "JEmqKYOaJElSTfVirs/NFhGz2Dj91C+Bt2bmD3pblcYTEfsCH8/MQyLiBcBSYANwD3BCZjYj4m3A\n", 208 | "ccAIcEZmfqlnBQuAiNgauATYFZgLnAF8D+9fX4iI2cCFwO5AEzie4vflUrx/fSEidga+BRxKcc+W\n", 209 | "4r3rCxHxbeDn5eIPgY+xhfev31rUjgDmZOb+wCnAWT2uR+OIiPdT/J/F3HLV2cCpmXkQ0AAOj4hn\n", 210 | "A+8E9gdeCXwsIub0ol49xZHAqvJevQo4j+LvmvevP7wG2JCZBwAfBP4S71/fKP+h9BngcYp75e/O\n", 211 | "PhERTwPIzEPKP8cyBfev34La7wDXAWTm7cDLeluOJnA/8HqK/2EC7JWZt5aflwGHAS8HvpqZ6zLz\n", 212 | "0fKYPbpeqca6Ejit/DwLWIf3r29k5heBt5eLQ8BqYG/vX9/4JHABsLJc9u9e//gtYJuIuD4iboyI\n", 213 | "/ZiC+9dvQW074NGW5fXl41DVTGZeTdGkO6rR8nkNsD3F/fz5JtarhzLz8cx8LCIGKELbB3nq7wrv\n", 214 | "X81l5vqIWAp8Grgc//71hYg4mqI1+4ZyVQPvXT95HPhkZr6SosvB5WO2b9b967eQ8ygw0LI8KzM3\n", 215 | "9KoYTUrrfdoOeIRfvZ8DFP/6V49FxHzgJuCyzLwC71/fycyjgQAuAp7Wssn7V1/HAK+IiJuBlwJ/\n", 216 | "A8xr2e69q7fllOEsM78PPAw8q2X7Zt2/fgtqXwVeDVA2Kd7d23I0CXdFxMHl54XArcAdwIERMTci\n", 217 | "tgf+F0VnS/VQRDwLuAF4f2YuLVd7//pERBwVER8oF58E1gN3ev/qLzMPzswFmXkI8O/Am4HrvHd9\n", 218 | "4xjKvvMR8RyKAHbDlt6/vhr1CVxD8a+Nr5bLx/SyGHVkdDLZ9wIXlh0m7wOuKke+nAPcRvGPhlMz\n", 219 | "c22P6tRGp1I0w58WEaN91U4CzvH+9YWrgKURcQuwNcW9+w/8+9ePmvi7s59cDFwaEaN90o6haFXb\n", 220 | "ovvnpOySJEk11W+PPiVJkmYMg5okSVJNGdQkSZJqyqAmSZJUUwY1SZKkmjKoSZIk1VS/vUdNUs1E\n", 221 | "xLkU8/DOAV5A8a4gKKYvGgKamXl6b6qbWETcA7w6Mx/cgnO8GjgfuC0zj2pZvxQ4BPhvin8UN4Al\n", 222 | "mXlZm/MtBW4GbgFuzsznbW5tkvqfQU3SFsnMPweIiF2Bf83MPUe3RcTinhXWmal4keQfAh/NzAs3\n", 223 | "ce4PjQaziHgecFtE/Gdm3timptE/kmY4g5qkqdIYZ/0+5WwizwUuzczTI2IW8CngdykCyecy8xMR\n", 224 | "sQBYXE6h09q6dA1wBRvnzTs9M68tp2Y5A9gG2JFi2quryuMeAfYGdin3XxoROwKfA3almJfvGeV1\n", 225 | "9gA+Q/E78RfAMZl5f+uXiIjXAB+haB37IfB24A+Aw4FDI2JDZl483s8kMx+IiE8D7wBujIjdgc+W\n", 226 | "dT8OnJiZd27q2Ij4TeCcst6dgbMy868iYhjYD5gPnAs8nWLaoQ3AHZl5/KZviaR+YR81SVVqUASL\n", 227 | "BRSh6X0R8QzgeIrg9hJgH+AN5SPEsa1Io8tHAA9k5suANwEHlOv/HDg2M/cG3gqc1nLsLpl5IPBa\n", 228 | "YEm57sPAdzLzJcCZFAGnAbyLIvy8HPgrivDzPyJiZ+CvgcMz87co5h0+NzMvAv6JouVsbEjblHuB\n", 229 | "F5Wf/xb4VHm+dwNXldPMbMqxwEcycx+KcPvRlm1zMvPFwIXAKRQ/572BDeV8g5L6mEFNUpWawLLM\n", 230 | "XJeZDwM/A3ai6Lu1NDObmfkkcDlw6ATn+BpwRERcQxHSzii3vQnYIyI+CLwH2LblmBvKz/eW14Qi\n", 231 | "MF4BkJl3UEyE3AS+BJwbERcBa4G/G1PDPhQtVKN92S4cU+94rYmb+i5PRsS2wPMz8wtlLbdT9GWL\n", 232 | "cY57L7BNRJxCEdK2bdl2e3mOEYqf053AYuC8zPxJh3VJqimDmqSqrW/53KQINaOd60fNonjs2Byz\n", 233 | "fmugUT6GfBFFoDsQuKPc/m/AyyjCyUd56u+0XwJkZmsrXXPMPiPlPv8I7FWe910UrWetxgaxBp11\n", 234 | "HRnbQrgHRXAc+/3bnfNKikes9wIfaDm2SfGoFoDMPIKitbIBXBcRB3VQo6QaM6hJ6oWbgLdExKyI\n", 235 | "2Ab4k3Ldz4DdImJuROxEEcqIiOMp+pldBZwA7Fz2N3shRZ+264BXArPL84/XwvUV4OjynC+hePTa\n", 236 | "iIi/A/Zm2oOqAAABRklEQVTJzM9SPD7da8xxdwD7lQMmAI4r622ntZ/ZCyn6p12QmWuAH0TE68pt\n", 237 | "+1H0v7tnnPoPK7/ntRStgpT9/FrP/2sRcR9wT2YupmhRfEkHNUqqMQcTSJpKmxqpuKl+Z58Bdge+\n", 238 | "Q9Fq9rnM/CJARHyJouVoBXBruf/lwBURcTewjiK0rC4fVd4bET+lGHAwtwx+Y0dNjn5eDFwaEfcC\n", 239 | "9wP/UW77OHBRRHyIopXt3a0FZ+ZPI+I44JqyH9kKin5jE31vgA9HxLvK7SPAezLzG+W2NwF/HRGn\n", 240 | "U7SKvT4z10XE6Plav8Mw8G8R8RBwG/A94Hmt+2TmzyLis8A3I+IJ4P8BS8epS1KfaDSbjgCXJEmq\n", 241 | "Ix99SpIk1ZRBTZIkqaYMapIkSTVlUJMkSaopg5okSVJNGdQkSZJqyqAmSZJUUwY1SZKkmvr/Ld5A\n", 242 | "xC1zTzYAAAAASUVORK5CYII=\n" 243 | ], 244 | "text/plain": [ 245 | "" 246 | ] 247 | }, 248 | "metadata": {}, 249 | "output_type": "display_data" 250 | } 251 | ], 252 | "source": [ 253 | "plt.figure(figsize=(10,5))\n", 254 | "plt.hist(thous_dollars, bins=50)\n", 255 | "plt.xlabel(\"Thousands of Dollars\")\n", 256 | "plt.ylabel(\"Number of People\")\n", 257 | "plt.title(\"#talkpay tweets\")\n", 258 | "sns.despine()" 259 | ] 260 | }, 261 | { 262 | "cell_type": "code", 263 | "execution_count": 142, 264 | "metadata": { 265 | "collapsed": false 266 | }, 267 | "outputs": [ 268 | { 269 | "data": { 270 | "text/plain": [ 271 | "count 315.000000\n", 272 | "mean 96.530159\n", 273 | "std 69.642089\n", 274 | "min 2.000000\n", 275 | "25% 42.000000\n", 276 | "50% 84.000000\n", 277 | "75% 135.000000\n", 278 | "max 500.000000\n", 279 | "dtype: float64" 280 | ] 281 | }, 282 | "execution_count": 142, 283 | "metadata": {}, 284 | "output_type": "execute_result" 285 | } 286 | ], 287 | "source": [ 288 | "pd_series = pd.Series(thous_dollars)\n", 289 | "pd_series.describe()" 290 | ] 291 | }, 292 | { 293 | "cell_type": "markdown", 294 | "metadata": {}, 295 | "source": [ 296 | "It looks like we got 315 salaries from our approach - not too bad. Also, the median salary comes out to be \\$84k with the mean being pulled up to \\$96.5k from the few large outliers we have. Virtually all of our data falls below \\$200k and 75 percent of it below \\$135k. \n", 297 | "\n", 298 | "So - it is kind of interesting to look at this data. I would be very hesitant to really infer much given the nature of the data and my naive way of extracting it. But still a fun, quick side project :)" 299 | ] 300 | } 301 | ], 302 | "metadata": { 303 | "kernelspec": { 304 | "display_name": "Python 2", 305 | "language": "python", 306 | "name": "python2" 307 | }, 308 | "language_info": { 309 | "codemirror_mode": { 310 | "name": "ipython", 311 | "version": 2 312 | }, 313 | "file_extension": ".py", 314 | "mimetype": "text/x-python", 315 | "name": "python", 316 | "nbconvert_exporter": "python", 317 | "pygments_lexer": "ipython2", 318 | "version": "2.7.9" 319 | } 320 | }, 321 | "nbformat": 4, 322 | "nbformat_minor": 0 323 | } 324 | -------------------------------------------------------------------------------- /Top100_OT.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tfolkman/learningwithdata/96538dd54a300bb60b8f468b2410f741ff83943e/Top100_OT.png -------------------------------------------------------------------------------- /us_state_map_makefile: -------------------------------------------------------------------------------- 1 | build/gz_2010_us_040_00_20m.zip: 2 | mkdir -p $(dir $@) 3 | curl -o $@ http://www2.census.gov/geo/tiger/GENZ2010/$(notdir $@) 4 | 5 | build/gz_2010_us_040_00_20m.shp: build/gz_2010_us_040_00_20m.zip 6 | unzip -od $(dir $@) $< 7 | touch $@ 8 | 9 | build/states.json: build/gz_2010_us_040_00_20m.shp state_data.csv 10 | node_modules/.bin/topojson \ 11 | -o $@ \ 12 | --id-property='STATE,id' \ 13 | --external-properties=state_data.csv \ 14 | --properties='name=state' \ 15 | --properties='rate=+d.properties["value"]' \ 16 | --properties='rank=+d.properties["rank"]' \ 17 | --properties='cost=+d.properties["cost"]' \ 18 | --properties='number=+d.properties["n_schools"]' \ 19 | --projection='width = 960, height = 600, d3.geo.albersUsa() \ 20 | .scale(1280) \ 21 | .translate([width / 2, height / 2])' \ 22 | --simplify=.5 \ 23 | --filter=none \ 24 | -- states=$< 25 | 26 | --------------------------------------------------------------------------------