财政收入影响因素分析及预测模型——数据可视化部分及灰色预测、神经网络部分

参考博客:https://www.baidu.com/link?url=4MILI0qDOzidoShN_T6EJDdqoenGahXHn6dG3F3IqCgLAEg7o3Z3psR0jkHf5GcSGQ4No0ILEL2uHnKqvfcj6imTK3VmAUiOFX4a7SWrgqu&wd=&eqid=e3abd04100018371000000065ceb5266

运行环境:pycharm+python3.6

一、可视化代码部分:

#-*- coding: utf-8 -*-
import pandas as pd
from matplotlib import pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
inputfile = '../data/data1.csv' #输入的数据文件
data = pd.read_csv(inputfile) #读取数据
dataNM=(data-data.min())/(data.max()-data.min())
dataNM.plot()
plt.show()

结果:

不归一化的处理代码:

#-*- coding: utf-8 -*-
import pandas as pd
from matplotlib import pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
inputfile = r'D:/2.csv' #输入的数据文件
data = pd.read_csv(inputfile) #读取数据
# 画图
data.plot()

处理结果:

这里由于是扫参形式,频率点会出现往复,如蓝色线所示,先由小增大,再由小增大。在这个过程中,其他变量也在改变,整体来看,这个图比较的混乱,看不出明显的线性相关关系。

若归一化,结果如下:

二、灰色预测部分

#-*- coding: utf-8 -*-
import numpy as np
import pandas as pd
from GM11 import GM11 #引入自己编写的灰色预测函数

inputfile = '../data/data1.csv' #输入的数据文件
outputfile = '../tmp/data1_GM11.xls' #灰色预测后保存的路径
data = pd.read_csv(inputfile) #读取数据
data.index = range(1994, 2014)

data.loc[2014] = None
data.loc[2015] = None
l = ['x1', 'x2', 'x3', 'x4', 'x5', 'x7']
# a = list(range(1994, 2014))
# print(a)
for i in l:
  f = GM11(data[i][list(range(1994, 2014))].values)[0]
  data[i][2014] = f(len(data)-1) #2014年预测结果
  data[i][2015] = f(len(data)) #2015年预测结果
  data[i] = data[i].round(2) #保留两位小数

data[l+['y']].to_excel(outputfile) #结果输出

这里主要修改了两个地方、同一行,即for循环的第一句部分。

灰色预测结果如下:

 

三、神经网络部分

#-*- coding: utf-8 -*-
import pandas as pd
inputfile = '../tmp/data1_GM11.xls' #灰色预测后保存的路径
outputfile = '../data/revenue.xls' #神经网络预测后保存的结果
modelfile = '../tmp/1-net.model' #模型保存路径
data = pd.read_excel(inputfile) #读取数据
feature = ['x1', 'x2', 'x3', 'x4', 'x5', 'x7'] #特征所在列

data_train = data.loc[range(1994,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() #特征数据
x_train = data_train[feature].values
# y_train = data_train['y'].as_matrix() #标签数据
y_train = data_train['y'].values

from keras.models import Sequential
from keras.layers.core import Dense, Activation

model = Sequential() #建立模型
# model.add(Dense(6, 12))
model.add(Dense(input_dim=6, output_dim=12))
model.add(Activation('relu')) #用relu函数作为激活函数,能够大幅提供准确度
# model.add(Dense(12, 1))
model.add(Dense(input_dim=12, output_dim=1))
model.compile(loss='mean_squared_error', optimizer='adam') #编译模型
model.fit(x_train, y_train, nb_epoch = 10000, batch_size = 16) #训练模型,学习一万次
model.save_weights(modelfile) #保存模型参数

#预测,并还原结果。
# x = ((data[feature] - data_mean[feature])/data_std[feature]).as_matrix()
x = ((data[feature] - data_mean[feature])/data_std[feature]).values
data[u'y_pred'] = model.predict(x) * data_std['y'] + data_mean['y']
data.to_excel(outputfile)

import matplotlib.pyplot as plt #画出预测结果图
p = data[['y','y_pred']].plot(subplots = True, style=['b-o','r-*'])
plt.show()

这里,修改主要为两种,多处。1、model.add(Dense(input_dim=6, output_dim=12))  2、全部改为.values 。这样运行就不会报错了。

注意:这里有一点需要说明,在前面用adaptive-lasso方法(尽管说3.6版本中sklearn中已经取消这个函数的实现,用lasso方法的话,选出来的有12个特征),这里不管选出来的有几个特征,都只是辅助后面神经网络的构建的,具体后面神经网络构建时选取任意几个作为特征,都能得到输出,比如,这里的代码,选择了6个特征,但若没有用adaptive-lasso方法,只能选出12个特征。

subplots = False即可将y与y_pred画在同一图上。

运行结果如下(多次运行,每次结果会稍有不同):

  • 3
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
数据可视化是一种将数据转换为图表、图形和图像等可视化形式的技术,在数据分析和数据展示中非常常见。下面是数据可视化的实验步骤: 1. 准备数据。首先需要准备要展示的数据,并确定需要展示哪些方面的信息。数据可以来自不同的数据源,如数据库、文件或API等。 2. 选择可视化工具。根据要展示的数据和展示需求,选择适合的可视化工具。常见的可视化工具包括Tableau、Power BI、matplotlib、D3.js等。 3. 设计可视化方案。根据要展示的数据和展示需求,设计合适的可视化方案。这包括选择合适的图表类型、颜色和字体等,以及确定展示的细节和交互方式。 4. 编写代码。根据设计的可视化方案,使用合适的编程语言和可视化工具编写代码。在编写代码时,需要注意代码的可读性和可维护性,以便后续修改和优化。 5. 运行测试。使用准备好的数据,运行可视化代码进行测试。测试时需要注意记录每个测试的输入数据和输出结果,以便后续分析和比较。 6. 优化可视化效果。根据测试结果和用户反馈,优化可视化效果和交互体验,以便用户更好地理解和分析数据。 下面是一个使用Python和matplotlib实现简单折线图的phony代码示例: ```python import matplotlib.pyplot as plt # 准备数据 x = [1, 2, 3, 4, 5] y = [2, 4, 6, 8, 10] # 绘制折线图 plt.plot(x, y) # 添加标题和标签 plt.title("Sample Line Chart") plt.xlabel("X-axis") plt.ylabel("Y-axis") # 显示图表 plt.show() ``` 这段代码使用了matplotlib库绘制了一个简单的折线图,其中x和y分别表示横坐标和纵坐标的数据。通过调用plot()函数和添加标题、标签等信息,最后使用show()函数显示图表。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值