In [1]:
%matplotlib inline
In [2]:
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsRegressor
import matplotlib.pyplot as plt
In [3]:
if 'bigDataFrame' in globals():
print("Exist, do nothing!")
else:
print("Read data.")
bigDataFrame = pd.read_pickle("../output/bigDataFrame.pkl")
bigDataFrame.rename(columns={"PM2.5": "PM25"}, inplace=True)
Read data.
In [4]:
stations = pd.read_excel("../input/Metadane_wer20160914.xlsx")
In [5]:
oneHour = bigDataFrame['2015-06-12 08:00:00':'2015-06-12 08:00:00']
In [6]:
oneHour.index = oneHour.index.droplevel(level=0)
In [7]:
pollutants = oneHour.columns
In [8]:
oneHour["coords"] = oneHour.index.map(lambda name: map(list,stations[stations["Kod stacji"] == name][[u'WGS84 φ N', u'WGS84 λ E']].values)[0])
/home/damian/.virtualenvs/kaggle/lib/python2.7/site-packages/ipykernel_launcher.py:1: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
"""Entry point for launching an IPython kernel.
In [9]:
oneHour
Out[9]:
C6H6
CO
NO2
O3
PM10
PM25
SO2
coords
Station
DsBogatFrancMOB
NaN
NaN
NaN
NaN
37.698400
NaN
NaN
[50.940998, 14.91679]
DsCzerStraza
NaN
NaN
NaN
70.991500
NaN
NaN
NaN
[50.912475, 15.31219]
DsDzialoszyn
NaN
NaN
NaN
NaN
21.686000
NaN
NaN
[50.972167, 14.941319]
DsDziePilsud
NaN
NaN
28.750800
NaN
36.392400
NaN
2.340770
[50.732817, 16.64805]
DsJelGorOgin
NaN
NaN
NaN
20.468700
51.668300
21.811900
NaN
[50.913433, 15.765608]
DsKlodzSzkol
NaN
NaN
32.326500
16.525200
38.180300
NaN
5.436460
[50.433493, 16.65366]
DsLegAlRzecz
1.805310
0.349643
25.372200
48.415300
38.787700
NaN
3.305320
[51.204503, 16.180513]
DsNowRudSreb
NaN
NaN
NaN
NaN
18.683400
NaN
NaN
[50.579914, 16.514422]
DsOsieczow21
NaN
NaN
NaN
65.225400
NaN
NaN
NaN
[51.31763, 15.431719]
DsSniezkaObs
NaN
NaN
NaN
122.000000
NaN
NaN
NaN
[50.736389, 15.739722]
DsSwidnMarciMOB
NaN
0.470980
36.719300
43.275800
NaN
NaN
2.040330
[50.846559, 16.466928]
DsWalbrzWyso
5.065160
NaN
NaN
3.287870
47.532000
NaN
NaN
[50.768729, 16.269677]
DsWrocAlWisn
NaN
NaN
NaN
NaN
NaN
37.913700
NaN
[51.086225, 17.012689]
DsWrocBartni
NaN
NaN
NaN
55.414500
NaN
NaN
NaN
[51.115933, 17.141125]
DsWrocWybCon
2.293370
NaN
NaN
57.586100
NaN
26.042700
NaN
[51.129378, 17.02925]
DsZabkPowWar
NaN
NaN
NaN
NaN
49.808100
NaN
NaN
[50.592325, 16.819786]
DsZgorBohGet
0.724300
NaN
NaN
NaN
NaN
NaN
NaN
[51.150391, 15.008175]
KpBydPlPozna
0.140000
0.449000
62.500000
NaN
NaN
15.400000
9.400000
[53.121764, 17.987906]
KpBydWarszaw
NaN
0.351000
56.800000
27.000000
32.100000
18.100000
20.800000
[53.134083, 17.995708]
KpCiechTezni
0.410000
NaN
9.800000
90.000000
NaN
NaN
NaN
[52.888553, 18.781044]
KpGrudPilsud
NaN
0.710000
47.900000
NaN
15.400000
NaN
3.900000
[53.49355, 18.762139]
KpInowSolank
NaN
NaN
16.700000
NaN
14.518800
NaN
2.800000
[52.793122, 18.241044]
KpKoniczynka
NaN
NaN
11.000000
88.600000
NaN
NaN
4.300000
[53.080647, 18.684258]
KpToruDziewu
NaN
NaN
NaN
70.300000
22.033300
8.808000
NaN
[53.028647, 18.666103]
KpToruKaszow
NaN
NaN
40.400000
NaN
26.500000
NaN
7.900000
[53.017628, 18.612808]
KpToruWSikor
NaN
NaN
15.600000
NaN
16.900000
NaN
5.600000
[53.012261, 18.606203]
KpWiktorowoG
NaN
NaN
NaN
NaN
26.000000
NaN
NaN
[52.822942, 17.859031]
KpWloclChelmMOB
NaN
0.163000
10.800000
90.100000
13.800000
NaN
5.000000
[52.672648, 19.079261]
KpZielBoryTu
NaN
0.227000
4.200000
84.600000
NaN
NaN
1.700000
[53.662117, 17.934017]
LbBiaPodOrze
NaN
NaN
NaN
95.950000
NaN
NaN
5.980000
[52.029194, 23.149389]
...
...
...
...
...
...
...
...
...
SlKatoKossut
NaN
NaN
33.118300
65.631600
40.943600
21.185600
6.500150
[50.264611, 18.975028]
SlKatoPlebA4
NaN
0.272800
83.746100
NaN
NaN
NaN
6.948770
[50.246795, 19.019469]
SlRybniBorki
1.219970
0.351840
30.359500
60.558800
35.459300
NaN
22.415100
[50.111181, 18.516139]
SlSosnoLubel
NaN
NaN
11.447700
NaN
26.468200
NaN
4.522180
[50.285956, 19.184399]
SlTychyTolst
NaN
NaN
20.577800
NaN
32.814200
NaN
6.052720
[50.099903, 18.990236]
SlUstronSana
NaN
NaN
5.859400
98.904300
26.239100
NaN
4.710920
[49.719731, 18.826722]
SlWodzGalczy
NaN
0.491730
21.154100
66.624400
43.291500
NaN
12.636100
[50.007629, 18.455548]
SlZabSkloCur
NaN
0.302940
25.583700
67.026500
36.819300
NaN
14.185700
[50.3165, 18.772375]
SlZlotPotLes
NaN
NaN
5.852190
91.966700
22.137800
18.498000
2.478120
[50.710889, 19.458797]
SlZorySikors
NaN
0.245320
NaN
NaN
NaN
NaN
3.226170
[50.028681, 18.691222]
SlZywieKoper
NaN
NaN
17.217500
NaN
22.338700
NaN
10.488500
[49.671602, 19.234446]
WmElbBazynsk
0.226253
0.236000
14.775268
63.135376
33.404583
NaN
3.455982
[54.167847, 19.410942]
WmGoldJacwie
NaN
0.307403
2.619211
70.411865
4.723750
NaN
NaN
[54.305908, 22.307681]
WmMragParkow
NaN
NaN
NaN
66.847771
19.193611
NaN
NaN
[53.866133, 21.296122]
WmOlsPuszkin
NaN
0.255000
8.900000
64.896797
28.088665
12.273949
4.300000
[53.789233, 20.486075]
WmOstrChrobr
NaN
0.229335
3.139303
75.555634
20.775694
NaN
3.630187
[53.692469, 19.969778]
WmPuszczaBor
NaN
NaN
NaN
69.400000
NaN
NaN
NaN
[54.124819, 22.038056]
WpBoroDrapal
NaN
NaN
16.765900
63.604200
20.062200
NaN
3.177300
[52.276794, 17.074114]
WpKaliSawick
NaN
0.293290
7.292280
96.528600
46.451500
25.463200
5.430830
[51.749053, 18.048389]
WpKoniWyszyn
NaN
0.242300
13.815900
78.854200
30.590000
NaN
1.777670
[52.225633, 18.269036]
WpPiaskiKrzy
NaN
NaN
9.542860
92.428800
NaN
NaN
4.715600
[52.501389, 17.773464]
WpPilaKusoci
NaN
0.304330
21.447200
NaN
25.876100
NaN
4.576240
[53.154408, 16.759572]
WpPoznDabrow
0.665240
0.171010
35.401700
70.391900
38.985100
NaN
3.766000
[52.420319, 16.877289]
WpPoznPolank
NaN
0.326480
24.498000
NaN
17.930000
15.660800
1.962710
[52.398175, 16.959519]
ZpKoszArKraj
NaN
NaN
26.577900
NaN
20.258600
NaN
2.017110
[54.193986, 16.172544]
ZpSzczAndr01
NaN
NaN
19.543400
42.955000
14.078000
7.843790
4.307450
[53.380975, 14.663347]
ZpSzczLacz04
NaN
NaN
NaN
NaN
22.224800
NaN
NaN
[53.470889, 14.55625]
ZpSzczPils02
0.597820
0.506400
57.458300
NaN
NaN
13.368100
3.460960
[53.432169, 14.5539]
ZpSzczecPrze
NaN
NaN
24.302700
NaN
41.259400
NaN
2.403990
[53.6989, 16.704572]
ZpWiduBulRyb
NaN
NaN
3.452500
38.397300
NaN
NaN
0.094290
[53.122319, 14.382308]
151 rows × 8 columns
In [10]:
oneHour[["lat", "long"]] = oneHour["coords"].apply(pd.Series)
oneHour.drop("coords", axis=1, inplace=True)
/home/damian/.virtualenvs/kaggle/local/lib/python2.7/site-packages/pandas/core/frame.py:2369: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
self[k1] = value[k2]
/home/damian/.virtualenvs/kaggle/lib/python2.7/site-packages/ipykernel_launcher.py:2: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame
See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
In [11]:
oneHour
Out[11]:
C6H6
CO
NO2
O3
PM10
PM25
SO2
lat
long
Station
DsBogatFrancMOB
NaN
NaN
NaN
NaN
37.698400
NaN
NaN
50.940998
14.916790
DsCzerStraza
NaN
NaN
NaN
70.991500
NaN
NaN
NaN
50.912475
15.312190
DsDzialoszyn
NaN
NaN
NaN
NaN
21.686000
NaN
NaN
50.972167
14.941319
DsDziePilsud
NaN
NaN
28.750800
NaN
36.392400
NaN
2.340770
50.732817
16.648050
DsJelGorOgin
NaN
NaN
NaN
20.468700
51.668300
21.811900
NaN
50.913433
15.765608
DsKlodzSzkol
NaN
NaN
32.326500
16.525200
38.180300
NaN
5.436460
50.433493
16.653660
DsLegAlRzecz
1.805310
0.349643
25.372200
48.415300
38.787700
NaN
3.305320
51.204503
16.180513
DsNowRudSreb
NaN
NaN
NaN
NaN
18.683400
NaN
NaN
50.579914
16.514422
DsOsieczow21
NaN
NaN
NaN
65.225400
NaN
NaN
NaN
51.317630
15.431719
DsSniezkaObs
NaN
NaN
NaN
122.000000
NaN
NaN
NaN
50.736389
15.739722
DsSwidnMarciMOB
NaN
0.470980
36.719300
43.275800
NaN
NaN
2.040330
50.846559
16.466928
DsWalbrzWyso
5.065160
NaN
NaN
3.287870
47.532000
NaN
NaN
50.768729
16.269677
DsWrocAlWisn
NaN
NaN
NaN
NaN
NaN
37.913700
NaN
51.086225
17.012689
DsWrocBartni
NaN
NaN
NaN
55.414500
NaN
NaN
NaN
51.115933
17.141125
DsWrocWybCon
2.293370
NaN
NaN
57.586100
NaN
26.042700
NaN
51.129378
17.029250
DsZabkPowWar
NaN
NaN
NaN
NaN
49.808100
NaN
NaN
50.592325
16.819786
DsZgorBohGet
0.724300
NaN
NaN
NaN
NaN
NaN
NaN
51.150391
15.008175
KpBydPlPozna
0.140000
0.449000
62.500000
NaN
NaN
15.400000
9.400000
53.121764
17.987906
KpBydWarszaw
NaN
0.351000
56.800000
27.000000
32.100000
18.100000
20.800000
53.134083
17.995708
KpCiechTezni
0.410000
NaN
9.800000
90.000000
NaN
NaN
NaN
52.888553
18.781044
KpGrudPilsud
NaN
0.710000
47.900000
NaN
15.400000
NaN
3.900000
53.493550
18.762139
KpInowSolank
NaN
NaN
16.700000
NaN
14.518800
NaN
2.800000
52.793122
18.241044
KpKoniczynka
NaN
NaN
11.000000
88.600000
NaN
NaN
4.300000
53.080647
18.684258
KpToruDziewu
NaN
NaN
NaN
70.300000
22.033300
8.808000
NaN
53.028647
18.666103
KpToruKaszow
NaN
NaN
40.400000
NaN
26.500000
NaN
7.900000
53.017628
18.612808
KpToruWSikor
NaN
NaN
15.600000
NaN
16.900000
NaN
5.600000
53.012261
18.606203
KpWiktorowoG
NaN
NaN
NaN
NaN
26.000000
NaN
NaN
52.822942
17.859031
KpWloclChelmMOB
NaN
0.163000
10.800000
90.100000
13.800000
NaN
5.000000
52.672648
19.079261
KpZielBoryTu
NaN
0.227000
4.200000
84.600000
NaN
NaN
1.700000
53.662117
17.934017
LbBiaPodOrze
NaN
NaN
NaN
95.950000
NaN
NaN
5.980000
52.029194
23.149389
...
...
...
...
...
...
...
...
...
...
SlKatoKossut
NaN
NaN
33.118300
65.631600
40.943600
21.185600
6.500150
50.264611
18.975028
SlKatoPlebA4
NaN
0.272800
83.746100
NaN
NaN
NaN
6.948770
50.246795
19.019469
SlRybniBorki
1.219970
0.351840
30.359500
60.558800
35.459300
NaN
22.415100
50.111181
18.516139
SlSosnoLubel
NaN
NaN
11.447700
NaN
26.468200
NaN
4.522180
50.285956
19.184399
SlTychyTolst
NaN
NaN
20.577800
NaN
32.814200
NaN
6.052720
50.099903
18.990236
SlUstronSana
NaN
NaN
5.859400
98.904300
26.239100
NaN
4.710920
49.719731
18.826722
SlWodzGalczy
NaN
0.491730
21.154100
66.624400
43.291500
NaN
12.636100
50.007629
18.455548
SlZabSkloCur
NaN
0.302940
25.583700
67.026500
36.819300
NaN
14.185700
50.316500
18.772375
SlZlotPotLes
NaN
NaN
5.852190
91.966700
22.137800
18.498000
2.478120
50.710889
19.458797
SlZorySikors
NaN
0.245320
NaN
NaN
NaN
NaN
3.226170
50.028681
18.691222
SlZywieKoper
NaN
NaN
17.217500
NaN
22.338700
NaN
10.488500
49.671602
19.234446
WmElbBazynsk
0.226253
0.236000
14.775268
63.135376
33.404583
NaN
3.455982
54.167847
19.410942
WmGoldJacwie
NaN
0.307403
2.619211
70.411865
4.723750
NaN
NaN
54.305908
22.307681
WmMragParkow
NaN
NaN
NaN
66.847771
19.193611
NaN
NaN
53.866133
21.296122
WmOlsPuszkin
NaN
0.255000
8.900000
64.896797
28.088665
12.273949
4.300000
53.789233
20.486075
WmOstrChrobr
NaN
0.229335
3.139303
75.555634
20.775694
NaN
3.630187
53.692469
19.969778
WmPuszczaBor
NaN
NaN
NaN
69.400000
NaN
NaN
NaN
54.124819
22.038056
WpBoroDrapal
NaN
NaN
16.765900
63.604200
20.062200
NaN
3.177300
52.276794
17.074114
WpKaliSawick
NaN
0.293290
7.292280
96.528600
46.451500
25.463200
5.430830
51.749053
18.048389
WpKoniWyszyn
NaN
0.242300
13.815900
78.854200
30.590000
NaN
1.777670
52.225633
18.269036
WpPiaskiKrzy
NaN
NaN
9.542860
92.428800
NaN
NaN
4.715600
52.501389
17.773464
WpPilaKusoci
NaN
0.304330
21.447200
NaN
25.876100
NaN
4.576240
53.154408
16.759572
WpPoznDabrow
0.665240
0.171010
35.401700
70.391900
38.985100
NaN
3.766000
52.420319
16.877289
WpPoznPolank
NaN
0.326480
24.498000
NaN
17.930000
15.660800
1.962710
52.398175
16.959519
ZpKoszArKraj
NaN
NaN
26.577900
NaN
20.258600
NaN
2.017110
54.193986
16.172544
ZpSzczAndr01
NaN
NaN
19.543400
42.955000
14.078000
7.843790
4.307450
53.380975
14.663347
ZpSzczLacz04
NaN
NaN
NaN
NaN
22.224800
NaN
NaN
53.470889
14.556250
ZpSzczPils02
0.597820
0.506400
57.458300
NaN
NaN
13.368100
3.460960
53.432169
14.553900
ZpSzczecPrze
NaN
NaN
24.302700
NaN
41.259400
NaN
2.403990
53.698900
16.704572
ZpWiduBulRyb
NaN
NaN
3.452500
38.397300
NaN
NaN
0.094290
53.122319
14.382308
151 rows × 9 columns
In [13]:
for pollutant in pollutants:
print pollutant
scores = []
inputData = oneHour[[pollutant, "lat", "long"]]
predictData = inputData[~pd.notnull(inputData[pollutant])]
trainData = inputData[pd.notnull(inputData[pollutant])]
X = trainData[["lat", "long"]]
y = trainData[pollutant]
X_train, X_test, y_train, y_test = train_test_split(X.values,y.values, random_state=42)
for neighbo in range(1,len(X_train)+1):
#print neighbo
neigh = KNeighborsRegressor(n_neighbors=neighbo, weights="distance")
neigh.fit(X_train, y_train)
scores.append(neigh.score(X_test, y_test))
plt.plot(scores)
plt.title(pollutant)
plt.grid()
plt.show()
#break
C6H6
CO
NO2
O3
PM10
PM25
SO2
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
Content source: QuantumDamage/AQIP
Similar notebooks: