python读取时间序列csv可视化_Python获取时序数据并进行可视化分析

本帖最后由 林宝宝 于 2019-7-31 17:29 编辑

问题导读:

1.获取第三方平台的接口数据的方法是什么?

2.怎么做数据清洗与合并?主要有数据类型转换、重新排序、索引重置、数据合并

3.时序数据的可视化对比分析与基本展现设置是什么样的?

1. 准备工作

tushare是一个第三方财经数据接口包,需要安装包并完成注册。

安装tushare包

[mw_shl_code=python,true]pip install tushare [/mw_shl_code]

为防恶意调用接口数据,官方()需要新用户完成注册、提高积分(例如达到200)、取得访问权限token ID,例如:1797f6915fbc1e612c33c6ed4cf85a2b7b349d85db80bf0860337fff))。可通过如下链接(https://tushare.pro/register?reg=285935)进入官网完成注册。

2. 加载数据

首先需要导入包已安装的tushare包。然后通过tokenID获取一个有访问权限的API接口,最终通过官方文档说明,使用index_daily() 来获取样例数据。这里取399401.SZ的交易日期和收盘价。

[mw_shl_code=python,true]import tushare as ts

ts.set_token("1797f6915fbc1e612c33c6ed4cf85a2b7b349d85db80bf0860337fff")

pro=ts.pro_api()

df1=pro.index_daily(ts_code="399401.SZ")[['trade_date', 'close']][/mw_shl_code]

3. 数据处理-转化与合并数据类型转化为datetime

导入数据后,先观察源数据的字段类型是否符合预期。通过执行如下脚本,得到当前数据集中,trade_date为object 并非日期类型

[mw_shl_code=python,true]# 查看数据类型

print(df1.dtypes)

# 查看样例数据

print(df1.head())[/mw_shl_code]

微信图片_20190731155312.jpg (7.88 KB, 下载次数: 9)

2019-7-31 15:53 上传

pandas中改变某列的数据类型为日期时,可用pd.to_datetime。修改完成后,将数据集中的日期字段重新设为索引。注意不要漏掉inplace=True。

[mw_shl_code=python,true]df1.sort_values('trade_date', inplace=True)

# 转换列数据类型为日期

df1['trade_date']=pd.to_datetime(df1['trade_date'])

# 将指定的日期类型 列设为索引,并替代。

df1.set_index('trade_date', inplace=True)[/mw_shl_code]

数据合并concat

上面的df1对象中只包含一支股票的信息,当在matplotlib中展现时,仅可以观察趋势。如果需要与其它股票作对比分析,则需要合并另外的数据。

[mw_shl_code=python,true]# 获取多支交易数据数据,作对比分析

list1 = ['000002.SZ', '000012.SZ', '600010.SH']

for i, ts_code in enumerate(list1):

# 取指定日期的数据

df_tmp = pro.daily(ts_code=ts_code, start_date='20170101', end_date='20180101')[['trade_date', 'close']]

df_tmp.sort_values('trade_date', inplace=True)

df_tmp['trade_date']=pd.to_datetime(df_tmp['trade_date'])

df_tmp.rename(columns={'close': ts_code}, inplace=True)

df_tmp.set_index('trade_date', inplace=True)

if i==0 :

df = df_tmp

else:

# axis=1,沿第2条轴即X轴。列增加

df = pd.concat([df, df_tmp], axis=1)

print(ts_code)

# 查看数据

df.head()[/mw_shl_code]

4. 可视化展现

查看单一股票的年度趋势图,并添加参考线

[mw_shl_code=python,true]import matplotlib.pyplot as plt

ax = df1.plot(color="blue", figsize=(12, 4), linewidth=2, fontsize=6)

ax.set_xlabel("trade date")

ax.set_ylabel("399401.SZ close")

ax.set_title("Trend analysis of recent years 2013-2019 ", fontsize=8)

# 添加水平线

ax.axvline("2018-08-15", color="red", linestyle="--", linewidth=2)

ax.axhline(6000, color="green", linestyle="--",linewidth=2 )

plt.show()[/mw_shl_code]

如下示图:

微信图片_20190731155522.jpg (30.74 KB, 下载次数: 8)

2019-7-31 15:55 上传

参数设置。

主题切换

[mw_shl_code=python,true]可先调用语句`plt.style.available`,查看当前可用的主题名称,再选择即可[/mw_shl_code]

设置X轴日期格式

[mw_shl_code=python,true]matploblib中也提供了的dates对象,对X轴的显示日期格式与频度进行设置。如下脚本,将设置日期区间为'2013-01-01' 至 '2019-12-01',显示'年-月',频度为10个月。

# 查看可用样式

import matplotlib.dates as mdate

print(plt.style.available)

plt.style.use("seaborn-talk")

ax1=df1.plot(figsize=(12, 4))

ax1.set_title("my mew style - seaborn-talk")

ax1.xaxis.set_major_formatter(mdate.DateFormatter('%Y-%m'))

plt.xticks(pd.date_range("2013-01-01", "2019-12-01", freq="10m"))

plt.show()[/mw_shl_code]

示例图如下:

微信图片_20190731155711.jpg (28.48 KB, 下载次数: 5)

2019-7-31 15:57 上传

对比分析

先预览已完成合并的数据。dataFrame对象df中trade_date仍为索引,但是新增了其它列。

微信图片_20190731155746.png (20.9 KB, 下载次数: 6)

2019-7-31 15:58 上传

[mw_shl_code=python,true]ax3 = df.plot(linewidth=3 , fontsize=16, figsize=(12, 4 ))

ax3.set_xlabel('trade_date')

ax3.set_ylabel("unit price")

# 指定X轴显示刻度 ,取代默认设置

ax3.xaxis.set_major_formatter(mdate.DateFormatter('%Y-%m'))

plt.xticks(pd.date_range("2017-01-01", "2018-01-01", freq="3m"))

ax3.legend(fontsize=12)

ax3.set_title("Comparison of analysis")

plt.show()[/mw_shl_code]

展现结果为:

微信图片_20190731155848.jpg (35.59 KB, 下载次数: 5)

2019-7-31 15:59 上传

本文全部源码:

2019-7-31 17:03 上传

点击文件名下载附件

最新经典文章,欢迎关注公众号

转载自公众号:Python中文社区

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值