想知道誰最常跟莉雅公主同框嗎? 不用人工計算,我們用幾行指令就能畫出來。
StarWars-social-network
這個專案整理了六集的星際大戰裡每一集內的角色同框頻率。
我們用 graphviz 把它畫出來, 順便學一下如何用 jq 把 json 格式轉成 csv,
以及 perl 處理 csv 檔的好用模式。
2026年1月22日 星期四
星際大戰角色同框頻率視覺化 (graphviz 飆速初體驗 / 用 jq 把 json 轉 csv / perl 的試算表模式)
2025年12月6日 星期六
visidata: 終端機下的輕薄短小試算表
大推! 文字視窗底下的試算表軟體 visidata 超級輕薄短小,
我已使用好幾個月了, 雖然還不是很熟, 但已足以處理大部分簡單的工作。
習慣 vim 按鍵的人, 會很容易上手。
它可以處理 csv、 ods、 xlsx、 ... 等等 許多格式。
我偶爾拿它來處理 json, 不過大部分時候還是處理 csv 檔。
你可以在 visidata 裡面寫 python 運算式計算新欄位,
但無法儲存公式, 只能儲存運算結果, 適合做一些簡單、 用丟即棄的運算。
2025年7月25日 星期五
告別手動標地點! 共筆維護試算表、地圖自動更新 (不分尺寸版)
想像一個團隊, 每位成員分頭去收集一些 (不涉及隱私或機密、 可以公開的) 地址, 要放到一張共同的地圖上面。 除了地址之外, 還有一些需要經常更動的欄位, 例如各地點的開放時間、 注意事項、 臨時公告等等。 什麼樣的工作流程會比較有效率呢? 我會開一張共筆的試算表, 例如 ethercalc 或是 google sheet, 裡面含有名稱、地址、經緯度、備註以及其他文字資訊等等欄位, 並且分享給所有成員, 然後把這張試算表餵給 umap 吃。 於是每當任何成員修改 [地址經緯度以外的] 其他任何欄位, 地圖瀏覽者只要重新整理網頁, 就會看到最新最及時的資訊。 至於經緯度, 可以透過 TGOS 手動批次更新。 編輯 google 試算表的門檻比編輯地圖低很多, 這樣的安排便於讓任何人都可以參與。 我們拿 台派店家 當例子。 照以下做完之後, 會得到像這樣的成品: 台派店家地圖。
先查看 原始資料的網址, 找出試算表代號 ("/d/" 後面那一長串) 以及分頁代號 ("gid=" 後面的數字)。 在 bash 底下, 先設定變數:
gs_id=15E0sastmidjk4CJlJJZoKZgbp5He5SKaUCbo4eMMlYY gid=418920722
然後 wget -O tai-shops.csv "https://docs.google.com/spreadsheets/d/$gs_id/export?format=csv&gid=$gid"
就把三千多筆資料抓下來啦!
不過, 因為 google 回應時, 會送出 redirect 重新導向下載專用的伺服器,
所以如果用 curl, 必須加上 -L 選項:
curl -L "https://docs.google.com/spreadsheets/d/$gs_id/export?format=csv&id=$gid" > tai-shops.csv
2025年3月11日 星期二
共筆維護試算表、地圖自動更新 - 小尺寸版
想像一個團隊, 每位成員分頭去收集一些 (不涉及隱私或機密、 可以公開的) 地址, 要放到一張共同的地圖上面。 除了地址之外, 還有一些需要經常更動的欄位, 例如各地點的開放時間、 注意事項、 臨時公告等等。 什麼樣的工作流程會比較有效率呢? 我會開一張共筆的試算表, 例如 ethercalc 或是 google sheet, 裡面含有名稱、地址、經緯度、備註以及其他文字資訊等等欄位, 並且分享給所有成員, 然後把這張試算表餵給 umap 吃。 於是每當任何成員修改 [地址經緯度以外的] 其他任何欄位, 地圖瀏覽者只要重新整理網頁, 就會看到最新最及時的資訊。 至於經緯度, 可以透過 TGOS 手動批次更新。 編輯 google 試算表的門檻比編輯地圖低很多, 這樣的安排便於讓任何人都可以參與。
如果你的試算表較大 (超過100列?), 本篇可能不適用。
請跳到第三節見新版連結。
推薦改參考更簡單、 可以處理更大資料檔的另一篇:
共筆維護試算表、地圖自動更新 - 大尺寸版。
至於您現在正在閱讀的這篇 「小尺寸版」, 則只剩歷史價值。
2025年1月10日 星期五
把所有帳號的信件都接收到自己的伺服器上 (三): 從 zimbra 匯出 csv 格式的通訊錄; 匯入 neomutt 與 posteo
延續 mbsync + neomutt + msmtp 這一篇, 接下來我想把 zimbra (使用多年下來系統自動建立) 的 「姓名 email」 通訊錄搬到 neomutt 跟 posteo。 先講心得: 過程當中用 csv 檔比較方便處理; 處理 vcf 檔的工具太少了。 反正最後要轉 vcf 很簡單。
2024年5月29日 星期三
tesseract 之數字表格圖片轉試算表 (最簡單的 OCR 應用)
老婆:「快點啦! 報稅軟體都幫你下載好了,快來算啦!」
好吧, 就用她的 windows 電腦一路 「下一步」 快速通關。
謝謝財政部。 可是身為很多家公司的小股東的她,
還想要把所有股利收入逐筆放入試算表。
問題是: 下載的 pdf 是圖檔, 讀不出文字!
幹嘛啊, 這又沒有保護作用, 只是增加納稅人的麻煩而已, 真沒意思。
沒關係, 那就把 pdf 檔搬到我的電腦, 用 OCR
(optical character recognition) 工具來讀吧。
2023年4月29日 星期六
試算表的 unpivoting/melting
有些試算表它的許多欄位恰好構成資料空間的某種分割, 例如12個月份、 各類交通工具、 4種血型、 全國22個縣市... 等等。 有時候我們會希望把這 N 個欄位合併成兩個欄位, 一個欄位紀錄原表格中的欄位名稱, 另一個欄位紀錄原表格的內容, 從而產生一個 「比較瘦、 N倍高」 的新表格。 這個轉換動作稱為 unpivoting 或 melting。 這篇文章 的圖很清楚, 大推! 也可以參考 用 google 試算表做 unpivoting 的中文教學。
2023年4月28日 星期五
「電力能源來源分類」資料整理與驗證
右圖是我看著 electricity-mix.csv
(製作過程)
整理出來的 「電力能源來源分類」 猜測。
這種樹狀的階層式結構 (hierarchy) 感覺很好拿來畫 treemap 之類的圖形。 (另文詳)
為了驗證這些猜測:
2023年4月24日 星期一
幫 OWID 資料加上三字元 iso 國碼及所在大陸
上 「資料視覺化」 課程的時候, 想要拿 electricity mix 這個資料集做例子。 發現裡面混雜著個別的國家、 聯盟 (G20、 OECD) 跟大陸 (歐/亞/非/..), 很難整理。 另一方面我也希望標示每個國家所在的大陸, 但是原始資料集裡面並沒有這項資訊。 於是我找到 List of Countries by Continent 這個表格, 並且 在 owid dataset 發問 之後修改了我的小程式 country-encode.py, 以後要整理 OWID 的資料就方便多了。
2021年12月5日 星期日
清點密碼貨幣資產
最近迷上密碼貨幣, 爬了好多文, 心得不知從何寫起。 (為什麼不應該叫做「加密貨幣」? 因為它只用到 非對稱式加解密 的 「數位簽章」 那一半, 並沒有用到它的 「加解密」 那一半。) 今天先分享一篇最單純的心得: 如何清點你的密碼貨幣資產? 我在好幾個交易所開了帳戶, 也買了好幾種密碼貨幣。 買到後來到底賺錢還賠錢連自己都頭昏搞不清楚了。 (昨天的瘋狂爆跌過後, 現在當然很明顯是賠錢的。 真希望我是今天才開始買的...) 所以建了 這個Google試算表。 大家可以拷貝回去修改成自己的版本。 裡面的數值當然只是示意, 並非我真實的投資金額, 不過確實大略反應我的資產配置重點。
2020年3月14日 星期六
被 genfromtxt 打敗
先前寫 python 程式時, 一直都用 自己手工打造的 csv 讀檔副程式; 但基於 「站在巨人肩膀上」 的理念, 仍舊希望改用別人寫好的現成函式庫。 剔除 速度超慢且有點難用的 pandas 之後, 發現 numpy 的 genfromtxt 貌似很好用。 (比 loadtxt 有更多彈性。) 結果在一個奇怪的 bug 卡好久 :-(
2020年2月1日 星期六
scatplot: 一張試算表, 散點圖畫到飽
大選過後, 一直想畫 「X黨 vs Y黨在各縣市得票比例對照圖」。
過年時節在家躲疫情, 終於有時間完成了一個小專案放到 github 上:
scatplot 。
也請參考舊文
「三種方式產生 scatter plot / bubble chart」。
不只是程式宅, 我相信政黨智囊團、 財報型股民、 社會科學家、 自然科學家..
任何需要以視覺化方式理解數值資料的朋友們也會喜歡這幾個 demo 網頁:
希臘式優格比較表、
揪出手機上的腫脹軟體、
LLM 比較表 br26、
LLM 比較表 aa25、
全球各國電價比較表、
陳時中團隊的 covid 19 防疫成績、
資料視覺化破解源自黃珊珊的假消息、
股票財報指標圖、
新聞頻道轉台運動、
2018 兩政黨各縣市得票比例對照圖、
太陽系天然衛星軌道常數、
[2022/12 後續有再補充與更新較新的圖片與文章連結]。
2020年1月20日 星期一
xls 或 xlsx 批次轉成 csv
看到
非典型大選分析 的漂亮地圖版大選資料視覺化, 我也手癢了。
到 中選會資料庫
的歷屆公職選舉資料, 找到
2020-第 10 屆 立法委員選舉, 下載了
「各投票所得票明細及概況」, 用
unzip -O cp950 檔名.zip 解壓縮。
下一個問題是: 要怎麼把一堆 xls 檔轉成 csv 檔?
對, 可以用 libreoffice 一個一個打開、 另存新檔。
可是我希望可以用指令批次處理啊~
2019年8月19日 星期一
網頁表格轉 csv, 瀏覽器 inspector 手動剪貼版
玩資料視覺化, 經常需要從網頁上下載表格, 再轉成 csv。
以前就曾搜尋到
sebsauvage.net 上面的 html2csv.py,
後來忘記了; 最近又重新發現一次。
很簡單: python2 html2csv.py abc.html 它會把 abc.html
裡面的所有表格串在一起, 產生一個 abc.csv 。
如果有合併列或合併欄等等比較複雜的狀況, 還是需要後續處理,
但至少比自己寫 regexp 簡單多了。 全文完。
喂~ 這樣就結束? 這篇未免太 ㄌㄢˋ ㄩˊ ㄔㄨㄥ ㄕㄨˋ 了吧!
[現在有同音異字的成語太多了, 我都不知道國字該怎麼寫才對...]
至少應該要交代一下如何取得 html 啊。 如果是大量的靜態網頁,
可以用 wget 或 lynx -dump 或 curl 取得。
有可能需要
設定 user agent 才不會被網站拒絕。
如果是 javascript 所動態產生的、 上述指令無法取得的網頁呢?
如果頁面數量很多, 那就考慮用
puppeteer。 如果只是單一或少數的 [js 動態產生的] 頁面,
那就手動另存新檔就好。
可是有一些 js 頁面需要你點幾個地方之後, 才會動態填值進表格。
這時 firefox 的 console 就很好用了 --
即使不是 js 程式設計師也值得學一下。
2019年6月27日 星期四
文字檔控用 SQL 語法肉博 csv
2018年12月11日 星期二
拿公投統計資料學 pandas
2018年11月26日 星期一
DataTables 的固定表頭、 排名、 置中
先前寫的小程式 jesp 可以拿來把好幾個 csv 檔 join 在一起, 並且方便按照任何欄位排序。 其中表格資料好用的互動排序功能, 靠的就是 jQuery 的 DataTables 外掛。 兩年多前曾在 「jQuery 無痛讀檔」 裡初次使用; 現在重學一次, 並且選用幾個好用的效果。
2018年8月30日 星期四
用 lynx 加 perl 的 csv 句型從網頁裡的表格產生試算表
如果說
三大 regexp 句型 是 「懶得學 perl 程式語言的系統管理員必學的三句 perl」,
那麼今天要介紹的就是第四重要的 perl 句型:
perl -F, -nale 'print join(", ", @F[2,5,6])'
姑且就稱它為 perl 的 csv 句型吧。
它跟文字瀏覽器 lynx 合作, 可以把網頁的表格抓下來變成試算表。
當你不想為了一點小事開啟 calc 時, 就用它們來馴服 .csv 檔吧。
2018年8月28日 星期二
科普貴教你天天自助 calc 便宜股撈明牌
這篇其實是 LibreOffice Calc 的 「連結外部 csv 檔」 教學, 只是拿台股來作例子比較有實用感、 可以提高大家的學習動機 :-) 不需要唸資訊科系、 不需要寫程式, 只需要一部 linux 電腦, 並且略熟試算表函數, 例如 vlookup 及 iferror 等等即可操作。
[不怕偶爾需要自己除錯 php/js 的程式設計師可以安裝 (我寫的網頁版程式) scatplot: 一張試算表, 散點圖畫到飽 ]
大人問小孩: 「全世界的玩具隨便你挑? 這怎麼可能?
如果我要的玩具只有一個, 正好又被別人借走了呢?」