From a2ac723361fe33ef6c5af65d376b424d2d0efbb4 Mon Sep 17 00:00:00 2001 From: wnma3mz Date: Thu, 9 Nov 2017 14:25:09 +0800 Subject: [PATCH] commit chapter13 --- chapter13/code.py | 236 +++++++++++++++++++++++++++ chapter13/data/VAT.xls | Bin 0 -> 5632 bytes chapter13/data/data1.csv | 21 +++ chapter13/data/data2.csv | 16 ++ chapter13/data/data3.csv | 16 ++ chapter13/data/data4.csv | 13 ++ chapter13/data/data5.csv | 15 ++ chapter13/data/enterprise_income.xls | Bin 0 -> 5632 bytes chapter13/data/enterprise_incomt.xls | Bin 0 -> 5632 bytes chapter13/data/personal_Income.xls | Bin 0 -> 5632 bytes chapter13/data/revenue.xls | Bin 0 -> 5632 bytes chapter13/data/sales_tax.xls | Bin 0 -> 5632 bytes chapter13/tmp/1-net.model | Bin 0 -> 13944 bytes chapter13/tmp/2-net.model | Bin 0 -> 13944 bytes chapter13/tmp/3-net.model | Bin 0 -> 13936 bytes chapter13/tmp/4-net.model | Bin 0 -> 13936 bytes chapter13/tmp/5-net.model | Bin 0 -> 13936 bytes chapter13/tmp/data1_GM11.xls | Bin 0 -> 5632 bytes chapter13/tmp/data2_GM11.xls | Bin 0 -> 5632 bytes chapter13/tmp/data3_GM11.xls | Bin 0 -> 5632 bytes chapter13/tmp/data4_GM11.xls | Bin 0 -> 5632 bytes chapter13/tmp/data5_GM11.xls | Bin 0 -> 5632 bytes 22 files changed, 317 insertions(+) create mode 100755 chapter13/code.py create mode 100755 chapter13/data/VAT.xls create mode 100755 chapter13/data/data1.csv create mode 100755 chapter13/data/data2.csv create mode 100755 chapter13/data/data3.csv create mode 100755 chapter13/data/data4.csv create mode 100755 chapter13/data/data5.csv create mode 100755 chapter13/data/enterprise_income.xls create mode 100755 chapter13/data/enterprise_incomt.xls create mode 100755 chapter13/data/personal_Income.xls create mode 100755 chapter13/data/revenue.xls create mode 100755 chapter13/data/sales_tax.xls create mode 100755 chapter13/tmp/1-net.model create mode 100755 chapter13/tmp/2-net.model create mode 100755 chapter13/tmp/3-net.model create mode 100755 chapter13/tmp/4-net.model create mode 100755 chapter13/tmp/5-net.model create mode 100755 chapter13/tmp/data1_GM11.xls create mode 100755 chapter13/tmp/data2_GM11.xls create mode 100755 chapter13/tmp/data3_GM11.xls create mode 100755 chapter13/tmp/data4_GM11.xls create mode 100755 chapter13/tmp/data5_GM11.xls diff --git a/chapter13/code.py b/chapter13/code.py new file mode 100755 index 0000000..c513c20 --- /dev/null +++ b/chapter13/code.py @@ -0,0 +1,236 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Created on Wed Nov 8 23:05:54 2017 + +@author: lu +""" + +import pandas as pd +import numpy as np +from sklearn.linear_model import Lasso +from keras.models import Sequential +from keras.layers.core import Dense, Activation +import matplotlib.pyplot as plt + +""" +GM11-->自定义的灰度预测函 +programmer_1-->读取文件提取基本信息 +programmer_2-->用自定义的灰度预测函数,进行预测 +programmer_3-->建立神经网络模型,进行预测并画图预测图 +""" + + +def GM11(x0): + # 1-AGO序列, 累计求和 + x1 = np.cumsum(x0) + # 紧邻均值(MEAN)生成序列 + z1 = (x1[:-1] + x1[1:]) / 2.0 + z1 = z1.reshape(len(z1), 1) + B = np.append(-z1, np.ones_like(z1), axis=1) + Yn = x0[1:].reshape((len(x0) - 1, 1)) + # 矩阵计算,计算参数 + [[a], [b]] = np.dot(np.dot(np.linalg.inv(np.dot(B.T, B)), B.T), Yn) + # 还原值 + f = lambda k: (x0[0] - b / a) * np.exp(-a * (k - 1)) -( x0[0] - b / a) * np.exp(-a * (k - 2)) + + delta=np.abs(x0 - np.array([f(i) for i in range(1, len(x0) + 1)])) + C=delta.std() / x0.std() + P=1.0 * (np.abs(delta - delta.mean()) < + 0.6745 * x0.std()).sum() / len(x0) + # 灰度预测函数、a、b、首项、方差比、小残差概率 + + return f, a, b, x0[0], C, P + + +def programmer_1(inputfile, data_range): + # inputfile = "data/data1.csv" + data=pd.read_csv(inputfile) + """ + 原始方法,替代方法可以使用describe()方法,然后进行筛选 + r = [data.min(), data.max(), data.mean(), data.std()] + r = pd.DataFrame(r, index = ["Min", "Max", "Mean", "STD"]).T + """ + r=pd.DataFrame(data.describe()).T + np.round(r, 2) + + # 计算相关系数矩阵 + np.round(data.corr(method="pearson"), 2) + + """ + 原代码使用的是AdaptiveLasso,现更新为Lasso + 参数也由gamma变为tol(有待验证) + """ + model =Lasso(tol = 1) + model.fit(data.iloc[:, 0:data_range], data["y"]) + # 各个特征的系数 + model.coef_ + print(model.coef_) + + +def programmer_2(inputfile, outputfile, startyear, feature_lst, roundnum = 0): + """ + year: 开始年份 + feature_lst: 特征列 + roundnum: 四舍五入保留的位数 + """ + data=pd.read_csv(inputfile) + data.index=range(startyear, 2014) + + data.loc[2014]=None + data.loc[2015]=None + for i in feature_lst: + f=GM11(data[i][list(range(startyear, 2014))].as_matrix())[0] + # 2014年预测结果 + data[i][2014]=f(len(data) - 1) + # 2015年预测结果 + data[i][2015]=f(len(data)) + data[i]=data[i].round(roundnum) + + print(data[feature_lst + ["y"]]) + data[feature_lst + ["y"]].to_excel(outputfile) + + +def programmer_3(inputfile, outputfile, modelfile, feature_lst, startyear, input_dim_1, units1, input_dim_2, units2, epochs_num = 10000, roundnum = 0): + """ + feature_lst: 特征列 + input_dim、units: 表示训练模型层数和神经元个数 + roundnum: 四舍五入 + """ + + data=pd.read_excel(inputfile) + # 特征列 + # 取startyear年以前的数据 + data_train=data.loc[range(startyear, 2014)].copy() + data_mean=data_train.mean() + data_std=data.std() + # 数据标准化 + data_train=(data_train - data_mean) / data_std + # 特征数据 + x_train=data_train[feature_lst].as_matrix() + # 标签数据 + y_train=data_train["y"].as_matrix() + + model=Sequential() + model.add(Dense(input_dim=input_dim_1, units=units1)) + model.add(Activation("relu")) + model.add(Dense(input_dim=input_dim_2, units=units2)) + model.compile(loss = "mean_squared_error", optimizer = "adam") + model.fit(x_train, y_train, epochs = epochs_num, batch_size = 16) + model.save_weights(modelfile) + + # 预测,并且还原结果 + x=((data[feature_lst] - data_mean[feature_lst]) / + data_std[feature_lst]).as_matrix() + data["y_pred"]=model.predict(x) * data_std["y"] + data_mean["y"] + data["y_pred"]=data["y_pred"].round(roundnum) + + data.to_excel(outputfile) + # 画出预测结果图 + p=data[["y", "y_pred"]].plot(subplots = True, style = ["b-o", "r-*"]) + plt.show() + + +if __name__ == "__main__": + # programmer_1(inputfile="data/data1.csv", + # data_range=13) + # programmer_2(inputfile="data/data1.csv", + # outputfile="tmp/data1_GM11.xls", + # startyear=1994, + # feature_lst=["x1", "x2", "x3", "x4", "x5", "x7"], + # roundnum=2) + # programmer_3(inputfile="tmp/data1_GM11.xls", + # outputfile="data/revenue.xls", + # modelfile="tmp/1-net.model", + # feature_lst=["x1", "x2", "x3", "x4", "x5", "x7"], + # startyear=1994, + # input_dim_1=6, + # units1=12, + # input_dim_2=12, + # units2=1) + + # programmer_1(inputfile="data/data2.csv", + # data_range=6) + # programmer_2(inputfile="data/data2.csv", + # outputfile="tmp/data2_GM11.xls", + # startyear=1999, + # feature_lst=["x1", "x3", "x5"], + # roundnum=6) + # programmer_3(inputfile="tmp/data2_GM11.xls", + # outputfile="data/VAT.xls", + # modelfile="tmp/2-net.model", + # feature_lst=["x1", "x3", "x5"], + # startyear=1999, + # input_dim_1=3, + # units1=6, + # input_dim_2=6, + # units2=1, + # roundnum=2) + + # programmer_1(inputfile="data/data3.csv", + # data_range=10) + # programmer_2(inputfile="data/data3.csv", + # outputfile="tmp/data3_GM11.xls", + # startyear=1999, + # feature_lst=["x3", "x4", "x6", "x8"]) + # programmer_3(inputfile="tmp/data3_GM11.xls", + # outputfile="data/sales_tax.xls", + # modelfile="tmp/3-net.model", + # feature_lst=["x3", "x4", "x6", "x8"], + # startyear=1999, + # input_dim_1=4, + # units1=8, + # input_dim_2=8, + # units2=1, + # roundnum=2) + + # programmer_1(inputfile="data/data4.csv", + # data_range=10) + # programmer_2(inputfile="data/data4.csv", + # outputfile="tmp/data4_GM11.xls", + # startyear=2002, + # feature_lst=["x1", "x2", "x3", "x4", "x6", "x7", "x9", "x10"], + # roundnum=2) + # programmer_3(inputfile="tmp/data4_GM11.xls", + # outputfile="data/enterprise_incomt.xls", + # modelfile="tmp/4-net.model", + # feature_lst=["x1", "x2", "x3", "x4", "x6", "x7", "x9", "x10"], + # startyear=2002, + # input_dim_1=8, + # units1=6, + # input_dim_2=6, + # units2=1, + # roundnum=2) + + # programmer_1(inputfile="data/data5.csv", + # data_range=7) + # programmer_2(inputfile="data/data5.csv", + # outputfile="tmp/data5_GM11.xls", + # startyear=2000, + # feature_lst=["x1", "x4", "x5", "x7"]) + # programmer_3(inputfile="tmp/data5_GM11.xls", + # outputfile="data/personal_Income.xls", + # modelfile="tmp/5-net.model", + # feature_lst=["x1", "x4", "x5", "x7"], + # startyear=2000, + # input_dim_1=4, + # units1=8, + # input_dim_2=8, + # units2=1, + # epochs_num=15000# ) + + x0=np.array([3152063, 2213050, 4050122, + 5265142, 5556619, 4772843, 9463330]) + f, a, b, x00, C, P=GM11(x0) + + print(u'2014年、2015年的预测结果分别为:\n%0.2f万元和%0.2f万元' % (f(8), f(9))) + print(u'后验差比值为:%0.4f' % C) + p=pd.DataFrame(x0, columns = ["y"], index = range(2007, 2014)) + p.loc[2014]=None + p.loc[2015]=None + p["y_pred"]=[f(i) for i in range(1, 10)] + p["y_pred"]=p["y_pred"].round(2) + p.index =pd.to_datetime(p.index, format = "%Y") + + p.plot(style = ["b-o", "r-*"], xticks = p.index) + plt.show() diff --git a/chapter13/data/VAT.xls b/chapter13/data/VAT.xls new file mode 100755 index 0000000000000000000000000000000000000000..1985d452b373f69c00f95ed841ca023242494f37 GIT binary patch literal 5632 zcmeI04QN$m7{{M;?#J%kc6ayA&DFK?_>muTS!-rRxO*q%q;NU4DMNExyIF2bxu`h{ zb?ICPrhO5qlx`L#rDkTDGc<^VgoQdsg*lTl%ml$mWbXDn|93~`VaP&|iu;Z|_kExD zJ^$Zxp7-ONd%tT{9h*N1ohC;qAQyGT{p9W8H@NP%+v&vp@whbYPaoIWl_>wA4ETLK zkzNn&4;)F7xs>@nO(yMhA7V@NGyl(|`BXfwHfr6%G9EEh7!t!cwgzovPa55hs4`%m zf$ayo10!2tBk-(&9Y-0|VU$s8xH#t_)*@D#VGc%L8e4-t$2C8|lSf%}n8(DIt&_#h zy&fuzJzr7tFX%8hsuoE{AELU;ol0AXC$uP98;w=ebWkSG>=ybnZV_D)4Jik$g#Xs& z!61w1vM{CS{3r3e7_#~DTT20Cq$w+bRm8t|T%_Cm(fw zc=70@%E{r`@GNJK6xk+sOH>r6dbxrxPLmGacT(g$$-xz)U|*IoGywGwY$iv`jA4_r zx+@b_V9ZMN4r5L}%CYe99`zAiZ}`1r?_CXN!Xvr9z3B9k%)u$Ef2RON1`lO^i)1Tx51~VV4!4e!)s!{%s9()?BZM+tdl`4v+kXwI@-fa&1Ckt z*>it06VUJB7MIAOgIR?_kSLr4@hKV)Li27RTl!yG;M3`=&s`+xIy^9vOsX#1Z$WX0zvkPlOR4t#US(x z$vO#T4tD7*c|h29{Cs_Bxz3UYgq)Q_K=9av$cc*<2(tE_1o0`F0>TqDLRj5(q?_Oc zfx1RM)pY(u_yG5LLD&-T>ei7bL3h^H&g!~f zbmU3U{i!t%ktf-am+xFQ9Ffc3b`r#=s0@TT=Y%kJ{F5F{@PY8wvU_&SoY#)XeITsz zKf>dtr=(`<$mQ+PsVhE3PeXTLt|^g!I>xJY{m^Zi)$rzf)3mN1x?O=sd0h79wIQu5 zd(){aK1G$#U0W`?dkXs}Y29S#HV@g?*?383BpJHr))gZo$#zCIO&l=>8A<7dAU;LU zg79rr2w!|u+f7ITA+7QK`hjh2$VdtZd;XZplKjvM?(UAvx(G{PfMbMp7Bf155l%{CiAaqal&u#Ox9D{BUx)TZ;dE8&Gzm%_a z7hCCOX>f%$h zv{!X`I%LpgYg@@`e?8RY38B@Mt$uLO8C6(d^2(LqC?cl2$m&j%L66P E8!{lHc>n+a literal 0 HcmV?d00001 diff --git a/chapter13/data/data1.csv b/chapter13/data/data1.csv new file mode 100755 index 0000000..7009b9c --- /dev/null +++ b/chapter13/data/data1.csv @@ -0,0 +1,21 @@ +x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,y +3831732,181.54,448.19,7571,6212.7,6370241,525.71,985.31,60.62,65.66,120,1.029,5321,64.87 +3913824,214.63,549.97,9038.16,7601.73,6467115,618.25,1259.2,73.46,95.46,113.5,1.051,6529,99.75 +3928907,239.56,686.44,9905.31,8092.82,6560508,638.94,1468.06,81.16,81.16,108.2,1.064,7008,88.11 +4282130,261.58,802.59,10444.6,8767.98,6664862,656.58,1678.12,85.72,91.7,102.2,1.092,7694,106.07 +4453911,283.14,904.57,11255.7,9422.33,6741400,758.83,1893.52,88.88,114.61,97.7,1.2,8027,137.32 +4548852,308.58,1000.69,12018.52,9751.44,6850024,878.26,2139.18,92.85,152.78,98.5,1.198,8549,188.14 +4962579,348.09,1121.13,13966.53,11349.47,7006896,923.67,2492.74,94.37,170.62,102.8,1.348,9566,219.91 +5029338,387.81,1248.29,14694,11467.35,7125979,978.21,2841.65,97.28,214.53,98.9,1.467,10473,271.91 +5070216,453.49,1370.68,13380.47,10671.78,7206229,1009.24,3203.96,103.07,202.18,97.6,1.56,11469,269.1 +5210706,533.55,1494.27,15002.59,11570.58,7251888,1175.17,3758.62,109.91,222.51,100.1,1.456,12360,300.55 +5407087,598.33,1677.77,16884.16,13120.83,7376720,1348.93,4450.55,117.15,249.01,101.7,1.424,14174,338.45 +5744550,665.32,1905.84,18287.24,14468.24,7505322,1519.16,5154.23,130.22,303.41,101.5,1.456,16394,408.86 +5994973,738.97,2199.14,19850.66,15444.93,7607220,1696.38,6081.86,128.51,356.99,102.3,1.438,17881,476.72 +6236312,877.07,2624.24,22469.22,18951.32,7734787,1863.34,7140.32,149.87,429.36,103.4,1.474,20058,838.99 +6529045,1005.37,3187.39,25316.72,20835.95,7841695,2105.54,8287.38,169.19,508.84,105.9,1.515,22114,843.14 +6791495,1118.03,3615.77,27609.59,22820.89,7946154,2659.85,9138.21,172.28,557.74,97.5,1.633,24190,1107.67 +7110695,1304.48,4476.38,30658.49,25011.61,8061370,3263.57,10748.28,188.57,664.06,103.2,1.638,29549,1399.16 +7431755,1700.87,5243.03,34438.08,28209.74,8145797,3412.21,12423.44,204.54,710.66,105.5,1.67,34214,1535.14 +7512997,1969.51,5977.27,38053.52,30490.44,8222969,3758.39,13551.21,213.76,760.49,103,1.825,37934,1579.68 +7599295,2110.78,6882.85,42049.14,33156.83,8323096,4454.55,15420.14,228.46,852.56,102.6,1.906,41972,2088.14 diff --git a/chapter13/data/data2.csv b/chapter13/data/data2.csv new file mode 100755 index 0000000..bb22b9c --- /dev/null +++ b/chapter13/data/data2.csv @@ -0,0 +1,16 @@ +x1,x2,x3,x4,x5,x6,y +93.18,21391758,7980207,6661555,0.373050546,0,288972 +115.6,24927434,8779835,7839516,0.352215756,0,350495 +114.13,28416511,9554676,8803979,0.336236774,0,443213 +141.49,32039616,10509450,9733195,0.328014231,0,526377 +180.52,37586166,13141254,11833760,0.349630074,0,581898 +233.14,44505503,15941538,14030973,0.358192514,4636933,528365 +268.07,51542283,18439550,16171817,0.357755787,5574275,816119 +313.85,60818614,22270093,18921556,0.36617232,5907373,967265 +355.91,71403223,26029310,22841850,0.364539707,6875421,1115007 +389.47,82873816,29724781,27953721,0.358675182,9328615,1287226 +392.82,91382135,31173422,31565720,0.341132564,11237237,1375085 +553.89,107482828,36449611,38835933,0.33912032,13541607,1594182 +596.94,124234390,41405926,45444614,0.333288762,15947698,1573830 +582.52,135512072,42641557,51685711,0.314669803,3837376,1758311 +560.89,154201434,47548175,59858717,0.308351056,4168317,2216017 diff --git a/chapter13/data/data3.csv b/chapter13/data/data3.csv new file mode 100755 index 0000000..326e601 --- /dev/null +++ b/chapter13/data/data3.csv @@ -0,0 +1,16 @@ +x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,y +12004,18678,1330484,11152545,2959027,2878473,1881388,2470523,1820957,349730,433360 +12549,19964,1436406,13767475,3555816,3250326,2199077,2561326,2081458,409725,479698 +13286,21057,1568267,16320762,3870207,3316894,2719058,3403870,2399208,522331,540075 +14122,23157,1603966,18895479,4263898,3457617,2690984,3733922,2659750,601220,613161 +14693,23839,1718007,21627825,4194806,3522168,3005475,4785787,2818533,680647,650119 +17585,27845,1939100,25453413,4770315,3712961,3384477,5459314,2636742,859141,793520 +20601,30782,2012633,29787941,5080846,3777003,4088545,6331382,2835312,853315,892678 +24801,33021,2145067,35118425,5567893,3783416,4767231,6870406,3069823,1020793,1027971 +29200,38949,2228495,41646681,7038031,5041090,8389925,7507109,3400549,1166412,1235374 +33114,42359,2553936,48903250,7634024,5398216,8431405,8754491,3920141,1516500,1279793 +36983,43921,2878166,55607710,8173449,5246903,11076649,10134050,4591935,1476434,1516049 +39696,47296,3573047,65574525,9836582,5727122,13991612,12805288,5927847,1694029,1777343 +45448,51107,4363837,76419207,13053605,8116313,15351387,15613171,6985632,1988868,1625593 +52697,58875,4564947,86167948,13704511,8626775,15796804,17417072,8086955,2332653,1747616 +59142,70815,4725256,99643373,15724289,9969708,20881374,21828895,8969756,2412402,1623520 diff --git a/chapter13/data/data4.csv b/chapter13/data/data4.csv new file mode 100755 index 0000000..049e3ee --- /dev/null +++ b/chapter13/data/data4.csv @@ -0,0 +1,13 @@ +x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,y +12113416,18895479,10092421,559.6,2075416,31.99,3733922,80922,1053156,2690984,236416 +14859261,21627825,11751668,554.5,3184744,29.87,4785787,167217,1154425,3005475,268360 +17880638,25453413,13489283,566.1,3981959,30.69,5459314,154958,1434440,3384477,326556 +20452183,29787941,15191582,575.2,4048305,31.63,6331382,186678,3621757,4088545,373397 +24415160,35118425,16963824,582.1,5388451,28.95,6870406,219390,4196301,4767231,455820 +28257805,41646681,18633437,599,7531147,24.88,7507109,376839,7068265,8389925,596693 +32278717,48903250,21055373,633.1,6930269,30.85,8754491,458096,17829885,8431405,756412 +34051588,55607710,26598516,612.8,7791165,23.16,10134050,485760,17019222,11076649,732282 +40022658,65574525,32635731,632.4,10312744,20.42,12805288,653736,26192835,13991612,935248 +45769763,76419207,34122005,664.7,9585263,22.55,15613171,668043,21639131,15351387,1061594 +47206504,86167948,37583868,677.3,8256048,20.9,17417072,703733,21396742,15796804,1075045 +52273431,99643373,44545508,680.7,11053751,19.7,21828895,877889,22659148,20881374,1155923 diff --git a/chapter13/data/data5.csv b/chapter13/data/data5.csv new file mode 100755 index 0000000..cfaba4a --- /dev/null +++ b/chapter13/data/data5.csv @@ -0,0 +1,15 @@ +x1,x2,x3,x4,x5,x6,x7,y +13967,19091,2239.86,24927434,10216241,1755512,2199077,185625 +14694,22141,2600.43,28416511,11122943,1997579,2719058,254892 +13380,25583,3132.8,32039616,12113416,2071574,2690984,159684 +15003,28237,3727.33,37586166,14859261,2236902,3005475,153080 +16884,31025,4256.82,44505503,17880638,2255380,3384477,167379 +18287,33853,5024.69,51542283,20452183,2351538,4088545,198017 +19851,36321,5562.36,60818614,24415160,2039164,4767231,231794 +22469,40187,5589.51,71403223,28257805,2190420,8389925,295316 +25317,45365,6867.29,82873816,32278717,2205292,8431405,353372 +27610,49215,7954.22,91382135,34051588,2284029,11076649,389824 +30658,54807,9069.26,107482828,40022658,2387940,13991612,472154 +34438,57473,10032.62,124234390,45769763,3102356,15351387,462098 +38054,63752,11310.69,135512072,47206504,3268488,15796804,439592 +42049,69692,12253.98,154201434,52273431,3245858,20881374,489777 diff --git a/chapter13/data/enterprise_income.xls b/chapter13/data/enterprise_income.xls new file mode 100755 index 0000000000000000000000000000000000000000..1d34d2f7527ce7aed85d6c74d4f5c9b8a123b367 GIT binary patch literal 5632 zcmeI0e@vBC7{{OY^6PTpUU^@yG|`aVnLo%_pdzlpaTG?T$G|0VR!ssINbqLjCLt>ft^;iqPKQ&#Ld+j5gd9}<#CA5sH=rxL?ag|ew_aM~LR(<5(Qxrf6S+|2P?5W&=K+!FVrdkaN*Z-31$5Gx6Q2SWfs}7@NSh5( zp?xyuv{({p7#%~O{xzHVu%k7ET;8&xrT>Bk1zsKCa6E)pvB8nlO4!h>QctP3XlWPO zv9qmoy+4lV8Z)?j6*p-AXXBvY+R#m&lZzhzFzk!Mr|+h!rpKkn`Rrz~L-p(bjwzUE zE%h(JnN_F`_rVSW-`d%WOG{TI-k~(IK<5vLs}flxv6#qW5{qOOQ&>z5f=GNCCw(=p z{p$G@-qI2tspo{KKjZ|f+?7bk5*i|Pm1m$RGSi(;f9=RFp6Q$~mbI{O;S2Nx`%C?_ zjz?gyjT*wcLkBNIgcR9k&m2jF~yisAR5}J{zQU4Ca|AwcNFKeq0Ib3E!hv(8o9cXm3rkpoY!63oGW>uG{ALHXc)E?+o(-wLt?uj-6QJ=geW z8M6u55+wp_lA;WuyAo}MR59q92^z0o*MguiRo8-{A@GJ40*zy&w}nDOrZu!MXq=Dr zHZwF%(Yh86jpM9q7HIrrX8(9zfBz2Bb7E6z#wf!29QhYa8l8Q9U9d*ceTz^(0+2?v z7^hKv_XWtNtaQkhv{p!y#|F7I!G?7*pH~vdXPZhn!tcFOAEeQ@ws9dEbxb=B{%69k z7Jkq0(TYahm6>2}s@MnVD2jq?IU8m0IW~cOwyBgW{M-4{;CXYS8mf^kcM9e@E&Lkc zw@=On-_bZ1%#}?iAiX_9A>EO7gU`_pz zwVna<&4yc$dF|26e>vLV^Zo_$*``u~@Xsf7ATsXC`DR3ZVFc!i!PdcB^g%suJNU_? z2(s^n12U;&1nj1tM;LrQ5rKTRsZ=QZk*mWms*Bk)aCE6mh-~T6@E*T6+3R*m4DylR!>V7C~08xsADU8u>2A z7iSrKYXHB-WFfYxR1JO*o&i?mBaM)t-#wn%=+Z4FSnNBq-rCgjpQ>}Qjn+(OIX0G%C-sq`(C58<z7uo@%MObga&>u`r_!rQsgzwrTBg?qJiq_?A9b<;`v0Z*e+L3i&M*J~ literal 0 HcmV?d00001 diff --git a/chapter13/data/enterprise_incomt.xls b/chapter13/data/enterprise_incomt.xls new file mode 100755 index 0000000000000000000000000000000000000000..1dece5e8699bf115d749599afb7179e9743cc5de GIT binary patch literal 5632 zcmeI0e@s(X6vxjiZ7Dxmc~4*yTx}`?bGs3T&3 zxOq^>L3Ep$-1PiMV_y_LeYaKB?QlB+c8l1d2F-uVU?kc=zC}2*3T?&xkO%|cwJ*L> zRkbSfF6B`ybpB$+S2I~;vB+jIiA4^JTozNKATlT7q_4$ozjomYZ`BgMQm+XKAvM7& z_ewnE5*j9bl?jwU7P|YW&q$rVqC z+{AMzRr)C+6LI%}kv=EM-znTIbGFE6Iyl+V&bTsy`eV@FdgX@*0oq@{A6bT zm>cZhVJZ-tN;5|h;&Ybu7&Q9nxs67RlJ8fezqlp}c3&osHeBq1Y%X#`w&t}#8ay_v z9fiG95UGaM$$hFTKA%|}RXB@nDisT>?^;8YMqk^;m^A8~{vBAgmCS0Nz^vX8X^KV{ zR~MqcZN&jdXGMaaWeBi7XsJjL7UwLS#Ws~ngwu42}$r2W z;kmj^VD(wMV0o?a4rFOZvY%xPu)19*lZD0m9nNB#N(+Q_VL~Uew{-PFi$=#6$AR0} z#4Oj799K%|hhXK5BFOuS@B@?H3nIl zwGymy94n1_(pk1-bzuG7%i1AZ5(&FmTASu)nFFk&t&^R?;H=itNq& zVNV?Vx0?{-(_I`_?nGww&P~SpeJ(eA*uT?&{`GMa{H*8ztGg&ELs)z#gtOSD(o$h* zWp-q*-dteCIb1m(F>XH0tn4&qHM~)S^%s0)18a9e8~T^`jrX%G0oJ1avUFkbeHO}^ zfw|185mszR1G3lmQtL2{im!fy7)SretSd6w+HA#Xv9;&HhwJ_G&@V`uiqYJ8&nL&q z{mT_Nbo~PO!0UTtg>Bm}#cE_Pn4%&7ZBE3s!)C+^uF)LJsoxG_P0ta&<2-lvpkH&s z?T;lk5R0QXYof%$H8`BbHkG`(xB2#X<(STl%iDyUlbZjp za}QtsjkNz~21=+7pH<|bXUT(KFRjJS54|OmNeN_z&(cs@;Qxg@cRuJ|s-;Ttqjo5l lhs?pVe1Ok>gbWU*=zqu!He;w`f14j1|4<==%=<_DKLExVwv+$> literal 0 HcmV?d00001 diff --git a/chapter13/data/personal_Income.xls b/chapter13/data/personal_Income.xls new file mode 100755 index 0000000000000000000000000000000000000000..26c8ff4e01ef75b47727a134a6c1335fc5c34d86 GIT binary patch literal 5632 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 mhxNh3#;y6;kFdt^D*AtSVrn*R^5Zj`nF literal 0 HcmV?d00001 diff --git a/chapter13/tmp/1-net.model b/chapter13/tmp/1-net.model new file mode 100755 index 0000000000000000000000000000000000000000..f42e82d344e7c7538951b13d6ff99475c9a16e16 GIT binary patch literal 13944 zcmeHNeM}Tb6rVj14hjll6-f(+wJDWwoOo7>-Yy?fX-X>b6WZFl0}nXFJHt_+DOD^9 z#kSB`sp20d*v4Sew4$|fH^_dbihO&st3eDc@=VKKQK(26Qx@`K#WqV~~Tyit4d3$Vj}q z*7>@t&hByUb@?<62}E(M$`|Mi%-s>t06PPW474x?<+6E=LiJ=n_10C^dK>ABupVtc zAVXPZiy8J}Rib|pmE)fr0geDifFr;W;0SO8I0762jsQo1Bft^h2+SP>w!XM|qd>Bf zkYBmR@^p{~hGHKT7*n!nGr2Jz~mQ@tdq(&7^p%u=d89cfe32Nq_X{O zF-z8}gP(sA_7XzXe%@?6gv#$`CsQlHpJu}*KF8caK%d_=G1IzP9uq8ubSd;9TMEuT zKKBSR52JLy6X2%|bXvFH>GP=%(>0%Y6i0*q++f>XP)H!oi`Ca(7;cc8W`VKC8tyONj(q{YV>{VOo$sYNirB%57VuqC0 zo{ZBoFXN=95wWdrJzl#mQ@p*yq~vdU)pp)|34h!D2hKqE@&2w0_@gs5xU@N4srvZ@ z?rxvm#iRwm#@UH!P@O&QmG9Hkt+xl*|>{DQo=cUVltH}SbA%fwX!C$V`T z2UpnbV&(n;{H5H9Ba;)vowie7cb+>e`q~5~Z8%#RJbG2!b>g0wU%yZie)wBV8N6#d zEA-=AQ6ir=Ty2bb>Z;it+r|UD!Cet07rl$z!BgGOd5fS_f~qZggOSeuL7O= zJ=K&-jT%?#Kn5n>Q=2Aj`%DPZdn*cFhd2|Ha-IJf1fcFlpBEdeuZt!1b%{t{9~5tr z*qt*MSsy{x2doef;%p)StRP3n2v*;-&rAionS7}H%TN{-g!_hW8s7b%BcQ)`(p{g_ zZ8ATCtQ@uD*^8K*k7G6fCZ2ow}A}C8GNLEu4RF57+mnelC_w z@?5Nj1Gj}>hj`lCg(i9gi{VoUu&1W8ie+R&Ox6Kn**;z9J* zgJKauK@d?8QN)5V=|NEh!Gl6i;#nvPTCf*&X5V|MJ26H}+6FTN*|+oe=FOM)W-?#q zqJPKE@Bk0z+@XnYO&`@O6JDDH# zR9Jd?&4ExfaLOEra%gzZT>2IY?WhkR7b9mTjgKO1kmKD|25m>MORjkTyb2oPkl0I! zVnINTck-vvQab{+IO0|0|2})Ozs^y-$3<}SG=k$z$9uUI?}KLecu#CP;6=Pw@%9w& zv@DS%JL`GiMa;fUo^(N1I27F^mL^Qu;!3l{71?=cC3K5pykv_%&pK!~grktywY`0h zg&7V@_`weX#$tRu?H}mw>mP(3G#_g{;6)8}p1Sm6%JZX@q*+OYfI>hapb$_9Cy)5Kssx1PTR#eS6z?Xq=TKe&r4Fbi@O=)`F!&)gXzF>p*^l+R1!L4NmYr z@($E)9P{653k8Av*g^ku5CNqzKtOZA%!&6U`YJQ;wz^gs)fP|7n8B9oZ24ITGr9QPmNj63KHG*U{RN4D%2j+L2Vn@cC5uR>|0_%Ezhh1JTwzO+l$q2q**; z0tx|zfI{FO5y(8Z!nu;}G0=IHq+klfZ;^jLr}_;rjhF_=Wu8;xP%%$WIJdIw_YmjF zE;VdnAVBwSWL|9geqA}gU*~4>{h%tti)T(BYg){jejouvah5r|Z1;eEf4}Zz9cUOq zMY;Hw@dju}=Z(zqRmuO1fPC(xRoRVxM02;_M$O;-I++K~)BU;@`F>qXJuyZ!qik^n z_tdS;jW?C~TiXBV94_Z)zApw1u#CO|$Yt(}Jy0=6PjTB&%$2O7byC;i!^z?#u|dTYcSDMiV3zqf}qK@eKl$0rQC(| z`a`@wg8dO_QKUZ%g#KxNi0Hord+%8d7!++01cUyxs6m!)G>&@O7x-+I|gh7 zDXXLL5ZO2VIAGC>2cPNg2BFFJnbK={17?0ecd7}2cz0*7TyGyOdI!;2iZf#2h@DK^ z{ktJ?cywqiF*-Do6pUy%9`RyP@|Jx3hZd%IRpUAc10q*s#0DWCqI)=T%1-qs6EE6n z&*~Nt*Fh;aFu*C?fhqebl?#1kKRqMj5rlm-PXO)~GaX7CK5i$EK)o<4GgbcK3<2*I z>;rfSjYFP12ywD=hiB)wol2zp$Lv&EKqTI*WN(ACPWBLTIdf?<#4OSWHQz(Gq3#)a zrBc5Cd@m}}l=PM+)q;SU?;LGY8;cR(JmR>I7mNQl$N8R-$t~JBnlC7J9?bVzFW*nv zLoW=DE+xFocP|$y-+5bNN`AJ8yi3}{?H2Qgh7##^OU}eAl>Mb~3$$%Z+$_yW_oZ#XTs#i;r z3XG>;R7|C2*lZ%130niO^<~crzy_fyb2&WY9Bf*+v?ctP^X7BEM2}s6CHDG*mh;<(!_Fsjr<`LG z)46MZUyc6x{F5E0uk>_GefqBZO<(rX%*9S;Pb8Q7^#h20{y@sT@OH=({@o!I3B zKOS>zxZU0RR*k#pd(`>jkDr`9<9=s*`{i6PHXdF0eRIduci-n`-fM8q&;2l6KXE?y zS*PFqYO*nQ|3^n-JLh-D%mdrpGHTDS1c)a&*wxl>YX9=O7)kk5me;7E}lhm zw>kpqxs#)d&-YRJ{26D#GAZYeS_fX4`*jiJeqE%6>qX`7*Wvy2a&=qI4_?2@ zFaLWuX(EI~2+z{*;UGzF4k>rvu+75x`)J>&w7=A~qCVqwbG+BHtQQ2-{lz55G88}T z=W5q?Lln21ziJ$_ADR{;pw@Q>9xj%vTt3fRR7rL7mCjcjmrR%cJ$c_mr1_Ud7qWxhrP;$soY*o&eC>!^>xiw5!|kYBmP zi$*pOrfYZO(ti1zI5XZsz1O}B!)0)7Tn za>7cct-%n9AJ2?T#4{tQw}GkN;5o;IFb@dr6GO3iDVm@lfwh#NW2Y z2b1wrR+?LVhWfRa={4ct;O+z^u9I~xUMsGX8=(&`*#q-<$g^~&q4@DpD|v!6QL`*k z*`Juf!-t4>LU=%nCa(9ADA;+L+ZnaSUUY;hVU!ZJf`ACI zBHrtGyl1VEw}vxI0ng%{$0Ec#9!n@;ogFmpl2)QCi1ne7c)BadX2Kn^_obrIXey2; zT;D*m=#zsuDHnIa?V{i5C6gs@z55RLaqM7v#8Lc1KuCt3r>XHb6RE5ihWp{?0d3mV z9&GO{vUs7ssG?pK0tx|zfI>hapb$_9Cy)5Lgok965A&zeZU}WFM{o zPlr5!Z<|===`BJcAJ-532=DT9{30BcN^*tc0h+GMBwinoUEaH(nu@cndTBZ zN8FIUlIw2Dn6jRJeGBKA2+>KvLjvysKIWstMdc_;I#54TpkT7jdh@H-D2cVz*=IFB}!?NXBpISvq~v+%t|P|)A|v0;Ve znJ+&v&mHP^W`6&})_+Zze{KHF_@_;a+}L^4`7Y7m9Ls!a^!4@{i{Jlb_@+7|>%Mjw z(?7Nu-9Nu?%>IoIbxCpR0} zZFBkOKKGl~r#qaM8+Yt)PPLhVI}`cr-y!F~z0v#%L8r_p1QY@a0fm4<;ITzu`Mp)# zD=}{g@2e=Qzo%Z(1xUg^0=E2~nnTqik>cJ;%I6_Il2xfm*9rodem9unR}!i$gyh;g=jf5^y{YRcvLjJ1n?lhC~q|8kROMHW)}N+(gZCmsR$ z-ihAU2!4bBU_L6|KclFqQeynbJn+io*M+70x^M^bMdkDBM1DFaSLvQ)-WI=mxPQ4` z{rB*;E+DM*JshqQ>FS1+%Qx%{3VQ=^Zd5v78pEPL@)^~wMvZ!05s=Rp9X65!|G|B& zHoxlwzs2~K{TSDwWGMnNzZ-j@R4>;Gao!j()%UAti^;>p5G;Mq(4<~PYA{mLDkPWqYSP3@$Q>pY z(Nq8Q2w0({&5ssC|EPbGR!YgAyB8@GTU!tcRwyl{(jV;~6{OfgvAa7nm%BaAYeQm! zw+r`XcV~8X_G4z>?YvEfTVAPLQL}=H5(uy|7LrwZJis#42tCv$eiv2@r0*iV=!1&E zDwyC^V}A(sn||o9aNz!Zt*wkpl76B%ETh28bm&ScArNkDZWHV6z(sFHdKLW)o9vJq zjk%rMS)?c4cQg|38;o|=3m)`0N?#OhOFaHVsX~8M{W{3Hc&rGI4YC0D?t#cLcepbe zIpW5o*0tQPgMx2>gQL4MqGYEK&bF28luGy`$adm90k)3M)E(*RccX{c2Ch~_s`$YS z0XYQfjLCq8F3AtFFzQ()_4K>Lkyz(ZcR0o&;vYz#rvISKoF8<+TIp}XC*27a24}(lm`fH z0W%YufKooL4f7);r{+scT-~Rbe;~P=*uK9N1s)SZ-#KKmhOfzBo8`(3AFLeVq7R2FZbTl~U zZzR34zn-%{8$0XGM9b3gAAYqrPFT+6%YUc#O@*DC<9~XG&(}NGzB%Jf?{4<|;eKcO z!{c`Q*Xx|f&~5LFf4+2Hd^_pf`s$W*;l#DnZ{@#u8I`w+T-tB za1!qGUd!n~>g@X;r!Sp)FI~}n(0={EwEgYW *5C+TE!C_VDg+LU$g1N)7{v)=bl zKJ6VlFy`F*qh|K{YM(RHl*L)kzMuzL7~-X1T+E~0gZr0 zpkxrpKexiUlI|_h{}H0|Kc^;402K)$oPSOoMb6R?IJdIG_YjxHEIsQoL4fYxsCluu z`*oH4eqA+F?*~1sO3=?CXl;TIt124?|x<=)GU1J^PiwfVbgZt@)^0pKo zw0^Zc|M%gf2@oPdJoDd&y~ueqq|klCCJW~8zRsERk&@>kTHNV@nJ(sVxGI3s~a!R{h?0iLjNp$}2lUWmxrZ0`q L%733M?fL3oa*BX; literal 0 HcmV?d00001 diff --git a/chapter13/tmp/data1_GM11.xls b/chapter13/tmp/data1_GM11.xls new file mode 100755 index 0000000000000000000000000000000000000000..e04bacd337fd4aac9e2e1ec2140d27ce56d4b47b GIT binary patch literal 5632 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 literal 0 HcmV?d00001 diff --git a/chapter13/tmp/data4_GM11.xls b/chapter13/tmp/data4_GM11.xls new file mode 100755 index 0000000000000000000000000000000000000000..742ec872e2efa068fc0e83fc69733df5dc47255f GIT binary patch literal 5632 zcmeI0e{54#6vxl&+OFN!viBHM29~BwemRkCFd&At8*z(}EjV#ZVul+GWFs9cKxBXL z8#P--$V`?fs9`PyW5UEg03!s!pBV}|{~#ew2Qwr{fQT@D$f)1%?HlPTnKLFtO>fil z?m73q&pGehd(Ynb?J2!`_x`lA64i1gPVR=BVvn$E=sWxMWWjhSM796wKp&=9`wwNn z>A*tTZSt|}>v*mu*ZZtk>k9EHs{WK+0 zaOmJ;+`JKHr(lbkvsI0bgP&~GzW0xh=ubd@+r?)NdA9ZVC!)Wv@N9j`zSI8Q;zLT7 zzz08DBty&4-h6}YBY*!@Ly_Q9btxGxF_Fc^VL_2ZOTaU!rVW!m^(30;$`IBp(D?je zEe;x~Va*B+`8G8hH0CHgW`}0Gr^Q2K84iy*ps_NCH77LYnGw-bWJE_KU)gk-Ge+=4 zzOo*RAwNF7$!bXI-DT)6u8xB}l*!SC^F5Hwg#pOc+%`x{(2Y!y%&4QuwCPf;$h}t@ z;tcu1J;7#3=j?AluBjxseKN_HN2Y6roL^Ib{`QpzA$=9eCYc$CCex-%i6Y-Fn~i8& znsmD%?vm;7(zu%B8&8njF|7z>U(*8g*EXMoth+qiBr}`QWZHBoRpj!bZjwi*#T!yT z;~kJc-Ar<=%Ep=6%^>%>x?p*w@fKuhN2*EY%0!cC(`BI|pPSr?JS<(a$YIFw#fk9J z*hI4bamJih`Yy;hV+8W<4IgAy=O~lRRgNaprc1dZ=NvkWJS@F%$%*Hky9(rToNPmS z#!O> z?M1)(M8G5`-iJ(^E_LCk^74@3tb)cAM0Mpl$a8%pzwagaxNAJ}kale($i~FaKyG;} z&m)Ir&&e3BJ;S`^K8}aWPPx1*5$?NA&1v5)q23f!1HoO!!6_{k# zpUCM#n=bW=%#$9jhmq1Maj4@i)G0%Lf8?i}S4*B#3LBti#F=y`_px>(31L z(okCe?}ePZ0N(4QMk-YtHAA_5z#P1y-1E;k1`H0Sg#V)(Y{pQ>{^~HN zi~tkq_ubq!~wZYn8To0(uYC`{KJYJv|u?M(j4fOGPm`W3pA9p|8-oCZ! zGWkB%yN z$GKVUi}3Xc`6LXeL%&2hOZ!Onk+o=Y1ANp6v2i7+A5JO2<7}43H3H6gNRM6RVXl_?-}D z9vbn}PaYpb(5_BTIHRDu zkkI_fbERAf`@UyRBbQzxp?+DMkTVBCG!s!J3^ocOggb*=jdgWdJeMUOl5ptD5@!yw z@3`Y2nu%^D`1cE;^YstPnUP)HTopY#rnxFc&XqcZygv}ixep4VM+tJ3*?UK#_rmb_ z+0Vx|$%pJ7v*%H+nu+ayO37DB4YPAx21Bhl$0VmIOGO|Rfm8%i5lBVgpNfDyeag*7 zo&e<;&VDk3{CCv%I#>8EL*DPC?Ee{oMs)GB6+zsN2!Es4#>^*g#qb&N$jDks#^Ub_ zrSE!<9>pfK={z