├── .gitignore ├── 0_Getting_Started.ipynb ├── 1_Python_Data_Tools.ipynb ├── 2_Storing_Data_Module.ipynb ├── 3_Data_Collection.ipynb ├── 4_Exploring_Data.ipynb ├── 5_Data_Analysis.ipynb ├── 6_Data_Cleaning.ipynb ├── 7_Web_Apps.ipynb ├── Appendix.ipynb ├── Exercise Solutions.ipynb ├── Projects.ipynb ├── README.md ├── artist_metrics_small.pkl ├── artists.csv ├── artists.tsv ├── artists_no_column_names.csv ├── artists_updated.tsv ├── checkout_times.txt ├── ep_data.json ├── height_weight.csv ├── height_weight.txt ├── nbs.db └── nbs_top_artists_app.py /.gitignore: -------------------------------------------------------------------------------- 1 | .ipynb_checkpoints/ 2 | *.pyc 3 | .DS_Store 4 | -------------------------------------------------------------------------------- /0_Getting_Started.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "Introduction to Data Science\n", 8 | "===\n", 9 | "Welcome to our Introduction to Data Science. I've broken the material up into 7 modules that are inteded to be executed sequentially. I expect that people will come to this material with different backgrounds and different levels of experience, so feel free to skip any of the modules for the material that you're already comfortable with.\n", 10 | "\n", 11 | "There's a table of contents at the bottom of this notebook for those who want to skip ahead and browse what's available.\n", 12 | "\n", 13 | "Python\n", 14 | "-----\n", 15 | "Throughout this course we'll be putting together a \"data science toolbox\", a set of resouces that you'll use to collect, clean, store, explore, visualize, and analyze data. There are several good platforms for doing these tasks, and in this tutorial we'll be using the Python programming language for almost all of them.\n", 16 | "\n", 17 | "Python's major advantages are that\n", 18 | "1. it's free\n", 19 | "2. it's easy to learn and use\n", 20 | "3. there's a Python library that solves almost every problem we'll come up against\n", 21 | "\n", 22 | "Python comes with a core set of libraries, but a number of the data tools we'll need are not included. You could download the libraries for these tools one-by-one, but there are a number of dependencies that make this process a little bit tedious. Instead, I recommend downloading the Anaconda distribution of Python provided by Continuum Analytics [https://docs.continuum.io/anaconda/install]. It comes with almost all of the libraries you'll ever need *and* it takes care of all of the dependency issues that would otherwise make the process a huge pain in the ass.\n", 23 | "\n", 24 | "There aren't many pre-requisites for this course, but you should have at least a basic familiarity with Python. If you don't have much experience using Python there are a few good online tutorials, including:\n", 25 | "1. https://docs.python.org/2/tutorial/index.html\n", 26 | "2. http://www.codecademy.com/en/tracks/python\n", 27 | "\n", 28 | "The first comes directly from python, and, if you can get through it, is probably the best option. If the first option is a little over your head, the second tutorial from code academy is a little bit easier to get started with. It even allows you to complete all of the exercises right in your browser.\n", 29 | "\n", 30 | "If you have other recommendations for python tutorials, please let me know!\n", 31 | "\n", 32 | "\n", 33 | "The Command Line\n", 34 | "--\n", 35 | "One great feature of python is that it comes with a command line tool that allows you to run python code one line at a time and print the results to your screen. Getting to the command line will be slightly different depending on whether you're operating system is Mac, Windows, or Linux.\n", 36 | "\n", 37 | "On Mac you'll use the Terminal app. On Windows you'll open the Command Prompt program. If you're using Linux, I'll assume you've already skipped this section. Regardless of whether you're on Mac, Windows, or Linux, I'll be referring to your command line tool as a \"terminal\".\n", 38 | "\n", 39 | "\n", 40 | "Github\n", 41 | "--\n", 42 | "All of the modules and supporting material for this course are hosted on github here: https://github.com/adamhajari/Introduction-to-Data-Science. If you don't already have one, setup a github account, fork this repo [https://help.github.com/articles/fork-a-repo/], and clone your forked copy of the repo to whatever computers you'll be working from.\n", 43 | "\n", 44 | "\n", 45 | "IPython and Jupyter Notebook\n", 46 | "--\n", 47 | "IPython is an alternative command line tool to the one that comes with python. It's part of the Anaconda python distribution, so if you've installed Anaconda you can open an ipython shell just by typing \n", 48 | "\n", 49 | "```\n", 50 | "$ ipython\n", 51 | "```\n", 52 | "\n", 53 | "in your terminal window.\n", 54 | "\n", 55 | "The ipython shell has all of the functionality of the regular python shell, plus several handy extras. The two features that you'll probably find most helpful are tab completion and built in object descriptions [http://ipython.org/ipython-doc/stable/interactive/tutorial.html#tab-completion].\n", 56 | "\n", 57 | "Anaconda also comes with an interactive browser-based editor called Jupyter that combines code execution, plots, and text formatting. It's a great tool for both exploring data, sharing your results, and learning how to use new python tools. Jupyter notebooks are essentially running ipython in your browser so all the features available in ipython are also available in jupyter notebooks. All of the modules for this course are written in jupyter notebooks which allows you to execute all of the examples in your browser and explore the results yourself.\n", 58 | "\n", 59 | "To start exploring the jupyter notbooks included in this module, open a terminal window, go to the directory where you've cloned the course material and run:\n", 60 | "\n", 61 | "```\n", 62 | "$ jupyter notebook\n", 63 | "```\n", 64 | "\n", 65 | "A new window should open up in your browser with a list of all of the available modules. Clicking on any of them will open that module in a new tab. If you put your cursor in a cell with python code, pressing shift+enter will execute that code. You can add to that code to modify and/or print the results, or you can create a new cell with the plus button at the top left corner of the jupyter notebook.\n", 66 | "\n", 67 | "Don't stop at reading the material and executing the code that's written for you. Use ipython's ? feature to bring up help pages and it's tab completion feature to explore what options are available to you with different methods.\n", 68 | "\n", 69 | "The exercise at the end of this module will show you a few ways you can use the ipython notebook.\n", 70 | "\n", 71 | "Table of Contents\n", 72 | "---\n", 73 | " 0. Getting Started
\n", 74 | " 1. Python Data Tools
\n", 75 | " 2. Data Storage
\n", 76 | " 3. Data Collection
\n", 77 | " 4. Exploring Data
\n", 78 | " 5. Statistical Methods
\n", 79 | " 6. Data Cleaning
\n", 80 | " 7. Web Apps with Spyre
" 81 | ] 82 | }, 83 | { 84 | "cell_type": "markdown", 85 | "metadata": {}, 86 | "source": [ 87 | "Exercise: Exploring python with jupyter notebooks\n", 88 | "---\n", 89 | "let's start by creating a list. The next block is python code so you can execute it by putting your cursor in the cell and either pressing the play button at the top of the notebook or by pressing shift+return on your keyboard." 90 | ] 91 | }, 92 | { 93 | "cell_type": "code", 94 | "execution_count": 1, 95 | "metadata": { 96 | "collapsed": false 97 | }, 98 | "outputs": [], 99 | "source": [ 100 | "list_of_fruits = ['apple','pear','orange']" 101 | ] 102 | }, 103 | { 104 | "cell_type": "markdown", 105 | "metadata": {}, 106 | "source": [ 107 | "When you press execute the cell above (either by pressing shift+return or by pressing the play button at the top of the notebook), you create a new variable named `list_of_fruits`. `list_of_fruits` is a python list object, which has a few methods such as `append` and `count`. Type \n", 108 | "````\n", 109 | "list_of_fruits.\n", 110 | "````\n", 111 | "and press tab to see a full list of all methods and properties available to the list object. For any of these methods you can put a `?` at the beginning of the line to get a short description of what the method does and to see what parameters need to be included. For instance, you can see that there's a `reverse` method. It's probably clear what this method should do, but you may not know whether it creates a *new* list object or does an \"in place\" reversal to the existing object. To find out execute:\n", 112 | "````\n", 113 | "?list_of_fruits.reverse()\n", 114 | "````\n", 115 | "in the cell below. This should bring up a short description of the `reverse` method making it a little more clear how it works." 116 | ] 117 | }, 118 | { 119 | "cell_type": "markdown", 120 | "metadata": {}, 121 | "source": [ 122 | "Now let's do something to this list. Add a \"watermelon\" item to the `list_of_fruits` object and then reverse the list. You can print the results with the line:\n", 123 | "````\n", 124 | "print(list_of_fruits)\n", 125 | "````\n", 126 | "Finally, remove the \"orange\" from the list. Your final result should look like:\n", 127 | "````\n", 128 | "['watermelon', 'pear', 'apple']\n", 129 | "````" 130 | ] 131 | } 132 | ], 133 | "metadata": { 134 | "kernelspec": { 135 | "display_name": "Python 2", 136 | "language": "python", 137 | "name": "python2" 138 | }, 139 | "language_info": { 140 | "codemirror_mode": { 141 | "name": "ipython", 142 | "version": 2 143 | }, 144 | "file_extension": ".py", 145 | "mimetype": "text/x-python", 146 | "name": "python", 147 | "nbconvert_exporter": "python", 148 | "pygments_lexer": "ipython2", 149 | "version": "2.7.12" 150 | } 151 | }, 152 | "nbformat": 4, 153 | "nbformat_minor": 0 154 | } 155 | -------------------------------------------------------------------------------- /2_Storing_Data_Module.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Data Storage" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "#### Text Files" 15 | ] 16 | }, 17 | { 18 | "cell_type": "markdown", 19 | "metadata": {}, 20 | "source": [ 21 | "The simplest way to store data is with a text file. [Reading and writing to a text file from Python is simple](http://www.pythonforbeginners.com/files/reading-and-writing-files-in-python), and those files can easily be opened with any text editor. A text file can take any form, but your file needs to be parsable. That means when fetching data from the file your python script needs to know where one data point ends and the next begins. The standard convention for storing data is by comma sparated value (or CSVs). CSVs store data the same way an excel spreadsheet does, with rows and columns. Let's say you had three rows and three columns of integer values to store. You would store that data in a CSV as:\n", 22 | "````\n", 23 | "1,2,2\n", 24 | "3,2,1\n", 25 | "4,4,3\n", 26 | "````\n", 27 | "Rows are separated by a new line, and columns by commas. Knowing this simple convention makes it easy for a computer to parse the file so that it can then do something with the data.\n", 28 | "\n", 29 | "However, in some cases CSVs are actually a bad choice for storing data. Suppose that one of the fields contains names of bands:\n", 30 | "````\n", 31 | "ACDC,2,1\n", 32 | "Lady Gaga,4,3\n", 33 | "Peter,Paul and Marry,1,3\n", 34 | "````\n", 35 | "Are \"Peter\" and \"Paul and Marry\" two different columns? It's obvious to most people that they're not, but not at all obvious to a computer. If you're storing strings and there's chance that you may have commas in those strings, CSVs aren't going to work. Luckily, there are plenty of other more obscure characters that can be used to separatate values. If commas aren't a good choice, then you may choose to go with tabs (represented by \\t):\n", 36 | "````\n", 37 | "ACDC\\t2\\t1\n", 38 | "Lady Gaga\\t4\\t3\n", 39 | "Peter, Paul and Marry\\t1\\t3\n", 40 | "````\n", 41 | "\n", 42 | "You could write your own CSV Python parser, but a number of Python tools already exist to do this for you. Let's look at how you'd do this with pandas." 43 | ] 44 | }, 45 | { 46 | "cell_type": "code", 47 | "execution_count": 1, 48 | "metadata": { 49 | "collapsed": false 50 | }, 51 | "outputs": [], 52 | "source": [ 53 | "import pandas as pd\n", 54 | "file_path = 'artists.csv'\n", 55 | "artists_df = pd.read_csv(file_path)" 56 | ] 57 | }, 58 | { 59 | "cell_type": "code", 60 | "execution_count": 2, 61 | "metadata": { 62 | "collapsed": false 63 | }, 64 | "outputs": [ 65 | { 66 | "data": { 67 | "text/html": [ 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 | "
namemusicbrainz_idid
0The Scenica8e347d8-29d8-459c-a444-68febeb99c6b500
1Our Family Namefc93c97f-1b9b-49af-8370-7b36e29ad22e710
2KhamelienNaN744
3Death in the Park000c60eb-a2c4-46be-9097-e603fd8795c6786
4enter the collectorf50c0834-e2a7-4241-bd32-061d67560c41818
\n", 111 | "
" 112 | ], 113 | "text/plain": [ 114 | " name musicbrainz_id id\n", 115 | "0 The Scenic a8e347d8-29d8-459c-a444-68febeb99c6b 500\n", 116 | "1 Our Family Name fc93c97f-1b9b-49af-8370-7b36e29ad22e 710\n", 117 | "2 Khamelien NaN 744\n", 118 | "3 Death in the Park 000c60eb-a2c4-46be-9097-e603fd8795c6 786\n", 119 | "4 enter the collector f50c0834-e2a7-4241-bd32-061d67560c41 818" 120 | ] 121 | }, 122 | "execution_count": 2, 123 | "metadata": {}, 124 | "output_type": "execute_result" 125 | } 126 | ], 127 | "source": [ 128 | "artists_df.head()" 129 | ] 130 | }, 131 | { 132 | "cell_type": "markdown", 133 | "metadata": {}, 134 | "source": [ 135 | "If you open artists.csv in a text editor, the first few lines look like this:\n", 136 | "````\n", 137 | "name,musicbrainz_id,id\n", 138 | "The Scenic,a8e347d8-29d8-459c-a444-68febeb99c6b,500\n", 139 | "Our Family Name,fc93c97f-1b9b-49af-8370-7b36e29ad22e,710\n", 140 | "Khamelien,,744\n", 141 | "````\n", 142 | "There are two things worth noting here:\n", 143 | "\n", 144 | "1. Khamelien doesn't have a musicbrainz id, but we still need to leave a space for it in the csv. Every row must have the same number of columns, and if we leave a field blank, Pandas will fill it in with the special NaN (Not a Number) value to denote that it's missing.\n", 145 | "2. By default, pandas assumes that the first line of a CSV contains the column names. If your csv does not have column names in the first line, you can set them yourself with the `names` parameter in the read_csv method:" 146 | ] 147 | }, 148 | { 149 | "cell_type": "code", 150 | "execution_count": 3, 151 | "metadata": { 152 | "collapsed": false 153 | }, 154 | "outputs": [ 155 | { 156 | "data": { 157 | "text/html": [ 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 | "
namemusicbrainz_idNBS_id
0The Scenica8e347d8-29d8-459c-a444-68febeb99c6b500
1Our Family Namefc93c97f-1b9b-49af-8370-7b36e29ad22e710
2KhamelienNaN744
3Death in the Park000c60eb-a2c4-46be-9097-e603fd8795c6786
4enter the collectorf50c0834-e2a7-4241-bd32-061d67560c41818
\n", 201 | "
" 202 | ], 203 | "text/plain": [ 204 | " name musicbrainz_id NBS_id\n", 205 | "0 The Scenic a8e347d8-29d8-459c-a444-68febeb99c6b 500\n", 206 | "1 Our Family Name fc93c97f-1b9b-49af-8370-7b36e29ad22e 710\n", 207 | "2 Khamelien NaN 744\n", 208 | "3 Death in the Park 000c60eb-a2c4-46be-9097-e603fd8795c6 786\n", 209 | "4 enter the collector f50c0834-e2a7-4241-bd32-061d67560c41 818" 210 | ] 211 | }, 212 | "execution_count": 3, 213 | "metadata": {}, 214 | "output_type": "execute_result" 215 | } 216 | ], 217 | "source": [ 218 | "artists_df = pd.read_csv(\n", 219 | " 'artists_no_column_names.csv',\n", 220 | " header=None,\n", 221 | " names=['name','musicbrainz_id','NBS_id']\n", 222 | ")\n", 223 | "artists_df.head()" 224 | ] 225 | }, 226 | { 227 | "cell_type": "markdown", 228 | "metadata": {}, 229 | "source": [ 230 | "As mentioned before, separating strings with commas can be problematic. It is better to use tabs (\\t). We can use the same `read_csv` pandas method to open tab separated files, but in this case we need to specify that the separaters are tabs using the `sep` parameter." 231 | ] 232 | }, 233 | { 234 | "cell_type": "code", 235 | "execution_count": 4, 236 | "metadata": { 237 | "collapsed": false 238 | }, 239 | "outputs": [ 240 | { 241 | "data": { 242 | "text/html": [ 243 | "
\n", 244 | "\n", 245 | " \n", 246 | " \n", 247 | " \n", 248 | " \n", 249 | " \n", 250 | " \n", 251 | " \n", 252 | " \n", 253 | " \n", 254 | " \n", 255 | " \n", 256 | " \n", 257 | " \n", 258 | " \n", 259 | " \n", 260 | " \n", 261 | " \n", 262 | " \n", 263 | " \n", 264 | " \n", 265 | " \n", 266 | " \n", 267 | " \n", 268 | " \n", 269 | " \n", 270 | " \n", 271 | " \n", 272 | " \n", 273 | " \n", 274 | " \n", 275 | " \n", 276 | " \n", 277 | " \n", 278 | " \n", 279 | " \n", 280 | " \n", 281 | " \n", 282 | " \n", 283 | " \n", 284 | " \n", 285 | "
namemusicbrainz_idid
0The Scenica8e347d8-29d8-459c-a444-68febeb99c6b500
1Our Family Namefc93c97f-1b9b-49af-8370-7b36e29ad22e710
2KhamelienNaN744
3Death in the Park000c60eb-a2c4-46be-9097-e603fd8795c6786
4enter the collectorf50c0834-e2a7-4241-bd32-061d67560c41818
\n", 286 | "
" 287 | ], 288 | "text/plain": [ 289 | " name musicbrainz_id id\n", 290 | "0 The Scenic a8e347d8-29d8-459c-a444-68febeb99c6b 500\n", 291 | "1 Our Family Name fc93c97f-1b9b-49af-8370-7b36e29ad22e 710\n", 292 | "2 Khamelien NaN 744\n", 293 | "3 Death in the Park 000c60eb-a2c4-46be-9097-e603fd8795c6 786\n", 294 | "4 enter the collector f50c0834-e2a7-4241-bd32-061d67560c41 818" 295 | ] 296 | }, 297 | "execution_count": 4, 298 | "metadata": {}, 299 | "output_type": "execute_result" 300 | } 301 | ], 302 | "source": [ 303 | "artists_df = pd.read_csv('artists.tsv', sep='\\t')\n", 304 | "artists_df.head()" 305 | ] 306 | }, 307 | { 308 | "cell_type": "markdown", 309 | "metadata": {}, 310 | "source": [ 311 | "Now let's suppose we've made some updates to the data, and now we want to save our results to a new csv." 312 | ] 313 | }, 314 | { 315 | "cell_type": "code", 316 | "execution_count": 5, 317 | "metadata": { 318 | "collapsed": false 319 | }, 320 | "outputs": [ 321 | { 322 | "data": { 323 | "text/html": [ 324 | "
\n", 325 | "\n", 326 | " \n", 327 | " \n", 328 | " \n", 329 | " \n", 330 | " \n", 331 | " \n", 332 | " \n", 333 | " \n", 334 | " \n", 335 | " \n", 336 | " \n", 337 | " \n", 338 | " \n", 339 | " \n", 340 | " \n", 341 | " \n", 342 | " \n", 343 | " \n", 344 | " \n", 345 | " \n", 346 | " \n", 347 | " \n", 348 | " \n", 349 | " \n", 350 | " \n", 351 | " \n", 352 | " \n", 353 | " \n", 354 | " \n", 355 | " \n", 356 | " \n", 357 | " \n", 358 | " \n", 359 | " \n", 360 | " \n", 361 | " \n", 362 | " \n", 363 | " \n", 364 | " \n", 365 | " \n", 366 | "
namemusicbrainz_idid
0The Scenica8e347d8-29d8-459c-a444-68febeb99c6b500
1Our Family Namefc93c97f-1b9b-49af-8370-7b36e29ad22e710
2KhamelienNaN744
3Death in the Park000c60eb-a2c4-46be-9097-e603fd8795c6786
4Enter the Collectorf50c0834-e2a7-4241-bd32-061d67560c41818
\n", 367 | "
" 368 | ], 369 | "text/plain": [ 370 | " name musicbrainz_id id\n", 371 | "0 The Scenic a8e347d8-29d8-459c-a444-68febeb99c6b 500\n", 372 | "1 Our Family Name fc93c97f-1b9b-49af-8370-7b36e29ad22e 710\n", 373 | "2 Khamelien NaN 744\n", 374 | "3 Death in the Park 000c60eb-a2c4-46be-9097-e603fd8795c6 786\n", 375 | "4 Enter the Collector f50c0834-e2a7-4241-bd32-061d67560c41 818" 376 | ] 377 | }, 378 | "execution_count": 5, 379 | "metadata": {}, 380 | "output_type": "execute_result" 381 | } 382 | ], 383 | "source": [ 384 | "artists_df.loc[4,'name'] = 'Enter the Collector'\n", 385 | "artists_df.head()" 386 | ] 387 | }, 388 | { 389 | "cell_type": "code", 390 | "execution_count": 6, 391 | "metadata": { 392 | "collapsed": false 393 | }, 394 | "outputs": [], 395 | "source": [ 396 | "artists_df.to_csv('artists_updated.tsv', sep='\\t')" 397 | ] 398 | }, 399 | { 400 | "cell_type": "markdown", 401 | "metadata": {}, 402 | "source": [ 403 | "Using the `to_csv` method, we write our results to the file `artists_updated.tsv` which can be opened with the `read_csv` method (using the sep='t' paramater) or with any text editor. Note: if we write to a file that already exists, `to_csv` will overwrite the old file with the new." 404 | ] 405 | }, 406 | { 407 | "cell_type": "markdown", 408 | "metadata": {}, 409 | "source": [ 410 | "#### SQL" 411 | ] 412 | }, 413 | { 414 | "cell_type": "markdown", 415 | "metadata": {}, 416 | "source": [ 417 | "Text files work well for simple, relatively small, datasets that can live in one or two independant tables and don't need to be updated often. However when the data you're working with is either really big or you have multiple tables that are related to eachother, you might want to to start looking into other solutions. \n", 418 | "\n", 419 | "The most common tabular step up from CSVs are realtional databases that use SQL (Structured Query Language). Three advantages of a SQL database over text files are that:\n", 420 | "\n", 421 | "1. It's much easier to join two or more tables that share common columns (we'll see an example in a second)\n", 422 | "2. SQL is very efficient at searching through large data sets and pulling data from multiple tables matching a specific query criteria.\n", 423 | "3. SQL allows for easy inserting new rows or updating existing rows without needing to overwrite an entire dataset.\n", 424 | "\n", 425 | "There are several different implementations of SQL, and at most companies there is a person (or team of people) who manage the setup and maintenance of a SQL databse. Fortunately, the query languages across all implementations of SQL are very similar, so you don't necessarily need to know the nuts and bolts of how the data is stored to get the data you need.\n", 426 | "\n", 427 | "If you're new to SQL and don't have the resources to manage a production-level relational database, there's a free and easy to use SQL implementation called sqlite. It requires no setup and comes pre-installed with Python. sqlite is a standalone application that you can access [from the command line](https://sqlite.org/quickstart.html) by typing `sqlite3 /path/to/database` (where `/path/to/database` is the path to a database file. We'll be using the `nbs.db` database that's included in this repo in this tutorial. In your terminal window, change directories [cd] to where the `nbs.db` file is located and run\n", 428 | "````\n", 429 | "$ sqlite3 nbs.db\n", 430 | "````" 431 | ] 432 | }, 433 | { 434 | "cell_type": "markdown", 435 | "metadata": {}, 436 | "source": [ 437 | "You should see a command prompt letting you know that you're using the sqlite command-line program. To see what tables are included in the nbs database use the `.tables` command:\n", 438 | "````\n", 439 | "sqlite> .tables\n", 440 | "artists networks\n", 441 | "endpoints x_artists_endpoints\n", 442 | "````\n", 443 | "and to see the columns and types for a table use the `.schema` command:\n", 444 | "````\n", 445 | "sqlite> .schema artists\n", 446 | "CREATE TABLE \"artists\" (\n", 447 | "\"index\" INTEGER,\n", 448 | " \"name\" TEXT,\n", 449 | " \"musicbrainz_id\" TEXT,\n", 450 | " \"created_at\" TIMESTAMP,\n", 451 | " \"updated_at\" TIMESTAMP,\n", 452 | " \"deleted_at\" TIMESTAMP,\n", 453 | " \"id\" INTEGER\n", 454 | ");\n", 455 | "CREATE INDEX \"ix_artists_index\"ON \"artists\" (\"index\");\n", 456 | "````\n", 457 | "Now let's query some data. To get the first five rows from the `artists` table, run the following from the command line:\n", 458 | "````\n", 459 | "sqlite> SELECT * FROM artists LIMIT 5;\n", 460 | "````\n", 461 | "The results should look like this:\n", 462 | "````\n", 463 | "The Scenic|a8e347d8-29d8-459c-a444-68febeb99c6b|2009-06-16 07:58:58|2015-05-19 12:28:17||500\n", 464 | "Our Family Name|fc93c97f-1b9b-49af-8370-7b36e29ad22e|2009-06-16 08:04:18|2014-08-27 09:04:37||710\n", 465 | "Khamelien||2009-06-16 08:05:08|2014-08-27 09:04:36||744\n", 466 | "Death in the Park|000c60eb-a2c4-46be-9097-e603fd8795c6|2009-06-16 08:06:10|2014-08-27 09:04:37||786\n", 467 | "enter the collector|f50c0834-e2a7-4241-bd32-061d67560c41|2009-06-16 08:06:54|2014-08-27 09:04:34||818\n", 468 | "````\n", 469 | "To get the first five rows that don't have a musicbrainz id:\n", 470 | "````\n", 471 | "sqlite> SELECT * FROM artists WHERE musicbrainz_id IS NULL LIMIT 5;\n", 472 | "Khamelien||2009-06-16 08:05:08|2014-08-27 09:04:36||744\n", 473 | "Shorelines End||2009-06-16 08:10:11|2014-08-27 09:04:32||952\n", 474 | "Dearth||2009-06-16 08:36:24|2014-08-27 09:51:29||1978\n", 475 | "Redink||2009-06-16 19:45:19|2014-08-27 09:59:37||4297\n", 476 | "The Atomic Ballroom Calamity||2009-06-16 19:47:00|2014-08-27 09:59:45||4359\n", 477 | "````\n", 478 | "and to find an artist named \"Redink\":\n", 479 | "````\n", 480 | "sqlite> SELECT * FROM artists WHERE name='The Good Ship';\n", 481 | "The Good Ship|efe7fd43-c3bb-4bb1-b306-8a92af4348c0|2009-07-09 05:56:18|2014-08-27 09:17:04||208860\n", 482 | "````\n", 483 | "\n", 484 | "In addition to the sqlite command-line tool, we can also query a sqlite database directly from Python. As with CSVs, there are a couple of tools for doing this, and we'll use a tool built directly into pandas. Because pandas is tabular, pulling data from sql and putting it directly into a dataframe is fairly simple.\n", 485 | "\n", 486 | "(Note that in the below query you will have to update the url to reflect the path to where nbs.db is stored on your computer.)" 487 | ] 488 | }, 489 | { 490 | "cell_type": "code", 491 | "execution_count": 7, 492 | "metadata": { 493 | "collapsed": false 494 | }, 495 | "outputs": [ 496 | { 497 | "name": "stdout", 498 | "output_type": "stream", 499 | "text": [ 500 | "there are 4349 rows in the artists table\n" 501 | ] 502 | }, 503 | { 504 | "data": { 505 | "text/html": [ 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 | " \n", 537 | " \n", 538 | " \n", 539 | " \n", 540 | " \n", 541 | " \n", 542 | " \n", 543 | " \n", 544 | " \n", 545 | " \n", 546 | " \n", 547 | " \n", 548 | " \n", 549 | " \n", 550 | " \n", 551 | " \n", 552 | " \n", 553 | " \n", 554 | " \n", 555 | " \n", 556 | " \n", 557 | " \n", 558 | " \n", 559 | " \n", 560 | " \n", 561 | " \n", 562 | " \n", 563 | " \n", 564 | " \n", 565 | " \n", 566 | "
namemusicbrainz_idcreated_atupdated_atdeleted_atid
0The Scenica8e347d8-29d8-459c-a444-68febeb99c6b2009-06-16 07:58:582015-05-19 12:28:17None500
1Our Family Namefc93c97f-1b9b-49af-8370-7b36e29ad22e2009-06-16 08:04:182014-08-27 09:04:37None710
2KhamelienNone2009-06-16 08:05:082014-08-27 09:04:36None744
3Death in the Park000c60eb-a2c4-46be-9097-e603fd8795c62009-06-16 08:06:102014-08-27 09:04:37None786
4enter the collectorf50c0834-e2a7-4241-bd32-061d67560c412009-06-16 08:06:542014-08-27 09:04:34None818
\n", 567 | "
" 568 | ], 569 | "text/plain": [ 570 | " name musicbrainz_id \\\n", 571 | "0 The Scenic a8e347d8-29d8-459c-a444-68febeb99c6b \n", 572 | "1 Our Family Name fc93c97f-1b9b-49af-8370-7b36e29ad22e \n", 573 | "2 Khamelien None \n", 574 | "3 Death in the Park 000c60eb-a2c4-46be-9097-e603fd8795c6 \n", 575 | "4 enter the collector f50c0834-e2a7-4241-bd32-061d67560c41 \n", 576 | "\n", 577 | " created_at updated_at deleted_at id \n", 578 | "0 2009-06-16 07:58:58 2015-05-19 12:28:17 None 500 \n", 579 | "1 2009-06-16 08:04:18 2014-08-27 09:04:37 None 710 \n", 580 | "2 2009-06-16 08:05:08 2014-08-27 09:04:36 None 744 \n", 581 | "3 2009-06-16 08:06:10 2014-08-27 09:04:37 None 786 \n", 582 | "4 2009-06-16 08:06:54 2014-08-27 09:04:34 None 818 " 583 | ] 584 | }, 585 | "execution_count": 7, 586 | "metadata": {}, 587 | "output_type": "execute_result" 588 | } 589 | ], 590 | "source": [ 591 | "import sqlite3 as lite\n", 592 | "import pandas as pd\n", 593 | "con = lite.connect('nbs.db')\n", 594 | "query = 'select * from artists'\n", 595 | "artists_df = pd.read_sql(query,con)\n", 596 | "con.close()\n", 597 | "print('there are %s rows in the artists table' % len(artists_df))\n", 598 | "artists_df.head()\n" 599 | ] 600 | }, 601 | { 602 | "cell_type": "markdown", 603 | "metadata": {}, 604 | "source": [ 605 | "Here we've created a connection to the sqlite database using the sqlite3 library, and then passed a sql query and our sqlite connection object to the read_sql method to get the query results as a dataframe." 606 | ] 607 | }, 608 | { 609 | "cell_type": "markdown", 610 | "metadata": {}, 611 | "source": [ 612 | "**Exercise:** Try writing your own function to turn a sql query into a pandas dataframe. Your function will take a query string and a sqlite connection object and return a pandas dataframe. You can use any methods from the sqlite module, but use only the pandas dataframe constructor from the pandas library (pd.DataFrame()). \n", 613 | "\n", 614 | "*Hint: Here's one way to get column names from from a sqlite query: http://stackoverflow.com/questions/7831371/is-there-a-way-to-get-a-list-of-column-names-in-sqlite*" 615 | ] 616 | }, 617 | { 618 | "cell_type": "markdown", 619 | "metadata": {}, 620 | "source": [ 621 | "#### Non-tabular Data" 622 | ] 623 | }, 624 | { 625 | "cell_type": "markdown", 626 | "metadata": {}, 627 | "source": [ 628 | "So far, all of the ways we've looked at for storing data have assumed that our data is tabular, but sometimes data doesn't fit neatly into rows and columns. Suppose for instance that you had a list of arists and you wanted to store all of their EPs and all of the tracks on those EPs. It is *possible* to store this data is a relational database, but that's not necessarily the best or most intuitive way to do so. \n", 629 | "\n", 630 | "An alternative data structure uses key-value mappings. Storing EP data for the bands Green Day and Alkaline Trio in a key-value map might look like this:" 631 | ] 632 | }, 633 | { 634 | "cell_type": "code", 635 | "execution_count": 8, 636 | "metadata": { 637 | "collapsed": false 638 | }, 639 | "outputs": [], 640 | "source": [ 641 | "ep_data = {\"Green Day\":{\n", 642 | " \"EPs\":{\n", 643 | " \"1,000 Hours\":{\n", 644 | " \"release_year\":1989,\n", 645 | " \"tracks\":[\"1,000 Hours\",\"1,000 Hours\",\"Only of You\",\"The One I Want\"]},\n", 646 | " \"Slappy\":{\n", 647 | " \"release_year\":1990,\n", 648 | " \"tracks\":[\"Paper Lanterns\",\"Why do you Want Him?\",\"409 in Your Coffeemaker\",\"Knowledge\"]},\n", 649 | " \"Tune In, Tokyo...\":{\n", 650 | " \"release_year\":2001,\n", 651 | " \"location\":\"Japan\"}\n", 652 | " },\n", 653 | " \"artist_id\":1},\n", 654 | " \"Alkaline Trio\":{\n", 655 | " \"EPs\":{\n", 656 | " \"For Your Lungs Only\":{\n", 657 | " \"release_year\":1998,\n", 658 | " \"tracks\":[\"Snake Oil Tanker\",\"Southern Rock\",\"Cooking Wine\",\"For Your Lungs Only\"]},\n", 659 | " \"I Lied My Face Off\":{\n", 660 | " \"release_year\":1999,\n", 661 | " \"tracks\":[\"Goodbye Forever\",\"This Is Getting Over You\",\"Bleeder\",\"I Lied My Face Off\"]},\n", 662 | " \"Broken Wing\":{\n", 663 | " \"release_year\":2013,\n", 664 | " \"tracks\":[\"Balanced On A Shelf\",\"Pocket Knife\",\"Broken Wing\",\"Sun Burns\"]}\n", 665 | " },\n", 666 | " \"artist_id\":2}}\n" 667 | ] 668 | }, 669 | { 670 | "cell_type": "markdown", 671 | "metadata": {}, 672 | "source": [ 673 | "The key-value pair data structure in Python is called a dictionary (and known as a JSON object in javascript, and goes by other names in other programming languages). Python dictionaries are very flexible. The key can be either a string or a number, and the value can be almost anything.\n", 674 | "\n", 675 | "If we want all of the metadata available for the Alkaline Trio album \"For Your Lungs Only\" we just pass in the keys for the nested set of dictionaries:" 676 | ] 677 | }, 678 | { 679 | "cell_type": "code", 680 | "execution_count": 9, 681 | "metadata": { 682 | "collapsed": false 683 | }, 684 | "outputs": [ 685 | { 686 | "data": { 687 | "text/plain": [ 688 | "{'release_year': 1998,\n", 689 | " 'tracks': ['Snake Oil Tanker',\n", 690 | " 'Southern Rock',\n", 691 | " 'Cooking Wine',\n", 692 | " 'For Your Lungs Only']}" 693 | ] 694 | }, 695 | "execution_count": 9, 696 | "metadata": {}, 697 | "output_type": "execute_result" 698 | } 699 | ], 700 | "source": [ 701 | "ep_data['Alkaline Trio']['EPs']['For Your Lungs Only']" 702 | ] 703 | }, 704 | { 705 | "cell_type": "markdown", 706 | "metadata": {}, 707 | "source": [ 708 | "and to get just the release year for that album:" 709 | ] 710 | }, 711 | { 712 | "cell_type": "code", 713 | "execution_count": 10, 714 | "metadata": { 715 | "collapsed": false 716 | }, 717 | "outputs": [ 718 | { 719 | "data": { 720 | "text/plain": [ 721 | "1998" 722 | ] 723 | }, 724 | "execution_count": 10, 725 | "metadata": {}, 726 | "output_type": "execute_result" 727 | } 728 | ], 729 | "source": [ 730 | "ep_data['Alkaline Trio']['EPs']['For Your Lungs Only']['release_year']" 731 | ] 732 | }, 733 | { 734 | "cell_type": "markdown", 735 | "metadata": {}, 736 | "source": [ 737 | "To store a Python dictionary, we can convert to a JSON string and save to a text file:" 738 | ] 739 | }, 740 | { 741 | "cell_type": "code", 742 | "execution_count": 11, 743 | "metadata": { 744 | "collapsed": false 745 | }, 746 | "outputs": [], 747 | "source": [ 748 | "import json\n", 749 | "ep_data_str = json.dumps(ep_data)\n", 750 | "f = open('ep_data.json', 'w')\n", 751 | "f.write(ep_data_str)\n", 752 | "f.close()" 753 | ] 754 | }, 755 | { 756 | "cell_type": "markdown", 757 | "metadata": {}, 758 | "source": [ 759 | "After converting the dictionary to a string (using `json.dumps`), the above code block writes that string to the file `ep_data.json` (the last three lines)." 760 | ] 761 | }, 762 | { 763 | "cell_type": "markdown", 764 | "metadata": {}, 765 | "source": [ 766 | "#### MongoDB" 767 | ] 768 | }, 769 | { 770 | "cell_type": "markdown", 771 | "metadata": {}, 772 | "source": [ 773 | "Storing key-value data as json files is fine for small data sets (less than a few Mb), but once your data grows larger than a 100 Mb, you may want to consider moving it into a queryable storage engine like MongoDB.\n", 774 | "\n", 775 | "MongoDB has a Python library and a good tutorial for getting started [link: http://api.mongodb.org/python/current/tutorial.html]. " 776 | ] 777 | } 778 | ], 779 | "metadata": { 780 | "kernelspec": { 781 | "display_name": "Python 2", 782 | "language": "python", 783 | "name": "python2" 784 | }, 785 | "language_info": { 786 | "codemirror_mode": { 787 | "name": "ipython", 788 | "version": 2 789 | }, 790 | "file_extension": ".py", 791 | "mimetype": "text/x-python", 792 | "name": "python", 793 | "nbconvert_exporter": "python", 794 | "pygments_lexer": "ipython2", 795 | "version": "2.7.12" 796 | } 797 | }, 798 | "nbformat": 4, 799 | "nbformat_minor": 0 800 | } 801 | -------------------------------------------------------------------------------- /3_Data_Collection.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "Data Collection\n", 8 | "===\n", 9 | "Up until now, the data that you've been working with has been given to in the form of a text file, a database, or in a python pickle. In this module, we'll learn a few techniques for writing our own python scripts for collecting data from the internet. \n", 10 | "\n", 11 | "Collecting data from the internet can be done in one of two ways:\n", 12 | "1. through an API (Application Program Interface)\n", 13 | "2. by parsing html\n", 14 | "\n", 15 | "The API route is always preferable as it is (usually) sactioned by whomever is hosting the data, which allows them to dictate terms of use and monitor and restrict how their service is used. An access token (or \"key\") is typically required to access data from an official API.\n", 16 | "\n", 17 | "Not all websites provide a public API for accessing data. In those cases, you may have to write a custom HTML parser. HTML is the language that the static components of webpages are written in. This code is usually well structured and it is often times not difficult to write a short script to find the elements of a interest in the HTML.\n", 18 | "\n", 19 | "Getting Data via an API\n", 20 | "---\n", 21 | "Each API is different as is the process getting an API key. Usually getting an API key is as simple as creating an account and registering for a key. Almost all companies that offer a public API, also offer documentation on how to use their API and how to get a key. Here's Goodreads' Developer's page: https://www.goodreads.com/api\n", 22 | "\n", 23 | "We will want to retrieve a Goodreads API key. In order to do so, create an account with Goodreads, and then head to the developer page and apply for an API key. \n", 24 | "\n", 25 | "When filling out the form to register your client you will only need to fill in an application name and company name. Feel free to leave the other fields blank. Agree to the terms of service listed below and apply. Goodreads will instantly provide you with an API key and a client secret. \n" 26 | ] 27 | }, 28 | { 29 | "cell_type": "markdown", 30 | "metadata": {}, 31 | "source": [ 32 | "In order to get data from Goodreads, we'll be making \"requests\" to their API. We'll be making our requests through python, although you could also make a request directly from your browser. Your browser is in fact making dozens or even hundreds of requests every time it loads a web page. In the cases where your browser loads a web page, it's converting HTML into well formatted human-readable content. When we make requests to an API we'll usually get back content that was designed for a computer to read. Paste the following url (replacing YOUR-API-KEY with your API key) into your browser.\n", 33 | "\n", 34 | "````\n", 35 | "https://www.goodreads.com/book/review_counts.json?isbns=0141439602&key=YOUR-API-KEY\n", 36 | "\n", 37 | "````\n", 38 | "\n", 39 | "What you get back is a JSON object that contains review counts for the book `A Tale of Two Cities`. An ISBN is essentially a serial number for a book. In order to know which book the ISBN refers to, we used the 'book.show' method listed in the Goodreads API documentation. Goodreads lists all available methods here. Replacing the book 'id' in the sample URL returns metadata around the book in question, including the title. \n", 40 | "\n", 41 | "We briefly saw JSON objects in the previous module. They're identical in structure to python dictionaries, and python comes with a library for converting JSON strings into a dictionary.\n", 42 | "\n", 43 | "Let's make that same API request, now using python's `requests` library. Create a variable using your API key, so that we can easily substitute in the code. " 44 | ] 45 | }, 46 | { 47 | "cell_type": "code", 48 | "execution_count": 1, 49 | "metadata": { 50 | "collapsed": false 51 | }, 52 | "outputs": [ 53 | { 54 | "data": { 55 | "text/plain": [ 56 | "u'{\"books\":[{\"id\":1953,\"isbn\":\"0141439602\",\"isbn13\":\"9780141439600\",\"ratings_count\":642940,\"reviews_count\":1063067,\"text_reviews_count\":10290,\"work_ratings_count\":684009,\"work_reviews_count\":1175567,\"work_text_reviews_count\":13291,\"average_rating\":\"3.81\"}]}'" 57 | ] 58 | }, 59 | "execution_count": 1, 60 | "metadata": {}, 61 | "output_type": "execute_result" 62 | } 63 | ], 64 | "source": [ 65 | "import requests\n", 66 | "my_key = \"PUT YOUR API KEY HERE\"\n", 67 | "url = \"https://www.goodreads.com/book/review_counts.json?isbns=0141439602&key=%s\" % my_key\n", 68 | "response = requests.get(url)\n", 69 | "response.text" 70 | ] 71 | }, 72 | { 73 | "cell_type": "markdown", 74 | "metadata": {}, 75 | "source": [ 76 | "The response object has other metadata about the response (success/error codes, headers, etc.), but we're only interested in the content (or \"text\") of the response. As we saw before, the response text is a JSON string. We'll use python's `json` library to turn that string into a dictionary" 77 | ] 78 | }, 79 | { 80 | "cell_type": "code", 81 | "execution_count": 2, 82 | "metadata": { 83 | "collapsed": false 84 | }, 85 | "outputs": [ 86 | { 87 | "data": { 88 | "text/plain": [ 89 | "{u'books': [{u'average_rating': u'3.81',\n", 90 | " u'id': 1953,\n", 91 | " u'isbn': u'0141439602',\n", 92 | " u'isbn13': u'9780141439600',\n", 93 | " u'ratings_count': 642940,\n", 94 | " u'reviews_count': 1063067,\n", 95 | " u'text_reviews_count': 10290,\n", 96 | " u'work_ratings_count': 684009,\n", 97 | " u'work_reviews_count': 1175567,\n", 98 | " u'work_text_reviews_count': 13291}]}" 99 | ] 100 | }, 101 | "execution_count": 2, 102 | "metadata": {}, 103 | "output_type": "execute_result" 104 | } 105 | ], 106 | "source": [ 107 | "import json\n", 108 | "response_data = json.loads(response.text)\n", 109 | "response_data" 110 | ] 111 | }, 112 | { 113 | "cell_type": "markdown", 114 | "metadata": {}, 115 | "source": [ 116 | "which we saw how to work with in the previous module:" 117 | ] 118 | }, 119 | { 120 | "cell_type": "code", 121 | "execution_count": 3, 122 | "metadata": { 123 | "collapsed": false 124 | }, 125 | "outputs": [ 126 | { 127 | "data": { 128 | "text/plain": [ 129 | "u'3.81'" 130 | ] 131 | }, 132 | "execution_count": 3, 133 | "metadata": {}, 134 | "output_type": "execute_result" 135 | } 136 | ], 137 | "source": [ 138 | "ave_rating = response_data['books'][0]['average_rating']\n", 139 | "ave_rating" 140 | ] 141 | }, 142 | { 143 | "cell_type": "markdown", 144 | "metadata": {}, 145 | "source": [ 146 | ">**Note:** The \"books\" value is actually a list of dictionaries (with only one element), we need to specify that we want the first element in that list. \n", 147 | "\n", 148 | "This is the basic workflow for using python to get data from the internet:\n", 149 | "1. Make a request and get the content\n", 150 | "2. convert the content into a parsable python object (like a dictionary)\n", 151 | "3. get the data of interest and do something with it\n", 152 | "\n", 153 | "\n", 154 | "### API Parameters\n", 155 | "API parameters are passed in at the end of the url. The first parameter is preceded with a `?` and all subsequent parameters are separated by an `&`. All requests to Goodread's API require at least one parameter (the API key). Goodread's `review_count` endpoint also take an `isbns` parameter which is a comma separated list of isbns that you want review counts for. For instance, the isbns for the first 3 Harry Potter books are 0747532699, 0747538492, and 0747542155, and the URL used to request the review counts for those 3 books would be\n", 156 | "\n", 157 | "````\n", 158 | "https://www.goodreads.com/book/review_counts.json?isbns=0747532699,0747538492,0747542155&key=YOUR-API-KEY\n", 159 | "````\n", 160 | "\n", 161 | "You can paste this url in your browser to see the results (be sure to replace YOUR-API-KEY with the API key you got from goodreads).\n", 162 | "\n", 163 | ">**PRO-TIP:** There are browser extensions that make it much easier to view json in your browser (everything is well-formatted and you can collapse values). For those of you who use the chrome web browser, [here's the json formatting extentsion that I use](https://chrome.google.com/webstore/detail/jsonview/chklaanhfefbnpoihckbnefhakgolnmc?hl=en). You may have to restart your to start the extension.\n", 164 | "\n", 165 | "**Exercise 3.1:**\n", 166 | "Write a function that takes a list of goodreads ISBNs and returns the goodreads Ids.\n", 167 | "\n", 168 | "\n", 169 | "### Rate Limits\n", 170 | "One important consideration when building a crawler that will make lots of API requests is that it adheres to the rate limits (i.e. number of requests per hour) [specified in the documentation](https://www.goodreads.com/api/terms). You can do this by putting a pause between each request. Goodreads has a 1 request per second rate limit. Use the `sleep` function from python's `time` library to implement these pauses:" 171 | ] 172 | }, 173 | { 174 | "cell_type": "code", 175 | "execution_count": 4, 176 | "metadata": { 177 | "collapsed": false 178 | }, 179 | "outputs": [ 180 | { 181 | "data": { 182 | "text/plain": [ 183 | "200" 184 | ] 185 | }, 186 | "execution_count": 4, 187 | "metadata": {}, 188 | "output_type": "execute_result" 189 | } 190 | ], 191 | "source": [ 192 | "import time\n", 193 | "response = requests.get(url) # make a request\n", 194 | "time.sleep(1) # sleep for 1 second\n", 195 | "response = requests.get(url) # make the next request request\n", 196 | "\n", 197 | "# code should be 200 if all is well and 429 if we've exceeded our rate limit\n", 198 | "response.status_code" 199 | ] 200 | }, 201 | { 202 | "cell_type": "markdown", 203 | "metadata": {}, 204 | "source": [ 205 | "Exceeding the rate limit isn't the only thing that can go wrong with an API call and there's a [different status code for each issue you might have](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes). For instance, if we make a request to a non-exising endpoint, we get a 404 (Not Found) status code." 206 | ] 207 | }, 208 | { 209 | "cell_type": "code", 210 | "execution_count": 5, 211 | "metadata": { 212 | "collapsed": false, 213 | "scrolled": false 214 | }, 215 | "outputs": [ 216 | { 217 | "data": { 218 | "text/plain": [ 219 | "404" 220 | ] 221 | }, 222 | "execution_count": 5, 223 | "metadata": {}, 224 | "output_type": "execute_result" 225 | } 226 | ], 227 | "source": [ 228 | "# -1 is not a valid ISBN\n", 229 | "url = \"https://www.goodreads.com/book/review_counts.json?isbns=-1&key=%s\" % my_key\n", 230 | "response = requests.get(url)\n", 231 | "response.status_code" 232 | ] 233 | }, 234 | { 235 | "cell_type": "markdown", 236 | "metadata": {}, 237 | "source": [ 238 | "Parsing HTML for data\n", 239 | "---\n", 240 | "An official API is always the best way to get data from a host, but sometimes a website either doesn't have an API or, if they do have an API, some data of interest may not be available via an API endpoint. In those cases you may be able to get the raw HTML and use an HTML parsing library to extract the data of interest.\n", 241 | "\n", 242 | "We can get the raw HTML, the same we we got API data, with the `requests` library. Let's grab the HTML from the wikipedia page on Conan episodes from 2014." 243 | ] 244 | }, 245 | { 246 | "cell_type": "code", 247 | "execution_count": 6, 248 | "metadata": { 249 | "collapsed": false 250 | }, 251 | "outputs": [], 252 | "source": [ 253 | "url = \"https://en.wikipedia.org/wiki/List_of_Conan_episodes_(2014)\"\n", 254 | "response = requests.get(url)\n", 255 | "html_raw = response.text" 256 | ] 257 | }, 258 | { 259 | "cell_type": "markdown", 260 | "metadata": {}, 261 | "source": [ 262 | "The response text is raw html which is difficult to work with, so we'll use the [beautiful soup](http://www.crummy.com/software/BeautifulSoup/bs4/doc/) library to help us parse out the data we're interested in." 263 | ] 264 | }, 265 | { 266 | "cell_type": "code", 267 | "execution_count": 8, 268 | "metadata": { 269 | "collapsed": false 270 | }, 271 | "outputs": [], 272 | "source": [ 273 | "from bs4 import BeautifulSoup # To get everything\n", 274 | "html_soup = BeautifulSoup(html_raw)" 275 | ] 276 | }, 277 | { 278 | "cell_type": "markdown", 279 | "metadata": {}, 280 | "source": [ 281 | "HTML is a nested set of opening and closing tags which define the page layout and properties. Everything is typically wrapped in html open (<html>) and close (</html>) tags. Between <html></html> there's usually a <head></head> section where metadata and javascript code lives, and a <body></body> section where the page content lives. Once you've soupified your html, You can access nested elements as though they were attributes of their parent object. For instance, to get the `head` section of the page you would do:" 282 | ] 283 | }, 284 | { 285 | "cell_type": "code", 286 | "execution_count": 9, 287 | "metadata": { 288 | "collapsed": false 289 | }, 290 | "outputs": [], 291 | "source": [ 292 | "head = html_soup.html.head" 293 | ] 294 | }, 295 | { 296 | "cell_type": "markdown", 297 | "metadata": {}, 298 | "source": [ 299 | "and to get the title element within the `head` section:" 300 | ] 301 | }, 302 | { 303 | "cell_type": "code", 304 | "execution_count": 10, 305 | "metadata": { 306 | "collapsed": false 307 | }, 308 | "outputs": [ 309 | { 310 | "data": { 311 | "text/plain": [ 312 | "List of Conan episodes (2014) - Wikipedia" 313 | ] 314 | }, 315 | "execution_count": 10, 316 | "metadata": {}, 317 | "output_type": "execute_result" 318 | } 319 | ], 320 | "source": [ 321 | "head.title" 322 | ] 323 | }, 324 | { 325 | "cell_type": "markdown", 326 | "metadata": {}, 327 | "source": [ 328 | "You can also perform a search on a beautiful soup object. Let's say you want to get the Table of Contents element from this wikipedia page. Suppose you know that the Table of Contents HTML element has an `id` attribute with value \"toc\"." 329 | ] 330 | }, 331 | { 332 | "cell_type": "code", 333 | "execution_count": 11, 334 | "metadata": { 335 | "collapsed": false 336 | }, 337 | "outputs": [], 338 | "source": [ 339 | "table_of_contents = html_soup.find(id='toc')" 340 | ] 341 | }, 342 | { 343 | "cell_type": "markdown", 344 | "metadata": {}, 345 | "source": [ 346 | "Beautiful soup objects have a few useful methods and attributes. The `text` attribute is a string of all text within the element that would be displayed in a browser, and the `attrs` attibute is a dictionary of html attributes that are a part of the tag (like the `id` or `class`)." 347 | ] 348 | }, 349 | { 350 | "cell_type": "code", 351 | "execution_count": 12, 352 | "metadata": { 353 | "collapsed": false 354 | }, 355 | "outputs": [ 356 | { 357 | "data": { 358 | "text/plain": [ 359 | "{'class': ['toc'], 'id': 'toc'}" 360 | ] 361 | }, 362 | "execution_count": 12, 363 | "metadata": {}, 364 | "output_type": "execute_result" 365 | } 366 | ], 367 | "source": [ 368 | "table_of_contents.attrs # the table of contents element has 2 attributes, a class (equal to ['toc']) and an 'id' (equal to 'toc')" 369 | ] 370 | }, 371 | { 372 | "cell_type": "code", 373 | "execution_count": 13, 374 | "metadata": { 375 | "collapsed": false 376 | }, 377 | "outputs": [ 378 | { 379 | "name": "stdout", 380 | "output_type": "stream", 381 | "text": [ 382 | "\n", 383 | "\n", 384 | "Contents\n", 385 | "\n", 386 | "\n", 387 | "1 2014\n", 388 | "\n", 389 | "1.1 January\n", 390 | "1.2 February\n", 391 | "1.3 March\n", 392 | "1.4 April\n", 393 | "1.5 May\n", 394 | "1.6 June\n", 395 | "1.7 July\n", 396 | "1.8 August\n", 397 | "1.9 September\n", 398 | "1.10 October\n", 399 | "1.11 November\n", 400 | "1.12 December\n", 401 | "\n", 402 | "\n", 403 | "2 References\n", 404 | "\n", 405 | "\n" 406 | ] 407 | } 408 | ], 409 | "source": [ 410 | "print table_of_contents.text" 411 | ] 412 | }, 413 | { 414 | "cell_type": "markdown", 415 | "metadata": {}, 416 | "source": [ 417 | "If we want to find *all* instances of an element meeting our search criteria we can instead use the `findAll` method. Let's get a list of all months included in the Table of Contents. If you print the `table_of_contents` object, you'll see that each month is wrapped in a list tag (<li>) with class attribute 'toclevel-2'." 418 | ] 419 | }, 420 | { 421 | "cell_type": "code", 422 | "execution_count": 14, 423 | "metadata": { 424 | "collapsed": false 425 | }, 426 | "outputs": [ 427 | { 428 | "data": { 429 | "text/plain": [ 430 | "12" 431 | ] 432 | }, 433 | "execution_count": 14, 434 | "metadata": {}, 435 | "output_type": "execute_result" 436 | } 437 | ], 438 | "source": [ 439 | "month_elements = table_of_contents.findAll('li', {'class':'toclevel-2'})\n", 440 | "len(month_elements)" 441 | ] 442 | }, 443 | { 444 | "cell_type": "markdown", 445 | "metadata": {}, 446 | "source": [ 447 | "As expected, there are 12 month_elements. Let's see what the first month_element looks like:" 448 | ] 449 | }, 450 | { 451 | "cell_type": "code", 452 | "execution_count": 15, 453 | "metadata": { 454 | "collapsed": false 455 | }, 456 | "outputs": [ 457 | { 458 | "data": { 459 | "text/plain": [ 460 | "
  • 1.1 January
  • " 461 | ] 462 | }, 463 | "execution_count": 15, 464 | "metadata": {}, 465 | "output_type": "execute_result" 466 | } 467 | ], 468 | "source": [ 469 | "month_elements[0]" 470 | ] 471 | }, 472 | { 473 | "cell_type": "markdown", 474 | "metadata": {}, 475 | "source": [ 476 | "Each month element has a tag (a link to somewhere else in the page in this case) and two spans. The text of the spans are the table of content number and month. Let's create a lists for the href, number, and month and put the results in a dataframe." 477 | ] 478 | }, 479 | { 480 | "cell_type": "code", 481 | "execution_count": 16, 482 | "metadata": { 483 | "collapsed": false 484 | }, 485 | "outputs": [ 486 | { 487 | "data": { 488 | "text/html": [ 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 | " \n", 537 | " \n", 538 | " \n", 539 | " \n", 540 | " \n", 541 | " \n", 542 | " \n", 543 | " \n", 544 | " \n", 545 | " \n", 546 | " \n", 547 | " \n", 548 | " \n", 549 | " \n", 550 | " \n", 551 | " \n", 552 | " \n", 553 | " \n", 554 | " \n", 555 | " \n", 556 | " \n", 557 | " \n", 558 | " \n", 559 | " \n", 560 | "
    hrefmonth
    1.1#JanuaryJanuary
    1.2#FebruaryFebruary
    1.3#MarchMarch
    1.4#AprilApril
    1.5#MayMay
    1.6#JuneJune
    1.7#JulyJuly
    1.8#AugustAugust
    1.9#SeptemberSeptember
    1.10#OctoberOctober
    1.11#NovemberNovember
    1.12#DecemberDecember
    \n", 561 | "
    " 562 | ], 563 | "text/plain": [ 564 | " href month\n", 565 | "1.1 #January January\n", 566 | "1.2 #February February\n", 567 | "1.3 #March March\n", 568 | "1.4 #April April\n", 569 | "1.5 #May May\n", 570 | "1.6 #June June\n", 571 | "1.7 #July July\n", 572 | "1.8 #August August\n", 573 | "1.9 #September September\n", 574 | "1.10 #October October\n", 575 | "1.11 #November November\n", 576 | "1.12 #December December" 577 | ] 578 | }, 579 | "execution_count": 16, 580 | "metadata": {}, 581 | "output_type": "execute_result" 582 | } 583 | ], 584 | "source": [ 585 | "hrefs = []\n", 586 | "toc_numbers = []\n", 587 | "months = []\n", 588 | "for element in month_elements:\n", 589 | " a_tag = element.a # a tags in html are used for links within a page or too another page\n", 590 | " hrefs.append(a_tag.attrs['href']) # the href attribute determines where the link goes\n", 591 | " toc_number = element.find('span',{'class':'tocnumber'})\n", 592 | " toc_numbers.append(toc_number.text)\n", 593 | " month = element.find('span',{'class':'toctext'})\n", 594 | " months.append(month.text)\n", 595 | "\n", 596 | "import pandas as pd\n", 597 | "pd.DataFrame({'month':months, 'href':hrefs}, index=toc_numbers)" 598 | ] 599 | }, 600 | { 601 | "cell_type": "markdown", 602 | "metadata": {}, 603 | "source": [ 604 | "Notice that with the `find` and `findAll` methods, we can specified both the tag type (a, span, div, etc.) as well as attribute values. It's worth looking over the [beautiful soup Quick Start](http://www.crummy.com/software/BeautifulSoup/bs4/doc/#quick-start) documentation to see all of the available methods. If you're not very familiar with HTML you might also consider looking over [this tutorial](http://www.w3schools.com/html/) or taking the [codeacademy course](https://www.codecademy.com/learn/web) in HTML/CSS for a deeper dive.\n", 605 | "\n", 606 | ">**Pro-Tip:** Most web browsers have their own built-in developer tools for investegating all the HTML and other elements that go into displaying a web page. In Chrome you can right click on any element on a page and click on \"Inspect Element\" to look at it's HTML. Use the arrows on the left of each element to expand or collapse in order to show/hide all of its children.\n", 607 | "\n", 608 | "**Exercise 3.2:** Use beautiful soup to get the show number (\"No.\"), air date, lists of guests, and list of entertainment guests for every Conan show from 2014. Put the results in a dataframe. **Bonus:** make the date a datetime object." 609 | ] 610 | } 611 | ], 612 | "metadata": { 613 | "kernelspec": { 614 | "display_name": "Python 2", 615 | "language": "python", 616 | "name": "python2" 617 | }, 618 | "language_info": { 619 | "codemirror_mode": { 620 | "name": "ipython", 621 | "version": 2 622 | }, 623 | "file_extension": ".py", 624 | "mimetype": "text/x-python", 625 | "name": "python", 626 | "nbconvert_exporter": "python", 627 | "pygments_lexer": "ipython2", 628 | "version": "2.7.12" 629 | } 630 | }, 631 | "nbformat": 4, 632 | "nbformat_minor": 0 633 | } 634 | -------------------------------------------------------------------------------- /7_Web_Apps.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "Web Apps with Spyre\n", 8 | "---\n", 9 | "\n", 10 | "Once you've collected data and done some analysis you'll probably want to present it to others. As we've already seen, Jupyter notebooks are a great way to do this, but if we wanted to make our results more interactive we could put the data in a web application.\n", 11 | "\n", 12 | "Spyre is a python library that is used to quickly build data focussed web applications. Spyre does not come pre-installed with the Anaconda distribution of Python so checkout the [Spyre github page and README](https://github.com/adamhajari/spyre) for instruction on how to install it. The README also contains a couple of short examples that you should try yourself before continuing with this module.\n", 13 | "\n", 14 | "Once you've successfully gotten the examples for the spyre README to work, let's again turn to the `nbs.db` sqlite database to make a new app. We'll be pulling in data from two tables and joining the results in pandas. Start by querying all rows from the `artists` and `social_data` tables. Let's work on the components of the app here and then put them into a separate script." 15 | ] 16 | }, 17 | { 18 | "cell_type": "code", 19 | "execution_count": 1, 20 | "metadata": { 21 | "collapsed": false 22 | }, 23 | "outputs": [ 24 | { 25 | "data": { 26 | "text/html": [ 27 | "
    \n", 28 | "\n", 29 | " \n", 30 | " \n", 31 | " \n", 32 | " \n", 33 | " \n", 34 | " \n", 35 | " \n", 36 | " \n", 37 | " \n", 38 | " \n", 39 | " \n", 40 | " \n", 41 | " \n", 42 | " \n", 43 | " \n", 44 | " \n", 45 | " \n", 46 | " \n", 47 | " \n", 48 | " \n", 49 | " \n", 50 | " \n", 51 | " \n", 52 | " \n", 53 | " \n", 54 | " \n", 55 | " \n", 56 | " \n", 57 | " \n", 58 | " \n", 59 | " \n", 60 | " \n", 61 | " \n", 62 | " \n", 63 | "
    idname
    0500The Scenic
    1710Our Family Name
    2744Khamelien
    3786Death in the Park
    4818enter the collector
    \n", 64 | "
    " 65 | ], 66 | "text/plain": [ 67 | " id name\n", 68 | "0 500 The Scenic\n", 69 | "1 710 Our Family Name\n", 70 | "2 744 Khamelien\n", 71 | "3 786 Death in the Park\n", 72 | "4 818 enter the collector" 73 | ] 74 | }, 75 | "execution_count": 1, 76 | "metadata": {}, 77 | "output_type": "execute_result" 78 | } 79 | ], 80 | "source": [ 81 | "import sqlite3 as lite\n", 82 | "import pandas as pd\n", 83 | "con = lite.connect('nbs.db')\n", 84 | "artists_query = \"select id, name from artists\"\n", 85 | "artists_df = pd.read_sql(artists_query, con)\n", 86 | "\n", 87 | "socail_query = \"select * from social_data\"\n", 88 | "social_df = pd.read_sql(socail_query, con)\n", 89 | "artists_df.head()" 90 | ] 91 | }, 92 | { 93 | "cell_type": "code", 94 | "execution_count": 2, 95 | "metadata": { 96 | "collapsed": false 97 | }, 98 | "outputs": [ 99 | { 100 | "data": { 101 | "text/html": [ 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 | "
    artist_idFaceBookPageLikesTwitterFollowersYouTubeViewsInstagramLikesInstagramFollowers
    05004797.01395.0NaNNaNNaN
    1744NaN224.044287.0NaNNaN
    29524142.064.0130279.0NaNNaN
    31017NaNNaN2966.0NaNNaN
    4108628980.043405.0402054.056832.07653.0
    \n", 163 | "
    " 164 | ], 165 | "text/plain": [ 166 | " artist_id FaceBookPageLikes TwitterFollowers YouTubeViews \\\n", 167 | "0 500 4797.0 1395.0 NaN \n", 168 | "1 744 NaN 224.0 44287.0 \n", 169 | "2 952 4142.0 64.0 130279.0 \n", 170 | "3 1017 NaN NaN 2966.0 \n", 171 | "4 1086 28980.0 43405.0 402054.0 \n", 172 | "\n", 173 | " InstagramLikes InstagramFollowers \n", 174 | "0 NaN NaN \n", 175 | "1 NaN NaN \n", 176 | "2 NaN NaN \n", 177 | "3 NaN NaN \n", 178 | "4 56832.0 7653.0 " 179 | ] 180 | }, 181 | "execution_count": 2, 182 | "metadata": {}, 183 | "output_type": "execute_result" 184 | } 185 | ], 186 | "source": [ 187 | "social_df.head()" 188 | ] 189 | }, 190 | { 191 | "cell_type": "markdown", 192 | "metadata": {}, 193 | "source": [ 194 | "We can now use pandas' `merge` function to merge these two dataframes so we have the social data and the artists' names in one place. The `artist_id`s from social_df match the `id`s from artist_df so we'll merge on those two columns" 195 | ] 196 | }, 197 | { 198 | "cell_type": "code", 199 | "execution_count": 3, 200 | "metadata": { 201 | "collapsed": false 202 | }, 203 | "outputs": [ 204 | { 205 | "data": { 206 | "text/html": [ 207 | "
    \n", 208 | "\n", 209 | " \n", 210 | " \n", 211 | " \n", 212 | " \n", 213 | " \n", 214 | " \n", 215 | " \n", 216 | " \n", 217 | " \n", 218 | " \n", 219 | " \n", 220 | " \n", 221 | " \n", 222 | " \n", 223 | " \n", 224 | " \n", 225 | " \n", 226 | " \n", 227 | " \n", 228 | " \n", 229 | " \n", 230 | " \n", 231 | " \n", 232 | " \n", 233 | " \n", 234 | " \n", 235 | " \n", 236 | " \n", 237 | " \n", 238 | " \n", 239 | " \n", 240 | " \n", 241 | " \n", 242 | " \n", 243 | " \n", 244 | " \n", 245 | " \n", 246 | " \n", 247 | " \n", 248 | " \n", 249 | " \n", 250 | " \n", 251 | " \n", 252 | " \n", 253 | " \n", 254 | " \n", 255 | " \n", 256 | " \n", 257 | " \n", 258 | " \n", 259 | " \n", 260 | " \n", 261 | " \n", 262 | " \n", 263 | " \n", 264 | " \n", 265 | " \n", 266 | " \n", 267 | " \n", 268 | " \n", 269 | " \n", 270 | " \n", 271 | " \n", 272 | " \n", 273 | " \n", 274 | " \n", 275 | " \n", 276 | " \n", 277 | " \n", 278 | " \n", 279 | "
    idnameartist_idFaceBookPageLikesTwitterFollowersYouTubeViewsInstagramLikesInstagramFollowers
    0500The Scenic5004797.01395.0NaNNaNNaN
    1744Khamelien744NaN224.044287.0NaNNaN
    2952Shorelines End9524142.064.0130279.0NaNNaN
    31017Hollywood Ave1017NaNNaN2966.0NaNNaN
    41086Play for keeps108628980.043405.0402054.056832.07653.0
    \n", 280 | "
    " 281 | ], 282 | "text/plain": [ 283 | " id name artist_id FaceBookPageLikes TwitterFollowers \\\n", 284 | "0 500 The Scenic 500 4797.0 1395.0 \n", 285 | "1 744 Khamelien 744 NaN 224.0 \n", 286 | "2 952 Shorelines End 952 4142.0 64.0 \n", 287 | "3 1017 Hollywood Ave 1017 NaN NaN \n", 288 | "4 1086 Play for keeps 1086 28980.0 43405.0 \n", 289 | "\n", 290 | " YouTubeViews InstagramLikes InstagramFollowers \n", 291 | "0 NaN NaN NaN \n", 292 | "1 44287.0 NaN NaN \n", 293 | "2 130279.0 NaN NaN \n", 294 | "3 2966.0 NaN NaN \n", 295 | "4 402054.0 56832.0 7653.0 " 296 | ] 297 | }, 298 | "execution_count": 3, 299 | "metadata": {}, 300 | "output_type": "execute_result" 301 | } 302 | ], 303 | "source": [ 304 | "df_merged = pd.merge(artists_df, social_df, left_on='id', right_on='artist_id')\n", 305 | "df_merged.head()" 306 | ] 307 | }, 308 | { 309 | "cell_type": "markdown", 310 | "metadata": {}, 311 | "source": [ 312 | "Let's put these steps in a function so that we can use them again later." 313 | ] 314 | }, 315 | { 316 | "cell_type": "code", 317 | "execution_count": 4, 318 | "metadata": { 319 | "collapsed": true 320 | }, 321 | "outputs": [], 322 | "source": [ 323 | "import sqlite3 as lite\n", 324 | "import pandas as pd\n", 325 | "\n", 326 | "def get_social_data():\n", 327 | " con = lite.connect('nbs.db')\n", 328 | " artists_query = \"select id, name from artists\"\n", 329 | " artists_df = pd.read_sql(artists_query, con)\n", 330 | "\n", 331 | " socail_query = \"select * from social_data\"\n", 332 | " social_df = pd.read_sql(socail_query, con)\n", 333 | " df_merged = pd.merge(artists_df, social_df, left_on='id', right_on='artist_id')\n", 334 | " return df_merged.drop(['id', 'artist_id'], axis=1)" 335 | ] 336 | }, 337 | { 338 | "cell_type": "markdown", 339 | "metadata": {}, 340 | "source": [ 341 | "Now let's create a second function that takes the merged results, sorts them by one of the featuers, and returns the top artist limited by a paramater n." 342 | ] 343 | }, 344 | { 345 | "cell_type": "code", 346 | "execution_count": 5, 347 | "metadata": { 348 | "collapsed": false 349 | }, 350 | "outputs": [ 351 | { 352 | "data": { 353 | "text/html": [ 354 | "
    \n", 355 | "\n", 356 | " \n", 357 | " \n", 358 | " \n", 359 | " \n", 360 | " \n", 361 | " \n", 362 | " \n", 363 | " \n", 364 | " \n", 365 | " \n", 366 | " \n", 367 | " \n", 368 | " \n", 369 | " \n", 370 | " \n", 371 | " \n", 372 | " \n", 373 | " \n", 374 | " \n", 375 | " \n", 376 | " \n", 377 | " \n", 378 | " \n", 379 | " \n", 380 | " \n", 381 | " \n", 382 | " \n", 383 | " \n", 384 | " \n", 385 | " \n", 386 | " \n", 387 | " \n", 388 | " \n", 389 | " \n", 390 | " \n", 391 | " \n", 392 | " \n", 393 | " \n", 394 | " \n", 395 | " \n", 396 | " \n", 397 | " \n", 398 | " \n", 399 | " \n", 400 | "
    nameTwitterFollowers
    1881The Amp Jackers97933
    1049DaveRose95106
    2043Dez Duron89117
    649Pauly Shore84642
    1525Doyin aka Lyrical80197
    3571Chantelle Lee78375
    3425Billi. B71055
    \n", 401 | "
    " 402 | ], 403 | "text/plain": [ 404 | " name TwitterFollowers\n", 405 | "1881 The Amp Jackers 97933\n", 406 | "1049 DaveRose 95106\n", 407 | "2043 Dez Duron 89117\n", 408 | "649 Pauly Shore 84642\n", 409 | "1525 Doyin aka Lyrical 80197\n", 410 | "3571 Chantelle Lee 78375\n", 411 | "3425 Billi. B 71055" 412 | ] 413 | }, 414 | "execution_count": 5, 415 | "metadata": {}, 416 | "output_type": "execute_result" 417 | } 418 | ], 419 | "source": [ 420 | "def top_artists(network, n=10):\n", 421 | " \"\"\"return the top n artists from network\"\"\"\n", 422 | " df_social = get_social_data() # get the data from sql\n", 423 | " \n", 424 | " # sort the result by the given network in descending order\n", 425 | " df_sorted = df_social.sort_values(by=network, ascending=False)\n", 426 | " \n", 427 | " # limit the results to the top n artists\n", 428 | " df_limited = df_sorted.head(n).copy()\n", 429 | " \n", 430 | " # convert the values to integers so they look nicer\n", 431 | " df_limited.loc[:, network] = df_limited.loc[:, network].astype('int')\n", 432 | " \n", 433 | " # return the results but just include the values for the network of interest\n", 434 | " return df_limited.loc[:, ['name', network]]\n", 435 | "\n", 436 | "top_artists('TwitterFollowers', n=7)" 437 | ] 438 | }, 439 | { 440 | "cell_type": "markdown", 441 | "metadata": {}, 442 | "source": [ 443 | "**Exercise:**\n", 444 | "Now try to add these two functions to a spyre app that has a drop down menu for selecting a feature type and a slider that allows you to limit your results to some values between 0 and 100.\n", 445 | "\n", 446 | "If you get stuck check out `nbs_top_artists_app.py` in this repo. You should be able to run the app from a terminal window by running \n", 447 | "\n", 448 | "```\n", 449 | "$ python nbs_top_artists_app.py\n", 450 | "```\n", 451 | "\n", 452 | "Paste `http://127.0.0.1:8080` into your browser url box to try the app out." 453 | ] 454 | } 455 | ], 456 | "metadata": { 457 | "kernelspec": { 458 | "display_name": "Python 2", 459 | "language": "python", 460 | "name": "python2" 461 | }, 462 | "language_info": { 463 | "codemirror_mode": { 464 | "name": "ipython", 465 | "version": 2 466 | }, 467 | "file_extension": ".py", 468 | "mimetype": "text/x-python", 469 | "name": "python", 470 | "nbconvert_exporter": "python", 471 | "pygments_lexer": "ipython2", 472 | "version": "2.7.12" 473 | } 474 | }, 475 | "nbformat": 4, 476 | "nbformat_minor": 0 477 | } 478 | -------------------------------------------------------------------------------- /Appendix.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Appendix" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "# 1. Install Necessary Packages\n", 15 | "\n", 16 | "Anaconda offers a suite of packages for Python for science-related modules. By installing Anaconda, you will no longer have to install each module individually (e.g. matplotlib, ipython, pandas etc.) These are the basic packages necessary for data science in python. In the event there are additional modules necessary, these are possible to install through conda install * module name” in terminal. Do not use pip install. \n", 17 | "\n", 18 | "Download anaconda through this page: http://continuum.io/downloads, select install for me only. \n", 19 | "\n", 20 | "Once you have installed anaconda, check conda list, it should list all the packages you have. If it returns: “command not valid” you may have issues with your environment path variable. If so type “export PATH=~/anaconda/bin:$PATH” into terminal in order to rectify this. Check conda list again. You should now be able to view all the packages. You may also be prompted to upgrade certain packages. If so type “conda update pip”, and select Y. " 21 | ] 22 | } 23 | ], 24 | "metadata": { 25 | "kernelspec": { 26 | "display_name": "Python 2", 27 | "language": "python", 28 | "name": "python2" 29 | }, 30 | "language_info": { 31 | "codemirror_mode": { 32 | "name": "ipython", 33 | "version": 2 34 | }, 35 | "file_extension": ".py", 36 | "mimetype": "text/x-python", 37 | "name": "python", 38 | "nbconvert_exporter": "python", 39 | "pygments_lexer": "ipython2", 40 | "version": "2.7.10" 41 | } 42 | }, 43 | "nbformat": 4, 44 | "nbformat_minor": 0 45 | } 46 | -------------------------------------------------------------------------------- /Projects.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Projects" 8 | ] 9 | }, 10 | { 11 | "cell_type": "code", 12 | "execution_count": null, 13 | "metadata": { 14 | "collapsed": false 15 | }, 16 | "outputs": [], 17 | "source": [] 18 | } 19 | ], 20 | "metadata": { 21 | "kernelspec": { 22 | "display_name": "Python 2", 23 | "language": "python", 24 | "name": "python2" 25 | }, 26 | "language_info": { 27 | "codemirror_mode": { 28 | "name": "ipython", 29 | "version": 2 30 | }, 31 | "file_extension": ".py", 32 | "mimetype": "text/x-python", 33 | "name": "python", 34 | "nbconvert_exporter": "python", 35 | "pygments_lexer": "ipython2", 36 | "version": "2.7.12" 37 | } 38 | }, 39 | "nbformat": 4, 40 | "nbformat_minor": 0 41 | } 42 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Introduction to Data Science 2 | ==== 3 | Welcome to my Introduction to Data Science. I've broken the material into 7 modules that are inteded to be executed sequentially. I expect that people will come to this material with different backgrounds and different levels of experience, so feel free to skip any of the modules for the material that you're already comfortable with. 4 | 5 | There's a table of contents at the bottom of this notebook for those who want to skip ahead and browse what's available here. 6 | 7 | Python 8 | ----- 9 | Throughout this course we'll be putting together a "data science toolbox", a set of resouces that you'll use to collect, clean, store, explore, visualize, and analyze data. There are several good platforms for doing these tasks, and in this tutorial we'll be using the Python programming language for almost all of them. 10 | 11 | Python's major advantages are that 12 | 13 | 1. it's free 14 | 2. it's easy to learn and use 15 | 3. there's a Python library that solves almost every problem we'll come up against 16 | 17 | Python comes with a core set of libraries, but a number of the data tools we'll need are not included. You could download the libraries for these tools one-by-one, but there are a number of dependencies that make this process a little bit tedious. Instead, I recommend downloading the [Anaconda distribution of Python provided by Continuum Analytics](https://docs.continuum.io/anaconda/install). It comes with almost all of the libraries you'll ever need *and* it takes care of all of the dependency issues that would otherwise make you hate your life. 18 | 19 | There aren't many pre-requisites for this course, but basic familiarity of Python is one of them. There are two online tutorials that I recommend: 20 | 21 | 1. https://docs.python.org/2/tutorial/index.html 22 | 2. http://www.codecademy.com/en/tracks/python 23 | 24 | The first comes directly from python, and, if you can get through it, is probably the best option. If option one feels a little over your head, the second tutorial from code academy is a little bit easier to get started with. It even allows you to complete all of the exercises right in your browser. 25 | 26 | If you have other recommendations for python tutorials, please let me know! 27 | 28 | The Command Line 29 | -- 30 | One of the great features of python is that it comes with a command line tool that allows you to run python code one line at a time and print the results to your screen (this is not the case with languages like C++ or Java). This is one (of the many) features that makes python so easy to learn. 31 | 32 | Getting to the command line will be slightly different depending on whether you're operating system is Mac, Windows, or Linux. 33 | 34 | On Mac you'll use the Terminal app. On Windows you'll open the Command Prompt program. If you're using Linux, I'll assume you've already skipped this section. Regardless of whether you'r on Mac, Windows, or Linux, I'll be referring to your command line tool as a "terminal". 35 | 36 | IPython and Jupyter Notebooks 37 | -- 38 | IPython is an alternative command line tool to the one that comes with python. It's part of the Anaconda python distribution, so if you've installed Anaconda you can open an ipython shell just by typing ipython in your terminal window. 39 | 40 | The ipython shell has all of the functionality of the regular python shell, plus several handy extras. The two features that you'll probably find most helpful are tab completion and built in object descriptions [http://ipython.org/ipython-doc/stable/interactive/tutorial.html#tab-completion]. 41 | 42 | Anaconda also comes with an interactive browser-based editor called Jupyter that combines code execution, plots, and text formatting. It's a great tool for both exploring data, sharing your results, and learning how to use new python tools. Jupyter notebooks are essentially running ipython in your browser so all the features available in ipython are also available in jupyter notebooks. All of the modules for this course are written in jupyter notebooks which allows you to execute all of the examples in your browser and explore the results yourself. 43 | 44 | 45 | Github 46 | -- 47 | All of the modules and supporting material for this course are hosted on github here: [https://github.com/adamhajari/Introduction-to-Data-Science]. If you don't already have one, setup a github account, fork this repo [https://help.github.com/articles/fork-a-repo/], and clone your forked copy of the repo to whatever computers you'll be working from. 48 | 49 | Table of Contents 50 | --- 51 | - [0.Getting Started](https://github.com/adamhajari/Introduction-to-Data-Science/blob/master/0_Getting_Started.ipynb) 52 | - [1.Python Data Tools](https://github.com/adamhajari/Introduction-to-Data-Science/blob/master/1_Python_Data_Tools.ipynb) 53 | - [2.Data Storage](https://github.com/adamhajari/Introduction-to-Data-Science/blob/master/2_Storing_Data_Module.ipynb) 54 | - [3.Data Collection](https://github.com/adamhajari/Introduction-to-Data-Science/blob/master/3_Data_Collection.ipynb) 55 | - [4.Exploring Data](https://github.com/adamhajari/Introduction-to-Data-Science/blob/master/4_Exploring_Data.ipynb) 56 | - [5.Data Analysis](https://github.com/adamhajari/Introduction-to-Data-Science/blob/master/5_Data_Analysis.ipynb) 57 | - [6.Data Cleaning](https://github.com/adamhajari/Introduction-to-Data-Science/blob/master/6_Data_Cleaning.ipynb) 58 | - [7.Web Apps with Spyre](https://github.com/adamhajari/Introduction-to-Data-Science/blob/master/7_Web_Apps.ipynb) 59 | -------------------------------------------------------------------------------- /artist_metrics_small.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamhajari/Introduction-to-Data-Science/d2b14506ddcb81ae5d2b7ce8e95e7a15cf4c0108/artist_metrics_small.pkl -------------------------------------------------------------------------------- /artists.csv: -------------------------------------------------------------------------------- 1 | name,musicbrainz_id,id 2 | The Scenic,a8e347d8-29d8-459c-a444-68febeb99c6b,500 3 | Our Family Name,fc93c97f-1b9b-49af-8370-7b36e29ad22e,710 4 | Khamelien,,744 5 | Death in the Park,000c60eb-a2c4-46be-9097-e603fd8795c6,786 6 | enter the collector,f50c0834-e2a7-4241-bd32-061d67560c41,818 7 | Shorelines End,,952 8 | Hollywood Ave,2e258b9f-88bd-42a8-8bec-d977a1254546,1017 9 | Play for keeps,276f57a2-7ba9-41e7-bb11-6d56729bb1f7,1086 10 | Pan Trees,d4cbfbd0-3b75-4430-9722-57c174901c83,1242 11 | Dearth,,1978 12 | Dead Reprise,e9e4e778-fdd3-46c8-8c03-36e31a014b54,2005 13 | Crime Lab,7b0cbb25-c0e3-4e47-9abd-e7378a01945a,2138 14 | Beat Union,79edf7bc-0b58-4c52-92f0-37a0faa57038,2311 15 | Big City Kids,e3dda876-0e6f-4996-bf01-7e8798ded368,2337 16 | Idle Sons,bdd52c2d-2bf1-426e-a992-94616aa1d46b,2982 17 | Spanish Gamble,6d574d88-b5d6-469f-943d-bcb501a9612e,3103 18 | Demiricous,f9974a34-a5ed-4e1c-8059-8225e113a43a,3326 19 | The Mystic Underground,d6cb1345-d8af-4c63-bf47-e577a625c4aa,3606 20 | The Students,ab4c5827-9332-4c4b-b080-d53b05b7183e,3675 21 | Redink,,4297 22 | The Atomic Ballroom Calamity,,4359 23 | aderbat,,4970 24 | Donnie Sloan,c464c26d-fa5e-4085-9239-388f3c6157ae,5153 25 | The American Life,3c472548-0391-481b-8e61-0d3eef8f9a2d,5246 26 | Stan Ipcus,3e0aba46-36f9-4a72-8f1a-b876204b49b0,5673 27 | Seconds to Breathe,747819a3-1f05-4be3-a2ed-b23c33d127cd,5954 28 | Guy Chambers & Sophie Hunter,229d2f2b-a4ce-4f6a-bde5-152804593304,6039 29 | Hey Dakota,,6345 30 | All's Quiet,,6528 31 | Ever Ready Records,3dbddfe3-8d66-4012-b963-b11ee3f2ad2d,6744 32 | Storm The Beaches,,7034 33 | We Are The Fury,c98d1841-f2bf-406b-931d-84516fc2e50b,7061 34 | Eric Scot Porter,5c55ab4f-0b41-4537-8035-7c90d52df5f0,7163 35 | Epollo,,7165 36 | Honesty Eyes,c5118628-0c47-4a8a-86f9-a0e638be697e,7173 37 | Gone By Daylight,921e530c-5c29-489a-aa46-fd9d8cc04c2a,7627 38 | The OverUnder,c8394169-6e07-4a4c-8adc-7055b4421279,8325 39 | Olde York,94c126da-78de-414d-8d52-2a37069eb518,8756 40 | rebecca correia,081c95a4-b3bf-4992-b240-85d0f2a58750,9115 41 | Dremnt the End,5d3850e2-2798-4ed8-95e9-0be87665c326,9166 42 | Young twinn,223ce0b2-865b-4039-b67c-f59894d413de,9343 43 | The Erection Kids,82afc7d5-b773-48bc-a511-8678485a9f23,9809 44 | MoeRoc,,10008 45 | Beight,c1fe023a-d869-4404-a927-b46bdf348875,10606 46 | slowEarth,7077f68e-ae63-4883-8524-29ed8816ec68,10889 47 | Luna Angel,b8b9ec90-126b-4f29-b380-cdc451653007,11073 48 | Dallas Superstars,2284f210-0229-4f19-a64f-a811a7f114c9,11384 49 | Not Sorry,7657ca7f-bac5-4671-a937-8a7160b3fb78,12343 50 | Majic ship,f73d124a-6ac5-4d5c-9df3-8425727ee327,12411 51 | Hello Nurse,289a6156-00d3-4201-9540-1798e2c01e61,12415 52 | Dirty Bird,544f63c1-33f0-4e41-829c-74488e763851,12681 53 | Quincy Coleman,b6dab43e-a42f-4795-b6eb-5b44c4f03f3d,13316 54 | Jayson Belt,893b9756-3be9-4a11-91d7-193c6738125b,13644 55 | Metal Kites,72f153e9-364c-4a40-8306-0657ac36b817,13993 56 | Jelly Joe,588e04c6-cfd8-4f12-ac2c-035fe33c6b85,14124 57 | DJ Impact,1caaafed-6995-4395-9621-63bf63162c56,14307 58 | Buen Chico,2a6c8647-6178-4e83-9b9c-5314f7e23bce,14628 59 | Fast Heart Mart,337818dd-e77c-4184-b706-b47589a7ce9a,14807 60 | Luc Skyz,6e9ba48a-5972-4cf1-bd9f-9d35248c73bc,15039 61 | Greg Howe & Ritchie Kotzen,c5583f98-458e-4de7-8176-00e8e0d3ebea,15075 62 | Willie Isz,23cd5cb7-50f7-419d-a4c9-f758ea68e030,15134 63 | Midevil,,15299 64 | Eli Bolin,,15412 65 | Raina Rose,399f28a0-6837-4014-8092-d5bced4f6b41,15672 66 | Felina,6f393ff8-1f77-40f5-8515-2f72b0c28cf2,15683 67 | Boss Volenti,52980b00-2ac6-4e91-89a4-b8dc6cc2287e,16764 68 | Buddy Leezle,06c9a271-c45f-48f0-8f8a-39f861e7f8bd,17038 69 | Calmer,38acdf39-6586-452e-b92d-b569a1333b2c,17172 70 | Canabasse,,17247 71 | LoudLion,e8e779e1-edec-45bc-ba43-e0d28f48400c,17322 72 | Circus Diablo,877f5179-607d-4a27-8361-439e4e851504,17403 73 | Onion Flavored Rings,2b34c270-cfed-418a-9ee3-ae6125d841c8,17672 74 | Otis Jackson Jr. Trio,10e2c144-8782-4fd5-a0ba-3a7125266695,17698 75 | Pretty Boy Thorson & The Falling Angels,21f3822b-7e97-41a2-bdc2-347d9fe1177c,18278 76 | Shot Baker,9c825e0b-4d4e-4155-a3f0-263c62d6d195,18358 77 | RU36,c44cedbc-9a92-4572-b357-15bbd23d0798,18486 78 | Qurage,,18489 79 | Blackbyrd McKnight,c94a1d00-739c-464b-8984-2e01367fbce3,18751 80 | Ova Looven,cfce497d-d5a6-4634-a232-032030daebd2,18904 81 | Fitter,,19243 82 | Yovee,,19267 83 | Annie Bethancourt,e3b26c0e-1aee-4203-a361-dd6216812232,19288 84 | Sammy Blaze,d564168f-eefb-4841-afa1-0e84074d53e8,19361 85 | The Give It Ups,36597a25-8cfc-47a9-8d83-a4cf70f301d4,19362 86 | Severance,e817449b-a4fd-4e96-974b-8593d07758f6,19432 87 | LaMaW,,19598 88 | Dan Padilla,7dd62fa4-d408-446e-818d-21548b041559,19689 89 | Freestyle Evolution,db16ea37-11b2-4b9f-9a2c-0dabcd86aa26,19806 90 | The Fatal Flaw,94a65125-70ec-4316-950e-f82c9f23f12e,20412 91 | Now That's What I Call Music,5c5b2c0d-c221-42d3-93db-01744062dede,21091 92 | NOTIIBELIKESOMEONE,,21113 93 | Delroy Washington,d443ef12-46a8-487c-aab2-5810e411c251,21148 94 | Tyshawn Sorey,25bb66e5-5010-44de-ac1f-7c431e124eeb,21327 95 | Our Mercury,89116de7-0aa7-47f5-a36c-c7f7cadd7013,21603 96 | John X,de6c91e4-bbc9-4ec6-9142-ba47654a7fa9,21624 97 | Little Sammy Davis,bb0475ad-f101-4a2a-83b7-d06eae8f7b21,21986 98 | Live by the fist,,22128 99 | Lukas Sherfey,61337ef9-3e4d-4228-870d-895e3caa1c6a,22141 100 | Jann Wilde & Rose Avenue,4c457892-7f68-4c93-8bc4-df590b29cb3a,22288 101 | Tidemouth,,22541 102 | The Bridge Band,aa31b48f-f6d8-4d30-9a92-4f16ec0fdde7,23052 103 | Fernando Kabusacki,be28510c-8263-40e7-9613-573af995c6c4,24072 104 | The Voids,feca7cbb-d3ad-4b38-9399-a00aa9f9625f,24256 105 | Great Bloomers,1ae2f002-0bea-4bff-8e18-fd70f96a2395,24918 106 | Outer Spacist,fed64c4b-4ccd-4ea4-b717-93cc5d6e7086,24937 107 | Kid Meets Cougar,992f1e3f-86a3-4b6c-b164-2fdfbe83531f,25631 108 | Evan Brass,ca16ed4f-79b0-4369-b5bd-968cfaaaf7e7,25700 109 | Zenia,a4f4769a-edaa-4490-a1aa-d35deb4f07e7,25741 110 | m t h . E l e c t r o,902286c2-e7d1-4ee8-adb6-216d6a71a05c,25946 111 | BMW (Music),,26058 112 | 77Klash,,26170 113 | Clairmont,,26207 114 | Marc Decoca,72139ae8-cc45-40e9-8a36-d29ea8b66847,26675 115 | The Gertrudes,c8394169-6e07-4a4c-8adc-7055b4421279,26708 116 | Bicycle Records,69ba1791-7b83-4c23-9995-6a47fde9c01f,26966 117 | J Laine,,27084 118 | provincial parks,7a6f9b53-8dd4-4372-b900-22988c252da4,27431 119 | Le Rug,3917de50-0ac1-4a1d-b680-c903f07c6ea2,27700 120 | Ketch Harbour Wolves,0f05d2c9-f90c-47c1-87a9-d9c99aa0be20,27745 121 | Peter Friestedt,0a8fe595-a14e-42b0-ad24-d587a491d54b,28555 122 | Fuck Montreal,87cf6aa6-a005-445b-8920-1c5b3fdfbfaa,28561 123 | Ed in the Refridgerators,e8de09ea-2bfd-43c2-851b-0ccd2109e319,28731 124 | Uncle Monsterface,33a32e1e-9857-4743-9532-344fb6f0c4eb,28738 125 | Peter Murray,6ab4a566-a279-441a-af5f-4d47459e1c18,28932 126 | With Horses In Her Eyes,e026d5d7-f08d-4807-941c-88765e78b02f,29315 127 | Arlequin,1d811df7-e264-4cab-9d12-38ad1af5e415,29347 128 | SIR PSYCH,,29358 129 | Roy Young,e36b3991-b6c3-43ca-a526-271c59aead1b,29461 130 | Utopium,c9125ab5-3bfd-4813-bb0a-4fa7855f4de9,29810 131 | The Bowery Riots,6bb85a2a-c3fa-4d33-92a3-aa89ff291525,29822 132 | Moment Trigger,e8f3f51e-97bd-4994-b3ac-c8cf6d446f53,30110 133 | Falling Starr,85ca9b7c-9763-477a-bc60-e6f83437aade,30226 134 | Tuff Luvs,,30963 135 | SlowMotionNoise,00864544-3bdf-4599-baed-8a7ca9f792bf,31047 136 | allroh,,31236 137 | Owen Lyons,f1d6b892-56a8-4d58-9581-593cf260c6f3,31592 138 | No More Lies,332a07ad-ba98-42bb-a03c-0a4d2deac15a,31697 139 | Carlos Campos & Benjamin Franklin,ef7e0813-ec6c-404c-a91a-70465fe6141b,31895 140 | Drew Nelson,05848221-5b7d-4378-b7f4-e535f9aa9aa9,32261 141 | Williams Riley,e39a8d90-3ae8-4e24-a145-1940a247fe0d,32935 142 | William Susman,,33054 143 | Evyn Charles,687a094a-bd5c-4d90-af53-d3a39407a2d9,33365 144 | The Redlands Palomino Co.,,33497 145 | Bobby Donaldson,ed79aaf4-2b64-4d29-b769-60aff85eb65f,33770 146 | DJ JP,9f4688cf-c8c7-4a5c-8375-88f425230c39,34414 147 | Daniel Bernstein,f00ecbc4-d45d-4d8b-beed-dda037a5d732,34620 148 | Julie Neumark,609ef5a8-7109-4a30-9205-5428a029e34b,34965 149 | Mazinga Phaser,596cca00-9095-4546-a242-77bc2faf38da,35080 150 | Brandon White,,35228 151 | B.G. and the Chopper City Boyz,8fa26ab1-d57b-4fc5-957c-1884fd512a66,35393 152 | Amanda Martin & Lyle Goodman,3862daf7-7fd0-4236-b58a-4c311d9839a2,35984 153 | Jenn Cristy,,36006 154 | AKP,2b524c77-87e7-43bc-b23b-c5967873aed0,36185 155 | Dave Anthony,17c5dce8-1c29-46ba-94f0-70a443c0c94e,36419 156 | Pat McCurdy,6651fa24-38bc-44e4-a1c1-f11003997b8e,36507 157 | Woogie,dae27553-2819-482f-b4eb-2033d534335f,36554 158 | JaGoFF,,36654 159 | Thom Shepherd,,36740 160 | Istvan Szekely,361e711a-a5c0-4065-a27b-c62e261b0afc,36761 161 | Babaryan,,37068 162 | Phil & Daniel Rosenthal (Holiday),19f89a7c-008b-4433-91d7-1a1a68d1591d,37124 163 | Jeff Caylor,bbbdb644-50b2-4777-8e14-64a267c5cd58,37340 164 | Austins Bridge,5a20ff4f-f82e-4d54-8090-07bfbbc85d66,37389 165 | Von Lmo,00acdb34-e215-40e2-a767-320a31c830f1,37522 166 | Speedball Baby,f8ad7724-b6a3-4fa3-8a35-94ced58f15d8,37611 167 | SPORE 333,,38284 168 | Shark Speed,cce4f5bc-ca16-42c4-a1d0-2f10f2e0abce,38745 169 | La Mar Enfortuna,777794ee-62e2-4e9a-a6ad-41781149851e,38748 170 | Kanji Kinetic,77405b55-d52a-4c46-96a3-8e2449af7aa4,38847 171 | Lookout Farm,,39063 172 | Aidan Smith,9ec9b08b-68cd-4439-be6e-16cb7cbb763e,39715 173 | Electricwest,916e68a6-c974-4bfe-80b9-a62b93f32bb6,39741 174 | Henry Blair & Ray Turner,c377cfcb-c2fb-4a0c-9b18-e626fa947ed6,39805 175 | Tinsel Teeth,604e3c07-b5a4-4719-8497-2cd87a7997d8,40057 176 | Ten Thousand Free Men & Their Families,8e4fea9c-a7b6-4a23-9d33-ca79bf0219a3,40470 177 | Patrons of Sweet,8f7aec0b-28c2-4cb0-bd49-c015c185c13b,41124 178 | Naked gods,e66d6295-f96a-436e-abf3-b93d4aa5c52d,41385 179 | Diane Denoir,097263e3-a615-49df-81d3-d6beb14b398d,41433 180 | Mudcat,b69e6e93-73d3-47c0-be28-7a809abdf84e,41799 181 | the german measles,436502a9-004f-41d2-967f-6c8f80d54749,41955 182 | Jonathan Kingham,17638589-dd20-44e7-98fe-acb21e8b6784,42632 183 | Home Items,c3a3ed7e-3d35-459a-92a9-4af20d3656bd,42735 184 | Mark Sinnis,4ba5c621-1d0e-4534-bbbe-680d105ba7ab,43038 185 | Arkadelphia,,43692 186 | David Condos,b5f0a9b2-c577-44bb-83da-fa428de81dbc,43761 187 | Standing Small,,43965 188 | Cath and Phil Tyler,5a50967c-913e-4aae-bf94-edac8b529264,44404 189 | Benjamin Faugloire Project,90750bbc-1b5d-446e-ba81-ed1a2bc30856,44405 190 | Leaf Language,e799dadd-239e-4d39-abc8-70e874dccbf5,44716 191 | NSP,b5ce8b5d-592f-435c-b1bc-b952b59478f0,46399 192 | Round Sky Music,,46580 193 | wezzy,,47360 194 | Three Years Hiding,c8962afc-9c56-4c3b-b393-73830f720f9e,47498 195 | Depressor,d74f2314-51b8-481a-baf0-6771f84a97b0,47947 196 | Spokinn Movement,,48026 197 | Nomade,9cbcac00-5b04-4121-9b7c-ae5f39f37400,48220 198 | Sammy G,,48270 199 | The Pirates Charles,,48311 200 | Bored Of Music,3c3cf8b1-4a65-4f24-a870-36c7487e4869,48558 201 | 3 Minute Warning,b9db348e-6744-408a-b012-7caca1435970,48668 202 | Daniel Gun,6ceae164-46a9-4bc7-a63e-99694da8a758,48814 203 | Doin' It For The Money,,48954 204 | Tony Thomas,c44cae2a-44b3-4828-87a9-99c092769826,49039 205 | Beat the red light,,49079 206 | Devotos,e02933be-dfa0-43ad-b44a-9fb109a881a5,49195 207 | Linh Nguyen,6d04f922-7e1f-4788-a76e-3ff4dafd21e3,49204 208 | Suely Mesquita,9c158c73-0627-492f-9a57-227126bd2a40,49429 209 | Kassiano,,49872 210 | The Black Apples,a697464c-69b1-4bbc-88cc-570c025a25e5,50281 211 | The Mahoney Brothers,833f996c-8703-424e-9307-284d95864783,50560 212 | Fantastadon,c5cbbefb-de04-43d4-9ffc-a5b9cd85b2ef,50660 213 | Machan,,51292 214 | Bentli,,51799 215 | The Sneaks,5ec358f5-4e9b-4fe6-bd75-7f087c050bc9,51997 216 | No Man's Band,32b36a3a-d456-4a49-bb1b-5423782ba7c6,52054 217 | Sars Flannery,a4bb5010-e604-4412-b05b-4dc67fcc846c,52372 218 | Unique Chique,d51531a7-58b2-4cb4-a72f-a7fc801f826a,52427 219 | Mokai,3ad6e69a-0361-4e94-9180-336cb82fcf51,52517 220 | "Bono, Edge, Chris Martin (Coldplay) & Brian Eno",15699b51-b8aa-452d-98ed-9da5e8b9c37a,53275 221 | Guthrie Kennard,1d437a9b-6c1b-4aee-9c43-cec71f1d4050,53329 222 | Only for the sake of aching,c11abfdb-1b4c-4828-b9a2-46040f2d729d,53537 223 | Pine Mountain Railroad,1852587c-74e2-4edf-b609-a2208a1ed71f,53626 224 | Deleted Waveform Gatherings,ef50caa4-c3ba-43a3-95c2-35e3a53efd9a,53663 225 | Die Daily,,53769 226 | Superbutt,638d29dd-fb25-4b30-975a-a9b431042dac,54195 227 | Jack Green,ada2b416-890a-4c12-a4a9-b47447dec780,54667 228 | sTuRcH,,54842 229 | Takeo Toyama,b2d731d0-252d-4842-9707-4f5c5247ee34,55341 230 | Jeff Wootton,,55357 231 | Ian Shaw,7d926e97-df9b-4d3a-b7cd-b8a937a8a5df,55432 232 | Glenn Kaiser,7a6817e4-c0ca-4021-bb40-accd80181461,55500 233 | Jack Brass Band,73701a01-07e2-44f7-8935-e094bdc22892,55597 234 | Estrela Guia,abe427c8-70a4-44dc-b75f-297859473926,55633 235 | Sacrificial Blood,c5d2441a-a659-4e82-a9f1-fd65cffdaa8f,55701 236 | Nothingful,,55963 237 | Ginferno,2707a688-60fc-4884-acb7-f590dc0c247e,56049 238 | Senderos,,56063 239 | Pepe California,303b1a76-bcb1-4cbc-9dc8-9883492c1143,56683 240 | Andrew Gouche,73d347ca-db2c-4ea7-bbfa-76c3f67bf5a7,57014 241 | push pins,1b9e6350-f7f8-483f-9917-a8c9fcf52e99,57027 242 | Queyi,,57326 243 | Black Thunder,,57511 244 | Searing Solace,c14b9e99-73d3-4601-9e1f-85d9c99a086d,57792 245 | DJ Amir,5dd0c8e8-68aa-4c4e-b686-3f77c574602a,57928 246 | Rock gegen rechts,ac6ee694-5f12-44d4-82c7-b8088f7b6661,57962 247 | Unabombers,b0eb9a8f-367c-4bd6-b046-f0a2dd449b20,58129 248 | Scrapy,f7583439-caf4-4573-a00e-e6ccc25658c1,58132 249 | Waco Jesus,133b0b58-3b06-4e96-bdc2-2758918c088d,58271 250 | Man Made Hell,f70b7464-131c-4ca3-a695-5558c3498d7c,58323 251 | Kulin Ban,3cc6c090-e81b-4b20-9704-576f6df28898,58494 252 | The Best of the Worst,4c9eddc3-5bc9-4320-849a-3c3513e3c000,58627 253 | Smoke Like A Fish,8314e9f5-d104-4e28-9db5-ec122ee0672c,58678 254 | Minus Pilots,d407ae0a-d53b-4f69-98ba-bbe9ed04d000,59382 255 | Kp9000,,60095 256 | Mads Tolling,27e47c3e-af28-4d1f-89b6-fc2c7a583310,60138 257 | Rituel,ff0fe9ca-f931-40a4-a3e5-c242b4f3a59b,60198 258 | Broken Yoke,58df6cc0-6251-42ea-9ec0-103818916e65,60466 259 | Do it Yourself,,60792 260 | Pistol For Ringo,d47caa02-e74f-427d-8d45-d533a83ccb74,60929 261 | Dash Jacket,9e28db02-657d-4d6c-970c-a77454248123,61588 262 | Never Turn Back,,61625 263 | The Spooky Men's Chorale,c6fa941e-d403-445f-9cde-5ca0336d7196,61710 264 | Your Enemies Friends,818389a4-36d2-4f9c-9f88-45d595b27781,61712 265 | The Mayhaws,c8394169-6e07-4a4c-8adc-7055b4421279,61779 266 | Nathan Daughtrey,9bf32cee-257e-45ab-8a47-bc910d611dad,62101 267 | propergol y colargol,30986faa-d591-44bc-aff9-47cbdf823e56,62138 268 | Side On Sound,53a96d99-95eb-4b9f-ab27-abf5d3ff7403,62795 269 | druques,,62837 270 | Mortal Agony,3ac7cefa-6281-4384-ac2c-0f052c73f950,63071 271 | SteddyBeats,,63190 272 | Exit State,,63934 273 | Zero Hero,cf3154b9-024e-405d-b581-5f5f7e92ed63,63958 274 | Andy George,85d9152c-cfba-4bcc-8f49-55e3d5d54db2,64037 275 | The Aquamarines,f2bd3a27-965d-47d3-8e12-450e6e939b65,64240 276 | cem tuncer,86f48ea5-dfa2-4f71-b312-19c1f6156c6b,64366 277 | Slashed Seat Affair,e7e0423b-1201-4222-9135-01fcf871f595,64460 278 | Muldoon,,64608 279 | Guzzler,,64672 280 | The Inclined Plane,2d94782f-90f2-4fff-b3bc-1b2e410f43ab,64677 281 | Jahtari Riddim Force,ac6c9805-4e13-45fb-9a3d-c3de7e138fa9,64787 282 | Balbino Medellin,db29c0fa-f015-4cf2-9149-8c3bb073adea,64816 283 | Concrete DJ'z,9ba906bc-092b-4de7-b9bc-16c8a3e6251e,64884 284 | Russian Rullet,,64905 285 | Shagghie,,65056 286 | Standeg,a29ab6cb-cf36-412e-bba1-9dccd358694a,65348 287 | Bad News,9dec8cb1-0b16-43d5-b7f1-b9e24997a240,65364 288 | Sogar,4c02afbe-784d-4589-874c-f6ed951e5b11,65443 289 | Lara Korona,,65548 290 | Sinwar,7d1d2620-afa4-4565-aaf0-8441e7415fba,65694 291 | Albert Sanz,6d5993a7-ef89-41cd-88c8-9ac4d0b39b0c,65713 292 | Wesley Dysart,be4edada-661f-4856-a588-2664de750ee7,65766 293 | Dancing on Debris,,65903 294 | Mikrofisch,27047e70-a833-4627-b589-9888eb7cf6e4,66112 295 | DJ IQ,2ae29e41-cf82-4358-a26a-de253d482023,67022 296 | Dancing with the Enemy,0a02e70e-db2f-4cfe-a646-e8ced413f7d5,67477 297 | CORN HEAD,e9aa5ac8-e65d-4446-890c-d1c2192e3c78,67638 298 | OG Daddy V,15e8741b-474e-4ec9-9ffb-a89db700efb5,67713 299 | Christopher G,5efe021b-61c8-45ed-9c89-ab808a892c96,67894 300 | Ryan Kauffman,e1ab965e-5f2d-499f-9969-a503487f7d7c,68106 301 | Hotel Mama,e31fbea1-a167-4aca-a644-554bddcf97a3,68174 302 | Christian Reichert,1a78d4ba-b927-49ea-bd1e-9e44dcc7eb4e,68230 303 | -------------------------------------------------------------------------------- /artists.tsv: -------------------------------------------------------------------------------- 1 | name musicbrainz_id id 2 | The Scenic a8e347d8-29d8-459c-a444-68febeb99c6b 500 3 | Our Family Name fc93c97f-1b9b-49af-8370-7b36e29ad22e 710 4 | Khamelien 744 5 | Death in the Park 000c60eb-a2c4-46be-9097-e603fd8795c6 786 6 | enter the collector f50c0834-e2a7-4241-bd32-061d67560c41 818 7 | Shorelines End 952 8 | Hollywood Ave 2e258b9f-88bd-42a8-8bec-d977a1254546 1017 9 | Play for keeps 276f57a2-7ba9-41e7-bb11-6d56729bb1f7 1086 10 | Pan Trees d4cbfbd0-3b75-4430-9722-57c174901c83 1242 11 | Dearth 1978 12 | Dead Reprise e9e4e778-fdd3-46c8-8c03-36e31a014b54 2005 13 | Crime Lab 7b0cbb25-c0e3-4e47-9abd-e7378a01945a 2138 14 | Beat Union 79edf7bc-0b58-4c52-92f0-37a0faa57038 2311 15 | Big City Kids e3dda876-0e6f-4996-bf01-7e8798ded368 2337 16 | Idle Sons bdd52c2d-2bf1-426e-a992-94616aa1d46b 2982 17 | Spanish Gamble 6d574d88-b5d6-469f-943d-bcb501a9612e 3103 18 | Demiricous f9974a34-a5ed-4e1c-8059-8225e113a43a 3326 19 | The Mystic Underground d6cb1345-d8af-4c63-bf47-e577a625c4aa 3606 20 | The Students ab4c5827-9332-4c4b-b080-d53b05b7183e 3675 21 | Redink 4297 22 | The Atomic Ballroom Calamity 4359 23 | aderbat 4970 24 | Donnie Sloan c464c26d-fa5e-4085-9239-388f3c6157ae 5153 25 | The American Life 3c472548-0391-481b-8e61-0d3eef8f9a2d 5246 26 | Stan Ipcus 3e0aba46-36f9-4a72-8f1a-b876204b49b0 5673 27 | Seconds to Breathe 747819a3-1f05-4be3-a2ed-b23c33d127cd 5954 28 | Guy Chambers & Sophie Hunter 229d2f2b-a4ce-4f6a-bde5-152804593304 6039 29 | Hey Dakota 6345 30 | All's Quiet 6528 31 | Ever Ready Records 3dbddfe3-8d66-4012-b963-b11ee3f2ad2d 6744 32 | Storm The Beaches 7034 33 | We Are The Fury c98d1841-f2bf-406b-931d-84516fc2e50b 7061 34 | Eric Scot Porter 5c55ab4f-0b41-4537-8035-7c90d52df5f0 7163 35 | Epollo 7165 36 | Honesty Eyes c5118628-0c47-4a8a-86f9-a0e638be697e 7173 37 | Gone By Daylight 921e530c-5c29-489a-aa46-fd9d8cc04c2a 7627 38 | The OverUnder c8394169-6e07-4a4c-8adc-7055b4421279 8325 39 | Olde York 94c126da-78de-414d-8d52-2a37069eb518 8756 40 | rebecca correia 081c95a4-b3bf-4992-b240-85d0f2a58750 9115 41 | Dremnt the End 5d3850e2-2798-4ed8-95e9-0be87665c326 9166 42 | Young twinn 223ce0b2-865b-4039-b67c-f59894d413de 9343 43 | The Erection Kids 82afc7d5-b773-48bc-a511-8678485a9f23 9809 44 | MoeRoc 10008 45 | Beight c1fe023a-d869-4404-a927-b46bdf348875 10606 46 | slowEarth 7077f68e-ae63-4883-8524-29ed8816ec68 10889 47 | Luna Angel b8b9ec90-126b-4f29-b380-cdc451653007 11073 48 | Dallas Superstars 2284f210-0229-4f19-a64f-a811a7f114c9 11384 49 | Not Sorry 7657ca7f-bac5-4671-a937-8a7160b3fb78 12343 50 | Majic ship f73d124a-6ac5-4d5c-9df3-8425727ee327 12411 51 | Hello Nurse 289a6156-00d3-4201-9540-1798e2c01e61 12415 52 | Dirty Bird 544f63c1-33f0-4e41-829c-74488e763851 12681 53 | Quincy Coleman b6dab43e-a42f-4795-b6eb-5b44c4f03f3d 13316 54 | Jayson Belt 893b9756-3be9-4a11-91d7-193c6738125b 13644 55 | Metal Kites 72f153e9-364c-4a40-8306-0657ac36b817 13993 56 | Jelly Joe 588e04c6-cfd8-4f12-ac2c-035fe33c6b85 14124 57 | DJ Impact 1caaafed-6995-4395-9621-63bf63162c56 14307 58 | Buen Chico 2a6c8647-6178-4e83-9b9c-5314f7e23bce 14628 59 | Fast Heart Mart 337818dd-e77c-4184-b706-b47589a7ce9a 14807 60 | Luc Skyz 6e9ba48a-5972-4cf1-bd9f-9d35248c73bc 15039 61 | Greg Howe & Ritchie Kotzen c5583f98-458e-4de7-8176-00e8e0d3ebea 15075 62 | Willie Isz 23cd5cb7-50f7-419d-a4c9-f758ea68e030 15134 63 | Midevil 15299 64 | Eli Bolin 15412 65 | Raina Rose 399f28a0-6837-4014-8092-d5bced4f6b41 15672 66 | Felina 6f393ff8-1f77-40f5-8515-2f72b0c28cf2 15683 67 | Boss Volenti 52980b00-2ac6-4e91-89a4-b8dc6cc2287e 16764 68 | Buddy Leezle 06c9a271-c45f-48f0-8f8a-39f861e7f8bd 17038 69 | Calmer 38acdf39-6586-452e-b92d-b569a1333b2c 17172 70 | Canabasse 17247 71 | LoudLion e8e779e1-edec-45bc-ba43-e0d28f48400c 17322 72 | Circus Diablo 877f5179-607d-4a27-8361-439e4e851504 17403 73 | Onion Flavored Rings 2b34c270-cfed-418a-9ee3-ae6125d841c8 17672 74 | Otis Jackson Jr. Trio 10e2c144-8782-4fd5-a0ba-3a7125266695 17698 75 | Pretty Boy Thorson & The Falling Angels 21f3822b-7e97-41a2-bdc2-347d9fe1177c 18278 76 | Shot Baker 9c825e0b-4d4e-4155-a3f0-263c62d6d195 18358 77 | RU36 c44cedbc-9a92-4572-b357-15bbd23d0798 18486 78 | Qurage 18489 79 | Blackbyrd McKnight c94a1d00-739c-464b-8984-2e01367fbce3 18751 80 | Ova Looven cfce497d-d5a6-4634-a232-032030daebd2 18904 81 | Fitter 19243 82 | Yovee 19267 83 | Annie Bethancourt e3b26c0e-1aee-4203-a361-dd6216812232 19288 84 | Sammy Blaze d564168f-eefb-4841-afa1-0e84074d53e8 19361 85 | The Give It Ups 36597a25-8cfc-47a9-8d83-a4cf70f301d4 19362 86 | Severance e817449b-a4fd-4e96-974b-8593d07758f6 19432 87 | LaMaW 19598 88 | Dan Padilla 7dd62fa4-d408-446e-818d-21548b041559 19689 89 | Freestyle Evolution db16ea37-11b2-4b9f-9a2c-0dabcd86aa26 19806 90 | The Fatal Flaw 94a65125-70ec-4316-950e-f82c9f23f12e 20412 91 | Now That's What I Call Music 5c5b2c0d-c221-42d3-93db-01744062dede 21091 92 | NOTIIBELIKESOMEONE 21113 93 | Delroy Washington d443ef12-46a8-487c-aab2-5810e411c251 21148 94 | Tyshawn Sorey 25bb66e5-5010-44de-ac1f-7c431e124eeb 21327 95 | Our Mercury 89116de7-0aa7-47f5-a36c-c7f7cadd7013 21603 96 | John X de6c91e4-bbc9-4ec6-9142-ba47654a7fa9 21624 97 | Little Sammy Davis bb0475ad-f101-4a2a-83b7-d06eae8f7b21 21986 98 | Live by the fist 22128 99 | Lukas Sherfey 61337ef9-3e4d-4228-870d-895e3caa1c6a 22141 100 | Jann Wilde & Rose Avenue 4c457892-7f68-4c93-8bc4-df590b29cb3a 22288 101 | Tidemouth 22541 102 | The Bridge Band aa31b48f-f6d8-4d30-9a92-4f16ec0fdde7 23052 103 | Fernando Kabusacki be28510c-8263-40e7-9613-573af995c6c4 24072 104 | The Voids feca7cbb-d3ad-4b38-9399-a00aa9f9625f 24256 105 | Great Bloomers 1ae2f002-0bea-4bff-8e18-fd70f96a2395 24918 106 | Outer Spacist fed64c4b-4ccd-4ea4-b717-93cc5d6e7086 24937 107 | Kid Meets Cougar 992f1e3f-86a3-4b6c-b164-2fdfbe83531f 25631 108 | Evan Brass ca16ed4f-79b0-4369-b5bd-968cfaaaf7e7 25700 109 | Zenia a4f4769a-edaa-4490-a1aa-d35deb4f07e7 25741 110 | m t h . E l e c t r o 902286c2-e7d1-4ee8-adb6-216d6a71a05c 25946 111 | BMW (Music) 26058 112 | 77Klash 26170 113 | Clairmont 26207 114 | Marc Decoca 72139ae8-cc45-40e9-8a36-d29ea8b66847 26675 115 | The Gertrudes c8394169-6e07-4a4c-8adc-7055b4421279 26708 116 | Bicycle Records 69ba1791-7b83-4c23-9995-6a47fde9c01f 26966 117 | J Laine 27084 118 | provincial parks 7a6f9b53-8dd4-4372-b900-22988c252da4 27431 119 | Le Rug 3917de50-0ac1-4a1d-b680-c903f07c6ea2 27700 120 | Ketch Harbour Wolves 0f05d2c9-f90c-47c1-87a9-d9c99aa0be20 27745 121 | Peter Friestedt 0a8fe595-a14e-42b0-ad24-d587a491d54b 28555 122 | Fuck Montreal 87cf6aa6-a005-445b-8920-1c5b3fdfbfaa 28561 123 | Ed in the Refridgerators e8de09ea-2bfd-43c2-851b-0ccd2109e319 28731 124 | Uncle Monsterface 33a32e1e-9857-4743-9532-344fb6f0c4eb 28738 125 | Peter Murray 6ab4a566-a279-441a-af5f-4d47459e1c18 28932 126 | With Horses In Her Eyes e026d5d7-f08d-4807-941c-88765e78b02f 29315 127 | Arlequin 1d811df7-e264-4cab-9d12-38ad1af5e415 29347 128 | SIR PSYCH 29358 129 | Roy Young e36b3991-b6c3-43ca-a526-271c59aead1b 29461 130 | Utopium c9125ab5-3bfd-4813-bb0a-4fa7855f4de9 29810 131 | The Bowery Riots 6bb85a2a-c3fa-4d33-92a3-aa89ff291525 29822 132 | Moment Trigger e8f3f51e-97bd-4994-b3ac-c8cf6d446f53 30110 133 | Falling Starr 85ca9b7c-9763-477a-bc60-e6f83437aade 30226 134 | Tuff Luvs 30963 135 | SlowMotionNoise 00864544-3bdf-4599-baed-8a7ca9f792bf 31047 136 | allroh 31236 137 | Owen Lyons f1d6b892-56a8-4d58-9581-593cf260c6f3 31592 138 | No More Lies 332a07ad-ba98-42bb-a03c-0a4d2deac15a 31697 139 | Carlos Campos & Benjamin Franklin ef7e0813-ec6c-404c-a91a-70465fe6141b 31895 140 | Drew Nelson 05848221-5b7d-4378-b7f4-e535f9aa9aa9 32261 141 | Williams Riley e39a8d90-3ae8-4e24-a145-1940a247fe0d 32935 142 | William Susman 33054 143 | Evyn Charles 687a094a-bd5c-4d90-af53-d3a39407a2d9 33365 144 | The Redlands Palomino Co. 33497 145 | Bobby Donaldson ed79aaf4-2b64-4d29-b769-60aff85eb65f 33770 146 | DJ JP 9f4688cf-c8c7-4a5c-8375-88f425230c39 34414 147 | Daniel Bernstein f00ecbc4-d45d-4d8b-beed-dda037a5d732 34620 148 | Julie Neumark 609ef5a8-7109-4a30-9205-5428a029e34b 34965 149 | Mazinga Phaser 596cca00-9095-4546-a242-77bc2faf38da 35080 150 | Brandon White 35228 151 | B.G. and the Chopper City Boyz 8fa26ab1-d57b-4fc5-957c-1884fd512a66 35393 152 | Amanda Martin & Lyle Goodman 3862daf7-7fd0-4236-b58a-4c311d9839a2 35984 153 | Jenn Cristy 36006 154 | AKP 2b524c77-87e7-43bc-b23b-c5967873aed0 36185 155 | Dave Anthony 17c5dce8-1c29-46ba-94f0-70a443c0c94e 36419 156 | Pat McCurdy 6651fa24-38bc-44e4-a1c1-f11003997b8e 36507 157 | Woogie dae27553-2819-482f-b4eb-2033d534335f 36554 158 | JaGoFF 36654 159 | Thom Shepherd 36740 160 | Istvan Szekely 361e711a-a5c0-4065-a27b-c62e261b0afc 36761 161 | Babaryan 37068 162 | Phil & Daniel Rosenthal (Holiday) 19f89a7c-008b-4433-91d7-1a1a68d1591d 37124 163 | Jeff Caylor bbbdb644-50b2-4777-8e14-64a267c5cd58 37340 164 | Austins Bridge 5a20ff4f-f82e-4d54-8090-07bfbbc85d66 37389 165 | Von Lmo 00acdb34-e215-40e2-a767-320a31c830f1 37522 166 | Speedball Baby f8ad7724-b6a3-4fa3-8a35-94ced58f15d8 37611 167 | SPORE 333 38284 168 | Shark Speed cce4f5bc-ca16-42c4-a1d0-2f10f2e0abce 38745 169 | La Mar Enfortuna 777794ee-62e2-4e9a-a6ad-41781149851e 38748 170 | Kanji Kinetic 77405b55-d52a-4c46-96a3-8e2449af7aa4 38847 171 | Lookout Farm 39063 172 | Aidan Smith 9ec9b08b-68cd-4439-be6e-16cb7cbb763e 39715 173 | Electricwest 916e68a6-c974-4bfe-80b9-a62b93f32bb6 39741 174 | Henry Blair & Ray Turner c377cfcb-c2fb-4a0c-9b18-e626fa947ed6 39805 175 | Tinsel Teeth 604e3c07-b5a4-4719-8497-2cd87a7997d8 40057 176 | Ten Thousand Free Men & Their Families 8e4fea9c-a7b6-4a23-9d33-ca79bf0219a3 40470 177 | Patrons of Sweet 8f7aec0b-28c2-4cb0-bd49-c015c185c13b 41124 178 | Naked gods e66d6295-f96a-436e-abf3-b93d4aa5c52d 41385 179 | Diane Denoir 097263e3-a615-49df-81d3-d6beb14b398d 41433 180 | Mudcat b69e6e93-73d3-47c0-be28-7a809abdf84e 41799 181 | the german measles 436502a9-004f-41d2-967f-6c8f80d54749 41955 182 | Jonathan Kingham 17638589-dd20-44e7-98fe-acb21e8b6784 42632 183 | Home Items c3a3ed7e-3d35-459a-92a9-4af20d3656bd 42735 184 | Mark Sinnis 4ba5c621-1d0e-4534-bbbe-680d105ba7ab 43038 185 | Arkadelphia 43692 186 | David Condos b5f0a9b2-c577-44bb-83da-fa428de81dbc 43761 187 | Standing Small 43965 188 | Cath and Phil Tyler 5a50967c-913e-4aae-bf94-edac8b529264 44404 189 | Benjamin Faugloire Project 90750bbc-1b5d-446e-ba81-ed1a2bc30856 44405 190 | Leaf Language e799dadd-239e-4d39-abc8-70e874dccbf5 44716 191 | NSP b5ce8b5d-592f-435c-b1bc-b952b59478f0 46399 192 | Round Sky Music 46580 193 | wezzy 47360 194 | Three Years Hiding c8962afc-9c56-4c3b-b393-73830f720f9e 47498 195 | Depressor d74f2314-51b8-481a-baf0-6771f84a97b0 47947 196 | Spokinn Movement 48026 197 | Nomade 9cbcac00-5b04-4121-9b7c-ae5f39f37400 48220 198 | Sammy G 48270 199 | The Pirates Charles 48311 200 | Bored Of Music 3c3cf8b1-4a65-4f24-a870-36c7487e4869 48558 201 | 3 Minute Warning b9db348e-6744-408a-b012-7caca1435970 48668 202 | Daniel Gun 6ceae164-46a9-4bc7-a63e-99694da8a758 48814 203 | Doin' It For The Money 48954 204 | Tony Thomas c44cae2a-44b3-4828-87a9-99c092769826 49039 205 | Beat the red light 49079 206 | Devotos e02933be-dfa0-43ad-b44a-9fb109a881a5 49195 207 | Linh Nguyen 6d04f922-7e1f-4788-a76e-3ff4dafd21e3 49204 208 | Suely Mesquita 9c158c73-0627-492f-9a57-227126bd2a40 49429 209 | Kassiano 49872 210 | The Black Apples a697464c-69b1-4bbc-88cc-570c025a25e5 50281 211 | The Mahoney Brothers 833f996c-8703-424e-9307-284d95864783 50560 212 | Fantastadon c5cbbefb-de04-43d4-9ffc-a5b9cd85b2ef 50660 213 | Machan 51292 214 | Bentli 51799 215 | The Sneaks 5ec358f5-4e9b-4fe6-bd75-7f087c050bc9 51997 216 | No Man's Band 32b36a3a-d456-4a49-bb1b-5423782ba7c6 52054 217 | Sars Flannery a4bb5010-e604-4412-b05b-4dc67fcc846c 52372 218 | Unique Chique d51531a7-58b2-4cb4-a72f-a7fc801f826a 52427 219 | Mokai 3ad6e69a-0361-4e94-9180-336cb82fcf51 52517 220 | Bono, Edge, Chris Martin (Coldplay) & Brian Eno 15699b51-b8aa-452d-98ed-9da5e8b9c37a 53275 221 | Guthrie Kennard 1d437a9b-6c1b-4aee-9c43-cec71f1d4050 53329 222 | Only for the sake of aching c11abfdb-1b4c-4828-b9a2-46040f2d729d 53537 223 | Pine Mountain Railroad 1852587c-74e2-4edf-b609-a2208a1ed71f 53626 224 | Deleted Waveform Gatherings ef50caa4-c3ba-43a3-95c2-35e3a53efd9a 53663 225 | Die Daily 53769 226 | Superbutt 638d29dd-fb25-4b30-975a-a9b431042dac 54195 227 | Jack Green ada2b416-890a-4c12-a4a9-b47447dec780 54667 228 | sTuRcH 54842 229 | Takeo Toyama b2d731d0-252d-4842-9707-4f5c5247ee34 55341 230 | Jeff Wootton 55357 231 | Ian Shaw 7d926e97-df9b-4d3a-b7cd-b8a937a8a5df 55432 232 | Glenn Kaiser 7a6817e4-c0ca-4021-bb40-accd80181461 55500 233 | Jack Brass Band 73701a01-07e2-44f7-8935-e094bdc22892 55597 234 | Estrela Guia abe427c8-70a4-44dc-b75f-297859473926 55633 235 | Sacrificial Blood c5d2441a-a659-4e82-a9f1-fd65cffdaa8f 55701 236 | Nothingful 55963 237 | Ginferno 2707a688-60fc-4884-acb7-f590dc0c247e 56049 238 | Senderos 56063 239 | Pepe California 303b1a76-bcb1-4cbc-9dc8-9883492c1143 56683 240 | Andrew Gouche 73d347ca-db2c-4ea7-bbfa-76c3f67bf5a7 57014 241 | push pins 1b9e6350-f7f8-483f-9917-a8c9fcf52e99 57027 242 | Queyi 57326 243 | Black Thunder 57511 244 | Searing Solace c14b9e99-73d3-4601-9e1f-85d9c99a086d 57792 245 | DJ Amir 5dd0c8e8-68aa-4c4e-b686-3f77c574602a 57928 246 | Rock gegen rechts ac6ee694-5f12-44d4-82c7-b8088f7b6661 57962 247 | Unabombers b0eb9a8f-367c-4bd6-b046-f0a2dd449b20 58129 248 | Scrapy f7583439-caf4-4573-a00e-e6ccc25658c1 58132 249 | Waco Jesus 133b0b58-3b06-4e96-bdc2-2758918c088d 58271 250 | Man Made Hell f70b7464-131c-4ca3-a695-5558c3498d7c 58323 251 | Kulin Ban 3cc6c090-e81b-4b20-9704-576f6df28898 58494 252 | The Best of the Worst 4c9eddc3-5bc9-4320-849a-3c3513e3c000 58627 253 | Smoke Like A Fish 8314e9f5-d104-4e28-9db5-ec122ee0672c 58678 254 | Minus Pilots d407ae0a-d53b-4f69-98ba-bbe9ed04d000 59382 255 | Kp9000 60095 256 | Mads Tolling 27e47c3e-af28-4d1f-89b6-fc2c7a583310 60138 257 | Rituel ff0fe9ca-f931-40a4-a3e5-c242b4f3a59b 60198 258 | Broken Yoke 58df6cc0-6251-42ea-9ec0-103818916e65 60466 259 | Do it Yourself 60792 260 | Pistol For Ringo d47caa02-e74f-427d-8d45-d533a83ccb74 60929 261 | Dash Jacket 9e28db02-657d-4d6c-970c-a77454248123 61588 262 | Never Turn Back 61625 263 | The Spooky Men's Chorale c6fa941e-d403-445f-9cde-5ca0336d7196 61710 264 | Your Enemies Friends 818389a4-36d2-4f9c-9f88-45d595b27781 61712 265 | The Mayhaws c8394169-6e07-4a4c-8adc-7055b4421279 61779 266 | Nathan Daughtrey 9bf32cee-257e-45ab-8a47-bc910d611dad 62101 267 | propergol y colargol 30986faa-d591-44bc-aff9-47cbdf823e56 62138 268 | Side On Sound 53a96d99-95eb-4b9f-ab27-abf5d3ff7403 62795 269 | druques 62837 270 | Mortal Agony 3ac7cefa-6281-4384-ac2c-0f052c73f950 63071 271 | SteddyBeats 63190 272 | Exit State 63934 273 | Zero Hero cf3154b9-024e-405d-b581-5f5f7e92ed63 63958 274 | Andy George 85d9152c-cfba-4bcc-8f49-55e3d5d54db2 64037 275 | The Aquamarines f2bd3a27-965d-47d3-8e12-450e6e939b65 64240 276 | cem tuncer 86f48ea5-dfa2-4f71-b312-19c1f6156c6b 64366 277 | Slashed Seat Affair e7e0423b-1201-4222-9135-01fcf871f595 64460 278 | Muldoon 64608 279 | Guzzler 64672 280 | The Inclined Plane 2d94782f-90f2-4fff-b3bc-1b2e410f43ab 64677 281 | Jahtari Riddim Force ac6c9805-4e13-45fb-9a3d-c3de7e138fa9 64787 282 | Balbino Medellin db29c0fa-f015-4cf2-9149-8c3bb073adea 64816 283 | Concrete DJ'z 9ba906bc-092b-4de7-b9bc-16c8a3e6251e 64884 284 | Russian Rullet 64905 285 | Shagghie 65056 286 | Standeg a29ab6cb-cf36-412e-bba1-9dccd358694a 65348 287 | Bad News 9dec8cb1-0b16-43d5-b7f1-b9e24997a240 65364 288 | Sogar 4c02afbe-784d-4589-874c-f6ed951e5b11 65443 289 | Lara Korona 65548 290 | Sinwar 7d1d2620-afa4-4565-aaf0-8441e7415fba 65694 291 | Albert Sanz 6d5993a7-ef89-41cd-88c8-9ac4d0b39b0c 65713 292 | Wesley Dysart be4edada-661f-4856-a588-2664de750ee7 65766 293 | Dancing on Debris 65903 294 | Mikrofisch 27047e70-a833-4627-b589-9888eb7cf6e4 66112 295 | DJ IQ 2ae29e41-cf82-4358-a26a-de253d482023 67022 296 | Dancing with the Enemy 0a02e70e-db2f-4cfe-a646-e8ced413f7d5 67477 297 | CORN HEAD e9aa5ac8-e65d-4446-890c-d1c2192e3c78 67638 298 | OG Daddy V 15e8741b-474e-4ec9-9ffb-a89db700efb5 67713 299 | Christopher G 5efe021b-61c8-45ed-9c89-ab808a892c96 67894 300 | Ryan Kauffman e1ab965e-5f2d-499f-9969-a503487f7d7c 68106 301 | Hotel Mama e31fbea1-a167-4aca-a644-554bddcf97a3 68174 302 | Christian Reichert 1a78d4ba-b927-49ea-bd1e-9e44dcc7eb4e 68230 303 | -------------------------------------------------------------------------------- /artists_no_column_names.csv: -------------------------------------------------------------------------------- 1 | The Scenic,a8e347d8-29d8-459c-a444-68febeb99c6b,500 2 | Our Family Name,fc93c97f-1b9b-49af-8370-7b36e29ad22e,710 3 | Khamelien,,744 4 | Death in the Park,000c60eb-a2c4-46be-9097-e603fd8795c6,786 5 | enter the collector,f50c0834-e2a7-4241-bd32-061d67560c41,818 6 | Shorelines End,,952 7 | Hollywood Ave,2e258b9f-88bd-42a8-8bec-d977a1254546,1017 8 | Play for keeps,276f57a2-7ba9-41e7-bb11-6d56729bb1f7,1086 9 | Pan Trees,d4cbfbd0-3b75-4430-9722-57c174901c83,1242 10 | Dearth,,1978 11 | Dead Reprise,e9e4e778-fdd3-46c8-8c03-36e31a014b54,2005 12 | Crime Lab,7b0cbb25-c0e3-4e47-9abd-e7378a01945a,2138 13 | Beat Union,79edf7bc-0b58-4c52-92f0-37a0faa57038,2311 14 | Big City Kids,e3dda876-0e6f-4996-bf01-7e8798ded368,2337 15 | Idle Sons,bdd52c2d-2bf1-426e-a992-94616aa1d46b,2982 16 | Spanish Gamble,6d574d88-b5d6-469f-943d-bcb501a9612e,3103 17 | Demiricous,f9974a34-a5ed-4e1c-8059-8225e113a43a,3326 18 | The Mystic Underground,d6cb1345-d8af-4c63-bf47-e577a625c4aa,3606 19 | The Students,ab4c5827-9332-4c4b-b080-d53b05b7183e,3675 20 | Redink,,4297 21 | The Atomic Ballroom Calamity,,4359 22 | aderbat,,4970 23 | Donnie Sloan,c464c26d-fa5e-4085-9239-388f3c6157ae,5153 24 | The American Life,3c472548-0391-481b-8e61-0d3eef8f9a2d,5246 25 | Stan Ipcus,3e0aba46-36f9-4a72-8f1a-b876204b49b0,5673 26 | Seconds to Breathe,747819a3-1f05-4be3-a2ed-b23c33d127cd,5954 27 | Guy Chambers & Sophie Hunter,229d2f2b-a4ce-4f6a-bde5-152804593304,6039 28 | Hey Dakota,,6345 29 | All's Quiet,,6528 30 | Ever Ready Records,3dbddfe3-8d66-4012-b963-b11ee3f2ad2d,6744 31 | Storm The Beaches,,7034 32 | We Are The Fury,c98d1841-f2bf-406b-931d-84516fc2e50b,7061 33 | Eric Scot Porter,5c55ab4f-0b41-4537-8035-7c90d52df5f0,7163 34 | Epollo,,7165 35 | Honesty Eyes,c5118628-0c47-4a8a-86f9-a0e638be697e,7173 36 | Gone By Daylight,921e530c-5c29-489a-aa46-fd9d8cc04c2a,7627 37 | The OverUnder,c8394169-6e07-4a4c-8adc-7055b4421279,8325 38 | Olde York,94c126da-78de-414d-8d52-2a37069eb518,8756 39 | rebecca correia,081c95a4-b3bf-4992-b240-85d0f2a58750,9115 40 | Dremnt the End,5d3850e2-2798-4ed8-95e9-0be87665c326,9166 41 | Young twinn,223ce0b2-865b-4039-b67c-f59894d413de,9343 42 | The Erection Kids,82afc7d5-b773-48bc-a511-8678485a9f23,9809 43 | MoeRoc,,10008 44 | Beight,c1fe023a-d869-4404-a927-b46bdf348875,10606 45 | slowEarth,7077f68e-ae63-4883-8524-29ed8816ec68,10889 46 | Luna Angel,b8b9ec90-126b-4f29-b380-cdc451653007,11073 47 | Dallas Superstars,2284f210-0229-4f19-a64f-a811a7f114c9,11384 48 | Not Sorry,7657ca7f-bac5-4671-a937-8a7160b3fb78,12343 49 | Majic ship,f73d124a-6ac5-4d5c-9df3-8425727ee327,12411 50 | Hello Nurse,289a6156-00d3-4201-9540-1798e2c01e61,12415 51 | Dirty Bird,544f63c1-33f0-4e41-829c-74488e763851,12681 52 | Quincy Coleman,b6dab43e-a42f-4795-b6eb-5b44c4f03f3d,13316 53 | Jayson Belt,893b9756-3be9-4a11-91d7-193c6738125b,13644 54 | Metal Kites,72f153e9-364c-4a40-8306-0657ac36b817,13993 55 | Jelly Joe,588e04c6-cfd8-4f12-ac2c-035fe33c6b85,14124 56 | DJ Impact,1caaafed-6995-4395-9621-63bf63162c56,14307 57 | Buen Chico,2a6c8647-6178-4e83-9b9c-5314f7e23bce,14628 58 | Fast Heart Mart,337818dd-e77c-4184-b706-b47589a7ce9a,14807 59 | Luc Skyz,6e9ba48a-5972-4cf1-bd9f-9d35248c73bc,15039 60 | Greg Howe & Ritchie Kotzen,c5583f98-458e-4de7-8176-00e8e0d3ebea,15075 61 | Willie Isz,23cd5cb7-50f7-419d-a4c9-f758ea68e030,15134 62 | Midevil,,15299 63 | Eli Bolin,,15412 64 | Raina Rose,399f28a0-6837-4014-8092-d5bced4f6b41,15672 65 | Felina,6f393ff8-1f77-40f5-8515-2f72b0c28cf2,15683 66 | Boss Volenti,52980b00-2ac6-4e91-89a4-b8dc6cc2287e,16764 67 | Buddy Leezle,06c9a271-c45f-48f0-8f8a-39f861e7f8bd,17038 68 | Calmer,38acdf39-6586-452e-b92d-b569a1333b2c,17172 69 | Canabasse,,17247 70 | LoudLion,e8e779e1-edec-45bc-ba43-e0d28f48400c,17322 71 | Circus Diablo,877f5179-607d-4a27-8361-439e4e851504,17403 72 | Onion Flavored Rings,2b34c270-cfed-418a-9ee3-ae6125d841c8,17672 73 | Otis Jackson Jr. Trio,10e2c144-8782-4fd5-a0ba-3a7125266695,17698 74 | Pretty Boy Thorson & The Falling Angels,21f3822b-7e97-41a2-bdc2-347d9fe1177c,18278 75 | Shot Baker,9c825e0b-4d4e-4155-a3f0-263c62d6d195,18358 76 | RU36,c44cedbc-9a92-4572-b357-15bbd23d0798,18486 77 | Qurage,,18489 78 | Blackbyrd McKnight,c94a1d00-739c-464b-8984-2e01367fbce3,18751 79 | Ova Looven,cfce497d-d5a6-4634-a232-032030daebd2,18904 80 | Fitter,,19243 81 | Yovee,,19267 82 | Annie Bethancourt,e3b26c0e-1aee-4203-a361-dd6216812232,19288 83 | Sammy Blaze,d564168f-eefb-4841-afa1-0e84074d53e8,19361 84 | The Give It Ups,36597a25-8cfc-47a9-8d83-a4cf70f301d4,19362 85 | Severance,e817449b-a4fd-4e96-974b-8593d07758f6,19432 86 | LaMaW,,19598 87 | Dan Padilla,7dd62fa4-d408-446e-818d-21548b041559,19689 88 | Freestyle Evolution,db16ea37-11b2-4b9f-9a2c-0dabcd86aa26,19806 89 | The Fatal Flaw,94a65125-70ec-4316-950e-f82c9f23f12e,20412 90 | Now That's What I Call Music,5c5b2c0d-c221-42d3-93db-01744062dede,21091 91 | NOTIIBELIKESOMEONE,,21113 92 | Delroy Washington,d443ef12-46a8-487c-aab2-5810e411c251,21148 93 | Tyshawn Sorey,25bb66e5-5010-44de-ac1f-7c431e124eeb,21327 94 | Our Mercury,89116de7-0aa7-47f5-a36c-c7f7cadd7013,21603 95 | John X,de6c91e4-bbc9-4ec6-9142-ba47654a7fa9,21624 96 | Little Sammy Davis,bb0475ad-f101-4a2a-83b7-d06eae8f7b21,21986 97 | Live by the fist,,22128 98 | Lukas Sherfey,61337ef9-3e4d-4228-870d-895e3caa1c6a,22141 99 | Jann Wilde & Rose Avenue,4c457892-7f68-4c93-8bc4-df590b29cb3a,22288 100 | Tidemouth,,22541 101 | The Bridge Band,aa31b48f-f6d8-4d30-9a92-4f16ec0fdde7,23052 102 | Fernando Kabusacki,be28510c-8263-40e7-9613-573af995c6c4,24072 103 | The Voids,feca7cbb-d3ad-4b38-9399-a00aa9f9625f,24256 104 | Great Bloomers,1ae2f002-0bea-4bff-8e18-fd70f96a2395,24918 105 | Outer Spacist,fed64c4b-4ccd-4ea4-b717-93cc5d6e7086,24937 106 | Kid Meets Cougar,992f1e3f-86a3-4b6c-b164-2fdfbe83531f,25631 107 | Evan Brass,ca16ed4f-79b0-4369-b5bd-968cfaaaf7e7,25700 108 | Zenia,a4f4769a-edaa-4490-a1aa-d35deb4f07e7,25741 109 | m t h . E l e c t r o,902286c2-e7d1-4ee8-adb6-216d6a71a05c,25946 110 | BMW (Music),,26058 111 | 77Klash,,26170 112 | Clairmont,,26207 113 | Marc Decoca,72139ae8-cc45-40e9-8a36-d29ea8b66847,26675 114 | The Gertrudes,c8394169-6e07-4a4c-8adc-7055b4421279,26708 115 | Bicycle Records,69ba1791-7b83-4c23-9995-6a47fde9c01f,26966 116 | J Laine,,27084 117 | provincial parks,7a6f9b53-8dd4-4372-b900-22988c252da4,27431 118 | Le Rug,3917de50-0ac1-4a1d-b680-c903f07c6ea2,27700 119 | Ketch Harbour Wolves,0f05d2c9-f90c-47c1-87a9-d9c99aa0be20,27745 120 | Peter Friestedt,0a8fe595-a14e-42b0-ad24-d587a491d54b,28555 121 | Fuck Montreal,87cf6aa6-a005-445b-8920-1c5b3fdfbfaa,28561 122 | Ed in the Refridgerators,e8de09ea-2bfd-43c2-851b-0ccd2109e319,28731 123 | Uncle Monsterface,33a32e1e-9857-4743-9532-344fb6f0c4eb,28738 124 | Peter Murray,6ab4a566-a279-441a-af5f-4d47459e1c18,28932 125 | With Horses In Her Eyes,e026d5d7-f08d-4807-941c-88765e78b02f,29315 126 | Arlequin,1d811df7-e264-4cab-9d12-38ad1af5e415,29347 127 | SIR PSYCH,,29358 128 | Roy Young,e36b3991-b6c3-43ca-a526-271c59aead1b,29461 129 | Utopium,c9125ab5-3bfd-4813-bb0a-4fa7855f4de9,29810 130 | The Bowery Riots,6bb85a2a-c3fa-4d33-92a3-aa89ff291525,29822 131 | Moment Trigger,e8f3f51e-97bd-4994-b3ac-c8cf6d446f53,30110 132 | Falling Starr,85ca9b7c-9763-477a-bc60-e6f83437aade,30226 133 | Tuff Luvs,,30963 134 | SlowMotionNoise,00864544-3bdf-4599-baed-8a7ca9f792bf,31047 135 | allroh,,31236 136 | Owen Lyons,f1d6b892-56a8-4d58-9581-593cf260c6f3,31592 137 | No More Lies,332a07ad-ba98-42bb-a03c-0a4d2deac15a,31697 138 | Carlos Campos & Benjamin Franklin,ef7e0813-ec6c-404c-a91a-70465fe6141b,31895 139 | Drew Nelson,05848221-5b7d-4378-b7f4-e535f9aa9aa9,32261 140 | Williams Riley,e39a8d90-3ae8-4e24-a145-1940a247fe0d,32935 141 | William Susman,,33054 142 | Evyn Charles,687a094a-bd5c-4d90-af53-d3a39407a2d9,33365 143 | The Redlands Palomino Co.,,33497 144 | Bobby Donaldson,ed79aaf4-2b64-4d29-b769-60aff85eb65f,33770 145 | DJ JP,9f4688cf-c8c7-4a5c-8375-88f425230c39,34414 146 | Daniel Bernstein,f00ecbc4-d45d-4d8b-beed-dda037a5d732,34620 147 | Julie Neumark,609ef5a8-7109-4a30-9205-5428a029e34b,34965 148 | Mazinga Phaser,596cca00-9095-4546-a242-77bc2faf38da,35080 149 | Brandon White,,35228 150 | B.G. and the Chopper City Boyz,8fa26ab1-d57b-4fc5-957c-1884fd512a66,35393 151 | Amanda Martin & Lyle Goodman,3862daf7-7fd0-4236-b58a-4c311d9839a2,35984 152 | Jenn Cristy,,36006 153 | AKP,2b524c77-87e7-43bc-b23b-c5967873aed0,36185 154 | Dave Anthony,17c5dce8-1c29-46ba-94f0-70a443c0c94e,36419 155 | Pat McCurdy,6651fa24-38bc-44e4-a1c1-f11003997b8e,36507 156 | Woogie,dae27553-2819-482f-b4eb-2033d534335f,36554 157 | JaGoFF,,36654 158 | Thom Shepherd,,36740 159 | Istvan Szekely,361e711a-a5c0-4065-a27b-c62e261b0afc,36761 160 | Babaryan,,37068 161 | Phil & Daniel Rosenthal (Holiday),19f89a7c-008b-4433-91d7-1a1a68d1591d,37124 162 | Jeff Caylor,bbbdb644-50b2-4777-8e14-64a267c5cd58,37340 163 | Austins Bridge,5a20ff4f-f82e-4d54-8090-07bfbbc85d66,37389 164 | Von Lmo,00acdb34-e215-40e2-a767-320a31c830f1,37522 165 | Speedball Baby,f8ad7724-b6a3-4fa3-8a35-94ced58f15d8,37611 166 | SPORE 333,,38284 167 | Shark Speed,cce4f5bc-ca16-42c4-a1d0-2f10f2e0abce,38745 168 | La Mar Enfortuna,777794ee-62e2-4e9a-a6ad-41781149851e,38748 169 | Kanji Kinetic,77405b55-d52a-4c46-96a3-8e2449af7aa4,38847 170 | Lookout Farm,,39063 171 | Aidan Smith,9ec9b08b-68cd-4439-be6e-16cb7cbb763e,39715 172 | Electricwest,916e68a6-c974-4bfe-80b9-a62b93f32bb6,39741 173 | Henry Blair & Ray Turner,c377cfcb-c2fb-4a0c-9b18-e626fa947ed6,39805 174 | Tinsel Teeth,604e3c07-b5a4-4719-8497-2cd87a7997d8,40057 175 | Ten Thousand Free Men & Their Families,8e4fea9c-a7b6-4a23-9d33-ca79bf0219a3,40470 176 | Patrons of Sweet,8f7aec0b-28c2-4cb0-bd49-c015c185c13b,41124 177 | Naked gods,e66d6295-f96a-436e-abf3-b93d4aa5c52d,41385 178 | Diane Denoir,097263e3-a615-49df-81d3-d6beb14b398d,41433 179 | Mudcat,b69e6e93-73d3-47c0-be28-7a809abdf84e,41799 180 | the german measles,436502a9-004f-41d2-967f-6c8f80d54749,41955 181 | Jonathan Kingham,17638589-dd20-44e7-98fe-acb21e8b6784,42632 182 | Home Items,c3a3ed7e-3d35-459a-92a9-4af20d3656bd,42735 183 | Mark Sinnis,4ba5c621-1d0e-4534-bbbe-680d105ba7ab,43038 184 | Arkadelphia,,43692 185 | David Condos,b5f0a9b2-c577-44bb-83da-fa428de81dbc,43761 186 | Standing Small,,43965 187 | Cath and Phil Tyler,5a50967c-913e-4aae-bf94-edac8b529264,44404 188 | Benjamin Faugloire Project,90750bbc-1b5d-446e-ba81-ed1a2bc30856,44405 189 | Leaf Language,e799dadd-239e-4d39-abc8-70e874dccbf5,44716 190 | NSP,b5ce8b5d-592f-435c-b1bc-b952b59478f0,46399 191 | Round Sky Music,,46580 192 | wezzy,,47360 193 | Three Years Hiding,c8962afc-9c56-4c3b-b393-73830f720f9e,47498 194 | Depressor,d74f2314-51b8-481a-baf0-6771f84a97b0,47947 195 | Spokinn Movement,,48026 196 | Nomade,9cbcac00-5b04-4121-9b7c-ae5f39f37400,48220 197 | Sammy G,,48270 198 | The Pirates Charles,,48311 199 | Bored Of Music,3c3cf8b1-4a65-4f24-a870-36c7487e4869,48558 200 | 3 Minute Warning,b9db348e-6744-408a-b012-7caca1435970,48668 201 | Daniel Gun,6ceae164-46a9-4bc7-a63e-99694da8a758,48814 202 | Doin' It For The Money,,48954 203 | Tony Thomas,c44cae2a-44b3-4828-87a9-99c092769826,49039 204 | Beat the red light,,49079 205 | Devotos,e02933be-dfa0-43ad-b44a-9fb109a881a5,49195 206 | Linh Nguyen,6d04f922-7e1f-4788-a76e-3ff4dafd21e3,49204 207 | Suely Mesquita,9c158c73-0627-492f-9a57-227126bd2a40,49429 208 | Kassiano,,49872 209 | The Black Apples,a697464c-69b1-4bbc-88cc-570c025a25e5,50281 210 | The Mahoney Brothers,833f996c-8703-424e-9307-284d95864783,50560 211 | Fantastadon,c5cbbefb-de04-43d4-9ffc-a5b9cd85b2ef,50660 212 | Machan,,51292 213 | Bentli,,51799 214 | The Sneaks,5ec358f5-4e9b-4fe6-bd75-7f087c050bc9,51997 215 | No Man's Band,32b36a3a-d456-4a49-bb1b-5423782ba7c6,52054 216 | Sars Flannery,a4bb5010-e604-4412-b05b-4dc67fcc846c,52372 217 | Unique Chique,d51531a7-58b2-4cb4-a72f-a7fc801f826a,52427 218 | Mokai,3ad6e69a-0361-4e94-9180-336cb82fcf51,52517 219 | "Bono, Edge, Chris Martin (Coldplay) & Brian Eno",15699b51-b8aa-452d-98ed-9da5e8b9c37a,53275 220 | Guthrie Kennard,1d437a9b-6c1b-4aee-9c43-cec71f1d4050,53329 221 | Only for the sake of aching,c11abfdb-1b4c-4828-b9a2-46040f2d729d,53537 222 | Pine Mountain Railroad,1852587c-74e2-4edf-b609-a2208a1ed71f,53626 223 | Deleted Waveform Gatherings,ef50caa4-c3ba-43a3-95c2-35e3a53efd9a,53663 224 | Die Daily,,53769 225 | Superbutt,638d29dd-fb25-4b30-975a-a9b431042dac,54195 226 | Jack Green,ada2b416-890a-4c12-a4a9-b47447dec780,54667 227 | sTuRcH,,54842 228 | Takeo Toyama,b2d731d0-252d-4842-9707-4f5c5247ee34,55341 229 | Jeff Wootton,,55357 230 | Ian Shaw,7d926e97-df9b-4d3a-b7cd-b8a937a8a5df,55432 231 | Glenn Kaiser,7a6817e4-c0ca-4021-bb40-accd80181461,55500 232 | Jack Brass Band,73701a01-07e2-44f7-8935-e094bdc22892,55597 233 | Estrela Guia,abe427c8-70a4-44dc-b75f-297859473926,55633 234 | Sacrificial Blood,c5d2441a-a659-4e82-a9f1-fd65cffdaa8f,55701 235 | Nothingful,,55963 236 | Ginferno,2707a688-60fc-4884-acb7-f590dc0c247e,56049 237 | Senderos,,56063 238 | Pepe California,303b1a76-bcb1-4cbc-9dc8-9883492c1143,56683 239 | Andrew Gouche,73d347ca-db2c-4ea7-bbfa-76c3f67bf5a7,57014 240 | push pins,1b9e6350-f7f8-483f-9917-a8c9fcf52e99,57027 241 | Queyi,,57326 242 | Black Thunder,,57511 243 | Searing Solace,c14b9e99-73d3-4601-9e1f-85d9c99a086d,57792 244 | DJ Amir,5dd0c8e8-68aa-4c4e-b686-3f77c574602a,57928 245 | Rock gegen rechts,ac6ee694-5f12-44d4-82c7-b8088f7b6661,57962 246 | Unabombers,b0eb9a8f-367c-4bd6-b046-f0a2dd449b20,58129 247 | Scrapy,f7583439-caf4-4573-a00e-e6ccc25658c1,58132 248 | Waco Jesus,133b0b58-3b06-4e96-bdc2-2758918c088d,58271 249 | Man Made Hell,f70b7464-131c-4ca3-a695-5558c3498d7c,58323 250 | Kulin Ban,3cc6c090-e81b-4b20-9704-576f6df28898,58494 251 | The Best of the Worst,4c9eddc3-5bc9-4320-849a-3c3513e3c000,58627 252 | Smoke Like A Fish,8314e9f5-d104-4e28-9db5-ec122ee0672c,58678 253 | Minus Pilots,d407ae0a-d53b-4f69-98ba-bbe9ed04d000,59382 254 | Kp9000,,60095 255 | Mads Tolling,27e47c3e-af28-4d1f-89b6-fc2c7a583310,60138 256 | Rituel,ff0fe9ca-f931-40a4-a3e5-c242b4f3a59b,60198 257 | Broken Yoke,58df6cc0-6251-42ea-9ec0-103818916e65,60466 258 | Do it Yourself,,60792 259 | Pistol For Ringo,d47caa02-e74f-427d-8d45-d533a83ccb74,60929 260 | Dash Jacket,9e28db02-657d-4d6c-970c-a77454248123,61588 261 | Never Turn Back,,61625 262 | The Spooky Men's Chorale,c6fa941e-d403-445f-9cde-5ca0336d7196,61710 263 | Your Enemies Friends,818389a4-36d2-4f9c-9f88-45d595b27781,61712 264 | The Mayhaws,c8394169-6e07-4a4c-8adc-7055b4421279,61779 265 | Nathan Daughtrey,9bf32cee-257e-45ab-8a47-bc910d611dad,62101 266 | propergol y colargol,30986faa-d591-44bc-aff9-47cbdf823e56,62138 267 | Side On Sound,53a96d99-95eb-4b9f-ab27-abf5d3ff7403,62795 268 | druques,,62837 269 | Mortal Agony,3ac7cefa-6281-4384-ac2c-0f052c73f950,63071 270 | SteddyBeats,,63190 271 | Exit State,,63934 272 | Zero Hero,cf3154b9-024e-405d-b581-5f5f7e92ed63,63958 273 | Andy George,85d9152c-cfba-4bcc-8f49-55e3d5d54db2,64037 274 | The Aquamarines,f2bd3a27-965d-47d3-8e12-450e6e939b65,64240 275 | cem tuncer,86f48ea5-dfa2-4f71-b312-19c1f6156c6b,64366 276 | Slashed Seat Affair,e7e0423b-1201-4222-9135-01fcf871f595,64460 277 | Muldoon,,64608 278 | Guzzler,,64672 279 | The Inclined Plane,2d94782f-90f2-4fff-b3bc-1b2e410f43ab,64677 280 | Jahtari Riddim Force,ac6c9805-4e13-45fb-9a3d-c3de7e138fa9,64787 281 | Balbino Medellin,db29c0fa-f015-4cf2-9149-8c3bb073adea,64816 282 | Concrete DJ'z,9ba906bc-092b-4de7-b9bc-16c8a3e6251e,64884 283 | Russian Rullet,,64905 284 | Shagghie,,65056 285 | Standeg,a29ab6cb-cf36-412e-bba1-9dccd358694a,65348 286 | Bad News,9dec8cb1-0b16-43d5-b7f1-b9e24997a240,65364 287 | Sogar,4c02afbe-784d-4589-874c-f6ed951e5b11,65443 288 | Lara Korona,,65548 289 | Sinwar,7d1d2620-afa4-4565-aaf0-8441e7415fba,65694 290 | Albert Sanz,6d5993a7-ef89-41cd-88c8-9ac4d0b39b0c,65713 291 | Wesley Dysart,be4edada-661f-4856-a588-2664de750ee7,65766 292 | Dancing on Debris,,65903 293 | Mikrofisch,27047e70-a833-4627-b589-9888eb7cf6e4,66112 294 | DJ IQ,2ae29e41-cf82-4358-a26a-de253d482023,67022 295 | Dancing with the Enemy,0a02e70e-db2f-4cfe-a646-e8ced413f7d5,67477 296 | CORN HEAD,e9aa5ac8-e65d-4446-890c-d1c2192e3c78,67638 297 | OG Daddy V,15e8741b-474e-4ec9-9ffb-a89db700efb5,67713 298 | Christopher G,5efe021b-61c8-45ed-9c89-ab808a892c96,67894 299 | Ryan Kauffman,e1ab965e-5f2d-499f-9969-a503487f7d7c,68106 300 | Hotel Mama,e31fbea1-a167-4aca-a644-554bddcf97a3,68174 301 | Christian Reichert,1a78d4ba-b927-49ea-bd1e-9e44dcc7eb4e,68230 302 | -------------------------------------------------------------------------------- /artists_updated.tsv: -------------------------------------------------------------------------------- 1 | name musicbrainz_id id 2 | 0 The Scenic a8e347d8-29d8-459c-a444-68febeb99c6b 500 3 | 1 Our Family Name fc93c97f-1b9b-49af-8370-7b36e29ad22e 710 4 | 2 Khamelien 744 5 | 3 Death in the Park 000c60eb-a2c4-46be-9097-e603fd8795c6 786 6 | 4 Enter the Collector f50c0834-e2a7-4241-bd32-061d67560c41 818 7 | 5 Shorelines End 952 8 | 6 Hollywood Ave 2e258b9f-88bd-42a8-8bec-d977a1254546 1017 9 | 7 Play for keeps 276f57a2-7ba9-41e7-bb11-6d56729bb1f7 1086 10 | 8 Pan Trees d4cbfbd0-3b75-4430-9722-57c174901c83 1242 11 | 9 Dearth 1978 12 | 10 Dead Reprise e9e4e778-fdd3-46c8-8c03-36e31a014b54 2005 13 | 11 Crime Lab 7b0cbb25-c0e3-4e47-9abd-e7378a01945a 2138 14 | 12 Beat Union 79edf7bc-0b58-4c52-92f0-37a0faa57038 2311 15 | 13 Big City Kids e3dda876-0e6f-4996-bf01-7e8798ded368 2337 16 | 14 Idle Sons bdd52c2d-2bf1-426e-a992-94616aa1d46b 2982 17 | 15 Spanish Gamble 6d574d88-b5d6-469f-943d-bcb501a9612e 3103 18 | 16 Demiricous f9974a34-a5ed-4e1c-8059-8225e113a43a 3326 19 | 17 The Mystic Underground d6cb1345-d8af-4c63-bf47-e577a625c4aa 3606 20 | 18 The Students ab4c5827-9332-4c4b-b080-d53b05b7183e 3675 21 | 19 Redink 4297 22 | 20 The Atomic Ballroom Calamity 4359 23 | 21 aderbat 4970 24 | 22 Donnie Sloan c464c26d-fa5e-4085-9239-388f3c6157ae 5153 25 | 23 The American Life 3c472548-0391-481b-8e61-0d3eef8f9a2d 5246 26 | 24 Stan Ipcus 3e0aba46-36f9-4a72-8f1a-b876204b49b0 5673 27 | 25 Seconds to Breathe 747819a3-1f05-4be3-a2ed-b23c33d127cd 5954 28 | 26 Guy Chambers & Sophie Hunter 229d2f2b-a4ce-4f6a-bde5-152804593304 6039 29 | 27 Hey Dakota 6345 30 | 28 All's Quiet 6528 31 | 29 Ever Ready Records 3dbddfe3-8d66-4012-b963-b11ee3f2ad2d 6744 32 | 30 Storm The Beaches 7034 33 | 31 We Are The Fury c98d1841-f2bf-406b-931d-84516fc2e50b 7061 34 | 32 Eric Scot Porter 5c55ab4f-0b41-4537-8035-7c90d52df5f0 7163 35 | 33 Epollo 7165 36 | 34 Honesty Eyes c5118628-0c47-4a8a-86f9-a0e638be697e 7173 37 | 35 Gone By Daylight 921e530c-5c29-489a-aa46-fd9d8cc04c2a 7627 38 | 36 The OverUnder c8394169-6e07-4a4c-8adc-7055b4421279 8325 39 | 37 Olde York 94c126da-78de-414d-8d52-2a37069eb518 8756 40 | 38 rebecca correia 081c95a4-b3bf-4992-b240-85d0f2a58750 9115 41 | 39 Dremnt the End 5d3850e2-2798-4ed8-95e9-0be87665c326 9166 42 | 40 Young twinn 223ce0b2-865b-4039-b67c-f59894d413de 9343 43 | 41 The Erection Kids 82afc7d5-b773-48bc-a511-8678485a9f23 9809 44 | 42 MoeRoc 10008 45 | 43 Beight c1fe023a-d869-4404-a927-b46bdf348875 10606 46 | 44 slowEarth 7077f68e-ae63-4883-8524-29ed8816ec68 10889 47 | 45 Luna Angel b8b9ec90-126b-4f29-b380-cdc451653007 11073 48 | 46 Dallas Superstars 2284f210-0229-4f19-a64f-a811a7f114c9 11384 49 | 47 Not Sorry 7657ca7f-bac5-4671-a937-8a7160b3fb78 12343 50 | 48 Majic ship f73d124a-6ac5-4d5c-9df3-8425727ee327 12411 51 | 49 Hello Nurse 289a6156-00d3-4201-9540-1798e2c01e61 12415 52 | 50 Dirty Bird 544f63c1-33f0-4e41-829c-74488e763851 12681 53 | 51 Quincy Coleman b6dab43e-a42f-4795-b6eb-5b44c4f03f3d 13316 54 | 52 Jayson Belt 893b9756-3be9-4a11-91d7-193c6738125b 13644 55 | 53 Metal Kites 72f153e9-364c-4a40-8306-0657ac36b817 13993 56 | 54 Jelly Joe 588e04c6-cfd8-4f12-ac2c-035fe33c6b85 14124 57 | 55 DJ Impact 1caaafed-6995-4395-9621-63bf63162c56 14307 58 | 56 Buen Chico 2a6c8647-6178-4e83-9b9c-5314f7e23bce 14628 59 | 57 Fast Heart Mart 337818dd-e77c-4184-b706-b47589a7ce9a 14807 60 | 58 Luc Skyz 6e9ba48a-5972-4cf1-bd9f-9d35248c73bc 15039 61 | 59 Greg Howe & Ritchie Kotzen c5583f98-458e-4de7-8176-00e8e0d3ebea 15075 62 | 60 Willie Isz 23cd5cb7-50f7-419d-a4c9-f758ea68e030 15134 63 | 61 Midevil 15299 64 | 62 Eli Bolin 15412 65 | 63 Raina Rose 399f28a0-6837-4014-8092-d5bced4f6b41 15672 66 | 64 Felina 6f393ff8-1f77-40f5-8515-2f72b0c28cf2 15683 67 | 65 Boss Volenti 52980b00-2ac6-4e91-89a4-b8dc6cc2287e 16764 68 | 66 Buddy Leezle 06c9a271-c45f-48f0-8f8a-39f861e7f8bd 17038 69 | 67 Calmer 38acdf39-6586-452e-b92d-b569a1333b2c 17172 70 | 68 Canabasse 17247 71 | 69 LoudLion e8e779e1-edec-45bc-ba43-e0d28f48400c 17322 72 | 70 Circus Diablo 877f5179-607d-4a27-8361-439e4e851504 17403 73 | 71 Onion Flavored Rings 2b34c270-cfed-418a-9ee3-ae6125d841c8 17672 74 | 72 Otis Jackson Jr. Trio 10e2c144-8782-4fd5-a0ba-3a7125266695 17698 75 | 73 Pretty Boy Thorson & The Falling Angels 21f3822b-7e97-41a2-bdc2-347d9fe1177c 18278 76 | 74 Shot Baker 9c825e0b-4d4e-4155-a3f0-263c62d6d195 18358 77 | 75 RU36 c44cedbc-9a92-4572-b357-15bbd23d0798 18486 78 | 76 Qurage 18489 79 | 77 Blackbyrd McKnight c94a1d00-739c-464b-8984-2e01367fbce3 18751 80 | 78 Ova Looven cfce497d-d5a6-4634-a232-032030daebd2 18904 81 | 79 Fitter 19243 82 | 80 Yovee 19267 83 | 81 Annie Bethancourt e3b26c0e-1aee-4203-a361-dd6216812232 19288 84 | 82 Sammy Blaze d564168f-eefb-4841-afa1-0e84074d53e8 19361 85 | 83 The Give It Ups 36597a25-8cfc-47a9-8d83-a4cf70f301d4 19362 86 | 84 Severance e817449b-a4fd-4e96-974b-8593d07758f6 19432 87 | 85 LaMaW 19598 88 | 86 Dan Padilla 7dd62fa4-d408-446e-818d-21548b041559 19689 89 | 87 Freestyle Evolution db16ea37-11b2-4b9f-9a2c-0dabcd86aa26 19806 90 | 88 The Fatal Flaw 94a65125-70ec-4316-950e-f82c9f23f12e 20412 91 | 89 Now That's What I Call Music 5c5b2c0d-c221-42d3-93db-01744062dede 21091 92 | 90 NOTIIBELIKESOMEONE 21113 93 | 91 Delroy Washington d443ef12-46a8-487c-aab2-5810e411c251 21148 94 | 92 Tyshawn Sorey 25bb66e5-5010-44de-ac1f-7c431e124eeb 21327 95 | 93 Our Mercury 89116de7-0aa7-47f5-a36c-c7f7cadd7013 21603 96 | 94 John X de6c91e4-bbc9-4ec6-9142-ba47654a7fa9 21624 97 | 95 Little Sammy Davis bb0475ad-f101-4a2a-83b7-d06eae8f7b21 21986 98 | 96 Live by the fist 22128 99 | 97 Lukas Sherfey 61337ef9-3e4d-4228-870d-895e3caa1c6a 22141 100 | 98 Jann Wilde & Rose Avenue 4c457892-7f68-4c93-8bc4-df590b29cb3a 22288 101 | 99 Tidemouth 22541 102 | 100 The Bridge Band aa31b48f-f6d8-4d30-9a92-4f16ec0fdde7 23052 103 | 101 Fernando Kabusacki be28510c-8263-40e7-9613-573af995c6c4 24072 104 | 102 The Voids feca7cbb-d3ad-4b38-9399-a00aa9f9625f 24256 105 | 103 Great Bloomers 1ae2f002-0bea-4bff-8e18-fd70f96a2395 24918 106 | 104 Outer Spacist fed64c4b-4ccd-4ea4-b717-93cc5d6e7086 24937 107 | 105 Kid Meets Cougar 992f1e3f-86a3-4b6c-b164-2fdfbe83531f 25631 108 | 106 Evan Brass ca16ed4f-79b0-4369-b5bd-968cfaaaf7e7 25700 109 | 107 Zenia a4f4769a-edaa-4490-a1aa-d35deb4f07e7 25741 110 | 108 m t h . E l e c t r o 902286c2-e7d1-4ee8-adb6-216d6a71a05c 25946 111 | 109 BMW (Music) 26058 112 | 110 77Klash 26170 113 | 111 Clairmont 26207 114 | 112 Marc Decoca 72139ae8-cc45-40e9-8a36-d29ea8b66847 26675 115 | 113 The Gertrudes c8394169-6e07-4a4c-8adc-7055b4421279 26708 116 | 114 Bicycle Records 69ba1791-7b83-4c23-9995-6a47fde9c01f 26966 117 | 115 J Laine 27084 118 | 116 provincial parks 7a6f9b53-8dd4-4372-b900-22988c252da4 27431 119 | 117 Le Rug 3917de50-0ac1-4a1d-b680-c903f07c6ea2 27700 120 | 118 Ketch Harbour Wolves 0f05d2c9-f90c-47c1-87a9-d9c99aa0be20 27745 121 | 119 Peter Friestedt 0a8fe595-a14e-42b0-ad24-d587a491d54b 28555 122 | 120 Fuck Montreal 87cf6aa6-a005-445b-8920-1c5b3fdfbfaa 28561 123 | 121 Ed in the Refridgerators e8de09ea-2bfd-43c2-851b-0ccd2109e319 28731 124 | 122 Uncle Monsterface 33a32e1e-9857-4743-9532-344fb6f0c4eb 28738 125 | 123 Peter Murray 6ab4a566-a279-441a-af5f-4d47459e1c18 28932 126 | 124 With Horses In Her Eyes e026d5d7-f08d-4807-941c-88765e78b02f 29315 127 | 125 Arlequin 1d811df7-e264-4cab-9d12-38ad1af5e415 29347 128 | 126 SIR PSYCH 29358 129 | 127 Roy Young e36b3991-b6c3-43ca-a526-271c59aead1b 29461 130 | 128 Utopium c9125ab5-3bfd-4813-bb0a-4fa7855f4de9 29810 131 | 129 The Bowery Riots 6bb85a2a-c3fa-4d33-92a3-aa89ff291525 29822 132 | 130 Moment Trigger e8f3f51e-97bd-4994-b3ac-c8cf6d446f53 30110 133 | 131 Falling Starr 85ca9b7c-9763-477a-bc60-e6f83437aade 30226 134 | 132 Tuff Luvs 30963 135 | 133 SlowMotionNoise 00864544-3bdf-4599-baed-8a7ca9f792bf 31047 136 | 134 allroh 31236 137 | 135 Owen Lyons f1d6b892-56a8-4d58-9581-593cf260c6f3 31592 138 | 136 No More Lies 332a07ad-ba98-42bb-a03c-0a4d2deac15a 31697 139 | 137 Carlos Campos & Benjamin Franklin ef7e0813-ec6c-404c-a91a-70465fe6141b 31895 140 | 138 Drew Nelson 05848221-5b7d-4378-b7f4-e535f9aa9aa9 32261 141 | 139 Williams Riley e39a8d90-3ae8-4e24-a145-1940a247fe0d 32935 142 | 140 William Susman 33054 143 | 141 Evyn Charles 687a094a-bd5c-4d90-af53-d3a39407a2d9 33365 144 | 142 The Redlands Palomino Co. 33497 145 | 143 Bobby Donaldson ed79aaf4-2b64-4d29-b769-60aff85eb65f 33770 146 | 144 DJ JP 9f4688cf-c8c7-4a5c-8375-88f425230c39 34414 147 | 145 Daniel Bernstein f00ecbc4-d45d-4d8b-beed-dda037a5d732 34620 148 | 146 Julie Neumark 609ef5a8-7109-4a30-9205-5428a029e34b 34965 149 | 147 Mazinga Phaser 596cca00-9095-4546-a242-77bc2faf38da 35080 150 | 148 Brandon White 35228 151 | 149 B.G. and the Chopper City Boyz 8fa26ab1-d57b-4fc5-957c-1884fd512a66 35393 152 | 150 Amanda Martin & Lyle Goodman 3862daf7-7fd0-4236-b58a-4c311d9839a2 35984 153 | 151 Jenn Cristy 36006 154 | 152 AKP 2b524c77-87e7-43bc-b23b-c5967873aed0 36185 155 | 153 Dave Anthony 17c5dce8-1c29-46ba-94f0-70a443c0c94e 36419 156 | 154 Pat McCurdy 6651fa24-38bc-44e4-a1c1-f11003997b8e 36507 157 | 155 Woogie dae27553-2819-482f-b4eb-2033d534335f 36554 158 | 156 JaGoFF 36654 159 | 157 Thom Shepherd 36740 160 | 158 Istvan Szekely 361e711a-a5c0-4065-a27b-c62e261b0afc 36761 161 | 159 Babaryan 37068 162 | 160 Phil & Daniel Rosenthal (Holiday) 19f89a7c-008b-4433-91d7-1a1a68d1591d 37124 163 | 161 Jeff Caylor bbbdb644-50b2-4777-8e14-64a267c5cd58 37340 164 | 162 Austins Bridge 5a20ff4f-f82e-4d54-8090-07bfbbc85d66 37389 165 | 163 Von Lmo 00acdb34-e215-40e2-a767-320a31c830f1 37522 166 | 164 Speedball Baby f8ad7724-b6a3-4fa3-8a35-94ced58f15d8 37611 167 | 165 SPORE 333 38284 168 | 166 Shark Speed cce4f5bc-ca16-42c4-a1d0-2f10f2e0abce 38745 169 | 167 La Mar Enfortuna 777794ee-62e2-4e9a-a6ad-41781149851e 38748 170 | 168 Kanji Kinetic 77405b55-d52a-4c46-96a3-8e2449af7aa4 38847 171 | 169 Lookout Farm 39063 172 | 170 Aidan Smith 9ec9b08b-68cd-4439-be6e-16cb7cbb763e 39715 173 | 171 Electricwest 916e68a6-c974-4bfe-80b9-a62b93f32bb6 39741 174 | 172 Henry Blair & Ray Turner c377cfcb-c2fb-4a0c-9b18-e626fa947ed6 39805 175 | 173 Tinsel Teeth 604e3c07-b5a4-4719-8497-2cd87a7997d8 40057 176 | 174 Ten Thousand Free Men & Their Families 8e4fea9c-a7b6-4a23-9d33-ca79bf0219a3 40470 177 | 175 Patrons of Sweet 8f7aec0b-28c2-4cb0-bd49-c015c185c13b 41124 178 | 176 Naked gods e66d6295-f96a-436e-abf3-b93d4aa5c52d 41385 179 | 177 Diane Denoir 097263e3-a615-49df-81d3-d6beb14b398d 41433 180 | 178 Mudcat b69e6e93-73d3-47c0-be28-7a809abdf84e 41799 181 | 179 the german measles 436502a9-004f-41d2-967f-6c8f80d54749 41955 182 | 180 Jonathan Kingham 17638589-dd20-44e7-98fe-acb21e8b6784 42632 183 | 181 Home Items c3a3ed7e-3d35-459a-92a9-4af20d3656bd 42735 184 | 182 Mark Sinnis 4ba5c621-1d0e-4534-bbbe-680d105ba7ab 43038 185 | 183 Arkadelphia 43692 186 | 184 David Condos b5f0a9b2-c577-44bb-83da-fa428de81dbc 43761 187 | 185 Standing Small 43965 188 | 186 Cath and Phil Tyler 5a50967c-913e-4aae-bf94-edac8b529264 44404 189 | 187 Benjamin Faugloire Project 90750bbc-1b5d-446e-ba81-ed1a2bc30856 44405 190 | 188 Leaf Language e799dadd-239e-4d39-abc8-70e874dccbf5 44716 191 | 189 NSP b5ce8b5d-592f-435c-b1bc-b952b59478f0 46399 192 | 190 Round Sky Music 46580 193 | 191 wezzy 47360 194 | 192 Three Years Hiding c8962afc-9c56-4c3b-b393-73830f720f9e 47498 195 | 193 Depressor d74f2314-51b8-481a-baf0-6771f84a97b0 47947 196 | 194 Spokinn Movement 48026 197 | 195 Nomade 9cbcac00-5b04-4121-9b7c-ae5f39f37400 48220 198 | 196 Sammy G 48270 199 | 197 The Pirates Charles 48311 200 | 198 Bored Of Music 3c3cf8b1-4a65-4f24-a870-36c7487e4869 48558 201 | 199 3 Minute Warning b9db348e-6744-408a-b012-7caca1435970 48668 202 | 200 Daniel Gun 6ceae164-46a9-4bc7-a63e-99694da8a758 48814 203 | 201 Doin' It For The Money 48954 204 | 202 Tony Thomas c44cae2a-44b3-4828-87a9-99c092769826 49039 205 | 203 Beat the red light 49079 206 | 204 Devotos e02933be-dfa0-43ad-b44a-9fb109a881a5 49195 207 | 205 Linh Nguyen 6d04f922-7e1f-4788-a76e-3ff4dafd21e3 49204 208 | 206 Suely Mesquita 9c158c73-0627-492f-9a57-227126bd2a40 49429 209 | 207 Kassiano 49872 210 | 208 The Black Apples a697464c-69b1-4bbc-88cc-570c025a25e5 50281 211 | 209 The Mahoney Brothers 833f996c-8703-424e-9307-284d95864783 50560 212 | 210 Fantastadon c5cbbefb-de04-43d4-9ffc-a5b9cd85b2ef 50660 213 | 211 Machan 51292 214 | 212 Bentli 51799 215 | 213 The Sneaks 5ec358f5-4e9b-4fe6-bd75-7f087c050bc9 51997 216 | 214 No Man's Band 32b36a3a-d456-4a49-bb1b-5423782ba7c6 52054 217 | 215 Sars Flannery a4bb5010-e604-4412-b05b-4dc67fcc846c 52372 218 | 216 Unique Chique d51531a7-58b2-4cb4-a72f-a7fc801f826a 52427 219 | 217 Mokai 3ad6e69a-0361-4e94-9180-336cb82fcf51 52517 220 | 218 Bono, Edge, Chris Martin (Coldplay) & Brian Eno 15699b51-b8aa-452d-98ed-9da5e8b9c37a 53275 221 | 219 Guthrie Kennard 1d437a9b-6c1b-4aee-9c43-cec71f1d4050 53329 222 | 220 Only for the sake of aching c11abfdb-1b4c-4828-b9a2-46040f2d729d 53537 223 | 221 Pine Mountain Railroad 1852587c-74e2-4edf-b609-a2208a1ed71f 53626 224 | 222 Deleted Waveform Gatherings ef50caa4-c3ba-43a3-95c2-35e3a53efd9a 53663 225 | 223 Die Daily 53769 226 | 224 Superbutt 638d29dd-fb25-4b30-975a-a9b431042dac 54195 227 | 225 Jack Green ada2b416-890a-4c12-a4a9-b47447dec780 54667 228 | 226 sTuRcH 54842 229 | 227 Takeo Toyama b2d731d0-252d-4842-9707-4f5c5247ee34 55341 230 | 228 Jeff Wootton 55357 231 | 229 Ian Shaw 7d926e97-df9b-4d3a-b7cd-b8a937a8a5df 55432 232 | 230 Glenn Kaiser 7a6817e4-c0ca-4021-bb40-accd80181461 55500 233 | 231 Jack Brass Band 73701a01-07e2-44f7-8935-e094bdc22892 55597 234 | 232 Estrela Guia abe427c8-70a4-44dc-b75f-297859473926 55633 235 | 233 Sacrificial Blood c5d2441a-a659-4e82-a9f1-fd65cffdaa8f 55701 236 | 234 Nothingful 55963 237 | 235 Ginferno 2707a688-60fc-4884-acb7-f590dc0c247e 56049 238 | 236 Senderos 56063 239 | 237 Pepe California 303b1a76-bcb1-4cbc-9dc8-9883492c1143 56683 240 | 238 Andrew Gouche 73d347ca-db2c-4ea7-bbfa-76c3f67bf5a7 57014 241 | 239 push pins 1b9e6350-f7f8-483f-9917-a8c9fcf52e99 57027 242 | 240 Queyi 57326 243 | 241 Black Thunder 57511 244 | 242 Searing Solace c14b9e99-73d3-4601-9e1f-85d9c99a086d 57792 245 | 243 DJ Amir 5dd0c8e8-68aa-4c4e-b686-3f77c574602a 57928 246 | 244 Rock gegen rechts ac6ee694-5f12-44d4-82c7-b8088f7b6661 57962 247 | 245 Unabombers b0eb9a8f-367c-4bd6-b046-f0a2dd449b20 58129 248 | 246 Scrapy f7583439-caf4-4573-a00e-e6ccc25658c1 58132 249 | 247 Waco Jesus 133b0b58-3b06-4e96-bdc2-2758918c088d 58271 250 | 248 Man Made Hell f70b7464-131c-4ca3-a695-5558c3498d7c 58323 251 | 249 Kulin Ban 3cc6c090-e81b-4b20-9704-576f6df28898 58494 252 | 250 The Best of the Worst 4c9eddc3-5bc9-4320-849a-3c3513e3c000 58627 253 | 251 Smoke Like A Fish 8314e9f5-d104-4e28-9db5-ec122ee0672c 58678 254 | 252 Minus Pilots d407ae0a-d53b-4f69-98ba-bbe9ed04d000 59382 255 | 253 Kp9000 60095 256 | 254 Mads Tolling 27e47c3e-af28-4d1f-89b6-fc2c7a583310 60138 257 | 255 Rituel ff0fe9ca-f931-40a4-a3e5-c242b4f3a59b 60198 258 | 256 Broken Yoke 58df6cc0-6251-42ea-9ec0-103818916e65 60466 259 | 257 Do it Yourself 60792 260 | 258 Pistol For Ringo d47caa02-e74f-427d-8d45-d533a83ccb74 60929 261 | 259 Dash Jacket 9e28db02-657d-4d6c-970c-a77454248123 61588 262 | 260 Never Turn Back 61625 263 | 261 The Spooky Men's Chorale c6fa941e-d403-445f-9cde-5ca0336d7196 61710 264 | 262 Your Enemies Friends 818389a4-36d2-4f9c-9f88-45d595b27781 61712 265 | 263 The Mayhaws c8394169-6e07-4a4c-8adc-7055b4421279 61779 266 | 264 Nathan Daughtrey 9bf32cee-257e-45ab-8a47-bc910d611dad 62101 267 | 265 propergol y colargol 30986faa-d591-44bc-aff9-47cbdf823e56 62138 268 | 266 Side On Sound 53a96d99-95eb-4b9f-ab27-abf5d3ff7403 62795 269 | 267 druques 62837 270 | 268 Mortal Agony 3ac7cefa-6281-4384-ac2c-0f052c73f950 63071 271 | 269 SteddyBeats 63190 272 | 270 Exit State 63934 273 | 271 Zero Hero cf3154b9-024e-405d-b581-5f5f7e92ed63 63958 274 | 272 Andy George 85d9152c-cfba-4bcc-8f49-55e3d5d54db2 64037 275 | 273 The Aquamarines f2bd3a27-965d-47d3-8e12-450e6e939b65 64240 276 | 274 cem tuncer 86f48ea5-dfa2-4f71-b312-19c1f6156c6b 64366 277 | 275 Slashed Seat Affair e7e0423b-1201-4222-9135-01fcf871f595 64460 278 | 276 Muldoon 64608 279 | 277 Guzzler 64672 280 | 278 The Inclined Plane 2d94782f-90f2-4fff-b3bc-1b2e410f43ab 64677 281 | 279 Jahtari Riddim Force ac6c9805-4e13-45fb-9a3d-c3de7e138fa9 64787 282 | 280 Balbino Medellin db29c0fa-f015-4cf2-9149-8c3bb073adea 64816 283 | 281 Concrete DJ'z 9ba906bc-092b-4de7-b9bc-16c8a3e6251e 64884 284 | 282 Russian Rullet 64905 285 | 283 Shagghie 65056 286 | 284 Standeg a29ab6cb-cf36-412e-bba1-9dccd358694a 65348 287 | 285 Bad News 9dec8cb1-0b16-43d5-b7f1-b9e24997a240 65364 288 | 286 Sogar 4c02afbe-784d-4589-874c-f6ed951e5b11 65443 289 | 287 Lara Korona 65548 290 | 288 Sinwar 7d1d2620-afa4-4565-aaf0-8441e7415fba 65694 291 | 289 Albert Sanz 6d5993a7-ef89-41cd-88c8-9ac4d0b39b0c 65713 292 | 290 Wesley Dysart be4edada-661f-4856-a588-2664de750ee7 65766 293 | 291 Dancing on Debris 65903 294 | 292 Mikrofisch 27047e70-a833-4627-b589-9888eb7cf6e4 66112 295 | 293 DJ IQ 2ae29e41-cf82-4358-a26a-de253d482023 67022 296 | 294 Dancing with the Enemy 0a02e70e-db2f-4cfe-a646-e8ced413f7d5 67477 297 | 295 CORN HEAD e9aa5ac8-e65d-4446-890c-d1c2192e3c78 67638 298 | 296 OG Daddy V 15e8741b-474e-4ec9-9ffb-a89db700efb5 67713 299 | 297 Christopher G 5efe021b-61c8-45ed-9c89-ab808a892c96 67894 300 | 298 Ryan Kauffman e1ab965e-5f2d-499f-9969-a503487f7d7c 68106 301 | 299 Hotel Mama e31fbea1-a167-4aca-a644-554bddcf97a3 68174 302 | 300 Christian Reichert 1a78d4ba-b927-49ea-bd1e-9e44dcc7eb4e 68230 303 | -------------------------------------------------------------------------------- /checkout_times.txt: -------------------------------------------------------------------------------- 1 | U-Scan Employee_Checkout 2 | 341 169 3 | 450 164 4 | 199 243 5 | 57 53 6 | 33 51 7 | 88 82 8 | 51 46 9 | 78 55 10 | 107 104 11 | 232 44 12 | 117 47 13 | 131 53 14 | 135 62 15 | 99 127 16 | 126 86 17 | 70 94 18 | 85 232 19 | 348 134 20 | 100 206 21 | 97 169 22 | 83 210 23 | 146 117 24 | 182 124 25 | 171 259 -------------------------------------------------------------------------------- /ep_data.json: -------------------------------------------------------------------------------- 1 | {"Alkaline Trio": {"artist_id": 2, "EPs": {"I Lied My Face Off": {"tracks": ["Goodbye Forever", "This Is Getting Over You", "Bleeder", "I Lied My Face Off"], "release_year": 1999}, "Broken Wing": {"tracks": ["Balanced On A Shelf", "Pocket Knife", "Broken Wing", "Sun Burns"], "release_year": 2013}, "For Your Lungs Only": {"tracks": ["Snake Oil Tanker", "Southern Rock", "Cooking Wine", "For Your Lungs Only"], "release_year": 1998}}}, "Green Day": {"artist_id": 1, "EPs": {"Tune In, Tokyo...": {"release_year": 2001, "location": "Japan"}, "Slappy": {"tracks": ["Paper Lanterns", "Why do you Want Him?", "409 in Your Coffeemaker", "Knowledge"], "release_year": 1990}, "1,000 Hours": {"tracks": ["1,000 Hours", "1,000 Hours", "Only of You", "The One I Want"], "release_year": 1989}}}} -------------------------------------------------------------------------------- /height_weight.csv: -------------------------------------------------------------------------------- 1 | sex,height,weight,age 2 | 1,66.0681343811,172,81 3 | 2,60.6502608408,144,61 4 | 1,73.0444208463,265,37 5 | 1,68.7232105887,150,63 6 | 2,61.5118351412,130,21 7 | 1,65.8434887239,140,37 8 | 2,67.5169005737,118,62 9 | 2,62.4733212486,135,34 10 | 1,70.9547186412,190,35 11 | 1,70.174381125,168,54 12 | 2,61.8429644524,200,79 13 | 2,63.1287172944,187,65 14 | 1,73.2490465711,250,60 15 | 2,61.1422546325,179,60 16 | 2,68.8528502295,160,72 17 | 2,64.2602863303,185,42 18 | 2,60.5633871429,118,30 19 | 1,63.8240661777,160,34 20 | 2,64.5507576712,142,63 21 | 2,63.7511948191,139,84 22 | 1,71.3410298715,150,85 23 | 1,67.8152326995,221,58 24 | 2,63.256824547,180,38 25 | 2,62.8148214062,118,72 26 | 2,63.0072581721,180,42 27 | 1,73.9432502647,230,60 28 | 2,66.1885069652,115,38 29 | 1,73.2775294997,210,34 30 | 2,65.2463863931,215,45 31 | 2,68.3123491156,159,81 32 | 2,60.136790743,180,69 33 | 1,70.7202770388,205,38 34 | 1,71.2039756762,155,19 35 | 1,69.2601193897,180,45 36 | 1,66.3476345838,145,23 37 | 2,62.7688071159,160,68 38 | 1,75.4267454415,200,23 39 | 1,68.6727563061,180,48 40 | 2,63.9667109369,152,67 41 | 2,70.4938077817,140,28 42 | 1,69.2612276595,185,85 43 | 1,68.1740002773,185,59 44 | 1,73.1873295746,200,48 45 | 2,59.6924379921,112,63 46 | 1,72.6710789377,192,52 47 | 1,71.7464549064,200,76 48 | 1,71.5110600006,230,56 49 | 1,64.5782668463,135,61 50 | 2,65.3790983353,125,34 51 | 2,59.6606462999,100,69 52 | 2,64.7580987192,170,79 53 | 1,65.5743792581,190,57 54 | 2,65.6773563533,145,42 55 | 1,75.0541364796,210,41 56 | 1,70.6572333423,180,56 57 | 2,62.7708610854,210,46 58 | 2,63.3694803928,170,33 59 | 1,66.2687935819,160,66 60 | 1,72.7922247476,260,20 61 | 1,72.346177194,190,56 62 | 1,70.505912909,185,76 63 | 1,65.6344811593,190,58 64 | 2,67.0241598089,145,54 65 | 1,69.6584949965,158,38 66 | 1,69.7309348113,172,67 67 | 1,66.7150503827,170,39 68 | 2,64.9181043992,125,57 69 | 2,63.2927439844,115,37 70 | 2,64.6775125304,165,26 71 | 2,59.5100654435,240,33 72 | 1,70.2698295536,180,20 73 | 2,66.3843633683,189,48 74 | 2,59.4367122891,138,51 75 | 1,66.9590326477,225,39 76 | 2,64.0857885918,204,43 77 | 2,67.5995190115,140,45 78 | 2,60.032492252,135,45 79 | 1,65.6203225376,180,25 80 | 2,64.5438784273,140,81 81 | 2,63.0085429568,235,40 82 | 1,74.2508050896,270,42 83 | 1,69.6175348623,190,56 84 | 1,74.8084009189,245,48 85 | 2,63.9028357726,148,70 86 | 1,73.4195638923,250,49 87 | 2,59.6182692964,189,69 88 | 2,66.0506530343,267,49 89 | 2,63.8598875965,130,24 90 | 2,62.955212818,120,85 91 | 2,68.649171563,170,21 92 | 1,67.7089471579,182,39 93 | 1,66.0069189166,160,26 94 | 1,69.5356636074,185,31 95 | 2,59.6312087394,142,20 96 | 1,67.8254454189,200,49 97 | 2,64.3340407336,120,29 98 | 1,72.482558135,265,42 99 | 1,71.230781975,190,55 100 | 1,69.7342687246,180,47 101 | 2,60.1305767291,160,66 102 | 2,64.7568799993,165,34 103 | 2,61.8899460017,180,19 104 | 2,67.0153851437,161,44 105 | 1,69.2122718872,142,56 106 | 1,71.4999239125,190,30 107 | 1,71.3776291279,129,67 108 | 2,64.4716951304,250,66 109 | 1,71.6108060977,132,45 110 | 1,67.1591799917,165,27 111 | 1,71.7317233946,210,47 112 | 1,68.8014795298,210,66 113 | 1,73.4341250151,230,25 114 | 1,73.7289043474,280,64 115 | 2,61.6312502889,145,50 116 | 2,64.2909110263,127,55 117 | 2,63.5153443281,123,40 118 | 2,60.5768101293,200,66 119 | 1,73.4089141361,190,22 120 | 1,71.7782295382,230,62 121 | 1,75.7895869763,240,18 122 | 2,63.2009066009,130,77 123 | 1,67.3216833752,164,25 124 | 2,60.6594858232,125,21 125 | 1,67.4268137322,140,18 126 | 2,64.4453990337,185,85 127 | 2,65.6810526239,215,74 128 | 2,65.9076526827,155,25 129 | 1,68.4812334421,160,75 130 | 1,70.8259345015,175,35 131 | 2,65.5298892713,115,33 132 | 1,71.5121718478,260,35 133 | 2,65.320983758,160,47 134 | 1,71.2636720933,241,62 135 | 2,65.8945467088,165,70 136 | 1,71.7928384676,242,66 137 | 2,68.2446198859,177,59 138 | 1,68.5134420239,160,65 139 | 1,73.9512432688,180,54 140 | 2,67.9121210565,150,73 141 | 1,70.2287058782,210,34 142 | 2,62.2894460333,180,52 143 | 2,66.7051958241,180,53 144 | 1,70.170065472,260,57 145 | 1,67.3541564985,189,39 146 | 1,66.6158314425,145,51 147 | 2,59.8876644605,148,35 148 | 1,66.0417355764,155,62 149 | 1,67.7100970468,220,63 150 | 1,68.4694461708,185,45 151 | 2,65.9621298804,153,33 152 | 1,76.2421135216,215,67 153 | 1,67.1192237081,141,27 154 | 1,67.8847319235,170,21 155 | 1,67.7530992189,170,77 156 | 1,73.7152631395,250,35 157 | 2,66.6751397251,220,85 158 | 2,61.6385863052,125,85 159 | 1,71.2984144442,191,36 160 | 1,71.5524987914,208,69 161 | 2,62.351510834,135,48 162 | 2,66.439119161,240,42 163 | 1,75.6174447881,207,41 164 | 1,70.7725293271,210,68 165 | 1,62.9055382072,210,64 166 | 2,60.9077415389,145,21 167 | 1,65.7258053628,158,66 168 | 2,64.4809214442,196,57 169 | 2,60.7529695785,226,40 170 | 1,71.6178192276,160,72 171 | 2,64.360257851,120,21 172 | 2,61.3411823269,130,29 173 | 2,61.7733641354,112,85 174 | 1,66.9782808758,190,57 175 | 2,59.4587677271,135,74 176 | 2,67.0929202991,200,32 177 | 2,63.1789753913,130,34 178 | 1,66.935204214,214,61 179 | 2,65.660098224,160,25 180 | 1,68.8502094633,230,57 181 | 2,65.1346603263,224,62 182 | 2,63.6346893782,170,69 183 | 1,65.8998562289,275,24 184 | 2,63.370755444,162,53 185 | 2,67.251638081,178,25 186 | 2,67.7243524128,235,68 187 | 1,69.4218653755,235,29 188 | 2,64.1917351581,135,82 189 | 2,62.924119171,170,53 190 | 2,61.3825968789,115,20 191 | 1,68.0503205881,220,22 192 | 2,64.2140037424,157,51 193 | 1,70.4408985954,200,53 194 | 1,68.3676762083,180,69 195 | 1,70.7840457122,165,28 196 | 2,66.7089810493,230,33 197 | 2,66.3209164354,152,61 198 | 1,69.2519550269,145,27 199 | 2,63.2415257212,138,40 200 | 1,66.4093572672,170,66 201 | 2,66.4167377109,120,31 202 | 1,70.9494685992,180,56 203 | 1,70.2644512676,228,40 204 | 2,64.9020826126,165,54 205 | 2,60.5201586,135,35 206 | 1,67.4716910046,165,85 207 | 1,66.6029606745,190,40 208 | 2,63.9277014144,149,80 209 | 2,64.7812809956,148,59 210 | 2,64.1731045184,150,27 211 | 2,65.7838165691,173,40 212 | 1,73.1446665001,185,68 213 | 1,71.7192826913,230,40 214 | 1,71.5784214577,220,25 215 | 2,64.3089358938,160,58 216 | 1,71.3251241462,236,27 217 | 1,65.8555646095,153,43 218 | 1,71.3221712407,180,80 219 | 2,61.1016861312,117,68 220 | 2,68.2565527886,185,57 221 | 2,66.7169737937,225,38 222 | 2,65.4259911729,125,64 223 | 1,72.1204790875,225,61 224 | 1,69.7671488352,230,73 225 | 1,69.8515097559,130,32 226 | 2,60.4672987655,136,85 227 | 1,68.7400150353,230,45 228 | 2,70.4836032228,170,40 229 | 1,73.0733057676,180,30 230 | 2,61.8089592019,150,63 231 | 2,63.3805201011,120,19 232 | 1,74.1850968326,280,70 233 | 1,73.1455842293,220,64 234 | 1,70.9033327956,170,61 235 | 1,67.6555656489,165,34 236 | 2,65.4201084207,205,54 237 | 2,65.8612424239,115,51 238 | 2,61.0230991832,160,41 239 | 1,69.0244261859,180,27 240 | 1,71.8208684872,195,71 241 | 1,71.0817426367,210,66 242 | 2,67.2806280718,190,68 243 | 2,67.2175941997,165,67 244 | 2,68.8868025878,175,35 245 | 1,69.6913558797,180,30 246 | 1,73.0722690519,225,61 247 | 2,64.5872799788,121,72 248 | 2,63.7731236018,235,38 249 | 1,69.4521664907,138,49 250 | 1,73.1602679166,165,79 251 | 2,65.8080843709,130,29 252 | 2,66.3909262725,160,53 253 | 2,65.2818591354,165,29 254 | 1,71.143701244,160,25 255 | 1,68.5223653158,188,30 256 | 2,64.5055960511,178,71 257 | 1,73.0787652303,196,63 258 | 1,70.5569901419,230,43 259 | 2,63.368446731,147,46 260 | 2,62.6791854884,182,44 261 | 1,76.4482240802,175,40 262 | 1,72.3309952488,210,61 263 | 2,62.3385419762,160,18 264 | 2,63.6990547931,163,66 265 | 1,69.7766741791,198,50 266 | 1,70.8203392052,240,53 267 | 2,59.1244978728,128,85 268 | 1,67.0244944327,190,29 269 | 1,69.8888116977,195,60 270 | 2,64.1594175537,170,65 271 | 2,66.683317186,220,27 272 | 1,75.3161507262,220,40 273 | 2,62.1759187022,136,44 274 | 2,65.6668204187,215,52 275 | 1,68.990330965,180,26 276 | 1,76.4361277724,205,46 277 | 1,69.6244112285,215,67 278 | 2,64.1200471553,162,61 279 | 2,68.7183664661,190,74 280 | 1,67.0531269589,180,72 281 | 1,69.537375121,200,60 282 | 1,69.6648599098,190,64 283 | 1,69.8893220672,250,55 284 | 1,71.414385495,181,65 285 | 2,65.5678991905,185,44 286 | 1,70.3739822293,183,49 287 | 2,63.9027549708,180,38 288 | 2,60.4423649441,143,80 289 | 1,73.0093347366,255,42 290 | 1,72.8937923101,210,26 291 | 1,69.9920979377,180,85 292 | 2,60.2430504296,125,77 293 | 1,64.6723935375,190,36 294 | 2,69.0730573373,140,23 295 | 1,71.7705684209,250,73 296 | 1,63.7006097679,273,27 297 | 1,68.1993560854,132,46 298 | 1,71.3279812351,155,18 299 | 1,69.8346917262,182,18 300 | 1,68.9335066487,180,61 301 | 1,67.1467105423,170,56 302 | 1,69.5775877888,140,35 303 | 2,63.7760178587,135,68 304 | 1,71.4784984447,185,33 305 | 2,61.7239491384,160,77 306 | 2,60.5830767387,115,26 307 | 1,66.6102982192,180,43 308 | 2,67.431127693,150,23 309 | 2,65.2420573425,190,20 310 | 1,69.5512404971,175,28 311 | 1,66.8719118169,140,18 312 | 2,66.079838503,190,27 313 | 1,71.6089182011,290,30 314 | 2,65.4931381834,170,38 315 | 2,69.8905854748,212,57 316 | 2,61.9115255713,151,78 317 | 2,66.3860210599,120,30 318 | 2,62.2257993366,119,25 319 | 1,71.003155769,185,20 320 | 2,68.1350666936,205,85 321 | 2,62.2903205949,170,57 322 | 1,72.5900191348,230,56 323 | 1,67.0554632189,195,46 324 | 2,64.7222087198,125,25 325 | 2,61.210970792,105,29 326 | 2,67.0609515415,155,23 327 | 2,60.2087052964,120,77 328 | 1,68.9135316745,185,58 329 | 1,67.9218431605,190,47 330 | 2,65.2224942167,140,65 331 | 1,71.4243127353,280,20 332 | 1,70.9953475823,175,55 333 | 2,65.2746617273,260,30 334 | 1,73.4951423109,185,26 335 | 1,69.1108510793,184,59 336 | 1,72.4699480706,195,63 337 | 2,64.4028173026,137,55 338 | 1,74.2611139214,280,30 339 | 2,64.9487457083,140,19 340 | 2,63.5099637298,149,71 341 | 2,63.4626464254,100,19 342 | 2,59.731586138,245,69 343 | 2,64.480510436,133,36 344 | 1,70.2548439111,170,70 345 | 1,72.0318976199,240,55 346 | 1,64.0109690815,173,66 347 | 1,71.7820465806,160,28 348 | 1,70.8740658903,225,58 349 | 1,68.4583714754,270,54 350 | 1,69.8973889742,160,61 351 | 2,62.5135180074,183,29 352 | 1,71.6945005961,237,37 353 | 1,73.0919454262,240,73 354 | 2,65.1963528153,135,67 355 | 1,71.1805516478,220,58 356 | 2,63.5245511759,170,34 357 | 2,63.7167416093,185,81 358 | 1,74.4054506144,240,56 359 | 1,72.3059490735,270,47 360 | 1,69.7884564208,170,28 361 | 1,73.729019425,280,37 362 | 1,69.5326862733,170,24 363 | 1,69.7631692958,240,66 364 | 2,63.1528255139,190,70 365 | 2,68.3794653098,137,85 366 | 2,64.5187249318,110,24 367 | 1,67.8885759913,197,85 368 | 1,72.4372909985,255,77 369 | 2,64.3496736844,128,70 370 | 2,65.3245574963,130,50 371 | 2,65.4625456396,220,44 372 | 2,66.4881214572,140,44 373 | 2,68.9398363931,270,54 374 | 2,66.8639787818,193,35 375 | 2,63.8569858965,200,46 376 | 1,70.312305813,185,24 377 | 1,69.7496307182,180,56 378 | 2,64.1581825394,221,30 379 | 2,65.1573673963,128,71 380 | 2,66.0621904861,130,50 381 | 2,59.6323512536,160,38 382 | 1,68.3653565907,230,54 383 | 1,74.7191342061,190,36 384 | 2,61.5433415419,154,69 385 | 2,62.6126959237,133,35 386 | 2,62.349892244,140,75 387 | 2,66.8889840669,202,52 388 | 1,66.7893320392,140,27 389 | 1,72.1666122831,160,50 390 | 2,65.5472895041,120,64 391 | 2,62.3209785035,115,51 392 | 1,71.4589605546,215,30 393 | 2,62.3561347139,170,28 394 | 2,67.9816701849,136,28 395 | 1,68.3632286478,175,53 396 | 1,74.4008251688,230,66 397 | 2,63.6600098024,139,85 398 | 1,71.9640844198,230,60 399 | 1,73.9808503036,185,21 400 | 1,69.0072791403,180,24 401 | 2,64.3128876592,150,33 402 | 1,68.6003944284,160,76 403 | 1,69.718453217,170,46 404 | 2,59.4688912298,112,20 405 | 1,69.0093664276,145,44 406 | 1,67.5819319004,184,35 407 | 1,68.43459482,270,54 408 | 1,71.7557304934,195,41 409 | 2,70.4727077408,140,42 410 | 1,75.3060125735,165,22 411 | 2,67.2244574104,145,33 412 | 2,68.287921187,190,41 413 | 1,69.9638552734,180,32 414 | 1,70.4555078975,195,73 415 | 2,62.5563795939,200,75 416 | 2,66.4638499915,200,30 417 | 1,66.8516311369,189,77 418 | 2,62.1854729148,128,71 419 | 2,70.0426824831,240,20 420 | 1,69.8844021915,230,69 421 | 1,66.3374299816,130,60 422 | 2,61.7979740896,130,19 423 | 2,63.9634884078,115,63 424 | 2,61.3238148845,124,29 425 | 2,64.3897626272,179,36 426 | 1,69.5050373621,205,69 427 | 2,65.7491965333,175,55 428 | 2,62.8822065626,107,70 429 | 2,65.9749352051,154,57 430 | 2,68.3711216485,145,62 431 | 2,62.7871605214,138,56 432 | 2,65.0170550603,203,41 433 | 2,62.5479249773,177,69 434 | 2,67.0111928,232,37 435 | 2,62.8737382175,205,51 436 | 2,66.1964511221,175,77 437 | 2,60.9951969913,140,60 438 | 2,58.8789912016,155,44 439 | 2,62.2766024409,170,35 440 | 1,72.7776319593,156,30 441 | 1,66.4151639462,290,27 442 | 1,66.9970629934,180,75 443 | 1,65.7067606065,190,44 444 | 1,70.6042710263,185,45 445 | 2,66.0900812411,150,37 446 | 2,61.5962591839,126,36 447 | 2,61.6825977358,145,73 448 | 2,60.7453818976,134,85 449 | 1,70.7606158751,200,54 450 | 2,65.0169881399,125,57 451 | 1,71.3439361831,215,36 452 | 2,61.7483100003,120,59 453 | 1,68.5567709516,234,57 454 | 2,61.1065685998,211,61 455 | 2,67.2890184986,182,48 456 | 2,64.4016450667,150,67 457 | 2,63.3723057635,145,45 458 | 1,70.6182383257,200,75 459 | 2,63.9017870727,246,79 460 | 2,63.111787839,240,48 461 | 2,65.5311905524,170,29 462 | 1,69.235706795,190,51 463 | 2,61.0383926697,113,44 464 | 1,70.1922688118,183,27 465 | 2,59.6294528043,102,84 466 | 2,68.1993248868,190,77 467 | 2,64.6338508088,180,68 468 | 2,67.9438770602,160,40 469 | 1,70.4884946928,187,68 470 | 2,62.5745486711,145,46 471 | 1,68.3458056716,145,33 472 | 1,72.2578130854,136,46 473 | 2,62.2432044821,230,20 474 | 2,62.8517660461,105,66 475 | 1,70.1478141089,185,60 476 | 2,67.1963028407,190,47 477 | 2,66.0662040874,170,80 478 | 2,66.7273217576,220,46 479 | 1,63.1366348957,126,81 480 | 2,63.6583394632,180,84 481 | 1,69.6907851931,140,26 482 | 2,60.6488336024,115,36 483 | 2,59.8007756352,209,37 484 | 2,65.6034449542,270,71 485 | 2,62.7928867139,134,72 486 | 2,65.1295326744,164,66 487 | 2,65.8551662194,157,55 488 | 1,71.3436976445,220,61 489 | 2,69.3740013684,140,47 490 | 2,67.5343351664,195,59 491 | 1,69.0832224108,176,85 492 | 1,72.1067960514,210,44 493 | 2,59.6690870804,134,80 494 | 1,72.8176412516,190,31 495 | 1,71.0427959417,192,64 496 | 2,70.1807516039,170,73 497 | 2,63.5209073599,240,62 498 | 2,63.4676512355,178,69 499 | 2,69.7459650058,160,45 500 | 1,66.3356793529,145,50 501 | 2,64.9805488479,270,35 502 | 2,65.5817218447,175,52 503 | 2,65.621554328,200,33 504 | 1,74.5466527112,198,43 505 | 2,66.1742992399,198,69 506 | 1,70.2966980657,165,60 507 | 1,72.4801909602,186,69 508 | 2,66.2222509914,200,59 509 | 2,63.5874504711,140,85 510 | 2,63.9137364228,165,58 511 | 2,61.5914046223,164,61 512 | 1,70.3037715288,185,52 513 | 2,63.5803048912,110,73 514 | 1,71.2471553712,210,48 515 | 2,59.7530050163,125,85 516 | 1,75.1108440255,250,62 517 | 1,67.7057934874,180,73 518 | 2,63.2180647639,180,85 519 | 1,70.4526088915,176,66 520 | 2,64.5574156254,115,81 521 | 2,64.3114775153,115,48 522 | 1,67.1038572018,200,60 523 | 2,65.0018942687,180,60 524 | 2,64.0632524408,165,37 525 | 1,67.5190609083,180,32 526 | 1,72.6644060129,195,67 527 | 2,65.8883646344,147,49 528 | 1,71.6572353476,230,40 529 | 2,64.3609319334,140,79 530 | 1,65.6448673703,232,66 531 | 1,69.8253587083,140,18 532 | 1,71.9529180831,238,50 533 | 2,64.9468934882,130,28 534 | 1,69.252872895,265,48 535 | 1,67.2535754926,150,48 536 | 2,62.4619308963,164,26 537 | 1,69.025451804,175,51 538 | 1,73.1562355854,170,40 539 | 2,64.0802221156,140,39 540 | 1,66.1852233158,186,60 541 | 2,66.2809564934,127,46 542 | 1,67.5645091847,180,48 543 | 2,63.6493118656,223,34 544 | 2,67.0934836579,210,61 545 | 2,68.5270113937,237,67 546 | 1,63.2437677938,130,30 547 | 1,68.9434740143,230,47 548 | 1,67.6494746104,145,27 549 | 2,64.465019734,142,43 550 | 2,66.4502825918,175,38 551 | 1,69.7832114978,260,26 552 | 1,68.7872501633,175,41 553 | 2,63.2351106279,160,22 554 | 2,64.482793437,150,58 555 | 1,68.7838945772,190,30 556 | 2,63.3315707545,115,73 557 | 2,67.0138202788,119,21 558 | 1,70.4412261264,195,54 559 | 1,70.6539427438,224,74 560 | 2,61.6905253886,180,85 561 | 2,62.7003735278,152,38 562 | 2,62.1823464744,158,57 563 | 2,60.434040811,148,33 564 | 1,71.768509197,200,31 565 | 2,65.2528413586,230,69 566 | 1,66.5934947755,158,75 567 | 2,61.5880108454,245,69 568 | 1,67.5802092432,145,38 569 | 1,70.6702436547,160,20 570 | 1,70.8706129598,235,45 571 | 2,63.1515225956,170,24 572 | 1,66.7020783747,158,23 573 | 1,68.5386181066,186,73 574 | 2,61.719653397,118,80 575 | 2,66.1808935915,180,22 576 | 2,64.6571646667,138,37 577 | 1,66.8055513754,135,22 578 | 2,63.8791825363,165,37 579 | 2,60.925895635,115,64 580 | 1,63.4474101606,164,20 581 | 1,70.5322178868,190,30 582 | 2,61.5767445409,189,64 583 | 2,64.718845013,123,53 584 | 1,68.6934170381,240,51 585 | 2,65.7667993247,268,43 586 | 1,69.0725670862,175,72 587 | 2,64.5114823775,218,46 588 | 2,63.1313528427,170,48 589 | 1,71.4888030106,205,39 590 | 2,62.7902334937,135,23 591 | 2,63.220199204,150,55 592 | 1,72.0891028121,230,42 593 | 2,67.1762501116,169,48 594 | 2,67.1697819108,162,54 595 | 1,71.1544326237,170,19 596 | 1,66.8708671041,240,32 597 | 1,71.3766173141,195,70 598 | 1,69.7085315755,230,39 599 | 1,70.4499236423,165,78 600 | 1,72.6286603686,210,31 601 | 1,69.7057062647,220,61 602 | 2,68.7815669457,162,28 603 | 2,68.4040545719,208,52 604 | 1,65.6209406236,185,30 605 | 1,70.9462143908,160,42 606 | 1,71.5314905256,215,30 607 | 1,71.2149305634,219,61 608 | 2,62.7301132883,172,85 609 | 2,64.3386722913,140,84 610 | 1,68.617423227,205,44 611 | 1,74.2706437065,230,56 612 | 1,71.1231757806,180,67 613 | 1,69.5899004573,190,65 614 | 2,60.2590699266,150,74 615 | 2,62.9391913342,150,62 616 | 2,65.6768785179,215,25 617 | 1,67.4736355995,250,59 618 | 2,62.2762688782,145,30 619 | 2,67.6380110493,160,21 620 | 1,68.950005565,199,56 621 | 2,62.9843281175,170,56 622 | 1,73.4897022389,245,55 623 | 1,69.739098027,150,44 624 | 2,61.6454940507,180,85 625 | 1,71.4245621385,192,29 626 | 1,69.8008014007,198,36 627 | 1,74.6419636623,210,57 628 | 1,73.2468520084,240,36 629 | 1,70.2185056269,165,52 630 | 2,63.1068306763,170,82 631 | 1,74.3963650421,232,49 632 | 2,63.3545798833,135,49 633 | 2,62.7608436166,154,53 634 | 2,63.1383073267,115,18 635 | 2,65.0357909675,145,45 636 | 2,61.5999873879,155,37 637 | 2,66.6645519454,180,52 638 | 2,64.6686720858,157,76 639 | 2,66.7919860367,150,54 640 | 2,63.6099393966,242,38 641 | 1,70.3177397458,200,81 642 | 1,67.3396164224,140,26 643 | 1,69.5198432753,230,26 644 | 2,66.5203691289,160,37 645 | 2,63.9724653241,180,38 646 | 1,66.3845965423,200,49 647 | 1,68.7145721311,165,68 648 | 2,63.1382609003,165,38 649 | 1,73.0008775117,200,35 650 | 1,73.4962488045,190,28 651 | 2,64.7404719265,127,51 652 | 1,70.1845310646,140,20 653 | 1,73.1720135183,200,42 654 | 1,70.6124009058,183,37 655 | 2,61.073837662,113,75 656 | 1,68.4209270822,178,71 657 | 1,72.6635603859,204,65 658 | 1,71.8023534167,225,41 659 | 2,65.2063868126,230,74 660 | 1,70.9631679805,180,65 661 | 2,67.7046610006,160,58 662 | 2,65.9597011467,190,81 663 | 1,72.2383397292,293,21 664 | 2,63.5505709969,170,21 665 | 1,70.8799398027,180,36 666 | 1,70.5912253158,220,49 667 | 1,63.7159349642,130,57 668 | 1,70.1126253454,160,19 669 | 2,64.6926532935,155,44 670 | 2,67.1415265627,175,40 671 | 1,69.6350011764,270,50 672 | 2,63.7569270703,134,37 673 | 2,62.4725362489,145,42 674 | 2,63.8899875554,135,22 675 | 1,67.9655328626,152,19 676 | 1,70.5905923674,159,18 677 | 1,70.8325954096,145,35 678 | 1,68.9447503639,139,85 679 | 2,69.5022919337,220,61 680 | 2,64.4495075526,254,35 681 | 1,69.9692762436,180,76 682 | 2,62.096145029,152,58 683 | 2,66.2231850699,150,24 684 | 2,65.8477828437,160,70 685 | 1,72.7503432439,202,69 686 | 1,71.5053714562,250,32 687 | 2,66.0039593044,126,28 688 | 2,61.798321508,118,22 689 | 1,72.6129578798,240,71 690 | 2,62.2467304437,210,45 691 | 1,71.6920598497,270,57 692 | 1,66.2895222792,180,41 693 | 1,73.0086249396,215,23 694 | 2,61.6572260977,122,47 695 | 2,65.8293347276,161,61 696 | 2,59.7479347117,170,68 697 | 2,65.7129490832,150,31 698 | 1,70.2648072185,245,63 699 | 2,67.4208574885,108,22 700 | 1,63.6877792647,160,75 701 | 2,63.9346091396,165,83 702 | 1,71.5539515505,185,40 703 | 1,72.54825938,225,55 704 | 1,72.0996880042,200,64 705 | 2,62.4237071687,126,39 706 | 1,71.1569197693,197,38 707 | 1,66.0615364253,169,75 708 | 1,70.1490472714,148,49 709 | 1,72.5388723287,215,20 710 | 2,62.0880921564,125,72 711 | 2,69.3326920762,190,66 712 | 1,70.9831961621,160,64 713 | 1,66.0701280226,192,57 714 | 1,74.7909351892,190,66 715 | 1,68.4065360875,165,77 716 | 1,69.2405326678,165,51 717 | 2,67.9361607945,144,35 718 | 1,69.568658788,215,38 719 | 1,69.4228462764,230,63 720 | 2,65.1782648723,135,58 721 | 2,66.6329592427,210,31 722 | 2,67.1660394459,212,60 723 | 2,67.5063949466,165,35 724 | 2,62.3670171371,144,68 725 | 1,69.1021438395,225,56 726 | 2,59.5202748161,115,75 727 | 2,66.271077903,160,43 728 | 2,70.0811735644,180,23 729 | 2,60.4041842666,151,27 730 | 2,64.8860005207,190,73 731 | 1,68.4898875144,200,45 732 | 1,72.7254758625,200,63 733 | 2,66.1574162473,180,43 734 | 1,70.4033663225,155,39 735 | 1,69.7723497278,230,59 736 | 1,71.1847457341,195,64 737 | 2,63.0065783442,164,65 738 | 2,58.7792424445,135,85 739 | 2,63.9666041343,132,22 740 | 1,70.2715962431,178,47 741 | 2,64.0539550723,150,18 742 | 1,72.9494982607,160,85 743 | 1,75.2625136255,200,62 744 | 2,66.6264950042,163,52 745 | 2,66.4979959694,215,42 746 | 1,72.1188126291,260,24 747 | 1,70.8758103804,195,52 748 | 2,63.0242900123,120,81 749 | 2,64.1492472603,132,83 750 | 2,60.5438277934,124,45 751 | 1,72.2426102292,220,30 752 | 1,65.9996102087,150,48 753 | 1,68.6235175522,205,59 754 | 1,66.4106334205,170,73 755 | 1,71.1690691112,170,20 756 | 1,74.7147801857,277,69 757 | 1,69.540738028,187,75 758 | 1,71.31915689,160,27 759 | 1,64.0863310725,150,55 760 | 1,72.3745841912,200,67 761 | 1,71.69316954,225,50 762 | 2,60.0344078719,100,26 763 | 2,59.7939770855,110,71 764 | 2,65.5479883391,150,52 765 | 2,65.6584243006,140,20 766 | 2,63.874529342,116,77 767 | 1,66.8394266742,245,60 768 | 2,62.8204191605,155,25 769 | 2,63.5259472919,147,27 770 | 2,60.1279347162,160,61 771 | 2,62.2332395907,154,77 772 | 2,63.3149212316,160,72 773 | 2,67.450870374,210,67 774 | 2,67.6802529515,195,59 775 | 1,71.41522773,187,63 776 | 2,61.0195848087,175,19 777 | 2,64.434259338,160,57 778 | 1,68.978749733,126,58 779 | 2,67.3784256303,170,67 780 | 1,72.1202253052,230,65 781 | 2,67.3167996681,126,40 782 | 1,64.9146337056,158,37 783 | 2,66.9838652304,240,58 784 | 1,72.4600388305,180,19 785 | 2,64.5619900156,170,71 786 | 2,60.2584551465,140,85 787 | 2,67.9054607932,195,46 788 | 2,61.0916826296,149,50 789 | 2,65.8094446917,235,39 790 | 1,63.7851828474,128,75 791 | 1,71.91199025,134,28 792 | 2,64.8431586655,140,69 793 | 1,72.6474652337,185,65 794 | 2,63.0016122581,200,51 795 | 1,70.8524535543,130,19 796 | 2,68.357340581,160,50 797 | 2,62.1873090174,178,66 798 | 1,70.6178842833,224,49 799 | 2,64.6235588843,245,47 800 | 2,63.3810085976,167,37 801 | 1,67.9103442021,174,62 802 | -------------------------------------------------------------------------------- /height_weight.txt: -------------------------------------------------------------------------------- 1 | height;weight;age;male 2 | 151.765;47.8256065;63;1 3 | 139.7;36.4858065;63;0 4 | 136.525;31.864838;65;0 5 | 156.845;53.0419145;41;1 6 | 145.415;41.276872;51;0 7 | 163.83;62.992589;35;1 8 | 149.225;38.2434755;32;0 9 | 168.91;55.4799715;27;1 10 | 147.955;34.869885;19;0 11 | 165.1;54.487739;54;1 12 | 154.305;49.89512;47;0 13 | 151.13;41.220173;66;1 14 | 144.78;36.0322145;73;0 15 | 149.9;47.7;20;0 16 | 150.495;33.849303;65.3;0 17 | 163.195;48.5626935;36;1 18 | 157.48;42.3258035;44;1 19 | 143.9418;38.3568735;31;0 20 | 121.92;19.617854;12;1 21 | 105.41;13.947954;8;0 22 | 86.36;10.489315;6.5;0 23 | 161.29;48.987936;39;1 24 | 156.21;42.7226965;29;0 25 | 129.54;23.586784;13;1 26 | 109.22;15.989118;7;0 27 | 146.4;35.493574;56;1 28 | 148.59;37.9032815;45;0 29 | 147.32;35.4652245;19;0 30 | 137.16;27.328918;17;1 31 | 125.73;22.6796;16;0 32 | 114.3;17.860185;11;1 33 | 147.955;40.312989;29;1 34 | 161.925;55.111428;30;1 35 | 146.05;37.5063885;24;0 36 | 146.05;38.498621;35;0 37 | 152.7048;46.606578;33;0 38 | 142.875;38.838815;27;0 39 | 142.875;35.5786225;32;0 40 | 147.955;47.400364;36;0 41 | 160.655;47.8823055;24;1 42 | 151.765;49.4131785;30;1 43 | 162.8648;49.384829;24;1 44 | 171.45;56.5572525;52;1 45 | 147.32;39.12231;42;0 46 | 147.955;49.89512;19;0 47 | 144.78;28.803092;17;0 48 | 121.92;20.41164;8;1 49 | 128.905;23.359988;12;0 50 | 97.79;13.267566;5;0 51 | 154.305;41.2485225;55;1 52 | 143.51;38.55532;43;0 53 | 146.7;42.4;20;1 54 | 157.48;44.6504625;18;1 55 | 127;22.0105518;13;1 56 | 110.49;15.422128;9;0 57 | 97.79;12.757275;5;0 58 | 165.735;58.5984165;42;1 59 | 152.4;46.719976;44;0 60 | 141.605;44.22522;60;0 61 | 158.8;50.9;20;0 62 | 155.575;54.317642;37;0 63 | 164.465;45.8978405;50;1 64 | 151.765;48.024053;50;0 65 | 161.29;52.219779;31;1 66 | 154.305;47.62716;25;0 67 | 145.415;45.642695;23;0 68 | 145.415;42.410852;52;0 69 | 152.4;36.4858065;79.3;1 70 | 163.83;55.9335635;35;1 71 | 144.145;37.194544;27;0 72 | 129.54;24.550667;13;1 73 | 129.54;25.627948;14;0 74 | 153.67;48.307548;38;1 75 | 142.875;37.3362915;39;0 76 | 146.05;29.596878;12;0 77 | 167.005;47.173568;30;1 78 | 158.4198;47.286966;24;0 79 | 91.44;12.927372;0.599999999999909;1 80 | 165.735;57.549485;51;1 81 | 149.86;37.931631;46;0 82 | 147.955;41.900561;17;0 83 | 137.795;27.5840635;12;0 84 | 154.94;47.2019175;22;0 85 | 160.9598;43.204638;29;1 86 | 161.925;50.2636635;38;1 87 | 147.955;39.3774555;30;0 88 | 113.665;17.463292;6;1 89 | 159.385;50.689;45;1 90 | 148.59;39.4341545;47;0 91 | 136.525;36.28736;79;0 92 | 158.115;46.266384;45;1 93 | 144.78;42.2691045;54;0 94 | 156.845;47.62716;31;1 95 | 179.07;55.7067675;23;1 96 | 118.745;18.824068;9;0 97 | 170.18;48.5626935;41;1 98 | 146.05;42.807745;23;0 99 | 147.32;35.0683315;36;0 100 | 113.03;17.8885345;5;1 101 | 162.56;56.755699;30;0 102 | 133.985;27.442316;12;1 103 | 152.4;51.255896;34;0 104 | 160.02;47.230267;44;1 105 | 149.86;40.936678;43;0 106 | 142.875;32.715323;73.3;0 107 | 167.005;57.0675435;38;1 108 | 159.385;42.977842;43;1 109 | 154.94;39.9444455;33;0 110 | 148.59;32.4601775;16;0 111 | 111.125;17.123098;11;1 112 | 111.76;16.499409;6;1 113 | 162.56;45.9545395;35;1 114 | 152.4;41.106775;29;0 115 | 124.46;18.257078;12;0 116 | 111.76;15.081934;9;1 117 | 86.36;11.4815475;7.59999999999991;1 118 | 170.18;47.5988105;58;1 119 | 146.05;37.5063885;53;0 120 | 159.385;45.019006;51;1 121 | 151.13;42.2691045;48;0 122 | 160.655;54.8562825;29;1 123 | 169.545;53.523856;41;1 124 | 158.75;52.1914295;81.75;1 125 | 74.295;9.752228;1;1 126 | 149.86;42.410852;35;0 127 | 153.035;49.5832755;46;0 128 | 96.52;13.097469;5;1 129 | 161.925;41.730464;29;1 130 | 162.56;56.018612;42;1 131 | 149.225;42.1557065;27;0 132 | 116.84;19.391058;8;0 133 | 100.076;15.081934;6;1 134 | 163.195;53.0986135;22;1 135 | 161.925;50.235314;43;1 136 | 145.415;42.52425;53;0 137 | 163.195;49.101334;43;1 138 | 151.13;38.498621;41;0 139 | 150.495;49.8100715;50;0 140 | 141.605;29.313383;15;1 141 | 170.815;59.760746;33;1 142 | 91.44;11.7083435;3;0 143 | 157.48;47.9390045;62;1 144 | 152.4;39.292407;49;0 145 | 149.225;38.1300775;17;1 146 | 129.54;21.999212;12;0 147 | 147.32;36.8826995;22;0 148 | 145.415;42.127357;29;0 149 | 121.92;19.787951;8;0 150 | 113.665;16.782904;5;1 151 | 157.48;44.565414;33;1 152 | 154.305;47.853956;34;0 153 | 120.65;21.1770765;12;0 154 | 115.6;18.9;7;1 155 | 167.005;55.1964765;42;1 156 | 142.875;32.998818;40;0 157 | 152.4;40.879979;27;0 158 | 96.52;13.267566;3;0 159 | 160;51.2;25;1 160 | 159.385;49.044635;29;1 161 | 149.86;53.4388075;45;0 162 | 160.655;54.090846;26;1 163 | 160.655;55.3665735;45;1 164 | 149.225;42.240755;45;0 165 | 125.095;22.3677555;11;0 166 | 140.97;40.936678;85.5999999999999;0 167 | 154.94;49.6966735;26;1 168 | 141.605;44.338618;24;0 169 | 160.02;45.9545395;57;1 170 | 150.1648;41.95726;22;0 171 | 155.575;51.482692;24;0 172 | 103.505;12.757275;6;0 173 | 94.615;13.0124205;4;0 174 | 156.21;44.111822;21;0 175 | 153.035;32.205032;79;0 176 | 167.005;56.755699;50;1 177 | 149.86;52.673371;40;0 178 | 147.955;36.4858065;64;0 179 | 159.385;48.8461885;32;1 180 | 161.925;56.9541455;38.7;1 181 | 155.575;42.0990075;26;0 182 | 159.385;50.178615;63;1 183 | 146.685;46.549879;62;0 184 | 172.72;61.80191;22;1 185 | 166.37;48.987936;41;1 186 | 141.605;31.524644;19;1 187 | 142.875;32.205032;17;0 188 | 133.35;23.756881;14;0 189 | 127.635;24.4089195;9;1 190 | 119.38;21.5172705;7;1 191 | 151.765;35.2951275;74;0 192 | 156.845;45.642695;41;1 193 | 148.59;43.885026;33;0 194 | 157.48;45.5576465;53;0 195 | 149.86;39.008912;18;0 196 | 147.955;41.163474;37;0 197 | 102.235;13.1258185;6;0 198 | 153.035;45.245802;61;0 199 | 160.655;53.637254;44;1 200 | 149.225;52.3048275;35;0 201 | 114.3;18.3421265;7;1 202 | 100.965;13.7495075;4;1 203 | 138.43;39.0939605;23;0 204 | 91.44;12.530479;4;1 205 | 162.56;45.699394;55;1 206 | 149.225;40.3980375;53;0 207 | 158.75;51.482692;59;1 208 | 149.86;38.668718;57;0 209 | 158.115;39.235708;35;1 210 | 156.21;44.338618;29;0 211 | 148.59;39.519203;62;1 212 | 143.51;31.071052;18;0 213 | 154.305;46.776675;51;0 214 | 131.445;22.509503;14;0 215 | 157.48;40.6248335;19;1 216 | 157.48;50.178615;42;1 217 | 154.305;41.276872;25;0 218 | 107.95;17.57669;6;1 219 | 168.275;54.6;41;1 220 | 145.415;44.9906565;37;0 221 | 147.955;44.735511;16;0 222 | 100.965;14.401546;5;1 223 | 113.03;19.050864;9;1 224 | 149.225;35.8054185;82;1 225 | 154.94;45.2174525;28;1 226 | 162.56;48.1091015;50;1 227 | 156.845;45.6710445;43;0 228 | 123.19;20.808533;8;1 229 | 161.0106;48.420946;31;1 230 | 144.78;41.1918235;67;0 231 | 143.51;38.4135725;39;0 232 | 149.225;42.127357;18;0 233 | 110.49;17.6617385;11;0 234 | 149.86;38.2434755;48;0 235 | 165.735;48.3358975;30;1 236 | 144.145;38.9238635;64;0 237 | 157.48;40.029494;72;1 238 | 154.305;50.2069645;68;0 239 | 163.83;54.2892925;44;1 240 | 156.21;45.6;43;0 241 | 153.67;40.766581;16;0 242 | 134.62;27.1304715;13;0 243 | 144.145;39.4341545;34;0 244 | 114.3;20.4966885;10;0 245 | 162.56;43.204638;62;1 246 | 146.05;31.864838;44;0 247 | 120.65;20.8935815;11;1 248 | 154.94;45.4442485;31;1 249 | 144.78;38.045029;29;0 250 | 106.68;15.989118;8;0 251 | 146.685;36.0889135;62;0 252 | 152.4;40.879979;67;0 253 | 163.83;47.910655;57;1 254 | 165.735;47.7122085;32;1 255 | 156.21;46.379782;24;0 256 | 152.4;41.163474;77;1 257 | 140.335;36.5992045;62;0 258 | 158.115;43.09124;17;1 259 | 163.195;48.137451;67;1 260 | 151.13;36.7126025;70;0 261 | 171.1198;56.5572525;37;1 262 | 149.86;38.6970675;58;0 263 | 163.83;47.4854125;35;1 264 | 141.605;36.2023115;30;0 265 | 93.98;14.288148;5;0 266 | 149.225;41.276872;26;0 267 | 105.41;15.2236815;5;0 268 | 146.05;44.7638605;21;0 269 | 161.29;50.4337605;41;1 270 | 162.56;55.281525;46;1 271 | 145.415;37.931631;49;0 272 | 145.415;35.493574;15;1 273 | 170.815;58.456669;28;1 274 | 127;21.488921;12;0 275 | 159.385;44.4236665;83;0 276 | 159.4;44.4;54;1 277 | 153.67;44.565414;54;0 278 | 160.02;44.622113;68;1 279 | 150.495;40.483086;68;0 280 | 149.225;44.0834725;56;0 281 | 127;24.4089195;15;0 282 | 142.875;34.416293;57;0 283 | 142.113;32.772022;22;0 284 | 147.32;35.947166;40;0 285 | 162.56;49.5549;19;1 286 | 164.465;53.183662;41;1 287 | 160.02;37.081146;75.9000000000001;1 288 | 153.67;40.5114355;73.9000000000001;0 289 | 167.005;50.6038575;49;1 290 | 151.13;43.9700745;26;1 291 | 147.955;33.792604;17;0 292 | 125.3998;21.375523;13;0 293 | 111.125;16.669506;8;0 294 | 153.035;49.89;88;1 295 | 139.065;33.5941575;68;0 296 | 152.4;43.8566765;33;1 297 | 154.94;48.137451;26;0 298 | 147.955;42.751046;56;0 299 | 143.51;34.8415355;16;1 300 | 117.983;24.097075;13;0 301 | 144.145;33.906002;34;0 302 | 92.71;12.076887;5;0 303 | 147.955;41.276872;17;0 304 | 155.575;39.7176495;74;1 305 | 150.495;35.947166;69;0 306 | 155.575;50.915702;50;1 307 | 154.305;45.756093;44;0 308 | 130.6068;25.2594045;15;0 309 | 101.6;15.3370795;5;0 310 | 157.48;49.214732;18;0 311 | 168.91;58.8252125;41;1 312 | 150.495;43.4597835;27;0 313 | 111.76;17.8318355;8.90000000000009;1 314 | 160.02;51.9646335;38;1 315 | 167.64;50.688906;57;1 316 | 144.145;34.246196;64.5;0 317 | 145.415;39.3774555;42;0 318 | 160.02;59.5622995;24;1 319 | 147.32;40.312989;16;1 320 | 164.465;52.16308;71;1 321 | 153.035;39.972795;49.5;0 322 | 149.225;43.941725;33;1 323 | 160.02;54.601137;28;0 324 | 149.225;45.075705;47;0 325 | 85.09;11.453198;3;1 326 | 84.455;11.7650425;1;1 327 | 59.6138;5.896696;1;0 328 | 92.71;12.1052365;3;1 329 | 111.125;18.313777;6;0 330 | 90.805;11.3681495;5;0 331 | 153.67;41.333571;27;0 332 | 99.695;16.2442635;5;0 333 | 62.484;6.80388;1;0 334 | 81.915;11.8784405;2;1 335 | 96.52;14.968536;2;0 336 | 80.01;9.865626;1;1 337 | 150.495;41.900561;55;0 338 | 151.765;42.524;83.4000000000001;1 339 | 140.6398;28.859791;12;1 340 | 88.265;12.7856245;2;0 341 | 158.115;43.147939;63;1 342 | 149.225;40.82328;52;0 343 | 151.765;42.864444;49;1 344 | 154.94;46.209685;31;0 345 | 123.825;20.581737;9;0 346 | 104.14;15.87572;6;0 347 | 161.29;47.853956;35;1 348 | 148.59;42.52425;35;0 349 | 97.155;17.066399;7;0 350 | 93.345;13.1825175;5;1 351 | 160.655;48.5059945;24;1 352 | 157.48;45.869491;41;1 353 | 167.005;52.900167;32;1 354 | 157.48;47.570461;43;1 355 | 91.44;12.927372;6;0 356 | 60.452;5.6699;1;1 357 | 137.16;28.91649;15;1 358 | 152.4;43.544832;63;0 359 | 152.4;43.431434;21;0 360 | 81.28;11.509897;1;1 361 | 109.22;11.7083435;2;0 362 | 71.12;7.540967;1;1 363 | 89.2048;12.700576;3;0 364 | 67.31;7.200773;1;0 365 | 85.09;12.360382;1;1 366 | 69.85;7.7961125;1;0 367 | 161.925;53.2120115;55;0 368 | 152.4;44.678812;38;0 369 | 88.9;12.5588285;3;1 370 | 90.17;12.700576;3;1 371 | 71.755;7.37087;1;0 372 | 83.82;9.2135875;1;0 373 | 159.385;47.2019175;28;1 374 | 142.24;28.632995;16;0 375 | 142.24;31.6663915;36;0 376 | 168.91;56.4438545;38;1 377 | 123.19;20.014747;12;1 378 | 74.93;8.50485;1;1 379 | 74.295;8.3064035;1;0 380 | 90.805;11.623295;3;0 381 | 160.02;55.791816;48;1 382 | 67.945;7.9662095;1;0 383 | 135.89;27.21552;15;0 384 | 158.115;47.4854125;45;1 385 | 85.09;10.8011595;3;1 386 | 93.345;14.004653;3;0 387 | 152.4;45.1607535;38;0 388 | 155.575;45.529297;21;0 389 | 154.305;48.874538;50;0 390 | 156.845;46.5782285;41;1 391 | 120.015;20.128145;13;0 392 | 114.3;18.14368;8;1 393 | 83.82;10.9145575;3;1 394 | 156.21;43.885026;30;0 395 | 137.16;27.158821;12;1 396 | 114.3;19.050864;7;1 397 | 93.98;13.834556;4;0 398 | 168.275;56.0469615;21;1 399 | 147.955;40.086193;38;0 400 | 139.7;26.5634815;15;1 401 | 157.48;50.802304;19;0 402 | 76.2;9.2135875;1;1 403 | 66.04;7.5693165;1;1 404 | 160.7;46.3;31;1 405 | 114.3;19.4194075;8;0 406 | 146.05;37.9032815;16;1 407 | 161.29;49.3564795;21;1 408 | 69.85;7.314171;0;0 409 | 133.985;28.1510535;13;1 410 | 67.945;7.824462;0;1 411 | 150.495;44.111822;50;0 412 | 163.195;51.0291;39;1 413 | 148.59;40.766581;44;1 414 | 148.59;37.5630875;36;0 415 | 161.925;51.59609;36;1 416 | 153.67;44.8205595;18;0 417 | 68.58;8.0229085;0;0 418 | 151.13;43.4030845;58;0 419 | 163.83;46.719976;58;1 420 | 153.035;39.5475525;33;0 421 | 151.765;34.7848365;21.5;0 422 | 132.08;22.792998;11;1 423 | 156.21;39.292407;26;1 424 | 140.335;37.4496895;22;0 425 | 158.75;48.6760915;28;1 426 | 142.875;35.606972;42;0 427 | 84.455;9.3836845;2;1 428 | 151.9428;43.714929;21;1 429 | 161.29;48.19415;19;1 430 | 127.9906;29.8520235;13;1 431 | 160.9852;50.972401;48;1 432 | 144.78;43.998424;46;0 433 | 132.08;28.292801;11;1 434 | 117.983;20.354941;8;1 435 | 160.02;48.19415;25;1 436 | 154.94;39.179009;16;1 437 | 160.9852;46.6916265;51;1 438 | 165.989;56.415505;25;1 439 | 157.988;48.591043;28;1 440 | 154.94;48.2224995;26;0 441 | 97.9932;13.2959155;5;1 442 | 64.135;6.6621325;1;0 443 | 160.655;47.4854125;54;1 444 | 147.32;35.550273;66;0 445 | 146.7;36.6;20;0 446 | 147.32;48.9595865;25;0 447 | 172.9994;51.255896;38;1 448 | 158.115;46.5215295;51;1 449 | 147.32;36.967748;48;0 450 | 124.9934;25.117657;13;1 451 | 106.045;16.272613;6;1 452 | 165.989;48.647742;27;1 453 | 149.86;38.045029;22;0 454 | 76.2;8.50485;1;0 455 | 161.925;47.286966;60;1 456 | 140.0048;28.3495;15;0 457 | 66.675;8.1363065;0;0 458 | 62.865;7.200773;0;1 459 | 163.83;55.394923;43;1 460 | 147.955;32.488527;12;1 461 | 160.02;54.204244;27;1 462 | 154.94;48.477645;30;1 463 | 152.4;43.0628905;29;0 464 | 62.23;7.257472;0;0 465 | 146.05;34.189497;23;0 466 | 151.9936;49.951819;30;0 467 | 157.48;41.3052215;17;1 468 | 55.88;4.8477645;0;0 469 | 60.96;6.23689;0;1 470 | 151.765;44.338618;41;0 471 | 144.78;33.45241;42;0 472 | 118.11;16.896302;7;0 473 | 78.105;8.221355;3;0 474 | 160.655;47.286966;43;1 475 | 151.13;46.1246365;35;0 476 | 121.92;20.184844;10;0 477 | 92.71;12.757275;3;1 478 | 153.67;47.400364;75.5;1 479 | 147.32;40.8516295;64;0 480 | 139.7;50.348712;38;1 481 | 157.48;45.132404;24.2;0 482 | 91.44;11.623295;4;0 483 | 154.94;42.240755;26;1 484 | 143.51;41.6454155;19;0 485 | 83.185;9.1568885;2;1 486 | 158.115;45.2174525;43;1 487 | 147.32;51.255896;38;0 488 | 123.825;21.205426;10;1 489 | 88.9;11.5949455;3;1 490 | 160.02;49.271431;23;1 491 | 137.16;27.952607;16;0 492 | 165.1;51.199197;49;1 493 | 154.94;43.8566765;41;0 494 | 111.125;17.690088;6;1 495 | 153.67;35.5219235;23;0 496 | 145.415;34.246196;14;0 497 | 141.605;42.88542;43;0 498 | 144.78;32.545226;15;0 499 | 163.83;46.776675;21;1 500 | 161.29;41.8722115;24;1 501 | 154.9;38.2;20;1 502 | 161.3;43.3;20;1 503 | 170.18;53.637254;34;1 504 | 149.86;42.977842;29;0 505 | 123.825;21.54562;11;1 506 | 85.09;11.4248485;3;0 507 | 160.655;39.7743485;65;1 508 | 154.94;43.3463855;46;0 509 | 106.045;15.478827;8;0 510 | 126.365;21.9141635;15;1 511 | 166.37;52.673371;43;1 512 | 148.2852;38.441922;39;0 513 | 124.46;19.27766;12;0 514 | 89.535;11.113004;3;1 515 | 101.6;13.494362;4;0 516 | 151.765;42.807745;43;0 517 | 148.59;35.890467;70;0 518 | 153.67;44.22522;26;0 519 | 53.975;4.252425;0;0 520 | 146.685;38.0733785;48;0 521 | 56.515;5.159609;0;0 522 | 100.965;14.3164975;5;1 523 | 121.92;23.2182405;8;1 524 | 81.5848;10.659412;3;0 525 | 154.94;44.111822;44;1 526 | 156.21;44.0267735;33;0 527 | 132.715;24.9759095;15;1 528 | 125.095;22.5945515;12;0 529 | 101.6;14.344847;5;0 530 | 160.655;47.8823055;41;1 531 | 146.05;39.405805;37.4;0 532 | 132.715;24.777463;13;0 533 | 87.63;10.659412;6;0 534 | 156.21;41.050076;53;1 535 | 152.4;40.82328;49;0 536 | 162.56;47.0318205;27;0 537 | 114.935;17.519991;7;1 538 | 67.945;7.2291225;1;0 539 | 142.875;34.246196;31;0 540 | 76.835;8.0229085;1;1 541 | 145.415;31.127751;17;1 542 | 162.56;52.16308;31;1 543 | 156.21;54.0624965;21;0 544 | 71.12;8.051258;0;1 545 | 158.75;52.5316235;68;1 -------------------------------------------------------------------------------- /nbs.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamhajari/Introduction-to-Data-Science/d2b14506ddcb81ae5d2b7ce8e95e7a15cf4c0108/nbs.db -------------------------------------------------------------------------------- /nbs_top_artists_app.py: -------------------------------------------------------------------------------- 1 | from spyre import server 2 | 3 | import sqlite3 as lite 4 | import pandas as pd 5 | 6 | 7 | class TopArtistsApp(server.App): 8 | title = "Top Artists" 9 | inputs = [ 10 | { 11 | 'label': 'Network', 12 | 'type': 'dropdown', 13 | 'options': [ 14 | {'label': 'Facebook Page Likes', 'value': 'FaceBookPageLikes'}, 15 | {'label': 'Twitter Followers', 'value': 'TwitterFollowers'}, 16 | {'label': 'Youtube Views', 'value': 'YouTubeViews'}, 17 | {'label': 'Instagram Followers', 'value': 'InstagramFollowers'}, 18 | {'label': 'Instagram Likes', 'value': 'InstagramLikes'}, 19 | ], 20 | 'key': 'network', 21 | 'action_id': 'top_artists' 22 | 23 | }, { 24 | 'label': 'limit', 25 | 'type': 'slider', 26 | 'max': 100, 27 | 'value': 30, 28 | 'key': 'n', 29 | 'action_id': 'top_artists' 30 | } 31 | 32 | ] 33 | 34 | outputs = [{ 35 | 'type': 'table', 36 | 'id': 'top_artists' 37 | 38 | }] 39 | 40 | def get_social_data(self): 41 | con = lite.connect('nbs.db') 42 | artists_query = "select id, name from artists" 43 | artists_df = pd.read_sql(artists_query, con) 44 | 45 | socail_query = "select * from social_data" 46 | social_df = pd.read_sql(socail_query, con) 47 | df_merged = pd.merge(artists_df, social_df, left_on='id', right_on='artist_id') 48 | return df_merged.drop(['id', 'artist_id'], axis=1) 49 | 50 | def top_artists(self, params): 51 | n = int(params['n']) 52 | network = params['network'] 53 | """return the top n artists from network""" 54 | df_social = self.get_social_data() # get the data from sql 55 | 56 | # sort the result by the given network in descending order 57 | df_sorted = df_social.sort_values(by=network, ascending=False) 58 | 59 | # limit the results to the top n artists 60 | df_limited = df_sorted.head(n) 61 | 62 | # convert the values to integers so they look nicer 63 | df_limited.loc[:, network] = df_limited.loc[:, network].astype('int') 64 | 65 | # return the results but just include the values for the network of interest 66 | return df_limited[['name', network]] 67 | 68 | 69 | app = TopArtistsApp() 70 | app.launch() 71 | --------------------------------------------------------------------------------