前两天已经将各股日成交资料存成.csv
档了,接着就来利用这些资料绘制出趋势图吧~
还记得前天我们将Pandas的DataFrame汇出成csv只靠一个函数吗? 现在反过来将csv汇入成DataFrame一样也只需要一个函数哦! 是不是超好用呢?
试着将前天汇出的三种档案.csv
、.xlsx
、.html
都汇入成DataFrame看看。汇入的参数大致上和汇出一样,顶多就编码要注意一下。
import pandas as pd
# 读取csv
df1 = pd.read_csv("./month_stock.csv", encoding="big5")
print(df1)
# 读取excel
df2 = pd.read_excel("./month_stock.xlsx")
print(df2)
# 读取html
df3 = pd.read_html("./month_stock.html", encoding="utf8")
print(df3)
既然可以汇入csv了,就可以用前天储存的csv档绘制趋势图了! 绘制趋势图我会介绍两种方法:Matplotlib和Pandas。
Matplotlib是Python绘制数据图的套件,待会就要用这个套件将股价绘制成趋势图。
Anaconda已经有matplotlib套件了,没有的话一样用pip下载。
pip install matplotlib
载完後就引进你的专案中,但因为matplotlib太长了,通常会减写成plt
。
import matplotlib.pyplot as plt
再来,筛选出画趋势图需要的资料,要日期、最高价、最低价、收盘价这几个栏位。
# 筛选我们要的资料
date = df["日期"]
high_price = df["最高价"]
low_price = df["最低价"]
end_price = df["收盘价"]
plt.plot()
这个函数就是在图上绘制一条折线,第一个参数当作x轴,第二个参数当作y轴。因此我们以时间作为x轴,分别画出以最高价、最低价和收盘价为y轴的折线。
# 绘图
plt.plot(date, high_price)
plt.plot(date, low_price)
plt.plot(date, end_price)
接着加上图片的一些属性,待会再用图说明每个属性的作用。
plt.xlabel("日期") # x轴标签
plt.ylabel("价格") # y轴标签
plt.legend(["最高价", "最低价", "收盘价"], loc="lower right") # 图示,共有左下、左上、右下、右上四个方位
plt.title("110年8月股市趋势图") # 主标题
plt.grid(True) # 是否有网格?
最後,用plt.show()
显示图片!
# 显示图片
plt.show()
上方功能列可以执行缩放、拖曳、储存等动作。
Matplotlib预设并没有支援中文字体,因此中文字会变成像下图这样的乱码。
解决方法可以参考这篇教学。
如果是希望自动存成图片,请使用plt.savefig()
这个函数,记得一定要放在plt.show()
之前,不然会存空白的图!
# 存成图片(一定要放前面!)
plt.savefig("matplotlib_chart.png")
虽然说matplotlib预设会给每条线不同颜色,但如果不满意预设的颜色,还是能够客制化的。
color
参数表示线条颜色,用hex色码表示,可以到这里挑颜色。
linewidth
参数表示线条宽度,数字越大越粗。
linestyle
参数则表示线条样式,参数值可以参考官方文件。
plt.plot(date, high_price, color="#ff2121")
plt.plot(date, low_price, color="#00bd42", linewidth=5)
plt.plot(date, end_price, color="#005de0", linestyle="dashed")
嘿嘿~其实Pandas本身就有绘图功能罗,那你可能会想,那我还学Matplotlib干嘛?? 事实上,Pandas的绘图功能有一部份也是依靠Matplotlib的,所以还是要学啦~
Pandas在绘图前要先把资料整理成DataFrame的型态,虽然汇入的资料本身就是DataFrame了,但是我们只需要其中一部分的资料而已,因此我们要先将我们要的栏位筛选出来,跟上面一样,要日期、最高价、最低价、收盘价这四个栏位。
接着,要定义一个栏位当作x轴,这边当然就是用日期栏位。
# 筛选我们要的资料
chart_df = df[["日期", "最高价", "最低价", "收盘价"]]
# 将日期设为x轴
chart_df.set_index("日期", inplace=True)
print(chart_df)
资料整理完後,绘图就变得很简单,只需要用plot()
这个函数,属性设定一下就可以了!
# 绘图
chart = chart_df.plot(xlabel="日期", ylabel="价格", title="110年8月股市趋势图", legend=True)
plt.grid()
中文字体问题的解决方法和Matplotlib一样,请参考上方说明。
最後存档和显示图片的方法与Matplotlib一致。
# 存成图片(一定要放前面!)
plt.savefig("pandas_chart.png")
# 显示图片
plt.show()
结果如下:
趋势图就完成了! 至於後续要怎麽应用就看各位的想像力啦!
今天一开始先教大家怎麽从汇入csv档,然後使用Matplotlib和Pandas这两种不同方法将股市资料绘制成趋势图。
股市趋势图的专案就到这边! 明天开始会教你如何做出天气小助手,每天早上通知你今天的天气情形,大家敬请期待~
如果喜欢这系列文章麻烦帮我按Like加订阅,你的支持是我创作最大的动力~
本系列文章以及范例程序码都同步更新在GitHub上,後续会持续的更新,如果喜欢也麻烦帮我按个星星吧~
有任何问题或建议,都欢迎在底下留言区提出,还请大家多多指教。
继续看范例fig06_12.cpp下半段,一开始定义三个函式原型void useLocal(), v...
上面这个是今天会提到的内容,如果你已经可以轻松看懂,欢迎直接左转去看我队友们的精彩文章! 昨天我们...
今天要谈到代理模式,其实跟昨天的装饰器模式很类似。代理模式的目的在於,因应某些条件替换物件原本的行为...
前言 该系列是为了让看过Vue官方文件或学过Vue但是却不知道怎麽下手去重构现在有的网站而去规画的系...
照顾...是谁的工作? 当我病痛衰弱时,谁可以照顾我? 家人?朋友?爱人? 但照顾者不需要休息跟喘息...