原始数据
导入numpy、pandas和matplotlib库
#导入数据分析三大剑客
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
#正常显示中文和负号
plt.rcParams['font.sans-serif'].insert(0, 'SimHei')
plt.rcParams['axes.unicode_minus'] = False
#将图片进行矢量化
%config InlineBackend.figure_format = 'svg'
读取数据并进行简单处理
#读取数据
baidu_df = pd.read_excel('res/2022年股票数据.xlsx')
#将其日期按照升序排序并重置序号
baidu_df.sort_values(by='Date', ascending=True, inplace=True)
baidu_df.reset_index(drop=True, inplace=True)
baidu_df
数据可视化
绘制折线图
# 绘制全年收盘价的折线图
baidu_df.set_index('Date').Close.plot(kind='line', figsize=(10, 5))
plt.ylim(60, 140)
plt.show()
使用pyecharts绘图
#在顶部声明 Notebook 类型
from pyecharts.globals import CurrentConfig, NotebookType
CurrentConfig.NOTEBOOK_TYPE = NotebookType.JUPYTER_LAB
from pyecharts import options as opts
from pyecharts.charts import Kline
date = baidu_df.Date.dt.strftime('%m-%d').values.tolist()
data = baidu_df[['Open', 'Close', 'Low', 'High']].values.tolist()
kline = Kline()
kline.add_xaxis(date)
kline.add_yaxis("kline", data)
kline.set_global_opts(
xaxis_opts=opts.AxisOpts(is_scale=True),
yaxis_opts=opts.AxisOpts(
is_scale=True,
splitarea_opts=opts.SplitAreaOpts(
is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)
),
),
datazoom_opts=[opts.DataZoomOpts()], #可提供区域缩放功能
legend_opts=opts.LegendOpts(is_show=False),
)
#渲染K线图
kline.load_javascript()
#生成K线图
kline.render_notebook()
# 移动平均(5日平均)
ma5 = baidu_df.Close.rolling(5).mean()
ma5
# 移动平均(10日平均)
ma10 = baidu_df.Close.rolling(10).mean()
ma10
绘制折线图
from pyecharts.charts import Line
from pyecharts import options as opts
x_data = baidu_df.Date.dt.strftime('%m-%d').values.tolist()
y_data1 = ma5.values.tolist()
y_data2 = ma10.values.tolist()
# 创建折线图对象
line = Line(init_opts=opts.InitOpts(width='1000px', height='600px'))
# 添加横轴的数据
line.add_xaxis(xaxis_data=x_data)
# 添加纵轴的数据
line.add_yaxis(
series_name='MA5',
y_axis=y_data1,
label_opts=opts.LabelOpts(is_show=False),
)
line.add_yaxis(
series_name='MA10',
y_axis=y_data2,
label_opts=opts.LabelOpts(is_show=False),
)
line.set_global_opts(
legend_opts=opts.LegendOpts(is_show=True),
yaxis_opts=opts.AxisOpts(
min_=80,
max_=140
)
)
# 加载绘图需要的JS文件
line.load_javascript()
line.render_notebook()