拿股票三維資料學習 pandas 的 multiindex

22 小時 24 分鐘 ago
最近認真用 python 的 pandas 函式庫讀取股票每日收盤資料, 結論是: 嗯, 還是用陽春 python 處理比較簡單快速 -- 執行的時間跟程式除錯的時間都比較省。 本篇是跟 pandas 的分手宣言。 閱讀本文之前, 請先按照 我上個月的 pandas 開箱文 操作一遍。 (好短的戀情啊~~) 請下載本文的主角, 我的範例程式 sana.py。 也請用 pip3 安裝它用到的一堆套件, 例如 pandas, numpy, tulipy, cProfile 等等。 另外請按照 sana.py 裡面的 datapath 的設定, 建立一個空目錄 ~/stock/day , 再把 sana-daily-data.tgz 在這裡解壓縮。 這是去年 10 月到目前為止的台股所有個股每日收盤價等等資料。 進入 python3 之後, 執行 exec(open("
ckhung

跟蹤狂祖克柏退散! 免登入也能閱讀臉書上的公開貼文

4 天 8 小時 ago
有些 FB 網紅大大的頁面明明是公開的, 但讀者卻必須登入他自己的 FB 才能閱讀網紅大大的貼文。 這樣的設定對於保護隱私完全沒有幫助。 (事實上 「臉書上的隱私」 本來就只是一種幻想, 看看 性工作者身份暴露的故事 就知道臉書的可怕) 這只會犧牲自己的人氣幫 FB 換取更多的追蹤訪客的機會, 好像店長僱了一位街頭小弟幫你發商店傳單, 小弟卻對訪客說: 「你先加入XX幫, 才可以進來消費」 一樣, 仿佛又回到了十年前 網站自殘 -- 微軟綁架你的點閱率 的年代。 因為我是 無賴 不要臉的邊緣人, 不太會用 FB, 不太確定自己的 FB 是否也跟小英總統一樣設壞掉了? 總之如果讀者知道該如何更改這個設定, 讓沒有登入的訪客也能看自己的 FB 公開貼文, 麻煩分享一下, 讓這些網紅大大不再犧牲自己的人氣幫 FB 強迫推銷。 但是在那麼多網紅大大學會更改設定之前, 我們路過的訪客還是可以
ckhung

網頁畫面定時快照截圖

6 天 8 小時 ago
想要定期下載某網頁, 可以在 cron job 裡面用 wget。 [ 鳥哥、 教育大市集] 但這僅適用於伺服器端產生的靜態網頁。 如果是 javascript 產生的動態網頁呢? 如果需要取得網頁文字內容, 那就必須用比較進階的 網頁爬蟲終極武器: puppeteer; 如果只需要快照截圖 (例如想要觀察 google 地圖或開放街圖某塊區域的長期變化), 那麼本篇介紹的 cutycapt 就夠用了。 從命令列上抓 (靜態的或 javascript 所動態產生的) 網頁畫面快照截圖, 可以這樣做: cutycapt --url=https://www.openstreetmap.org/#map=17/24.06870/120.71315 --out=cyut.jpg 有些網站需要花比較多的時間執行 javascript 填入畫面元素, 那就加上 --delay=3000
ckhung

網頁爬蟲終極武器: puppeteer

1 週 ago
下載靜態網頁可以用 wget 或 curl。 那如果是 javascript 動態產生/填寫的頁面呢? 如果只需要網頁快照截圖, 可以用 cutycapt; 如果需要取得 javascript 所產生的文字內容, 那就用 puppeteer。 (字的原意: 操偶師) 它會呼叫 chrome 幫它執行頁面的 javascript, 但不會真的在桌面上打開 chrome 視窗。 在這種模式下運作的瀏覽器, 稱為 headless browser。 今天我們要用 puppeteer 及 headless chrome 來製作網頁爬蟲。 Puppeteer 是用 node.js 寫的, 所以要先 安裝 node.js。 再來, 原本想要用 npm install -g puppeteer 把 puppeteer 安裝在系統目錄 (全域安裝)。 可是我在 debian 上用 -g
ckhung

gtk3 軟體的外觀設定: 請給我明顯的 「目前分頁」 頁籤!

2 週 1 天 ago
有一個小問題一直困擾著我。 這幾年我用的 OS 是 lubuntu, 所以自從 roxterm 作者不再更新之後, 預設的 lxterminal 就一直是我的日常終端機。 但不論是 lxterminal 或是新發現的 sakura 終端機, 它們的每個分頁上方的頁籤都長得一模一樣, 全都是灰色。 今天終於成功修改設定檔, 讓 「目前分頁」 (active tab) 變得比較醒目 -- 雖然還是沒有很懂 gtk 的運作。 首先下 ldd /usr/bin/sakura | grep -i gtk (或 lxterminal 也一樣) 會發現 sakura 跟 lxterminal 連結的函式庫都是 gtk3, 所以要朝這個方向搜尋外觀的設定 -- gtk3 的設定方式跟 gtk2 很不一樣。 爬了好多問答文, 照做都失敗。 後來發現 lxappearance 指令叫出的設定對話框
ckhung

用 lynx 加 perl 的 csv 句型從網頁裡的表格產生試算表

2 週 2 天 ago
如果說 三大 regexp 句型 是 「懶得學 perl 程式語言的系統管理員必學的三句 perl」, 那麼今天要介紹的就是第四重要的 perl 句型: perl -F, -nale 'print join(", ", @F[2,5,6])' 姑且就稱它為 perl 的 csv 句型吧。 它跟文字瀏覽器 lynx 合作, 可以把網頁的表格抓下來變成試算表。 當你不想為了一點小事開啟 calc 時, 就用它們來馴服 .csv 檔吧。 我們拿台積電歷年每季財務報表摘要來練習。 先把網頁原始碼抓回自己的硬碟, 才不會一直製造無謂的網路流量: lynx -source 'https://goodinfo.tw/StockInfo/StockBzPerformance.asp?YEAR_PERIOD=9999&RPT_CAT=M_QUAR_ACC&STOCK_ID=2330' >
ckhung

Windows 桌面驚魂記

3 週 1 天 ago
太可怕了! 老朋友要分享大檔給我, 竟然開了他的 windows 桌面讓我登入。 我試著用 rdesktop 連線, 得到錯誤訊息 「ERROR: CredSSP: Initialize failed, do you have correct kerberos tgt initialized ? Failed to connect, CredSSP required by server.」 搜尋到救星解答: 採用 xfreerdp。 在 ubuntu 18.04 底下, 安裝 freerdp2-x11 套件, 然後 xfreerdp /u:帳號名稱 /v:伺服器的IP /drive:gregbasket,/home/ckhung/share 回答完密碼之後就出現了駭人的 windows 桌面。 握著滑鼠的手顫抖地點選 「我的電腦」, 會看到有一顆硬碟/隨身碟名為 "
ckhung

slax: 330MB 的圖形桌面

1 個月 ago
Tomas Matejicek 推出 (羽量級 linux) slax 9.6.6 。 現在改採 debian 作為基底, 採用 fluxbox 作為視窗介面, 但一樣只佔不到 280MB 的空間 (僅能使用英文)。 客製化的過程變得更簡單 -- 我做了一個 50MB 的正體中文勉強可用外掛模組, 只有 sakura 終端機可以輸入中文; 瀏覽器只能讀中文不能直接輸入 (可以剪貼), 卡關太久, 沒有進展, 乾脆直接把這個半成品放出來請大家幫忙解決問題。 一、 安裝到隨身碟上 請到 朝陽科大 下載 32bit 的 iso 檔跟我所製作的 zh_TW-32bit-9.6.6.sb 中文模組。 (或者 iso 檔當然也可以從官網下載) 下載回來的 iso 直接就可以拿來燒成光碟開機了。 不過放到隨身碟上會比較好用。 以下步驟在平常我的工作系統 lubuntu 18.04 上面 (
ckhung

科普貴教你天天自助 calc 便宜股撈明牌

1 個月 1 週 ago
這篇其實是 LibreOffice Calc 的 「連結外部 csv 檔」 教學, 只是拿台股來作例子比較有實用感、 可以提高大家的學習動機 :-) 不需要唸資訊科系、 不需要寫程式, 只需要一部 linux 電腦, 並且略熟試算表函數, 例如 vlookup 及 iferror 等等即可操作。 [不怕偶爾需要自己除錯 php/js 的程式設計師可以安裝 (我寫的網頁版程式) jesp -- Join, Evaluate, Sort, and Print (csv) Tables on a web page。] 一、 一日明牌 請先下載 stock.ods, 但是 先不要打開它!。 這個試算表包含四張工作表: price: 某日所有個股股價 div: 所有個股歷年現金股利 divty: 所有個股今年現金股利 main: 主表。 div 原本僅含 2017 年或更早的資料
ckhung

逢低買進, 越跌越買? 請先確認不是「空頭排列」

1 個月 1 週 ago
貴哥今年才開始認真學股票, 學了一點點 粗淺的財報常識, 甚至寫了不專業的撈股程式及 撈股試算表 來自嗨嗨(害?)人。 至於 K 線/技術分析, 雖然爬了很多文 (中英文!) 但都不得要領。 最近終於領悟到一件超級重要的事, 分享給其他跟我一樣技術分析能力趨近於零的股友們: 如果你這一輩子只打算花半小時研究 K 線, 那就以搞懂這句話為目標就好: 空頭排列時嚴禁下買單! 股海老手看到這句話應該會很訝異: 這不是最簡單的常識嗎? 是的; 但對我們這些股票麻瓜而言, 當這句話跟其他複雜的狀況與規則混雜在一起時, 早就一頭霧水眼花撩亂霧煞煞、 完全失焦找不到重點了。 所以我就是要針對這句話寫一整篇文章、 加深印象, 讓小格的讀者們別再重蹈我的覆轍。 很多條移動平均線可能會產生各種複雜交錯的排列狀況。 其中 「多頭排列」 跟 「空頭排列」 是最容易理解的幼稚園程度兩種線型。 本篇不
ckhung

拿公投統計資料學 pandas

2 個月 1 週 ago
以前我都用 perl 處理文字資料, 例如 regexp 跟 csv 句型 都很好用。 但是現在大家都用 python, 我當然也要跟著趕一下流行啊~~ 處理試算表類型的資料時, python 程式設計師最常用 pandas 函式庫。 它也是玩機器學習或資料科學一定要學東西。 繪圖的話, matplotlib 跟 plotly 都很好用。 就讓我們拿中華臺北人很有感的十項案公投結果統計資料來當 pandas / matplotlib / plotly 的入門範例吧! 我用 python3 測試, 所以先這樣安裝: pip3 install pandas 然後進入 python3 練習。 再到 Pandas Cheat Sheet 下載一頁的 pdf 摘要。 我學的時候基本上也就只以這一頁為主, 看不懂的地方再另外搜尋補充。 但作者 Karlijn Willems 所用的版本
ckhung

DataTables 的固定表頭、 排名、 置中

2 個月 3 週 ago
先前寫的小程式 jesp 可以拿來把好幾個 csv 檔 join 在一起, 並且方便按照任何欄位排序。 其中表格資料好用的互動排序功能, 靠的就是 jQuery 的 DataTables 外掛。 兩年多前曾在 「jQuery 無痛讀檔」 裡初次使用; 現在重學一次, 並且選用幾個好用的效果。 一、 勾選套件決定 stylesheet 與 javascript 引用句 首先到 Download Builder 勾選你要的樣式/元件, 以決定要放哪幾句 stylesheet 跟 javascript 到你的 html 或 php 頁面裡。 如果只用最陽春的功能, 最簡單的勾法就是: styling 勾 DataTables、 packages 勾 jQuery 3 跟 DataTables (當然, 如果你已另外引用 jQuery, 就不要勾 jQuery 3)、
ckhung

處處訝異的怪怪語言 php

2 個月 4 週 ago
最近用 php 寫了一個小程式 jesp 可以拿來把好幾個 csv 檔 join 在一起, 並且讓訪客可以很方便地按照任何欄位排序。 過程當中發現 php 語言有很多怪怪的地方, 包含表達能力不足的設定檔、 用過一次就會有意外副作用的 referenc 變數、 不能疊起來的三元運算子。 這真是一個處處充滿詫異的神奇語言啊~~ 一、 設定檔 你的 php 程式應該以什麼方式讀設定檔? 最多人推的解答是採用 include。 但我希望使用者可以在網址列上用 query string 指定設定檔, 而 以這種方式使用 include 會開啟重大安全漏洞 -- 例如你的伺服器上的其他用戶可以藉此以你的身份執行他寫的程式。 第二名的解答是採用 parse_ini_file 。 可是 ini 檔案格式的表達力有限, 無法表達多層的陣列。 所以最後決定採用 json 格式。 注意:
ckhung

在手機上開啟本地的 html 跟 svg 檔

3 個月 ago
Android 作業系統的自由度遠遠不及 GNU/Linux。 例如瀏覽器的功能明明就可以開啟 html 檔或 svg 檔, 但若這個檔案在本地而不在雲端, android 手機就是不提供 「以瀏覽器開啟」 的選項。 我覺得這是 google 的陰謀 -- 就像 chrome 的禁讀令 一樣, 它希望你把一切都移到雲端去, 或是一定要逼你打開一個特定的 app, 總之就是不讓你很方便地用通用的瀏覽器做事。 不管是不是陰謀, 總之這個沒有意義的限制其實是可以繞過去的: Svg 圖檔 (含 sozi 簡報) 及 html (在某些情況下, 甚至包括內含 javascript 的 webapps) 也都可以透過 「open in browser」 這個 app 搭配適當的瀏覽器來開啟。 一開始我是為了開 .svg 檔而搜尋到 SVG redirect。 安裝之後, 每當你從檔案總管理
ckhung

novnc: 有瀏覽器就可以連上線的遠端桌面

3 個月 2 週 ago
VNC 是遠端桌面連線程式, 也可以當成電子白板或廣播教學軟體來用。 以前就有聽說過: 如果採用 novnc, 那麼客戶端可以不必安裝任何程式, 只要有瀏覽器就可以連線。 這學期我終於開始用這個方法上課。 如上圖: 以廣播教學為例, 在老師機上除了啟動 vnc 伺服器之外, 另外再啟動 websockify (圖中的 "launch.sh" 會去呼叫 websockify)。 後者的功能基本上就是把 vnc 協定與 http 協定互相翻譯, 。 你也可以說它是一個 vnc 與 http 之間的轉接頭。 這樣一來, 不論是老師或學生, 都可以用瀏覽器透過 websockify 跟 vnc 伺服器連線。 首先安裝軟體。 你可以用 apt 的方式安裝 python-websockify 套件, 也可以省略此步驟, 等一下讓 novnc 自動幫你處理。 另外, 也要從 github
ckhung
已檢查
18 分鐘 37 秒 ago
大人問小孩: 「全世界的玩具隨便你挑? 這怎麼可能? 如果我要的玩具只有一個, 正好又被別人借走了呢?」
「玩具閘門後面, 每種玩具永遠只有一個。 任何人想玩, 隨時都可以生一個複製品給你。
這裡沒有人搶玩具。 這裡是 玩具烏托邦。」
* * * *
貴哥在這裡分享自由軟體跟免費雲端工具的知識與技術, 目的是希望打破 「品牌忠誠肥羊」 們的迷思、 要「讓數位高牆倒下」 (請搜尋)。

(還有其他雜七雜八不想放到 「資訊人權貴ㄓ疑」 的筆記跟感言)
Subscribe to 玩具烏托邦 feed