├── .DS_Store
├── .ipynb_checkpoints
├── 0001_RFECV-checkpoint.ipynb
├── 0002_EfficientNet-checkpoint.ipynb
├── 0003_Top3PandasFunctions-checkpoint.ipynb
├── 0004_TPOT-checkpoint.ipynb
├── 0005_PyCaret-checkpoint.ipynb
├── 0006_PyCaretRegression-checkpoint.ipynb
└── 0007_PyCaretClassification-checkpoint.ipynb
├── 0001_RFECV.ipynb
├── 0002_MLDeploy
├── .DS_Store
├── .ipynb_checkpoints
│ └── Test-checkpoint.ipynb
├── Test.ipynb
├── app.py
├── modeler
│ ├── .ipynb_checkpoints
│ │ └── Modeler-checkpoint.py
│ ├── Modeler.py
│ ├── __init__.py
│ └── __pycache__
│ │ ├── Modeler.cpython-37.pyc
│ │ └── __init__.cpython-37.pyc
└── models
│ └── iris.model
├── 0003_Top3PandasFunctions.ipynb
├── 0004_TPOT.ipynb
├── 0005_PyCaret.ipynb
├── 0006_PyCaretRegression.ipynb
├── 0007_PyCaretClassification.ipynb
├── data
└── RealEstate.csv
└── img
└── LogoSingleRow.png
/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/betterdatascience/YouTube/cf24c5cf3192eb7b17c25d94c710d3f941818537/.DS_Store
--------------------------------------------------------------------------------
/.ipynb_checkpoints/0002_EfficientNet-checkpoint.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "- EfficientNet rethinks the way in which we scale the CNNs up\n",
8 | "- One wasy of scaling is adding more layers - ResNet18 to ResNet200\n",
9 | "- Width scaling: adding more feature maps\n",
10 | "- Depth scaling: more layers\n",
11 | "- Resolution scaling: larger input images\n",
12 | "- Compound scaling: combination of increasing width, adding more layers, and enargening the resolution\n",
13 | "- Compound scaling is a basic idea in EfficientNet - the idea is to balance upsampling of width, depth, and resolution by scalling with a contant ratio\n",
14 | "\n",
15 | "- Intuition: if the input image is bigger, then the network needs more layer to increase the receptive field and more channels to capture more fine-grained patterns on the bigger image"
16 | ]
17 | }
18 | ],
19 | "metadata": {
20 | "kernelspec": {
21 | "display_name": "Python 3",
22 | "language": "python",
23 | "name": "python3"
24 | },
25 | "language_info": {
26 | "codemirror_mode": {
27 | "name": "ipython",
28 | "version": 3
29 | },
30 | "file_extension": ".py",
31 | "mimetype": "text/x-python",
32 | "name": "python",
33 | "nbconvert_exporter": "python",
34 | "pygments_lexer": "ipython3",
35 | "version": "3.7.6"
36 | }
37 | },
38 | "nbformat": 4,
39 | "nbformat_minor": 4
40 | }
41 |
--------------------------------------------------------------------------------
/.ipynb_checkpoints/0003_Top3PandasFunctions-checkpoint.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "
\n",
8 | "

\n",
9 | "
\n",
10 | "\n",
11 | "# Top 3 Pandas Functions"
12 | ]
13 | },
14 | {
15 | "cell_type": "code",
16 | "execution_count": 1,
17 | "metadata": {},
18 | "outputs": [],
19 | "source": [
20 | "import pandas as pd"
21 | ]
22 | },
23 | {
24 | "cell_type": "code",
25 | "execution_count": 2,
26 | "metadata": {},
27 | "outputs": [
28 | {
29 | "data": {
30 | "text/html": [
31 | "\n",
32 | "\n",
45 | "
\n",
46 | " \n",
47 | " \n",
48 | " | \n",
49 | " PassengerId | \n",
50 | " Survived | \n",
51 | " Pclass | \n",
52 | " Name | \n",
53 | " Sex | \n",
54 | " Age | \n",
55 | " SibSp | \n",
56 | " Parch | \n",
57 | " Ticket | \n",
58 | " Fare | \n",
59 | " Cabin | \n",
60 | " Embarked | \n",
61 | "
\n",
62 | " \n",
63 | " \n",
64 | " \n",
65 | " 0 | \n",
66 | " 1 | \n",
67 | " 0 | \n",
68 | " 3 | \n",
69 | " Braund, Mr. Owen Harris | \n",
70 | " male | \n",
71 | " 22.0 | \n",
72 | " 1 | \n",
73 | " 0 | \n",
74 | " A/5 21171 | \n",
75 | " 7.2500 | \n",
76 | " NaN | \n",
77 | " S | \n",
78 | "
\n",
79 | " \n",
80 | " 1 | \n",
81 | " 2 | \n",
82 | " 1 | \n",
83 | " 1 | \n",
84 | " Cumings, Mrs. John Bradley (Florence Briggs Th... | \n",
85 | " female | \n",
86 | " 38.0 | \n",
87 | " 1 | \n",
88 | " 0 | \n",
89 | " PC 17599 | \n",
90 | " 71.2833 | \n",
91 | " C85 | \n",
92 | " C | \n",
93 | "
\n",
94 | " \n",
95 | " 2 | \n",
96 | " 3 | \n",
97 | " 1 | \n",
98 | " 3 | \n",
99 | " Heikkinen, Miss. Laina | \n",
100 | " female | \n",
101 | " 26.0 | \n",
102 | " 0 | \n",
103 | " 0 | \n",
104 | " STON/O2. 3101282 | \n",
105 | " 7.9250 | \n",
106 | " NaN | \n",
107 | " S | \n",
108 | "
\n",
109 | " \n",
110 | " 3 | \n",
111 | " 4 | \n",
112 | " 1 | \n",
113 | " 1 | \n",
114 | " Futrelle, Mrs. Jacques Heath (Lily May Peel) | \n",
115 | " female | \n",
116 | " 35.0 | \n",
117 | " 1 | \n",
118 | " 0 | \n",
119 | " 113803 | \n",
120 | " 53.1000 | \n",
121 | " C123 | \n",
122 | " S | \n",
123 | "
\n",
124 | " \n",
125 | " 4 | \n",
126 | " 5 | \n",
127 | " 0 | \n",
128 | " 3 | \n",
129 | " Allen, Mr. William Henry | \n",
130 | " male | \n",
131 | " 35.0 | \n",
132 | " 0 | \n",
133 | " 0 | \n",
134 | " 373450 | \n",
135 | " 8.0500 | \n",
136 | " NaN | \n",
137 | " S | \n",
138 | "
\n",
139 | " \n",
140 | "
\n",
141 | "
"
142 | ],
143 | "text/plain": [
144 | " PassengerId Survived Pclass \\\n",
145 | "0 1 0 3 \n",
146 | "1 2 1 1 \n",
147 | "2 3 1 3 \n",
148 | "3 4 1 1 \n",
149 | "4 5 0 3 \n",
150 | "\n",
151 | " Name Sex Age SibSp \\\n",
152 | "0 Braund, Mr. Owen Harris male 22.0 1 \n",
153 | "1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 \n",
154 | "2 Heikkinen, Miss. Laina female 26.0 0 \n",
155 | "3 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 \n",
156 | "4 Allen, Mr. William Henry male 35.0 0 \n",
157 | "\n",
158 | " Parch Ticket Fare Cabin Embarked \n",
159 | "0 0 A/5 21171 7.2500 NaN S \n",
160 | "1 0 PC 17599 71.2833 C85 C \n",
161 | "2 0 STON/O2. 3101282 7.9250 NaN S \n",
162 | "3 0 113803 53.1000 C123 S \n",
163 | "4 0 373450 8.0500 NaN S "
164 | ]
165 | },
166 | "execution_count": 2,
167 | "metadata": {},
168 | "output_type": "execute_result"
169 | }
170 | ],
171 | "source": [
172 | "df = pd.read_csv('https://raw.githubusercontent.com/datasciencedojo/datasets/master/titanic.csv')\n",
173 | "df.head()"
174 | ]
175 | },
176 | {
177 | "cell_type": "markdown",
178 | "metadata": {},
179 | "source": [
180 | "# 1. apply()"
181 | ]
182 | },
183 | {
184 | "cell_type": "code",
185 | "execution_count": 3,
186 | "metadata": {},
187 | "outputs": [],
188 | "source": [
189 | "def extract_title(string):\n",
190 | " string = string.split(',')[-1]\n",
191 | " string = string.strip()\n",
192 | " string = string.split('.')[0]\n",
193 | " return string"
194 | ]
195 | },
196 | {
197 | "cell_type": "code",
198 | "execution_count": 4,
199 | "metadata": {},
200 | "outputs": [
201 | {
202 | "data": {
203 | "text/plain": [
204 | "0 Mr\n",
205 | "1 Mrs\n",
206 | "2 Miss\n",
207 | "3 Mrs\n",
208 | "4 Mr\n",
209 | "Name: Name, dtype: object"
210 | ]
211 | },
212 | "execution_count": 4,
213 | "metadata": {},
214 | "output_type": "execute_result"
215 | }
216 | ],
217 | "source": [
218 | "titles = df['Name'].apply(extract_title)\n",
219 | "titles[:5]"
220 | ]
221 | },
222 | {
223 | "cell_type": "code",
224 | "execution_count": 5,
225 | "metadata": {},
226 | "outputs": [
227 | {
228 | "data": {
229 | "text/plain": [
230 | "0 Mr\n",
231 | "1 Mrs\n",
232 | "2 Miss\n",
233 | "3 Mrs\n",
234 | "4 Mr\n",
235 | "Name: Name, dtype: object"
236 | ]
237 | },
238 | "execution_count": 5,
239 | "metadata": {},
240 | "output_type": "execute_result"
241 | }
242 | ],
243 | "source": [
244 | "titles = df['Name'].apply(lambda x: x.split(',')[-1].strip().split('.')[0])\n",
245 | "titles[:5]"
246 | ]
247 | },
248 | {
249 | "cell_type": "markdown",
250 | "metadata": {},
251 | "source": [
252 | "# 2. value_counts()"
253 | ]
254 | },
255 | {
256 | "cell_type": "code",
257 | "execution_count": 6,
258 | "metadata": {},
259 | "outputs": [
260 | {
261 | "data": {
262 | "text/plain": [
263 | "Mr 517\n",
264 | "Miss 182\n",
265 | "Mrs 125\n",
266 | "Master 40\n",
267 | "Dr 7\n",
268 | "Rev 6\n",
269 | "Mlle 2\n",
270 | "Col 2\n",
271 | "Major 2\n",
272 | "Mme 1\n",
273 | "Jonkheer 1\n",
274 | "Sir 1\n",
275 | "Lady 1\n",
276 | "Don 1\n",
277 | "the Countess 1\n",
278 | "Capt 1\n",
279 | "Ms 1\n",
280 | "Name: Name, dtype: int64"
281 | ]
282 | },
283 | "execution_count": 6,
284 | "metadata": {},
285 | "output_type": "execute_result"
286 | }
287 | ],
288 | "source": [
289 | "titles.value_counts()"
290 | ]
291 | },
292 | {
293 | "cell_type": "code",
294 | "execution_count": 8,
295 | "metadata": {},
296 | "outputs": [
297 | {
298 | "data": {
299 | "text/plain": [
300 | "Mr 58.024691\n",
301 | "Miss 20.426487\n",
302 | "Mrs 14.029181\n",
303 | "Master 4.489338\n",
304 | "Dr 0.785634\n",
305 | "Rev 0.673401\n",
306 | "Mlle 0.224467\n",
307 | "Col 0.224467\n",
308 | "Major 0.224467\n",
309 | "Mme 0.112233\n",
310 | "Jonkheer 0.112233\n",
311 | "Sir 0.112233\n",
312 | "Lady 0.112233\n",
313 | "Don 0.112233\n",
314 | "the Countess 0.112233\n",
315 | "Capt 0.112233\n",
316 | "Ms 0.112233\n",
317 | "Name: Name, dtype: float64"
318 | ]
319 | },
320 | "execution_count": 8,
321 | "metadata": {},
322 | "output_type": "execute_result"
323 | }
324 | ],
325 | "source": [
326 | "titles.value_counts(normalize=True) * 100"
327 | ]
328 | },
329 | {
330 | "cell_type": "markdown",
331 | "metadata": {},
332 | "source": [
333 | "# 3. get_dummies()"
334 | ]
335 | },
336 | {
337 | "cell_type": "code",
338 | "execution_count": 9,
339 | "metadata": {},
340 | "outputs": [
341 | {
342 | "data": {
343 | "text/html": [
344 | "\n",
345 | "\n",
358 | "
\n",
359 | " \n",
360 | " \n",
361 | " | \n",
362 | " C | \n",
363 | " Q | \n",
364 | " S | \n",
365 | "
\n",
366 | " \n",
367 | " \n",
368 | " \n",
369 | " 0 | \n",
370 | " 0 | \n",
371 | " 0 | \n",
372 | " 1 | \n",
373 | "
\n",
374 | " \n",
375 | " 1 | \n",
376 | " 1 | \n",
377 | " 0 | \n",
378 | " 0 | \n",
379 | "
\n",
380 | " \n",
381 | " 2 | \n",
382 | " 0 | \n",
383 | " 0 | \n",
384 | " 1 | \n",
385 | "
\n",
386 | " \n",
387 | " 3 | \n",
388 | " 0 | \n",
389 | " 0 | \n",
390 | " 1 | \n",
391 | "
\n",
392 | " \n",
393 | " 4 | \n",
394 | " 0 | \n",
395 | " 0 | \n",
396 | " 1 | \n",
397 | "
\n",
398 | " \n",
399 | "
\n",
400 | "
"
401 | ],
402 | "text/plain": [
403 | " C Q S\n",
404 | "0 0 0 1\n",
405 | "1 1 0 0\n",
406 | "2 0 0 1\n",
407 | "3 0 0 1\n",
408 | "4 0 0 1"
409 | ]
410 | },
411 | "execution_count": 9,
412 | "metadata": {},
413 | "output_type": "execute_result"
414 | }
415 | ],
416 | "source": [
417 | "emb = pd.get_dummies(df['Embarked'])\n",
418 | "emb.head()"
419 | ]
420 | },
421 | {
422 | "cell_type": "code",
423 | "execution_count": 10,
424 | "metadata": {},
425 | "outputs": [
426 | {
427 | "data": {
428 | "text/html": [
429 | "\n",
430 | "\n",
443 | "
\n",
444 | " \n",
445 | " \n",
446 | " | \n",
447 | " Embarked_C | \n",
448 | " Embarked_Q | \n",
449 | " Embarked_S | \n",
450 | "
\n",
451 | " \n",
452 | " \n",
453 | " \n",
454 | " 0 | \n",
455 | " 0 | \n",
456 | " 0 | \n",
457 | " 1 | \n",
458 | "
\n",
459 | " \n",
460 | " 1 | \n",
461 | " 1 | \n",
462 | " 0 | \n",
463 | " 0 | \n",
464 | "
\n",
465 | " \n",
466 | " 2 | \n",
467 | " 0 | \n",
468 | " 0 | \n",
469 | " 1 | \n",
470 | "
\n",
471 | " \n",
472 | " 3 | \n",
473 | " 0 | \n",
474 | " 0 | \n",
475 | " 1 | \n",
476 | "
\n",
477 | " \n",
478 | " 4 | \n",
479 | " 0 | \n",
480 | " 0 | \n",
481 | " 1 | \n",
482 | "
\n",
483 | " \n",
484 | "
\n",
485 | "
"
486 | ],
487 | "text/plain": [
488 | " Embarked_C Embarked_Q Embarked_S\n",
489 | "0 0 0 1\n",
490 | "1 1 0 0\n",
491 | "2 0 0 1\n",
492 | "3 0 0 1\n",
493 | "4 0 0 1"
494 | ]
495 | },
496 | "execution_count": 10,
497 | "metadata": {},
498 | "output_type": "execute_result"
499 | }
500 | ],
501 | "source": [
502 | "emb = pd.get_dummies(df['Embarked'], prefix='Embarked')\n",
503 | "emb.head()"
504 | ]
505 | },
506 | {
507 | "cell_type": "code",
508 | "execution_count": 11,
509 | "metadata": {},
510 | "outputs": [
511 | {
512 | "data": {
513 | "text/html": [
514 | "\n",
515 | "\n",
528 | "
\n",
529 | " \n",
530 | " \n",
531 | " | \n",
532 | " Embarked_Q | \n",
533 | " Embarked_S | \n",
534 | "
\n",
535 | " \n",
536 | " \n",
537 | " \n",
538 | " 0 | \n",
539 | " 0 | \n",
540 | " 1 | \n",
541 | "
\n",
542 | " \n",
543 | " 1 | \n",
544 | " 0 | \n",
545 | " 0 | \n",
546 | "
\n",
547 | " \n",
548 | " 2 | \n",
549 | " 0 | \n",
550 | " 1 | \n",
551 | "
\n",
552 | " \n",
553 | " 3 | \n",
554 | " 0 | \n",
555 | " 1 | \n",
556 | "
\n",
557 | " \n",
558 | " 4 | \n",
559 | " 0 | \n",
560 | " 1 | \n",
561 | "
\n",
562 | " \n",
563 | "
\n",
564 | "
"
565 | ],
566 | "text/plain": [
567 | " Embarked_Q Embarked_S\n",
568 | "0 0 1\n",
569 | "1 0 0\n",
570 | "2 0 1\n",
571 | "3 0 1\n",
572 | "4 0 1"
573 | ]
574 | },
575 | "execution_count": 11,
576 | "metadata": {},
577 | "output_type": "execute_result"
578 | }
579 | ],
580 | "source": [
581 | "emb = pd.get_dummies(df['Embarked'], prefix='Embarked', drop_first=True)\n",
582 | "emb.head()"
583 | ]
584 | }
585 | ],
586 | "metadata": {
587 | "kernelspec": {
588 | "display_name": "Python 3",
589 | "language": "python",
590 | "name": "python3"
591 | },
592 | "language_info": {
593 | "codemirror_mode": {
594 | "name": "ipython",
595 | "version": 3
596 | },
597 | "file_extension": ".py",
598 | "mimetype": "text/x-python",
599 | "name": "python",
600 | "nbconvert_exporter": "python",
601 | "pygments_lexer": "ipython3",
602 | "version": "3.7.6"
603 | }
604 | },
605 | "nbformat": 4,
606 | "nbformat_minor": 4
607 | }
608 |
--------------------------------------------------------------------------------
/.ipynb_checkpoints/0004_TPOT-checkpoint.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "\n",
8 | "

\n",
9 | "
\n",
10 | "\n",
11 | "# TPOT"
12 | ]
13 | },
14 | {
15 | "cell_type": "code",
16 | "execution_count": 1,
17 | "metadata": {},
18 | "outputs": [
19 | {
20 | "name": "stderr",
21 | "output_type": "stream",
22 | "text": [
23 | "/opt/anaconda3/lib/python3.7/importlib/_bootstrap.py:219: RuntimeWarning: numpy.ufunc size changed, may indicate binary incompatibility. Expected 192 from C header, got 216 from PyObject\n",
24 | " return f(*args, **kwds)\n"
25 | ]
26 | }
27 | ],
28 | "source": [
29 | "import pandas as pd\n",
30 | "from sklearn.preprocessing import StandardScaler\n",
31 | "from sklearn.model_selection import train_test_split"
32 | ]
33 | },
34 | {
35 | "cell_type": "code",
36 | "execution_count": 2,
37 | "metadata": {},
38 | "outputs": [
39 | {
40 | "data": {
41 | "text/html": [
42 | "\n",
43 | "\n",
56 | "
\n",
57 | " \n",
58 | " \n",
59 | " | \n",
60 | " PassengerId | \n",
61 | " Survived | \n",
62 | " Pclass | \n",
63 | " Name | \n",
64 | " Sex | \n",
65 | " Age | \n",
66 | " SibSp | \n",
67 | " Parch | \n",
68 | " Ticket | \n",
69 | " Fare | \n",
70 | " Cabin | \n",
71 | " Embarked | \n",
72 | "
\n",
73 | " \n",
74 | " \n",
75 | " \n",
76 | " 0 | \n",
77 | " 1 | \n",
78 | " 0 | \n",
79 | " 3 | \n",
80 | " Braund, Mr. Owen Harris | \n",
81 | " male | \n",
82 | " 22.0 | \n",
83 | " 1 | \n",
84 | " 0 | \n",
85 | " A/5 21171 | \n",
86 | " 7.2500 | \n",
87 | " NaN | \n",
88 | " S | \n",
89 | "
\n",
90 | " \n",
91 | " 1 | \n",
92 | " 2 | \n",
93 | " 1 | \n",
94 | " 1 | \n",
95 | " Cumings, Mrs. John Bradley (Florence Briggs Th... | \n",
96 | " female | \n",
97 | " 38.0 | \n",
98 | " 1 | \n",
99 | " 0 | \n",
100 | " PC 17599 | \n",
101 | " 71.2833 | \n",
102 | " C85 | \n",
103 | " C | \n",
104 | "
\n",
105 | " \n",
106 | " 2 | \n",
107 | " 3 | \n",
108 | " 1 | \n",
109 | " 3 | \n",
110 | " Heikkinen, Miss. Laina | \n",
111 | " female | \n",
112 | " 26.0 | \n",
113 | " 0 | \n",
114 | " 0 | \n",
115 | " STON/O2. 3101282 | \n",
116 | " 7.9250 | \n",
117 | " NaN | \n",
118 | " S | \n",
119 | "
\n",
120 | " \n",
121 | " 3 | \n",
122 | " 4 | \n",
123 | " 1 | \n",
124 | " 1 | \n",
125 | " Futrelle, Mrs. Jacques Heath (Lily May Peel) | \n",
126 | " female | \n",
127 | " 35.0 | \n",
128 | " 1 | \n",
129 | " 0 | \n",
130 | " 113803 | \n",
131 | " 53.1000 | \n",
132 | " C123 | \n",
133 | " S | \n",
134 | "
\n",
135 | " \n",
136 | " 4 | \n",
137 | " 5 | \n",
138 | " 0 | \n",
139 | " 3 | \n",
140 | " Allen, Mr. William Henry | \n",
141 | " male | \n",
142 | " 35.0 | \n",
143 | " 0 | \n",
144 | " 0 | \n",
145 | " 373450 | \n",
146 | " 8.0500 | \n",
147 | " NaN | \n",
148 | " S | \n",
149 | "
\n",
150 | " \n",
151 | "
\n",
152 | "
"
153 | ],
154 | "text/plain": [
155 | " PassengerId Survived Pclass \\\n",
156 | "0 1 0 3 \n",
157 | "1 2 1 1 \n",
158 | "2 3 1 3 \n",
159 | "3 4 1 1 \n",
160 | "4 5 0 3 \n",
161 | "\n",
162 | " Name Sex Age SibSp \\\n",
163 | "0 Braund, Mr. Owen Harris male 22.0 1 \n",
164 | "1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 \n",
165 | "2 Heikkinen, Miss. Laina female 26.0 0 \n",
166 | "3 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 \n",
167 | "4 Allen, Mr. William Henry male 35.0 0 \n",
168 | "\n",
169 | " Parch Ticket Fare Cabin Embarked \n",
170 | "0 0 A/5 21171 7.2500 NaN S \n",
171 | "1 0 PC 17599 71.2833 C85 C \n",
172 | "2 0 STON/O2. 3101282 7.9250 NaN S \n",
173 | "3 0 113803 53.1000 C123 S \n",
174 | "4 0 373450 8.0500 NaN S "
175 | ]
176 | },
177 | "execution_count": 2,
178 | "metadata": {},
179 | "output_type": "execute_result"
180 | }
181 | ],
182 | "source": [
183 | "data = pd.read_csv('https://raw.githubusercontent.com/datasciencedojo/datasets/master/titanic.csv')\n",
184 | "data.head()"
185 | ]
186 | },
187 | {
188 | "cell_type": "markdown",
189 | "metadata": {},
190 | "source": [
191 | "## Data preparation"
192 | ]
193 | },
194 | {
195 | "cell_type": "code",
196 | "execution_count": 3,
197 | "metadata": {},
198 | "outputs": [],
199 | "source": [
200 | "data.drop(['Ticket', 'PassengerId'], axis=1, inplace=True)\n",
201 | "\n",
202 | "gender_mapper = {'male': 0, 'female': 1}\n",
203 | "data['Sex'].replace(gender_mapper, inplace=True)\n",
204 | "\n",
205 | "data['Title'] = data['Name'].apply(lambda x: x.split(',')[1].strip().split(' ')[0])\n",
206 | "data['Title'] = [0 if x in ['Mr.', 'Miss.', 'Mrs.'] else 1 for x in data['Title']]\n",
207 | "data = data.rename(columns={'Title': 'Title_Unusual'})\n",
208 | "data.drop('Name', axis=1, inplace=True)\n",
209 | "\n",
210 | "data['Cabin_Known'] = [0 if str(x) == 'nan' else 1 for x in data['Cabin']]\n",
211 | "data.drop('Cabin', axis=1, inplace=True)\n",
212 | "\n",
213 | "emb_dummies = pd.get_dummies(data['Embarked'], drop_first=True, prefix='Embarked')\n",
214 | "data = pd.concat([data, emb_dummies], axis=1)\n",
215 | "data.drop('Embarked', axis=1, inplace=True)\n",
216 | "\n",
217 | "data['Age'] = data['Age'].fillna(int(data['Age'].mean()))"
218 | ]
219 | },
220 | {
221 | "cell_type": "code",
222 | "execution_count": 4,
223 | "metadata": {},
224 | "outputs": [
225 | {
226 | "data": {
227 | "text/html": [
228 | "\n",
229 | "\n",
242 | "
\n",
243 | " \n",
244 | " \n",
245 | " | \n",
246 | " Survived | \n",
247 | " Pclass | \n",
248 | " Sex | \n",
249 | " Age | \n",
250 | " SibSp | \n",
251 | " Parch | \n",
252 | " Fare | \n",
253 | " Title_Unusual | \n",
254 | " Cabin_Known | \n",
255 | " Embarked_Q | \n",
256 | " Embarked_S | \n",
257 | "
\n",
258 | " \n",
259 | " \n",
260 | " \n",
261 | " 0 | \n",
262 | " 0 | \n",
263 | " 3 | \n",
264 | " 0 | \n",
265 | " 22.0 | \n",
266 | " 1 | \n",
267 | " 0 | \n",
268 | " 7.2500 | \n",
269 | " 0 | \n",
270 | " 0 | \n",
271 | " 0 | \n",
272 | " 1 | \n",
273 | "
\n",
274 | " \n",
275 | " 1 | \n",
276 | " 1 | \n",
277 | " 1 | \n",
278 | " 1 | \n",
279 | " 38.0 | \n",
280 | " 1 | \n",
281 | " 0 | \n",
282 | " 71.2833 | \n",
283 | " 0 | \n",
284 | " 1 | \n",
285 | " 0 | \n",
286 | " 0 | \n",
287 | "
\n",
288 | " \n",
289 | " 2 | \n",
290 | " 1 | \n",
291 | " 3 | \n",
292 | " 1 | \n",
293 | " 26.0 | \n",
294 | " 0 | \n",
295 | " 0 | \n",
296 | " 7.9250 | \n",
297 | " 0 | \n",
298 | " 0 | \n",
299 | " 0 | \n",
300 | " 1 | \n",
301 | "
\n",
302 | " \n",
303 | " 3 | \n",
304 | " 1 | \n",
305 | " 1 | \n",
306 | " 1 | \n",
307 | " 35.0 | \n",
308 | " 1 | \n",
309 | " 0 | \n",
310 | " 53.1000 | \n",
311 | " 0 | \n",
312 | " 1 | \n",
313 | " 0 | \n",
314 | " 1 | \n",
315 | "
\n",
316 | " \n",
317 | " 4 | \n",
318 | " 0 | \n",
319 | " 3 | \n",
320 | " 0 | \n",
321 | " 35.0 | \n",
322 | " 0 | \n",
323 | " 0 | \n",
324 | " 8.0500 | \n",
325 | " 0 | \n",
326 | " 0 | \n",
327 | " 0 | \n",
328 | " 1 | \n",
329 | "
\n",
330 | " \n",
331 | "
\n",
332 | "
"
333 | ],
334 | "text/plain": [
335 | " Survived Pclass Sex Age SibSp Parch Fare Title_Unusual \\\n",
336 | "0 0 3 0 22.0 1 0 7.2500 0 \n",
337 | "1 1 1 1 38.0 1 0 71.2833 0 \n",
338 | "2 1 3 1 26.0 0 0 7.9250 0 \n",
339 | "3 1 1 1 35.0 1 0 53.1000 0 \n",
340 | "4 0 3 0 35.0 0 0 8.0500 0 \n",
341 | "\n",
342 | " Cabin_Known Embarked_Q Embarked_S \n",
343 | "0 0 0 1 \n",
344 | "1 1 0 0 \n",
345 | "2 0 0 1 \n",
346 | "3 1 0 1 \n",
347 | "4 0 0 1 "
348 | ]
349 | },
350 | "execution_count": 4,
351 | "metadata": {},
352 | "output_type": "execute_result"
353 | }
354 | ],
355 | "source": [
356 | "data.head()"
357 | ]
358 | },
359 | {
360 | "cell_type": "markdown",
361 | "metadata": {},
362 | "source": [
363 | "## Train Test split and Scaling"
364 | ]
365 | },
366 | {
367 | "cell_type": "code",
368 | "execution_count": 5,
369 | "metadata": {},
370 | "outputs": [],
371 | "source": [
372 | "X = data.drop('Survived', axis=1)\n",
373 | "y = data['Survived']\n",
374 | "\n",
375 | "X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=0.8)"
376 | ]
377 | },
378 | {
379 | "cell_type": "code",
380 | "execution_count": 6,
381 | "metadata": {},
382 | "outputs": [],
383 | "source": [
384 | "ss = StandardScaler()\n",
385 | "X_train_scaled = ss.fit_transform(X_train)\n",
386 | "X_test_scaled = ss.transform(X_test)"
387 | ]
388 | },
389 | {
390 | "cell_type": "markdown",
391 | "metadata": {},
392 | "source": [
393 | "# TPOT"
394 | ]
395 | },
396 | {
397 | "cell_type": "code",
398 | "execution_count": 7,
399 | "metadata": {},
400 | "outputs": [
401 | {
402 | "name": "stderr",
403 | "output_type": "stream",
404 | "text": [
405 | "/opt/anaconda3/lib/python3.7/importlib/_bootstrap.py:219: RuntimeWarning: numpy.ufunc size changed, may indicate binary incompatibility. Expected 192 from C header, got 216 from PyObject\n",
406 | " return f(*args, **kwds)\n",
407 | "/opt/anaconda3/lib/python3.7/importlib/_bootstrap.py:219: RuntimeWarning: numpy.ufunc size changed, may indicate binary incompatibility. Expected 192 from C header, got 216 from PyObject\n",
408 | " return f(*args, **kwds)\n",
409 | "/opt/anaconda3/lib/python3.7/importlib/_bootstrap.py:219: RuntimeWarning: numpy.ufunc size changed, may indicate binary incompatibility. Expected 192 from C header, got 216 from PyObject\n",
410 | " return f(*args, **kwds)\n",
411 | "/opt/anaconda3/lib/python3.7/importlib/_bootstrap.py:219: RuntimeWarning: numpy.ufunc size changed, may indicate binary incompatibility. Expected 192 from C header, got 216 from PyObject\n",
412 | " return f(*args, **kwds)\n"
413 | ]
414 | },
415 | {
416 | "data": {
417 | "application/vnd.jupyter.widget-view+json": {
418 | "model_id": "486d08b62e1d41f09461fea3e3eb29ba",
419 | "version_major": 2,
420 | "version_minor": 0
421 | },
422 | "text/plain": [
423 | "HBox(children=(FloatProgress(value=0.0, description='Optimization Progress', style=ProgressStyle(description_w…"
424 | ]
425 | },
426 | "metadata": {},
427 | "output_type": "display_data"
428 | },
429 | {
430 | "name": "stdout",
431 | "output_type": "stream",
432 | "text": [
433 | "\n",
434 | "Generation 1 - Current best internal CV score: 0.8216389244558258\n",
435 | "Generation 2 - Current best internal CV score: 0.8216389244558258\n",
436 | "Generation 3 - Current best internal CV score: 0.8244361272530286\n",
437 | "Generation 4 - Current best internal CV score: 0.8244361272530287\n",
438 | "10.02 minutes have elapsed. TPOT will close down.\n",
439 | "TPOT closed during evaluation in one generation.\n",
440 | "WARNING: TPOT may not provide a good pipeline if TPOT is stopped/interrupted in a early generation.\n",
441 | "\n",
442 | "\n",
443 | "TPOT closed prematurely. Will use the current best pipeline.\n",
444 | "\n",
445 | "Best pipeline: GradientBoostingClassifier(input_matrix, learning_rate=0.1, max_depth=10, max_features=0.55, min_samples_leaf=16, min_samples_split=3, n_estimators=100, subsample=0.6000000000000001)\n"
446 | ]
447 | },
448 | {
449 | "data": {
450 | "text/plain": [
451 | "TPOTClassifier(config_dict=None, crossover_rate=0.1, cv=5,\n",
452 | " disable_update_check=False, early_stop=None, generations=100,\n",
453 | " log_file=,\n",
454 | " max_eval_time_mins=5, max_time_mins=10, memory=None,\n",
455 | " mutation_rate=0.9, n_jobs=1, offspring_size=None,\n",
456 | " periodic_checkpoint_folder=None, population_size=100,\n",
457 | " random_state=None, scoring=None, subsample=1.0, template=None,\n",
458 | " use_dask=False, verbosity=2, warm_start=False)"
459 | ]
460 | },
461 | "execution_count": 7,
462 | "metadata": {},
463 | "output_type": "execute_result"
464 | }
465 | ],
466 | "source": [
467 | "from tpot import TPOTClassifier\n",
468 | "\n",
469 | "tpot = TPOTClassifier(verbosity=2, max_time_mins=10)\n",
470 | "tpot.fit(X_train_scaled, y_train)"
471 | ]
472 | },
473 | {
474 | "cell_type": "code",
475 | "execution_count": null,
476 | "metadata": {},
477 | "outputs": [],
478 | "source": []
479 | },
480 | {
481 | "cell_type": "code",
482 | "execution_count": 8,
483 | "metadata": {},
484 | "outputs": [
485 | {
486 | "data": {
487 | "text/plain": [
488 | "Pipeline(memory=None,\n",
489 | " steps=[('gradientboostingclassifier',\n",
490 | " GradientBoostingClassifier(ccp_alpha=0.0,\n",
491 | " criterion='friedman_mse', init=None,\n",
492 | " learning_rate=0.1, loss='deviance',\n",
493 | " max_depth=10, max_features=0.55,\n",
494 | " max_leaf_nodes=None,\n",
495 | " min_impurity_decrease=0.0,\n",
496 | " min_impurity_split=None,\n",
497 | " min_samples_leaf=16,\n",
498 | " min_samples_split=3,\n",
499 | " min_weight_fraction_leaf=0.0,\n",
500 | " n_estimators=100,\n",
501 | " n_iter_no_change=None,\n",
502 | " presort='deprecated',\n",
503 | " random_state=None,\n",
504 | " subsample=0.6000000000000001,\n",
505 | " tol=0.0001, validation_fraction=0.1,\n",
506 | " verbose=0, warm_start=False))],\n",
507 | " verbose=False)"
508 | ]
509 | },
510 | "execution_count": 8,
511 | "metadata": {},
512 | "output_type": "execute_result"
513 | }
514 | ],
515 | "source": [
516 | "tpot.fitted_pipeline_"
517 | ]
518 | },
519 | {
520 | "cell_type": "code",
521 | "execution_count": 9,
522 | "metadata": {},
523 | "outputs": [
524 | {
525 | "data": {
526 | "text/plain": [
527 | "0.8491620111731844"
528 | ]
529 | },
530 | "execution_count": 9,
531 | "metadata": {},
532 | "output_type": "execute_result"
533 | }
534 | ],
535 | "source": [
536 | "tpot.score(X_test_scaled, y_test)"
537 | ]
538 | }
539 | ],
540 | "metadata": {
541 | "kernelspec": {
542 | "display_name": "Python 3",
543 | "language": "python",
544 | "name": "python3"
545 | },
546 | "language_info": {
547 | "codemirror_mode": {
548 | "name": "ipython",
549 | "version": 3
550 | },
551 | "file_extension": ".py",
552 | "mimetype": "text/x-python",
553 | "name": "python",
554 | "nbconvert_exporter": "python",
555 | "pygments_lexer": "ipython3",
556 | "version": "3.7.6"
557 | }
558 | },
559 | "nbformat": 4,
560 | "nbformat_minor": 4
561 | }
562 |
--------------------------------------------------------------------------------
/0001_RFECV.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "\n",
8 | "

\n",
9 | "
\n",
10 | "\n",
11 | "# Recursive Feature Elimination with Cross-Validation"
12 | ]
13 | },
14 | {
15 | "cell_type": "markdown",
16 | "metadata": {},
17 | "source": [
18 | "## Imports"
19 | ]
20 | },
21 | {
22 | "cell_type": "code",
23 | "execution_count": 2,
24 | "metadata": {},
25 | "outputs": [],
26 | "source": [
27 | "import numpy as np\n",
28 | "import pandas as pd\n",
29 | "import matplotlib.pyplot as plt\n",
30 | "\n",
31 | "from sklearn.model_selection import StratifiedKFold\n",
32 | "from sklearn.feature_selection import RFECV\n",
33 | "from sklearn.ensemble import RandomForestClassifier\n",
34 | "\n",
35 | "import warnings\n",
36 | "warnings.filterwarnings('ignore')"
37 | ]
38 | },
39 | {
40 | "cell_type": "code",
41 | "execution_count": 3,
42 | "metadata": {},
43 | "outputs": [
44 | {
45 | "data": {
46 | "text/html": [
47 | "\n",
48 | "\n",
61 | "
\n",
62 | " \n",
63 | " \n",
64 | " | \n",
65 | " PassengerId | \n",
66 | " Survived | \n",
67 | " Pclass | \n",
68 | " Name | \n",
69 | " Sex | \n",
70 | " Age | \n",
71 | " SibSp | \n",
72 | " Parch | \n",
73 | " Ticket | \n",
74 | " Fare | \n",
75 | " Cabin | \n",
76 | " Embarked | \n",
77 | "
\n",
78 | " \n",
79 | " \n",
80 | " \n",
81 | " 0 | \n",
82 | " 1 | \n",
83 | " 0 | \n",
84 | " 3 | \n",
85 | " Braund, Mr. Owen Harris | \n",
86 | " male | \n",
87 | " 22.0 | \n",
88 | " 1 | \n",
89 | " 0 | \n",
90 | " A/5 21171 | \n",
91 | " 7.2500 | \n",
92 | " NaN | \n",
93 | " S | \n",
94 | "
\n",
95 | " \n",
96 | " 1 | \n",
97 | " 2 | \n",
98 | " 1 | \n",
99 | " 1 | \n",
100 | " Cumings, Mrs. John Bradley (Florence Briggs Th... | \n",
101 | " female | \n",
102 | " 38.0 | \n",
103 | " 1 | \n",
104 | " 0 | \n",
105 | " PC 17599 | \n",
106 | " 71.2833 | \n",
107 | " C85 | \n",
108 | " C | \n",
109 | "
\n",
110 | " \n",
111 | " 2 | \n",
112 | " 3 | \n",
113 | " 1 | \n",
114 | " 3 | \n",
115 | " Heikkinen, Miss. Laina | \n",
116 | " female | \n",
117 | " 26.0 | \n",
118 | " 0 | \n",
119 | " 0 | \n",
120 | " STON/O2. 3101282 | \n",
121 | " 7.9250 | \n",
122 | " NaN | \n",
123 | " S | \n",
124 | "
\n",
125 | " \n",
126 | " 3 | \n",
127 | " 4 | \n",
128 | " 1 | \n",
129 | " 1 | \n",
130 | " Futrelle, Mrs. Jacques Heath (Lily May Peel) | \n",
131 | " female | \n",
132 | " 35.0 | \n",
133 | " 1 | \n",
134 | " 0 | \n",
135 | " 113803 | \n",
136 | " 53.1000 | \n",
137 | " C123 | \n",
138 | " S | \n",
139 | "
\n",
140 | " \n",
141 | " 4 | \n",
142 | " 5 | \n",
143 | " 0 | \n",
144 | " 3 | \n",
145 | " Allen, Mr. William Henry | \n",
146 | " male | \n",
147 | " 35.0 | \n",
148 | " 0 | \n",
149 | " 0 | \n",
150 | " 373450 | \n",
151 | " 8.0500 | \n",
152 | " NaN | \n",
153 | " S | \n",
154 | "
\n",
155 | " \n",
156 | "
\n",
157 | "
"
158 | ],
159 | "text/plain": [
160 | " PassengerId Survived Pclass \\\n",
161 | "0 1 0 3 \n",
162 | "1 2 1 1 \n",
163 | "2 3 1 3 \n",
164 | "3 4 1 1 \n",
165 | "4 5 0 3 \n",
166 | "\n",
167 | " Name Sex Age SibSp \\\n",
168 | "0 Braund, Mr. Owen Harris male 22.0 1 \n",
169 | "1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 \n",
170 | "2 Heikkinen, Miss. Laina female 26.0 0 \n",
171 | "3 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 \n",
172 | "4 Allen, Mr. William Henry male 35.0 0 \n",
173 | "\n",
174 | " Parch Ticket Fare Cabin Embarked \n",
175 | "0 0 A/5 21171 7.2500 NaN S \n",
176 | "1 0 PC 17599 71.2833 C85 C \n",
177 | "2 0 STON/O2. 3101282 7.9250 NaN S \n",
178 | "3 0 113803 53.1000 C123 S \n",
179 | "4 0 373450 8.0500 NaN S "
180 | ]
181 | },
182 | "execution_count": 3,
183 | "metadata": {},
184 | "output_type": "execute_result"
185 | }
186 | ],
187 | "source": [
188 | "data = pd.read_csv('https://raw.githubusercontent.com/datasciencedojo/datasets/master/titanic.csv')\n",
189 | "data.head()"
190 | ]
191 | },
192 | {
193 | "cell_type": "markdown",
194 | "metadata": {},
195 | "source": [
196 | "## Data cleaning and preparation"
197 | ]
198 | },
199 | {
200 | "cell_type": "code",
201 | "execution_count": 4,
202 | "metadata": {},
203 | "outputs": [],
204 | "source": [
205 | "data.drop(['Ticket', 'PassengerId'], axis=1, inplace=True)\n",
206 | "\n",
207 | "gender_mapper = {'male': 0, 'female': 1}\n",
208 | "data['Sex'].replace(gender_mapper, inplace=True)\n",
209 | "\n",
210 | "data['Title'] = data['Name'].apply(lambda x: x.split(',')[1].strip().split(' ')[0])\n",
211 | "data['Title'] = [0 if x in ['Mr.', 'Miss.', 'Mrs.'] else 1 for x in data['Title']]\n",
212 | "data = data.rename(columns={'Title': 'Title_Unusual'})\n",
213 | "data.drop('Name', axis=1, inplace=True)\n",
214 | "\n",
215 | "data['Cabin_Known'] = [0 if str(x) == 'nan' else 1 for x in data['Cabin']]\n",
216 | "data.drop('Cabin', axis=1, inplace=True)\n",
217 | "\n",
218 | "emb_dummies = pd.get_dummies(data['Embarked'], drop_first=True, prefix='Embarked')\n",
219 | "data = pd.concat([data, emb_dummies], axis=1)\n",
220 | "data.drop('Embarked', axis=1, inplace=True)\n",
221 | "\n",
222 | "data['Age'] = data['Age'].fillna(int(data['Age'].mean()))"
223 | ]
224 | },
225 | {
226 | "cell_type": "code",
227 | "execution_count": 5,
228 | "metadata": {},
229 | "outputs": [
230 | {
231 | "data": {
232 | "text/html": [
233 | "\n",
234 | "\n",
247 | "
\n",
248 | " \n",
249 | " \n",
250 | " | \n",
251 | " Survived | \n",
252 | " Pclass | \n",
253 | " Sex | \n",
254 | " Age | \n",
255 | " SibSp | \n",
256 | " Parch | \n",
257 | " Fare | \n",
258 | " Title_Unusual | \n",
259 | " Cabin_Known | \n",
260 | " Embarked_Q | \n",
261 | " Embarked_S | \n",
262 | "
\n",
263 | " \n",
264 | " \n",
265 | " \n",
266 | " 0 | \n",
267 | " 0 | \n",
268 | " 3 | \n",
269 | " 0 | \n",
270 | " 22.0 | \n",
271 | " 1 | \n",
272 | " 0 | \n",
273 | " 7.2500 | \n",
274 | " 0 | \n",
275 | " 0 | \n",
276 | " 0 | \n",
277 | " 1 | \n",
278 | "
\n",
279 | " \n",
280 | " 1 | \n",
281 | " 1 | \n",
282 | " 1 | \n",
283 | " 1 | \n",
284 | " 38.0 | \n",
285 | " 1 | \n",
286 | " 0 | \n",
287 | " 71.2833 | \n",
288 | " 0 | \n",
289 | " 1 | \n",
290 | " 0 | \n",
291 | " 0 | \n",
292 | "
\n",
293 | " \n",
294 | " 2 | \n",
295 | " 1 | \n",
296 | " 3 | \n",
297 | " 1 | \n",
298 | " 26.0 | \n",
299 | " 0 | \n",
300 | " 0 | \n",
301 | " 7.9250 | \n",
302 | " 0 | \n",
303 | " 0 | \n",
304 | " 0 | \n",
305 | " 1 | \n",
306 | "
\n",
307 | " \n",
308 | " 3 | \n",
309 | " 1 | \n",
310 | " 1 | \n",
311 | " 1 | \n",
312 | " 35.0 | \n",
313 | " 1 | \n",
314 | " 0 | \n",
315 | " 53.1000 | \n",
316 | " 0 | \n",
317 | " 1 | \n",
318 | " 0 | \n",
319 | " 1 | \n",
320 | "
\n",
321 | " \n",
322 | " 4 | \n",
323 | " 0 | \n",
324 | " 3 | \n",
325 | " 0 | \n",
326 | " 35.0 | \n",
327 | " 0 | \n",
328 | " 0 | \n",
329 | " 8.0500 | \n",
330 | " 0 | \n",
331 | " 0 | \n",
332 | " 0 | \n",
333 | " 1 | \n",
334 | "
\n",
335 | " \n",
336 | "
\n",
337 | "
"
338 | ],
339 | "text/plain": [
340 | " Survived Pclass Sex Age SibSp Parch Fare Title_Unusual \\\n",
341 | "0 0 3 0 22.0 1 0 7.2500 0 \n",
342 | "1 1 1 1 38.0 1 0 71.2833 0 \n",
343 | "2 1 3 1 26.0 0 0 7.9250 0 \n",
344 | "3 1 1 1 35.0 1 0 53.1000 0 \n",
345 | "4 0 3 0 35.0 0 0 8.0500 0 \n",
346 | "\n",
347 | " Cabin_Known Embarked_Q Embarked_S \n",
348 | "0 0 0 1 \n",
349 | "1 1 0 0 \n",
350 | "2 0 0 1 \n",
351 | "3 1 0 1 \n",
352 | "4 0 0 1 "
353 | ]
354 | },
355 | "execution_count": 5,
356 | "metadata": {},
357 | "output_type": "execute_result"
358 | }
359 | ],
360 | "source": [
361 | "data.head()"
362 | ]
363 | },
364 | {
365 | "cell_type": "markdown",
366 | "metadata": {},
367 | "source": [
368 | "## Remove correlated features "
369 | ]
370 | },
371 | {
372 | "cell_type": "code",
373 | "execution_count": 6,
374 | "metadata": {},
375 | "outputs": [],
376 | "source": [
377 | "correlated_features = set()\n",
378 | "correlation_matrix = data.drop('Survived', axis=1).corr()\n",
379 | "\n",
380 | "for i in range(len(correlation_matrix.columns)):\n",
381 | " for j in range(i):\n",
382 | " if abs(correlation_matrix.iloc[i, j]) > 0.8:\n",
383 | " colname = correlation_matrix.columns[i]\n",
384 | " correlated_features.add(colname)"
385 | ]
386 | },
387 | {
388 | "cell_type": "code",
389 | "execution_count": 7,
390 | "metadata": {},
391 | "outputs": [
392 | {
393 | "data": {
394 | "text/plain": [
395 | "set()"
396 | ]
397 | },
398 | "execution_count": 7,
399 | "metadata": {},
400 | "output_type": "execute_result"
401 | }
402 | ],
403 | "source": [
404 | "correlated_features"
405 | ]
406 | },
407 | {
408 | "cell_type": "markdown",
409 | "metadata": {},
410 | "source": [
411 | "## Running RFECV"
412 | ]
413 | },
414 | {
415 | "cell_type": "code",
416 | "execution_count": 8,
417 | "metadata": {},
418 | "outputs": [
419 | {
420 | "data": {
421 | "text/plain": [
422 | "RFECV(cv=StratifiedKFold(n_splits=10, random_state=None, shuffle=False),\n",
423 | " estimator=RandomForestClassifier(bootstrap=True, ccp_alpha=0.0,\n",
424 | " class_weight=None, criterion='gini',\n",
425 | " max_depth=None, max_features='auto',\n",
426 | " max_leaf_nodes=None, max_samples=None,\n",
427 | " min_impurity_decrease=0.0,\n",
428 | " min_impurity_split=None,\n",
429 | " min_samples_leaf=1, min_samples_split=2,\n",
430 | " min_weight_fraction_leaf=0.0,\n",
431 | " n_estimators=100, n_jobs=None,\n",
432 | " oob_score=False, random_state=101,\n",
433 | " verbose=0, warm_start=False),\n",
434 | " min_features_to_select=1, n_jobs=None, scoring='accuracy', step=1,\n",
435 | " verbose=0)"
436 | ]
437 | },
438 | "execution_count": 8,
439 | "metadata": {},
440 | "output_type": "execute_result"
441 | }
442 | ],
443 | "source": [
444 | "X = data.drop('Survived', axis=1)\n",
445 | "target = data['Survived']\n",
446 | "\n",
447 | "rfc = RandomForestClassifier(random_state=101)\n",
448 | "rfecv = RFECV(estimator=rfc, step=1, cv=StratifiedKFold(10), scoring='accuracy')\n",
449 | "rfecv.fit(X, target)"
450 | ]
451 | },
452 | {
453 | "cell_type": "code",
454 | "execution_count": 9,
455 | "metadata": {},
456 | "outputs": [
457 | {
458 | "name": "stdout",
459 | "output_type": "stream",
460 | "text": [
461 | "Optimal number of features: 4\n"
462 | ]
463 | }
464 | ],
465 | "source": [
466 | "print('Optimal number of features: {}'.format(rfecv.n_features_))"
467 | ]
468 | },
469 | {
470 | "cell_type": "code",
471 | "execution_count": 10,
472 | "metadata": {},
473 | "outputs": [
474 | {
475 | "data": {
476 | "image/png": "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\n",
477 | "text/plain": [
478 | ""
479 | ]
480 | },
481 | "metadata": {
482 | "needs_background": "light"
483 | },
484 | "output_type": "display_data"
485 | }
486 | ],
487 | "source": [
488 | "plt.figure(figsize=(16, 9))\n",
489 | "plt.title('Recursive Feature Elimination with Cross-Validation', fontsize=18, fontweight='bold', pad=20)\n",
490 | "plt.xlabel('Number of features selected', fontsize=14, labelpad=20)\n",
491 | "plt.ylabel('% Correct Classification', fontsize=14, labelpad=20)\n",
492 | "plt.plot(range(1, len(rfecv.grid_scores_) + 1), rfecv.grid_scores_, color='#303F9F', linewidth=3)\n",
493 | "plt.show()"
494 | ]
495 | },
496 | {
497 | "cell_type": "code",
498 | "execution_count": 11,
499 | "metadata": {},
500 | "outputs": [
501 | {
502 | "name": "stdout",
503 | "output_type": "stream",
504 | "text": [
505 | "[3 4 6 7 8 9]\n"
506 | ]
507 | }
508 | ],
509 | "source": [
510 | "print(np.where(rfecv.support_ == False)[0])\n",
511 | "\n",
512 | "X.drop(X.columns[np.where(rfecv.support_ == False)[0]], axis=1, inplace=True)"
513 | ]
514 | },
515 | {
516 | "cell_type": "code",
517 | "execution_count": 12,
518 | "metadata": {},
519 | "outputs": [
520 | {
521 | "data": {
522 | "text/plain": [
523 | "array([0.09550623, 0.27979401, 0.28835754, 0.33634222])"
524 | ]
525 | },
526 | "execution_count": 12,
527 | "metadata": {},
528 | "output_type": "execute_result"
529 | }
530 | ],
531 | "source": [
532 | "rfecv.estimator_.feature_importances_"
533 | ]
534 | },
535 | {
536 | "cell_type": "code",
537 | "execution_count": 13,
538 | "metadata": {},
539 | "outputs": [
540 | {
541 | "data": {
542 | "image/png": "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\n",
543 | "text/plain": [
544 | ""
545 | ]
546 | },
547 | "metadata": {
548 | "needs_background": "light"
549 | },
550 | "output_type": "display_data"
551 | }
552 | ],
553 | "source": [
554 | "dset = pd.DataFrame()\n",
555 | "dset['attr'] = X.columns\n",
556 | "dset['importance'] = rfecv.estimator_.feature_importances_\n",
557 | "dset = dset.sort_values(by='importance', ascending=False)\n",
558 | "\n",
559 | "plt.figure(figsize=(16, 10))\n",
560 | "plt.barh(y=dset['attr'], width=dset['importance'], color='#1976D2')\n",
561 | "plt.title('RFECV - Feature importances', fontsize=20, fontweight='bold', pad=20)\n",
562 | "plt.xlabel('Importance', fontsize=14, labelpad=20)\n",
563 | "plt.show()"
564 | ]
565 | }
566 | ],
567 | "metadata": {
568 | "kernelspec": {
569 | "display_name": "Python 3",
570 | "language": "python",
571 | "name": "python3"
572 | },
573 | "language_info": {
574 | "codemirror_mode": {
575 | "name": "ipython",
576 | "version": 3
577 | },
578 | "file_extension": ".py",
579 | "mimetype": "text/x-python",
580 | "name": "python",
581 | "nbconvert_exporter": "python",
582 | "pygments_lexer": "ipython3",
583 | "version": "3.7.6"
584 | }
585 | },
586 | "nbformat": 4,
587 | "nbformat_minor": 4
588 | }
589 |
--------------------------------------------------------------------------------
/0002_MLDeploy/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/betterdatascience/YouTube/cf24c5cf3192eb7b17c25d94c710d3f941818537/0002_MLDeploy/.DS_Store
--------------------------------------------------------------------------------
/0002_MLDeploy/.ipynb_checkpoints/Test-checkpoint.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [],
3 | "metadata": {},
4 | "nbformat": 4,
5 | "nbformat_minor": 4
6 | }
7 |
--------------------------------------------------------------------------------
/0002_MLDeploy/Test.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "code",
5 | "execution_count": 1,
6 | "metadata": {},
7 | "outputs": [],
8 | "source": [
9 | "import requests"
10 | ]
11 | },
12 | {
13 | "cell_type": "code",
14 | "execution_count": 5,
15 | "metadata": {},
16 | "outputs": [],
17 | "source": [
18 | "res = requests.post(\n",
19 | " url='http://localhost:5000/predict',\n",
20 | " json={\n",
21 | " 'sepal_length': 5.0,\n",
22 | " 'sepal_width': 3.2,\n",
23 | " 'petal_length': 1.5,\n",
24 | " 'petal_width': 0.3\n",
25 | " }\n",
26 | ")"
27 | ]
28 | },
29 | {
30 | "cell_type": "code",
31 | "execution_count": 6,
32 | "metadata": {},
33 | "outputs": [
34 | {
35 | "data": {
36 | "text/plain": [
37 | ""
38 | ]
39 | },
40 | "execution_count": 6,
41 | "metadata": {},
42 | "output_type": "execute_result"
43 | }
44 | ],
45 | "source": [
46 | "res"
47 | ]
48 | },
49 | {
50 | "cell_type": "code",
51 | "execution_count": 8,
52 | "metadata": {},
53 | "outputs": [
54 | {
55 | "data": {
56 | "text/plain": [
57 | "{'Class': 'setosa',\n",
58 | " 'Input': {'PetalLength': 1.5,\n",
59 | " 'PetalWidth': 0.3,\n",
60 | " 'SepalLength': 5.0,\n",
61 | " 'SepalWidth': 3.2}}"
62 | ]
63 | },
64 | "execution_count": 8,
65 | "metadata": {},
66 | "output_type": "execute_result"
67 | }
68 | ],
69 | "source": [
70 | "res.json()"
71 | ]
72 | },
73 | {
74 | "cell_type": "code",
75 | "execution_count": null,
76 | "metadata": {},
77 | "outputs": [],
78 | "source": []
79 | }
80 | ],
81 | "metadata": {
82 | "kernelspec": {
83 | "display_name": "Python 3",
84 | "language": "python",
85 | "name": "python3"
86 | },
87 | "language_info": {
88 | "codemirror_mode": {
89 | "name": "ipython",
90 | "version": 3
91 | },
92 | "file_extension": ".py",
93 | "mimetype": "text/x-python",
94 | "name": "python",
95 | "nbconvert_exporter": "python",
96 | "pygments_lexer": "ipython3",
97 | "version": "3.7.6"
98 | }
99 | },
100 | "nbformat": 4,
101 | "nbformat_minor": 4
102 | }
103 |
--------------------------------------------------------------------------------
/0002_MLDeploy/app.py:
--------------------------------------------------------------------------------
1 | import os
2 | import joblib
3 | from flask import Flask, jsonify, request
4 | from flask_restful import Api, Resource
5 | from modeler.Modeler import Modeler
6 |
7 | app = Flask(__name__)
8 | api = Api(app)
9 |
10 |
11 | class Predict(Resource):
12 | @staticmethod
13 | def post():
14 | data = request.get_json()
15 | sepal_length = data['sepal_length']
16 | sepal_width = data['sepal_width']
17 | petal_length = data['petal_length']
18 | petal_width = data['petal_width']
19 |
20 | m = Modeler()
21 | if not os.path.isfile('models/iris.model'):
22 | m.fit()
23 | prediction = m.predict([sepal_length, sepal_width, petal_length, petal_width])
24 | return jsonify({
25 | 'Input': {
26 | 'SepalLength': sepal_length,
27 | 'SepalWidth': sepal_width,
28 | 'PetalLength': petal_length,
29 | 'PetalWidth': petal_width
30 | },
31 | 'Class': prediction
32 | })
33 |
34 | api.add_resource(Predict, '/predict')
35 |
36 | if __name__ == '__main__':
37 | app.run(debug=True)
--------------------------------------------------------------------------------
/0002_MLDeploy/modeler/.ipynb_checkpoints/Modeler-checkpoint.py:
--------------------------------------------------------------------------------
1 | import os
2 | import joblib
3 | import pandas as pd
4 | from sklearn.tree import DecisionTreeClassifier
5 |
6 |
7 | class Modeler:
8 | def __init__(self):
9 | self.df = pd.read_csv('https://raw.githubusercontent.com/uiuc-cse/data-fa14/gh-pages/data/iris.csv')
10 | try: self.model = joblib.load('models/iris.model')
11 | except: self.model = None
12 |
13 | def fit(self):
14 | X = self.df.drop('species', axis=1)
15 | y = self.df['species']
16 | self.model = DecisionTreeClassifier().fit(X, y)
17 | joblib.dump(self.model, 'models/iris.model')
18 |
19 | def predict(self, measurement):
20 | if not os.path.exists('models/iris.model'):
21 | raise Exception('Model not trained yet. Call .fit() before making predictions')
22 | if len(measurement) != 4:
23 | raise Exception(f'Expected sepal_length, sepal_width, petal_length, petal_width, but got {measurement}')
24 | prediction = self.model.predict([measurement])
25 | return prediction[0]
--------------------------------------------------------------------------------
/0002_MLDeploy/modeler/Modeler.py:
--------------------------------------------------------------------------------
1 | import os
2 | import joblib
3 | import pandas as pd
4 | from sklearn.tree import DecisionTreeClassifier
5 |
6 |
7 | class Modeler:
8 | def __init__(self):
9 | self.df = pd.read_csv('https://raw.githubusercontent.com/uiuc-cse/data-fa14/gh-pages/data/iris.csv')
10 | try: self.model = joblib.load('models/iris.model')
11 | except: self.model = None
12 |
13 | def fit(self):
14 | X = self.df.drop('species', axis=1)
15 | y = self.df['species']
16 | self.model = DecisionTreeClassifier().fit(X, y)
17 | joblib.dump(self.model, 'models/iris.model')
18 |
19 | def predict(self, measurement):
20 | if not os.path.exists('models/iris.model'):
21 | raise Exception('Model not trained yet. Call .fit() before making predictions')
22 | if len(measurement) != 4:
23 | raise Exception(f'Expected sepal_length, sepal_width, petal_length, petal_width, but got {measurement}')
24 | prediction = self.model.predict([measurement])
25 | return prediction[0]
--------------------------------------------------------------------------------
/0002_MLDeploy/modeler/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/betterdatascience/YouTube/cf24c5cf3192eb7b17c25d94c710d3f941818537/0002_MLDeploy/modeler/__init__.py
--------------------------------------------------------------------------------
/0002_MLDeploy/modeler/__pycache__/Modeler.cpython-37.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/betterdatascience/YouTube/cf24c5cf3192eb7b17c25d94c710d3f941818537/0002_MLDeploy/modeler/__pycache__/Modeler.cpython-37.pyc
--------------------------------------------------------------------------------
/0002_MLDeploy/modeler/__pycache__/__init__.cpython-37.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/betterdatascience/YouTube/cf24c5cf3192eb7b17c25d94c710d3f941818537/0002_MLDeploy/modeler/__pycache__/__init__.cpython-37.pyc
--------------------------------------------------------------------------------
/0002_MLDeploy/models/iris.model:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/betterdatascience/YouTube/cf24c5cf3192eb7b17c25d94c710d3f941818537/0002_MLDeploy/models/iris.model
--------------------------------------------------------------------------------
/0003_Top3PandasFunctions.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "\n",
8 | "

\n",
9 | "
\n",
10 | "\n",
11 | "# Top 3 Pandas Functions"
12 | ]
13 | },
14 | {
15 | "cell_type": "code",
16 | "execution_count": 1,
17 | "metadata": {},
18 | "outputs": [],
19 | "source": [
20 | "import pandas as pd"
21 | ]
22 | },
23 | {
24 | "cell_type": "code",
25 | "execution_count": 2,
26 | "metadata": {},
27 | "outputs": [
28 | {
29 | "data": {
30 | "text/html": [
31 | "\n",
32 | "\n",
45 | "
\n",
46 | " \n",
47 | " \n",
48 | " | \n",
49 | " PassengerId | \n",
50 | " Survived | \n",
51 | " Pclass | \n",
52 | " Name | \n",
53 | " Sex | \n",
54 | " Age | \n",
55 | " SibSp | \n",
56 | " Parch | \n",
57 | " Ticket | \n",
58 | " Fare | \n",
59 | " Cabin | \n",
60 | " Embarked | \n",
61 | "
\n",
62 | " \n",
63 | " \n",
64 | " \n",
65 | " 0 | \n",
66 | " 1 | \n",
67 | " 0 | \n",
68 | " 3 | \n",
69 | " Braund, Mr. Owen Harris | \n",
70 | " male | \n",
71 | " 22.0 | \n",
72 | " 1 | \n",
73 | " 0 | \n",
74 | " A/5 21171 | \n",
75 | " 7.2500 | \n",
76 | " NaN | \n",
77 | " S | \n",
78 | "
\n",
79 | " \n",
80 | " 1 | \n",
81 | " 2 | \n",
82 | " 1 | \n",
83 | " 1 | \n",
84 | " Cumings, Mrs. John Bradley (Florence Briggs Th... | \n",
85 | " female | \n",
86 | " 38.0 | \n",
87 | " 1 | \n",
88 | " 0 | \n",
89 | " PC 17599 | \n",
90 | " 71.2833 | \n",
91 | " C85 | \n",
92 | " C | \n",
93 | "
\n",
94 | " \n",
95 | " 2 | \n",
96 | " 3 | \n",
97 | " 1 | \n",
98 | " 3 | \n",
99 | " Heikkinen, Miss. Laina | \n",
100 | " female | \n",
101 | " 26.0 | \n",
102 | " 0 | \n",
103 | " 0 | \n",
104 | " STON/O2. 3101282 | \n",
105 | " 7.9250 | \n",
106 | " NaN | \n",
107 | " S | \n",
108 | "
\n",
109 | " \n",
110 | " 3 | \n",
111 | " 4 | \n",
112 | " 1 | \n",
113 | " 1 | \n",
114 | " Futrelle, Mrs. Jacques Heath (Lily May Peel) | \n",
115 | " female | \n",
116 | " 35.0 | \n",
117 | " 1 | \n",
118 | " 0 | \n",
119 | " 113803 | \n",
120 | " 53.1000 | \n",
121 | " C123 | \n",
122 | " S | \n",
123 | "
\n",
124 | " \n",
125 | " 4 | \n",
126 | " 5 | \n",
127 | " 0 | \n",
128 | " 3 | \n",
129 | " Allen, Mr. William Henry | \n",
130 | " male | \n",
131 | " 35.0 | \n",
132 | " 0 | \n",
133 | " 0 | \n",
134 | " 373450 | \n",
135 | " 8.0500 | \n",
136 | " NaN | \n",
137 | " S | \n",
138 | "
\n",
139 | " \n",
140 | "
\n",
141 | "
"
142 | ],
143 | "text/plain": [
144 | " PassengerId Survived Pclass \\\n",
145 | "0 1 0 3 \n",
146 | "1 2 1 1 \n",
147 | "2 3 1 3 \n",
148 | "3 4 1 1 \n",
149 | "4 5 0 3 \n",
150 | "\n",
151 | " Name Sex Age SibSp \\\n",
152 | "0 Braund, Mr. Owen Harris male 22.0 1 \n",
153 | "1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 \n",
154 | "2 Heikkinen, Miss. Laina female 26.0 0 \n",
155 | "3 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 \n",
156 | "4 Allen, Mr. William Henry male 35.0 0 \n",
157 | "\n",
158 | " Parch Ticket Fare Cabin Embarked \n",
159 | "0 0 A/5 21171 7.2500 NaN S \n",
160 | "1 0 PC 17599 71.2833 C85 C \n",
161 | "2 0 STON/O2. 3101282 7.9250 NaN S \n",
162 | "3 0 113803 53.1000 C123 S \n",
163 | "4 0 373450 8.0500 NaN S "
164 | ]
165 | },
166 | "execution_count": 2,
167 | "metadata": {},
168 | "output_type": "execute_result"
169 | }
170 | ],
171 | "source": [
172 | "df = pd.read_csv('https://raw.githubusercontent.com/datasciencedojo/datasets/master/titanic.csv')\n",
173 | "df.head()"
174 | ]
175 | },
176 | {
177 | "cell_type": "markdown",
178 | "metadata": {},
179 | "source": [
180 | "# 1. apply()"
181 | ]
182 | },
183 | {
184 | "cell_type": "code",
185 | "execution_count": 3,
186 | "metadata": {},
187 | "outputs": [],
188 | "source": [
189 | "def extract_title(string):\n",
190 | " string = string.split(',')[-1]\n",
191 | " string = string.strip()\n",
192 | " string = string.split('.')[0]\n",
193 | " return string"
194 | ]
195 | },
196 | {
197 | "cell_type": "code",
198 | "execution_count": 4,
199 | "metadata": {},
200 | "outputs": [
201 | {
202 | "data": {
203 | "text/plain": [
204 | "0 Mr\n",
205 | "1 Mrs\n",
206 | "2 Miss\n",
207 | "3 Mrs\n",
208 | "4 Mr\n",
209 | "Name: Name, dtype: object"
210 | ]
211 | },
212 | "execution_count": 4,
213 | "metadata": {},
214 | "output_type": "execute_result"
215 | }
216 | ],
217 | "source": [
218 | "titles = df['Name'].apply(extract_title)\n",
219 | "titles[:5]"
220 | ]
221 | },
222 | {
223 | "cell_type": "code",
224 | "execution_count": 5,
225 | "metadata": {},
226 | "outputs": [
227 | {
228 | "data": {
229 | "text/plain": [
230 | "0 Mr\n",
231 | "1 Mrs\n",
232 | "2 Miss\n",
233 | "3 Mrs\n",
234 | "4 Mr\n",
235 | "Name: Name, dtype: object"
236 | ]
237 | },
238 | "execution_count": 5,
239 | "metadata": {},
240 | "output_type": "execute_result"
241 | }
242 | ],
243 | "source": [
244 | "titles = df['Name'].apply(lambda x: x.split(',')[-1].strip().split('.')[0])\n",
245 | "titles[:5]"
246 | ]
247 | },
248 | {
249 | "cell_type": "markdown",
250 | "metadata": {},
251 | "source": [
252 | "# 2. value_counts()"
253 | ]
254 | },
255 | {
256 | "cell_type": "code",
257 | "execution_count": 6,
258 | "metadata": {},
259 | "outputs": [
260 | {
261 | "data": {
262 | "text/plain": [
263 | "Mr 517\n",
264 | "Miss 182\n",
265 | "Mrs 125\n",
266 | "Master 40\n",
267 | "Dr 7\n",
268 | "Rev 6\n",
269 | "Mlle 2\n",
270 | "Col 2\n",
271 | "Major 2\n",
272 | "Mme 1\n",
273 | "Jonkheer 1\n",
274 | "Sir 1\n",
275 | "Lady 1\n",
276 | "Don 1\n",
277 | "the Countess 1\n",
278 | "Capt 1\n",
279 | "Ms 1\n",
280 | "Name: Name, dtype: int64"
281 | ]
282 | },
283 | "execution_count": 6,
284 | "metadata": {},
285 | "output_type": "execute_result"
286 | }
287 | ],
288 | "source": [
289 | "titles.value_counts()"
290 | ]
291 | },
292 | {
293 | "cell_type": "code",
294 | "execution_count": 8,
295 | "metadata": {},
296 | "outputs": [
297 | {
298 | "data": {
299 | "text/plain": [
300 | "Mr 58.024691\n",
301 | "Miss 20.426487\n",
302 | "Mrs 14.029181\n",
303 | "Master 4.489338\n",
304 | "Dr 0.785634\n",
305 | "Rev 0.673401\n",
306 | "Mlle 0.224467\n",
307 | "Col 0.224467\n",
308 | "Major 0.224467\n",
309 | "Mme 0.112233\n",
310 | "Jonkheer 0.112233\n",
311 | "Sir 0.112233\n",
312 | "Lady 0.112233\n",
313 | "Don 0.112233\n",
314 | "the Countess 0.112233\n",
315 | "Capt 0.112233\n",
316 | "Ms 0.112233\n",
317 | "Name: Name, dtype: float64"
318 | ]
319 | },
320 | "execution_count": 8,
321 | "metadata": {},
322 | "output_type": "execute_result"
323 | }
324 | ],
325 | "source": [
326 | "titles.value_counts(normalize=True) * 100"
327 | ]
328 | },
329 | {
330 | "cell_type": "markdown",
331 | "metadata": {},
332 | "source": [
333 | "# 3. get_dummies()"
334 | ]
335 | },
336 | {
337 | "cell_type": "code",
338 | "execution_count": 9,
339 | "metadata": {},
340 | "outputs": [
341 | {
342 | "data": {
343 | "text/html": [
344 | "\n",
345 | "\n",
358 | "
\n",
359 | " \n",
360 | " \n",
361 | " | \n",
362 | " C | \n",
363 | " Q | \n",
364 | " S | \n",
365 | "
\n",
366 | " \n",
367 | " \n",
368 | " \n",
369 | " 0 | \n",
370 | " 0 | \n",
371 | " 0 | \n",
372 | " 1 | \n",
373 | "
\n",
374 | " \n",
375 | " 1 | \n",
376 | " 1 | \n",
377 | " 0 | \n",
378 | " 0 | \n",
379 | "
\n",
380 | " \n",
381 | " 2 | \n",
382 | " 0 | \n",
383 | " 0 | \n",
384 | " 1 | \n",
385 | "
\n",
386 | " \n",
387 | " 3 | \n",
388 | " 0 | \n",
389 | " 0 | \n",
390 | " 1 | \n",
391 | "
\n",
392 | " \n",
393 | " 4 | \n",
394 | " 0 | \n",
395 | " 0 | \n",
396 | " 1 | \n",
397 | "
\n",
398 | " \n",
399 | "
\n",
400 | "
"
401 | ],
402 | "text/plain": [
403 | " C Q S\n",
404 | "0 0 0 1\n",
405 | "1 1 0 0\n",
406 | "2 0 0 1\n",
407 | "3 0 0 1\n",
408 | "4 0 0 1"
409 | ]
410 | },
411 | "execution_count": 9,
412 | "metadata": {},
413 | "output_type": "execute_result"
414 | }
415 | ],
416 | "source": [
417 | "emb = pd.get_dummies(df['Embarked'])\n",
418 | "emb.head()"
419 | ]
420 | },
421 | {
422 | "cell_type": "code",
423 | "execution_count": 10,
424 | "metadata": {},
425 | "outputs": [
426 | {
427 | "data": {
428 | "text/html": [
429 | "\n",
430 | "\n",
443 | "
\n",
444 | " \n",
445 | " \n",
446 | " | \n",
447 | " Embarked_C | \n",
448 | " Embarked_Q | \n",
449 | " Embarked_S | \n",
450 | "
\n",
451 | " \n",
452 | " \n",
453 | " \n",
454 | " 0 | \n",
455 | " 0 | \n",
456 | " 0 | \n",
457 | " 1 | \n",
458 | "
\n",
459 | " \n",
460 | " 1 | \n",
461 | " 1 | \n",
462 | " 0 | \n",
463 | " 0 | \n",
464 | "
\n",
465 | " \n",
466 | " 2 | \n",
467 | " 0 | \n",
468 | " 0 | \n",
469 | " 1 | \n",
470 | "
\n",
471 | " \n",
472 | " 3 | \n",
473 | " 0 | \n",
474 | " 0 | \n",
475 | " 1 | \n",
476 | "
\n",
477 | " \n",
478 | " 4 | \n",
479 | " 0 | \n",
480 | " 0 | \n",
481 | " 1 | \n",
482 | "
\n",
483 | " \n",
484 | "
\n",
485 | "
"
486 | ],
487 | "text/plain": [
488 | " Embarked_C Embarked_Q Embarked_S\n",
489 | "0 0 0 1\n",
490 | "1 1 0 0\n",
491 | "2 0 0 1\n",
492 | "3 0 0 1\n",
493 | "4 0 0 1"
494 | ]
495 | },
496 | "execution_count": 10,
497 | "metadata": {},
498 | "output_type": "execute_result"
499 | }
500 | ],
501 | "source": [
502 | "emb = pd.get_dummies(df['Embarked'], prefix='Embarked')\n",
503 | "emb.head()"
504 | ]
505 | },
506 | {
507 | "cell_type": "code",
508 | "execution_count": 11,
509 | "metadata": {},
510 | "outputs": [
511 | {
512 | "data": {
513 | "text/html": [
514 | "\n",
515 | "\n",
528 | "
\n",
529 | " \n",
530 | " \n",
531 | " | \n",
532 | " Embarked_Q | \n",
533 | " Embarked_S | \n",
534 | "
\n",
535 | " \n",
536 | " \n",
537 | " \n",
538 | " 0 | \n",
539 | " 0 | \n",
540 | " 1 | \n",
541 | "
\n",
542 | " \n",
543 | " 1 | \n",
544 | " 0 | \n",
545 | " 0 | \n",
546 | "
\n",
547 | " \n",
548 | " 2 | \n",
549 | " 0 | \n",
550 | " 1 | \n",
551 | "
\n",
552 | " \n",
553 | " 3 | \n",
554 | " 0 | \n",
555 | " 1 | \n",
556 | "
\n",
557 | " \n",
558 | " 4 | \n",
559 | " 0 | \n",
560 | " 1 | \n",
561 | "
\n",
562 | " \n",
563 | "
\n",
564 | "
"
565 | ],
566 | "text/plain": [
567 | " Embarked_Q Embarked_S\n",
568 | "0 0 1\n",
569 | "1 0 0\n",
570 | "2 0 1\n",
571 | "3 0 1\n",
572 | "4 0 1"
573 | ]
574 | },
575 | "execution_count": 11,
576 | "metadata": {},
577 | "output_type": "execute_result"
578 | }
579 | ],
580 | "source": [
581 | "emb = pd.get_dummies(df['Embarked'], prefix='Embarked', drop_first=True)\n",
582 | "emb.head()"
583 | ]
584 | }
585 | ],
586 | "metadata": {
587 | "kernelspec": {
588 | "display_name": "Python 3",
589 | "language": "python",
590 | "name": "python3"
591 | },
592 | "language_info": {
593 | "codemirror_mode": {
594 | "name": "ipython",
595 | "version": 3
596 | },
597 | "file_extension": ".py",
598 | "mimetype": "text/x-python",
599 | "name": "python",
600 | "nbconvert_exporter": "python",
601 | "pygments_lexer": "ipython3",
602 | "version": "3.7.6"
603 | }
604 | },
605 | "nbformat": 4,
606 | "nbformat_minor": 4
607 | }
608 |
--------------------------------------------------------------------------------
/0004_TPOT.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "\n",
8 | "

\n",
9 | "
\n",
10 | "\n",
11 | "# TPOT"
12 | ]
13 | },
14 | {
15 | "cell_type": "code",
16 | "execution_count": 1,
17 | "metadata": {},
18 | "outputs": [
19 | {
20 | "name": "stderr",
21 | "output_type": "stream",
22 | "text": [
23 | "/opt/anaconda3/lib/python3.7/importlib/_bootstrap.py:219: RuntimeWarning: numpy.ufunc size changed, may indicate binary incompatibility. Expected 192 from C header, got 216 from PyObject\n",
24 | " return f(*args, **kwds)\n"
25 | ]
26 | }
27 | ],
28 | "source": [
29 | "import pandas as pd\n",
30 | "from sklearn.preprocessing import StandardScaler\n",
31 | "from sklearn.model_selection import train_test_split"
32 | ]
33 | },
34 | {
35 | "cell_type": "code",
36 | "execution_count": 2,
37 | "metadata": {},
38 | "outputs": [
39 | {
40 | "data": {
41 | "text/html": [
42 | "\n",
43 | "\n",
56 | "
\n",
57 | " \n",
58 | " \n",
59 | " | \n",
60 | " PassengerId | \n",
61 | " Survived | \n",
62 | " Pclass | \n",
63 | " Name | \n",
64 | " Sex | \n",
65 | " Age | \n",
66 | " SibSp | \n",
67 | " Parch | \n",
68 | " Ticket | \n",
69 | " Fare | \n",
70 | " Cabin | \n",
71 | " Embarked | \n",
72 | "
\n",
73 | " \n",
74 | " \n",
75 | " \n",
76 | " 0 | \n",
77 | " 1 | \n",
78 | " 0 | \n",
79 | " 3 | \n",
80 | " Braund, Mr. Owen Harris | \n",
81 | " male | \n",
82 | " 22.0 | \n",
83 | " 1 | \n",
84 | " 0 | \n",
85 | " A/5 21171 | \n",
86 | " 7.2500 | \n",
87 | " NaN | \n",
88 | " S | \n",
89 | "
\n",
90 | " \n",
91 | " 1 | \n",
92 | " 2 | \n",
93 | " 1 | \n",
94 | " 1 | \n",
95 | " Cumings, Mrs. John Bradley (Florence Briggs Th... | \n",
96 | " female | \n",
97 | " 38.0 | \n",
98 | " 1 | \n",
99 | " 0 | \n",
100 | " PC 17599 | \n",
101 | " 71.2833 | \n",
102 | " C85 | \n",
103 | " C | \n",
104 | "
\n",
105 | " \n",
106 | " 2 | \n",
107 | " 3 | \n",
108 | " 1 | \n",
109 | " 3 | \n",
110 | " Heikkinen, Miss. Laina | \n",
111 | " female | \n",
112 | " 26.0 | \n",
113 | " 0 | \n",
114 | " 0 | \n",
115 | " STON/O2. 3101282 | \n",
116 | " 7.9250 | \n",
117 | " NaN | \n",
118 | " S | \n",
119 | "
\n",
120 | " \n",
121 | " 3 | \n",
122 | " 4 | \n",
123 | " 1 | \n",
124 | " 1 | \n",
125 | " Futrelle, Mrs. Jacques Heath (Lily May Peel) | \n",
126 | " female | \n",
127 | " 35.0 | \n",
128 | " 1 | \n",
129 | " 0 | \n",
130 | " 113803 | \n",
131 | " 53.1000 | \n",
132 | " C123 | \n",
133 | " S | \n",
134 | "
\n",
135 | " \n",
136 | " 4 | \n",
137 | " 5 | \n",
138 | " 0 | \n",
139 | " 3 | \n",
140 | " Allen, Mr. William Henry | \n",
141 | " male | \n",
142 | " 35.0 | \n",
143 | " 0 | \n",
144 | " 0 | \n",
145 | " 373450 | \n",
146 | " 8.0500 | \n",
147 | " NaN | \n",
148 | " S | \n",
149 | "
\n",
150 | " \n",
151 | "
\n",
152 | "
"
153 | ],
154 | "text/plain": [
155 | " PassengerId Survived Pclass \\\n",
156 | "0 1 0 3 \n",
157 | "1 2 1 1 \n",
158 | "2 3 1 3 \n",
159 | "3 4 1 1 \n",
160 | "4 5 0 3 \n",
161 | "\n",
162 | " Name Sex Age SibSp \\\n",
163 | "0 Braund, Mr. Owen Harris male 22.0 1 \n",
164 | "1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 \n",
165 | "2 Heikkinen, Miss. Laina female 26.0 0 \n",
166 | "3 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 \n",
167 | "4 Allen, Mr. William Henry male 35.0 0 \n",
168 | "\n",
169 | " Parch Ticket Fare Cabin Embarked \n",
170 | "0 0 A/5 21171 7.2500 NaN S \n",
171 | "1 0 PC 17599 71.2833 C85 C \n",
172 | "2 0 STON/O2. 3101282 7.9250 NaN S \n",
173 | "3 0 113803 53.1000 C123 S \n",
174 | "4 0 373450 8.0500 NaN S "
175 | ]
176 | },
177 | "execution_count": 2,
178 | "metadata": {},
179 | "output_type": "execute_result"
180 | }
181 | ],
182 | "source": [
183 | "data = pd.read_csv('https://raw.githubusercontent.com/datasciencedojo/datasets/master/titanic.csv')\n",
184 | "data.head()"
185 | ]
186 | },
187 | {
188 | "cell_type": "markdown",
189 | "metadata": {},
190 | "source": [
191 | "## Data preparation"
192 | ]
193 | },
194 | {
195 | "cell_type": "code",
196 | "execution_count": 3,
197 | "metadata": {},
198 | "outputs": [],
199 | "source": [
200 | "data.drop(['Ticket', 'PassengerId'], axis=1, inplace=True)\n",
201 | "\n",
202 | "gender_mapper = {'male': 0, 'female': 1}\n",
203 | "data['Sex'].replace(gender_mapper, inplace=True)\n",
204 | "\n",
205 | "data['Title'] = data['Name'].apply(lambda x: x.split(',')[1].strip().split(' ')[0])\n",
206 | "data['Title'] = [0 if x in ['Mr.', 'Miss.', 'Mrs.'] else 1 for x in data['Title']]\n",
207 | "data = data.rename(columns={'Title': 'Title_Unusual'})\n",
208 | "data.drop('Name', axis=1, inplace=True)\n",
209 | "\n",
210 | "data['Cabin_Known'] = [0 if str(x) == 'nan' else 1 for x in data['Cabin']]\n",
211 | "data.drop('Cabin', axis=1, inplace=True)\n",
212 | "\n",
213 | "emb_dummies = pd.get_dummies(data['Embarked'], drop_first=True, prefix='Embarked')\n",
214 | "data = pd.concat([data, emb_dummies], axis=1)\n",
215 | "data.drop('Embarked', axis=1, inplace=True)\n",
216 | "\n",
217 | "data['Age'] = data['Age'].fillna(int(data['Age'].mean()))"
218 | ]
219 | },
220 | {
221 | "cell_type": "code",
222 | "execution_count": 4,
223 | "metadata": {},
224 | "outputs": [
225 | {
226 | "data": {
227 | "text/html": [
228 | "\n",
229 | "\n",
242 | "
\n",
243 | " \n",
244 | " \n",
245 | " | \n",
246 | " Survived | \n",
247 | " Pclass | \n",
248 | " Sex | \n",
249 | " Age | \n",
250 | " SibSp | \n",
251 | " Parch | \n",
252 | " Fare | \n",
253 | " Title_Unusual | \n",
254 | " Cabin_Known | \n",
255 | " Embarked_Q | \n",
256 | " Embarked_S | \n",
257 | "
\n",
258 | " \n",
259 | " \n",
260 | " \n",
261 | " 0 | \n",
262 | " 0 | \n",
263 | " 3 | \n",
264 | " 0 | \n",
265 | " 22.0 | \n",
266 | " 1 | \n",
267 | " 0 | \n",
268 | " 7.2500 | \n",
269 | " 0 | \n",
270 | " 0 | \n",
271 | " 0 | \n",
272 | " 1 | \n",
273 | "
\n",
274 | " \n",
275 | " 1 | \n",
276 | " 1 | \n",
277 | " 1 | \n",
278 | " 1 | \n",
279 | " 38.0 | \n",
280 | " 1 | \n",
281 | " 0 | \n",
282 | " 71.2833 | \n",
283 | " 0 | \n",
284 | " 1 | \n",
285 | " 0 | \n",
286 | " 0 | \n",
287 | "
\n",
288 | " \n",
289 | " 2 | \n",
290 | " 1 | \n",
291 | " 3 | \n",
292 | " 1 | \n",
293 | " 26.0 | \n",
294 | " 0 | \n",
295 | " 0 | \n",
296 | " 7.9250 | \n",
297 | " 0 | \n",
298 | " 0 | \n",
299 | " 0 | \n",
300 | " 1 | \n",
301 | "
\n",
302 | " \n",
303 | " 3 | \n",
304 | " 1 | \n",
305 | " 1 | \n",
306 | " 1 | \n",
307 | " 35.0 | \n",
308 | " 1 | \n",
309 | " 0 | \n",
310 | " 53.1000 | \n",
311 | " 0 | \n",
312 | " 1 | \n",
313 | " 0 | \n",
314 | " 1 | \n",
315 | "
\n",
316 | " \n",
317 | " 4 | \n",
318 | " 0 | \n",
319 | " 3 | \n",
320 | " 0 | \n",
321 | " 35.0 | \n",
322 | " 0 | \n",
323 | " 0 | \n",
324 | " 8.0500 | \n",
325 | " 0 | \n",
326 | " 0 | \n",
327 | " 0 | \n",
328 | " 1 | \n",
329 | "
\n",
330 | " \n",
331 | "
\n",
332 | "
"
333 | ],
334 | "text/plain": [
335 | " Survived Pclass Sex Age SibSp Parch Fare Title_Unusual \\\n",
336 | "0 0 3 0 22.0 1 0 7.2500 0 \n",
337 | "1 1 1 1 38.0 1 0 71.2833 0 \n",
338 | "2 1 3 1 26.0 0 0 7.9250 0 \n",
339 | "3 1 1 1 35.0 1 0 53.1000 0 \n",
340 | "4 0 3 0 35.0 0 0 8.0500 0 \n",
341 | "\n",
342 | " Cabin_Known Embarked_Q Embarked_S \n",
343 | "0 0 0 1 \n",
344 | "1 1 0 0 \n",
345 | "2 0 0 1 \n",
346 | "3 1 0 1 \n",
347 | "4 0 0 1 "
348 | ]
349 | },
350 | "execution_count": 4,
351 | "metadata": {},
352 | "output_type": "execute_result"
353 | }
354 | ],
355 | "source": [
356 | "data.head()"
357 | ]
358 | },
359 | {
360 | "cell_type": "markdown",
361 | "metadata": {},
362 | "source": [
363 | "## Train Test split and Scaling"
364 | ]
365 | },
366 | {
367 | "cell_type": "code",
368 | "execution_count": 5,
369 | "metadata": {},
370 | "outputs": [],
371 | "source": [
372 | "X = data.drop('Survived', axis=1)\n",
373 | "y = data['Survived']\n",
374 | "\n",
375 | "X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=0.8)"
376 | ]
377 | },
378 | {
379 | "cell_type": "code",
380 | "execution_count": 6,
381 | "metadata": {},
382 | "outputs": [],
383 | "source": [
384 | "ss = StandardScaler()\n",
385 | "X_train_scaled = ss.fit_transform(X_train)\n",
386 | "X_test_scaled = ss.transform(X_test)"
387 | ]
388 | },
389 | {
390 | "cell_type": "markdown",
391 | "metadata": {},
392 | "source": [
393 | "# TPOT"
394 | ]
395 | },
396 | {
397 | "cell_type": "code",
398 | "execution_count": 7,
399 | "metadata": {},
400 | "outputs": [
401 | {
402 | "name": "stderr",
403 | "output_type": "stream",
404 | "text": [
405 | "/opt/anaconda3/lib/python3.7/importlib/_bootstrap.py:219: RuntimeWarning: numpy.ufunc size changed, may indicate binary incompatibility. Expected 192 from C header, got 216 from PyObject\n",
406 | " return f(*args, **kwds)\n",
407 | "/opt/anaconda3/lib/python3.7/importlib/_bootstrap.py:219: RuntimeWarning: numpy.ufunc size changed, may indicate binary incompatibility. Expected 192 from C header, got 216 from PyObject\n",
408 | " return f(*args, **kwds)\n",
409 | "/opt/anaconda3/lib/python3.7/importlib/_bootstrap.py:219: RuntimeWarning: numpy.ufunc size changed, may indicate binary incompatibility. Expected 192 from C header, got 216 from PyObject\n",
410 | " return f(*args, **kwds)\n",
411 | "/opt/anaconda3/lib/python3.7/importlib/_bootstrap.py:219: RuntimeWarning: numpy.ufunc size changed, may indicate binary incompatibility. Expected 192 from C header, got 216 from PyObject\n",
412 | " return f(*args, **kwds)\n"
413 | ]
414 | },
415 | {
416 | "data": {
417 | "application/vnd.jupyter.widget-view+json": {
418 | "model_id": "486d08b62e1d41f09461fea3e3eb29ba",
419 | "version_major": 2,
420 | "version_minor": 0
421 | },
422 | "text/plain": [
423 | "HBox(children=(FloatProgress(value=0.0, description='Optimization Progress', style=ProgressStyle(description_w…"
424 | ]
425 | },
426 | "metadata": {},
427 | "output_type": "display_data"
428 | },
429 | {
430 | "name": "stdout",
431 | "output_type": "stream",
432 | "text": [
433 | "\n",
434 | "Generation 1 - Current best internal CV score: 0.8216389244558258\n",
435 | "Generation 2 - Current best internal CV score: 0.8216389244558258\n",
436 | "Generation 3 - Current best internal CV score: 0.8244361272530286\n",
437 | "Generation 4 - Current best internal CV score: 0.8244361272530287\n",
438 | "10.02 minutes have elapsed. TPOT will close down.\n",
439 | "TPOT closed during evaluation in one generation.\n",
440 | "WARNING: TPOT may not provide a good pipeline if TPOT is stopped/interrupted in a early generation.\n",
441 | "\n",
442 | "\n",
443 | "TPOT closed prematurely. Will use the current best pipeline.\n",
444 | "\n",
445 | "Best pipeline: GradientBoostingClassifier(input_matrix, learning_rate=0.1, max_depth=10, max_features=0.55, min_samples_leaf=16, min_samples_split=3, n_estimators=100, subsample=0.6000000000000001)\n"
446 | ]
447 | },
448 | {
449 | "data": {
450 | "text/plain": [
451 | "TPOTClassifier(config_dict=None, crossover_rate=0.1, cv=5,\n",
452 | " disable_update_check=False, early_stop=None, generations=100,\n",
453 | " log_file=,\n",
454 | " max_eval_time_mins=5, max_time_mins=10, memory=None,\n",
455 | " mutation_rate=0.9, n_jobs=1, offspring_size=None,\n",
456 | " periodic_checkpoint_folder=None, population_size=100,\n",
457 | " random_state=None, scoring=None, subsample=1.0, template=None,\n",
458 | " use_dask=False, verbosity=2, warm_start=False)"
459 | ]
460 | },
461 | "execution_count": 7,
462 | "metadata": {},
463 | "output_type": "execute_result"
464 | }
465 | ],
466 | "source": [
467 | "from tpot import TPOTClassifier\n",
468 | "\n",
469 | "tpot = TPOTClassifier(verbosity=2, max_time_mins=10)\n",
470 | "tpot.fit(X_train_scaled, y_train)"
471 | ]
472 | },
473 | {
474 | "cell_type": "code",
475 | "execution_count": null,
476 | "metadata": {},
477 | "outputs": [],
478 | "source": []
479 | },
480 | {
481 | "cell_type": "code",
482 | "execution_count": 8,
483 | "metadata": {},
484 | "outputs": [
485 | {
486 | "data": {
487 | "text/plain": [
488 | "Pipeline(memory=None,\n",
489 | " steps=[('gradientboostingclassifier',\n",
490 | " GradientBoostingClassifier(ccp_alpha=0.0,\n",
491 | " criterion='friedman_mse', init=None,\n",
492 | " learning_rate=0.1, loss='deviance',\n",
493 | " max_depth=10, max_features=0.55,\n",
494 | " max_leaf_nodes=None,\n",
495 | " min_impurity_decrease=0.0,\n",
496 | " min_impurity_split=None,\n",
497 | " min_samples_leaf=16,\n",
498 | " min_samples_split=3,\n",
499 | " min_weight_fraction_leaf=0.0,\n",
500 | " n_estimators=100,\n",
501 | " n_iter_no_change=None,\n",
502 | " presort='deprecated',\n",
503 | " random_state=None,\n",
504 | " subsample=0.6000000000000001,\n",
505 | " tol=0.0001, validation_fraction=0.1,\n",
506 | " verbose=0, warm_start=False))],\n",
507 | " verbose=False)"
508 | ]
509 | },
510 | "execution_count": 8,
511 | "metadata": {},
512 | "output_type": "execute_result"
513 | }
514 | ],
515 | "source": [
516 | "tpot.fitted_pipeline_"
517 | ]
518 | },
519 | {
520 | "cell_type": "code",
521 | "execution_count": 9,
522 | "metadata": {},
523 | "outputs": [
524 | {
525 | "data": {
526 | "text/plain": [
527 | "0.8491620111731844"
528 | ]
529 | },
530 | "execution_count": 9,
531 | "metadata": {},
532 | "output_type": "execute_result"
533 | }
534 | ],
535 | "source": [
536 | "tpot.score(X_test_scaled, y_test)"
537 | ]
538 | }
539 | ],
540 | "metadata": {
541 | "kernelspec": {
542 | "display_name": "Python 3",
543 | "language": "python",
544 | "name": "python3"
545 | },
546 | "language_info": {
547 | "codemirror_mode": {
548 | "name": "ipython",
549 | "version": 3
550 | },
551 | "file_extension": ".py",
552 | "mimetype": "text/x-python",
553 | "name": "python",
554 | "nbconvert_exporter": "python",
555 | "pygments_lexer": "ipython3",
556 | "version": "3.7.6"
557 | }
558 | },
559 | "nbformat": 4,
560 | "nbformat_minor": 4
561 | }
562 |
--------------------------------------------------------------------------------
/data/RealEstate.csv:
--------------------------------------------------------------------------------
1 | No,X1 transaction date,X2 house age,X3 distance to the nearest MRT station,X4 number of convenience stores,X5 latitude,X6 longitude,Y house price of unit area
2 | 1,2012.917,32,84.87882,10,24.98298,121.54024,37.9
3 | 2,2012.917,19.5,306.5947,9,24.98034,121.53951,42.2
4 | 3,2013.583,13.3,561.9845,5,24.98746,121.54391,47.3
5 | 4,2013.500,13.3,561.9845,5,24.98746,121.54391,54.8
6 | 5,2012.833,5,390.5684,5,24.97937,121.54245,43.1
7 | 6,2012.667,7.1,2175.03,3,24.96305,121.51254,32.1
8 | 7,2012.667,34.5,623.4731,7,24.97933,121.53642,40.3
9 | 8,2013.417,20.3,287.6025,6,24.98042,121.54228,46.7
10 | 9,2013.500,31.7,5512.038,1,24.95095,121.48458,18.8
11 | 10,2013.417,17.9,1783.18,3,24.96731,121.51486,22.1
12 | 11,2013.083,34.8,405.2134,1,24.97349,121.53372,41.4
13 | 12,2013.333,6.3,90.45606,9,24.97433,121.5431,58.1
14 | 13,2012.917,13,492.2313,5,24.96515,121.53737,39.3
15 | 14,2012.667,20.4,2469.645,4,24.96108,121.51046,23.8
16 | 15,2013.500,13.2,1164.838,4,24.99156,121.53406,34.3
17 | 16,2013.583,35.7,579.2083,2,24.9824,121.54619,50.5
18 | 17,2013.250,0,292.9978,6,24.97744,121.54458,70.1
19 | 18,2012.750,17.7,350.8515,1,24.97544,121.53119,37.4
20 | 19,2013.417,16.9,368.1363,8,24.9675,121.54451,42.3
21 | 20,2012.667,1.5,23.38284,7,24.96772,121.54102,47.7
22 | 21,2013.417,4.5,2275.877,3,24.96314,121.51151,29.3
23 | 22,2013.417,10.5,279.1726,7,24.97528,121.54541,51.6
24 | 23,2012.917,14.7,1360.139,1,24.95204,121.54842,24.6
25 | 24,2013.083,10.1,279.1726,7,24.97528,121.54541,47.9
26 | 25,2013.000,39.6,480.6977,4,24.97353,121.53885,38.8
27 | 26,2013.083,29.3,1487.868,2,24.97542,121.51726,27
28 | 27,2012.667,3.1,383.8624,5,24.98085,121.54391,56.2
29 | 28,2013.250,10.4,276.449,5,24.95593,121.53913,33.6
30 | 29,2013.500,19.2,557.478,4,24.97419,121.53797,47
31 | 30,2013.083,7.1,451.2438,5,24.97563,121.54694,57.1
32 | 31,2013.500,25.9,4519.69,0,24.94826,121.49587,22.1
33 | 32,2012.750,29.6,769.4034,7,24.98281,121.53408,25
34 | 33,2012.750,37.9,488.5727,1,24.97349,121.53451,34.2
35 | 34,2013.250,16.5,323.655,6,24.97841,121.54281,49.3
36 | 35,2012.750,15.4,205.367,7,24.98419,121.54243,55.1
37 | 36,2013.500,13.9,4079.418,0,25.01459,121.51816,27.3
38 | 37,2012.917,14.7,1935.009,2,24.96386,121.51458,22.9
39 | 38,2013.167,12,1360.139,1,24.95204,121.54842,25.3
40 | 39,2012.667,3.1,577.9615,6,24.97201,121.54722,47.7
41 | 40,2013.167,16.2,289.3248,5,24.98203,121.54348,46.2
42 | 41,2013.000,13.6,4082.015,0,24.94155,121.50381,15.9
43 | 42,2013.500,16.8,4066.587,0,24.94297,121.50342,18.2
44 | 43,2013.417,36.1,519.4617,5,24.96305,121.53758,34.7
45 | 44,2012.750,34.4,512.7871,6,24.98748,121.54301,34.1
46 | 45,2013.583,2.7,533.4762,4,24.97445,121.54765,53.9
47 | 46,2013.083,36.6,488.8193,8,24.97015,121.54494,38.3
48 | 47,2013.417,21.7,463.9623,9,24.9703,121.54458,42
49 | 48,2013.583,35.9,640.7391,3,24.97563,121.53715,61.5
50 | 49,2013.417,24.2,4605.749,0,24.94684,121.49578,13.4
51 | 50,2012.667,29.4,4510.359,1,24.94925,121.49542,13.2
52 | 51,2013.417,21.7,512.5487,4,24.974,121.53842,44.2
53 | 52,2013.083,31.3,1758.406,1,24.95402,121.55282,20.7
54 | 53,2013.583,32.1,1438.579,3,24.97419,121.5175,27
55 | 54,2013.083,13.3,492.2313,5,24.96515,121.53737,38.9
56 | 55,2013.083,16.1,289.3248,5,24.98203,121.54348,51.7
57 | 56,2012.833,31.7,1160.632,0,24.94968,121.53009,13.7
58 | 57,2013.417,33.6,371.2495,8,24.97254,121.54059,41.9
59 | 58,2012.917,3.5,56.47425,7,24.95744,121.53711,53.5
60 | 59,2013.500,30.3,4510.359,1,24.94925,121.49542,22.6
61 | 60,2013.083,13.3,336.0532,5,24.95776,121.53438,42.4
62 | 61,2013.417,11,1931.207,2,24.96365,121.51471,21.3
63 | 62,2013.500,5.3,259.6607,6,24.97585,121.54516,63.2
64 | 63,2012.917,17.2,2175.877,3,24.96303,121.51254,27.7
65 | 64,2013.583,2.6,533.4762,4,24.97445,121.54765,55
66 | 65,2013.333,17.5,995.7554,0,24.96305,121.54915,25.3
67 | 66,2013.417,40.1,123.7429,8,24.97635,121.54329,44.3
68 | 67,2013.000,1,193.5845,6,24.96571,121.54089,50.7
69 | 68,2013.500,8.5,104.8101,5,24.96674,121.54067,56.8
70 | 69,2013.417,30.4,464.223,6,24.97964,121.53805,36.2
71 | 70,2012.833,12.5,561.9845,5,24.98746,121.54391,42
72 | 71,2013.583,6.6,90.45606,9,24.97433,121.5431,59
73 | 72,2013.083,35.5,640.7391,3,24.97563,121.53715,40.8
74 | 73,2013.583,32.5,424.5442,8,24.97587,121.53913,36.3
75 | 74,2013.167,13.8,4082.015,0,24.94155,121.50381,20
76 | 75,2012.917,6.8,379.5575,10,24.98343,121.53762,54.4
77 | 76,2013.500,12.3,1360.139,1,24.95204,121.54842,29.5
78 | 77,2013.583,35.9,616.4004,3,24.97723,121.53767,36.8
79 | 78,2012.833,20.5,2185.128,3,24.96322,121.51237,25.6
80 | 79,2012.917,38.2,552.4371,2,24.97598,121.53381,29.8
81 | 80,2013.000,18,1414.837,1,24.95182,121.54887,26.5
82 | 81,2013.500,11.8,533.4762,4,24.97445,121.54765,40.3
83 | 82,2013.000,30.8,377.7956,6,24.96427,121.53964,36.8
84 | 83,2013.083,13.2,150.9347,7,24.96725,121.54252,48.1
85 | 84,2012.917,25.3,2707.392,3,24.96056,121.50831,17.7
86 | 85,2013.083,15.1,383.2805,7,24.96735,121.54464,43.7
87 | 86,2012.750,0,338.9679,9,24.96853,121.54413,50.8
88 | 87,2012.833,1.8,1455.798,1,24.9512,121.549,27
89 | 88,2013.583,16.9,4066.587,0,24.94297,121.50342,18.3
90 | 89,2012.917,8.9,1406.43,0,24.98573,121.52758,48
91 | 90,2013.500,23,3947.945,0,24.94783,121.50243,25.3
92 | 91,2012.833,0,274.0144,1,24.9748,121.53059,45.4
93 | 92,2013.250,9.1,1402.016,0,24.98569,121.5276,43.2
94 | 93,2012.917,20.6,2469.645,4,24.96108,121.51046,21.8
95 | 94,2012.917,31.9,1146.329,0,24.9492,121.53076,16.1
96 | 95,2012.917,40.9,167.5989,5,24.9663,121.54026,41
97 | 96,2012.917,8,104.8101,5,24.96674,121.54067,51.8
98 | 97,2013.417,6.4,90.45606,9,24.97433,121.5431,59.5
99 | 98,2013.083,28.4,617.4424,3,24.97746,121.53299,34.6
100 | 99,2013.417,16.4,289.3248,5,24.98203,121.54348,51
101 | 100,2013.417,6.4,90.45606,9,24.97433,121.5431,62.2
102 | 101,2013.500,17.5,964.7496,4,24.98872,121.53411,38.2
103 | 102,2012.833,12.7,170.1289,1,24.97371,121.52984,32.9
104 | 103,2013.083,1.1,193.5845,6,24.96571,121.54089,54.4
105 | 104,2012.750,0,208.3905,6,24.95618,121.53844,45.7
106 | 105,2012.667,32.7,392.4459,6,24.96398,121.5425,30.5
107 | 106,2012.833,0,292.9978,6,24.97744,121.54458,71
108 | 107,2013.083,17.2,189.5181,8,24.97707,121.54308,47.1
109 | 108,2013.333,12.2,1360.139,1,24.95204,121.54842,26.6
110 | 109,2013.417,31.4,592.5006,2,24.9726,121.53561,34.1
111 | 110,2013.583,4,2147.376,3,24.96299,121.51284,28.4
112 | 111,2013.083,8.1,104.8101,5,24.96674,121.54067,51.6
113 | 112,2013.583,33.3,196.6172,7,24.97701,121.54224,39.4
114 | 113,2013.417,9.9,2102.427,3,24.96044,121.51462,23.1
115 | 114,2013.333,14.8,393.2606,6,24.96172,121.53812,7.6
116 | 115,2012.667,30.6,143.8383,8,24.98155,121.54142,53.3
117 | 116,2013.083,20.6,737.9161,2,24.98092,121.54739,46.4
118 | 117,2013.000,30.9,6396.283,1,24.94375,121.47883,12.2
119 | 118,2013.000,13.6,4197.349,0,24.93885,121.50383,13
120 | 119,2013.500,25.3,1583.722,3,24.96622,121.51709,30.6
121 | 120,2013.500,16.6,289.3248,5,24.98203,121.54348,59.6
122 | 121,2013.167,13.3,492.2313,5,24.96515,121.53737,31.3
123 | 122,2013.500,13.6,492.2313,5,24.96515,121.53737,48
124 | 123,2013.250,31.5,414.9476,4,24.98199,121.54464,32.5
125 | 124,2013.417,0,185.4296,0,24.9711,121.5317,45.5
126 | 125,2012.917,9.9,279.1726,7,24.97528,121.54541,57.4
127 | 126,2013.167,1.1,193.5845,6,24.96571,121.54089,48.6
128 | 127,2013.083,38.6,804.6897,4,24.97838,121.53477,62.9
129 | 128,2013.250,3.8,383.8624,5,24.98085,121.54391,55
130 | 129,2013.083,41.3,124.9912,6,24.96674,121.54039,60.7
131 | 130,2013.417,38.5,216.8329,7,24.98086,121.54162,41
132 | 131,2013.250,29.6,535.527,8,24.98092,121.53653,37.5
133 | 132,2013.500,4,2147.376,3,24.96299,121.51284,30.7
134 | 133,2013.167,26.6,482.7581,5,24.97433,121.53863,37.5
135 | 134,2012.833,18,373.3937,8,24.9866,121.54082,39.5
136 | 135,2012.667,33.4,186.9686,6,24.96604,121.54211,42.2
137 | 136,2012.917,18.9,1009.235,0,24.96357,121.54951,20.8
138 | 137,2012.750,11.4,390.5684,5,24.97937,121.54245,46.8
139 | 138,2013.500,13.6,319.0708,6,24.96495,121.54277,47.4
140 | 139,2013.167,10,942.4664,0,24.97843,121.52406,43.5
141 | 140,2012.667,12.9,492.2313,5,24.96515,121.53737,42.5
142 | 141,2013.250,16.2,289.3248,5,24.98203,121.54348,51.4
143 | 142,2013.333,5.1,1559.827,3,24.97213,121.51627,28.9
144 | 143,2013.417,19.8,640.6071,5,24.97017,121.54647,37.5
145 | 144,2013.500,13.6,492.2313,5,24.96515,121.53737,40.1
146 | 145,2013.083,11.9,1360.139,1,24.95204,121.54842,28.4
147 | 146,2012.917,2.1,451.2438,5,24.97563,121.54694,45.5
148 | 147,2012.750,0,185.4296,0,24.9711,121.5317,52.2
149 | 148,2012.750,3.2,489.8821,8,24.97017,121.54494,43.2
150 | 149,2013.500,16.4,3780.59,0,24.93293,121.51203,45.1
151 | 150,2012.667,34.9,179.4538,8,24.97349,121.54245,39.7
152 | 151,2013.250,35.8,170.7311,7,24.96719,121.54269,48.5
153 | 152,2013.500,4.9,387.7721,9,24.98118,121.53788,44.7
154 | 153,2013.333,12,1360.139,1,24.95204,121.54842,28.9
155 | 154,2013.250,6.5,376.1709,6,24.95418,121.53713,40.9
156 | 155,2013.500,16.9,4066.587,0,24.94297,121.50342,20.7
157 | 156,2013.167,13.8,4082.015,0,24.94155,121.50381,15.6
158 | 157,2013.583,30.7,1264.73,0,24.94883,121.52954,18.3
159 | 158,2013.250,16.1,815.9314,4,24.97886,121.53464,35.6
160 | 159,2013.000,11.6,390.5684,5,24.97937,121.54245,39.4
161 | 160,2012.667,15.5,815.9314,4,24.97886,121.53464,37.4
162 | 161,2012.917,3.5,49.66105,8,24.95836,121.53756,57.8
163 | 162,2013.417,19.2,616.4004,3,24.97723,121.53767,39.6
164 | 163,2012.750,16,4066.587,0,24.94297,121.50342,11.6
165 | 164,2013.500,8.5,104.8101,5,24.96674,121.54067,55.5
166 | 165,2012.833,0,185.4296,0,24.9711,121.5317,55.2
167 | 166,2012.917,13.7,1236.564,1,24.97694,121.55391,30.6
168 | 167,2013.417,0,292.9978,6,24.97744,121.54458,73.6
169 | 168,2013.417,28.2,330.0854,8,24.97408,121.54011,43.4
170 | 169,2013.083,27.6,515.1122,5,24.96299,121.5432,37.4
171 | 170,2013.417,8.4,1962.628,1,24.95468,121.55481,23.5
172 | 171,2013.333,24,4527.687,0,24.94741,121.49628,14.4
173 | 172,2013.083,3.6,383.8624,5,24.98085,121.54391,58.8
174 | 173,2013.583,6.6,90.45606,9,24.97433,121.5431,58.1
175 | 174,2013.083,41.3,401.8807,4,24.98326,121.5446,35.1
176 | 175,2013.417,4.3,432.0385,7,24.9805,121.53778,45.2
177 | 176,2013.083,30.2,472.1745,3,24.97005,121.53758,36.5
178 | 177,2012.833,13.9,4573.779,0,24.94867,121.49507,19.2
179 | 178,2013.083,33,181.0766,9,24.97697,121.54262,42
180 | 179,2013.500,13.1,1144.436,4,24.99176,121.53456,36.7
181 | 180,2013.083,14,438.8513,1,24.97493,121.5273,42.6
182 | 181,2012.667,26.9,4449.27,0,24.94898,121.49621,15.5
183 | 182,2013.167,11.6,201.8939,8,24.98489,121.54121,55.9
184 | 183,2013.500,13.5,2147.376,3,24.96299,121.51284,23.6
185 | 184,2013.500,17,4082.015,0,24.94155,121.50381,18.8
186 | 185,2012.750,14.1,2615.465,0,24.95495,121.56174,21.8
187 | 186,2012.750,31.4,1447.286,3,24.97285,121.5173,21.5
188 | 187,2013.167,20.9,2185.128,3,24.96322,121.51237,25.7
189 | 188,2013.000,8.9,3078.176,0,24.95464,121.56627,22
190 | 189,2012.917,34.8,190.0392,8,24.97707,121.54312,44.3
191 | 190,2012.917,16.3,4066.587,0,24.94297,121.50342,20.5
192 | 191,2013.500,35.3,616.5735,8,24.97945,121.53642,42.3
193 | 192,2013.167,13.2,750.0704,2,24.97371,121.54951,37.8
194 | 193,2013.167,43.8,57.58945,7,24.9675,121.54069,42.7
195 | 194,2013.417,9.7,421.479,5,24.98246,121.54477,49.3
196 | 195,2013.500,15.2,3771.895,0,24.93363,121.51158,29.3
197 | 196,2013.333,15.2,461.1016,5,24.95425,121.5399,34.6
198 | 197,2013.000,22.8,707.9067,2,24.981,121.54713,36.6
199 | 198,2013.250,34.4,126.7286,8,24.96881,121.54089,48.2
200 | 199,2013.083,34,157.6052,7,24.96628,121.54196,39.1
201 | 200,2013.417,18.2,451.6419,8,24.96945,121.5449,31.6
202 | 201,2013.417,17.4,995.7554,0,24.96305,121.54915,25.5
203 | 202,2013.417,13.1,561.9845,5,24.98746,121.54391,45.9
204 | 203,2012.917,38.3,642.6985,3,24.97559,121.53713,31.5
205 | 204,2012.667,15.6,289.3248,5,24.98203,121.54348,46.1
206 | 205,2013.000,18,1414.837,1,24.95182,121.54887,26.6
207 | 206,2013.083,12.8,1449.722,3,24.97289,121.51728,21.4
208 | 207,2013.250,22.2,379.5575,10,24.98343,121.53762,44
209 | 208,2013.083,38.5,665.0636,3,24.97503,121.53692,34.2
210 | 209,2012.750,11.5,1360.139,1,24.95204,121.54842,26.2
211 | 210,2012.833,34.8,175.6294,8,24.97347,121.54271,40.9
212 | 211,2013.500,5.2,390.5684,5,24.97937,121.54245,52.2
213 | 212,2013.083,0,274.0144,1,24.9748,121.53059,43.5
214 | 213,2013.333,17.6,1805.665,2,24.98672,121.52091,31.1
215 | 214,2013.083,6.2,90.45606,9,24.97433,121.5431,58
216 | 215,2013.583,18.1,1783.18,3,24.96731,121.51486,20.9
217 | 216,2013.333,19.2,383.7129,8,24.972,121.54477,48.1
218 | 217,2013.250,37.8,590.9292,1,24.97153,121.53559,39.7
219 | 218,2012.917,28,372.6242,6,24.97838,121.54119,40.8
220 | 219,2013.417,13.6,492.2313,5,24.96515,121.53737,43.8
221 | 220,2012.750,29.3,529.7771,8,24.98102,121.53655,40.2
222 | 221,2013.333,37.2,186.5101,9,24.97703,121.54265,78.3
223 | 222,2013.333,9,1402.016,0,24.98569,121.5276,38.5
224 | 223,2013.583,30.6,431.1114,10,24.98123,121.53743,48.5
225 | 224,2013.250,9.1,1402.016,0,24.98569,121.5276,42.3
226 | 225,2013.333,34.5,324.9419,6,24.97814,121.5417,46
227 | 226,2013.250,1.1,193.5845,6,24.96571,121.54089,49
228 | 227,2013.000,16.5,4082.015,0,24.94155,121.50381,12.8
229 | 228,2012.917,32.4,265.0609,8,24.98059,121.53986,40.2
230 | 229,2013.417,11.9,3171.329,0,25.00115,121.51776,46.6
231 | 230,2013.583,31,1156.412,0,24.9489,121.53095,19
232 | 231,2013.500,4,2147.376,3,24.96299,121.51284,33.4
233 | 232,2012.833,16.2,4074.736,0,24.94235,121.50357,14.7
234 | 233,2012.917,27.1,4412.765,1,24.95032,121.49587,17.4
235 | 234,2013.333,39.7,333.3679,9,24.98016,121.53932,32.4
236 | 235,2013.250,8,2216.612,4,24.96007,121.51361,23.9
237 | 236,2012.750,12.9,250.631,7,24.96606,121.54297,39.3
238 | 237,2013.167,3.6,373.8389,10,24.98322,121.53765,61.9
239 | 238,2013.167,13,732.8528,0,24.97668,121.52518,39
240 | 239,2013.083,12.8,732.8528,0,24.97668,121.52518,40.6
241 | 240,2013.500,18.1,837.7233,0,24.96334,121.54767,29.7
242 | 241,2013.083,11,1712.632,2,24.96412,121.5167,28.8
243 | 242,2013.500,13.7,250.631,7,24.96606,121.54297,41.4
244 | 243,2012.833,2,2077.39,3,24.96357,121.51329,33.4
245 | 244,2013.417,32.8,204.1705,8,24.98236,121.53923,48.2
246 | 245,2013.083,4.8,1559.827,3,24.97213,121.51627,21.7
247 | 246,2013.417,7.5,639.6198,5,24.97258,121.54814,40.8
248 | 247,2013.417,16.4,389.8219,6,24.96412,121.54273,40.6
249 | 248,2013.333,21.7,1055.067,0,24.96211,121.54928,23.1
250 | 249,2013.000,19,1009.235,0,24.96357,121.54951,22.3
251 | 250,2012.833,18,6306.153,1,24.95743,121.47516,15
252 | 251,2013.167,39.2,424.7132,7,24.97429,121.53917,30
253 | 252,2012.917,31.7,1159.454,0,24.9496,121.53018,13.8
254 | 253,2012.833,5.9,90.45606,9,24.97433,121.5431,52.7
255 | 254,2012.667,30.4,1735.595,2,24.96464,121.51623,25.9
256 | 255,2012.667,1.1,329.9747,5,24.98254,121.54395,51.8
257 | 256,2013.417,31.5,5512.038,1,24.95095,121.48458,17.4
258 | 257,2012.667,14.6,339.2289,1,24.97519,121.53151,26.5
259 | 258,2013.250,17.3,444.1334,1,24.97501,121.5273,43.9
260 | 259,2013.417,0,292.9978,6,24.97744,121.54458,63.3
261 | 260,2013.083,17.7,837.7233,0,24.96334,121.54767,28.8
262 | 261,2013.250,17,1485.097,4,24.97073,121.517,30.7
263 | 262,2013.167,16.2,2288.011,3,24.95885,121.51359,24.4
264 | 263,2012.917,15.9,289.3248,5,24.98203,121.54348,53
265 | 264,2013.417,3.9,2147.376,3,24.96299,121.51284,31.7
266 | 265,2013.167,32.6,493.657,7,24.96968,121.54522,40.6
267 | 266,2012.833,15.7,815.9314,4,24.97886,121.53464,38.1
268 | 267,2013.250,17.8,1783.18,3,24.96731,121.51486,23.7
269 | 268,2012.833,34.7,482.7581,5,24.97433,121.53863,41.1
270 | 269,2013.417,17.2,390.5684,5,24.97937,121.54245,40.1
271 | 270,2013.000,17.6,837.7233,0,24.96334,121.54767,23
272 | 271,2013.333,10.8,252.5822,1,24.9746,121.53046,117.5
273 | 272,2012.917,17.7,451.6419,8,24.96945,121.5449,26.5
274 | 273,2012.750,13,492.2313,5,24.96515,121.53737,40.5
275 | 274,2013.417,13.2,170.1289,1,24.97371,121.52984,29.3
276 | 275,2013.167,27.5,394.0173,7,24.97305,121.53994,41
277 | 276,2012.667,1.5,23.38284,7,24.96772,121.54102,49.7
278 | 277,2013.000,19.1,461.1016,5,24.95425,121.5399,34
279 | 278,2013.417,21.2,2185.128,3,24.96322,121.51237,27.7
280 | 279,2012.750,0,208.3905,6,24.95618,121.53844,44
281 | 280,2013.417,2.6,1554.25,3,24.97026,121.51642,31.1
282 | 281,2013.250,2.3,184.3302,6,24.96581,121.54086,45.4
283 | 282,2013.333,4.7,387.7721,9,24.98118,121.53788,44.8
284 | 283,2012.917,2,1455.798,1,24.9512,121.549,25.6
285 | 284,2013.417,33.5,1978.671,2,24.98674,121.51844,23.5
286 | 285,2012.917,15,383.2805,7,24.96735,121.54464,34.4
287 | 286,2013.167,30.1,718.2937,3,24.97509,121.53644,55.3
288 | 287,2012.917,5.9,90.45606,9,24.97433,121.5431,56.3
289 | 288,2013.000,19.2,461.1016,5,24.95425,121.5399,32.9
290 | 289,2013.583,16.6,323.6912,6,24.97841,121.5428,51
291 | 290,2013.333,13.9,289.3248,5,24.98203,121.54348,44.5
292 | 291,2013.083,37.7,490.3446,0,24.97217,121.53471,37
293 | 292,2012.833,3.4,56.47425,7,24.95744,121.53711,54.4
294 | 293,2013.083,17.5,395.6747,5,24.95674,121.534,24.5
295 | 294,2012.667,12.6,383.2805,7,24.96735,121.54464,42.5
296 | 295,2013.500,26.4,335.5273,6,24.9796,121.5414,38.1
297 | 296,2013.167,18.2,2179.59,3,24.96299,121.51252,21.8
298 | 297,2012.750,12.5,1144.436,4,24.99176,121.53456,34.1
299 | 298,2012.833,34.9,567.0349,4,24.97003,121.5458,28.5
300 | 299,2013.333,16.7,4082.015,0,24.94155,121.50381,16.7
301 | 300,2013.167,33.2,121.7262,10,24.98178,121.54059,46.1
302 | 301,2013.083,2.5,156.2442,4,24.96696,121.53992,36.9
303 | 302,2012.750,38,461.7848,0,24.97229,121.53445,35.7
304 | 303,2013.500,16.5,2288.011,3,24.95885,121.51359,23.2
305 | 304,2013.500,38.3,439.7105,0,24.97161,121.53423,38.4
306 | 305,2013.417,20,1626.083,3,24.96622,121.51668,29.4
307 | 306,2013.083,16.2,289.3248,5,24.98203,121.54348,55
308 | 307,2013.500,14.4,169.9803,1,24.97369,121.52979,50.2
309 | 308,2012.833,10.3,3079.89,0,24.9546,121.56627,24.7
310 | 309,2013.417,16.4,289.3248,5,24.98203,121.54348,53
311 | 310,2013.250,30.3,1264.73,0,24.94883,121.52954,19.1
312 | 311,2013.583,16.4,1643.499,2,24.95394,121.55174,24.7
313 | 312,2013.167,21.3,537.7971,4,24.97425,121.53814,42.2
314 | 313,2013.583,35.4,318.5292,9,24.97071,121.54069,78
315 | 314,2013.333,8.3,104.8101,5,24.96674,121.54067,42.8
316 | 315,2013.250,3.7,577.9615,6,24.97201,121.54722,41.6
317 | 316,2013.083,15.6,1756.411,2,24.9832,121.51812,27.3
318 | 317,2013.250,13.3,250.631,7,24.96606,121.54297,42
319 | 318,2012.750,15.6,752.7669,2,24.97795,121.53451,37.5
320 | 319,2013.333,7.1,379.5575,10,24.98343,121.53762,49.8
321 | 320,2013.250,34.6,272.6783,5,24.95562,121.53872,26.9
322 | 321,2012.750,13.5,4197.349,0,24.93885,121.50383,18.6
323 | 322,2012.917,16.9,964.7496,4,24.98872,121.53411,37.7
324 | 323,2013.000,12.9,187.4823,1,24.97388,121.52981,33.1
325 | 324,2013.417,28.6,197.1338,6,24.97631,121.54436,42.5
326 | 325,2012.667,12.4,1712.632,2,24.96412,121.5167,31.3
327 | 326,2013.083,36.6,488.8193,8,24.97015,121.54494,38.1
328 | 327,2013.500,4.1,56.47425,7,24.95744,121.53711,62.1
329 | 328,2013.417,3.5,757.3377,3,24.97538,121.54971,36.7
330 | 329,2012.833,15.9,1497.713,3,24.97003,121.51696,23.6
331 | 330,2013.000,13.6,4197.349,0,24.93885,121.50383,19.2
332 | 331,2013.083,32,1156.777,0,24.94935,121.53046,12.8
333 | 332,2013.333,25.6,4519.69,0,24.94826,121.49587,15.6
334 | 333,2013.167,39.8,617.7134,2,24.97577,121.53475,39.6
335 | 334,2012.750,7.8,104.8101,5,24.96674,121.54067,38.4
336 | 335,2012.917,30,1013.341,5,24.99006,121.5346,22.8
337 | 336,2013.583,27.3,337.6016,6,24.96431,121.54063,36.5
338 | 337,2012.833,5.1,1867.233,2,24.98407,121.51748,35.6
339 | 338,2012.833,31.3,600.8604,5,24.96871,121.54651,30.9
340 | 339,2012.917,31.5,258.186,9,24.96867,121.54331,36.3
341 | 340,2013.333,1.7,329.9747,5,24.98254,121.54395,50.4
342 | 341,2013.333,33.6,270.8895,0,24.97281,121.53265,42.9
343 | 342,2013.000,13,750.0704,2,24.97371,121.54951,37
344 | 343,2012.667,5.7,90.45606,9,24.97433,121.5431,53.5
345 | 344,2013.000,33.5,563.2854,8,24.98223,121.53597,46.6
346 | 345,2013.500,34.6,3085.17,0,24.998,121.5155,41.2
347 | 346,2012.667,0,185.4296,0,24.9711,121.5317,37.9
348 | 347,2013.417,13.2,1712.632,2,24.96412,121.5167,30.8
349 | 348,2013.583,17.4,6488.021,1,24.95719,121.47353,11.2
350 | 349,2012.833,4.6,259.6607,6,24.97585,121.54516,53.7
351 | 350,2012.750,7.8,104.8101,5,24.96674,121.54067,47
352 | 351,2013.000,13.2,492.2313,5,24.96515,121.53737,42.3
353 | 352,2012.833,4,2180.245,3,24.96324,121.51241,28.6
354 | 353,2012.833,18.4,2674.961,3,24.96143,121.50827,25.7
355 | 354,2013.500,4.1,2147.376,3,24.96299,121.51284,31.3
356 | 355,2013.417,12.2,1360.139,1,24.95204,121.54842,30.1
357 | 356,2013.250,3.8,383.8624,5,24.98085,121.54391,60.7
358 | 357,2012.833,10.3,211.4473,1,24.97417,121.52999,45.3
359 | 358,2013.417,0,338.9679,9,24.96853,121.54413,44.9
360 | 359,2013.167,1.1,193.5845,6,24.96571,121.54089,45.1
361 | 360,2013.500,5.6,2408.993,0,24.95505,121.55964,24.7
362 | 361,2012.667,32.9,87.30222,10,24.983,121.54022,47.1
363 | 362,2013.083,41.4,281.205,8,24.97345,121.54093,63.3
364 | 363,2013.417,17.1,967.4,4,24.98872,121.53408,40
365 | 364,2013.500,32.3,109.9455,10,24.98182,121.54086,48
366 | 365,2013.417,35.3,614.1394,7,24.97913,121.53666,33.1
367 | 366,2012.917,17.3,2261.432,4,24.96182,121.51222,29.5
368 | 367,2012.750,14.2,1801.544,1,24.95153,121.55254,24.8
369 | 368,2012.833,15,1828.319,2,24.96464,121.51531,20.9
370 | 369,2013.417,18.2,350.8515,1,24.97544,121.53119,43.1
371 | 370,2012.667,20.2,2185.128,3,24.96322,121.51237,22.8
372 | 371,2012.750,15.9,289.3248,5,24.98203,121.54348,42.1
373 | 372,2013.500,4.1,312.8963,5,24.95591,121.53956,51.7
374 | 373,2013.000,33.9,157.6052,7,24.96628,121.54196,41.5
375 | 374,2013.083,0,274.0144,1,24.9748,121.53059,52.2
376 | 375,2013.250,5.4,390.5684,5,24.97937,121.54245,49.5
377 | 376,2013.250,21.7,1157.988,0,24.96165,121.55011,23.8
378 | 377,2013.417,14.7,1717.193,2,24.96447,121.51649,30.5
379 | 378,2013.333,3.9,49.66105,8,24.95836,121.53756,56.8
380 | 379,2013.333,37.3,587.8877,8,24.97077,121.54634,37.4
381 | 380,2013.333,0,292.9978,6,24.97744,121.54458,69.7
382 | 381,2013.333,14.1,289.3248,5,24.98203,121.54348,53.3
383 | 382,2013.417,8,132.5469,9,24.98298,121.53981,47.3
384 | 383,2013.000,16.3,3529.564,0,24.93207,121.51597,29.3
385 | 384,2012.667,29.1,506.1144,4,24.97845,121.53889,40.3
386 | 385,2012.750,16.1,4066.587,0,24.94297,121.50342,12.9
387 | 386,2013.000,18.3,82.88643,10,24.983,121.54026,46.6
388 | 387,2012.833,0,185.4296,0,24.9711,121.5317,55.3
389 | 388,2013.250,16.2,2103.555,3,24.96042,121.51462,25.6
390 | 389,2013.500,10.4,2251.938,4,24.95957,121.51353,27.3
391 | 390,2013.250,40.9,122.3619,8,24.96756,121.5423,67.7
392 | 391,2013.500,32.8,377.8302,9,24.97151,121.5435,38.6
393 | 392,2013.583,6.2,1939.749,1,24.95155,121.55387,31.3
394 | 393,2013.083,42.7,443.802,6,24.97927,121.53874,35.3
395 | 394,2013.000,16.9,967.4,4,24.98872,121.53408,40.3
396 | 395,2013.500,32.6,4136.271,1,24.95544,121.4963,24.7
397 | 396,2012.917,21.2,512.5487,4,24.974,121.53842,42.5
398 | 397,2012.667,37.1,918.6357,1,24.97198,121.55063,31.9
399 | 398,2013.417,13.1,1164.838,4,24.99156,121.53406,32.2
400 | 399,2013.417,14.7,1717.193,2,24.96447,121.51649,23
401 | 400,2012.917,12.7,170.1289,1,24.97371,121.52984,37.3
402 | 401,2013.250,26.8,482.7581,5,24.97433,121.53863,35.5
403 | 402,2013.083,7.6,2175.03,3,24.96305,121.51254,27.7
404 | 403,2012.833,12.7,187.4823,1,24.97388,121.52981,28.5
405 | 404,2012.667,30.9,161.942,9,24.98353,121.53966,39.7
406 | 405,2013.333,16.4,289.3248,5,24.98203,121.54348,41.2
407 | 406,2012.667,23,130.9945,6,24.95663,121.53765,37.2
408 | 407,2013.167,1.9,372.1386,7,24.97293,121.54026,40.5
409 | 408,2013.000,5.2,2408.993,0,24.95505,121.55964,22.3
410 | 409,2013.417,18.5,2175.744,3,24.9633,121.51243,28.1
411 | 410,2013.000,13.7,4082.015,0,24.94155,121.50381,15.4
412 | 411,2012.667,5.6,90.45606,9,24.97433,121.5431,50
413 | 412,2013.250,18.8,390.9696,7,24.97923,121.53986,40.6
414 | 413,2013.000,8.1,104.8101,5,24.96674,121.54067,52.5
415 | 414,2013.500,6.5,90.45606,9,24.97433,121.5431,63.9
416 |
--------------------------------------------------------------------------------
/img/LogoSingleRow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/betterdatascience/YouTube/cf24c5cf3192eb7b17c25d94c710d3f941818537/img/LogoSingleRow.png
--------------------------------------------------------------------------------