螢幕面前的你,一定迫不及待想要看看數據視覺化的效果,
沒錯,很多觀點在以視覺化呈現後將會讓人更容易理解與溝通,
我們緊接著看下去。
(一) 本次程式執行流程說明
本次程式共3個檔案,stock_main.py為主程式,data_m.py為自行建立的自訂函式以及stockInfo.txt文字設定檔。
執行的步驟說明如下:
(二) 本次實作
相關檔案內容與程式碼如下:
檔名: stockInfo.txt
9914,20220926,20221003
# stock_main.py主程式:
import data_m as m
from time import sleep
import pandas as pd
all = []
stock_symbol, dates = m.getConfig()
for date in dates:
sleep(5)
spyderData = m.spyderData(date, stock_symbol)
all.append(spyderData[0])
df_columns = spyderData[1]
all_df = pd.DataFrame(all, columns = df_columns)
print(all_df)
# 自訂函式data_m.py:
import requests
from io import StringIO
import pandas as pd
import datetime
def getData():
res = []
f = open('stockInfo.txt')
alist = f.readlines()
print('讀取:',alist)
a, b, c = alist[0].split(',')
res = [a, b, c]
return res
def getConfig():
data = getData()
dates = []
startDate = datetime.datetime.strptime(data[1], '%Y%m%d')
endDate = datetime.datetime.strptime(data[2], '%Y%m%d')
# 算出起始到結束共幾天
days = (endDate - startDate).days + 1
for dayNum in range(days):
# 從起始日開始依次
date = (startDate + datetime.timedelta(days=dayNum))
#過濾掉週日
if date.weekday() < 6:
dates.append(date.strftime('%Y%m%d'))
return data[0], dates
def spyderData(date, symbol):
# 爬取股價資訊
requestData = requests.get('https://www.twse.com.tw/exchangeReport/MI_INDEX?response=csv&date=' + date + '&type=ALL')
txt = [i for i in requestData.text.split('\n') if len(i.split('",')) == 17 and i[0] != '=']
df = pd.read_csv(StringIO("\n".join(txt)), header = 0)
df = df.drop(columns = ['Unnamed: 16'])
f_df = df[df["證券代號"] == symbol]
f_df.insert(0, "日期", date)
df_columns = f_df.columns
return list(f_df.iloc[0]), df_columns
你會發現只有顯示股價資料列,
因為第三步驟還沒有處理,無法開始繪圖。
因此我們就需要在主程式中加入以下程式碼:
#第一步
day = all_df["日期"].astype(str)
price = all_df["收盤價"].astype(float)
#第二步
plt.figure(figsize=(20, 10), dpi=100)
#第三步
plt.plot(day, price, 's-', color= 'r', label=" 收盤價")
plt.title("Chart")
plt.show()
或許看完了心中會有疑惑,怎麼還沒有看到圖表呢?
當然,這兩天就是要讓大家多看一下程式碼與觀念,
就跟蹲馬步一樣,
明天我們再繼續。