您的当前位置:首页正文

数据可视化实验报告之财经数据可视化

2023-08-06 来源:易榕旅网
实验五 财经数据可视化 小组成员: 一、实验目的 1. 熟悉Tushare的使用; 2. 熟悉pandas的使用; 3. 熟悉财经数据分析可视化过程。 二、实验要求 1. 学生提前分析实验目标要求; 2. 由小组成员集体完成实验,成员分块写实验报告,代码后写注释。 三、实验内容及步骤 代码 import pandas as pd import matplotlib.pyplot as plt import tushare as ts import matplotlib as mpl mpl.rcParams['font.sans-serif']=['SimHei'] #指定默认字体 SimHei为黑体 CPI=ts.get_cpi() #获取cpi数据 print(CPI.head()) #输出CPI前5行 CPI=CPI.sort_values('month') #month升序 CPI['cpi']=CPI['cpi']-100 #计算百分比 CPI.to_csv(\"C:/Users/asus/Desktop/财经数据/cpi.csv\") #保存为csv格式文件 df=pd.read_csv(\"C:/Users/asus/Desktop/财经数据/cpi.csv\")#读取csv文件 plt.figure(figsize=(12,10)) #设置绘图区大小为高12宽10 plt.plot(df[\"month\"],df[\"cpi\"],linewidth=1) #画图,x为month集,y为cpi集,线宽1 plt.axis('tight') #设置轴坐标为紧凑型 plt.title('CPI月度同比') plt.xlabel('年度') plt.ylabel('百分比') #设置x,y轴标题 plt.show() 过程图片 CPI前五项: 结果: 分析 从上图中可以清晰地看出,93、94、95、96年左右出现了较高的通货膨胀,而在07年左右也出现了大于5%的通货膨胀。当CPI升幅过大的时候,表明居民生活成本较之以前变高,如果收入没有增加那么相对于社会环境来说收入实际是降低了。 代码 import pandas as pd import matplotlib.pyplot as plt import tushare as ts import matplotlib as mpl mpl.rcParams['font.sans-serif']=['SimHei'] #指定默认字体 SimHei为黑体 money_supply=ts.get_money_supply()#获取货币供应量数据 print(money_supply.head()) #输出money_supply前5行 money_supply=money_supply.sort_values('month').iloc[228:,:]

money_supply.to_csv(\"C:/Users/asus/Desktop/财经数据/money supply.csv\")

#按month升序,取出连续不缺失的观测值,保存为csv格式文件 date=pd.date_range('1997-1-1',periods=len(money_supply),freq='M')

#用date重新定义时间,从1997.1.1开始到money_supply时间段内,按月的频率 df=pd.read_csv(\"C:/Users/asus/Desktop/财经数据/money supply.csv\") #读取csv文件 df.index=date #设置下标时间 df=df.iloc[:,2:8] #取出2-7列所有数据(拿所需数据) df.rename(columns={'m2_yoy':'M2增长率','m1_yoy':'M1增长率', 'm0_yoy': 'M0增长率'},inplace=True)

#更改对应列的列名称 df.head()

print(df.head()) #输出money_supply前5行 df[[\"M2增长率\",\"M1增长率\"]].plot(figsize=(12,6)) #绘制曲线图 plt.title('M2和M1月度同比增长百分比',size=16)#设置标签 plt.xlabel('时间',size=14) plt.ylabel('百分比',size=14)

#设置x,y轴标题 #设置图注,xy=(横坐标,纵坐标),为箭头尖端; # xytext=(横坐标,纵坐标),为文字的坐标,指的是最左边的坐标 #arrowprops设置图注颜色大小 plt.annotate('亚洲金融危机',size=13,xy=('1997-7-1',24),xytext=('1998-1-1',27),

arrowprops=dict(facecolor='black',shrink=0.05),)

plt.annotate('美国次贷危机',size=13,xy=('2007-8-1',20),xytext=('2008-1-1',24),

arrowprops=dict(facecolor='red',shrink=0.05),)

plt.annotate('四亿万刺激计划',size=13,xy=('2009-1-1',30),xytext=('2010-1-1',32),

arrowprops=dict(facecolor='orange',shrink=0.05),)

plt.annotate('金融去杠杆',size=13,xy=('2016-8-1',12),xytext=('2017-1-1',15), arrowprops=dict(facecolor='blue',shrink=0.05),) plt.grid() #网格线 plt.show()

过程图片 未筛选的初始数据前五项 筛选、处理后的数据前五项 结果图 分析 从上图可以发现,出现金融危机、美国次贷危机的时候明显M1、M2的同比增长率明显进行了下降,而我国推行的“四万亿刺激计划”使M2和M1的增长率达到峰值,2016-2017年以来,金融去杠杆后M1、M2一直处于下降的状态,而较于M2而言,M1的波动一直大于M2。 代码

import pandas as pd

import matplotlib.pyplot as plt import tushare as ts

import matplotlib as mpl

mpl.rcParams['font.sans-serif']=['SimHei'] #指定默认字体 SimHei为黑体 #分别获取M1,M2,GDP的数据,按年的升序排列,并保存为csv文件 money_supply_year=ts.get_money_supply_bal()

money_supply_year=money_supply_year.sort_values('year') money_supply_year.to_csv(\"C:/Users/asus/Desktop/财经数据/money_supply_year.csv\")

GDP=ts.get_gdp_year()

GDP=GDP.sort_values('year')

GDP.to_csv(\"C:/Users/asus/Desktop/财经数据/GDP.csv\")

#读取csv文件的数据 df1=pd.read_csv(\"C:/Users/asus/Desktop/财经数据/money_supply_year.csv\") dateparse=lambda dates:pd.datetime.strptime(dates,'%Y') #重新设定日期格式 #将year作为数据框架的index导入 df1=pd.read_csv(\"C:/Users/asus/Desktop/财经数据/money_supply_year.csv\",parse_dates=

['year'],index_col=['year'],date_parser=dateparse) df2=pd.read_csv(\"C:/Users/asus/Desktop/财经数据/GDP.csv\",parse_dates= ['year'],index_col=['year'],date_parser=dateparse)

#parse_dates为解析指定行为date类型;index_col为指定某列为行索引; #date_parser:指定将输入的字符串转换为可变的时间数据 df2=df2[38:]

df=pd.DataFrame()

df[\"M2/GDP\"]=df1[\"m2\"]/df2[\"gdp\"] #计算M2/GDP的比率 df[\"M1/GDP\"]=df1[\"m1\"]/df2[\"gdp\"] #计算M1/GDP的比率 df[[\"M2/GDP\",\"M1/GDP\"]].plot(figsize=(12,6)) #绘制曲线 plt.title('M2/GDP与M1/GDP的历年走势',size=16) plt.xlabel('时间',size=14) plt.ylabel('M2/GDP',size=14)

#设置x,y轴标题 #设置图注,xy=(横坐标,纵坐标),为箭头尖端; # xytext=(横坐标,纵坐标),为文字的坐标,指的是最左边的坐标 #arrowprops设置图注颜色大小 plt.annotate('亚洲金融危机',size=13,xy=('1997-7-1',1.2),xytext=('1998-1-1',1.3),

arrowprops=dict(facecolor='black',shrink=0.05),)

plt.annotate('美国次贷危机',size=13,xy=('2007-8-1',1.5),xytext=('2008-1-1',1.6),

arrowprops=dict(facecolor='red',shrink=0.05),)

plt.annotate('四亿万刺激计划',size=13,xy=('2009-1-1',1.8),xytext=('2010-1-1',1.9),

arrowprops=dict(facecolor='orange',shrink=0.05),)

plt.annotate('金融去杠杆',size=13,xy=('2016-8-1',2.05),xytext=('2017-1-1',1.9),

arrowprops=dict(facecolor='blue',shrink=0.05),) plt.grid() #网格线 plt.show() 过程图片

分析

从上图不难看出,M2/GDP总体上是曲折上升的,而M1/GDP总体上升较为缓慢,M2/GDP从1990年的不到90%到2017年的接近220%。2017年以来,尽管经济增长一直处于下行空间,但在金融去杠杆的影响下,广义货币供应量持续下滑,导致M2/GDP出现下降趋势。如此看来GDP的增长率是快于M1,M2的,而且M2快于M1。 代码

import pandas as pd

import matplotlib.pyplot as plt import tushare as ts

import matplotlib as mpl

mpl.rcParams['font.sans-serif']=['SimHei'] #指定默认字体 SimHei为黑体 #获取消费、投资、净出口率,按年的升序排列,并保存为csv文件 gdp_for=ts.get_gdp_for() gdp_for.head()

gdp_for=gdp_for.sort_values('year')

gdp_for.to_csv(\"C:/Users/asus/Desktop/财经数据/gdp_for.csv\")

dateparse=lambda dates:pd.datetime.strptime(dates,'%Y') #重新设定日期格式 df=pd.read_csv(\"C:/Users/asus/Desktop/财经数据/gdp_for.csv\",parse_dates= ['year'], index_col='year', date_parser=dateparse) #读取csv文件 df.rename(columns={'end_for':'消费贡献率','asset_for':'投资贡献率', 'goods_for': '净出口贡献率'},inplace=True)

#更改对应列的列名称 df[[\"消费贡献率\",\"投资贡献率\",\"净出口贡献率\"]].plot(figsize=(12,6)) #绘制曲线图 plt.title('M2和M1月度同比增长百分比',size=16) #设置标签 plt.xlabel('时间',size=14) plt.ylabel('百分比',size=14)

#设置x,y轴标题 #设置图注,xy=(横坐标,纵坐标),为箭头尖端; # xytext=(横坐标,纵坐标),为文字的坐标,指的是最左边的坐标 #arrowprops设置图注颜色大小 plt.annotate('亚洲金融危机',size=13,xy=('1997-7-1',30),xytext=('1998-1-1',34),

arrowprops=dict(facecolor='black',shrink=0.05),)

plt.annotate('美国次贷危机',size=13,xy=('2007-8-1',19),xytext=('2008-1-1',22),

arrowprops=dict(facecolor='red',shrink=0.05),)

plt.annotate('四亿万刺激计划',size=13,xy=('2009-1-1',80),xytext=('2010-1-1',60),

arrowprops=dict(facecolor='orange',shrink=0.05),)

plt.annotate('金融去杠杆',size=13,xy=('2016-8-1',40),xytext=('2017-1-1',38), arrowprops=dict(facecolor='blue',shrink=0.05),)

plt.grid() #网格线 plt.show() 过程图片 分析 从上图可以看出,净出口贡献率大多时候是负的,但这并不意味着外贸在拖经济后退。从总需求角度,一国的GDP可以分解为总投资、总消费和净出口三个部分,净出口是指出口额与进口额之差,净出口对GDP增长的贡献率=净出口增量/GDP增量×100%。因此,净出口指标以及净出口贡献率,表示的是外贸对GDP的统计贡献度。净出口贡献率是负数,表明外需对经济增长的拉动作用在减弱,但并不表明对外贸易对经济增长起了负的拉动作用。 更为明显的是,消费贡献率和投资贡献率随着时间的推移,两者之间的差距是越来越小,其中投资和净出口的贡献率波动较大,消费贡献率波动较小。 四、思考 1、近年来,我国CPI指数保持稳定,但从切实的生活感受与居民消费变化来看,CPI指数却很难反映出这种消费价格指数的实际情况。比如住宅市场价格的飞涨,大宗商品的上涨等,其出现的价格变化,在很大程度上应该会对居民消费相关的价格形成影响,但实际上,这种CPI指数的轨迹显示平稳。查阅资料发现,由于住宅已成为中国居民消费最大的占比领域,因此住宅构成比或形成的商品服务价格涉及延伸占比已非常明显,但指数的映实际上并非如此。 2、M1反映着经济中的现实购买力;M2不仅反映现实的购买力,还反映潜在的购买力。若M1增速较快,则消费和终端市场活跃;若M2增速较快,则投资和中间市场活跃。中央银行和各商业银行可以据此判定货币政策。M2过高而M1过低,表明投资过热、需求不旺,有危机风险;M1过高M2过低,表明需求强劲、投资不足,有涨价风险。 五、实验总结 1. 收获 pandas是做数据分析非常重要的一个模块,它使得数据分析的工作变得更快更简单。由于现实世界中数据源的格式非常多,但是pandas也支持了不同数据格式的导入方法,所以学习pandas非常有必要。 tushare是一个免费,开源的python财经数据接口包.主要实现对股票等金融数据从数据采集、清洗加工到数据存储的过程,能够为金融分析人员提供快速、整洁、和多样的便于分析的数据,为他们在数据获取方面极大地减轻工作量,使他们更加专注于策略和模型的研究与实现上。考虑到Pythonpandas包在金融量化分析中体现出的优势,TuShare返回的绝大部分的数据格式都是pandasDataFrame类型,非常便于用pandas/NumPy/Matplotlib进行数据分析和可视化。 2. 存在的问题 学习任何编程语言都不是容易的,虽然python包含了很多库,比如我们做可视化的这些库pandas、tushare、matplotlib等等,它里面包含的很多函数可以轻易地完成其指定功能,但是就内含的参数而言,要完完全全搞清楚每个参数的含义及其用法是困难的,学习它应该花更多的功夫在于记忆其函数结构和其参数的意义及表达方式。 内容 1 代码30 成2 可视化30 绩评3 分析20 定 4创新20 得分

得分 评语

因篇幅问题不能全部显示,请点此查看更多更全内容