如何通过tushare包提取数据将收盘价以折线图可视化?

企业微信

准备环境与tushare初始化

安装tushare库并导入,使用个人token初始化pro接口。token在tushare官网注册后获取,设置ts.set_token('你的token'),随后创建pro = ts.pro_api()。若未安装,通过pip install tushare完成。

获取股票日线数据

调用pro.daily接口,参数包括ts_code(股票代码),start_dateend_date(格式为YYYYMMDD)。例如获取平安银行(000001.SZ)2023年数据:

如何通过tushare包提取数据将收盘价以折线图可视化?


import tushare as ts

import pandas as pd

import matplotlib.pyplot as plt

# 设置token并初始化

ts.set_token('你的token')

pro = ts.pro_api()

# 获取日线数据

df = pro.daily(ts_code='000001.SZ', start_date='20230101', end_date='20231231')

返回的DataFrame包含trade_dateopenhighlowclose等列。注意trade_date为字符串,需转换为日期格式。

数据预处理与清洗

检查数据缺失值和重复值,删除空行。将trade_date转为datetime类型并设为索引,按日期升序排序,以确保折线图时间顺序正确。


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

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

df.sort_index(inplace=True)

若需复权价格,可调用pro.adj_factor获取复权因子,计算后复权价。这里以不复权直接绘制,但实际分析中常使用前复权数据。

绘制收盘价折线图

使用matplotlib绘制收盘价序列,设置图形大小、标题、坐标轴标签,网格线增强可读性。


plt.figure(figsize=(12,6))

plt.plot(df.index, df['close'], color='blue', linewidth=1.5, label='收盘价')

plt.title('000001.SZ 收盘价走势(2023)')

plt.xlabel('日期')

plt.ylabel('收盘价(元)')

plt.grid(True, linestyle='--', alpha=0.6)

plt.legend()

plt.show()

进阶:添加移动平均线

为分析趋势,可叠加5日、20日移动均线。使用rolling函数计算移动平均。


df['MA5'] = df['close'].rolling(window=5).mean()

df['MA20'] = df['close'].rolling(window=20).mean()

plt.plot(df.index, df['MA5'], label='MA5', linestyle='--')

plt.plot(df.index, df['MA20'], label='MA20', linestyle='--')

完整代码示例

整合以上过程,完整代码如下:


import tushare as ts

import pandas as pd

import matplotlib.pyplot as plt

# 设置token

ts.set_token('你的token')

pro = ts.pro_api()

# 获取数据

df = pro.daily(ts_code='000001.SZ', start_date='20230101', end_date='20231231')

# 数据清洗

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

df = df.drop_duplicates(subset='trade_date')

df = df.sort_values('trade_date')

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

# 计算移动平均

df['MA5'] = df['close'].rolling(5).mean()

df['MA20'] = df['close'].rolling(20).mean()

# 绘制

plt.figure(figsize=(14,7))

plt.plot(df['close'], label='收盘价', linewidth=2)

plt.plot(df['MA5'], label='5日均线', linestyle='--')

plt.plot(df['MA20'], label='20日均线', linestyle='--')

plt.title('收盘价及均线走势')

plt.xlabel('日期')

plt.ylabel('价格')

plt.grid(True)

plt.legend()

plt.show()

处理可能遇到的问题

token权限:部分接口需要付费权限,若获取失败,检查token权限。

数据频率daily接口为日线,若需周线或月线,可resample重采样。

中文显示:matplotlib默认不支持中文,需设置中文字体(如SimHei)或使用plt.rcParams['font.sans-serif'] = ['SimHei']

其他可视化技巧

使用plotly可生成交互式图表,便于缩放查看细节。


import plotly.graph_objects as go

fig = go.Figure(data=go.Scatter(x=df.index, y=df['close'], mode='lines', name='收盘价'))

fig.update_layout(title='交互式收盘价折线图')

fig.show()

通过tushare包提取数据,经过数据清洗和转换,使用matplotlib绘制收盘价折线图,步骤清晰,代码简洁。此方法适用于任何股票,结合技术指标可进行深入分析。

转载请注明出处:https://www.lianghuajiaoyi.top/wenzhang/tushare-shoupanjia-219.html