PM2.5预测
课程链接:李宏毅课程-机器学习
数据集介绍
- 本次作业使用丰原站的观测记录,分成 train set 跟 test set,train set 是丰原站每个月的前 20 天所有资料。test set 则是从丰原站剩下的资料中取样出来。
- train.csv: 每个月前 20 天的完整资料。
- test.csv : 从剩下的资料当中取样出连续的 10 小时为一笔,前九小时的所有观测数据当作 feature,第十小时的 PM2.5 当作 answer。一共取出 240 笔不重複的 test data,请根据 feature 预测这 240 笔的 PM2.5。
- Data 含有 18 项观测数据 AMB_TEMP, CH4, CO, NHMC, NO, NO2, NOx, O3, PM10, PM2.5, RAINFALL, RH, SO2, THC, WD_HR, WIND_DIREC, WIND_SPEED, WS_HR。
1.数据分析
import os
import pandas as pd
import numpy as np
data=pd.read_csv("work/hw1_data/train.csv", encoding="big5")
1.1观察数据
data.head(20)
| 日期 | 測站 | 測項 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | ... | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |
---|
0 | 2014/1/1 | 豐原 | AMB_TEMP | 14 | 14 | 14 | 13 | 12 | 12 | 12 | ... | 22 | 22 | 21 | 19 | 17 | 16 | 15 | 15 | 15 | 15 |
---|
1 | 2014/1/1 | 豐原 | CH4 | 1.8 | 1.8 | 1.8 | 1.8 | 1.8 | 1.8 | 1.8 | ... | 1.8 | 1.8 | 1.8 | 1.8 | 1.8 | 1.8 | 1.8 | 1.8 | 1.8 | 1.8 |
---|
2 | 2014/1/1 | 豐原 | CO | 0.51 | 0.41 | 0.39 | 0.37 | 0.35 | 0.3 | 0.37 | ... | 0.37 | 0.37 | 0.47 | 0.69 | 0.56 | 0.45 | 0.38 | 0.35 | 0.36 | 0.32 |
---|
3 | 2014/1/1 | 豐原 | NMHC | 0.2 | 0.15 | 0.13 | 0.12 | 0.11 | 0.06 | 0.1 | ... | 0.1 | 0.13 | 0.14 | 0.23 | 0.18 | 0.12 | 0.1 | 0.09 | 0.1 | 0.08 |
---|
4 | 2014/1/1 | 豐原 | NO | 0.9 | 0.6 | 0.5 | 1.7 | 1.8 | 1.5 | 1.9 | ... | 2.5 | 2.2 | 2.5 | 2.3 | 2.1 | 1.9 | 1.5 | 1.6 | 1.8 | 1.5 |
---|
5 | 2014/1/1 | 豐原 | NO2 | 16 | 9.2 | 8.2 | 6.9 | 6.8 | 3.8 | 6.9 | ... | 11 | 11 | 22 | 28 | 19 | 12 | 8.1 | 7 | 6.9 | 6 |
---|
6 | 2014/1/1 | 豐原 | NOx | 17 | 9.8 | 8.7 | 8.6 | 8.5 | 5.3 | 8.8 | ... | 14 | 13 | 25 | 30 | 21 | 13 | 9.7 | 8.6 | 8.7 | 7.5 |
---|
7 | 2014/1/1 | 豐原 | O3 | 16 | 30 | 27 | 23 | 24 | 28 | 24 | ... | 65 | 64 | 51 | 34 | 33 | 34 | 37 | 38 | 38 | 36 |
---|
8 | 2014/1/1 | 豐原 | PM10 | 56 | 50 | 48 | 35 | 25 | 12 | 4 | ... | 52 | 51 | 66 | 85 | 85 | 63 | 46 | 36 | 42 | 42 |
---|
9 | 2014/1/1 | 豐原 | PM2.5 | 26 | 39 | 36 | 35 | 31 | 28 | 25 | ... | 36 | 45 | 42 | 49 | 45 | 44 | 41 | 30 | 24 | 13 |
---|
10 | 2014/1/1 | 豐原 | RAINFALL | NR | NR | NR | NR | NR | NR | NR | ... | NR | NR | NR | NR | NR | NR | NR | NR | NR | NR |
---|
11 | 2014/1/1 | 豐原 | RH | 77 | 68 | 67 | 74 | 72 | 73 | 74 | ... | 47 | 49 | 56 | 67 | 72 | 69 | 70 | 70 | 70 | 69 |
---|
12 | 2014/1/1 | 豐原 | SO2 | 1.8 | 2 | 1.7 | 1.6 | 1.9 | 1.4 | 1.5 | ... | 3.9 | 4.4 | 9.9 | 5.1 | 3.4 | 2.3 | 2 | 1.9 | 1.9 | 1.9 |
---|
13 | 2014/1/1 | 豐原 | THC | 2 | 2 | 2 | 1.9 | 1.9 | 1.8 | 1.9 | ... | 1.9 | 1.9 | 1.9 | 2.1 | 2 | 1.9 | 1.9 | 1.9 | 1.9 | 1.9 |
---|
14 | 2014/1/1 | 豐原 | WD_HR | 37 | 80 | 57 | 76 | 110 | 106 | 101 | ... | 307 | 304 | 307 | 124 | 118 | 121 | 113 | 112 | 106 | 110 |
---|
15 | 2014/1/1 | 豐原 | WIND_DIREC | 35 | 79 | 2.4 | 55 | 94 | 116 | 106 | ... | 313 | 305 | 291 | 124 | 119 | 118 | 114 | 108 | 102 | 111 |
---|
16 | 2014/1/1 | 豐原 | WIND_SPEED | 1.4 | 1.8 | 1 | 0.6 | 1.7 | 2.5 | 2.5 | ... | 2.5 | 2.2 | 1.4 | 2.2 | 2.8 | 3 | 2.6 | 2.7 | 2.1 | 2.1 |
---|
17 | 2014/1/1 | 豐原 | WS_HR | 0.5 | 0.9 | 0.6 | 0.3 | 0.6 | 1.9 | 2 | ... | 2.1 | 2.1 | 1.9 | 1 | 2.5 | 2.5 | 2.8 | 2.6 | 2.4 | 2.3 |
---|
18 | 2014/1/2 | 豐原 | AMB_TEMP | 16 | 15 | 15 | 14 | 14 | 15 | 16 | ... | 24 | 24 | 23 | 21 | 20 | 19 | 18 | 18 | 18 | 18 |
---|
19 | 2014/1/2 | 豐原 | CH4 | 1.8 | 1.8 | 1.8 | 1.8 | 1.8 | 1.8 | 1.8 | ... | 1.8 | 1.8 | 1.8 | 1.8 | 1.8 | 1.8 | 1.8 | 1.8 | 1.8 | 1.8 |
---|
20 rows × 27 columns
data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 4320 entries, 0 to 4319
Data columns (total 27 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 日期 4320 non-null object
1 測站 4320 non-null object
2 測項 4320 non-null object
3 0 4320 non-null object
4 1 4320 non-null object
5 2 4320 non-null object
6 3 4320 non-null object
7 4 4320 non-null object
8 5 4320 non-null object
9 6 4320 non-null object
10 7 4320 non-null object
11 8 4320 non-null object
12 9 4320 non-null object
13 10 4320 non-null object
14 11 4320 non-null object
15 12 4320 non-null object
16 13 4320 non-null object
17 14 4320 non-null object
18 15 4320 non-null object
19 16 4320 non-null object
20 17 4320 non-null object
21 18 4320 non-null object
22 19 4320 non-null object
23 20 4320 non-null object
24 21 4320 non-null object
25 22 4320 non-null object
26 23 4320 non-null object
dtypes: object(27)
memory usage: 911.4+ KB
data.describe()
| 日期 | 測站 | 測項 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | ... | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |
---|
count | 4320 | 4320 | 4320 | 4320 | 4320 | 4320 | 4320 | 4320 | 4320 | 4320 | ... | 4320 | 4320 | 4320 | 4320 | 4320 | 4320 | 4320 | 4320 | 4320 | 4320 |
---|
unique | 240 | 1 | 18 | 369 | 361 | 351 | 355 | 353 | 342 | 356 | ... | 423 | 411 | 409 | 423 | 405 | 374 | 366 | 374 | 382 | 370 |
---|
top | 2014/1/20 | 豐原 | WIND_SPEED | NR | NR | NR | NR | NR | NR | NR | ... | NR | NR | NR | NR | NR | NR | NR | NR | NR | NR |
---|
freq | 18 | 4320 | 240 | 221 | 225 | 229 | 226 | 229 | 230 | 226 | ... | 220 | 219 | 221 | 221 | 222 | 223 | 225 | 224 | 226 | 224 |
---|
4 rows × 27 columns
1.1特征抽取
data=data.iloc[:,3:]
data[data=='NR']=0
numpy_data=data.to_numpy()
data.head(18)
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | ... | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |
---|
0 | 14 | 14 | 14 | 13 | 12 | 12 | 12 | 12 | 15 | 17 | ... | 22 | 22 | 21 | 19 | 17 | 16 | 15 | 15 | 15 | 15 |
---|
1 | 1.8 | 1.8 | 1.8 | 1.8 | 1.8 | 1.8 | 1.8 | 1.8 | 1.8 | 1.8 | ... | 1.8 | 1.8 | 1.8 | 1.8 | 1.8 | 1.8 | 1.8 | 1.8 | 1.8 | 1.8 |
---|
2 | 0.51 | 0.41 | 0.39 | 0.37 | 0.35 | 0.3 | 0.37 | 0.47 | 0.78 | 0.74 | ... | 0.37 | 0.37 | 0.47 | 0.69 | 0.56 | 0.45 | 0.38 | 0.35 | 0.36 | 0.32 |
---|
3 | 0.2 | 0.15 | 0.13 | 0.12 | 0.11 | 0.06 | 0.1 | 0.13 | 0.26 | 0.23 | ... | 0.1 | 0.13 | 0.14 | 0.23 | 0.18 | 0.12 | 0.1 | 0.09 | 0.1 | 0.08 |
---|
4 | 0.9 | 0.6 | 0.5 | 1.7 | 1.8 | 1.5 | 1.9 | 2.2 | 6.6 | 7.9 | ... | 2.5 | 2.2 | 2.5 | 2.3 | 2.1 | 1.9 | 1.5 | 1.6 | 1.8 | 1.5 |
---|
5 | 16 | 9.2 | 8.2 | 6.9 | 6.8 | 3.8 | 6.9 | 7.8 | 15 | 21 | ... | 11 | 11 | 22 | 28 | 19 | 12 | 8.1 | 7 | 6.9 | 6 |
---|
6 | 17 | 9.8 | 8.7 | 8.6 | 8.5 | 5.3 | 8.8 | 9.9 | 22 | 29 | ... | 14 | 13 | 25 | 30 | 21 | 13 | 9.7 | 8.6 | 8.7 | 7.5 |
---|
7 | 16 | 30 | 27 | 23 | 24 | 28 | 24 | 22 | 21 | 29 | ... | 65 | 64 | 51 | 34 | 33 | 34 | 37 | 38 | 38 | 36 |
---|
8 | 56 | 50 | 48 | 35 | 25 | 12 | 4 | 2 | 11 | 38 | ... | 52 | 51 | 66 | 85 | 85 | 63 | 46 | 36 | 42 | 42 |
---|
9 | 26 | 39 | 36 | 35 | 31 | 28 | 25 | 20 | 19 | 30 | ... | 36 | 45 | 42 | 49 | 45 | 44 | 41 | 30 | 24 | 13 |
---|
10 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
---|
11 | 77 | 68 | 67 | 74 | 72 | 73 | 74 | 73 | 66 | 56 | ... | 47 | 49 | 56 | 67 | 72 | 69 | 70 | 70 | 70 | 69 |
---|
12 | 1.8 | 2 | 1.7 | 1.6 | 1.9 | 1.4 | 1.5 | 1.6 | 5.1 | 15 | ... | 3.9 | 4.4 | 9.9 | 5.1 | 3.4 | 2.3 | 2 | 1.9 | 1.9 | 1.9 |
---|
13 | 2 | 2 | 2 | 1.9 | 1.9 | 1.8 | 1.9 | 1.9 | 2.1 | 2 | ... | 1.9 | 1.9 | 1.9 | 2.1 | 2 | 1.9 | 1.9 | 1.9 | 1.9 | 1.9 |
---|
14 | 37 | 80 | 57 | 76 | 110 | 106 | 101 | 104 | 124 | 46 | ... | 307 | 304 | 307 | 124 | 118 | 121 | 113 | 112 | 106 | 110 |
---|
15 | 35 | 79 | 2.4 | 55 | 94 | 116 | 106 | 94 | 232 | 153 | ... | 313 | 305 | 291 | 124 | 119 | 118 | 114 | 108 | 102 | 111 |
---|
16 | 1.4 | 1.8 | 1 | 0.6 | 1.7 | 2.5 | 2.5 | 2 | 0.6 | 0.8 | ... | 2.5 | 2.2 | 1.4 | 2.2 | 2.8 | 3 | 2.6 | 2.7 | 2.1 | 2.1 |
---|
17 | 0.5 | 0.9 | 0.6 | 0.3 | 0.6 | 1.9 | 2 | 2 | 0.5 | 0.3 | ... | 2.1 | 2.1 | 1.9 | 1 | 2.5 | 2.5 | 2.8 | 2.6 | 2.4 | 2.3 |
---|
18 rows × 24 columns
month_data={}
for month in range(12):
sample=np.empty([18,480])
for day in range(20):
sample[:, day*24:(day+1)*24]=numpy_data[18*(20*month +day): 18*(20*month +day+1),:]
month_data[month]=sample
1.1数据分析
x=np.empty([12*471,18*9],dtype=float)
y=np.empty([12*471,1],dtype=float)
for month in range(12):
for day in range(20):
for hour in range(24):
if day==19 and hour>14:
continue
x[month*471+day*24+hour,:]=month_data[month][:,day*24+hour:day*24+hour+9].reshape(1,-1)
y[month*471+day*24+hour,0]=month_data[month][9,day*24+hour+9]
print(x)
print(y)
[[14. 14. 14. ... 2. 2. 0.5]
[14. 14. 13. ... 2. 0.5 0.3]
[14. 13. 12. ... 0.5 0.3 0.8]
...
[17. 18. 19. ... 1.1 1.4 1.3]
[18. 19. 18. ... 1.4 1.3 1.6]
[19. 18. 17. ... 1.3 1.6 1.8]]
[[30.]
[41.]
[44.]
...
[17.]
[24.]
[29.]]
1.1归一化
mean_x = np.mean(x, axis = 0)
std_x = np.std(x, axis = 0)
for i in range(len(x)):
for j in range(len(x[0])):
if std_x[j] != 0:
x[i][j] = (x[i][j] - mean_x[j]) / std_x[j]
import math
x_train_set = x[: math.floor(len(x) * 0.8), :]
y_train_set = y[: math.floor(len(y) * 0.8), :]
x_validation = x[math.floor(len(x) * 0.8): , :]
y_validation = y[math.floor(len(y) * 0.8): , :]
print(x_train_set)
print(y_train_set)
print(x_validation)
print(y_validation)
print(len(x_train_set))
print(len(y_train_set))
print(len(x_validation))
print(len(y_validation))
[[-1.35825331 -1.35883937 -1.359222 ... 0.26650729 0.2656797
-1.14082131]
[-1.35825331 -1.35883937 -1.51819928 ... 0.26650729 -1.13963133
-1.32832904]
[-1.35825331 -1.51789368 -1.67717656 ... -1.13923451 -1.32700613
-0.85955971]
...
[ 0.86929969 0.70886668 0.38952809 ... 1.39110073 0.2656797
-0.39079039]
[ 0.71018876 0.39075806 0.07157353 ... 0.26650729 -0.39013211
-0.39079039]
[ 0.3919669 0.07264944 0.07157353 ... -0.38950555 -0.39013211
-0.85955971]]
[[30.]
[41.]
[44.]
...
[ 7.]
[ 5.]
[14.]]
[[ 0.07374504 0.07264944 0.07157353 ... -0.38950555 -0.85856912
-0.57829812]
[ 0.07374504 0.07264944 0.23055081 ... -0.85808615 -0.57750692
0.54674825]
[ 0.07374504 0.23170375 0.23055081 ... -0.57693779 0.54674191
-0.1095288 ]
...
[-0.88092053 -0.72262212 -0.56433559 ... -0.57693779 -0.29644471
-0.39079039]
[-0.7218096 -0.56356781 -0.72331287 ... -0.29578943 -0.39013211
-0.1095288 ]
[-0.56269867 -0.72262212 -0.88229015 ... -0.38950555 -0.10906991
0.07797893]]
[[13.]
[24.]
[22.]
...
[17.]
[24.]
[29.]]
4521
4521
1131
1131
2.训练
dim = 18 * 9 + 1
w = np.zeros([dim, 1])
x = np.concatenate((np.ones([12 * 471, 1]), x), axis = 1).astype(float)
learning_rate = 100
iter_time = 3000
adagrad = np.zeros([dim, 1])
eps = 0.0000000001
for t in range(iter_time):
loss = np.sqrt(np.sum(np.power(np.dot(x, w) - y, 2))/471/12)
if(t%100==0):
print(str(t) + ":" + str(loss))
gradient = 2 * np.dot(x.transpose(), np.dot(x, w) - y)
adagrad += gradient ** 2
w = w - learning_rate * gradient / np.sqrt(adagrad + eps)
np.save('weight.npy', w)
0:27.071214829194115
100:33.78905859777454
200:19.913751298197102
300:13.531068193689693
400:10.645466158446172
500:9.277353455475067
600:8.518042045956506
700:8.014061987588427
800:7.636756824775698
900:7.336563740371129
1000:7.090968643947224
1100:6.887311480324104
1200:6.717116295730699
1300:6.574102121171872
1400:6.453381172520272
1500:6.351062466046938
1600:6.264012287766374
1700:6.18968838345321
1800:6.126016764546809
1900:6.071297135545992
2000:6.024129170225593
2100:5.98335455636348
2200:5.94801117011856
2300:5.9172966606664765
2400:5.890539375339805
2500:5.867175036840055
2600:5.846727947724756
2700:5.82879577424176
2800:5.8130371731415105
2900:5.799161687153943
3.测试
test_data=pd.read_csv("work/hw1_data/test.csv",header=None, encoding="big5")
test_data.head()
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|
0 | id_0 | AMB_TEMP | 21 | 21 | 20 | 20 | 19 | 19 | 19 | 18 | 17 |
---|
1 | id_0 | CH4 | 1.7 | 1.7 | 1.7 | 1.7 | 1.7 | 1.7 | 1.7 | 1.7 | 1.8 |
---|
2 | id_0 | CO | 0.39 | 0.36 | 0.36 | 0.4 | 0.53 | 0.55 | 0.34 | 0.31 | 0.23 |
---|
3 | id_0 | NMHC | 0.16 | 0.24 | 0.22 | 0.27 | 0.27 | 0.26 | 0.27 | 0.29 | 0.1 |
---|
4 | id_0 | NO | 1.3 | 1.3 | 1.3 | 1.3 | 1.4 | 1.6 | 1.2 | 1.1 | 0.9 |
---|
test_data=test_data.iloc[:,2:]
test_data.head(18)
| 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|
0 | 21 | 21 | 20 | 20 | 19 | 19 | 19 | 18 | 17 |
---|
1 | 1.7 | 1.7 | 1.7 | 1.7 | 1.7 | 1.7 | 1.7 | 1.7 | 1.8 |
---|
2 | 0.39 | 0.36 | 0.36 | 0.4 | 0.53 | 0.55 | 0.34 | 0.31 | 0.23 |
---|
3 | 0.16 | 0.24 | 0.22 | 0.27 | 0.27 | 0.26 | 0.27 | 0.29 | 0.1 |
---|
4 | 1.3 | 1.3 | 1.3 | 1.3 | 1.4 | 1.6 | 1.2 | 1.1 | 0.9 |
---|
5 | 17 | 14 | 13 | 14 | 18 | 21 | 8.9 | 9.4 | 5 |
---|
6 | 18 | 16 | 14 | 15 | 20 | 23 | 10 | 10 | 5.8 |
---|
7 | 32 | 31 | 31 | 26 | 16 | 12 | 27 | 20 | 26 |
---|
8 | 62 | 50 | 44 | 39 | 38 | 32 | 48 | 36 | 25 |
---|
9 | 33 | 39 | 39 | 25 | 18 | 18 | 17 | 9 | 4 |
---|
10 | NR | NR | NR | NR | NR | NR | NR | NR | NR |
---|
11 | 83 | 85 | 87 | 87 | 86 | 85 | 78 | 81 | 80 |
---|
12 | 2 | 1.8 | 1.8 | 1.8 | 2.1 | 2.6 | 2 | 2.3 | 2.4 |
---|
13 | 1.8 | 1.9 | 1.9 | 2 | 2 | 2 | 2 | 2 | 1.9 |
---|
14 | 58 | 53 | 67 | 59 | 59 | 73 | 79 | 82 | 104 |
---|
15 | 57 | 44 | 73 | 44 | 56 | 115 | 45 | 107 | 103 |
---|
16 | 1.4 | 1.3 | 1.5 | 1.4 | 1.6 | 1.6 | 1.2 | 1.8 | 2.3 |
---|
17 | 1 | 0.9 | 0.9 | 0.9 | 1.2 | 0.7 | 1 | 0.6 | 1.8 |
---|
test_data[test_data == 'NR'] = 0
test_data=test_data.to_numpy()
test_x=np.empty([240,18*9], dtype=float)
for i in range(240):
test_x[i, :] = test_data[18 * i: 18* (i + 1), :].reshape(1, -1)
for i in range(len(test_x)):
for j in range(len(test_x[0])):
if std_x[j] != 0:
test_x[i][j] = (test_x[i][j] - mean_x[j]) / std_x[j]
test_x = np.concatenate((np.ones([240, 1]), test_x), axis = 1).astype(float)
4.预测
w=np.load("weight.npy")
ans_y=np.dot(test_x,w)
5.保存
import csv
with open("submit.csv", mode="w",newline='') as submit_file:
csv_writer=csv.writer(submit_file)
header=['id','value']
csv_writer.writerow(header)
for i in range(240):
row=["id_" +str (i), ans_y[i][0]]
csv_writer.writerow(row)
print(row)
['id_0', 6.664170072810432]
['id_1', 18.06982655390777]
['id_2', 22.749942554291376]
['id_3', 8.180003749823934]
['id_4', 27.299558542667313]
['id_5', 21.792597812878892]
['id_6', 23.292841352717286]
['id_7', 30.78108127047032]
['id_8', 16.586402887372365]
['id_9', 60.38550637230346]
['id_10', 12.993646232319968]
['id_11', 10.70200092475075]
['id_12', 65.64215329134743]
['id_13', 52.053427445578166]
['id_14', 21.375482365639467]
['id_15', 11.574783938138383]
['id_16', 32.25504500615686]
['id_17', 67.31566462493525]
['id_18', -0.6161598259829901]
['id_19', 17.665748375976165]
['id_20', 40.895099614627014]
['id_21', 72.26013598885945]
['id_22', 9.638987238738466]
['id_23', 17.84024484244622]
['id_24', 15.127968656872923]
['id_25', 36.92049576207732]
['id_26', 15.646177020329155]
['id_27', 72.87300224422786]
['id_28', 8.418221455802819]
['id_29', 55.413280515043375]
['id_30', 24.051900611720047]
['id_31', 7.595635842604071]
['id_32', 2.80866765727627]
['id_33', 20.849380390807408]
['id_34', 28.71170267153394]
['id_35', 37.875874390298236]
['id_36', 44.1847957487677]
['id_37', 30.146475294376234]
['id_38', 42.03786649980424]
['id_39', 34.65230321491354]
['id_40', 7.9113030707433]
['id_41', 41.395781258982645]
['id_42', 31.05374516132014]
['id_43', 50.00315759679335]
['id_44', 17.211685655310127]
['id_45', 35.19296162566461]
['id_46', 25.11387615254853]
['id_47', 9.720234223141482]
['id_48', 24.515130798666405]
['id_49', 31.47494455467578]
['id_50', 19.730949751475126]
['id_51', 8.913291561410212]
['id_52', 20.08798021632116]
['id_53', 53.27254568096532]
['id_54', 15.401087303450515]
['id_55', 37.67053940110959]
['id_56', 32.77899247186974]
['id_57', 21.41123889586001]
['id_58', 57.44806119989436]
['id_59', 21.678187560593535]
['id_60', 13.924095056569524]
['id_61', 41.16552226689072]
['id_62', 12.220232179497945]
['id_63', 48.60016487461208]
['id_64', 15.449295044541138]
['id_65', 15.038868567741854]
['id_66', 14.77659312157298]
['id_67', -0.12393970622780448]
['id_68', 43.013878736068186]
['id_69', 29.769997719853897]
['id_70', 19.4049186045943]
['id_71', 41.43270974491587]
['id_72', 60.011021614481734]
['id_73', 5.790473833735811]
['id_74', 15.060835293176906]
['id_75', 4.607634748943204]
['id_76', 42.4516627197642]
['id_77', 14.519597292642706]
['id_78', 21.144383868224526]
['id_79', 21.458453159307826]
['id_80', 23.47307510296709]
['id_81', 37.15080977541598]
['id_82', 23.196667102835374]
['id_83', 91.56436218225427]
['id_84', 37.01454023799413]
['id_85', 27.381368065697778]
['id_86', 22.51258704891688]
['id_87', 33.82908925642835]
['id_88', 23.7163185502162]
['id_89', 20.662333868645504]
['id_90', 27.16043037321573]
['id_91', 41.32360066432416]
['id_92', 4.950227076793279]
['id_93', 37.37826866950743]
['id_94', 45.66315465680254]
['id_95', 17.302825821514663]
['id_96', 32.2655664599684]
['id_97', 12.80342575817804]
['id_98', 24.514520107876013]
['id_99', 3.341263213367584]
['id_100', 17.7448081070595]
['id_101', 26.872663627227507]
['id_102', 13.432976335449231]
['id_103', 16.18361580153564]
['id_104', 23.745951452171397]
['id_105', 39.561980585215764]
['id_106', 30.569407437373993]
['id_107', 5.820516753820944]
['id_108', 7.776261212910277]
['id_109', 77.0360134901067]
['id_110', 48.51823236080682]
['id_111', 16.64399607916922]
['id_112', 27.89744678811886]
['id_113', 14.83503023603293]
['id_114', 12.350386773467099]
['id_115', 25.546454972791217]
['id_116', 27.295384379560794]
['id_117', 8.96325256218069]
['id_118', 17.270871337434464]
['id_119', 19.504275336220687]
['id_120', 80.42775154412193]
['id_121', 24.520714650707642]
['id_122', 36.60616009374052]
['id_123', 25.656459693387426]
['id_124', 6.756581151491991]
['id_125', 36.283040396068415]
['id_126', 8.449660049798918]
['id_127', 20.78541125464159]
['id_128', 28.07463452536681]
['id_129', 62.379890206239324]
['id_130', 20.29238599569938]
['id_131', 22.28870198252149]
['id_132', 59.33642653123038]
['id_133', 15.045482592933437]
['id_134', 14.1280592394024]
['id_135', 2.100755891474563]
['id_136', 11.483021758532646]
['id_137', 58.69987491139861]
['id_138', 21.30603819937202]
['id_139', 5.202835758613455]
['id_140', 30.614122638778852]
['id_141', 25.47776196375223]
['id_142', 46.22992006563068]
['id_143', 33.11002087024068]
['id_144', 17.46932186570128]
['id_145', 26.410956914472152]
['id_146', 13.159193439136454]
['id_147', 52.625202084698806]
['id_148', 23.811496585530058]
['id_149', 38.662302933242884]
['id_150', 11.044546263121934]
['id_151', 7.924147960146024]
['id_152', 23.872212660168767]
['id_153', 6.645445699285511]
['id_154', 15.452061334036236]
['id_155', 42.18119392984227]
['id_156', 7.590869211709671]
['id_157', 35.85064322159984]
['id_158', 11.648548436310495]
['id_159', 18.140214754345795]
['id_160', 40.82481616283134]
['id_161', 19.500250826726067]
['id_162', 11.927610907650287]
['id_163', 8.715880232728168]
['id_164', 51.66032451877395]
['id_165', 30.757728029528145]
['id_166', 0.7046788784008329]
['id_167', 15.69909391829567]
['id_168', 64.85026914636217]
['id_169', 14.091863832826492]
['id_170', 64.63390138328151]
['id_171', 41.1034153470575]
['id_172', 26.10220500513233]
['id_173', 21.306744952037718]
['id_174', 60.772880949567615]
['id_175', 25.640875539198568]
['id_176', 20.607724023722504]
['id_177', 36.440294733916055]
['id_178', 11.811390300876912]
['id_179', 31.04992122482525]
['id_180', 16.039969277294592]
['id_181', 11.636852886319232]
['id_182', 54.69463439993815]
['id_183', 45.554294800332826]
['id_184', 15.832874697329283]
['id_185', 35.30002592484912]
['id_186', 25.875100126915225]
['id_187', 69.12454857221925]
['id_188', 9.494422607611392]
['id_189', 56.09961011371668]
['id_190', 39.136486183970376]
['id_191', 17.750604163833337]
['id_192', 29.47332438184137]
['id_193', 1.0621027165500536]
['id_194', 19.635975194399606]
['id_195', 0.7239894381238666]
['id_196', 33.07818517010954]
['id_197', 10.39208734094487]
['id_198', 20.276530494790233]
['id_199', 60.57784848719553]
['id_200', 24.181583155767832]
['id_201', 25.220427389246172]
['id_202', 63.91231956611171]
['id_203', 8.6049510235601]
['id_204', 10.774123100084637]
['id_205', 11.05959353984231]
['id_206', 8.319178490346888]
['id_207', 1.996366494421347]
['id_208', 123.6426703940643]
['id_209', 21.014115178472828]
['id_210', 16.35701579048604]
['id_211', 15.284669239242278]
['id_212', 36.57007486198091]
['id_213', 36.122765008736714]
['id_214', 19.133595484703864]
['id_215', 35.399719868445146]
['id_216', 79.16726976217178]
['id_217', 0.7588151400164959]
['id_218', 13.148987152389058]
['id_219', 33.17931057833607]
['id_220', 15.085274432347417]
['id_221', 12.104912457818461]
['id_222', 113.28037023558156]
['id_223', 13.251132251849445]
['id_224', 16.92991057921663]
['id_225', 62.99821540914401]
['id_226', 15.707022994664912]
['id_227', 22.866534471291352]
['id_228', 10.651456054090744]
['id_229', 3.9686051537628377]
['id_230', 46.1859017733578]
['id_231', 12.635141586554013]
['id_232', 52.86065960966461]
['id_233', 42.90487239996108]
['id_234', 23.100383883121143]
['id_235', 41.10669330061684]
['id_236', 69.54906403996627]
['id_237', 41.822846361366885]
['id_238', 11.851913749450345]
['id_239', 17.43921590024002]