├── .gitignore
├── all
├── test.csv.gz
├── train.csv.gz
├── sample_submission.csv.gz
├── data_description.txt
└── sample_submission.csv
├── README.md
├── utils.py
└── predict-house-prices.ipynb
/.gitignore:
--------------------------------------------------------------------------------
1 | __pycache__
2 | .ipynb_checkpoints
3 | .DS_store
4 | .idea
--------------------------------------------------------------------------------
/all/test.csv.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/L1aoXingyu/kaggle-house-price/HEAD/all/test.csv.gz
--------------------------------------------------------------------------------
/all/train.csv.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/L1aoXingyu/kaggle-house-price/HEAD/all/train.csv.gz
--------------------------------------------------------------------------------
/all/sample_submission.csv.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/L1aoXingyu/kaggle-house-price/HEAD/all/sample_submission.csv.gz
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # kaggle 房价预测比赛
2 |
3 | ## 项目介绍
4 |
5 | 在这个项目中,我们给定一个一层神经网络的baseline以及一些帮助函数,大家可以自由建立任意的神经网络来对[kaggle房价预测](https://www.kaggle.com/c/house-prices-advanced-regression-techniques)的比赛进行预测,通过该项目,我们能够对神经网络以及调参有一个更加全面的了解。
6 |
7 | ## 项目下载
8 |
9 | 打开终端,运行
10 | ```bash
11 | git clone https://github.com/L1aoXingyu/kaggle-house-price.git
12 | ```
13 | 能够自动下载项目,或者网页直接下载
14 |
15 |
16 |

17 |
18 |
19 | 通过上面的过程,我们准备好了项目,在开始之前,需要根据 [StartKit](https://github.com/sharedeeply/DeepLearning-StartKit) 配置好了深度学习环境,所以请按照操作完成深度学习环境的配置,当你完成好环境配置之后,你可以直接进入 `predict-house-prices.ipynb` 完成项目。
20 |
21 | ## 数据下载
22 | 我们已经将数据集放在了项目中,大家根据上面下载好项目之后,便能在`all`中看到所有的数据集。
23 |
24 | ## 评估与提交
25 |
26 | 通过`predict-house-prices.ipynb`,你会建立一个模型进行房价的预测,同时在测试集上能够看到模型的效果,最后可以得到一个最优的模型,并在 testset 上面运行结果,在 kaggle 的[提交页面](https://www.kaggle.com/c/house-prices-advanced-regression-techniques)上面按照下面的步骤提交。
27 |
28 | 1. 点击提交结果
29 |
30 |
31 |

32 |
33 |
34 | 2. 提交本地生成的文件
35 |
36 |
37 |

38 |
39 |
40 | 3. 提交结果
41 |
42 |
43 |

44 |
45 |
46 | 4. 查看结果
47 |
48 |
49 |

50 |
51 |
52 | 可以考虑在 Github 上为该项目创建一个仓库,记录训练的过程、所使用的库以及数据等的 README 文档,构建一个完善的 Github 简历。
53 |
--------------------------------------------------------------------------------
/utils.py:
--------------------------------------------------------------------------------
1 | # encoding: utf-8
2 | """
3 | @author: sherlock
4 | @contact: sherlockliao01@gmail.com
5 | """
6 |
7 | from __future__ import absolute_import
8 | from __future__ import division
9 | from __future__ import print_function
10 | from __future__ import unicode_literals
11 |
12 | from collections import defaultdict
13 |
14 | import numpy as np
15 | import matplotlib.pyplot as plt
16 | import pandas as pd
17 | import torch
18 | from torch import nn
19 | from torch.utils.data import DataLoader
20 | from torch.utils.data import TensorDataset
21 |
22 |
23 | def get_data(x, y, batch_size, shuffle):
24 | dataset = TensorDataset(x, y)
25 | return DataLoader(dataset, batch_size, shuffle=shuffle, num_workers=4)
26 |
27 |
28 | def train_model(model, x_train, y_train, x_valid, y_valid, epochs, batch_size, lr, weight_decay, use_gpu):
29 | if use_gpu:
30 | model = model.cuda()
31 | metric_log = defaultdict(list)
32 |
33 | train_data = get_data(x_train, y_train, batch_size, True)
34 | if x_valid is not None:
35 | valid_data = get_data(x_valid, y_valid, batch_size, False)
36 | else:
37 | valid_data = None
38 |
39 | optimizer = torch.optim.Adam(model.parameters(), lr=lr, weight_decay=weight_decay)
40 | criterion = nn.MSELoss()
41 |
42 | for e in range(epochs):
43 | # 训练模型
44 | model.train()
45 | for data in train_data:
46 | x, y = data
47 | if use_gpu:
48 | x = x.cuda()
49 | y = y.cuda()
50 | # forward
51 | out = model(x)
52 | loss = criterion(out, y)
53 | # backward
54 | optimizer.zero_grad()
55 | loss.backward()
56 | optimizer.step()
57 |
58 | metric_log['train_rmse'].append(get_rmse(model, x_train, y_train, use_gpu))
59 |
60 | # 测试模型
61 | if x_valid is not None:
62 | metric_log['valid_rmse'].append(get_rmse(model, x_valid, y_valid, use_gpu))
63 | print_str = 'epoch: {}, train rmse: {:.3f}, valid rmse: {:.3f}' \
64 | .format(e + 1, metric_log['train_rmse'][-1], metric_log['valid_rmse'][-1])
65 | else:
66 | print_str = 'epoch: {}, train rmse: {:.3f}'.format(e + 1, metric_log['train_rmse'][-1])
67 | if (e + 1) % 10 == 0:
68 | print(print_str)
69 | print()
70 |
71 | # 可视化
72 | figsize = (10, 5)
73 | fig = plt.figure(figsize=figsize)
74 | plt.plot(metric_log['train_rmse'], color='red', label='train')
75 | if valid_data is not None:
76 | plt.plot(metric_log['valid_rmse'], color='blue', label='valid')
77 | plt.legend(loc='best')
78 | plt.xlabel('epochs')
79 | plt.ylabel('loss')
80 | plt.show()
81 |
82 |
83 | def get_rmse(model, feature, label, use_gpu):
84 | if use_gpu:
85 | feature = feature.cuda()
86 | label = label.cuda()
87 | model.eval()
88 | mse_loss = nn.MSELoss()
89 | with torch.no_grad():
90 | pred = model(feature)
91 | # clipped_pred = pred.clamp(1, float('inf'))
92 | rmse = (mse_loss(pred, label)).sqrt()
93 | return rmse.item()
94 |
95 |
96 | def pred(net, test_data, test_features):
97 | net = net.eval()
98 | net = net.cpu()
99 | with torch.no_grad():
100 | preds = net(test_features)
101 | preds = np.exp(preds.numpy())
102 | test_data['SalePrice'] = pd.Series(preds.reshape(1, -1)[0])
103 | submission = pd.concat([test_data['Id'], test_data['SalePrice']], axis=1)
104 | submission.to_csv('submission.csv', index=False)
105 |
--------------------------------------------------------------------------------
/all/data_description.txt:
--------------------------------------------------------------------------------
1 | MSSubClass: Identifies the type of dwelling involved in the sale.
2 |
3 | 20 1-STORY 1946 & NEWER ALL STYLES
4 | 30 1-STORY 1945 & OLDER
5 | 40 1-STORY W/FINISHED ATTIC ALL AGES
6 | 45 1-1/2 STORY - UNFINISHED ALL AGES
7 | 50 1-1/2 STORY FINISHED ALL AGES
8 | 60 2-STORY 1946 & NEWER
9 | 70 2-STORY 1945 & OLDER
10 | 75 2-1/2 STORY ALL AGES
11 | 80 SPLIT OR MULTI-LEVEL
12 | 85 SPLIT FOYER
13 | 90 DUPLEX - ALL STYLES AND AGES
14 | 120 1-STORY PUD (Planned Unit Development) - 1946 & NEWER
15 | 150 1-1/2 STORY PUD - ALL AGES
16 | 160 2-STORY PUD - 1946 & NEWER
17 | 180 PUD - MULTILEVEL - INCL SPLIT LEV/FOYER
18 | 190 2 FAMILY CONVERSION - ALL STYLES AND AGES
19 |
20 | MSZoning: Identifies the general zoning classification of the sale.
21 |
22 | A Agriculture
23 | C Commercial
24 | FV Floating Village Residential
25 | I Industrial
26 | RH Residential High Density
27 | RL Residential Low Density
28 | RP Residential Low Density Park
29 | RM Residential Medium Density
30 |
31 | LotFrontage: Linear feet of street connected to property
32 |
33 | LotArea: Lot size in square feet
34 |
35 | Street: Type of road access to property
36 |
37 | Grvl Gravel
38 | Pave Paved
39 |
40 | Alley: Type of alley access to property
41 |
42 | Grvl Gravel
43 | Pave Paved
44 | NA No alley access
45 |
46 | LotShape: General shape of property
47 |
48 | Reg Regular
49 | IR1 Slightly irregular
50 | IR2 Moderately Irregular
51 | IR3 Irregular
52 |
53 | LandContour: Flatness of the property
54 |
55 | Lvl Near Flat/Level
56 | Bnk Banked - Quick and significant rise from street grade to building
57 | HLS Hillside - Significant slope from side to side
58 | Low Depression
59 |
60 | Utilities: Type of utilities available
61 |
62 | AllPub All public Utilities (E,G,W,& S)
63 | NoSewr Electricity, Gas, and Water (Septic Tank)
64 | NoSeWa Electricity and Gas Only
65 | ELO Electricity only
66 |
67 | LotConfig: Lot configuration
68 |
69 | Inside Inside lot
70 | Corner Corner lot
71 | CulDSac Cul-de-sac
72 | FR2 Frontage on 2 sides of property
73 | FR3 Frontage on 3 sides of property
74 |
75 | LandSlope: Slope of property
76 |
77 | Gtl Gentle slope
78 | Mod Moderate Slope
79 | Sev Severe Slope
80 |
81 | Neighborhood: Physical locations within Ames city limits
82 |
83 | Blmngtn Bloomington Heights
84 | Blueste Bluestem
85 | BrDale Briardale
86 | BrkSide Brookside
87 | ClearCr Clear Creek
88 | CollgCr College Creek
89 | Crawfor Crawford
90 | Edwards Edwards
91 | Gilbert Gilbert
92 | IDOTRR Iowa DOT and Rail Road
93 | MeadowV Meadow Village
94 | Mitchel Mitchell
95 | Names North Ames
96 | NoRidge Northridge
97 | NPkVill Northpark Villa
98 | NridgHt Northridge Heights
99 | NWAmes Northwest Ames
100 | OldTown Old Town
101 | SWISU South & West of Iowa State University
102 | Sawyer Sawyer
103 | SawyerW Sawyer West
104 | Somerst Somerset
105 | StoneBr Stone Brook
106 | Timber Timberland
107 | Veenker Veenker
108 |
109 | Condition1: Proximity to various conditions
110 |
111 | Artery Adjacent to arterial street
112 | Feedr Adjacent to feeder street
113 | Norm Normal
114 | RRNn Within 200' of North-South Railroad
115 | RRAn Adjacent to North-South Railroad
116 | PosN Near positive off-site feature--park, greenbelt, etc.
117 | PosA Adjacent to postive off-site feature
118 | RRNe Within 200' of East-West Railroad
119 | RRAe Adjacent to East-West Railroad
120 |
121 | Condition2: Proximity to various conditions (if more than one is present)
122 |
123 | Artery Adjacent to arterial street
124 | Feedr Adjacent to feeder street
125 | Norm Normal
126 | RRNn Within 200' of North-South Railroad
127 | RRAn Adjacent to North-South Railroad
128 | PosN Near positive off-site feature--park, greenbelt, etc.
129 | PosA Adjacent to postive off-site feature
130 | RRNe Within 200' of East-West Railroad
131 | RRAe Adjacent to East-West Railroad
132 |
133 | BldgType: Type of dwelling
134 |
135 | 1Fam Single-family Detached
136 | 2FmCon Two-family Conversion; originally built as one-family dwelling
137 | Duplx Duplex
138 | TwnhsE Townhouse End Unit
139 | TwnhsI Townhouse Inside Unit
140 |
141 | HouseStyle: Style of dwelling
142 |
143 | 1Story One story
144 | 1.5Fin One and one-half story: 2nd level finished
145 | 1.5Unf One and one-half story: 2nd level unfinished
146 | 2Story Two story
147 | 2.5Fin Two and one-half story: 2nd level finished
148 | 2.5Unf Two and one-half story: 2nd level unfinished
149 | SFoyer Split Foyer
150 | SLvl Split Level
151 |
152 | OverallQual: Rates the overall material and finish of the house
153 |
154 | 10 Very Excellent
155 | 9 Excellent
156 | 8 Very Good
157 | 7 Good
158 | 6 Above Average
159 | 5 Average
160 | 4 Below Average
161 | 3 Fair
162 | 2 Poor
163 | 1 Very Poor
164 |
165 | OverallCond: Rates the overall condition of the house
166 |
167 | 10 Very Excellent
168 | 9 Excellent
169 | 8 Very Good
170 | 7 Good
171 | 6 Above Average
172 | 5 Average
173 | 4 Below Average
174 | 3 Fair
175 | 2 Poor
176 | 1 Very Poor
177 |
178 | YearBuilt: Original construction date
179 |
180 | YearRemodAdd: Remodel date (same as construction date if no remodeling or additions)
181 |
182 | RoofStyle: Type of roof
183 |
184 | Flat Flat
185 | Gable Gable
186 | Gambrel Gabrel (Barn)
187 | Hip Hip
188 | Mansard Mansard
189 | Shed Shed
190 |
191 | RoofMatl: Roof material
192 |
193 | ClyTile Clay or Tile
194 | CompShg Standard (Composite) Shingle
195 | Membran Membrane
196 | Metal Metal
197 | Roll Roll
198 | Tar&Grv Gravel & Tar
199 | WdShake Wood Shakes
200 | WdShngl Wood Shingles
201 |
202 | Exterior1st: Exterior covering on house
203 |
204 | AsbShng Asbestos Shingles
205 | AsphShn Asphalt Shingles
206 | BrkComm Brick Common
207 | BrkFace Brick Face
208 | CBlock Cinder Block
209 | CemntBd Cement Board
210 | HdBoard Hard Board
211 | ImStucc Imitation Stucco
212 | MetalSd Metal Siding
213 | Other Other
214 | Plywood Plywood
215 | PreCast PreCast
216 | Stone Stone
217 | Stucco Stucco
218 | VinylSd Vinyl Siding
219 | Wd Sdng Wood Siding
220 | WdShing Wood Shingles
221 |
222 | Exterior2nd: Exterior covering on house (if more than one material)
223 |
224 | AsbShng Asbestos Shingles
225 | AsphShn Asphalt Shingles
226 | BrkComm Brick Common
227 | BrkFace Brick Face
228 | CBlock Cinder Block
229 | CemntBd Cement Board
230 | HdBoard Hard Board
231 | ImStucc Imitation Stucco
232 | MetalSd Metal Siding
233 | Other Other
234 | Plywood Plywood
235 | PreCast PreCast
236 | Stone Stone
237 | Stucco Stucco
238 | VinylSd Vinyl Siding
239 | Wd Sdng Wood Siding
240 | WdShing Wood Shingles
241 |
242 | MasVnrType: Masonry veneer type
243 |
244 | BrkCmn Brick Common
245 | BrkFace Brick Face
246 | CBlock Cinder Block
247 | None None
248 | Stone Stone
249 |
250 | MasVnrArea: Masonry veneer area in square feet
251 |
252 | ExterQual: Evaluates the quality of the material on the exterior
253 |
254 | Ex Excellent
255 | Gd Good
256 | TA Average/Typical
257 | Fa Fair
258 | Po Poor
259 |
260 | ExterCond: Evaluates the present condition of the material on the exterior
261 |
262 | Ex Excellent
263 | Gd Good
264 | TA Average/Typical
265 | Fa Fair
266 | Po Poor
267 |
268 | Foundation: Type of foundation
269 |
270 | BrkTil Brick & Tile
271 | CBlock Cinder Block
272 | PConc Poured Contrete
273 | Slab Slab
274 | Stone Stone
275 | Wood Wood
276 |
277 | BsmtQual: Evaluates the height of the basement
278 |
279 | Ex Excellent (100+ inches)
280 | Gd Good (90-99 inches)
281 | TA Typical (80-89 inches)
282 | Fa Fair (70-79 inches)
283 | Po Poor (<70 inches
284 | NA No Basement
285 |
286 | BsmtCond: Evaluates the general condition of the basement
287 |
288 | Ex Excellent
289 | Gd Good
290 | TA Typical - slight dampness allowed
291 | Fa Fair - dampness or some cracking or settling
292 | Po Poor - Severe cracking, settling, or wetness
293 | NA No Basement
294 |
295 | BsmtExposure: Refers to walkout or garden level walls
296 |
297 | Gd Good Exposure
298 | Av Average Exposure (split levels or foyers typically score average or above)
299 | Mn Mimimum Exposure
300 | No No Exposure
301 | NA No Basement
302 |
303 | BsmtFinType1: Rating of basement finished area
304 |
305 | GLQ Good Living Quarters
306 | ALQ Average Living Quarters
307 | BLQ Below Average Living Quarters
308 | Rec Average Rec Room
309 | LwQ Low Quality
310 | Unf Unfinshed
311 | NA No Basement
312 |
313 | BsmtFinSF1: Type 1 finished square feet
314 |
315 | BsmtFinType2: Rating of basement finished area (if multiple types)
316 |
317 | GLQ Good Living Quarters
318 | ALQ Average Living Quarters
319 | BLQ Below Average Living Quarters
320 | Rec Average Rec Room
321 | LwQ Low Quality
322 | Unf Unfinshed
323 | NA No Basement
324 |
325 | BsmtFinSF2: Type 2 finished square feet
326 |
327 | BsmtUnfSF: Unfinished square feet of basement area
328 |
329 | TotalBsmtSF: Total square feet of basement area
330 |
331 | Heating: Type of heating
332 |
333 | Floor Floor Furnace
334 | GasA Gas forced warm air furnace
335 | GasW Gas hot water or steam heat
336 | Grav Gravity furnace
337 | OthW Hot water or steam heat other than gas
338 | Wall Wall furnace
339 |
340 | HeatingQC: Heating quality and condition
341 |
342 | Ex Excellent
343 | Gd Good
344 | TA Average/Typical
345 | Fa Fair
346 | Po Poor
347 |
348 | CentralAir: Central air conditioning
349 |
350 | N No
351 | Y Yes
352 |
353 | Electrical: Electrical system
354 |
355 | SBrkr Standard Circuit Breakers & Romex
356 | FuseA Fuse Box over 60 AMP and all Romex wiring (Average)
357 | FuseF 60 AMP Fuse Box and mostly Romex wiring (Fair)
358 | FuseP 60 AMP Fuse Box and mostly knob & tube wiring (poor)
359 | Mix Mixed
360 |
361 | 1stFlrSF: First Floor square feet
362 |
363 | 2ndFlrSF: Second floor square feet
364 |
365 | LowQualFinSF: Low quality finished square feet (all floors)
366 |
367 | GrLivArea: Above grade (ground) living area square feet
368 |
369 | BsmtFullBath: Basement full bathrooms
370 |
371 | BsmtHalfBath: Basement half bathrooms
372 |
373 | FullBath: Full bathrooms above grade
374 |
375 | HalfBath: Half baths above grade
376 |
377 | Bedroom: Bedrooms above grade (does NOT include basement bedrooms)
378 |
379 | Kitchen: Kitchens above grade
380 |
381 | KitchenQual: Kitchen quality
382 |
383 | Ex Excellent
384 | Gd Good
385 | TA Typical/Average
386 | Fa Fair
387 | Po Poor
388 |
389 | TotRmsAbvGrd: Total rooms above grade (does not include bathrooms)
390 |
391 | Functional: Home functionality (Assume typical unless deductions are warranted)
392 |
393 | Typ Typical Functionality
394 | Min1 Minor Deductions 1
395 | Min2 Minor Deductions 2
396 | Mod Moderate Deductions
397 | Maj1 Major Deductions 1
398 | Maj2 Major Deductions 2
399 | Sev Severely Damaged
400 | Sal Salvage only
401 |
402 | Fireplaces: Number of fireplaces
403 |
404 | FireplaceQu: Fireplace quality
405 |
406 | Ex Excellent - Exceptional Masonry Fireplace
407 | Gd Good - Masonry Fireplace in main level
408 | TA Average - Prefabricated Fireplace in main living area or Masonry Fireplace in basement
409 | Fa Fair - Prefabricated Fireplace in basement
410 | Po Poor - Ben Franklin Stove
411 | NA No Fireplace
412 |
413 | GarageType: Garage location
414 |
415 | 2Types More than one type of garage
416 | Attchd Attached to home
417 | Basment Basement Garage
418 | BuiltIn Built-In (Garage part of house - typically has room above garage)
419 | CarPort Car Port
420 | Detchd Detached from home
421 | NA No Garage
422 |
423 | GarageYrBlt: Year garage was built
424 |
425 | GarageFinish: Interior finish of the garage
426 |
427 | Fin Finished
428 | RFn Rough Finished
429 | Unf Unfinished
430 | NA No Garage
431 |
432 | GarageCars: Size of garage in car capacity
433 |
434 | GarageArea: Size of garage in square feet
435 |
436 | GarageQual: Garage quality
437 |
438 | Ex Excellent
439 | Gd Good
440 | TA Typical/Average
441 | Fa Fair
442 | Po Poor
443 | NA No Garage
444 |
445 | GarageCond: Garage condition
446 |
447 | Ex Excellent
448 | Gd Good
449 | TA Typical/Average
450 | Fa Fair
451 | Po Poor
452 | NA No Garage
453 |
454 | PavedDrive: Paved driveway
455 |
456 | Y Paved
457 | P Partial Pavement
458 | N Dirt/Gravel
459 |
460 | WoodDeckSF: Wood deck area in square feet
461 |
462 | OpenPorchSF: Open porch area in square feet
463 |
464 | EnclosedPorch: Enclosed porch area in square feet
465 |
466 | 3SsnPorch: Three season porch area in square feet
467 |
468 | ScreenPorch: Screen porch area in square feet
469 |
470 | PoolArea: Pool area in square feet
471 |
472 | PoolQC: Pool quality
473 |
474 | Ex Excellent
475 | Gd Good
476 | TA Average/Typical
477 | Fa Fair
478 | NA No Pool
479 |
480 | Fence: Fence quality
481 |
482 | GdPrv Good Privacy
483 | MnPrv Minimum Privacy
484 | GdWo Good Wood
485 | MnWw Minimum Wood/Wire
486 | NA No Fence
487 |
488 | MiscFeature: Miscellaneous feature not covered in other categories
489 |
490 | Elev Elevator
491 | Gar2 2nd Garage (if not described in garage section)
492 | Othr Other
493 | Shed Shed (over 100 SF)
494 | TenC Tennis Court
495 | NA None
496 |
497 | MiscVal: $Value of miscellaneous feature
498 |
499 | MoSold: Month Sold (MM)
500 |
501 | YrSold: Year Sold (YYYY)
502 |
503 | SaleType: Type of sale
504 |
505 | WD Warranty Deed - Conventional
506 | CWD Warranty Deed - Cash
507 | VWD Warranty Deed - VA Loan
508 | New Home just constructed and sold
509 | COD Court Officer Deed/Estate
510 | Con Contract 15% Down payment regular terms
511 | ConLw Contract Low Down payment and low interest
512 | ConLI Contract Low Interest
513 | ConLD Contract Low Down
514 | Oth Other
515 |
516 | SaleCondition: Condition of sale
517 |
518 | Normal Normal Sale
519 | Abnorml Abnormal Sale - trade, foreclosure, short sale
520 | AdjLand Adjoining Land Purchase
521 | Alloca Allocation - two linked properties with separate deeds, typically condo with a garage unit
522 | Family Sale between family members
523 | Partial Home was not completed when last assessed (associated with New Homes)
524 |
--------------------------------------------------------------------------------
/all/sample_submission.csv:
--------------------------------------------------------------------------------
1 | Id,SalePrice
2 | 1461,169277.0524984
3 | 1462,187758.393988768
4 | 1463,183583.683569555
5 | 1464,179317.47751083
6 | 1465,150730.079976501
7 | 1466,177150.989247307
8 | 1467,172070.659229164
9 | 1468,175110.956519547
10 | 1469,162011.698831665
11 | 1470,160726.247831419
12 | 1471,157933.279456005
13 | 1472,145291.245020389
14 | 1473,159672.017631819
15 | 1474,164167.518301885
16 | 1475,150891.638244053
17 | 1476,179460.96518734
18 | 1477,185034.62891405
19 | 1478,182352.192644656
20 | 1479,183053.458213802
21 | 1480,187823.339254278
22 | 1481,186544.114327568
23 | 1482,158230.77520516
24 | 1483,190552.829321091
25 | 1484,147183.67487199
26 | 1485,185855.300905493
27 | 1486,174350.470676986
28 | 1487,201740.620690863
29 | 1488,162986.378895754
30 | 1489,162330.199085679
31 | 1490,165845.938616539
32 | 1491,180929.622876974
33 | 1492,163481.501519718
34 | 1493,187798.076714233
35 | 1494,198822.198942566
36 | 1495,194868.409899858
37 | 1496,152605.298564403
38 | 1497,147797.702836811
39 | 1498,150521.96899297
40 | 1499,146991.630153739
41 | 1500,150306.307814534
42 | 1501,151164.372534604
43 | 1502,151133.706960953
44 | 1503,156214.042540726
45 | 1504,171992.760735142
46 | 1505,173214.912549738
47 | 1506,192429.187345783
48 | 1507,190878.69508543
49 | 1508,194542.544135519
50 | 1509,191849.439072822
51 | 1510,176363.773907793
52 | 1511,176954.185412429
53 | 1512,176521.216975696
54 | 1513,179436.704810176
55 | 1514,220079.756777048
56 | 1515,175502.918109444
57 | 1516,188321.073833569
58 | 1517,163276.324450004
59 | 1518,185911.366293097
60 | 1519,171392.830997252
61 | 1520,174418.207020775
62 | 1521,179682.709603774
63 | 1522,179423.751581665
64 | 1523,171756.918091777
65 | 1524,166849.638174419
66 | 1525,181122.168676666
67 | 1526,170934.462746566
68 | 1527,159738.292580329
69 | 1528,174445.759557658
70 | 1529,174706.363659627
71 | 1530,164507.672539365
72 | 1531,163602.512172832
73 | 1532,154126.270249525
74 | 1533,171104.853481351
75 | 1534,167735.39270528
76 | 1535,183003.613338104
77 | 1536,172580.381161499
78 | 1537,165407.889104689
79 | 1538,176363.773907793
80 | 1539,175182.950898522
81 | 1540,190757.177789246
82 | 1541,167186.995771991
83 | 1542,167839.376779276
84 | 1543,173912.421165137
85 | 1544,154034.917445551
86 | 1545,156002.955794336
87 | 1546,168173.94329857
88 | 1547,168882.437104132
89 | 1548,168173.94329857
90 | 1549,157580.177551642
91 | 1550,181922.15256011
92 | 1551,155134.227842592
93 | 1552,188885.573319552
94 | 1553,183963.193012381
95 | 1554,161298.762306335
96 | 1555,188613.66763056
97 | 1556,175080.111822945
98 | 1557,174744.400305232
99 | 1558,168175.911336919
100 | 1559,182333.472575006
101 | 1560,158307.206742274
102 | 1561,193053.055502348
103 | 1562,175031.089987177
104 | 1563,160713.294602908
105 | 1564,173186.215014436
106 | 1565,191736.7598055
107 | 1566,170401.630997116
108 | 1567,164626.577880222
109 | 1568,205469.409444832
110 | 1569,209561.784211885
111 | 1570,182271.503072356
112 | 1571,178081.549427793
113 | 1572,178425.956138831
114 | 1573,162015.318511503
115 | 1574,181722.420373045
116 | 1575,156705.730169433
117 | 1576,182902.420342386
118 | 1577,157574.595395085
119 | 1578,184380.739100813
120 | 1579,169364.469225677
121 | 1580,175846.179822063
122 | 1581,189673.295302136
123 | 1582,174401.317715566
124 | 1583,179021.448718583
125 | 1584,189196.845337149
126 | 1585,139647.095720655
127 | 1586,161468.198288911
128 | 1587,171557.32317862
129 | 1588,179447.36804185
130 | 1589,169611.619017694
131 | 1590,172088.872655744
132 | 1591,171190.624128768
133 | 1592,154850.508361878
134 | 1593,158617.655719941
135 | 1594,209258.33693701
136 | 1595,177939.027626751
137 | 1596,194631.100299584
138 | 1597,213618.871562568
139 | 1598,198342.504228533
140 | 1599,138607.971472497
141 | 1600,150778.958976731
142 | 1601,146966.230339786
143 | 1602,162182.59620952
144 | 1603,176825.940961269
145 | 1604,152799.812402444
146 | 1605,180322.322067129
147 | 1606,177508.027228367
148 | 1607,208029.642652019
149 | 1608,181987.282510201
150 | 1609,160172.72797397
151 | 1610,176761.317654248
152 | 1611,176515.497545231
153 | 1612,176270.453065471
154 | 1613,183050.846258475
155 | 1614,150011.102062216
156 | 1615,159270.537808667
157 | 1616,163419.663729346
158 | 1617,163399.983345859
159 | 1618,173364.161505756
160 | 1619,169556.835902417
161 | 1620,183690.595995738
162 | 1621,176980.914909382
163 | 1622,204773.36222471
164 | 1623,174728.655998442
165 | 1624,181873.458244461
166 | 1625,177322.000823979
167 | 1626,193927.939041863
168 | 1627,181715.622732304
169 | 1628,199270.841200324
170 | 1629,177109.589956218
171 | 1630,153909.578271486
172 | 1631,162931.203336223
173 | 1632,166386.7567182
174 | 1633,173719.30379824
175 | 1634,179757.925656704
176 | 1635,179007.601964376
177 | 1636,180370.808623106
178 | 1637,185102.616730563
179 | 1638,198825.563452058
180 | 1639,184294.576009142
181 | 1640,200443.7920562
182 | 1641,181294.784484153
183 | 1642,174354.336267919
184 | 1643,172023.677781517
185 | 1644,181666.922855025
186 | 1645,179024.491269586
187 | 1646,178324.191575907
188 | 1647,184534.676687694
189 | 1648,159397.250378784
190 | 1649,178430.966728182
191 | 1650,177743.799385967
192 | 1651,179395.305519087
193 | 1652,151713.38474815
194 | 1653,151713.38474815
195 | 1654,168434.977996215
196 | 1655,153999.100311019
197 | 1656,164096.097354123
198 | 1657,166335.403036551
199 | 1658,163020.725375757
200 | 1659,155862.510668829
201 | 1660,182760.651095509
202 | 1661,201912.270622883
203 | 1662,185988.233987516
204 | 1663,183778.44888032
205 | 1664,170935.85921771
206 | 1665,184468.908382254
207 | 1666,191569.089663229
208 | 1667,232991.025583822
209 | 1668,180980.721388278
210 | 1669,164279.13048219
211 | 1670,183859.460411109
212 | 1671,185922.465682076
213 | 1672,191742.778119363
214 | 1673,199954.072465842
215 | 1674,180690.274752587
216 | 1675,163099.3096358
217 | 1676,140791.922472443
218 | 1677,166481.86647592
219 | 1678,172080.434496773
220 | 1679,191719.161659178
221 | 1680,160741.098612515
222 | 1681,157829.546854733
223 | 1682,196896.748596341
224 | 1683,159675.423990355
225 | 1684,182084.790901946
226 | 1685,179233.926374487
227 | 1686,155774.270901623
228 | 1687,181354.326716058
229 | 1688,179605.563663918
230 | 1689,181609.34866147
231 | 1690,178221.531623281
232 | 1691,175559.920735795
233 | 1692,200328.822792041
234 | 1693,178630.060559899
235 | 1694,177174.535221728
236 | 1695,172515.687368714
237 | 1696,204032.992922943
238 | 1697,176023.232787689
239 | 1698,202202.073341595
240 | 1699,181734.480075862
241 | 1700,183982.158993126
242 | 1701,188007.94241481
243 | 1702,185922.966763517
244 | 1703,183978.544874918
245 | 1704,177199.618638821
246 | 1705,181878.647956764
247 | 1706,173622.088728263
248 | 1707,180728.168562655
249 | 1708,176477.026606328
250 | 1709,184282.266697609
251 | 1710,162062.47538448
252 | 1711,182550.070992189
253 | 1712,180987.949624695
254 | 1713,178173.79762147
255 | 1714,179980.635948606
256 | 1715,173257.637826205
257 | 1716,177271.291059307
258 | 1717,175338.355442312
259 | 1718,177548.140549508
260 | 1719,175969.91662932
261 | 1720,175011.481953462
262 | 1721,185199.372568143
263 | 1722,188514.050228937
264 | 1723,185080.145268797
265 | 1724,157304.402574096
266 | 1725,194260.859481297
267 | 1726,181262.329995106
268 | 1727,157003.292706732
269 | 1728,182924.499359899
270 | 1729,181902.586375439
271 | 1730,188985.371708134
272 | 1731,185290.904495068
273 | 1732,177304.425752748
274 | 1733,166274.900490809
275 | 1734,177807.420530107
276 | 1735,180330.624816201
277 | 1736,179069.112234629
278 | 1737,175943.371816948
279 | 1738,185199.050609653
280 | 1739,167350.910824524
281 | 1740,149315.311876449
282 | 1741,139010.847766793
283 | 1742,155412.151845447
284 | 1743,171308.313985441
285 | 1744,176220.543265638
286 | 1745,177643.434991809
287 | 1746,187222.653264601
288 | 1747,185635.132083154
289 | 1748,206492.534215854
290 | 1749,181681.021081956
291 | 1750,180500.198072685
292 | 1751,206486.17086841
293 | 1752,161334.301195429
294 | 1753,176156.558313965
295 | 1754,191642.223478994
296 | 1755,191945.808027777
297 | 1756,164146.306037354
298 | 1757,179883.057071096
299 | 1758,178071.137668844
300 | 1759,188241.637896875
301 | 1760,174559.656173171
302 | 1761,182347.363042264
303 | 1762,191507.251872857
304 | 1763,199751.865597358
305 | 1764,162106.416145131
306 | 1765,164575.982314367
307 | 1766,179176.352180931
308 | 1767,177327.403857584
309 | 1768,177818.083761781
310 | 1769,186965.204048443
311 | 1770,178762.742169197
312 | 1771,183322.866146283
313 | 1772,178903.295931891
314 | 1773,186570.129421778
315 | 1774,199144.242829024
316 | 1775,172154.713310956
317 | 1776,177444.019201603
318 | 1777,166200.938073485
319 | 1778,158995.770555632
320 | 1779,168273.282454755
321 | 1780,189680.453052788
322 | 1781,181681.021081956
323 | 1782,160277.142643643
324 | 1783,197318.54715833
325 | 1784,162228.935604196
326 | 1785,187340.455456083
327 | 1786,181065.347037275
328 | 1787,190233.609102705
329 | 1788,157929.594852031
330 | 1789,168557.001935469
331 | 1790,160805.584645628
332 | 1791,221648.391978216
333 | 1792,180539.88079815
334 | 1793,182105.616283853
335 | 1794,166380.852603154
336 | 1795,178942.155617426
337 | 1796,162804.747800461
338 | 1797,183077.684392615
339 | 1798,171728.4720292
340 | 1799,164786.741540638
341 | 1800,177427.267170302
342 | 1801,197318.54715833
343 | 1802,178658.114178223
344 | 1803,185437.320523764
345 | 1804,169759.652489529
346 | 1805,173986.635055186
347 | 1806,168607.664289468
348 | 1807,194138.519145183
349 | 1808,192502.440921994
350 | 1809,176746.969818601
351 | 1810,177604.891703134
352 | 1811,193283.746584832
353 | 1812,181627.061006609
354 | 1813,169071.62025834
355 | 1814,167398.006470987
356 | 1815,150106.505141704
357 | 1816,159650.304285848
358 | 1817,179471.23597476
359 | 1818,177109.589956218
360 | 1819,166558.113328453
361 | 1820,153796.714319583
362 | 1821,174520.152570658
363 | 1822,196297.95829524
364 | 1823,169100.681601175
365 | 1824,176911.319164431
366 | 1825,169234.6454828
367 | 1826,172386.297919134
368 | 1827,156031.904802362
369 | 1828,168202.892306596
370 | 1829,166505.984017547
371 | 1830,176507.37022149
372 | 1831,180116.752553161
373 | 1832,183072.740591406
374 | 1833,189595.964677698
375 | 1834,167523.919076265
376 | 1835,210817.775863413
377 | 1836,172942.930813351
378 | 1837,145286.278144089
379 | 1838,176468.653371492
380 | 1839,159040.069562187
381 | 1840,178518.204332507
382 | 1841,169163.980786825
383 | 1842,189786.685274579
384 | 1843,181246.728523853
385 | 1844,176349.927153587
386 | 1845,205266.631009142
387 | 1846,187397.993362224
388 | 1847,208943.427726113
389 | 1848,165014.532907657
390 | 1849,182492.037566236
391 | 1850,161718.71259042
392 | 1851,180084.118941162
393 | 1852,178534.950802179
394 | 1853,151217.259961305
395 | 1854,156342.717587562
396 | 1855,188511.443835239
397 | 1856,183570.337896789
398 | 1857,225810.160292177
399 | 1858,214217.401131694
400 | 1859,187665.64101603
401 | 1860,161157.177744039
402 | 1861,187643.992594193
403 | 1862,228156.372839158
404 | 1863,220449.534665317
405 | 1864,220522.352084222
406 | 1865,156647.763531624
407 | 1866,187388.833374873
408 | 1867,178640.723791573
409 | 1868,180847.216739049
410 | 1869,159505.170529478
411 | 1870,164305.538020654
412 | 1871,180181.19673723
413 | 1872,184602.734989972
414 | 1873,193440.372174434
415 | 1874,184199.788209911
416 | 1875,196241.892907637
417 | 1876,175588.618271096
418 | 1877,179503.046546829
419 | 1878,183658.076582555
420 | 1879,193700.976276404
421 | 1880,165399.62450704
422 | 1881,186847.944787446
423 | 1882,198127.73287817
424 | 1883,183320.898107934
425 | 1884,181613.606696657
426 | 1885,178298.791761954
427 | 1886,185733.534000593
428 | 1887,180008.188485489
429 | 1888,175127.59621604
430 | 1889,183467.176862723
431 | 1890,182705.546021743
432 | 1891,152324.943593181
433 | 1892,169878.515981342
434 | 1893,183735.975076576
435 | 1894,224118.280105941
436 | 1895,169355.202465146
437 | 1896,180054.276407441
438 | 1897,174081.601977368
439 | 1898,168494.985022146
440 | 1899,181871.598843299
441 | 1900,173554.489658383
442 | 1901,169805.382165577
443 | 1902,176192.990728755
444 | 1903,204264.39284654
445 | 1904,169630.906956928
446 | 1905,185724.838807268
447 | 1906,195699.036281861
448 | 1907,189494.276162169
449 | 1908,149607.905673439
450 | 1909,154650.199045978
451 | 1910,151579.558140433
452 | 1911,185147.380531144
453 | 1912,196314.53120359
454 | 1913,210802.395364155
455 | 1914,166271.2863726
456 | 1915,154865.359142973
457 | 1916,173575.5052865
458 | 1917,179399.563554274
459 | 1918,164280.776562049
460 | 1919,171247.48948121
461 | 1920,166878.587182445
462 | 1921,188129.459710994
463 | 1922,183517.34369691
464 | 1923,175522.026925727
465 | 1924,190060.105331152
466 | 1925,174179.824771856
467 | 1926,171059.523675194
468 | 1927,183004.186769318
469 | 1928,183601.647387418
470 | 1929,163539.327185998
471 | 1930,164677.676391525
472 | 1931,162395.073865424
473 | 1932,182207.6323195
474 | 1933,192223.939790304
475 | 1934,176391.829390125
476 | 1935,181913.179121348
477 | 1936,179136.097888261
478 | 1937,196595.568243212
479 | 1938,194822.365690957
480 | 1939,148356.669440918
481 | 1940,160387.604263899
482 | 1941,181276.500571809
483 | 1942,192474.817899346
484 | 1943,157699.907796437
485 | 1944,215785.540813051
486 | 1945,181824.300998793
487 | 1946,221813.00948166
488 | 1947,165281.292597397
489 | 1948,255629.49047034
490 | 1949,173154.590990955
491 | 1950,183884.65246539
492 | 1951,200210.353608489
493 | 1952,186599.221265342
494 | 1953,192718.532696106
495 | 1954,178628.665952764
496 | 1955,180650.342418406
497 | 1956,206003.107947263
498 | 1957,166457.67844853
499 | 1958,202916.221653487
500 | 1959,192463.969983091
501 | 1960,171775.497189898
502 | 1961,175249.222149411
503 | 1962,147086.59893993
504 | 1963,149709.672100371
505 | 1964,171411.404533743
506 | 1965,178188.964799425
507 | 1966,156491.711373235
508 | 1967,180953.241201168
509 | 1968,203909.759061135
510 | 1969,175470.149087545
511 | 1970,205578.333622415
512 | 1971,199428.857699441
513 | 1972,187599.163869476
514 | 1973,192265.198109864
515 | 1974,196666.554897677
516 | 1975,155537.862252682
517 | 1976,169543.240620935
518 | 1977,202487.010170501
519 | 1978,208232.716273485
520 | 1979,173621.195202569
521 | 1980,172414.608571812
522 | 1981,164400.75641556
523 | 1982,160480.424024781
524 | 1983,156060.853810389
525 | 1984,157437.192820581
526 | 1985,158163.720929772
527 | 1986,154849.043268978
528 | 1987,152186.609341561
529 | 1988,180340.215399228
530 | 1989,178344.62451356
531 | 1990,190170.382266827
532 | 1991,168092.975480832
533 | 1992,178757.912566805
534 | 1993,174518.256882082
535 | 1994,198168.490116289
536 | 1995,176882.693978902
537 | 1996,183801.672896251
538 | 1997,196400.046680661
539 | 1998,172281.605004025
540 | 1999,196380.366297173
541 | 2000,198228.354306682
542 | 2001,195556.581268962
543 | 2002,186453.264469043
544 | 2003,181869.381196234
545 | 2004,175610.840124147
546 | 2005,183438.730800145
547 | 2006,179584.488673295
548 | 2007,182386.152242034
549 | 2008,160750.367237054
550 | 2009,182477.505046008
551 | 2010,187720.359207171
552 | 2011,187201.942081511
553 | 2012,176385.102235149
554 | 2013,175901.787841278
555 | 2014,182584.280198283
556 | 2015,195664.686104237
557 | 2016,181420.346494222
558 | 2017,176676.04995228
559 | 2018,181594.678867334
560 | 2019,178521.747964951
561 | 2020,175895.883726231
562 | 2021,168468.005916477
563 | 2022,200973.129447888
564 | 2023,197030.641992202
565 | 2024,192867.417844592
566 | 2025,196449.247639381
567 | 2026,141684.196398607
568 | 2027,153353.334123901
569 | 2028,151143.549016705
570 | 2029,163753.087114229
571 | 2030,158682.460013921
572 | 2031,144959.835250915
573 | 2032,160144.390548579
574 | 2033,156286.534303521
575 | 2034,165726.707619571
576 | 2035,182427.481047359
577 | 2036,173310.56154032
578 | 2037,173310.56154032
579 | 2038,151556.01403002
580 | 2039,158908.146068683
581 | 2040,209834.383092536
582 | 2041,192410.516550815
583 | 2042,174026.247294886
584 | 2043,195499.830115336
585 | 2044,200918.018812493
586 | 2045,207243.616023976
587 | 2046,196149.783851876
588 | 2047,192097.914850217
589 | 2048,178570.948923671
590 | 2049,228617.968325428
591 | 2050,199929.884438451
592 | 2051,160206.365612859
593 | 2052,179854.431885567
594 | 2053,185987.340461822
595 | 2054,161122.505607926
596 | 2055,175949.342720138
597 | 2056,183683.590595324
598 | 2057,176401.34762338
599 | 2058,205832.532527897
600 | 2059,177799.799849436
601 | 2060,167565.362080406
602 | 2061,186348.958436557
603 | 2062,179782.759465081
604 | 2063,169837.623333323
605 | 2064,178817.275675758
606 | 2065,174444.479149339
607 | 2066,192834.968917174
608 | 2067,196564.717984981
609 | 2068,206977.567039357
610 | 2069,157054.253944128
611 | 2070,175142.948078577
612 | 2071,159932.1643654
613 | 2072,182801.408333628
614 | 2073,181510.375176825
615 | 2074,181613.035129451
616 | 2075,186920.512597635
617 | 2076,157950.170625222
618 | 2077,176115.159022876
619 | 2078,182744.514344465
620 | 2079,180660.683691591
621 | 2080,160775.629777099
622 | 2081,186711.715848082
623 | 2082,223581.758190888
624 | 2083,172330.943236652
625 | 2084,163474.633393212
626 | 2085,175308.263299874
627 | 2086,187462.725306432
628 | 2087,180655.101535034
629 | 2088,152121.98603454
630 | 2089,159856.233909727
631 | 2090,186559.854936737
632 | 2091,183962.550959411
633 | 2092,162107.168699296
634 | 2093,162582.288981283
635 | 2094,154407.701597409
636 | 2095,181625.666399474
637 | 2096,164810.609473548
638 | 2097,176429.401241704
639 | 2098,179188.089925259
640 | 2099,145997.635377703
641 | 2100,218676.768270367
642 | 2101,188323.861214226
643 | 2102,168690.0722914
644 | 2103,165088.746797705
645 | 2104,191435.007885166
646 | 2105,168864.404664512
647 | 2106,176041.882371574
648 | 2107,215911.674390325
649 | 2108,167388.238629016
650 | 2109,163854.786753017
651 | 2110,163299.477980171
652 | 2111,178298.214633119
653 | 2112,176376.586164775
654 | 2113,170211.043976522
655 | 2114,170818.344786366
656 | 2115,174388.867432503
657 | 2116,161112.987374671
658 | 2117,172179.082325307
659 | 2118,157798.309713876
660 | 2119,169106.151422924
661 | 2120,170129.531364292
662 | 2121,157680.227412949
663 | 2122,162690.209131977
664 | 2123,146968.379365095
665 | 2124,181507.721372455
666 | 2125,191215.589752983
667 | 2126,189432.689844522
668 | 2127,207271.484957719
669 | 2128,170030.807488363
670 | 2129,148409.806476335
671 | 2130,193850.613979055
672 | 2131,193808.319298263
673 | 2132,166300.235380627
674 | 2133,163474.633393212
675 | 2134,177473.606564978
676 | 2135,157443.925537187
677 | 2136,180681.007992057
678 | 2137,183463.17030026
679 | 2138,182481.763081195
680 | 2139,193717.15117887
681 | 2140,182782.55099007
682 | 2141,175530.651633287
683 | 2142,177804.057884623
684 | 2143,159448.670848577
685 | 2144,181338.976717529
686 | 2145,178553.558537021
687 | 2146,162820.928264556
688 | 2147,188832.479997186
689 | 2148,164682.185899437
690 | 2149,181549.735943801
691 | 2150,199158.097008868
692 | 2151,152889.520990566
693 | 2152,181150.551679116
694 | 2153,181416.732376013
695 | 2154,164391.238182305
696 | 2155,185421.046498812
697 | 2156,193981.327550004
698 | 2157,178824.324789223
699 | 2158,209270.051606246
700 | 2159,177801.266806344
701 | 2160,179053.762236101
702 | 2161,178762.170601992
703 | 2162,184655.300458183
704 | 2163,191284.655779772
705 | 2164,179598.085818785
706 | 2165,167517.628078595
707 | 2166,182873.903794044
708 | 2167,177484.91371363
709 | 2168,188444.597319524
710 | 2169,179184.153848562
711 | 2170,184365.175780982
712 | 2171,184479.322005212
713 | 2172,182927.863869391
714 | 2173,178611.639373646
715 | 2174,181943.343613558
716 | 2175,175080.614768394
717 | 2176,190720.794649138
718 | 2177,198422.868144723
719 | 2178,184482.11308349
720 | 2179,139214.952187861
721 | 2180,169233.113601757
722 | 2181,180664.118686848
723 | 2182,178818.742632666
724 | 2183,180422.049969947
725 | 2184,178601.93645581
726 | 2185,183083.159775993
727 | 2186,173163.101499699
728 | 2187,185968.161159774
729 | 2188,171226.050683054
730 | 2189,281643.976116786
731 | 2190,160031.711281258
732 | 2191,162775.979779394
733 | 2192,160735.445970193
734 | 2193,166646.109048572
735 | 2194,188384.548444549
736 | 2195,165830.697255197
737 | 2196,182138.358533039
738 | 2197,171595.397975647
739 | 2198,160337.079183809
740 | 2199,191215.088671543
741 | 2200,166956.093232213
742 | 2201,186581.830878692
743 | 2202,176450.548582099
744 | 2203,193743.194909801
745 | 2204,198882.566078408
746 | 2205,176385.102235149
747 | 2206,162447.639333636
748 | 2207,193782.555676777
749 | 2208,183653.890897141
750 | 2209,210578.623546866
751 | 2210,158527.164107319
752 | 2211,163081.025723456
753 | 2212,174388.867432503
754 | 2213,191905.870131966
755 | 2214,174388.867432503
756 | 2215,161642.711648983
757 | 2216,186939.507215101
758 | 2217,172482.165792649
759 | 2218,159695.999763546
760 | 2219,157230.369671007
761 | 2220,179188.089925259
762 | 2221,157972.82120994
763 | 2222,156804.951429181
764 | 2223,211491.972463654
765 | 2224,186537.246201062
766 | 2225,200468.161070551
767 | 2226,182241.340444154
768 | 2227,157342.225898399
769 | 2228,182022.387105998
770 | 2229,181244.510876788
771 | 2230,178556.671573788
772 | 2231,189547.199876284
773 | 2232,187948.65165563
774 | 2233,194107.287565956
775 | 2234,183521.710369283
776 | 2235,183682.123638416
777 | 2236,178483.353073443
778 | 2237,184003.879764736
779 | 2238,171318.59033449
780 | 2239,162039.754313997
781 | 2240,154846.252190699
782 | 2241,194822.365690957
783 | 2242,169788.738771463
784 | 2243,178891.554489941
785 | 2244,152084.772428865
786 | 2245,139169.86642879
787 | 2246,192439.536044606
788 | 2247,161067.859766557
789 | 2248,158762.648504781
790 | 2249,175569.690441774
791 | 2250,183659.795012187
792 | 2251,280618.132617258
793 | 2252,180051.809151659
794 | 2253,176519.18031559
795 | 2254,179028.429210291
796 | 2255,177161.583857224
797 | 2256,180081.508849842
798 | 2257,205895.254584712
799 | 2258,183389.78131415
800 | 2259,178543.647859512
801 | 2260,194798.320499104
802 | 2261,162845.613675766
803 | 2262,148103.867006579
804 | 2263,201016.171121215
805 | 2264,277936.12694354
806 | 2265,249768.279823405
807 | 2266,161596.052159825
808 | 2267,158011.114889899
809 | 2268,194089.683858004
810 | 2269,181733.336941451
811 | 2270,182852.32772198
812 | 2271,189893.003058465
813 | 2272,194650.210979875
814 | 2273,187904.461286262
815 | 2274,171774.925622692
816 | 2275,177998.685921479
817 | 2276,175648.484325498
818 | 2277,196918.071362067
819 | 2278,184299.838071218
820 | 2279,182379.855682734
821 | 2280,184050.725802482
822 | 2281,158296.975970284
823 | 2282,175053.355553278
824 | 2283,162293.376090644
825 | 2284,186328.880047186
826 | 2285,151422.116936538
827 | 2286,181969.358707768
828 | 2287,189122.67702416
829 | 2288,185645.475220346
830 | 2289,182829.898109257
831 | 2290,195848.788183328
832 | 2291,198785.059550672
833 | 2292,181676.126555428
834 | 2293,194131.012663328
835 | 2294,201416.004864508
836 | 2295,185096.577205616
837 | 2296,195158.972598372
838 | 2297,184795.783735112
839 | 2298,189168.263864671
840 | 2299,216855.260149095
841 | 2300,184946.642483576
842 | 2301,189317.51282069
843 | 2302,180803.277842406
844 | 2303,175061.18585763
845 | 2304,179074.839090732
846 | 2305,145708.764336107
847 | 2306,142398.022752011
848 | 2307,161474.534863641
849 | 2308,157025.945155458
850 | 2309,163424.037827357
851 | 2310,164692.778645345
852 | 2311,152163.2443541
853 | 2312,192383.215486656
854 | 2313,182520.230322476
855 | 2314,187254.507549722
856 | 2315,176489.659740359
857 | 2316,181520.466841293
858 | 2317,186414.978214721
859 | 2318,185197.764639705
860 | 2319,178657.794083741
861 | 2320,179731.198023759
862 | 2321,161748.271317074
863 | 2322,158608.749069322
864 | 2323,178807.370559878
865 | 2324,184187.158803897
866 | 2325,181686.10402108
867 | 2326,190311.050228337
868 | 2327,192252.496354076
869 | 2328,193954.849525775
870 | 2329,181044.201560887
871 | 2330,180258.131219792
872 | 2331,199641.657313834
873 | 2332,197530.775205517
874 | 2333,191777.196949138
875 | 2334,195779.543033588
876 | 2335,202112.046522999
877 | 2336,192343.34807661
878 | 2337,185191.359443218
879 | 2338,186760.207965688
880 | 2339,177733.78193528
881 | 2340,164430.391189608
882 | 2341,185299.601552401
883 | 2342,186414.012339254
884 | 2343,176401.921054593
885 | 2344,182381.322639642
886 | 2345,176334.184710805
887 | 2346,184901.735847457
888 | 2347,180085.766885029
889 | 2348,184901.735847457
890 | 2349,183967.561548763
891 | 2350,193046.301574659
892 | 2351,168538.969495849
893 | 2352,170157.842016969
894 | 2353,196559.709259637
895 | 2354,177133.709361852
896 | 2355,181553.279576244
897 | 2356,185770.606634739
898 | 2357,177017.595099274
899 | 2358,184123.358536806
900 | 2359,165970.357492196
901 | 2360,158151.985049452
902 | 2361,177086.476441481
903 | 2362,196373.896176551
904 | 2363,172465.707083115
905 | 2364,168590.782409896
906 | 2365,158820.474171061
907 | 2366,151611.37057651
908 | 2367,152125.028585543
909 | 2368,158404.073081048
910 | 2369,160692.078640755
911 | 2370,170175.22684199
912 | 2371,169854.436591138
913 | 2372,183410.785819008
914 | 2373,180347.194026928
915 | 2374,178930.528374292
916 | 2375,153346.220086301
917 | 2376,182675.204270589
918 | 2377,180770.649792036
919 | 2378,188714.148087543
920 | 2379,191393.608594076
921 | 2380,174016.157494425
922 | 2381,183189.685319552
923 | 2382,183621.508757866
924 | 2383,168991.29635758
925 | 2384,185306.650665866
926 | 2385,189030.680303208
927 | 2386,179208.665698449
928 | 2387,174901.452792889
929 | 2388,168337.406544343
930 | 2389,158234.96461859
931 | 2390,179562.453368834
932 | 2391,174176.391640607
933 | 2392,173931.531845427
934 | 2393,184111.729429665
935 | 2394,179374.482001188
936 | 2395,207348.811884535
937 | 2396,186983.419339031
938 | 2397,206779.094049527
939 | 2398,177472.074683935
940 | 2399,156727.948324862
941 | 2400,157090.568462479
942 | 2401,160387.032696693
943 | 2402,172410.28005086
944 | 2403,191603.365657467
945 | 2404,182152.207151253
946 | 2405,180161.697340702
947 | 2406,169652.235284283
948 | 2407,182503.520140218
949 | 2408,179714.630677039
950 | 2409,180282.570719908
951 | 2410,192600.338060371
952 | 2411,166115.491248565
953 | 2412,186379.553524443
954 | 2413,184361.992258449
955 | 2414,186220.965458121
956 | 2415,198176.47090687
957 | 2416,168437.776500131
958 | 2417,178003.582312015
959 | 2418,179180.469244588
960 | 2419,191930.561104806
961 | 2420,175590.266214964
962 | 2421,176713.19307219
963 | 2422,180159.090947005
964 | 2423,188090.100808026
965 | 2424,186184.717727913
966 | 2425,223055.588672278
967 | 2426,158270.753116401
968 | 2427,184733.12846644
969 | 2428,199926.378957429
970 | 2429,175075.785166001
971 | 2430,180917.925148076
972 | 2431,182067.760625207
973 | 2432,178238.60191545
974 | 2433,173454.944606532
975 | 2434,176821.936262814
976 | 2435,183642.191304235
977 | 2436,177254.582741058
978 | 2437,168715.950111702
979 | 2438,180096.931198144
980 | 2439,160620.728178758
981 | 2440,175286.544392273
982 | 2441,153494.783276297
983 | 2442,156407.65915545
984 | 2443,162162.525245786
985 | 2444,166809.886827197
986 | 2445,172929.156408918
987 | 2446,193514.330894137
988 | 2447,181612.141603756
989 | 2448,191745.386377068
990 | 2449,171369.325038261
991 | 2450,184425.470567051
992 | 2451,170563.252355189
993 | 2452,184522.369240168
994 | 2453,164968.947931153
995 | 2454,157939.621592364
996 | 2455,151520.381580069
997 | 2456,176129.508722531
998 | 2457,171112.978971478
999 | 2458,169762.081624282
1000 | 2459,162246.828936295
1001 | 2460,171339.303381589
1002 | 2461,189034.753653813
1003 | 2462,175758.873595981
1004 | 2463,163351.721489893
1005 | 2464,189806.546645026
1006 | 2465,175370.990918319
1007 | 2466,196895.599900301
1008 | 2467,176905.917994834
1009 | 2468,176866.557227858
1010 | 2469,163590.677170026
1011 | 2470,212693.502958393
1012 | 2471,192686.931747717
1013 | 2472,181578.684951827
1014 | 2473,166475.457581812
1015 | 2474,185998.255166219
1016 | 2475,185527.714877908
1017 | 2476,159027.118197683
1018 | 2477,181169.654933769
1019 | 2478,176732.915304722
1020 | 2479,191619.294648838
1021 | 2480,189114.303789324
1022 | 2481,180934.635330334
1023 | 2482,164573.372223048
1024 | 2483,173902.011270196
1025 | 2484,165625.127741229
1026 | 2485,179555.219570787
1027 | 2486,196899.720661579
1028 | 2487,207566.12470446
1029 | 2488,163899.981149274
1030 | 2489,189179.428177786
1031 | 2490,193892.880023125
1032 | 2491,178980.874331431
1033 | 2492,179749.876244365
1034 | 2493,197999.674975598
1035 | 2494,203717.470295797
1036 | 2495,185249.261156892
1037 | 2496,201691.208274848
1038 | 2497,181956.548314794
1039 | 2498,171895.936275806
1040 | 2499,187245.168439419
1041 | 2500,157816.77461318
1042 | 2501,191702.912573325
1043 | 2502,198599.420028908
1044 | 2503,187193.313676329
1045 | 2504,220514.993999535
1046 | 2505,181814.527595192
1047 | 2506,183750.755371907
1048 | 2507,183000.431679579
1049 | 2508,185830.971906573
1050 | 2509,185497.872344187
1051 | 2510,179613.437681321
1052 | 2511,164454.967963631
1053 | 2512,185127.237217638
1054 | 2513,178750.613844623
1055 | 2514,160927.61044889
1056 | 2515,192562.808057836
1057 | 2516,180990.24148554
1058 | 2517,180064.941503122
1059 | 2518,196070.997393789
1060 | 2519,180352.919019023
1061 | 2520,183367.953769362
1062 | 2521,176734.841494027
1063 | 2522,180848.220765939
1064 | 2523,187806.059368823
1065 | 2524,180521.52640004
1066 | 2525,181502.754496154
1067 | 2526,174525.87942676
1068 | 2527,188927.984063168
1069 | 2528,184728.870431253
1070 | 2529,179857.975518011
1071 | 2530,180962.868071609
1072 | 2531,179194.066390078
1073 | 2532,179591.789259484
1074 | 2533,180638.463702549
1075 | 2534,185846.215131922
1076 | 2535,195174.031139141
1077 | 2536,192474.56829063
1078 | 2537,164200.595496827
1079 | 2538,178403.094096818
1080 | 2539,170774.84018302
1081 | 2540,179879.945898337
1082 | 2541,177668.192752792
1083 | 2542,180174.328610725
1084 | 2543,170643.303572141
1085 | 2544,165448.004289838
1086 | 2545,195531.754886222
1087 | 2546,165314.177682121
1088 | 2547,172532.757660882
1089 | 2548,203310.218069877
1090 | 2549,175090.062515883
1091 | 2550,230841.338626282
1092 | 2551,155225.19006632
1093 | 2552,168322.342441945
1094 | 2553,165956.259265265
1095 | 2554,193956.817564124
1096 | 2555,171070.367893827
1097 | 2556,166285.243628001
1098 | 2557,182875.801346628
1099 | 2558,218108.536769738
1100 | 2559,174378.777632042
1101 | 2560,164731.316372391
1102 | 2561,156969.695083273
1103 | 2562,173388.854342604
1104 | 2563,177559.628685119
1105 | 2564,194297.789279905
1106 | 2565,174894.588364005
1107 | 2566,196544.144075798
1108 | 2567,179036.158528149
1109 | 2568,211423.986511149
1110 | 2569,208156.398935188
1111 | 2570,159233.941347257
1112 | 2571,210820.115134931
1113 | 2572,140196.10979821
1114 | 2573,198678.469082978
1115 | 2574,186818.610760803
1116 | 2575,175044.797633861
1117 | 2576,180031.162892704
1118 | 2577,176889.171525162
1119 | 2578,159638.856165666
1120 | 2579,154287.264375509
1121 | 2580,191885.618181273
1122 | 2581,177503.378612934
1123 | 2582,166548.31684976
1124 | 2583,164475.14942856
1125 | 2584,167484.744857879
1126 | 2585,188683.160555403
1127 | 2586,162243.399502668
1128 | 2587,180807.213919103
1129 | 2588,176279.079637039
1130 | 2589,163438.959094218
1131 | 2590,161495.5393685
1132 | 2591,216032.303722443
1133 | 2592,176632.181541401
1134 | 2593,168743.001567144
1135 | 2594,183810.11848086
1136 | 2595,156794.36054728
1137 | 2596,169136.43011395
1138 | 2597,183203.318752456
1139 | 2598,213252.926930889
1140 | 2599,190550.327866959
1141 | 2600,234707.209860273
1142 | 2601,135751.318892816
1143 | 2602,164228.45886894
1144 | 2603,153219.437030419
1145 | 2604,164210.746523801
1146 | 2605,163883.229117973
1147 | 2606,154892.776269956
1148 | 2607,197092.08733832
1149 | 2608,228148.376399122
1150 | 2609,178680.587503997
1151 | 2610,165643.341167808
1152 | 2611,222406.642660249
1153 | 2612,184021.843582599
1154 | 2613,170871.094939159
1155 | 2614,189562.873697309
1156 | 2615,170591.884966356
1157 | 2616,172934.351682851
1158 | 2617,186425.069879189
1159 | 2618,218648.131133006
1160 | 2619,183035.606761141
1161 | 2620,178378.906069427
1162 | 2621,184516.716597846
1163 | 2622,181419.5253183
1164 | 2623,196858.923438425
1165 | 2624,189228.701486278
1166 | 2625,208973.380761028
1167 | 2626,180269.86896412
1168 | 2627,159488.713683953
1169 | 2628,191490.299507521
1170 | 2629,228684.245137946
1171 | 2630,201842.998700429
1172 | 2631,209242.82289186
1173 | 2632,202357.62258493
1174 | 2633,168238.61218265
1175 | 2634,202524.12465369
1176 | 2635,170588.771929588
1177 | 2636,198375.31512987
1178 | 2637,170636.827889889
1179 | 2638,181991.079479377
1180 | 2639,183994.54251844
1181 | 2640,182951.482193584
1182 | 2641,174126.297156192
1183 | 2642,170575.496742588
1184 | 2643,175332.239869971
1185 | 2644,167522.061539111
1186 | 2645,168095.583738538
1187 | 2646,154406.415627461
1188 | 2647,170996.973346087
1189 | 2648,159056.890245639
1190 | 2649,181373.6165193
1191 | 2650,152272.560975937
1192 | 2651,168664.346821336
1193 | 2652,211007.008292301
1194 | 2653,182909.515032911
1195 | 2654,203926.829353303
1196 | 2655,179082.825442944
1197 | 2656,206260.099795032
1198 | 2657,181732.443415757
1199 | 2658,189698.740693148
1200 | 2659,203074.34678979
1201 | 2660,201670.634365666
1202 | 2661,173756.812589691
1203 | 2662,181387.076390881
1204 | 2663,184859.155270535
1205 | 2664,158313.615666777
1206 | 2665,151951.955409666
1207 | 2666,162537.52704471
1208 | 2667,178998.337067854
1209 | 2668,186732.584943041
1210 | 2669,187323.318406165
1211 | 2670,199437.232798284
1212 | 2671,185546.680858653
1213 | 2672,161595.015798593
1214 | 2673,154672.422763036
1215 | 2674,159355.710116165
1216 | 2675,155919.014077746
1217 | 2676,182424.87095604
1218 | 2677,178100.589622319
1219 | 2678,202577.900044456
1220 | 2679,177862.778940605
1221 | 2680,182056.024744887
1222 | 2681,191403.199177104
1223 | 2682,196264.754980043
1224 | 2683,209375.003419718
1225 | 2684,196691.81930173
1226 | 2685,192458.431539585
1227 | 2686,182242.80926507
1228 | 2687,183259.503900506
1229 | 2688,188108.243748841
1230 | 2689,171418.640195797
1231 | 2690,194698.882220432
1232 | 2691,174841.84007522
1233 | 2692,172965.476488899
1234 | 2693,189386.323677132
1235 | 2694,185682.618340257
1236 | 2695,176412.012719061
1237 | 2696,174976.489722867
1238 | 2697,180718.581707643
1239 | 2698,186131.188248242
1240 | 2699,165220.786354033
1241 | 2700,164115.893800435
1242 | 2701,182125.729127024
1243 | 2702,182285.140233276
1244 | 2703,196325.442210366
1245 | 2704,164865.215329881
1246 | 2705,182694.492209823
1247 | 2706,185425.485520958
1248 | 2707,171414.7041191
1249 | 2708,183433.472466085
1250 | 2709,176844.981155794
1251 | 2710,180568.187753206
1252 | 2711,185948.625475832
1253 | 2712,189388.291715481
1254 | 2713,142754.489165865
1255 | 2714,156106.800760811
1256 | 2715,155895.397617561
1257 | 2716,159851.977738548
1258 | 2717,185157.832305524
1259 | 2718,180716.291710805
1260 | 2719,176901.093954071
1261 | 2720,181017.222455218
1262 | 2721,183269.159407668
1263 | 2722,193550.830097069
1264 | 2723,170625.842699726
1265 | 2724,182012.405942725
1266 | 2725,179162.507290733
1267 | 2726,183269.159407668
1268 | 2727,180589.836175042
1269 | 2728,181465.935198741
1270 | 2729,196053.029878304
1271 | 2730,183421.020319014
1272 | 2731,167926.839083612
1273 | 2732,168027.530997889
1274 | 2733,182164.26685407
1275 | 2734,172469.071592608
1276 | 2735,181059.374300472
1277 | 2736,182997.570115536
1278 | 2737,166140.504179894
1279 | 2738,198515.546934075
1280 | 2739,193789.648503294
1281 | 2740,173550.025727531
1282 | 2741,176487.943174734
1283 | 2742,188813.302559147
1284 | 2743,178531.911979192
1285 | 2744,182145.731469001
1286 | 2745,179196.465024103
1287 | 2746,169618.349900686
1288 | 2747,170010.168655046
1289 | 2748,181739.671652174
1290 | 2749,172846.934955574
1291 | 2750,195560.8830172
1292 | 2751,180358.114292956
1293 | 2752,211817.702818093
1294 | 2753,176170.128686742
1295 | 2754,234492.248263699
1296 | 2755,182450.956536015
1297 | 2756,174902.068073146
1298 | 2757,173684.174293738
1299 | 2758,147196.673677562
1300 | 2759,175231.189709791
1301 | 2760,193417.64740633
1302 | 2761,183313.601249761
1303 | 2762,180882.250849082
1304 | 2763,186735.697979808
1305 | 2764,172922.865411247
1306 | 2765,202551.677190573
1307 | 2766,190485.634074173
1308 | 2767,173439.49362151
1309 | 2768,196613.598849219
1310 | 2769,178152.259700828
1311 | 2770,174519.904825949
1312 | 2771,172627.796932837
1313 | 2772,173732.689486435
1314 | 2773,209219.844787023
1315 | 2774,181059.374300472
1316 | 2775,188515.443002459
1317 | 2776,182164.26685407
1318 | 2777,188137.901597981
1319 | 2778,158893.54306269
1320 | 2779,189579.65066771
1321 | 2780,165229.803505847
1322 | 2781,162186.071220207
1323 | 2782,166374.879866351
1324 | 2783,161665.184974757
1325 | 2784,175079.328798445
1326 | 2785,203840.874021305
1327 | 2786,152129.078861057
1328 | 2787,181012.141380101
1329 | 2788,161305.53503837
1330 | 2789,203326.392972343
1331 | 2790,168385.571141831
1332 | 2791,183564.365159986
1333 | 2792,163784.619440861
1334 | 2793,171989.192193993
1335 | 2794,180839.95616829
1336 | 2795,170895.923185907
1337 | 2796,174071.054808518
1338 | 2797,259423.859147546
1339 | 2798,188000.824679588
1340 | 2799,179171.703565498
1341 | 2800,171022.241447762
1342 | 2801,174126.297156192
1343 | 2802,187625.573271948
1344 | 2803,199567.946369234
1345 | 2804,205328.078219268
1346 | 2805,166231.535025379
1347 | 2806,154743.91606057
1348 | 2807,159714.537012622
1349 | 2808,185563.069082422
1350 | 2809,171500.796725006
1351 | 2810,180983.443844799
1352 | 2811,183141.236914997
1353 | 2812,178498.634450214
1354 | 2813,224323.710512388
1355 | 2814,218200.642127877
1356 | 2815,182283.177756557
1357 | 2816,190054.639237419
1358 | 2817,160192.453934518
1359 | 2818,171289.393581756
1360 | 2819,151131.098733642
1361 | 2820,181721.458225594
1362 | 2821,172725.053851858
1363 | 2822,222438.699143414
1364 | 2823,235419.373448928
1365 | 2824,185150.926027596
1366 | 2825,184772.239624699
1367 | 2826,180658.216435809
1368 | 2827,209673.316647174
1369 | 2828,205939.810625621
1370 | 2829,165633.573325837
1371 | 2830,186030.317211014
1372 | 2831,160312.319589212
1373 | 2832,190702.440251029
1374 | 2833,175122.810326699
1375 | 2834,183783.13937519
1376 | 2835,178290.666302221
1377 | 2836,181605.343963015
1378 | 2837,187992.451444752
1379 | 2838,188885.11781517
1380 | 2839,189959.344795118
1381 | 2840,179258.619211334
1382 | 2841,181518.750275669
1383 | 2842,193008.659237315
1384 | 2843,186313.89385619
1385 | 2844,181499.39185067
1386 | 2845,174126.297156192
1387 | 2846,183918.612062767
1388 | 2847,184114.270899227
1389 | 2848,158540.947801398
1390 | 2849,197034.759055859
1391 | 2850,185170.284452595
1392 | 2851,221134.533635148
1393 | 2852,184306.637575967
1394 | 2853,199792.302740996
1395 | 2854,143237.803559736
1396 | 2855,177294.838897736
1397 | 2856,182368.620883855
1398 | 2857,176487.943174734
1399 | 2858,183849.408762071
1400 | 2859,184964.141507413
1401 | 2860,196395.969632434
1402 | 2861,188374.936650438
1403 | 2862,176261.296806135
1404 | 2863,163628.142248426
1405 | 2864,180618.032628904
1406 | 2865,161647.329794081
1407 | 2866,167129.598867773
1408 | 2867,174750.988352687
1409 | 2868,177560.202116333
1410 | 2869,192577.796112839
1411 | 2870,199202.898960871
1412 | 2871,182818.156667308
1413 | 2872,148217.262540651
1414 | 2873,188997.797082492
1415 | 2874,185807.928877601
1416 | 2875,177030.477842021
1417 | 2876,175942.474593632
1418 | 2877,172912.518576433
1419 | 2878,198359.248864591
1420 | 2879,184379.133036383
1421 | 2880,194255.566948886
1422 | 2881,209449.651603064
1423 | 2882,169979.323958443
1424 | 2883,188206.281858748
1425 | 2884,186412.438609167
1426 | 2885,196761.386409959
1427 | 2886,208353.269558209
1428 | 2887,166548.067241044
1429 | 2888,175942.474593632
1430 | 2889,166790.457916434
1431 | 2890,160515.850579067
1432 | 2891,192167.621096362
1433 | 2892,178751.551083369
1434 | 2893,198678.894117024
1435 | 2894,164553.120272354
1436 | 2895,156887.932862327
1437 | 2896,164185.777305524
1438 | 2897,212992.120630876
1439 | 2898,197468.550532521
1440 | 2899,180106.84373966
1441 | 2900,183972.071056674
1442 | 2901,245283.198337927
1443 | 2902,170351.963410756
1444 | 2903,195596.307707478
1445 | 2904,189369.756330412
1446 | 2905,223667.404551664
1447 | 2906,169335.310624364
1448 | 2907,167411.02835165
1449 | 2908,187709.555003968
1450 | 2909,196526.002998991
1451 | 2910,137402.569855589
1452 | 2911,165086.775061735
1453 | 2912,188506.431412274
1454 | 2913,172917.456816012
1455 | 2914,166274.325225982
1456 | 2915,167081.220948984
1457 | 2916,164788.778231138
1458 | 2917,219222.423400059
1459 | 2918,184924.279658997
1460 | 2919,187741.866657478
1461 |
--------------------------------------------------------------------------------
/predict-house-prices.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "## 通过神经网络预测房价\n",
8 | "在这个项目中,我们希望能够构建神经网络来预测房屋的价格"
9 | ]
10 | },
11 | {
12 | "cell_type": "markdown",
13 | "metadata": {},
14 | "source": [
15 | "首先,我们导入一些必要的库"
16 | ]
17 | },
18 | {
19 | "cell_type": "code",
20 | "execution_count": 1,
21 | "metadata": {},
22 | "outputs": [],
23 | "source": [
24 | "import pandas as pd\n",
25 | "import numpy as np\n",
26 | "import matplotlib.pyplot as plt\n",
27 | "import torch\n",
28 | "from torch import nn\n",
29 | "\n",
30 | "%matplotlib inline\n",
31 | "%load_ext autoreload\n",
32 | "%autoreload 2"
33 | ]
34 | },
35 | {
36 | "cell_type": "markdown",
37 | "metadata": {},
38 | "source": [
39 | "读取训练集和测试集的数据"
40 | ]
41 | },
42 | {
43 | "cell_type": "code",
44 | "execution_count": 2,
45 | "metadata": {},
46 | "outputs": [],
47 | "source": [
48 | "train = pd.read_csv('./all/train.csv')\n",
49 | "test = pd.read_csv('./all/test.csv')"
50 | ]
51 | },
52 | {
53 | "cell_type": "markdown",
54 | "metadata": {},
55 | "source": [
56 | "可以具体看看前面 5 个训练集长什么样子,可以看到,前面都是这个房屋的属性,最后是房屋的价格"
57 | ]
58 | },
59 | {
60 | "cell_type": "code",
61 | "execution_count": 3,
62 | "metadata": {},
63 | "outputs": [
64 | {
65 | "data": {
66 | "text/html": [
67 | "\n",
68 | "\n",
81 | "
\n",
82 | " \n",
83 | " \n",
84 | " | \n",
85 | " Id | \n",
86 | " MSSubClass | \n",
87 | " MSZoning | \n",
88 | " LotFrontage | \n",
89 | " LotArea | \n",
90 | " Street | \n",
91 | " Alley | \n",
92 | " LotShape | \n",
93 | " LandContour | \n",
94 | " Utilities | \n",
95 | " ... | \n",
96 | " PoolArea | \n",
97 | " PoolQC | \n",
98 | " Fence | \n",
99 | " MiscFeature | \n",
100 | " MiscVal | \n",
101 | " MoSold | \n",
102 | " YrSold | \n",
103 | " SaleType | \n",
104 | " SaleCondition | \n",
105 | " SalePrice | \n",
106 | "
\n",
107 | " \n",
108 | " \n",
109 | " \n",
110 | " | 0 | \n",
111 | " 1 | \n",
112 | " 60 | \n",
113 | " RL | \n",
114 | " 65.0 | \n",
115 | " 8450 | \n",
116 | " Pave | \n",
117 | " NaN | \n",
118 | " Reg | \n",
119 | " Lvl | \n",
120 | " AllPub | \n",
121 | " ... | \n",
122 | " 0 | \n",
123 | " NaN | \n",
124 | " NaN | \n",
125 | " NaN | \n",
126 | " 0 | \n",
127 | " 2 | \n",
128 | " 2008 | \n",
129 | " WD | \n",
130 | " Normal | \n",
131 | " 208500 | \n",
132 | "
\n",
133 | " \n",
134 | " | 1 | \n",
135 | " 2 | \n",
136 | " 20 | \n",
137 | " RL | \n",
138 | " 80.0 | \n",
139 | " 9600 | \n",
140 | " Pave | \n",
141 | " NaN | \n",
142 | " Reg | \n",
143 | " Lvl | \n",
144 | " AllPub | \n",
145 | " ... | \n",
146 | " 0 | \n",
147 | " NaN | \n",
148 | " NaN | \n",
149 | " NaN | \n",
150 | " 0 | \n",
151 | " 5 | \n",
152 | " 2007 | \n",
153 | " WD | \n",
154 | " Normal | \n",
155 | " 181500 | \n",
156 | "
\n",
157 | " \n",
158 | " | 2 | \n",
159 | " 3 | \n",
160 | " 60 | \n",
161 | " RL | \n",
162 | " 68.0 | \n",
163 | " 11250 | \n",
164 | " Pave | \n",
165 | " NaN | \n",
166 | " IR1 | \n",
167 | " Lvl | \n",
168 | " AllPub | \n",
169 | " ... | \n",
170 | " 0 | \n",
171 | " NaN | \n",
172 | " NaN | \n",
173 | " NaN | \n",
174 | " 0 | \n",
175 | " 9 | \n",
176 | " 2008 | \n",
177 | " WD | \n",
178 | " Normal | \n",
179 | " 223500 | \n",
180 | "
\n",
181 | " \n",
182 | " | 3 | \n",
183 | " 4 | \n",
184 | " 70 | \n",
185 | " RL | \n",
186 | " 60.0 | \n",
187 | " 9550 | \n",
188 | " Pave | \n",
189 | " NaN | \n",
190 | " IR1 | \n",
191 | " Lvl | \n",
192 | " AllPub | \n",
193 | " ... | \n",
194 | " 0 | \n",
195 | " NaN | \n",
196 | " NaN | \n",
197 | " NaN | \n",
198 | " 0 | \n",
199 | " 2 | \n",
200 | " 2006 | \n",
201 | " WD | \n",
202 | " Abnorml | \n",
203 | " 140000 | \n",
204 | "
\n",
205 | " \n",
206 | " | 4 | \n",
207 | " 5 | \n",
208 | " 60 | \n",
209 | " RL | \n",
210 | " 84.0 | \n",
211 | " 14260 | \n",
212 | " Pave | \n",
213 | " NaN | \n",
214 | " IR1 | \n",
215 | " Lvl | \n",
216 | " AllPub | \n",
217 | " ... | \n",
218 | " 0 | \n",
219 | " NaN | \n",
220 | " NaN | \n",
221 | " NaN | \n",
222 | " 0 | \n",
223 | " 12 | \n",
224 | " 2008 | \n",
225 | " WD | \n",
226 | " Normal | \n",
227 | " 250000 | \n",
228 | "
\n",
229 | " \n",
230 | "
\n",
231 | "
5 rows × 81 columns
\n",
232 | "
"
233 | ],
234 | "text/plain": [
235 | " Id MSSubClass MSZoning LotFrontage LotArea Street Alley LotShape \\\n",
236 | "0 1 60 RL 65.0 8450 Pave NaN Reg \n",
237 | "1 2 20 RL 80.0 9600 Pave NaN Reg \n",
238 | "2 3 60 RL 68.0 11250 Pave NaN IR1 \n",
239 | "3 4 70 RL 60.0 9550 Pave NaN IR1 \n",
240 | "4 5 60 RL 84.0 14260 Pave NaN IR1 \n",
241 | "\n",
242 | " LandContour Utilities ... PoolArea PoolQC Fence MiscFeature MiscVal \\\n",
243 | "0 Lvl AllPub ... 0 NaN NaN NaN 0 \n",
244 | "1 Lvl AllPub ... 0 NaN NaN NaN 0 \n",
245 | "2 Lvl AllPub ... 0 NaN NaN NaN 0 \n",
246 | "3 Lvl AllPub ... 0 NaN NaN NaN 0 \n",
247 | "4 Lvl AllPub ... 0 NaN NaN NaN 0 \n",
248 | "\n",
249 | " MoSold YrSold SaleType SaleCondition SalePrice \n",
250 | "0 2 2008 WD Normal 208500 \n",
251 | "1 5 2007 WD Normal 181500 \n",
252 | "2 9 2008 WD Normal 223500 \n",
253 | "3 2 2006 WD Abnorml 140000 \n",
254 | "4 12 2008 WD Normal 250000 \n",
255 | "\n",
256 | "[5 rows x 81 columns]"
257 | ]
258 | },
259 | "execution_count": 3,
260 | "metadata": {},
261 | "output_type": "execute_result"
262 | }
263 | ],
264 | "source": [
265 | "train.head()"
266 | ]
267 | },
268 | {
269 | "cell_type": "markdown",
270 | "metadata": {},
271 | "source": [
272 | "接着我们可以看看训练集和测试集分别有多少个样本"
273 | ]
274 | },
275 | {
276 | "cell_type": "code",
277 | "execution_count": 4,
278 | "metadata": {},
279 | "outputs": [
280 | {
281 | "name": "stdout",
282 | "output_type": "stream",
283 | "text": [
284 | "一共有 1460 个训练集样本\n",
285 | "一共有 1459 个测试集样本\n"
286 | ]
287 | }
288 | ],
289 | "source": [
290 | "print('一共有 {} 个训练集样本'.format(train.shape[0]))\n",
291 | "print('一共有 {} 个测试集样本'.format(test.shape[0]))"
292 | ]
293 | },
294 | {
295 | "cell_type": "markdown",
296 | "metadata": {},
297 | "source": [
298 | "接着我们开始对数据进行处理,首先我们取出**第二个特征**到**倒数第二个特征**,这些特征作为我们神经网络的输入特征"
299 | ]
300 | },
301 | {
302 | "cell_type": "code",
303 | "execution_count": 5,
304 | "metadata": {},
305 | "outputs": [],
306 | "source": [
307 | "all_features = pd.concat((train.loc[:, 'MSSubClass':'SaleCondition'],\n",
308 | " test.loc[:, 'MSSubClass':'SaleCondition']))"
309 | ]
310 | },
311 | {
312 | "cell_type": "markdown",
313 | "metadata": {},
314 | "source": [
315 | "接着我们需要进行数据标准化,对于所有的数值特征,我们都会减去均值,除以方差"
316 | ]
317 | },
318 | {
319 | "cell_type": "code",
320 | "execution_count": 6,
321 | "metadata": {},
322 | "outputs": [],
323 | "source": [
324 | "numeric_feats = all_features.dtypes[all_features.dtypes != \"object\"].index # 取出所有的数值特征\n",
325 | "\n",
326 | "# 减去均值,除以方差\n",
327 | "all_features[numeric_feats] = all_features[numeric_feats].apply(lambda x: (x - x.mean()) \n",
328 | " / (x.std()))"
329 | ]
330 | },
331 | {
332 | "cell_type": "code",
333 | "execution_count": 7,
334 | "metadata": {},
335 | "outputs": [],
336 | "source": [
337 | "# 对预测的价格取 log\n",
338 | "train['SalePrice'] = np.log(train['SalePrice'])"
339 | ]
340 | },
341 | {
342 | "cell_type": "markdown",
343 | "metadata": {},
344 | "source": [
345 | "如果你仔细看看上面的特征,你会发现,除了数值特征之外,还有很多非数值特征,这些特征我们没有办法将其转换成数值表示,所以我们通过 pandas 的内置函数将其转换成种类表示\n",
346 | "\n",
347 | "比如 **MSZoning** 有两种可能,一种是 RL,一种是 RM,那么我们就将这个特征变成两个新的特征,RL 和 RM,如果这个数据在 **MSZoning** 上是 RL,那么 RL 取 1,RM 取 0;反之如果这个特征是 RM,那么 RL 取 0,RM 取 1.\n",
348 | "\n",
349 | "| RL | RM |\n",
350 | "|-|-|\n",
351 | "| 0 | 1 |\n",
352 | "| 1 | 0 |"
353 | ]
354 | },
355 | {
356 | "cell_type": "code",
357 | "execution_count": 8,
358 | "metadata": {},
359 | "outputs": [],
360 | "source": [
361 | "all_features = pd.get_dummies(all_features, dummy_na=True)"
362 | ]
363 | },
364 | {
365 | "cell_type": "markdown",
366 | "metadata": {},
367 | "source": [
368 | "除此之外,我们会发现整个数据中有一些丢失数据,这些丢失数据都是 'NA',我们没有办法将这些数据输入到网络中,所以需要对这些丢失数据进行赋值,这里我们将数据的均值填入到丢失数据中"
369 | ]
370 | },
371 | {
372 | "cell_type": "code",
373 | "execution_count": 9,
374 | "metadata": {},
375 | "outputs": [],
376 | "source": [
377 | "all_features = all_features.fillna(all_features.mean())\n",
378 | "feat_dim = all_features.shape[1]"
379 | ]
380 | },
381 | {
382 | "cell_type": "markdown",
383 | "metadata": {},
384 | "source": [
385 | "前面我们已经做好了数据的预处理,下面我们将所有的训练集和验证集都取出成为一个 numpy 的数组"
386 | ]
387 | },
388 | {
389 | "cell_type": "code",
390 | "execution_count": 10,
391 | "metadata": {},
392 | "outputs": [],
393 | "source": [
394 | "num_train = int(0.9 * train.shape[0]) # 划分训练样本和验证集样本\n",
395 | "indices = np.arange(train.shape[0])\n",
396 | "np.random.shuffle(indices) # shuffle 顺序\n",
397 | "train_indices = indices[:num_train]\n",
398 | "valid_indices = indices[num_train:]\n",
399 | "\n",
400 | "# 提取训练集和验证集的特征\n",
401 | "train_features = all_features.iloc[train_indices].values.astype(np.float32)\n",
402 | "train_features = torch.from_numpy(train_features)\n",
403 | "valid_features = all_features.iloc[valid_indices].values.astype(np.float32)\n",
404 | "valid_features = torch.from_numpy(valid_features)\n",
405 | "train_valid_features = all_features[:train.shape[0]].values.astype(np.float32)\n",
406 | "train_valid_features = torch.from_numpy(train_valid_features)\n",
407 | "\n",
408 | "# 提取训练集和验证集的label\n",
409 | "train_labels = train['SalePrice'].values[train_indices, None].astype(np.float32)\n",
410 | "train_labels = torch.from_numpy(train_labels)\n",
411 | "valid_labels = train['SalePrice'].values[valid_indices, None].astype(np.float32)\n",
412 | "valid_labels = torch.from_numpy(valid_labels)\n",
413 | "train_valid_labels = train['SalePrice'].values[:, None].astype(np.float32)\n",
414 | "train_valid_labels = torch.from_numpy(train_valid_labels)"
415 | ]
416 | },
417 | {
418 | "cell_type": "code",
419 | "execution_count": 11,
420 | "metadata": {},
421 | "outputs": [],
422 | "source": [
423 | "test_features = all_features[train.shape[0]:].values.astype(np.float32)\n",
424 | "test_features = torch.from_numpy(test_features)"
425 | ]
426 | },
427 | {
428 | "cell_type": "markdown",
429 | "metadata": {},
430 | "source": [
431 | "下面是构建神经网络的地方,可以构建任意想要的神经网络"
432 | ]
433 | },
434 | {
435 | "cell_type": "code",
436 | "execution_count": 12,
437 | "metadata": {},
438 | "outputs": [
439 | {
440 | "name": "stdout",
441 | "output_type": "stream",
442 | "text": [
443 | "Sequential(\n",
444 | " (0): Linear(in_features=331, out_features=1, bias=True)\n",
445 | ")\n"
446 | ]
447 | }
448 | ],
449 | "source": [
450 | "def get_model():\n",
451 | " net = nn.Sequential(\n",
452 | " nn.Linear(feat_dim, 1)\n",
453 | " )\n",
454 | " return net\n",
455 | "\n",
456 | "net = get_model()\n",
457 | "print(net)"
458 | ]
459 | },
460 | {
461 | "cell_type": "markdown",
462 | "metadata": {},
463 | "source": [
464 | "在评估模型的时候,为了保证大的价格和小的价格对模型都有着近似相同的影响,我们不会直接使用前面定义的均方误差作为最后的评价函数,我们会对预测的价格和真实的价格取 log,然后计算他们之间均方误差的平方根来作为评价指标,这里的指标我们已经在 `utils.py` 中实现了,感兴趣的同学可以去看看。"
465 | ]
466 | },
467 | {
468 | "cell_type": "code",
469 | "execution_count": 13,
470 | "metadata": {},
471 | "outputs": [],
472 | "source": [
473 | "from utils import train_model, pred"
474 | ]
475 | },
476 | {
477 | "cell_type": "code",
478 | "execution_count": 15,
479 | "metadata": {
480 | "scrolled": false
481 | },
482 | "outputs": [
483 | {
484 | "name": "stdout",
485 | "output_type": "stream",
486 | "text": [
487 | "epoch: 10, train rmse: 0.176, valid rmse: 0.164\n",
488 | "\n",
489 | "epoch: 20, train rmse: 0.142, valid rmse: 0.145\n",
490 | "\n",
491 | "epoch: 30, train rmse: 0.125, valid rmse: 0.138\n",
492 | "\n",
493 | "epoch: 40, train rmse: 0.115, valid rmse: 0.132\n",
494 | "\n",
495 | "epoch: 50, train rmse: 0.109, valid rmse: 0.130\n",
496 | "\n",
497 | "epoch: 60, train rmse: 0.105, valid rmse: 0.123\n",
498 | "\n",
499 | "epoch: 70, train rmse: 0.102, valid rmse: 0.122\n",
500 | "\n",
501 | "epoch: 80, train rmse: 0.101, valid rmse: 0.119\n",
502 | "\n",
503 | "epoch: 90, train rmse: 0.099, valid rmse: 0.118\n",
504 | "\n",
505 | "epoch: 100, train rmse: 0.098, valid rmse: 0.116\n",
506 | "\n"
507 | ]
508 | },
509 | {
510 | "data": {
511 | "image/png": "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\n",
512 | "text/plain": [
513 | ""
514 | ]
515 | },
516 | "metadata": {},
517 | "output_type": "display_data"
518 | }
519 | ],
520 | "source": [
521 | "# 可以调整的超参\n",
522 | "batch_size = 128\n",
523 | "epochs = 100\n",
524 | "lr = 0.01\n",
525 | "wd = 0\n",
526 | "use_gpu = False\n",
527 | "\n",
528 | "net = get_model()\n",
529 | "train_model(net, train_features, train_labels, valid_features, valid_labels, epochs, \n",
530 | " batch_size, lr, wd, use_gpu)"
531 | ]
532 | },
533 | {
534 | "cell_type": "markdown",
535 | "metadata": {},
536 | "source": [
537 | "当我们构建好了训练的过程,下面就开始了不断地调参尝试,最后得到一个效果最好的模型"
538 | ]
539 | },
540 | {
541 | "cell_type": "code",
542 | "execution_count": 16,
543 | "metadata": {},
544 | "outputs": [
545 | {
546 | "name": "stdout",
547 | "output_type": "stream",
548 | "text": [
549 | "epoch: 10, train rmse: 0.178\n",
550 | "\n",
551 | "epoch: 20, train rmse: 0.137\n",
552 | "\n",
553 | "epoch: 30, train rmse: 0.120\n",
554 | "\n",
555 | "epoch: 40, train rmse: 0.111\n",
556 | "\n",
557 | "epoch: 50, train rmse: 0.106\n",
558 | "\n",
559 | "epoch: 60, train rmse: 0.103\n",
560 | "\n",
561 | "epoch: 70, train rmse: 0.101\n",
562 | "\n",
563 | "epoch: 80, train rmse: 0.099\n",
564 | "\n",
565 | "epoch: 90, train rmse: 0.098\n",
566 | "\n",
567 | "epoch: 100, train rmse: 0.098\n",
568 | "\n"
569 | ]
570 | },
571 | {
572 | "data": {
573 | "image/png": "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\n",
574 | "text/plain": [
575 | ""
576 | ]
577 | },
578 | "metadata": {},
579 | "output_type": "display_data"
580 | }
581 | ],
582 | "source": [
583 | "net = get_model()\n",
584 | "train_model(net, train_valid_features, train_valid_labels, None, None, epochs, \n",
585 | " batch_size, lr, wd, use_gpu)"
586 | ]
587 | },
588 | {
589 | "cell_type": "markdown",
590 | "metadata": {},
591 | "source": [
592 | "运行下面的代码,可以通过训练好的模型预测 testset 的结果,会在当前目录生成 `submission.csv` 用于提交"
593 | ]
594 | },
595 | {
596 | "cell_type": "code",
597 | "execution_count": 17,
598 | "metadata": {},
599 | "outputs": [],
600 | "source": [
601 | "pred(net, test, test_features)"
602 | ]
603 | }
604 | ],
605 | "metadata": {
606 | "kernelspec": {
607 | "display_name": "Python 3",
608 | "language": "python",
609 | "name": "python3"
610 | },
611 | "language_info": {
612 | "codemirror_mode": {
613 | "name": "ipython",
614 | "version": 3
615 | },
616 | "file_extension": ".py",
617 | "mimetype": "text/x-python",
618 | "name": "python",
619 | "nbconvert_exporter": "python",
620 | "pygments_lexer": "ipython3",
621 | "version": "3.5.0"
622 | }
623 | },
624 | "nbformat": 4,
625 | "nbformat_minor": 2
626 | }
627 |
--------------------------------------------------------------------------------