我們要正確地取得資料,可以使用政府的open data收集每天的資料。
本篇會從政府資料開放平臺取得資訊作為範例。
範例檔案在:Day15_getStockDataFromOpenData.py
基於Open data的概念,以及open government的概念,政府大力推廣open data,其中交易的方面也是如此。
以前需要爬網站才能取得的資料,現在政府提供查詢平台和API,讓我們更容易地取得資訊。
我們這次的資料就是從這邊取得:盤後資訊 > 個股日成交資訊
https://data.gov.tw/dataset/11549
根據介紹,這份資料為csv格式,欄位包含:證券代號
、證券名稱
、成交股數
、成交金額
、開盤價
、最高價
、最低價
、收盤價
、漲跌價差
、成交筆數
。
接著我們去下載檔案來觀察一下裡面的資料吧!
首先去「資料下載網址」那邊下載csv:
http://www.twse.com.tw/exchangeReport/STOCK_DAY_ALL?response=open_data
可以看到格式是這樣的:
證券代號,證券名稱,成交股數,成交金額,開盤價,最高價,最低價,收盤價,漲跌價差,成交筆數
"0050","元大台灣50","9,454,100","930,964,496","103.50","103.50","102.40","102.95","-0.15","3,414"
"0051","元大中型100","19,200","756,799","39.54","39.54","39.20","39.35","-0.19","20"
"0052","富邦科技","1,043,064","94,017,421","90.70","91.05","89.90","90.25","-0.35","200"
"0053","元大電子","11,000","544,230","49.60","49.63","49.33","49.33","-0.33","11"
"0054","元大台商50","4,000","99,140","24.80","24.80","24.77","24.77","-0.07","3"
是不是發現沒有日期!
沒錯,他們沒有提供日期,因為是每日更新,所以他們都不會有日期,上面寫的都是最近一次交易日的盤後資訊。
所以我們要自己加上日期。
取得檔案後,觀察裡面的內容,發現還滿乾淨的,也跟他們的說明相同,那我們就直接拿來使用囉~
import requests
import pandas
from io import StringIO
# 資料說明:https://data.gov.tw/dataset/11549
# API位置
address = "http://www.twse.com.tw/exchangeReport/STOCK_DAY_ALL?response=open_data"
# 取得資料
response = requests.get(address)
dataframe
格式# 解析
data = response.text
mystr = StringIO(data)
df = pandas.read_csv(mystr, header=None)
# print(df) # 這邊就會印出所有的資料,但是第一行也被認為是資料
# 建立新dataframe
new_headers = df.iloc[0] # 第一行當作header
df = df[1:] # 拿掉第一行的資料
df.columns = new_headers # 設定資料欄位的名稱
print(df)
這樣就是新的資料囉!