本文是基于《Python数据分析与挖掘实战》的实战部分的第13章的数据——《财政收入影响因素分析及预测模型》做的分析。

旨在补充原文中的细节代码,并给出文中涉及到的内容的完整代码。

在作者所给代码的基础上增加的内容包括:

1)探索了灰色预测的原理

2)画出预测结果图

3)由于书中使用的是AdaptiveLasso,但是没有找到该函数,所以采用了其他变量选择模型

1 挖掘背景及目标

根据1994-2013年相关财政数据 ,梳理影响地方财政收入的关键特征,对未来几年的财政数据进行预测。

实质:回归

2 数据探索

# 概括性分析描述性统计
r = [data.min(), data.max(), data.mean(), data.std()] #统计最小、最大、平均、标准差
r = pd.DataFrame(r, index= ['Min', 'Max', 'Mean', 'Std']).T #计算相关系数矩阵
result = np.round(r, 2) # 保留两位小数  (***)
# np.round(data.describe().T[['min', 'max', 'mean', 'std']],2) # 等价于上面数据探索
#保存的表名命名格式为“1_k此表功能名称”,是此小节生成的第1张表格,功能为summaryMeasure:概括性分析描述性统计
result.to_excel('1_1summaryMeasure.xlsx')
result

# 计算各个变量之间的皮尔森系数'pearson'/ 'kendall'/ 'spearman'
result1 = np.round(data.corr(method='pearson'), 2)
#保存的表名命名格式为“1_k此表功能名称”,是此小节生成的第2张表格,功能为relatedAnalysis:相关性分析
result1.to_csv("1_2relatedAnalysis.csv")
result1

2 数据预处理——数据规约

2.1 降维

from sklearn.linear_model import Lasso# AdaptiveLasso找不到
# LASSO回归的特点是在拟合广义线性模型的同时进行变量筛选和复杂度调整。 因此,不论目标因变量是连续的,还是二元或者多元离散的,
#都可以用LASSO回归建模然后预测。 这里的变量筛选是指不把所有的变量都放入模型中进行拟合,而是有选择的把变量放入模型从而得到更好的性能参数。
model = Lasso(alpha = 0.1)
model.fit(data.iloc[:,:13], data['y']) # data.iloc[:, 0:13]
print model.coef_ # 各个特征权重weight
print model.intercept_ # 输出偏置bias

输出结果:

[ -1.88512448e-04 -2.68436321e-01 4.45960813e-01 -3.24264041e-02
7.25657667e-02 4.52109484e-04 2.28596158e-01 -4.51460904e-02
-3.10503208e+00 6.19423002e-01 4.80398130e+00 -9.79664624e+01
-3.86933684e-02]
-2650.99589437

3 模型构建

由于有多个指标需要预测建模,但是各自又有雷同之处,所以,此处以“某市财政收入预测模型” 为例

3.1 灰色预测

此处利用灰色预测,预测出2014-2015年的各个变量的数据,为接下来建模准备

# 灰色预测:灰色预测是一种对含有不确定因素的系统进行预测的方法,灰色预测通过鉴别系统因素之间发展趋势的相异程度,即进行关联分析,并对原始数据进行生成处理来寻找系统变动的规律,生成有较强规律性的数据序列,然后建立相应的微分方程模型,从而预测事物未来发展趋势的状况。
# 其用等时距观测到的反应预测对象特征的一系列数量值构造灰色预测模型,预测未来某一时刻的特征量,或达到某一特征量的时间。
# 灰色理论建立的是生成数据模型,不是原始数据模型
# 数据生成方式:A:累加生成:通过数列间各时刻数据的依个累加得到新的数据与数列。累加前数列为原始数列,累加后为生成数列。B:累减生成 C:其他

# 优势:是处理小样本数据预测问题的有效工具

# 灰色预测函数
def GM11(x0): #自定义灰色预测函数  #该函数覆盖了导入的包的同名函数import numpy as npx1 = x0.cumsum() #1-AGO序列z1 = (x1[:len(x1)-1] + x1[1:])/2.0 #紧邻均值(MEAN)生成序列 # 由常微分方程可知,取前后两个时刻的值的平均值代替更为合理# x0[1] = -1/2.0*(x1[1] + x1[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) #计算参数
#     fkplusone = (x1[0]-b/a)*np.exp(-a*k)#时间响应方程 # 由于x0[0] = x1[0]f = lambda k: (x1[0]-b/a)*np.exp(-a*(k-1))-(x1[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)return f, a, b, x0[0], C, P #返回灰色预测函数、a、b、首项、方差比、小残差概率
data.loc[2014] = None
data.loc[2015] = None
h = ['x1', 'x2', 'x3', 'x4', 'x5', 'x7']
P = []
C = []
for i in h:gm = GM11(data[i][range(1994, 2014)].as_matrix())f = gm[0] ##获得灰色预测函数P = gm[-1] # 获得小残差概率C = gm[-2] # 获得后验比差值data[i][2014] = f(len(data)-1)data[i][2015] = f(len(data))data[i] = data[i].round(2) # 保留2位小数if (C < 0.35 and P > 0.95): # 评测后验差判别print '对于模型%s,该模型精度为---好' % ielif (C < 0.5 and P > 0.8):print '对于模型%s,该模型精度为---合格' % ielif (C < 0.65 and P > 0.7):print '对于模型%s,该模型精度为---勉强合格' % ielse:print '对于模型%s,该模型精度为---不合格' % i

输出结果为:

对于模型x1,该模型精度为---好
对于模型x2,该模型精度为---好
对于模型x3,该模型精度为---好
对于模型x4,该模型精度为---好
对于模型x5,该模型精度为---好
对于模型x7,该模型精度为---好
#保存的表名命名格式为“2_1_2_1k此表功能名称”,是此小节生成的第1张表格,功能为greyPredict:灰色预测
data[h+['y']].to_excel('2_1_2_1greyPredict.xlsx')
data

3.2 神经网络

inputfile1 = '2_2_2_1greyPredict.xlsx'
data = pd.read_excel(inputfile1)
data # 1994到2013年间的各个影响因素的数据
feature = ['x1', 'x3',  'x5'] # 特征所在列# 准备模型数据
data_train = data.loc[range(1999,2014)].copy() # 取2014年前的数据建模
data_mean = data_train.mean()
data_std = data_train.std()
data_train = (data_train-data_mean)/data_std # 均值标准化
x_train = data_train[feature].as_matrix() # 特征数据
y_train = data_train['y'].as_matrix() # 标签数据
# 利用神经网络建模
from keras.models import Sequential
from keras.layers.core import Dense, Activation
import time
start = time.clock()#输入层为3个节点,隐藏层6个节点
model = Sequential() # 建立模型
model.add(Dense(output_dim =6, input_dim=3)) # 添加输入层、隐藏层节点
model.add(Activation('relu')) # 使用relu作为激活函数,可以大幅度提高准确率
model.add(Dense(units=1, input_dim=6)) # 添加输出层节点
model.compile(loss = 'mean_squared_error', optimizer = 'adam') # 编译模型
model.fit(x_train, y_train, nb_epoch = 3000, batch_size=16) #训练模型,学习一千次
end = time.clock()
usetime = end-start
print '训练该模型耗时'+ str(usetime) +'s!'
model.save_weights('2_net.model') # 将该模型存储
# 预测并还原结果
x = ((data[feature] - data_mean[feature])/data_std[feature]).as_matrix()
data[u'y_pred'] = model.predict(x) * data_std['y'] + data_mean['y']
#保存的表名命名格式为“2_2_3_1k此表功能名称”,是此小节生成的第1张表格,功能为revenue:增值税预测结果
data.to_excel('2_2_3_1zengzhi.xlsx')import matplotlib.pyplot as plt # 画出预测结果图
plt.rc('figure',figsize=(7,7))
p = data[['y','y_pred']].plot(subplots = True, style=['b-o', 'r-*'])
plt.savefig('zengzhi.jpg')
plt.show()

data

备注,本章节完整代码请见:点击打开链接

《Python数据分析与挖掘实战》第13章——回归+DNN相关推荐

  1. python数据分析与挖掘实战-第六章拓展偷漏税用户识别

    第六章分别使用了LM神经网络和CART 决策树构建了 电力窃漏电用户自动识别模型,章末提出了拓展思考–偷漏税用户识别. 第六章及拓展思考完整代码 https://github.com/dengsiyi ...

  2. Python数据分析与挖掘实战——第三章

    第三章 数据探索 目录 第三章 数据探索 一.数据探索 二.数据质量分析 1. 主要任务: 2. 缺失值分析 3. 异常值分析 4. 一致性分析 三.数据特征分析 1. 分布分析 2. 对比分析 3. ...

  3. 《Python数据分析与挖掘实战》一第1章 数据挖掘基础1.1 某知名连锁餐饮企业的困惑...

    本节书摘来自华章出版社<Python数据分析与挖掘实战>一书中的第1章,第1.1节,作者 张良均 王路 谭立云 苏剑林,更多章节内容可以访问云栖社区"华章计算机"公众号 ...

  4. 《Python数据分析与挖掘实战》第10章(下)——DNN2 筛选得“候选洗浴事件”3 构建模型

    本文是基于<Python数据分析与挖掘实战>的实战部分的第10章的数据--<家用电器用户行为分析与事件识别> 做的分析. 接着前一篇文章的内容,本篇博文重点是处理用水事件中的属 ...

  5. 《Python数据分析与挖掘实战》第11章——应用系统负载分析与磁盘容量预测(时间序列)

    文章目录 1.背景与目标分析 2.2 数据探索 2.1 查看数据信息 2.2 数据平稳性分析 3 数据预处理 3.1 数据清洗 3.2 数据变换--属性构造 4 模型构建 4.1 确定模型-- ARM ...

  6. 《Python数据分析与挖掘实战》第7章-聚类+绘制雷达图

    本文是基于<Python数据分析与挖掘实战>的第七章的数据--<航空公司客户价值分析>做的分析对部分代码,做出补充,对原文中的雷达图进行了实现. 1. 背景与目标分析 此项目旨 ...

  7. 《Python数据分析与挖掘实战》第14章——基于基站定位数据的商圈分析(层次聚类)

    本文是基于<Python数据分析与挖掘实战>的实战第14章<基于基站定位数据的商圈分析>做的分析. 1 挖掘背景及目标 从某通信运营商提供的特定接口解析得到用户的定位数据.利用 ...

  8. 《Python数据分析与挖掘实战》第12章(中)——协同推荐

    本文是基于<Python数据分析与挖掘实战>的实战部分的第12章的数据--<电子商务网站用户行为分析及服务推荐>做的分析. 由于此章内容很多,因此,分为三个部分进行分享--数据 ...

  9. 《Python数据分析与挖掘实战》第7章——航空公司客户价值分析(kmeans)

    本文是基于<Python数据分析与挖掘实战>的实战部分的第七章的数据--<航空公司客户价值分析>做的分析. 旨在补充原文中的细节代码,并给出文中涉及到的内容的完整代码. 1)在 ...

  10. 《Python数据分析与挖掘实战》第15章 ——电商产品评论数据情感分析(LED)

    文章目录 1.挖掘背景与目标 2.2 数据探索与预处理 2.1 数据筛选 2.2 数据去重 2.3 删除前缀评分 2.4 jieba分词 3 基于LDA 模型的主题分析 4.权重 5.如何在主题空间比 ...

最新文章

  1. 4月份阿里云ECS和VPC升级公告
  2. Trinity 1.1 发布,Linux 桌面环境
  3. SAP ABAP实用技巧介绍系列之 快速找出function module的帮助文档
  4. 10-4 5-4 查询至少生产三种不同速度PC的厂商 (20 分)
  5. 【codeforces 749E】 Inversions After Shuffle
  6. Unity UGUI实现鼠标拖动图片
  7. @程序员,物联网软件开发不得不克服的七大挑战
  8. 思科 GNS3 配置 NAT 端口映射
  9. h5直接分享的实现方案
  10. 学习C++项目——一个基于C++11简单易用的轻量级网络编程框架 1
  11. 欧拉角到方向余弦矩阵
  12. 第17期基于SSM爱家房屋租赁管理系统
  13. GC暂停时间过长——未关闭Swap
  14. 朗迪碳酸钙D3颗粒告诉你,为什么补钙要从娃娃抓起
  15. 2022年8月止,国外最佳游戏榜出炉
  16. android 项目编译略过jni目录,在 flutter 上使用 c 代码 - (二) 无源码的项目
  17. 一篇运维老司机的大数据平台监控宝典(1)-联通大数据集群平台监控体系进程详解
  18. java如何将网页表格导出为excel
  19. 【算法练习】蓝桥杯训练一:区间k大数查询、最大最小公倍数、k好数
  20. HP EVA系列存储raid结构原理研究

热门文章

  1. Windows C编程中Win7隐藏任务栏图标方法
  2. C语言程序设计第四次作业-选择结构(2)
  3. python代码复制运行不了_pycharm 复制代码出现空格的解决方式
  4. Unbuntu22.04安装教程以及Unbuntu下C++环境的配置
  5. html表单站内搜,网站集成百度、Bing必应搜索引擎,在网页中实现站内全文搜索...
  6. Windows系统查看电脑系统信息(操作系统与版本、系统型号、处理器具体型号、BIOS版本、BIOS模式、主板信息等等)
  7. ABAP 日期格式转换(将XXXX-XX-XX或XXXX/XX/XX或XXXX.XX.XX转换XXXXXXXX格式)
  8. java项目笔记 - 第18章:坦克大战2.1
  9. Oracle Spatial详解
  10. 《阿凡达》《泰坦尼克号》