├── ProjectReport.pdf
├── ReportSummary.pdf
├── README.md
├── LICENSE
├── .gitignore
├── GradientBoosting.ipynb
└── SVR.ipynb
/ProjectReport.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pavini11/SkyLens/HEAD/ProjectReport.pdf
--------------------------------------------------------------------------------
/ReportSummary.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pavini11/SkyLens/HEAD/ReportSummary.pdf
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Time-series-forecasting-of-Air-Quality-Prediction
2 | AQI Prediction using LSTM, MLR, SVR, Random Forest, Gradient Boosting
3 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2021 Pavini Jain
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Byte-compiled / optimized / DLL files
2 | __pycache__/
3 | *.py[cod]
4 | *$py.class
5 |
6 | # C extensions
7 | *.so
8 |
9 | # Distribution / packaging
10 | .Python
11 | build/
12 | develop-eggs/
13 | dist/
14 | downloads/
15 | eggs/
16 | .eggs/
17 | lib/
18 | lib64/
19 | parts/
20 | sdist/
21 | var/
22 | wheels/
23 | pip-wheel-metadata/
24 | share/python-wheels/
25 | *.egg-info/
26 | .installed.cfg
27 | *.egg
28 | MANIFEST
29 |
30 | # PyInstaller
31 | # Usually these files are written by a python script from a template
32 | # before PyInstaller builds the exe, so as to inject date/other infos into it.
33 | *.manifest
34 | *.spec
35 |
36 | # Installer logs
37 | pip-log.txt
38 | pip-delete-this-directory.txt
39 |
40 | # Unit test / coverage reports
41 | htmlcov/
42 | .tox/
43 | .nox/
44 | .coverage
45 | .coverage.*
46 | .cache
47 | nosetests.xml
48 | coverage.xml
49 | *.cover
50 | *.py,cover
51 | .hypothesis/
52 | .pytest_cache/
53 |
54 | # Translations
55 | *.mo
56 | *.pot
57 |
58 | # Django stuff:
59 | *.log
60 | local_settings.py
61 | db.sqlite3
62 | db.sqlite3-journal
63 |
64 | # Flask stuff:
65 | instance/
66 | .webassets-cache
67 |
68 | # Scrapy stuff:
69 | .scrapy
70 |
71 | # Sphinx documentation
72 | docs/_build/
73 |
74 | # PyBuilder
75 | target/
76 |
77 | # Jupyter Notebook
78 | .ipynb_checkpoints
79 |
80 | # IPython
81 | profile_default/
82 | ipython_config.py
83 |
84 | # pyenv
85 | .python-version
86 |
87 | # pipenv
88 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
89 | # However, in case of collaboration, if having platform-specific dependencies or dependencies
90 | # having no cross-platform support, pipenv may install dependencies that don't work, or not
91 | # install all needed dependencies.
92 | #Pipfile.lock
93 |
94 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow
95 | __pypackages__/
96 |
97 | # Celery stuff
98 | celerybeat-schedule
99 | celerybeat.pid
100 |
101 | # SageMath parsed files
102 | *.sage.py
103 |
104 | # Environments
105 | .env
106 | .venv
107 | env/
108 | venv/
109 | ENV/
110 | env.bak/
111 | venv.bak/
112 |
113 | # Spyder project settings
114 | .spyderproject
115 | .spyproject
116 |
117 | # Rope project settings
118 | .ropeproject
119 |
120 | # mkdocs documentation
121 | /site
122 |
123 | # mypy
124 | .mypy_cache/
125 | .dmypy.json
126 | dmypy.json
127 |
128 | # Pyre type checker
129 | .pyre/
130 |
--------------------------------------------------------------------------------
/GradientBoosting.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "code",
5 | "execution_count": 2,
6 | "metadata": {},
7 | "outputs": [],
8 | "source": [
9 | "import pandas as pd\n",
10 | "import numpy as np\n",
11 | "import matplotlib.pyplot as plt\n",
12 | "import seaborn as sns\n",
13 | "import matplotlib.pyplot as plt\n",
14 | "\n",
15 | "import warnings\n",
16 | "warnings.filterwarnings(\"ignore\")\n",
17 | "warnings.simplefilter(action='ignore', category=FutureWarning)"
18 | ]
19 | },
20 | {
21 | "cell_type": "code",
22 | "execution_count": 3,
23 | "metadata": {},
24 | "outputs": [],
25 | "source": [
26 | "df_x = pd.read_csv(\"train_x.csv\")\n",
27 | "df_y = pd.read_csv(\"train_y.csv\")\n",
28 | "df_x1 = pd.read_csv(\"test_x.csv\")\n",
29 | "df_y1 = pd.read_csv(\"test_y.csv\")"
30 | ]
31 | },
32 | {
33 | "cell_type": "code",
34 | "execution_count": 4,
35 | "metadata": {},
36 | "outputs": [
37 | {
38 | "data": {
39 | "text/html": [
40 | "
\n",
41 | "\n",
54 | "
\n",
55 | " \n",
56 | " \n",
57 | " | \n",
58 | " Date | \n",
59 | " PM2.5 | \n",
60 | " PM10 | \n",
61 | " NO2 | \n",
62 | " NOx | \n",
63 | " CO | \n",
64 | " SO2 | \n",
65 | " O3 | \n",
66 | " temp | \n",
67 | " max_temp | \n",
68 | " min_temp | \n",
69 | " humid | \n",
70 | " visible | \n",
71 | " wind | \n",
72 | "
\n",
73 | " \n",
74 | " \n",
75 | " \n",
76 | " | 0 | \n",
77 | " 2016-01-01 | \n",
78 | " 56.40 | \n",
79 | " 95.08 | \n",
80 | " 51.73 | \n",
81 | " 34.31 | \n",
82 | " 0.69 | \n",
83 | " 7.44 | \n",
84 | " 55.96 | \n",
85 | " 20.1 | \n",
86 | " 28.4 | \n",
87 | " 15.7 | \n",
88 | " 54.0 | \n",
89 | " 6.0 | \n",
90 | " 3.0 | \n",
91 | "
\n",
92 | " \n",
93 | " | 1 | \n",
94 | " 2016-01-02 | \n",
95 | " 53.69 | \n",
96 | " 93.92 | \n",
97 | " 73.09 | \n",
98 | " 54.77 | \n",
99 | " 0.76 | \n",
100 | " 8.67 | \n",
101 | " 34.06 | \n",
102 | " 20.8 | \n",
103 | " 28.3 | \n",
104 | " 12.9 | \n",
105 | " 45.0 | \n",
106 | " 6.3 | \n",
107 | " 1.1 | \n",
108 | "
\n",
109 | " \n",
110 | " | 2 | \n",
111 | " 2016-01-03 | \n",
112 | " 62.35 | \n",
113 | " 99.34 | \n",
114 | " 77.77 | \n",
115 | " 55.60 | \n",
116 | " 0.96 | \n",
117 | " 9.10 | \n",
118 | " 47.62 | \n",
119 | " 21.4 | \n",
120 | " 29.0 | \n",
121 | " 13.7 | \n",
122 | " 45.0 | \n",
123 | " 6.3 | \n",
124 | " 0.4 | \n",
125 | "
\n",
126 | " \n",
127 | " | 3 | \n",
128 | " 2016-01-04 | \n",
129 | " 64.96 | \n",
130 | " 104.62 | \n",
131 | " 77.07 | \n",
132 | " 50.81 | \n",
133 | " 0.89 | \n",
134 | " 8.87 | \n",
135 | " 50.62 | \n",
136 | " 21.5 | \n",
137 | " 29.0 | \n",
138 | " 15.2 | \n",
139 | " 47.0 | \n",
140 | " 6.9 | \n",
141 | " 2.2 | \n",
142 | "
\n",
143 | " \n",
144 | " | 4 | \n",
145 | " 2016-01-05 | \n",
146 | " 70.15 | \n",
147 | " 105.12 | \n",
148 | " 79.43 | \n",
149 | " 56.05 | \n",
150 | " 0.85 | \n",
151 | " 9.41 | \n",
152 | " 36.94 | \n",
153 | " 20.9 | \n",
154 | " 28.4 | \n",
155 | " 14.7 | \n",
156 | " 51.0 | \n",
157 | " 6.3 | \n",
158 | " 1.1 | \n",
159 | "
\n",
160 | " \n",
161 | "
\n",
162 | "
"
163 | ],
164 | "text/plain": [
165 | " Date PM2.5 PM10 NO2 NOx CO SO2 O3 temp max_temp \\\n",
166 | "0 2016-01-01 56.40 95.08 51.73 34.31 0.69 7.44 55.96 20.1 28.4 \n",
167 | "1 2016-01-02 53.69 93.92 73.09 54.77 0.76 8.67 34.06 20.8 28.3 \n",
168 | "2 2016-01-03 62.35 99.34 77.77 55.60 0.96 9.10 47.62 21.4 29.0 \n",
169 | "3 2016-01-04 64.96 104.62 77.07 50.81 0.89 8.87 50.62 21.5 29.0 \n",
170 | "4 2016-01-05 70.15 105.12 79.43 56.05 0.85 9.41 36.94 20.9 28.4 \n",
171 | "\n",
172 | " min_temp humid visible wind \n",
173 | "0 15.7 54.0 6.0 3.0 \n",
174 | "1 12.9 45.0 6.3 1.1 \n",
175 | "2 13.7 45.0 6.3 0.4 \n",
176 | "3 15.2 47.0 6.9 2.2 \n",
177 | "4 14.7 51.0 6.3 1.1 "
178 | ]
179 | },
180 | "execution_count": 4,
181 | "metadata": {},
182 | "output_type": "execute_result"
183 | }
184 | ],
185 | "source": [
186 | "df_x.head(5)"
187 | ]
188 | },
189 | {
190 | "cell_type": "code",
191 | "execution_count": 5,
192 | "metadata": {},
193 | "outputs": [
194 | {
195 | "data": {
196 | "text/html": [
197 | "\n",
198 | "\n",
211 | "
\n",
212 | " \n",
213 | " \n",
214 | " | \n",
215 | " Date | \n",
216 | " PM2.5 | \n",
217 | " PM10 | \n",
218 | " NO2 | \n",
219 | " NOx | \n",
220 | " CO | \n",
221 | " SO2 | \n",
222 | " O3 | \n",
223 | " temp | \n",
224 | " max_temp | \n",
225 | " min_temp | \n",
226 | " humid | \n",
227 | " visible | \n",
228 | " wind | \n",
229 | "
\n",
230 | " \n",
231 | " \n",
232 | " \n",
233 | " | 0 | \n",
234 | " 01-01-2020 | \n",
235 | " 30.71 | \n",
236 | " 70.80 | \n",
237 | " 27.31 | \n",
238 | " 26.74 | \n",
239 | " 1.07 | \n",
240 | " 8.56 | \n",
241 | " 37.39 | \n",
242 | " 22.0 | \n",
243 | " 27.2 | \n",
244 | " 19.2 | \n",
245 | " 75 | \n",
246 | " 6.9 | \n",
247 | " 3.3 | \n",
248 | "
\n",
249 | " \n",
250 | " | 1 | \n",
251 | " 02-01-2020 | \n",
252 | " 25.78 | \n",
253 | " 62.73 | \n",
254 | " 28.05 | \n",
255 | " 30.18 | \n",
256 | " 1.16 | \n",
257 | " 7.52 | \n",
258 | " 33.11 | \n",
259 | " 22.2 | \n",
260 | " 26.0 | \n",
261 | " 19.4 | \n",
262 | " 77 | \n",
263 | " 5.5 | \n",
264 | " 2.0 | \n",
265 | "
\n",
266 | " \n",
267 | " | 2 | \n",
268 | " 03-01-2020 | \n",
269 | " 29.66 | \n",
270 | " 69.62 | \n",
271 | " 26.26 | \n",
272 | " 26.92 | \n",
273 | " 0.99 | \n",
274 | " 6.40 | \n",
275 | " 32.98 | \n",
276 | " 23.4 | \n",
277 | " 28.4 | \n",
278 | " 19.4 | \n",
279 | " 68 | \n",
280 | " 6.9 | \n",
281 | " 3.5 | \n",
282 | "
\n",
283 | " \n",
284 | " | 3 | \n",
285 | " 04-01-2020 | \n",
286 | " 52.62 | \n",
287 | " 106.81 | \n",
288 | " 31.56 | \n",
289 | " 41.89 | \n",
290 | " 1.39 | \n",
291 | " 6.94 | \n",
292 | " 37.35 | \n",
293 | " 23.6 | \n",
294 | " 30.5 | \n",
295 | " 19.0 | \n",
296 | " 63 | \n",
297 | " 6.3 | \n",
298 | " 1.3 | \n",
299 | "
\n",
300 | " \n",
301 | " | 4 | \n",
302 | " 05-01-2020 | \n",
303 | " 52.64 | \n",
304 | " 97.94 | \n",
305 | " 29.10 | \n",
306 | " 29.52 | \n",
307 | " 1.01 | \n",
308 | " 7.01 | \n",
309 | " 45.10 | \n",
310 | " 24.2 | \n",
311 | " 30.5 | \n",
312 | " 20.4 | \n",
313 | " 63 | \n",
314 | " 6.3 | \n",
315 | " 1.3 | \n",
316 | "
\n",
317 | " \n",
318 | "
\n",
319 | "
"
320 | ],
321 | "text/plain": [
322 | " Date PM2.5 PM10 NO2 NOx CO SO2 O3 temp max_temp \\\n",
323 | "0 01-01-2020 30.71 70.80 27.31 26.74 1.07 8.56 37.39 22.0 27.2 \n",
324 | "1 02-01-2020 25.78 62.73 28.05 30.18 1.16 7.52 33.11 22.2 26.0 \n",
325 | "2 03-01-2020 29.66 69.62 26.26 26.92 0.99 6.40 32.98 23.4 28.4 \n",
326 | "3 04-01-2020 52.62 106.81 31.56 41.89 1.39 6.94 37.35 23.6 30.5 \n",
327 | "4 05-01-2020 52.64 97.94 29.10 29.52 1.01 7.01 45.10 24.2 30.5 \n",
328 | "\n",
329 | " min_temp humid visible wind \n",
330 | "0 19.2 75 6.9 3.3 \n",
331 | "1 19.4 77 5.5 2.0 \n",
332 | "2 19.4 68 6.9 3.5 \n",
333 | "3 19.0 63 6.3 1.3 \n",
334 | "4 20.4 63 6.3 1.3 "
335 | ]
336 | },
337 | "execution_count": 5,
338 | "metadata": {},
339 | "output_type": "execute_result"
340 | }
341 | ],
342 | "source": [
343 | "df_x1.head(5)"
344 | ]
345 | },
346 | {
347 | "cell_type": "code",
348 | "execution_count": 6,
349 | "metadata": {},
350 | "outputs": [
351 | {
352 | "data": {
353 | "text/html": [
354 | "\n",
355 | "\n",
368 | "
\n",
369 | " \n",
370 | " \n",
371 | " | \n",
372 | " Date | \n",
373 | " AQI | \n",
374 | "
\n",
375 | " \n",
376 | " \n",
377 | " \n",
378 | " | 0 | \n",
379 | " 2016-01-01 | \n",
380 | " 101.0 | \n",
381 | "
\n",
382 | " \n",
383 | " | 1 | \n",
384 | " 2016-01-02 | \n",
385 | " 92.0 | \n",
386 | "
\n",
387 | " \n",
388 | " | 2 | \n",
389 | " 2016-01-03 | \n",
390 | " 108.0 | \n",
391 | "
\n",
392 | " \n",
393 | " | 3 | \n",
394 | " 2016-01-04 | \n",
395 | " 109.0 | \n",
396 | "
\n",
397 | " \n",
398 | " | 4 | \n",
399 | " 2016-01-05 | \n",
400 | " 114.0 | \n",
401 | "
\n",
402 | " \n",
403 | "
\n",
404 | "
"
405 | ],
406 | "text/plain": [
407 | " Date AQI\n",
408 | "0 2016-01-01 101.0\n",
409 | "1 2016-01-02 92.0\n",
410 | "2 2016-01-03 108.0\n",
411 | "3 2016-01-04 109.0\n",
412 | "4 2016-01-05 114.0"
413 | ]
414 | },
415 | "execution_count": 6,
416 | "metadata": {},
417 | "output_type": "execute_result"
418 | }
419 | ],
420 | "source": [
421 | "df_y.head(5)"
422 | ]
423 | },
424 | {
425 | "cell_type": "code",
426 | "execution_count": 7,
427 | "metadata": {},
428 | "outputs": [
429 | {
430 | "data": {
431 | "text/html": [
432 | "\n",
433 | "\n",
446 | "
\n",
447 | " \n",
448 | " \n",
449 | " | \n",
450 | " Date | \n",
451 | " AQI | \n",
452 | "
\n",
453 | " \n",
454 | " \n",
455 | " \n",
456 | " | 0 | \n",
457 | " 2020-01-01 | \n",
458 | " 82.0 | \n",
459 | "
\n",
460 | " \n",
461 | " | 1 | \n",
462 | " 2020-01-02 | \n",
463 | " 81.0 | \n",
464 | "
\n",
465 | " \n",
466 | " | 2 | \n",
467 | " 2020-01-03 | \n",
468 | " 85.0 | \n",
469 | "
\n",
470 | " \n",
471 | " | 3 | \n",
472 | " 2020-01-04 | \n",
473 | " 95.0 | \n",
474 | "
\n",
475 | " \n",
476 | " | 4 | \n",
477 | " 2020-01-05 | \n",
478 | " 118.0 | \n",
479 | "
\n",
480 | " \n",
481 | "
\n",
482 | "
"
483 | ],
484 | "text/plain": [
485 | " Date AQI\n",
486 | "0 2020-01-01 82.0\n",
487 | "1 2020-01-02 81.0\n",
488 | "2 2020-01-03 85.0\n",
489 | "3 2020-01-04 95.0\n",
490 | "4 2020-01-05 118.0"
491 | ]
492 | },
493 | "execution_count": 7,
494 | "metadata": {},
495 | "output_type": "execute_result"
496 | }
497 | ],
498 | "source": [
499 | "df_y1.head(5)"
500 | ]
501 | },
502 | {
503 | "cell_type": "code",
504 | "execution_count": 8,
505 | "metadata": {},
506 | "outputs": [
507 | {
508 | "name": "stdout",
509 | "output_type": "stream",
510 | "text": [
511 | "\n",
512 | "RangeIndex: 1441 entries, 0 to 1440\n",
513 | "Data columns (total 14 columns):\n",
514 | "Date 1441 non-null object\n",
515 | "PM2.5 1441 non-null float64\n",
516 | "PM10 1441 non-null float64\n",
517 | "NO2 1441 non-null float64\n",
518 | "NOx 1441 non-null float64\n",
519 | "CO 1441 non-null float64\n",
520 | "SO2 1441 non-null float64\n",
521 | "O3 1441 non-null float64\n",
522 | "temp 1441 non-null float64\n",
523 | "max_temp 1441 non-null float64\n",
524 | "min_temp 1441 non-null float64\n",
525 | "humid 1441 non-null float64\n",
526 | "visible 1441 non-null float64\n",
527 | "wind 1441 non-null float64\n",
528 | "dtypes: float64(13), object(1)\n",
529 | "memory usage: 157.7+ KB\n"
530 | ]
531 | }
532 | ],
533 | "source": [
534 | "df_x.info()"
535 | ]
536 | },
537 | {
538 | "cell_type": "code",
539 | "execution_count": 9,
540 | "metadata": {},
541 | "outputs": [
542 | {
543 | "name": "stdout",
544 | "output_type": "stream",
545 | "text": [
546 | "\n",
547 | "RangeIndex: 1441 entries, 0 to 1440\n",
548 | "Data columns (total 2 columns):\n",
549 | "Date 1441 non-null object\n",
550 | "AQI 1441 non-null float64\n",
551 | "dtypes: float64(1), object(1)\n",
552 | "memory usage: 22.6+ KB\n"
553 | ]
554 | }
555 | ],
556 | "source": [
557 | "df_y.info()"
558 | ]
559 | },
560 | {
561 | "cell_type": "code",
562 | "execution_count": 10,
563 | "metadata": {},
564 | "outputs": [
565 | {
566 | "name": "stdout",
567 | "output_type": "stream",
568 | "text": [
569 | "\n",
570 | "RangeIndex: 182 entries, 0 to 181\n",
571 | "Data columns (total 14 columns):\n",
572 | "Date 182 non-null object\n",
573 | "PM2.5 182 non-null float64\n",
574 | "PM10 182 non-null float64\n",
575 | "NO2 182 non-null float64\n",
576 | "NOx 182 non-null float64\n",
577 | "CO 182 non-null float64\n",
578 | "SO2 182 non-null float64\n",
579 | "O3 182 non-null float64\n",
580 | "temp 182 non-null float64\n",
581 | "max_temp 182 non-null float64\n",
582 | "min_temp 182 non-null float64\n",
583 | "humid 182 non-null int64\n",
584 | "visible 182 non-null float64\n",
585 | "wind 182 non-null float64\n",
586 | "dtypes: float64(12), int64(1), object(1)\n",
587 | "memory usage: 20.0+ KB\n"
588 | ]
589 | }
590 | ],
591 | "source": [
592 | "df_x1.info()"
593 | ]
594 | },
595 | {
596 | "cell_type": "code",
597 | "execution_count": 11,
598 | "metadata": {},
599 | "outputs": [
600 | {
601 | "name": "stdout",
602 | "output_type": "stream",
603 | "text": [
604 | "\n",
605 | "RangeIndex: 182 entries, 0 to 181\n",
606 | "Data columns (total 2 columns):\n",
607 | "Date 182 non-null object\n",
608 | "AQI 182 non-null float64\n",
609 | "dtypes: float64(1), object(1)\n",
610 | "memory usage: 2.9+ KB\n"
611 | ]
612 | }
613 | ],
614 | "source": [
615 | "df_y1.info()"
616 | ]
617 | },
618 | {
619 | "cell_type": "code",
620 | "execution_count": 12,
621 | "metadata": {},
622 | "outputs": [],
623 | "source": [
624 | "df_x[\"Date\"] = pd.to_datetime(df_x[\"Date\"])\n",
625 | "df_x1[\"Date\"] = pd.to_datetime(df_x[\"Date\"])"
626 | ]
627 | },
628 | {
629 | "cell_type": "code",
630 | "execution_count": 13,
631 | "metadata": {},
632 | "outputs": [
633 | {
634 | "name": "stdout",
635 | "output_type": "stream",
636 | "text": [
637 | "\n",
638 | "RangeIndex: 1441 entries, 0 to 1440\n",
639 | "Data columns (total 14 columns):\n",
640 | "Date 1441 non-null datetime64[ns]\n",
641 | "PM2.5 1441 non-null float64\n",
642 | "PM10 1441 non-null float64\n",
643 | "NO2 1441 non-null float64\n",
644 | "NOx 1441 non-null float64\n",
645 | "CO 1441 non-null float64\n",
646 | "SO2 1441 non-null float64\n",
647 | "O3 1441 non-null float64\n",
648 | "temp 1441 non-null float64\n",
649 | "max_temp 1441 non-null float64\n",
650 | "min_temp 1441 non-null float64\n",
651 | "humid 1441 non-null float64\n",
652 | "visible 1441 non-null float64\n",
653 | "wind 1441 non-null float64\n",
654 | "dtypes: datetime64[ns](1), float64(13)\n",
655 | "memory usage: 157.7 KB\n"
656 | ]
657 | }
658 | ],
659 | "source": [
660 | "df_x.info()"
661 | ]
662 | },
663 | {
664 | "cell_type": "code",
665 | "execution_count": 14,
666 | "metadata": {},
667 | "outputs": [
668 | {
669 | "name": "stdout",
670 | "output_type": "stream",
671 | "text": [
672 | "\n",
673 | "RangeIndex: 182 entries, 0 to 181\n",
674 | "Data columns (total 14 columns):\n",
675 | "Date 182 non-null datetime64[ns]\n",
676 | "PM2.5 182 non-null float64\n",
677 | "PM10 182 non-null float64\n",
678 | "NO2 182 non-null float64\n",
679 | "NOx 182 non-null float64\n",
680 | "CO 182 non-null float64\n",
681 | "SO2 182 non-null float64\n",
682 | "O3 182 non-null float64\n",
683 | "temp 182 non-null float64\n",
684 | "max_temp 182 non-null float64\n",
685 | "min_temp 182 non-null float64\n",
686 | "humid 182 non-null int64\n",
687 | "visible 182 non-null float64\n",
688 | "wind 182 non-null float64\n",
689 | "dtypes: datetime64[ns](1), float64(12), int64(1)\n",
690 | "memory usage: 20.0 KB\n"
691 | ]
692 | }
693 | ],
694 | "source": [
695 | "df_x1.info()"
696 | ]
697 | },
698 | {
699 | "cell_type": "code",
700 | "execution_count": 15,
701 | "metadata": {},
702 | "outputs": [
703 | {
704 | "data": {
705 | "text/plain": [
706 | ""
707 | ]
708 | },
709 | "execution_count": 15,
710 | "metadata": {},
711 | "output_type": "execute_result"
712 | },
713 | {
714 | "data": {
715 | "image/png": "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\n",
716 | "text/plain": [
717 | ""
718 | ]
719 | },
720 | "metadata": {
721 | "needs_background": "light"
722 | },
723 | "output_type": "display_data"
724 | }
725 | ],
726 | "source": [
727 | "sns.heatmap(df_x.isnull(),cbar=False, yticklabels=False)"
728 | ]
729 | },
730 | {
731 | "cell_type": "code",
732 | "execution_count": 16,
733 | "metadata": {},
734 | "outputs": [
735 | {
736 | "data": {
737 | "text/plain": [
738 | ""
739 | ]
740 | },
741 | "execution_count": 16,
742 | "metadata": {},
743 | "output_type": "execute_result"
744 | },
745 | {
746 | "data": {
747 | "image/png": "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\n",
748 | "text/plain": [
749 | ""
750 | ]
751 | },
752 | "metadata": {
753 | "needs_background": "light"
754 | },
755 | "output_type": "display_data"
756 | }
757 | ],
758 | "source": [
759 | "sns.heatmap(df_x1.isnull(),cbar=False, yticklabels=False)"
760 | ]
761 | },
762 | {
763 | "cell_type": "code",
764 | "execution_count": 17,
765 | "metadata": {},
766 | "outputs": [],
767 | "source": [
768 | "x_train = df_x.drop(['Date'], axis = 1)\n",
769 | "y_train = df_y[\"AQI\"]\n",
770 | "x_test = df_x1.drop(['Date'], axis = 1)\n",
771 | "y_test = df_y1[\"AQI\"]"
772 | ]
773 | },
774 | {
775 | "cell_type": "code",
776 | "execution_count": 18,
777 | "metadata": {},
778 | "outputs": [
779 | {
780 | "data": {
781 | "text/html": [
782 | "\n",
783 | "\n",
796 | "
\n",
797 | " \n",
798 | " \n",
799 | " | \n",
800 | " PM2.5 | \n",
801 | " PM10 | \n",
802 | " NO2 | \n",
803 | " NOx | \n",
804 | " CO | \n",
805 | " SO2 | \n",
806 | " O3 | \n",
807 | " temp | \n",
808 | " max_temp | \n",
809 | " min_temp | \n",
810 | " humid | \n",
811 | " visible | \n",
812 | " wind | \n",
813 | "
\n",
814 | " \n",
815 | " \n",
816 | " \n",
817 | " | 0 | \n",
818 | " 56.40 | \n",
819 | " 95.08 | \n",
820 | " 51.73 | \n",
821 | " 34.31 | \n",
822 | " 0.69 | \n",
823 | " 7.44 | \n",
824 | " 55.96 | \n",
825 | " 20.1 | \n",
826 | " 28.4 | \n",
827 | " 15.7 | \n",
828 | " 54.0 | \n",
829 | " 6.0 | \n",
830 | " 3.0 | \n",
831 | "
\n",
832 | " \n",
833 | " | 1 | \n",
834 | " 53.69 | \n",
835 | " 93.92 | \n",
836 | " 73.09 | \n",
837 | " 54.77 | \n",
838 | " 0.76 | \n",
839 | " 8.67 | \n",
840 | " 34.06 | \n",
841 | " 20.8 | \n",
842 | " 28.3 | \n",
843 | " 12.9 | \n",
844 | " 45.0 | \n",
845 | " 6.3 | \n",
846 | " 1.1 | \n",
847 | "
\n",
848 | " \n",
849 | " | 2 | \n",
850 | " 62.35 | \n",
851 | " 99.34 | \n",
852 | " 77.77 | \n",
853 | " 55.60 | \n",
854 | " 0.96 | \n",
855 | " 9.10 | \n",
856 | " 47.62 | \n",
857 | " 21.4 | \n",
858 | " 29.0 | \n",
859 | " 13.7 | \n",
860 | " 45.0 | \n",
861 | " 6.3 | \n",
862 | " 0.4 | \n",
863 | "
\n",
864 | " \n",
865 | " | 3 | \n",
866 | " 64.96 | \n",
867 | " 104.62 | \n",
868 | " 77.07 | \n",
869 | " 50.81 | \n",
870 | " 0.89 | \n",
871 | " 8.87 | \n",
872 | " 50.62 | \n",
873 | " 21.5 | \n",
874 | " 29.0 | \n",
875 | " 15.2 | \n",
876 | " 47.0 | \n",
877 | " 6.9 | \n",
878 | " 2.2 | \n",
879 | "
\n",
880 | " \n",
881 | " | 4 | \n",
882 | " 70.15 | \n",
883 | " 105.12 | \n",
884 | " 79.43 | \n",
885 | " 56.05 | \n",
886 | " 0.85 | \n",
887 | " 9.41 | \n",
888 | " 36.94 | \n",
889 | " 20.9 | \n",
890 | " 28.4 | \n",
891 | " 14.7 | \n",
892 | " 51.0 | \n",
893 | " 6.3 | \n",
894 | " 1.1 | \n",
895 | "
\n",
896 | " \n",
897 | "
\n",
898 | "
"
899 | ],
900 | "text/plain": [
901 | " PM2.5 PM10 NO2 NOx CO SO2 O3 temp max_temp min_temp \\\n",
902 | "0 56.40 95.08 51.73 34.31 0.69 7.44 55.96 20.1 28.4 15.7 \n",
903 | "1 53.69 93.92 73.09 54.77 0.76 8.67 34.06 20.8 28.3 12.9 \n",
904 | "2 62.35 99.34 77.77 55.60 0.96 9.10 47.62 21.4 29.0 13.7 \n",
905 | "3 64.96 104.62 77.07 50.81 0.89 8.87 50.62 21.5 29.0 15.2 \n",
906 | "4 70.15 105.12 79.43 56.05 0.85 9.41 36.94 20.9 28.4 14.7 \n",
907 | "\n",
908 | " humid visible wind \n",
909 | "0 54.0 6.0 3.0 \n",
910 | "1 45.0 6.3 1.1 \n",
911 | "2 45.0 6.3 0.4 \n",
912 | "3 47.0 6.9 2.2 \n",
913 | "4 51.0 6.3 1.1 "
914 | ]
915 | },
916 | "execution_count": 18,
917 | "metadata": {},
918 | "output_type": "execute_result"
919 | }
920 | ],
921 | "source": [
922 | "x_train.head(5)"
923 | ]
924 | },
925 | {
926 | "cell_type": "code",
927 | "execution_count": 19,
928 | "metadata": {},
929 | "outputs": [
930 | {
931 | "data": {
932 | "text/html": [
933 | "\n",
934 | "\n",
947 | "
\n",
948 | " \n",
949 | " \n",
950 | " | \n",
951 | " PM2.5 | \n",
952 | " PM10 | \n",
953 | " NO2 | \n",
954 | " NOx | \n",
955 | " CO | \n",
956 | " SO2 | \n",
957 | " O3 | \n",
958 | " temp | \n",
959 | " max_temp | \n",
960 | " min_temp | \n",
961 | " humid | \n",
962 | " visible | \n",
963 | " wind | \n",
964 | "
\n",
965 | " \n",
966 | " \n",
967 | " \n",
968 | " | 0 | \n",
969 | " 30.71 | \n",
970 | " 70.80 | \n",
971 | " 27.31 | \n",
972 | " 26.74 | \n",
973 | " 1.07 | \n",
974 | " 8.56 | \n",
975 | " 37.39 | \n",
976 | " 22.0 | \n",
977 | " 27.2 | \n",
978 | " 19.2 | \n",
979 | " 75 | \n",
980 | " 6.9 | \n",
981 | " 3.3 | \n",
982 | "
\n",
983 | " \n",
984 | " | 1 | \n",
985 | " 25.78 | \n",
986 | " 62.73 | \n",
987 | " 28.05 | \n",
988 | " 30.18 | \n",
989 | " 1.16 | \n",
990 | " 7.52 | \n",
991 | " 33.11 | \n",
992 | " 22.2 | \n",
993 | " 26.0 | \n",
994 | " 19.4 | \n",
995 | " 77 | \n",
996 | " 5.5 | \n",
997 | " 2.0 | \n",
998 | "
\n",
999 | " \n",
1000 | " | 2 | \n",
1001 | " 29.66 | \n",
1002 | " 69.62 | \n",
1003 | " 26.26 | \n",
1004 | " 26.92 | \n",
1005 | " 0.99 | \n",
1006 | " 6.40 | \n",
1007 | " 32.98 | \n",
1008 | " 23.4 | \n",
1009 | " 28.4 | \n",
1010 | " 19.4 | \n",
1011 | " 68 | \n",
1012 | " 6.9 | \n",
1013 | " 3.5 | \n",
1014 | "
\n",
1015 | " \n",
1016 | " | 3 | \n",
1017 | " 52.62 | \n",
1018 | " 106.81 | \n",
1019 | " 31.56 | \n",
1020 | " 41.89 | \n",
1021 | " 1.39 | \n",
1022 | " 6.94 | \n",
1023 | " 37.35 | \n",
1024 | " 23.6 | \n",
1025 | " 30.5 | \n",
1026 | " 19.0 | \n",
1027 | " 63 | \n",
1028 | " 6.3 | \n",
1029 | " 1.3 | \n",
1030 | "
\n",
1031 | " \n",
1032 | " | 4 | \n",
1033 | " 52.64 | \n",
1034 | " 97.94 | \n",
1035 | " 29.10 | \n",
1036 | " 29.52 | \n",
1037 | " 1.01 | \n",
1038 | " 7.01 | \n",
1039 | " 45.10 | \n",
1040 | " 24.2 | \n",
1041 | " 30.5 | \n",
1042 | " 20.4 | \n",
1043 | " 63 | \n",
1044 | " 6.3 | \n",
1045 | " 1.3 | \n",
1046 | "
\n",
1047 | " \n",
1048 | "
\n",
1049 | "
"
1050 | ],
1051 | "text/plain": [
1052 | " PM2.5 PM10 NO2 NOx CO SO2 O3 temp max_temp min_temp \\\n",
1053 | "0 30.71 70.80 27.31 26.74 1.07 8.56 37.39 22.0 27.2 19.2 \n",
1054 | "1 25.78 62.73 28.05 30.18 1.16 7.52 33.11 22.2 26.0 19.4 \n",
1055 | "2 29.66 69.62 26.26 26.92 0.99 6.40 32.98 23.4 28.4 19.4 \n",
1056 | "3 52.62 106.81 31.56 41.89 1.39 6.94 37.35 23.6 30.5 19.0 \n",
1057 | "4 52.64 97.94 29.10 29.52 1.01 7.01 45.10 24.2 30.5 20.4 \n",
1058 | "\n",
1059 | " humid visible wind \n",
1060 | "0 75 6.9 3.3 \n",
1061 | "1 77 5.5 2.0 \n",
1062 | "2 68 6.9 3.5 \n",
1063 | "3 63 6.3 1.3 \n",
1064 | "4 63 6.3 1.3 "
1065 | ]
1066 | },
1067 | "execution_count": 19,
1068 | "metadata": {},
1069 | "output_type": "execute_result"
1070 | }
1071 | ],
1072 | "source": [
1073 | "x_test.head(5)"
1074 | ]
1075 | },
1076 | {
1077 | "cell_type": "code",
1078 | "execution_count": 20,
1079 | "metadata": {},
1080 | "outputs": [
1081 | {
1082 | "data": {
1083 | "text/plain": [
1084 | "0 101.0\n",
1085 | "1 92.0\n",
1086 | "2 108.0\n",
1087 | "3 109.0\n",
1088 | "4 114.0\n",
1089 | "Name: AQI, dtype: float64"
1090 | ]
1091 | },
1092 | "execution_count": 20,
1093 | "metadata": {},
1094 | "output_type": "execute_result"
1095 | }
1096 | ],
1097 | "source": [
1098 | "y_train.head(5)"
1099 | ]
1100 | },
1101 | {
1102 | "cell_type": "code",
1103 | "execution_count": 21,
1104 | "metadata": {},
1105 | "outputs": [
1106 | {
1107 | "data": {
1108 | "text/plain": [
1109 | "0 82.0\n",
1110 | "1 81.0\n",
1111 | "2 85.0\n",
1112 | "3 95.0\n",
1113 | "4 118.0\n",
1114 | "Name: AQI, dtype: float64"
1115 | ]
1116 | },
1117 | "execution_count": 21,
1118 | "metadata": {},
1119 | "output_type": "execute_result"
1120 | }
1121 | ],
1122 | "source": [
1123 | "y_test.head(5)"
1124 | ]
1125 | },
1126 | {
1127 | "cell_type": "code",
1128 | "execution_count": 22,
1129 | "metadata": {},
1130 | "outputs": [],
1131 | "source": [
1132 | "from sklearn.preprocessing import StandardScaler, MinMaxScaler\n",
1133 | "sc_x = StandardScaler()\n",
1134 | "sc_y = StandardScaler()\n",
1135 | "x_train = sc_x.fit_transform(x_train)\n",
1136 | "x_test = sc_x.transform(x_test)\n",
1137 | "y_train = sc_y.fit_transform(np.array(y_train).reshape(-1,1))\n",
1138 | "y_test = sc_y.transform(np.array(y_test).reshape(-1,1))"
1139 | ]
1140 | },
1141 | {
1142 | "cell_type": "code",
1143 | "execution_count": 23,
1144 | "metadata": {},
1145 | "outputs": [
1146 | {
1147 | "data": {
1148 | "text/plain": [
1149 | "array([[-0.27610501],\n",
1150 | " [-0.30227705],\n",
1151 | " [-0.1975889 ],\n",
1152 | " [ 0.06413148],\n",
1153 | " [ 0.66608835]])"
1154 | ]
1155 | },
1156 | "execution_count": 23,
1157 | "metadata": {},
1158 | "output_type": "execute_result"
1159 | }
1160 | ],
1161 | "source": [
1162 | "y_test[:5]"
1163 | ]
1164 | },
1165 | {
1166 | "cell_type": "code",
1167 | "execution_count": 24,
1168 | "metadata": {},
1169 | "outputs": [
1170 | {
1171 | "data": {
1172 | "text/plain": [
1173 | "GradientBoostingRegressor(alpha=0.9, criterion='friedman_mse', init=None,\n",
1174 | " learning_rate=0.1, loss='ls', max_depth=3,\n",
1175 | " max_features=None, max_leaf_nodes=None,\n",
1176 | " min_impurity_decrease=0.0, min_impurity_split=None,\n",
1177 | " min_samples_leaf=1, min_samples_split=2,\n",
1178 | " min_weight_fraction_leaf=0.0, n_estimators=100,\n",
1179 | " n_iter_no_change=None, presort='auto',\n",
1180 | " random_state=None, subsample=1.0, tol=0.0001,\n",
1181 | " validation_fraction=0.1, verbose=0, warm_start=False)"
1182 | ]
1183 | },
1184 | "execution_count": 24,
1185 | "metadata": {},
1186 | "output_type": "execute_result"
1187 | }
1188 | ],
1189 | "source": [
1190 | "from sklearn.ensemble import GradientBoostingRegressor\n",
1191 | "regressor = GradientBoostingRegressor()\n",
1192 | "regressor.fit(x_train,y_train)"
1193 | ]
1194 | },
1195 | {
1196 | "cell_type": "code",
1197 | "execution_count": 25,
1198 | "metadata": {},
1199 | "outputs": [
1200 | {
1201 | "data": {
1202 | "text/plain": [
1203 | "array([-0.30664803, 0.02744575, -0.45522541, 0.56821673, 0.39152823,\n",
1204 | " -0.33634286, -0.45985512, -0.13761617, 0.21430141, 0.06167805,\n",
1205 | " -0.43960067, -0.05112361, 0.40469433, 0.91172871, 0.24935004,\n",
1206 | " 0.34019051, 0.25525236, -0.59217263, -0.56262186, -0.01497731,\n",
1207 | " 0.0695675 , -0.02144429, 0.04325328, 0.15946079, 0.18446 ,\n",
1208 | " 0.25582022, 0.30949316, 0.40278977, 0.4255181 , 0.2840163 ,\n",
1209 | " 0.42057773, 0.45941366, -0.24938813, -0.25418846, -0.42233104,\n",
1210 | " 0.11668701, 0.33066576, 0.29736599, 0.32064904, 0.40746019,\n",
1211 | " -0.16741748, -0.11139299, -0.30030267, 0.00940919, 0.52902124,\n",
1212 | " 0.71358506, 0.4200336 , 0.26898954, 0.4043111 , 0.51775921,\n",
1213 | " 0.24915816, -0.20381793, -0.32190889, 0.13897562, -0.13482573,\n",
1214 | " 0.45736285, 0.2023384 , 0.32740856, 0.14504189, 0.24373536,\n",
1215 | " 0.4673738 , 0.65162784, 1.76219074, 0.63494524, 0.62830402,\n",
1216 | " 0.30860789, 0.10367325, -0.05551396, 0.20358276, 0.30723921,\n",
1217 | " 0.29236797, 0.1460285 , -0.06520416, -0.35593281, 0.07230334,\n",
1218 | " -0.43199656, -0.50446128, -0.31805938, 0.44619972, 0.50666258,\n",
1219 | " 0.37658415, -0.03478484, 0.09924211, 0.2197565 , -0.86057172,\n",
1220 | " -0.94029625, -0.77387695, -0.65316783, -0.22228412, 0.1078362 ,\n",
1221 | " -0.12004117, -0.17820506, -0.07598379, -0.11422471, -0.05717854,\n",
1222 | " -0.63267181, -0.18355135, -0.35640078, -0.47804469, 0.18869273,\n",
1223 | " -0.64542504, -0.57419083, -0.55506317, -0.49390715, -0.42547427,\n",
1224 | " -0.48798456, -0.5072359 , -0.29127774, -0.49157359, -0.85665164,\n",
1225 | " -0.93764569, -0.76543852, -0.69058052, -0.60870061, -0.25151876,\n",
1226 | " -0.89037835, -0.64424282, -0.74117626, -0.55070149, -0.79329866,\n",
1227 | " -0.66968387, -0.56791011, -0.56984256, -0.48223239, -0.30810351,\n",
1228 | " -0.14926282, -0.44770745, -0.47163955, -0.72383692, -0.79947907,\n",
1229 | " -0.54709498, -0.4843061 , -0.86389296, -0.90695394, -0.61251399,\n",
1230 | " -0.81859382, -0.39373544, -0.30160905, -0.25753693, -0.82518774,\n",
1231 | " -0.91156371, -0.83574485, -0.63531245, -0.46670179, -0.58265605,\n",
1232 | " -0.63542767, -0.51736277, -0.46767405, -0.77992992, -0.80571348,\n",
1233 | " -0.8893096 , -0.7368831 , -1.12757017, -1.29664219, -1.33817791,\n",
1234 | " -1.12177791, -0.85475676, -0.83829278, -1.06097844, -0.87068831,\n",
1235 | " -0.83739172, -0.78359487, -1.05402323, -1.15873018, -0.97677208,\n",
1236 | " -1.1738632 , -1.08756149, -0.87845 , -1.05953758, -0.89726162,\n",
1237 | " -0.92808345, -1.07917673, -1.09615972, -1.04304939, -0.91874159,\n",
1238 | " -0.85788747, -0.96075367, -1.11091323, -1.15244895, -1.11325572,\n",
1239 | " -1.02376198, -1.1516053 ])"
1240 | ]
1241 | },
1242 | "execution_count": 25,
1243 | "metadata": {},
1244 | "output_type": "execute_result"
1245 | }
1246 | ],
1247 | "source": [
1248 | "y_prediction = regressor.predict(x_test)\n",
1249 | "y_prediction "
1250 | ]
1251 | },
1252 | {
1253 | "cell_type": "code",
1254 | "execution_count": 26,
1255 | "metadata": {},
1256 | "outputs": [
1257 | {
1258 | "name": "stdout",
1259 | "output_type": "stream",
1260 | "text": [
1261 | "R2 SCORE is 0.770856636180251\n",
1262 | "mean_sqrd_error is 0.058365602156151296\n",
1263 | "Root mean squared error of is 0.24158973934368838\n",
1264 | "Mean Absolute error is 0.1872874239791087\n"
1265 | ]
1266 | }
1267 | ],
1268 | "source": [
1269 | "from sklearn.metrics import r2_score\n",
1270 | "from sklearn.metrics import mean_squared_error\n",
1271 | "from sklearn.metrics import mean_absolute_error\n",
1272 | "score = r2_score(y_test,y_prediction)\n",
1273 | "mean_error = mean_squared_error(y_test,y_prediction)\n",
1274 | "mae = mean_absolute_error(y_test,y_prediction)\n",
1275 | "print(\"R2 SCORE is\", score)\n",
1276 | "print(\"mean_sqrd_error is \", mean_error)\n",
1277 | "print(\"Root mean squared error of is\",np.sqrt(mean_error))\n",
1278 | "print(\"Mean Absolute error is\", mae)"
1279 | ]
1280 | },
1281 | {
1282 | "cell_type": "code",
1283 | "execution_count": 27,
1284 | "metadata": {},
1285 | "outputs": [
1286 | {
1287 | "data": {
1288 | "text/plain": [
1289 | "array([[ 82.],\n",
1290 | " [ 81.],\n",
1291 | " [ 85.],\n",
1292 | " [ 95.],\n",
1293 | " [118.]])"
1294 | ]
1295 | },
1296 | "execution_count": 27,
1297 | "metadata": {},
1298 | "output_type": "execute_result"
1299 | }
1300 | ],
1301 | "source": [
1302 | "y_test = sc_y.inverse_transform(y_test)\n",
1303 | "y_test[:5]"
1304 | ]
1305 | },
1306 | {
1307 | "cell_type": "code",
1308 | "execution_count": 28,
1309 | "metadata": {},
1310 | "outputs": [
1311 | {
1312 | "data": {
1313 | "text/plain": [
1314 | "array([ 80.83299016, 93.59828519, 75.15603902, 114.26045103,\n",
1315 | " 107.50940979])"
1316 | ]
1317 | },
1318 | "execution_count": 28,
1319 | "metadata": {},
1320 | "output_type": "execute_result"
1321 | }
1322 | ],
1323 | "source": [
1324 | "y_prediction = sc_y.inverse_transform(y_prediction)\n",
1325 | "y_prediction[:5]"
1326 | ]
1327 | },
1328 | {
1329 | "cell_type": "code",
1330 | "execution_count": 29,
1331 | "metadata": {},
1332 | "outputs": [
1333 | {
1334 | "data": {
1335 | "image/png": "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\n",
1336 | "text/plain": [
1337 | ""
1338 | ]
1339 | },
1340 | "metadata": {
1341 | "needs_background": "light"
1342 | },
1343 | "output_type": "display_data"
1344 | }
1345 | ],
1346 | "source": [
1347 | "df1 = pd.DataFrame({'Actual': y_test[100:120].flatten(), 'Predicted': y_prediction[100:120].flatten()})\n",
1348 | "df1.plot(kind='line')\n",
1349 | "plt.grid(which='major', linestyle='-', linewidth='0.5', color='green')\n",
1350 | "plt.grid(which='minor', linestyle=':', linewidth='0.5', color='black')\n",
1351 | "plt.show()"
1352 | ]
1353 | },
1354 | {
1355 | "cell_type": "code",
1356 | "execution_count": 30,
1357 | "metadata": {},
1358 | "outputs": [
1359 | {
1360 | "data": {
1361 | "text/html": [
1362 | "\n",
1363 | "\n",
1376 | "
\n",
1377 | " \n",
1378 | " \n",
1379 | " | \n",
1380 | " ACTUAL AQI | \n",
1381 | " PREDICTED AQI | \n",
1382 | " DIFFERNCE | \n",
1383 | " PERCENTAGE ERROR | \n",
1384 | "
\n",
1385 | " \n",
1386 | " \n",
1387 | " \n",
1388 | " | 0 | \n",
1389 | " 82.0 | \n",
1390 | " 80.832990 | \n",
1391 | " 1.167010 | \n",
1392 | " 1.423183 | \n",
1393 | "
\n",
1394 | " \n",
1395 | " | 1 | \n",
1396 | " 81.0 | \n",
1397 | " 93.598285 | \n",
1398 | " -12.598285 | \n",
1399 | " 15.553439 | \n",
1400 | "
\n",
1401 | " \n",
1402 | " | 2 | \n",
1403 | " 85.0 | \n",
1404 | " 75.156039 | \n",
1405 | " 9.843961 | \n",
1406 | " 11.581131 | \n",
1407 | "
\n",
1408 | " \n",
1409 | " | 3 | \n",
1410 | " 95.0 | \n",
1411 | " 114.260451 | \n",
1412 | " -19.260451 | \n",
1413 | " 20.274159 | \n",
1414 | "
\n",
1415 | " \n",
1416 | " | 4 | \n",
1417 | " 118.0 | \n",
1418 | " 107.509410 | \n",
1419 | " 10.490590 | \n",
1420 | " 8.890331 | \n",
1421 | "
\n",
1422 | " \n",
1423 | " | 5 | \n",
1424 | " 81.0 | \n",
1425 | " 79.698389 | \n",
1426 | " 1.301611 | \n",
1427 | " 1.606927 | \n",
1428 | "
\n",
1429 | " \n",
1430 | " | 6 | \n",
1431 | " 75.0 | \n",
1432 | " 74.979144 | \n",
1433 | " 0.020856 | \n",
1434 | " 0.027808 | \n",
1435 | "
\n",
1436 | " \n",
1437 | " | 7 | \n",
1438 | " 93.0 | \n",
1439 | " 87.291481 | \n",
1440 | " 5.708519 | \n",
1441 | " 6.138193 | \n",
1442 | "
\n",
1443 | " \n",
1444 | " | 8 | \n",
1445 | " 101.0 | \n",
1446 | " 100.737800 | \n",
1447 | " 0.262200 | \n",
1448 | " 0.259604 | \n",
1449 | "
\n",
1450 | " \n",
1451 | " | 9 | \n",
1452 | " 94.0 | \n",
1453 | " 94.906258 | \n",
1454 | " -0.906258 | \n",
1455 | " 0.964104 | \n",
1456 | "
\n",
1457 | " \n",
1458 | " | 10 | \n",
1459 | " 78.0 | \n",
1460 | " 75.753040 | \n",
1461 | " 2.246960 | \n",
1462 | " 2.880717 | \n",
1463 | "
\n",
1464 | " \n",
1465 | " | 11 | \n",
1466 | " 79.0 | \n",
1467 | " 90.596251 | \n",
1468 | " -11.596251 | \n",
1469 | " 14.678798 | \n",
1470 | "
\n",
1471 | " \n",
1472 | " | 12 | \n",
1473 | " 106.0 | \n",
1474 | " 108.012470 | \n",
1475 | " -2.012470 | \n",
1476 | " 1.898556 | \n",
1477 | "
\n",
1478 | " \n",
1479 | " | 13 | \n",
1480 | " 121.0 | \n",
1481 | " 127.385603 | \n",
1482 | " -6.385603 | \n",
1483 | " 5.277358 | \n",
1484 | "
\n",
1485 | " \n",
1486 | " | 14 | \n",
1487 | " 111.0 | \n",
1488 | " 102.076964 | \n",
1489 | " 8.923036 | \n",
1490 | " 8.038772 | \n",
1491 | "
\n",
1492 | " \n",
1493 | "
\n",
1494 | "
"
1495 | ],
1496 | "text/plain": [
1497 | " ACTUAL AQI PREDICTED AQI DIFFERNCE PERCENTAGE ERROR\n",
1498 | "0 82.0 80.832990 1.167010 1.423183\n",
1499 | "1 81.0 93.598285 -12.598285 15.553439\n",
1500 | "2 85.0 75.156039 9.843961 11.581131\n",
1501 | "3 95.0 114.260451 -19.260451 20.274159\n",
1502 | "4 118.0 107.509410 10.490590 8.890331\n",
1503 | "5 81.0 79.698389 1.301611 1.606927\n",
1504 | "6 75.0 74.979144 0.020856 0.027808\n",
1505 | "7 93.0 87.291481 5.708519 6.138193\n",
1506 | "8 101.0 100.737800 0.262200 0.259604\n",
1507 | "9 94.0 94.906258 -0.906258 0.964104\n",
1508 | "10 78.0 75.753040 2.246960 2.880717\n",
1509 | "11 79.0 90.596251 -11.596251 14.678798\n",
1510 | "12 106.0 108.012470 -2.012470 1.898556\n",
1511 | "13 121.0 127.385603 -6.385603 5.277358\n",
1512 | "14 111.0 102.076964 8.923036 8.038772"
1513 | ]
1514 | },
1515 | "execution_count": 30,
1516 | "metadata": {},
1517 | "output_type": "execute_result"
1518 | }
1519 | ],
1520 | "source": [
1521 | "result = pd.DataFrame()\n",
1522 | "result[\"ACTUAL AQI\"] = y_test.flatten()\n",
1523 | "result[\"PREDICTED AQI\"] = y_prediction\n",
1524 | "result[\"DIFFERNCE\"] = result[\"ACTUAL AQI\"] - result[\"PREDICTED AQI\"]\n",
1525 | "result[\"PERCENTAGE ERROR\"] = ( abs(result[\"ACTUAL AQI\"] - result[\"PREDICTED AQI\"] ) / result[\"ACTUAL AQI\"] ) * 100\n",
1526 | "result.head(15)"
1527 | ]
1528 | },
1529 | {
1530 | "cell_type": "code",
1531 | "execution_count": null,
1532 | "metadata": {},
1533 | "outputs": [],
1534 | "source": []
1535 | }
1536 | ],
1537 | "metadata": {
1538 | "kernelspec": {
1539 | "display_name": "Python 3",
1540 | "language": "python",
1541 | "name": "python3"
1542 | },
1543 | "language_info": {
1544 | "codemirror_mode": {
1545 | "name": "ipython",
1546 | "version": 3
1547 | },
1548 | "file_extension": ".py",
1549 | "mimetype": "text/x-python",
1550 | "name": "python",
1551 | "nbconvert_exporter": "python",
1552 | "pygments_lexer": "ipython3",
1553 | "version": "3.7.3"
1554 | }
1555 | },
1556 | "nbformat": 4,
1557 | "nbformat_minor": 2
1558 | }
1559 |
--------------------------------------------------------------------------------
/SVR.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "code",
5 | "execution_count": 1,
6 | "metadata": {},
7 | "outputs": [],
8 | "source": [
9 | "import pandas as pd\n",
10 | "import numpy as np\n",
11 | "import matplotlib.pyplot as plt\n",
12 | "import seaborn as sns\n",
13 | "import matplotlib.pyplot as plt\n",
14 | "\n",
15 | "import warnings\n",
16 | "warnings.filterwarnings(\"ignore\")\n",
17 | "warnings.simplefilter(action='ignore', category=FutureWarning)"
18 | ]
19 | },
20 | {
21 | "cell_type": "code",
22 | "execution_count": 2,
23 | "metadata": {},
24 | "outputs": [],
25 | "source": [
26 | "df_x = pd.read_csv(\"train_x.csv\")\n",
27 | "df_y = pd.read_csv(\"train_y.csv\")\n",
28 | "df_x1 = pd.read_csv(\"test_x.csv\")\n",
29 | "df_y1 = pd.read_csv(\"test_y.csv\")"
30 | ]
31 | },
32 | {
33 | "cell_type": "code",
34 | "execution_count": 3,
35 | "metadata": {},
36 | "outputs": [
37 | {
38 | "data": {
39 | "text/html": [
40 | "\n",
41 | "\n",
54 | "
\n",
55 | " \n",
56 | " \n",
57 | " | \n",
58 | " Date | \n",
59 | " PM2.5 | \n",
60 | " PM10 | \n",
61 | " NO2 | \n",
62 | " NOx | \n",
63 | " CO | \n",
64 | " SO2 | \n",
65 | " O3 | \n",
66 | " temp | \n",
67 | " max_temp | \n",
68 | " min_temp | \n",
69 | " humid | \n",
70 | " visible | \n",
71 | " wind | \n",
72 | "
\n",
73 | " \n",
74 | " \n",
75 | " \n",
76 | " | 0 | \n",
77 | " 2016-01-01 | \n",
78 | " 56.40 | \n",
79 | " 95.08 | \n",
80 | " 51.73 | \n",
81 | " 34.31 | \n",
82 | " 0.69 | \n",
83 | " 7.44 | \n",
84 | " 55.96 | \n",
85 | " 20.1 | \n",
86 | " 28.4 | \n",
87 | " 15.7 | \n",
88 | " 54.0 | \n",
89 | " 6.0 | \n",
90 | " 3.0 | \n",
91 | "
\n",
92 | " \n",
93 | " | 1 | \n",
94 | " 2016-01-02 | \n",
95 | " 53.69 | \n",
96 | " 93.92 | \n",
97 | " 73.09 | \n",
98 | " 54.77 | \n",
99 | " 0.76 | \n",
100 | " 8.67 | \n",
101 | " 34.06 | \n",
102 | " 20.8 | \n",
103 | " 28.3 | \n",
104 | " 12.9 | \n",
105 | " 45.0 | \n",
106 | " 6.3 | \n",
107 | " 1.1 | \n",
108 | "
\n",
109 | " \n",
110 | " | 2 | \n",
111 | " 2016-01-03 | \n",
112 | " 62.35 | \n",
113 | " 99.34 | \n",
114 | " 77.77 | \n",
115 | " 55.60 | \n",
116 | " 0.96 | \n",
117 | " 9.10 | \n",
118 | " 47.62 | \n",
119 | " 21.4 | \n",
120 | " 29.0 | \n",
121 | " 13.7 | \n",
122 | " 45.0 | \n",
123 | " 6.3 | \n",
124 | " 0.4 | \n",
125 | "
\n",
126 | " \n",
127 | " | 3 | \n",
128 | " 2016-01-04 | \n",
129 | " 64.96 | \n",
130 | " 104.62 | \n",
131 | " 77.07 | \n",
132 | " 50.81 | \n",
133 | " 0.89 | \n",
134 | " 8.87 | \n",
135 | " 50.62 | \n",
136 | " 21.5 | \n",
137 | " 29.0 | \n",
138 | " 15.2 | \n",
139 | " 47.0 | \n",
140 | " 6.9 | \n",
141 | " 2.2 | \n",
142 | "
\n",
143 | " \n",
144 | " | 4 | \n",
145 | " 2016-01-05 | \n",
146 | " 70.15 | \n",
147 | " 105.12 | \n",
148 | " 79.43 | \n",
149 | " 56.05 | \n",
150 | " 0.85 | \n",
151 | " 9.41 | \n",
152 | " 36.94 | \n",
153 | " 20.9 | \n",
154 | " 28.4 | \n",
155 | " 14.7 | \n",
156 | " 51.0 | \n",
157 | " 6.3 | \n",
158 | " 1.1 | \n",
159 | "
\n",
160 | " \n",
161 | "
\n",
162 | "
"
163 | ],
164 | "text/plain": [
165 | " Date PM2.5 PM10 NO2 NOx CO SO2 O3 temp max_temp \\\n",
166 | "0 2016-01-01 56.40 95.08 51.73 34.31 0.69 7.44 55.96 20.1 28.4 \n",
167 | "1 2016-01-02 53.69 93.92 73.09 54.77 0.76 8.67 34.06 20.8 28.3 \n",
168 | "2 2016-01-03 62.35 99.34 77.77 55.60 0.96 9.10 47.62 21.4 29.0 \n",
169 | "3 2016-01-04 64.96 104.62 77.07 50.81 0.89 8.87 50.62 21.5 29.0 \n",
170 | "4 2016-01-05 70.15 105.12 79.43 56.05 0.85 9.41 36.94 20.9 28.4 \n",
171 | "\n",
172 | " min_temp humid visible wind \n",
173 | "0 15.7 54.0 6.0 3.0 \n",
174 | "1 12.9 45.0 6.3 1.1 \n",
175 | "2 13.7 45.0 6.3 0.4 \n",
176 | "3 15.2 47.0 6.9 2.2 \n",
177 | "4 14.7 51.0 6.3 1.1 "
178 | ]
179 | },
180 | "execution_count": 3,
181 | "metadata": {},
182 | "output_type": "execute_result"
183 | }
184 | ],
185 | "source": [
186 | "df_x.head(5)"
187 | ]
188 | },
189 | {
190 | "cell_type": "code",
191 | "execution_count": 4,
192 | "metadata": {},
193 | "outputs": [
194 | {
195 | "data": {
196 | "text/html": [
197 | "\n",
198 | "\n",
211 | "
\n",
212 | " \n",
213 | " \n",
214 | " | \n",
215 | " Date | \n",
216 | " PM2.5 | \n",
217 | " PM10 | \n",
218 | " NO2 | \n",
219 | " NOx | \n",
220 | " CO | \n",
221 | " SO2 | \n",
222 | " O3 | \n",
223 | " temp | \n",
224 | " max_temp | \n",
225 | " min_temp | \n",
226 | " humid | \n",
227 | " visible | \n",
228 | " wind | \n",
229 | "
\n",
230 | " \n",
231 | " \n",
232 | " \n",
233 | " | 0 | \n",
234 | " 01-01-2020 | \n",
235 | " 30.71 | \n",
236 | " 70.80 | \n",
237 | " 27.31 | \n",
238 | " 26.74 | \n",
239 | " 1.07 | \n",
240 | " 8.56 | \n",
241 | " 37.39 | \n",
242 | " 22.0 | \n",
243 | " 27.2 | \n",
244 | " 19.2 | \n",
245 | " 75 | \n",
246 | " 6.9 | \n",
247 | " 3.3 | \n",
248 | "
\n",
249 | " \n",
250 | " | 1 | \n",
251 | " 02-01-2020 | \n",
252 | " 25.78 | \n",
253 | " 62.73 | \n",
254 | " 28.05 | \n",
255 | " 30.18 | \n",
256 | " 1.16 | \n",
257 | " 7.52 | \n",
258 | " 33.11 | \n",
259 | " 22.2 | \n",
260 | " 26.0 | \n",
261 | " 19.4 | \n",
262 | " 77 | \n",
263 | " 5.5 | \n",
264 | " 2.0 | \n",
265 | "
\n",
266 | " \n",
267 | " | 2 | \n",
268 | " 03-01-2020 | \n",
269 | " 29.66 | \n",
270 | " 69.62 | \n",
271 | " 26.26 | \n",
272 | " 26.92 | \n",
273 | " 0.99 | \n",
274 | " 6.40 | \n",
275 | " 32.98 | \n",
276 | " 23.4 | \n",
277 | " 28.4 | \n",
278 | " 19.4 | \n",
279 | " 68 | \n",
280 | " 6.9 | \n",
281 | " 3.5 | \n",
282 | "
\n",
283 | " \n",
284 | " | 3 | \n",
285 | " 04-01-2020 | \n",
286 | " 52.62 | \n",
287 | " 106.81 | \n",
288 | " 31.56 | \n",
289 | " 41.89 | \n",
290 | " 1.39 | \n",
291 | " 6.94 | \n",
292 | " 37.35 | \n",
293 | " 23.6 | \n",
294 | " 30.5 | \n",
295 | " 19.0 | \n",
296 | " 63 | \n",
297 | " 6.3 | \n",
298 | " 1.3 | \n",
299 | "
\n",
300 | " \n",
301 | " | 4 | \n",
302 | " 05-01-2020 | \n",
303 | " 52.64 | \n",
304 | " 97.94 | \n",
305 | " 29.10 | \n",
306 | " 29.52 | \n",
307 | " 1.01 | \n",
308 | " 7.01 | \n",
309 | " 45.10 | \n",
310 | " 24.2 | \n",
311 | " 30.5 | \n",
312 | " 20.4 | \n",
313 | " 63 | \n",
314 | " 6.3 | \n",
315 | " 1.3 | \n",
316 | "
\n",
317 | " \n",
318 | "
\n",
319 | "
"
320 | ],
321 | "text/plain": [
322 | " Date PM2.5 PM10 NO2 NOx CO SO2 O3 temp max_temp \\\n",
323 | "0 01-01-2020 30.71 70.80 27.31 26.74 1.07 8.56 37.39 22.0 27.2 \n",
324 | "1 02-01-2020 25.78 62.73 28.05 30.18 1.16 7.52 33.11 22.2 26.0 \n",
325 | "2 03-01-2020 29.66 69.62 26.26 26.92 0.99 6.40 32.98 23.4 28.4 \n",
326 | "3 04-01-2020 52.62 106.81 31.56 41.89 1.39 6.94 37.35 23.6 30.5 \n",
327 | "4 05-01-2020 52.64 97.94 29.10 29.52 1.01 7.01 45.10 24.2 30.5 \n",
328 | "\n",
329 | " min_temp humid visible wind \n",
330 | "0 19.2 75 6.9 3.3 \n",
331 | "1 19.4 77 5.5 2.0 \n",
332 | "2 19.4 68 6.9 3.5 \n",
333 | "3 19.0 63 6.3 1.3 \n",
334 | "4 20.4 63 6.3 1.3 "
335 | ]
336 | },
337 | "execution_count": 4,
338 | "metadata": {},
339 | "output_type": "execute_result"
340 | }
341 | ],
342 | "source": [
343 | "df_x1.head(5)"
344 | ]
345 | },
346 | {
347 | "cell_type": "code",
348 | "execution_count": 5,
349 | "metadata": {},
350 | "outputs": [
351 | {
352 | "data": {
353 | "text/html": [
354 | "\n",
355 | "\n",
368 | "
\n",
369 | " \n",
370 | " \n",
371 | " | \n",
372 | " Date | \n",
373 | " AQI | \n",
374 | "
\n",
375 | " \n",
376 | " \n",
377 | " \n",
378 | " | 0 | \n",
379 | " 2016-01-01 | \n",
380 | " 101.0 | \n",
381 | "
\n",
382 | " \n",
383 | " | 1 | \n",
384 | " 2016-01-02 | \n",
385 | " 92.0 | \n",
386 | "
\n",
387 | " \n",
388 | " | 2 | \n",
389 | " 2016-01-03 | \n",
390 | " 108.0 | \n",
391 | "
\n",
392 | " \n",
393 | " | 3 | \n",
394 | " 2016-01-04 | \n",
395 | " 109.0 | \n",
396 | "
\n",
397 | " \n",
398 | " | 4 | \n",
399 | " 2016-01-05 | \n",
400 | " 114.0 | \n",
401 | "
\n",
402 | " \n",
403 | "
\n",
404 | "
"
405 | ],
406 | "text/plain": [
407 | " Date AQI\n",
408 | "0 2016-01-01 101.0\n",
409 | "1 2016-01-02 92.0\n",
410 | "2 2016-01-03 108.0\n",
411 | "3 2016-01-04 109.0\n",
412 | "4 2016-01-05 114.0"
413 | ]
414 | },
415 | "execution_count": 5,
416 | "metadata": {},
417 | "output_type": "execute_result"
418 | }
419 | ],
420 | "source": [
421 | "df_y.head(5)"
422 | ]
423 | },
424 | {
425 | "cell_type": "code",
426 | "execution_count": 6,
427 | "metadata": {},
428 | "outputs": [
429 | {
430 | "data": {
431 | "text/html": [
432 | "\n",
433 | "\n",
446 | "
\n",
447 | " \n",
448 | " \n",
449 | " | \n",
450 | " Date | \n",
451 | " AQI | \n",
452 | "
\n",
453 | " \n",
454 | " \n",
455 | " \n",
456 | " | 0 | \n",
457 | " 2020-01-01 | \n",
458 | " 82.0 | \n",
459 | "
\n",
460 | " \n",
461 | " | 1 | \n",
462 | " 2020-01-02 | \n",
463 | " 81.0 | \n",
464 | "
\n",
465 | " \n",
466 | " | 2 | \n",
467 | " 2020-01-03 | \n",
468 | " 85.0 | \n",
469 | "
\n",
470 | " \n",
471 | " | 3 | \n",
472 | " 2020-01-04 | \n",
473 | " 95.0 | \n",
474 | "
\n",
475 | " \n",
476 | " | 4 | \n",
477 | " 2020-01-05 | \n",
478 | " 118.0 | \n",
479 | "
\n",
480 | " \n",
481 | "
\n",
482 | "
"
483 | ],
484 | "text/plain": [
485 | " Date AQI\n",
486 | "0 2020-01-01 82.0\n",
487 | "1 2020-01-02 81.0\n",
488 | "2 2020-01-03 85.0\n",
489 | "3 2020-01-04 95.0\n",
490 | "4 2020-01-05 118.0"
491 | ]
492 | },
493 | "execution_count": 6,
494 | "metadata": {},
495 | "output_type": "execute_result"
496 | }
497 | ],
498 | "source": [
499 | "df_y1.head(5)"
500 | ]
501 | },
502 | {
503 | "cell_type": "code",
504 | "execution_count": 7,
505 | "metadata": {},
506 | "outputs": [
507 | {
508 | "name": "stdout",
509 | "output_type": "stream",
510 | "text": [
511 | "\n",
512 | "RangeIndex: 1441 entries, 0 to 1440\n",
513 | "Data columns (total 14 columns):\n",
514 | "Date 1441 non-null object\n",
515 | "PM2.5 1441 non-null float64\n",
516 | "PM10 1441 non-null float64\n",
517 | "NO2 1441 non-null float64\n",
518 | "NOx 1441 non-null float64\n",
519 | "CO 1441 non-null float64\n",
520 | "SO2 1441 non-null float64\n",
521 | "O3 1441 non-null float64\n",
522 | "temp 1441 non-null float64\n",
523 | "max_temp 1441 non-null float64\n",
524 | "min_temp 1441 non-null float64\n",
525 | "humid 1441 non-null float64\n",
526 | "visible 1441 non-null float64\n",
527 | "wind 1441 non-null float64\n",
528 | "dtypes: float64(13), object(1)\n",
529 | "memory usage: 157.7+ KB\n"
530 | ]
531 | }
532 | ],
533 | "source": [
534 | "df_x.info()"
535 | ]
536 | },
537 | {
538 | "cell_type": "code",
539 | "execution_count": 8,
540 | "metadata": {},
541 | "outputs": [
542 | {
543 | "name": "stdout",
544 | "output_type": "stream",
545 | "text": [
546 | "\n",
547 | "RangeIndex: 1441 entries, 0 to 1440\n",
548 | "Data columns (total 2 columns):\n",
549 | "Date 1441 non-null object\n",
550 | "AQI 1441 non-null float64\n",
551 | "dtypes: float64(1), object(1)\n",
552 | "memory usage: 22.6+ KB\n"
553 | ]
554 | }
555 | ],
556 | "source": [
557 | "df_y.info()"
558 | ]
559 | },
560 | {
561 | "cell_type": "code",
562 | "execution_count": 9,
563 | "metadata": {},
564 | "outputs": [
565 | {
566 | "name": "stdout",
567 | "output_type": "stream",
568 | "text": [
569 | "\n",
570 | "RangeIndex: 182 entries, 0 to 181\n",
571 | "Data columns (total 14 columns):\n",
572 | "Date 182 non-null object\n",
573 | "PM2.5 182 non-null float64\n",
574 | "PM10 182 non-null float64\n",
575 | "NO2 182 non-null float64\n",
576 | "NOx 182 non-null float64\n",
577 | "CO 182 non-null float64\n",
578 | "SO2 182 non-null float64\n",
579 | "O3 182 non-null float64\n",
580 | "temp 182 non-null float64\n",
581 | "max_temp 182 non-null float64\n",
582 | "min_temp 182 non-null float64\n",
583 | "humid 182 non-null int64\n",
584 | "visible 182 non-null float64\n",
585 | "wind 182 non-null float64\n",
586 | "dtypes: float64(12), int64(1), object(1)\n",
587 | "memory usage: 20.0+ KB\n"
588 | ]
589 | }
590 | ],
591 | "source": [
592 | "df_x1.info()"
593 | ]
594 | },
595 | {
596 | "cell_type": "code",
597 | "execution_count": 10,
598 | "metadata": {},
599 | "outputs": [
600 | {
601 | "name": "stdout",
602 | "output_type": "stream",
603 | "text": [
604 | "\n",
605 | "RangeIndex: 182 entries, 0 to 181\n",
606 | "Data columns (total 2 columns):\n",
607 | "Date 182 non-null object\n",
608 | "AQI 182 non-null float64\n",
609 | "dtypes: float64(1), object(1)\n",
610 | "memory usage: 2.9+ KB\n"
611 | ]
612 | }
613 | ],
614 | "source": [
615 | "df_y1.info()"
616 | ]
617 | },
618 | {
619 | "cell_type": "code",
620 | "execution_count": 11,
621 | "metadata": {},
622 | "outputs": [],
623 | "source": [
624 | "df_x[\"Date\"] = pd.to_datetime(df_x[\"Date\"])\n",
625 | "df_x1[\"Date\"] = pd.to_datetime(df_x[\"Date\"])"
626 | ]
627 | },
628 | {
629 | "cell_type": "code",
630 | "execution_count": 12,
631 | "metadata": {},
632 | "outputs": [
633 | {
634 | "name": "stdout",
635 | "output_type": "stream",
636 | "text": [
637 | "\n",
638 | "RangeIndex: 1441 entries, 0 to 1440\n",
639 | "Data columns (total 14 columns):\n",
640 | "Date 1441 non-null datetime64[ns]\n",
641 | "PM2.5 1441 non-null float64\n",
642 | "PM10 1441 non-null float64\n",
643 | "NO2 1441 non-null float64\n",
644 | "NOx 1441 non-null float64\n",
645 | "CO 1441 non-null float64\n",
646 | "SO2 1441 non-null float64\n",
647 | "O3 1441 non-null float64\n",
648 | "temp 1441 non-null float64\n",
649 | "max_temp 1441 non-null float64\n",
650 | "min_temp 1441 non-null float64\n",
651 | "humid 1441 non-null float64\n",
652 | "visible 1441 non-null float64\n",
653 | "wind 1441 non-null float64\n",
654 | "dtypes: datetime64[ns](1), float64(13)\n",
655 | "memory usage: 157.7 KB\n"
656 | ]
657 | }
658 | ],
659 | "source": [
660 | "df_x.info()"
661 | ]
662 | },
663 | {
664 | "cell_type": "code",
665 | "execution_count": 13,
666 | "metadata": {},
667 | "outputs": [
668 | {
669 | "name": "stdout",
670 | "output_type": "stream",
671 | "text": [
672 | "\n",
673 | "RangeIndex: 182 entries, 0 to 181\n",
674 | "Data columns (total 14 columns):\n",
675 | "Date 182 non-null datetime64[ns]\n",
676 | "PM2.5 182 non-null float64\n",
677 | "PM10 182 non-null float64\n",
678 | "NO2 182 non-null float64\n",
679 | "NOx 182 non-null float64\n",
680 | "CO 182 non-null float64\n",
681 | "SO2 182 non-null float64\n",
682 | "O3 182 non-null float64\n",
683 | "temp 182 non-null float64\n",
684 | "max_temp 182 non-null float64\n",
685 | "min_temp 182 non-null float64\n",
686 | "humid 182 non-null int64\n",
687 | "visible 182 non-null float64\n",
688 | "wind 182 non-null float64\n",
689 | "dtypes: datetime64[ns](1), float64(12), int64(1)\n",
690 | "memory usage: 20.0 KB\n"
691 | ]
692 | }
693 | ],
694 | "source": [
695 | "df_x1.info()"
696 | ]
697 | },
698 | {
699 | "cell_type": "code",
700 | "execution_count": 14,
701 | "metadata": {},
702 | "outputs": [
703 | {
704 | "data": {
705 | "text/plain": [
706 | ""
707 | ]
708 | },
709 | "execution_count": 14,
710 | "metadata": {},
711 | "output_type": "execute_result"
712 | },
713 | {
714 | "data": {
715 | "image/png": "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\n",
716 | "text/plain": [
717 | ""
718 | ]
719 | },
720 | "metadata": {
721 | "needs_background": "light"
722 | },
723 | "output_type": "display_data"
724 | }
725 | ],
726 | "source": [
727 | "sns.heatmap(df_x.isnull(),cbar=False, yticklabels=False)"
728 | ]
729 | },
730 | {
731 | "cell_type": "code",
732 | "execution_count": 15,
733 | "metadata": {},
734 | "outputs": [
735 | {
736 | "data": {
737 | "text/plain": [
738 | ""
739 | ]
740 | },
741 | "execution_count": 15,
742 | "metadata": {},
743 | "output_type": "execute_result"
744 | },
745 | {
746 | "data": {
747 | "image/png": "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\n",
748 | "text/plain": [
749 | ""
750 | ]
751 | },
752 | "metadata": {
753 | "needs_background": "light"
754 | },
755 | "output_type": "display_data"
756 | }
757 | ],
758 | "source": [
759 | "sns.heatmap(df_x1.isnull(),cbar=False, yticklabels=False)"
760 | ]
761 | },
762 | {
763 | "cell_type": "code",
764 | "execution_count": 16,
765 | "metadata": {},
766 | "outputs": [],
767 | "source": [
768 | "x_train = df_x.drop(['Date'], axis = 1)\n",
769 | "y_train = df_y[\"AQI\"]\n",
770 | "x_test = df_x1.drop(['Date'], axis = 1)\n",
771 | "y_test = df_y1[\"AQI\"]"
772 | ]
773 | },
774 | {
775 | "cell_type": "code",
776 | "execution_count": 17,
777 | "metadata": {},
778 | "outputs": [
779 | {
780 | "data": {
781 | "text/html": [
782 | "\n",
783 | "\n",
796 | "
\n",
797 | " \n",
798 | " \n",
799 | " | \n",
800 | " PM2.5 | \n",
801 | " PM10 | \n",
802 | " NO2 | \n",
803 | " NOx | \n",
804 | " CO | \n",
805 | " SO2 | \n",
806 | " O3 | \n",
807 | " temp | \n",
808 | " max_temp | \n",
809 | " min_temp | \n",
810 | " humid | \n",
811 | " visible | \n",
812 | " wind | \n",
813 | "
\n",
814 | " \n",
815 | " \n",
816 | " \n",
817 | " | 0 | \n",
818 | " 56.40 | \n",
819 | " 95.08 | \n",
820 | " 51.73 | \n",
821 | " 34.31 | \n",
822 | " 0.69 | \n",
823 | " 7.44 | \n",
824 | " 55.96 | \n",
825 | " 20.1 | \n",
826 | " 28.4 | \n",
827 | " 15.7 | \n",
828 | " 54.0 | \n",
829 | " 6.0 | \n",
830 | " 3.0 | \n",
831 | "
\n",
832 | " \n",
833 | " | 1 | \n",
834 | " 53.69 | \n",
835 | " 93.92 | \n",
836 | " 73.09 | \n",
837 | " 54.77 | \n",
838 | " 0.76 | \n",
839 | " 8.67 | \n",
840 | " 34.06 | \n",
841 | " 20.8 | \n",
842 | " 28.3 | \n",
843 | " 12.9 | \n",
844 | " 45.0 | \n",
845 | " 6.3 | \n",
846 | " 1.1 | \n",
847 | "
\n",
848 | " \n",
849 | " | 2 | \n",
850 | " 62.35 | \n",
851 | " 99.34 | \n",
852 | " 77.77 | \n",
853 | " 55.60 | \n",
854 | " 0.96 | \n",
855 | " 9.10 | \n",
856 | " 47.62 | \n",
857 | " 21.4 | \n",
858 | " 29.0 | \n",
859 | " 13.7 | \n",
860 | " 45.0 | \n",
861 | " 6.3 | \n",
862 | " 0.4 | \n",
863 | "
\n",
864 | " \n",
865 | " | 3 | \n",
866 | " 64.96 | \n",
867 | " 104.62 | \n",
868 | " 77.07 | \n",
869 | " 50.81 | \n",
870 | " 0.89 | \n",
871 | " 8.87 | \n",
872 | " 50.62 | \n",
873 | " 21.5 | \n",
874 | " 29.0 | \n",
875 | " 15.2 | \n",
876 | " 47.0 | \n",
877 | " 6.9 | \n",
878 | " 2.2 | \n",
879 | "
\n",
880 | " \n",
881 | " | 4 | \n",
882 | " 70.15 | \n",
883 | " 105.12 | \n",
884 | " 79.43 | \n",
885 | " 56.05 | \n",
886 | " 0.85 | \n",
887 | " 9.41 | \n",
888 | " 36.94 | \n",
889 | " 20.9 | \n",
890 | " 28.4 | \n",
891 | " 14.7 | \n",
892 | " 51.0 | \n",
893 | " 6.3 | \n",
894 | " 1.1 | \n",
895 | "
\n",
896 | " \n",
897 | "
\n",
898 | "
"
899 | ],
900 | "text/plain": [
901 | " PM2.5 PM10 NO2 NOx CO SO2 O3 temp max_temp min_temp \\\n",
902 | "0 56.40 95.08 51.73 34.31 0.69 7.44 55.96 20.1 28.4 15.7 \n",
903 | "1 53.69 93.92 73.09 54.77 0.76 8.67 34.06 20.8 28.3 12.9 \n",
904 | "2 62.35 99.34 77.77 55.60 0.96 9.10 47.62 21.4 29.0 13.7 \n",
905 | "3 64.96 104.62 77.07 50.81 0.89 8.87 50.62 21.5 29.0 15.2 \n",
906 | "4 70.15 105.12 79.43 56.05 0.85 9.41 36.94 20.9 28.4 14.7 \n",
907 | "\n",
908 | " humid visible wind \n",
909 | "0 54.0 6.0 3.0 \n",
910 | "1 45.0 6.3 1.1 \n",
911 | "2 45.0 6.3 0.4 \n",
912 | "3 47.0 6.9 2.2 \n",
913 | "4 51.0 6.3 1.1 "
914 | ]
915 | },
916 | "execution_count": 17,
917 | "metadata": {},
918 | "output_type": "execute_result"
919 | }
920 | ],
921 | "source": [
922 | "x_train.head(5)"
923 | ]
924 | },
925 | {
926 | "cell_type": "code",
927 | "execution_count": 18,
928 | "metadata": {},
929 | "outputs": [
930 | {
931 | "data": {
932 | "text/html": [
933 | "\n",
934 | "\n",
947 | "
\n",
948 | " \n",
949 | " \n",
950 | " | \n",
951 | " PM2.5 | \n",
952 | " PM10 | \n",
953 | " NO2 | \n",
954 | " NOx | \n",
955 | " CO | \n",
956 | " SO2 | \n",
957 | " O3 | \n",
958 | " temp | \n",
959 | " max_temp | \n",
960 | " min_temp | \n",
961 | " humid | \n",
962 | " visible | \n",
963 | " wind | \n",
964 | "
\n",
965 | " \n",
966 | " \n",
967 | " \n",
968 | " | 0 | \n",
969 | " 30.71 | \n",
970 | " 70.80 | \n",
971 | " 27.31 | \n",
972 | " 26.74 | \n",
973 | " 1.07 | \n",
974 | " 8.56 | \n",
975 | " 37.39 | \n",
976 | " 22.0 | \n",
977 | " 27.2 | \n",
978 | " 19.2 | \n",
979 | " 75 | \n",
980 | " 6.9 | \n",
981 | " 3.3 | \n",
982 | "
\n",
983 | " \n",
984 | " | 1 | \n",
985 | " 25.78 | \n",
986 | " 62.73 | \n",
987 | " 28.05 | \n",
988 | " 30.18 | \n",
989 | " 1.16 | \n",
990 | " 7.52 | \n",
991 | " 33.11 | \n",
992 | " 22.2 | \n",
993 | " 26.0 | \n",
994 | " 19.4 | \n",
995 | " 77 | \n",
996 | " 5.5 | \n",
997 | " 2.0 | \n",
998 | "
\n",
999 | " \n",
1000 | " | 2 | \n",
1001 | " 29.66 | \n",
1002 | " 69.62 | \n",
1003 | " 26.26 | \n",
1004 | " 26.92 | \n",
1005 | " 0.99 | \n",
1006 | " 6.40 | \n",
1007 | " 32.98 | \n",
1008 | " 23.4 | \n",
1009 | " 28.4 | \n",
1010 | " 19.4 | \n",
1011 | " 68 | \n",
1012 | " 6.9 | \n",
1013 | " 3.5 | \n",
1014 | "
\n",
1015 | " \n",
1016 | " | 3 | \n",
1017 | " 52.62 | \n",
1018 | " 106.81 | \n",
1019 | " 31.56 | \n",
1020 | " 41.89 | \n",
1021 | " 1.39 | \n",
1022 | " 6.94 | \n",
1023 | " 37.35 | \n",
1024 | " 23.6 | \n",
1025 | " 30.5 | \n",
1026 | " 19.0 | \n",
1027 | " 63 | \n",
1028 | " 6.3 | \n",
1029 | " 1.3 | \n",
1030 | "
\n",
1031 | " \n",
1032 | " | 4 | \n",
1033 | " 52.64 | \n",
1034 | " 97.94 | \n",
1035 | " 29.10 | \n",
1036 | " 29.52 | \n",
1037 | " 1.01 | \n",
1038 | " 7.01 | \n",
1039 | " 45.10 | \n",
1040 | " 24.2 | \n",
1041 | " 30.5 | \n",
1042 | " 20.4 | \n",
1043 | " 63 | \n",
1044 | " 6.3 | \n",
1045 | " 1.3 | \n",
1046 | "
\n",
1047 | " \n",
1048 | "
\n",
1049 | "
"
1050 | ],
1051 | "text/plain": [
1052 | " PM2.5 PM10 NO2 NOx CO SO2 O3 temp max_temp min_temp \\\n",
1053 | "0 30.71 70.80 27.31 26.74 1.07 8.56 37.39 22.0 27.2 19.2 \n",
1054 | "1 25.78 62.73 28.05 30.18 1.16 7.52 33.11 22.2 26.0 19.4 \n",
1055 | "2 29.66 69.62 26.26 26.92 0.99 6.40 32.98 23.4 28.4 19.4 \n",
1056 | "3 52.62 106.81 31.56 41.89 1.39 6.94 37.35 23.6 30.5 19.0 \n",
1057 | "4 52.64 97.94 29.10 29.52 1.01 7.01 45.10 24.2 30.5 20.4 \n",
1058 | "\n",
1059 | " humid visible wind \n",
1060 | "0 75 6.9 3.3 \n",
1061 | "1 77 5.5 2.0 \n",
1062 | "2 68 6.9 3.5 \n",
1063 | "3 63 6.3 1.3 \n",
1064 | "4 63 6.3 1.3 "
1065 | ]
1066 | },
1067 | "execution_count": 18,
1068 | "metadata": {},
1069 | "output_type": "execute_result"
1070 | }
1071 | ],
1072 | "source": [
1073 | "x_test.head(5)"
1074 | ]
1075 | },
1076 | {
1077 | "cell_type": "code",
1078 | "execution_count": 19,
1079 | "metadata": {},
1080 | "outputs": [
1081 | {
1082 | "data": {
1083 | "text/plain": [
1084 | "0 101.0\n",
1085 | "1 92.0\n",
1086 | "2 108.0\n",
1087 | "3 109.0\n",
1088 | "4 114.0\n",
1089 | "Name: AQI, dtype: float64"
1090 | ]
1091 | },
1092 | "execution_count": 19,
1093 | "metadata": {},
1094 | "output_type": "execute_result"
1095 | }
1096 | ],
1097 | "source": [
1098 | "y_train.head(5)"
1099 | ]
1100 | },
1101 | {
1102 | "cell_type": "code",
1103 | "execution_count": 20,
1104 | "metadata": {},
1105 | "outputs": [
1106 | {
1107 | "data": {
1108 | "text/plain": [
1109 | "0 82.0\n",
1110 | "1 81.0\n",
1111 | "2 85.0\n",
1112 | "3 95.0\n",
1113 | "4 118.0\n",
1114 | "Name: AQI, dtype: float64"
1115 | ]
1116 | },
1117 | "execution_count": 20,
1118 | "metadata": {},
1119 | "output_type": "execute_result"
1120 | }
1121 | ],
1122 | "source": [
1123 | "y_test.head(5)"
1124 | ]
1125 | },
1126 | {
1127 | "cell_type": "code",
1128 | "execution_count": 21,
1129 | "metadata": {},
1130 | "outputs": [],
1131 | "source": [
1132 | "from sklearn.preprocessing import StandardScaler, MinMaxScaler\n",
1133 | "sc_x = StandardScaler()\n",
1134 | "sc_y = StandardScaler()\n",
1135 | "x_train = sc_x.fit_transform(x_train)\n",
1136 | "x_test = sc_x.transform(x_test)\n",
1137 | "y_train = sc_y.fit_transform(np.array(y_train).reshape(-1,1))\n",
1138 | "y_test = sc_y.transform(np.array(y_test).reshape(-1,1))"
1139 | ]
1140 | },
1141 | {
1142 | "cell_type": "code",
1143 | "execution_count": 22,
1144 | "metadata": {},
1145 | "outputs": [
1146 | {
1147 | "data": {
1148 | "text/plain": [
1149 | "array([[-0.27610501],\n",
1150 | " [-0.30227705],\n",
1151 | " [-0.1975889 ],\n",
1152 | " [ 0.06413148],\n",
1153 | " [ 0.66608835]])"
1154 | ]
1155 | },
1156 | "execution_count": 22,
1157 | "metadata": {},
1158 | "output_type": "execute_result"
1159 | }
1160 | ],
1161 | "source": [
1162 | "y_test[:5]"
1163 | ]
1164 | },
1165 | {
1166 | "cell_type": "code",
1167 | "execution_count": 23,
1168 | "metadata": {},
1169 | "outputs": [
1170 | {
1171 | "data": {
1172 | "text/plain": [
1173 | "SVR(C=1.0, cache_size=200, coef0=0.0, degree=3, epsilon=0.1,\n",
1174 | " gamma='auto_deprecated', kernel='rbf', max_iter=-1, shrinking=True,\n",
1175 | " tol=0.001, verbose=False)"
1176 | ]
1177 | },
1178 | "execution_count": 23,
1179 | "metadata": {},
1180 | "output_type": "execute_result"
1181 | }
1182 | ],
1183 | "source": [
1184 | "from sklearn.svm import SVR\n",
1185 | "regressor = SVR(kernel = 'rbf')\n",
1186 | "regressor.fit(x_train,y_train)"
1187 | ]
1188 | },
1189 | {
1190 | "cell_type": "code",
1191 | "execution_count": 24,
1192 | "metadata": {},
1193 | "outputs": [
1194 | {
1195 | "data": {
1196 | "text/plain": [
1197 | "array([-0.42595944, -0.32311139, -0.37435607, 0.56882821, 0.35833741,\n",
1198 | " -0.4289785 , -0.57286549, -0.26249298, 0.01577009, -0.11099087,\n",
1199 | " -0.32003543, -0.21896574, 0.40781822, 0.70554794, 0.22467137,\n",
1200 | " 0.26272955, 0.05300658, -0.43237994, -0.50516794, -0.15245204,\n",
1201 | " -0.16191589, -0.16050723, -0.09468641, 0.01183634, 0.24495599,\n",
1202 | " 0.43675849, 0.50363451, 0.22383874, 0.36682982, 0.68494588,\n",
1203 | " 0.37600183, 0.16605308, -0.30409398, -0.25732645, -0.17879819,\n",
1204 | " -0.28231346, 0.22057641, 0.25122338, 0.13562446, 0.16869742,\n",
1205 | " -0.27649917, -0.19226034, -0.34176244, -0.07255308, 0.79432799,\n",
1206 | " 0.99324748, 0.03093437, 0.16210712, 0.31583795, 0.47365842,\n",
1207 | " 0.11191249, -0.22742264, -0.26317195, 0.01138717, -0.16583801,\n",
1208 | " 0.34501398, 0.20441671, 0.14925122, 0.16647227, 0.23584846,\n",
1209 | " 0.44561196, 0.74555276, 1.77403237, 0.98925211, 0.6941801 ,\n",
1210 | " 0.04527876, 0.08692571, -0.15628333, -0.03071387, 0.15375035,\n",
1211 | " 0.03870278, 0.00487757, -0.18599819, -0.30738972, -0.12022113,\n",
1212 | " -0.37615108, -0.56692846, -0.31514682, 0.19595979, 0.30663164,\n",
1213 | " 0.4771285 , -0.28227281, -0.05911738, 0.04322423, -0.68263281,\n",
1214 | " -0.73819769, -0.50290478, -0.46696796, -0.38069815, -0.36181173,\n",
1215 | " -0.20645508, -0.36911442, -0.27281806, -0.22542369, -0.37897064,\n",
1216 | " -0.38816626, -0.72536073, -0.98441423, -0.7442325 , -0.71863761,\n",
1217 | " -0.72144794, -0.74704061, -0.58227917, -0.50226986, -0.33404258,\n",
1218 | " -0.48810957, -0.6112883 , -0.42955452, -0.65229843, -0.87307501,\n",
1219 | " -1.00287225, -0.82285002, -0.25709449, -0.75710873, -0.60362084,\n",
1220 | " -0.26031897, -0.91369875, -0.95760632, -0.81297347, -0.14054648,\n",
1221 | " -0.7561288 , -0.61221255, -0.69518032, -0.60207119, -0.37488619,\n",
1222 | " -0.20918184, -0.54138463, -0.49764821, -0.84623359, -0.73307276,\n",
1223 | " -0.60311798, -0.65324264, -0.86782537, -0.94903969, -0.59868767,\n",
1224 | " -0.80292309, -0.57618004, -0.85284508, -0.63479565, -0.51516231,\n",
1225 | " -0.51806576, -0.91674212, -0.68377782, -0.57208282, -0.84884395,\n",
1226 | " -0.80278251, -0.75762862, -0.58761396, -0.79499592, -0.81003283,\n",
1227 | " -0.87723899, -0.83168805, -1.13971526, -1.3723071 , -1.24599784,\n",
1228 | " -1.21094141, -0.90016809, -1.01965268, -1.02627238, -1.06362168,\n",
1229 | " -1.0106033 , -0.74411236, -0.97876786, -1.04877468, -0.96290783,\n",
1230 | " -1.11445661, -1.01896601, -0.86198109, -0.94589339, -0.78238535,\n",
1231 | " -0.85986483, -0.96586506, -1.06933763, -0.99446313, -0.97199095,\n",
1232 | " -0.98809041, -0.86366581, -0.9923654 , -1.1113921 , -1.06807415,\n",
1233 | " -0.08591312, -1.22178744])"
1234 | ]
1235 | },
1236 | "execution_count": 24,
1237 | "metadata": {},
1238 | "output_type": "execute_result"
1239 | }
1240 | ],
1241 | "source": [
1242 | "y_prediction = regressor.predict(x_test)\n",
1243 | "y_prediction"
1244 | ]
1245 | },
1246 | {
1247 | "cell_type": "code",
1248 | "execution_count": 25,
1249 | "metadata": {},
1250 | "outputs": [
1251 | {
1252 | "name": "stdout",
1253 | "output_type": "stream",
1254 | "text": [
1255 | "R2 SCORE is 0.8063001007104242\n",
1256 | "mean_sqrd_error is 0.04933772059187857\n",
1257 | "Root mean squared error of is 0.22212095937096654\n",
1258 | "Mean Absolute error is 0.16675010409400015\n"
1259 | ]
1260 | }
1261 | ],
1262 | "source": [
1263 | "from sklearn.metrics import r2_score\n",
1264 | "from sklearn.metrics import mean_squared_error\n",
1265 | "from sklearn.metrics import mean_absolute_error\n",
1266 | "score = r2_score(y_test,y_prediction)\n",
1267 | "mean_error = mean_squared_error(y_test,y_prediction)\n",
1268 | "mae = mean_absolute_error(y_test,y_prediction)\n",
1269 | "print(\"R2 SCORE is\", score)\n",
1270 | "print(\"mean_sqrd_error is \", mean_error)\n",
1271 | "print(\"Root mean squared error of is\",np.sqrt(mean_error))\n",
1272 | "print(\"Mean Absolute error is\", mae)"
1273 | ]
1274 | },
1275 | {
1276 | "cell_type": "code",
1277 | "execution_count": 26,
1278 | "metadata": {},
1279 | "outputs": [
1280 | {
1281 | "data": {
1282 | "text/plain": [
1283 | "array([[ 82.],\n",
1284 | " [ 81.],\n",
1285 | " [ 85.],\n",
1286 | " [ 95.],\n",
1287 | " [118.]])"
1288 | ]
1289 | },
1290 | "execution_count": 26,
1291 | "metadata": {},
1292 | "output_type": "execute_result"
1293 | }
1294 | ],
1295 | "source": [
1296 | "y_test = sc_y.inverse_transform(y_test)\n",
1297 | "y_test[:5]"
1298 | ]
1299 | },
1300 | {
1301 | "cell_type": "code",
1302 | "execution_count": 27,
1303 | "metadata": {},
1304 | "outputs": [
1305 | {
1306 | "data": {
1307 | "text/plain": [
1308 | "array([ 76.27425416, 80.20394657, 78.24595278, 114.28381494,\n",
1309 | " 106.24123124])"
1310 | ]
1311 | },
1312 | "execution_count": 27,
1313 | "metadata": {},
1314 | "output_type": "execute_result"
1315 | }
1316 | ],
1317 | "source": [
1318 | "y_prediction = sc_y.inverse_transform(y_prediction)\n",
1319 | "y_prediction[:5]"
1320 | ]
1321 | },
1322 | {
1323 | "cell_type": "code",
1324 | "execution_count": 28,
1325 | "metadata": {},
1326 | "outputs": [
1327 | {
1328 | "data": {
1329 | "image/png": "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\n",
1330 | "text/plain": [
1331 | ""
1332 | ]
1333 | },
1334 | "metadata": {
1335 | "needs_background": "light"
1336 | },
1337 | "output_type": "display_data"
1338 | }
1339 | ],
1340 | "source": [
1341 | "df1 = pd.DataFrame({'Actual': y_test[100:120].flatten(), 'Predicted': y_prediction[100:120].flatten()})\n",
1342 | "df1.plot(kind='line')\n",
1343 | "plt.grid(which='major', linestyle='-', linewidth='0.5', color='green')\n",
1344 | "plt.grid(which='minor', linestyle=':', linewidth='0.5', color='black')\n",
1345 | "plt.show()"
1346 | ]
1347 | },
1348 | {
1349 | "cell_type": "code",
1350 | "execution_count": 29,
1351 | "metadata": {},
1352 | "outputs": [
1353 | {
1354 | "data": {
1355 | "text/html": [
1356 | "\n",
1357 | "\n",
1370 | "
\n",
1371 | " \n",
1372 | " \n",
1373 | " | \n",
1374 | " ACTUAL AQI | \n",
1375 | " PREDICTED AQI | \n",
1376 | " DIFFERENCE | \n",
1377 | " PERCENTAGE ERROR | \n",
1378 | "
\n",
1379 | " \n",
1380 | " \n",
1381 | " \n",
1382 | " | 0 | \n",
1383 | " 82.0 | \n",
1384 | " 76.274254 | \n",
1385 | " 5.725746 | \n",
1386 | " 6.982617 | \n",
1387 | "
\n",
1388 | " \n",
1389 | " | 1 | \n",
1390 | " 81.0 | \n",
1391 | " 80.203947 | \n",
1392 | " 0.796053 | \n",
1393 | " 0.982782 | \n",
1394 | "
\n",
1395 | " \n",
1396 | " | 2 | \n",
1397 | " 85.0 | \n",
1398 | " 78.245953 | \n",
1399 | " 6.754047 | \n",
1400 | " 7.945938 | \n",
1401 | "
\n",
1402 | " \n",
1403 | " | 3 | \n",
1404 | " 95.0 | \n",
1405 | " 114.283815 | \n",
1406 | " -19.283815 | \n",
1407 | " 20.298753 | \n",
1408 | "
\n",
1409 | " \n",
1410 | " | 4 | \n",
1411 | " 118.0 | \n",
1412 | " 106.241231 | \n",
1413 | " 11.758769 | \n",
1414 | " 9.965058 | \n",
1415 | "
\n",
1416 | " \n",
1417 | " | 5 | \n",
1418 | " 81.0 | \n",
1419 | " 76.158900 | \n",
1420 | " 4.841100 | \n",
1421 | " 5.976667 | \n",
1422 | "
\n",
1423 | " \n",
1424 | " | 6 | \n",
1425 | " 75.0 | \n",
1426 | " 70.661163 | \n",
1427 | " 4.338837 | \n",
1428 | " 5.785116 | \n",
1429 | "
\n",
1430 | " \n",
1431 | " | 7 | \n",
1432 | " 93.0 | \n",
1433 | " 82.520098 | \n",
1434 | " 10.479902 | \n",
1435 | " 11.268712 | \n",
1436 | "
\n",
1437 | " \n",
1438 | " | 8 | \n",
1439 | " 101.0 | \n",
1440 | " 93.152173 | \n",
1441 | " 7.847827 | \n",
1442 | " 7.770126 | \n",
1443 | "
\n",
1444 | " \n",
1445 | " | 9 | \n",
1446 | " 94.0 | \n",
1447 | " 88.308799 | \n",
1448 | " 5.691201 | \n",
1449 | " 6.054469 | \n",
1450 | "
\n",
1451 | " \n",
1452 | " | 10 | \n",
1453 | " 78.0 | \n",
1454 | " 80.321475 | \n",
1455 | " -2.321475 | \n",
1456 | " 2.976250 | \n",
1457 | "
\n",
1458 | " \n",
1459 | " | 11 | \n",
1460 | " 79.0 | \n",
1461 | " 84.183218 | \n",
1462 | " -5.183218 | \n",
1463 | " 6.561036 | \n",
1464 | "
\n",
1465 | " \n",
1466 | " | 12 | \n",
1467 | " 106.0 | \n",
1468 | " 108.131829 | \n",
1469 | " -2.131829 | \n",
1470 | " 2.011160 | \n",
1471 | "
\n",
1472 | " \n",
1473 | " | 13 | \n",
1474 | " 121.0 | \n",
1475 | " 119.507700 | \n",
1476 | " 1.492300 | \n",
1477 | " 1.233306 | \n",
1478 | "
\n",
1479 | " \n",
1480 | " | 14 | \n",
1481 | " 111.0 | \n",
1482 | " 101.134023 | \n",
1483 | " 9.865977 | \n",
1484 | " 8.888267 | \n",
1485 | "
\n",
1486 | " \n",
1487 | "
\n",
1488 | "
"
1489 | ],
1490 | "text/plain": [
1491 | " ACTUAL AQI PREDICTED AQI DIFFERENCE PERCENTAGE ERROR\n",
1492 | "0 82.0 76.274254 5.725746 6.982617\n",
1493 | "1 81.0 80.203947 0.796053 0.982782\n",
1494 | "2 85.0 78.245953 6.754047 7.945938\n",
1495 | "3 95.0 114.283815 -19.283815 20.298753\n",
1496 | "4 118.0 106.241231 11.758769 9.965058\n",
1497 | "5 81.0 76.158900 4.841100 5.976667\n",
1498 | "6 75.0 70.661163 4.338837 5.785116\n",
1499 | "7 93.0 82.520098 10.479902 11.268712\n",
1500 | "8 101.0 93.152173 7.847827 7.770126\n",
1501 | "9 94.0 88.308799 5.691201 6.054469\n",
1502 | "10 78.0 80.321475 -2.321475 2.976250\n",
1503 | "11 79.0 84.183218 -5.183218 6.561036\n",
1504 | "12 106.0 108.131829 -2.131829 2.011160\n",
1505 | "13 121.0 119.507700 1.492300 1.233306\n",
1506 | "14 111.0 101.134023 9.865977 8.888267"
1507 | ]
1508 | },
1509 | "execution_count": 29,
1510 | "metadata": {},
1511 | "output_type": "execute_result"
1512 | }
1513 | ],
1514 | "source": [
1515 | "result = pd.DataFrame()\n",
1516 | "result[\"ACTUAL AQI\"] = y_test.flatten()\n",
1517 | "result[\"PREDICTED AQI\"] = y_prediction\n",
1518 | "result[\"DIFFERENCE\"] = result[\"ACTUAL AQI\"] - result[\"PREDICTED AQI\"]\n",
1519 | "result[\"PERCENTAGE ERROR\"] = ( abs(result[\"ACTUAL AQI\"] - result[\"PREDICTED AQI\"] ) / result[\"ACTUAL AQI\"] ) * 100\n",
1520 | "result.head(15)"
1521 | ]
1522 | },
1523 | {
1524 | "cell_type": "code",
1525 | "execution_count": null,
1526 | "metadata": {},
1527 | "outputs": [],
1528 | "source": []
1529 | }
1530 | ],
1531 | "metadata": {
1532 | "kernelspec": {
1533 | "display_name": "Python 3",
1534 | "language": "python",
1535 | "name": "python3"
1536 | },
1537 | "language_info": {
1538 | "codemirror_mode": {
1539 | "name": "ipython",
1540 | "version": 3
1541 | },
1542 | "file_extension": ".py",
1543 | "mimetype": "text/x-python",
1544 | "name": "python",
1545 | "nbconvert_exporter": "python",
1546 | "pygments_lexer": "ipython3",
1547 | "version": "3.7.3"
1548 | }
1549 | },
1550 | "nbformat": 4,
1551 | "nbformat_minor": 2
1552 | }
1553 |
--------------------------------------------------------------------------------