2020年11月22日 星期日

[python抓爬仔]~~抓取指定股票前31天股價資料並使用Matplotlib繪製圖表

 好的視覺化圖表可以讓人迅速掌握資料的特性及重要意涵,是在資料處理中相當重要的一環!

前面分別介紹過台銀即時匯率資料及股票交易資料的抓取操作範例!

也介紹過將資料儲存至sqlite資料庫的方法,當資料日積月累的儲存一段時間後,也就可以進行資料的分析及圖表繪製工作了!

這次我們延續之前台灣股票套件(twstock)的操作,利用其套件進行抓取指定股票(本次操作以「廣達(2382)」為例)前31天的股價資料,並將其資料利用python視覺化圖表工具:Matplotlib,進行圖表繪製操作,作為練習Matplotlib及資料視覺化的入門。

首先確定你已經安裝本次操作所需的套件:twstock, matplotlib

若尚未安裝或不確定,可以透過以下指令進行安裝或檢測:

pip install -U twstock
pip install -U matplotlib

想對Matplotlib有更完整的認識,可以到這裡逛逛



這次的操作練習我們分成二個層次進行操作:

第一階段:我們著重將資料抓取後,迅速繪製出圖表並加以儲存、呈現。

第二階段:我們則進一步,將重點放在圖表的設定操作上,讓圖表呈現更具個性化!

好囉~~現在就先看第一階段目標如何達成囉...........

from matplotlib import pyplot as plt
from twstock import Stock

tw2382 = Stock("2382")  # 設定指定的股票(代號)

x = list(range(-31, 0))     # 產生一組[-31~-1]的列表(list)作為對應
y1 = tw2382.price    # 抓取指定股票前31天收盤價
y2 = tw2382.high    # 抓取指定股票前31天最高價
y3 = tw2382.low     # 抓取指定股票前31天最低價

plt.title("廣達(2382)前31天交易價格變動趨勢圖")   # 設定圖表標題
plt.xlabel(f"日期區間")     # 設定x軸標籤
plt.ylabel("價格(元)")        # 設定y軸標籤

plt.plot(x, y1)     # 繪製第一組數線
plt.plot(x, y2)
plt.plot(x, y3)

plt.savefig('tw2382_o.png')
plt.show()   # 顯示圖表

執行結果,會將繪製的圖表以檔名:tw2382_o.png儲存於程式目錄下,如下圖所示:(驚不驚喜~~意不意外...簡單吧?!呵~~)

基本上,這樣就可以完成將資料視覺化的初步工作!

在第一階段中~~你唯一可能遇到的問題,就是中文無法正常顯示(變成亂碼)的狀況,這問題我在之前就有先描述談論過了,有中文無法正常顯示困擾的請看這裡參考!

假如你已經滿意以上的結果,就可以打完收工~~吃飯睡覺去了!

========== ******************* ============

若是你跟我一樣有點「龜毛」~~想要對圖表進行一些個人化的設定工作,那就歡迎繼續看下去~~~

第二階段:我們會進一步設定包括~~標題格式、X,Y軸標籤設定、折線線條設定、圖例等相關操作設定。

2020年11月19日 星期四

[python抓爬仔]~~輕鬆抓系列之「輕鬆獲取台灣股票交易資訊」

 之前介紹過如何輕鬆抓取台銀即時匯率資料,可以想像如果有個好用的套件,可以讓資料抓取這件事輕鬆許多啊~~~!

這次呢~~我們延續簡單學、輕鬆用的精神,為大家隆重介紹~~獲取台灣股票交易資訊的好工具:「twstock」套件!

這個套件~可以讓我們輕鬆獲取各項股票交易的歷史資料、股票即時交易資訊及相關交易判斷訊息!是個想要試著認識股票交易的好工具!

大家可以到這裡觀看及瞭解twstock的相關資訊及應用技巧!

那我們這邊當然就不會把所有的操作走一遍~~沒必要!

這裡呢~~我們主要是透過以下範例來認識twstock這個好用的套件外,也是透過這個套件的操作,來進一步認識有關資料擷取後的字典檔,及其相關操作!

好囉~~一樣照慣例,直接上程式碼:

# 先安裝twstock套件: pip install twstock
import twstock

# ========================================
# 四大買賣點判斷指數函數應用
stock_sid = twstock.Stock('2382')
b4p = twstock.BestFourPoint(stock_sid)
print("數據四大買賣點判斷報告:")
print(f"是否為四大買點:{b4p.best_four_point_to_buy()}")
print(f"是否為四大賣點:{b4p.best_four_point_to_sell()}")
print(f"指數綜合判斷:{b4p.best_four_point()}")

# ======= 取得單一股票之即時交易資訊 =======
stock = twstock.realtime.get('2382')
print("獲取資料類型:" + str(type(stock)))
# stock字典檔輸出方式設定範例(詳細內容可參考第28行輸出內容)
print(f"=====以下為[{stock['info']['name']}]即時交易資訊=====")
print(f"資料取得時間:{stock['info']['time']}")
print(f"股票代號:{stock['info']['code']}")
print(f"成交張數:{stock['realtime']['accumulate_trade_volume']}")
print(f"開盤價:{stock['realtime']['open']}")
print(f"最高價:{stock['realtime']['high']}")
print(f"最低價:{stock['realtime']['low']}")
print(f"最新一筆交易價:{stock['realtime']['latest_trade_price']}")
print(f"最新一筆交易張數:{stock['realtime']['trade_volume']}")

# ======= 取得多支股票之即時交易資訊 =======
stock2 = twstock.realtime.get(['2382', '1216'])
print(f"\n=====多筆股票獲取之資料格式=====\n{stock2}")

程式運行結果:

其中多筆股票獲取之字典檔(dict)資料格式部分,由於資料長度過長,整理如下供參:

2020年11月15日 星期日

[python抓爬仔]~~將抓取的資料存入sqlite資料庫

 前面介紹過如何使用twder模組抓取台銀即時匯率資料的操作

但光是抓取資料來呈現,對於網路資料的擷取實在是可惜了~~若是能將資料儲存下來,作為後續資料分析、追蹤之用,那才是資料抓取之重點啊!

那麼~~抓取回來的資料要如何儲存?存在哪裡呢?

這個問題~~見仁見智啦~~你要簡單儲存在一個文字檔(*.txt)可以嗎?可以啊.....;儲存在MySQL資料庫咧~~很好啊....,端看你準備怎麼用、如何用、好不好用這些資料而定!你自己用的開心、滿足自己所需最重要!

這次,為了方便應用~使用了python安裝時即內建的sqlite資料庫(我自己是習慣使用MySQL啦),作為資料擷取儲存的工具!著眼點就是:內建~~無須在涉及資料庫的安裝、設定...等等!

OK~~這次目標是:

一、擷取台銀指定幣別(日幣)即時匯率資料(前面介紹過請自行參考)

二、使用pandas模組將擷取的資料格式化

三、使用sqlite3配合pandas進行sqlite指定的資料庫-資料表的讀寫操作

好囉~~基本上也是直接看程式碼即可~~~上吧...程式馬(呵!~無聊)

# 先確認已安裝所需之模組
import twder
import sqlite3
import pandas as pd

n_der = twder.now('JPY')   # 擷取目前指定幣別(日幣)報價
tc = ["資料時間",  "現金買入",  "現金賣出",  "即期買入", "即期賣出"]    # 設定一組資料表欄位之列表
t_data = []     # 設定一組空列表(list)做為儲放資料集之用
t_data.append(n_der)    # 將查詢結果儲存至資料庫之資料列表(list)

t_df = pd.DataFrame(t_data, columns=tc)    # 組合為pandas 之 DataFrame

with sqlite3.connect('twder_demo.sqlite') as db:        #連結sqlite之twder_demo.sqlite資料庫
    t_df.to_sql('twder_demo', con=db, if_exists='append')     # 使用pandas to_sql將資料集(t_df)寫入資料表:twder_demo
    print("=======資料寫入完成=======")
    # 使用pandas read_sql_query讀取資料表內容並格式化
    read_df = pd.read_sql_query('select * from twder_demo', con=db)    

print(read_df)
# =======使用iloc索引選擇輸出內容
print(read_df.iloc[:, 1:])

執行結果如下:

簡單補充說明:

2020年11月13日 星期五

[python抓爬仔]~~輕鬆擷取「台灣銀行即時匯率資料」

 前面介紹過分析網頁來獲取資料的操作。

先再來看看python另一個令人喜愛、歡迎的特質:大量優質的外掛模組,可供使用!

這次就先帶來~~如何使用「台灣銀行即時匯率資料」模組,無痛抓取台銀即時匯率資料

首先當然是先安裝「台灣銀行即時匯率資料」模組:pip install twder

「台灣銀行即時匯率資料」相關資訊,可到這裡參考

在這次的範例中~~你將發現透過良好的外掛模組,可以讓目標如此輕易達成.....!(程式技術控表示~~我不同意!!~呵)

好囉~~這次內容簡單到廢話都不知道怎麼掰了....直接上程式碼:

# 安裝台灣銀行即時匯率查詢模組:pip install twder
import twder

n_derall = twder.now_all()   # 擷取目前所有幣別報價
n_der = twder.now('JPY')   # 擷取目前指定幣別(日幣)報價

print(n_derall)   # 輸出觀察「所有幣別報價」擷取結果
print(n_der)    # 輸出觀察「指定幣別報價」擷取結果
print(f"美金(USD)即時匯率報價:{n_derall['USD']}")   # 從所有報價中提取特定幣別報價資料

# =========格式化輸出資料============ #

n_title = ["資料擷取時間:",  "現金買入:",  "現金賣出:",  "即期買入:", "即期賣出:"]    # 設定標題的list供格式化輸出對應之用

for n in range(len(n_der)):
    r1 = n_title[n]+str(n_der[n])
    print(r1)

for n in range(len(n_derall['USD'])):
    r2 = n_title[n]+str(n_derall['USD'][n])
    print(r2)

輸出成果如下圖:

重點提示:

2020年11月8日 星期日

[python抓爬仔]~~python BS4初體驗(抓取udn熱門新聞)

 python的確是個相當好玩、實用的工具!快又有效的特質讓他在程式語言的喜好度迅速攀升。

不管是小酌或大宴兩相宜啊!網路資料的擷取或是所謂的爬蟲也是個有趣且實用的議題,值得開個「抓爬仔」專區(呵~~ ^^|||)來記錄一下學習歷程。

這次呢~~就簡單先以安裝這支著名的Beautiful Soup 4(bs4)模組,並簡單看看如何應用在網路新聞的擷取應用上。

認識更多關於Beautiful Soup 4(bs4)的知識

本次學習目標~~:

一、如何將目標網站(以聯合新聞網(UDN)為例)內容擷取下來。

二、分析擷取的網站內容,分析並條列出我們所需的內容(本次以條析熱門新聞標題及網址為例)。

首先~~由於bs4並非python安裝的標準程式庫,所以必須要先安裝bs4,而後再進行目標網站的擷取、分析與整理、輸出工作,大致上可分成以下步驟進行:

step1.安裝Beautiful Soup 4(bs4)pip install beautifulsoup4

step2.在程式中引入bs4模組 from bs4 import BeautifulSoup

step3.應用requests模組引入並擷取目標網站內容: requests.get('目標網站網址')

step4.整理、解析目標網站擷取之網頁內容

BeautifulSoup(擷取的網頁內容, 'html.parser')

soup.find_all('查找的html Tag(標籤)')

step5.整理並輸出解析結果

大致上就是這樣啦~~~(但非絕對喔~程式存乎一心啊!)

===========================================================

好~~基本的心得介紹完,直接上這次的練習程式碼: