├── .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 | " name | \n",
74 | " musicbrainz_id | \n",
75 | " id | \n",
76 | "
\n",
77 | " \n",
78 | " \n",
79 | " \n",
80 | " 0 | \n",
81 | " The Scenic | \n",
82 | " a8e347d8-29d8-459c-a444-68febeb99c6b | \n",
83 | " 500 | \n",
84 | "
\n",
85 | " \n",
86 | " 1 | \n",
87 | " Our Family Name | \n",
88 | " fc93c97f-1b9b-49af-8370-7b36e29ad22e | \n",
89 | " 710 | \n",
90 | "
\n",
91 | " \n",
92 | " 2 | \n",
93 | " Khamelien | \n",
94 | " NaN | \n",
95 | " 744 | \n",
96 | "
\n",
97 | " \n",
98 | " 3 | \n",
99 | " Death in the Park | \n",
100 | " 000c60eb-a2c4-46be-9097-e603fd8795c6 | \n",
101 | " 786 | \n",
102 | "
\n",
103 | " \n",
104 | " 4 | \n",
105 | " enter the collector | \n",
106 | " f50c0834-e2a7-4241-bd32-061d67560c41 | \n",
107 | " 818 | \n",
108 | "
\n",
109 | " \n",
110 | "
\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 | " name | \n",
164 | " musicbrainz_id | \n",
165 | " NBS_id | \n",
166 | "
\n",
167 | " \n",
168 | " \n",
169 | " \n",
170 | " 0 | \n",
171 | " The Scenic | \n",
172 | " a8e347d8-29d8-459c-a444-68febeb99c6b | \n",
173 | " 500 | \n",
174 | "
\n",
175 | " \n",
176 | " 1 | \n",
177 | " Our Family Name | \n",
178 | " fc93c97f-1b9b-49af-8370-7b36e29ad22e | \n",
179 | " 710 | \n",
180 | "
\n",
181 | " \n",
182 | " 2 | \n",
183 | " Khamelien | \n",
184 | " NaN | \n",
185 | " 744 | \n",
186 | "
\n",
187 | " \n",
188 | " 3 | \n",
189 | " Death in the Park | \n",
190 | " 000c60eb-a2c4-46be-9097-e603fd8795c6 | \n",
191 | " 786 | \n",
192 | "
\n",
193 | " \n",
194 | " 4 | \n",
195 | " enter the collector | \n",
196 | " f50c0834-e2a7-4241-bd32-061d67560c41 | \n",
197 | " 818 | \n",
198 | "
\n",
199 | " \n",
200 | "
\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 | " name | \n",
249 | " musicbrainz_id | \n",
250 | " id | \n",
251 | "
\n",
252 | " \n",
253 | " \n",
254 | " \n",
255 | " 0 | \n",
256 | " The Scenic | \n",
257 | " a8e347d8-29d8-459c-a444-68febeb99c6b | \n",
258 | " 500 | \n",
259 | "
\n",
260 | " \n",
261 | " 1 | \n",
262 | " Our Family Name | \n",
263 | " fc93c97f-1b9b-49af-8370-7b36e29ad22e | \n",
264 | " 710 | \n",
265 | "
\n",
266 | " \n",
267 | " 2 | \n",
268 | " Khamelien | \n",
269 | " NaN | \n",
270 | " 744 | \n",
271 | "
\n",
272 | " \n",
273 | " 3 | \n",
274 | " Death in the Park | \n",
275 | " 000c60eb-a2c4-46be-9097-e603fd8795c6 | \n",
276 | " 786 | \n",
277 | "
\n",
278 | " \n",
279 | " 4 | \n",
280 | " enter the collector | \n",
281 | " f50c0834-e2a7-4241-bd32-061d67560c41 | \n",
282 | " 818 | \n",
283 | "
\n",
284 | " \n",
285 | "
\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 | " name | \n",
330 | " musicbrainz_id | \n",
331 | " id | \n",
332 | "
\n",
333 | " \n",
334 | " \n",
335 | " \n",
336 | " 0 | \n",
337 | " The Scenic | \n",
338 | " a8e347d8-29d8-459c-a444-68febeb99c6b | \n",
339 | " 500 | \n",
340 | "
\n",
341 | " \n",
342 | " 1 | \n",
343 | " Our Family Name | \n",
344 | " fc93c97f-1b9b-49af-8370-7b36e29ad22e | \n",
345 | " 710 | \n",
346 | "
\n",
347 | " \n",
348 | " 2 | \n",
349 | " Khamelien | \n",
350 | " NaN | \n",
351 | " 744 | \n",
352 | "
\n",
353 | " \n",
354 | " 3 | \n",
355 | " Death in the Park | \n",
356 | " 000c60eb-a2c4-46be-9097-e603fd8795c6 | \n",
357 | " 786 | \n",
358 | "
\n",
359 | " \n",
360 | " 4 | \n",
361 | " Enter the Collector | \n",
362 | " f50c0834-e2a7-4241-bd32-061d67560c41 | \n",
363 | " 818 | \n",
364 | "
\n",
365 | " \n",
366 | "
\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 | " name | \n",
512 | " musicbrainz_id | \n",
513 | " created_at | \n",
514 | " updated_at | \n",
515 | " deleted_at | \n",
516 | " id | \n",
517 | "
\n",
518 | " \n",
519 | " \n",
520 | " \n",
521 | " 0 | \n",
522 | " The Scenic | \n",
523 | " a8e347d8-29d8-459c-a444-68febeb99c6b | \n",
524 | " 2009-06-16 07:58:58 | \n",
525 | " 2015-05-19 12:28:17 | \n",
526 | " None | \n",
527 | " 500 | \n",
528 | "
\n",
529 | " \n",
530 | " 1 | \n",
531 | " Our Family Name | \n",
532 | " fc93c97f-1b9b-49af-8370-7b36e29ad22e | \n",
533 | " 2009-06-16 08:04:18 | \n",
534 | " 2014-08-27 09:04:37 | \n",
535 | " None | \n",
536 | " 710 | \n",
537 | "
\n",
538 | " \n",
539 | " 2 | \n",
540 | " Khamelien | \n",
541 | " None | \n",
542 | " 2009-06-16 08:05:08 | \n",
543 | " 2014-08-27 09:04:36 | \n",
544 | " None | \n",
545 | " 744 | \n",
546 | "
\n",
547 | " \n",
548 | " 3 | \n",
549 | " Death in the Park | \n",
550 | " 000c60eb-a2c4-46be-9097-e603fd8795c6 | \n",
551 | " 2009-06-16 08:06:10 | \n",
552 | " 2014-08-27 09:04:37 | \n",
553 | " None | \n",
554 | " 786 | \n",
555 | "
\n",
556 | " \n",
557 | " 4 | \n",
558 | " enter the collector | \n",
559 | " f50c0834-e2a7-4241-bd32-061d67560c41 | \n",
560 | " 2009-06-16 08:06:54 | \n",
561 | " 2014-08-27 09:04:34 | \n",
562 | " None | \n",
563 | " 818 | \n",
564 | "
\n",
565 | " \n",
566 | "
\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 | " href | \n",
495 | " month | \n",
496 | "
\n",
497 | " \n",
498 | " \n",
499 | " \n",
500 | " 1.1 | \n",
501 | " #January | \n",
502 | " January | \n",
503 | "
\n",
504 | " \n",
505 | " 1.2 | \n",
506 | " #February | \n",
507 | " February | \n",
508 | "
\n",
509 | " \n",
510 | " 1.3 | \n",
511 | " #March | \n",
512 | " March | \n",
513 | "
\n",
514 | " \n",
515 | " 1.4 | \n",
516 | " #April | \n",
517 | " April | \n",
518 | "
\n",
519 | " \n",
520 | " 1.5 | \n",
521 | " #May | \n",
522 | " May | \n",
523 | "
\n",
524 | " \n",
525 | " 1.6 | \n",
526 | " #June | \n",
527 | " June | \n",
528 | "
\n",
529 | " \n",
530 | " 1.7 | \n",
531 | " #July | \n",
532 | " July | \n",
533 | "
\n",
534 | " \n",
535 | " 1.8 | \n",
536 | " #August | \n",
537 | " August | \n",
538 | "
\n",
539 | " \n",
540 | " 1.9 | \n",
541 | " #September | \n",
542 | " September | \n",
543 | "
\n",
544 | " \n",
545 | " 1.10 | \n",
546 | " #October | \n",
547 | " October | \n",
548 | "
\n",
549 | " \n",
550 | " 1.11 | \n",
551 | " #November | \n",
552 | " November | \n",
553 | "
\n",
554 | " \n",
555 | " 1.12 | \n",
556 | " #December | \n",
557 | " December | \n",
558 | "
\n",
559 | " \n",
560 | "
\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 | " id | \n",
33 | " name | \n",
34 | "
\n",
35 | " \n",
36 | " \n",
37 | " \n",
38 | " 0 | \n",
39 | " 500 | \n",
40 | " The Scenic | \n",
41 | "
\n",
42 | " \n",
43 | " 1 | \n",
44 | " 710 | \n",
45 | " Our Family Name | \n",
46 | "
\n",
47 | " \n",
48 | " 2 | \n",
49 | " 744 | \n",
50 | " Khamelien | \n",
51 | "
\n",
52 | " \n",
53 | " 3 | \n",
54 | " 786 | \n",
55 | " Death in the Park | \n",
56 | "
\n",
57 | " \n",
58 | " 4 | \n",
59 | " 818 | \n",
60 | " enter the collector | \n",
61 | "
\n",
62 | " \n",
63 | "
\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 | " artist_id | \n",
108 | " FaceBookPageLikes | \n",
109 | " TwitterFollowers | \n",
110 | " YouTubeViews | \n",
111 | " InstagramLikes | \n",
112 | " InstagramFollowers | \n",
113 | "
\n",
114 | " \n",
115 | " \n",
116 | " \n",
117 | " 0 | \n",
118 | " 500 | \n",
119 | " 4797.0 | \n",
120 | " 1395.0 | \n",
121 | " NaN | \n",
122 | " NaN | \n",
123 | " NaN | \n",
124 | "
\n",
125 | " \n",
126 | " 1 | \n",
127 | " 744 | \n",
128 | " NaN | \n",
129 | " 224.0 | \n",
130 | " 44287.0 | \n",
131 | " NaN | \n",
132 | " NaN | \n",
133 | "
\n",
134 | " \n",
135 | " 2 | \n",
136 | " 952 | \n",
137 | " 4142.0 | \n",
138 | " 64.0 | \n",
139 | " 130279.0 | \n",
140 | " NaN | \n",
141 | " NaN | \n",
142 | "
\n",
143 | " \n",
144 | " 3 | \n",
145 | " 1017 | \n",
146 | " NaN | \n",
147 | " NaN | \n",
148 | " 2966.0 | \n",
149 | " NaN | \n",
150 | " NaN | \n",
151 | "
\n",
152 | " \n",
153 | " 4 | \n",
154 | " 1086 | \n",
155 | " 28980.0 | \n",
156 | " 43405.0 | \n",
157 | " 402054.0 | \n",
158 | " 56832.0 | \n",
159 | " 7653.0 | \n",
160 | "
\n",
161 | " \n",
162 | "
\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 | " id | \n",
213 | " name | \n",
214 | " artist_id | \n",
215 | " FaceBookPageLikes | \n",
216 | " TwitterFollowers | \n",
217 | " YouTubeViews | \n",
218 | " InstagramLikes | \n",
219 | " InstagramFollowers | \n",
220 | "
\n",
221 | " \n",
222 | " \n",
223 | " \n",
224 | " 0 | \n",
225 | " 500 | \n",
226 | " The Scenic | \n",
227 | " 500 | \n",
228 | " 4797.0 | \n",
229 | " 1395.0 | \n",
230 | " NaN | \n",
231 | " NaN | \n",
232 | " NaN | \n",
233 | "
\n",
234 | " \n",
235 | " 1 | \n",
236 | " 744 | \n",
237 | " Khamelien | \n",
238 | " 744 | \n",
239 | " NaN | \n",
240 | " 224.0 | \n",
241 | " 44287.0 | \n",
242 | " NaN | \n",
243 | " NaN | \n",
244 | "
\n",
245 | " \n",
246 | " 2 | \n",
247 | " 952 | \n",
248 | " Shorelines End | \n",
249 | " 952 | \n",
250 | " 4142.0 | \n",
251 | " 64.0 | \n",
252 | " 130279.0 | \n",
253 | " NaN | \n",
254 | " NaN | \n",
255 | "
\n",
256 | " \n",
257 | " 3 | \n",
258 | " 1017 | \n",
259 | " Hollywood Ave | \n",
260 | " 1017 | \n",
261 | " NaN | \n",
262 | " NaN | \n",
263 | " 2966.0 | \n",
264 | " NaN | \n",
265 | " NaN | \n",
266 | "
\n",
267 | " \n",
268 | " 4 | \n",
269 | " 1086 | \n",
270 | " Play for keeps | \n",
271 | " 1086 | \n",
272 | " 28980.0 | \n",
273 | " 43405.0 | \n",
274 | " 402054.0 | \n",
275 | " 56832.0 | \n",
276 | " 7653.0 | \n",
277 | "
\n",
278 | " \n",
279 | "
\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 | " name | \n",
360 | " TwitterFollowers | \n",
361 | "
\n",
362 | " \n",
363 | " \n",
364 | " \n",
365 | " 1881 | \n",
366 | " The Amp Jackers | \n",
367 | " 97933 | \n",
368 | "
\n",
369 | " \n",
370 | " 1049 | \n",
371 | " DaveRose | \n",
372 | " 95106 | \n",
373 | "
\n",
374 | " \n",
375 | " 2043 | \n",
376 | " Dez Duron | \n",
377 | " 89117 | \n",
378 | "
\n",
379 | " \n",
380 | " 649 | \n",
381 | " Pauly Shore | \n",
382 | " 84642 | \n",
383 | "
\n",
384 | " \n",
385 | " 1525 | \n",
386 | " Doyin aka Lyrical | \n",
387 | " 80197 | \n",
388 | "
\n",
389 | " \n",
390 | " 3571 | \n",
391 | " Chantelle Lee | \n",
392 | " 78375 | \n",
393 | "
\n",
394 | " \n",
395 | " 3425 | \n",
396 | " Billi. B | \n",
397 | " 71055 | \n",
398 | "
\n",
399 | " \n",
400 | "
\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 |
--------------------------------------------------------------------------------