我執行Python程式碼慣用的IDE軟體 Spyder (免費軟體)
若要執行大專案,推薦使用Spyder。
Python 執行平台比較
更多平台見 CYC Blog: 常用 Python 執行平台比較:本機、雲端、IDE,哪個適合你?Spyder軟體的獲得,建議由Anaconda Navigator途徑下載 Download Anaconda Distribution | Anaconda,不要至Spyder官網獨立安裝(套件和路徑日後維護易有問題且版本更新也有問題,一言難盡,我一堆怨言)。
獨立安裝的下載處(如果不信邪的話,Pleeeeeeeease~) Spyder | The Python IDE that scientists and data analysts deserve
獨立安裝的Spyder (可看見standalone,若是透過Anaconda途徑安裝,此處為conda,見本文章首張圖)
Spyder也有 online模式
Anaconda內的Spyder和其它值得讓我擷圖貼在此的軟體
PyCharm有一大票資訊工程師支持,但我不愛(我愛的是PyCharm Pro,但要每年訂閱繳錢, 科科, 我用Spyder就好)。而Spyder則有一大票資料分析科學家使用(因為我也是資料分析科學家,也是統計分析師,但領行政人員的薪水,不是工程師等級的薪資)。而Orange軟體很有趣,藉點按拖拉放方式完成分析和製圖。軟體會把你的操作轉成Python程式碼(SAS Enterprise Guide(EG)和SAS Studio也是如此,所有操作即時轉化成SAS程式碼),再去執行該程式,而你也可直接寫程式執行所有工作。軟體界面如下:
下圖為葡萄酒品系分析用變項,呈現軟體「特徵統計」功能。
流程圖,似SAS EG。
SAS Studio 流程圖(近期教醫務管理系實習生操作的案例,素材取自SAS訓練資料庫)
都有SAS EG了,為何舊有的SAS軟體曝光率還這麼高?
因為運行速度最快(因為它省略了很多對新手友善的功能(ex:下code的建議與提醒等))。執行大專案時,其顯著差異性就會出來。
而也唯有靠code,才能榨出SAS軟體功力。很多功能與細節調整無法靠點案拖拉方式設定。
============開始進入文章主題============
A.自動化下載數支股票於某日期區間內相關交易數據
A流程描述
1.啟動網頁瀏覽器(我慣用Edge)
2.開啟台灣證券交易所網站 個股日成交資訊
3.選民國112年,再選01月,打入股票代碼2308,按查詢鍵,結果如下
4.把查詢到的所有數據用Excel檔存起來。
這時可發現,若要下載36個月進行事後的序列分析,你得重複操作36遍,並執行36遍的複製和貼上至Excel上。若你要下載30支股票進行事後的序列相似性分析或關聯性分析,就得30*36=1080遍。
接下來只要寫一段程式碼,就可以把這樣的流程自動化。程式碼選取再按執行,就可以去廚房切水果倒飲料,回到座位時,你要的Excel檔已放在指定的資訊夾中。
B流程補充說明
1.程式碼於Spyder的畫面
2.抓資料。上紅框為table標題,下紅框為table數據。透過多層迴圈將標題與一列列數據全數打包進串列中。最後再透過append函數將串列塞入Workbook物件並以save函數存成Excel檔。
filename = f"{stockid}.xlsx"
wb.save(filename)
print(f"已完成Excel檔===> {filename}")
3.全部執行完畢
4.已下載的Excel檔
連每一欄位名稱末端都掛上 _股票代號,一律靠程式碼自動加掛。
header = [f"{th.text.strip()}_{stockid}" for th in th_tags if th.text.strip()]
th_tags則靠find_elements其By.TAG_NAME去掃HTML碼的<th>標籤,它代表html table的欄位名稱。
5.所有Excel檔最後進SAS透過Proc Similarity執行序列相似性分析的結果(此為另一案,此僅說明可以這樣上下游串接分析流)。交易相關數據這樣抓,而營收、毛利、營業利益、稅後淨利、ROE、EPS等相關指標也這樣抓,就可合併在同一dataset上,最後以計量經濟學的時間序列分析法,看多時間序列彼此間的關聯性(通常折線圖畫出來,大概就能經驗判斷能不能下手,很少會走到統計分析這步)等。而美國聯準會政策、商業新聞以及產業資訊(ex: 廠商主攻技術與產品及其在市場上的話語權(ex: 價錢幾乎他說了算, 具有定訂該領域遊戲規則的能耐)等)都必須知道。此外,經濟學上重要指標(ex: GDP, CPI, PPI, PMI等約8-10個 )也都要懂,否則買ETF會較適合你。然後,我覺得EPS達標速度也可自設指標衡量,例如以前2024年整年12.5元,但2025年才8月已達12元,這就是訊號。但你的樣本量得納入更多的計算,不能只看2024年。另外,超過多少才算值得下手,細節怎麼算及如何衡量,我不會細講,每人都有各自的獨門功夫與公式祕方。最後再說一點,要看得懂錢往哪裡跑,跟著主力準沒錯,只有資金流不會騙人。那些技術分析(ex: KD, MACD等)或裸K分析(ex: 五波三浪等波浪理論),不知是我道行太淺或資質不足,總覺得沒什麼用。若相信這些東西,上場鐵定直接被海浪捲走。
原本我打算爬的資料網頁為Goodinfo 首頁 - Goodinfo!台灣股市資訊網,我研究分析的資料均來自於此。無奈爬沒幾次就一直跳出廣告,如下。導致程式出現訊息錯誤,故只好改爬台灣證券交易所網站。
原預設:
1.於欄位填入代號2330,按「股票查詢」
2. 按「個股K線圖」
3.按「查1年」再按「XLS」
若先登入(寫入程式碼中),不知會不會無廣告(作夢吧,夢裡什麼都有)。
B.自動化下載醫策會TCPI指標個別群組報表(同層級醫院群組描述性統計值Excel檔)
B流程描述
1.啟動網頁瀏覽器(我慣用Edge)
2.開啟官網 台灣臨床成效指標系統
2.輸入帳號密碼並按登入鍵
3.寫程式碼時,這段放入driver.implicitly_wait(10),若畫面開出就立即進入步驟4,若開畫面耗時逾10秒,就回傳錯誤資訊。
4.滑鼠於「報表管理」處稍懸停,再於「個別群組報表」處按下。
5.選擇頻率 點選月
查詢區間選2025 01 2025 06
選擇指標 選綜合照護指標
比較群組 勾選醫學中心
按 「Excel匯出」按鈕
6. 得到的Excel檔及其內容
程式碼於Spyder的畫面
667th行顯示警示符號,乃因該模組os匯入後卻未在此使用,我習慣不刪,因為這串是執行類似動作行為的常用模組,會貼來貼去。一旦執行657th行以後程式碼,上述B流程會自動跑完並於指定位置存放該Excel檔(連用滑鼠去啟動網頁瀏覽器的動作都不用)。B流程html程式碼元素查詢抓取畫面
1.查詢帳號欄位html碼再寫入程式碼
print("正輸入帳號與密碼...")
keyword1 = wait.until(EC.presence_of_element_located((By.XPATH, '//*[@id="txtUserId"]')))
keyword1.clear()
keyword1.send_keys("輸入帳號")
keyword2 = wait.until(EC.presence_of_element_located((By.XPATH, '//*[@id="txtPassword"]')))
keyword2.clear()
keyword2.send_keys("輸入密碼")
2.滑鼠於「報表管理」處懸停0.8秒,再於「個別群組報表」處按下
try:
OPEN_menu = driver.find_element(By.XPATH, '//*[@id="cssmenu"]/ul/li[3]/a' )
ActionChains(driver).move_to_element(OPEN_menu).perform()
time.sleep(0.8)
except:
pass
3.參數抓取
##### 選擇頻率,月為1,年為3 ####
select_element1 = wait.until(EC.presence_of_element_located((By.ID, "ctl00_ctl00_content_SearchInput_ddSelectFrequency_Search")))
select_freq = Select(select_element1)
select_freq.select_by_value("1")
print("已確定資料撈取頻率")
程式碼運行動畫就不上傳了。運行期間,會看到系統自動啟動瀏覽器,自動開啟指定網頁,自動輸入帳號密碼並登入,自動把目標頁面點出來,自動輸入所有參數(因是程式控制,所以幾乎0.5秒內就全部填畢),自動下載該Excel。
啟動的瀏覽器,會有以下紅框內容。啟動時,它就如同被「遠距遙控」般自已動。
這些技術都是自學而來,沒人教我。若覺得內文對你有所幫助也樂意請我喝杯茶飲,匯款帳號如下:
補充於2025/8/22:
對嘛,我前面就說了(但我不是Python新手),但還有其它更棘手,甚至金剛杖二問題。要模組沒模組都Spyder內pip一下就有,這些都不是問題。Releases · spyder-ide/spyder
沒有留言:
張貼留言