iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 15
0

我們要正確地取得資料,可以使用政府的open data收集每天的資料。
本篇會從政府資料開放平臺取得資訊作為範例。

範例檔案在:Day15_getStockDataFromOpenData.py


政府資料開放平臺簡介

基於Open data的概念,以及open government的概念,政府大力推廣open data,其中交易的方面也是如此。
以前需要爬網站才能取得的資料,現在政府提供查詢平台和API,讓我們更容易地取得資訊。
我們這次的資料就是從這邊取得:盤後資訊 > 個股日成交資訊

https://data.gov.tw/dataset/11549

https://ithelp.ithome.com.tw/upload/images/20200923/20103826EHOzjxUqYc.png

取得csv資料

根據介紹,這份資料為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"

是不是發現沒有日期!
沒錯,他們沒有提供日期,因為是每日更新,所以他們都不會有日期,上面寫的都是最近一次交易日的盤後資訊。
所以我們要自己加上日期。

解析資料

取得檔案後,觀察裡面的內容,發現還滿乾淨的,也跟他們的說明相同,那我們就直接拿來使用囉~

  1. 取得API提供的csv資料:
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)
  1. 解析內文,把有逗點的文字內容變成dataframe格式
# 解析
data = response.text
mystr = StringIO(data)
df = pandas.read_csv(mystr, header=None)
# print(df) # 這邊就會印出所有的資料,但是第一行也被認為是資料
  1. 但是這樣我們的第一行也會被認為是一般資料,這時候要把第一行變成欄位名稱,重新排列。
# 建立新dataframe
new_headers = df.iloc[0]  # 第一行當作header
df = df[1:]  # 拿掉第一行的資料
df.columns = new_headers  # 設定資料欄位的名稱
print(df)

這樣就是新的資料囉!


上一篇
【Day14】觀察資料
下一篇
【Day16】每日資料匯入資料庫
系列文
Pyhon X 金融分析 X Azure31

尚未有邦友留言

立即登入留言