2020年1月20日 星期一

xls 或 xlsx 批次轉成 csv

看到 非典型大選分析 的漂亮地圖版大選資料視覺化, 我也手癢了。 到 中選會資料庫 的歷屆公職選舉資料, 找到 2020-第 10 屆 立法委員選舉, 下載了 「各投票所得票明細及概況」, 用 unzip -O cp950 檔名.zip 解壓縮。 下一個問題是: 要怎麼把一堆 xls 檔轉成 csv 檔? 對, 可以用 libreoffice 一個一個打開、 另存新檔。 可是我希望可以用指令批次處理啊~

2020年1月16日 星期四

pip 套件繪製相依圖

我的 python 程式都是小程式, 但經常用到很多相依套件。 (因為我既懶惰又很會搜尋 ^_^) 偶爾會想知道: 到底這些套件彼此之間有什麼樣的相依性? 例如有一天想畫股票 K 線圖, 爬文得知至少有 mplfinance 跟 dash 兩個現成函式庫可用。 那到底它們各自又會引進哪些函式庫呢? 交集多嗎? 這時就可以用 pipdeptree 來畫圖。 以 python3 為例, 用 pip3 install --user pipdeptree 安裝 pipdeptree, 並且也必須安裝 「想要研究相依性的那些套件」, 然後: pipdeptree --graph-output svg -p dash,mplfinance > dash-mplfinance.svg 就產生一張壯觀的 svg 圖, 可以用瀏覽器打開來欣賞。

dash 跟 mplfinance 這兩套件各自引進哪些函式庫呢? 交集多嗎?

2019年12月5日 星期四

哼旋律搜尋歌曲

很久以前曾把玉山銀行送的音樂 CD 轉成 mp3, 前一陣子才拿到車上聽。 前幾天聽到其中一首好療癒而旋律卻又好簡單的歌, 不斷重播, 感覺靈魂都要飛起來了... 可是找不到原來的 CD 了啊~ 今天用 「search song by melody online」 找到 midomi。 哦, 需要我哼歌啊~ 我害羞~ 於是安裝 poc-streamer 套件, 把主旋律截出來: mp3cut -o ~/main.mp3 -t 00:14-00:40 05-audiotrack.mp3 再開一個終端機用 mpg123 ~/main.mp3 播音樂, 同時把麥克風堵到喇叭前面, 在 midomi 上按下麥克風按鈕, 真的找到一首 「春の日の花と輝く」, 原來這是愛爾蘭民謠。

接著用 「irish folk song spring」 找不到我要的歌, 回頭用 「春の日の花と輝く」 終於找到英文歌名: 「Believe Me, If All Those Endearing Young Charms」。 我喜歡聽樂器版, 於是搜尋時加上 「intrumental」。 點來給相同頻率的朋友們聽:

2019年10月12日 星期六

Keras MobileNet 版的圖片辨識遷移學習

這學期的 AI 課程改用 google colab。 因為它對 caffe 的支援不佳, 所以先前 用 caffe 做遷移學習的範例 不能拿來上課了。 還好搜尋到很棒的一篇教學文 Transfer Learning using Mobilenet and Keras 以及伴隨的 github 專案 ferhat00/Deep-Learning, 於是改寫一下重新上架成為: ckhung/keras-mobilenet。 圖像辨識的整個流程變得超級簡單!

先下載 ckhung/keras-mobilenet 及訓練資料集 dog_behaviors.zip, 再上傳到你的 google drive。 假設你已玩過 google colab, 那麼從 google drive 裡面打開 km-transfer.ipynb 應該就會自動進入 colab。 接下來就照著 km-transfer.ipynb 做囉!

google 圖片搜尋批次下載

google 圖片搜尋 「dog drinking」 玩機器學習時, 需要有大量的訓練資料。 以圖片辨識來說, google 圖片搜尋是最佳幫手。 但是要手動把搜尋結果一張一張存檔, 很累呀! 這時可以用 github 上 (有五、六千顆星) 的 google-images-download 來批次下載。

2019年9月7日 星期六

commento 幫任何靜態網頁加上留言/投票功能

想幫你的網站加上留言功能嗎? 熱門的 disqus 有一些隱私疑慮; 於是我搜尋到 commento。 比較簡單的方法是 到官網註冊付費使用。 點 「Try the Demo」、 在文字輸入框打幾個字、 (不必登入) 勾選 「comment anonymously」、 點 「add comment」, 你的留言就出現了。 管理員也可以設定禁止 (或審查過才准發表) 匿名留言。 至於投票, 當然一定要登入, 算是簡單版的防止灌票。 畢竟我是因為官網強調尊重隱私而被吸引過來的, 當然就選擇自己架囉。 以下安裝設定筆記分別在 Debian 9 及 lubuntu 18.04 執行。 自己架的版本只成功了 http 而沒有 https。

2019年9月2日 星期一

gmail 打包檔一片亂碼? 交給 hypermail 轉成 html

每年暑假例行的 gmail 打包下載, 抓回來解壓縮後的 *.mbox 檔都是一堆亂碼。 如果從頭到尾都是 base64 編碼的內容那也還容易處理 -- 就用 base64 -d 指令即可解碼。 最煩的是: 在 *.mbox 裡面, base64 編碼的內容混雜鑲嵌在正常 ascii 文字當中。 偶爾需要回頭找前幾年的信件, 就必須用 mutt -f abc.mbox 之類的方式, 把每個 *.mbox 逐一手動打開來檢查。 今年終於找到救星: hypermail。 原來過去十幾年來, W3C 一直拿它來做通信論壇歸檔管理。 因為太穩定了, 所以很久沒有更新了, 在 ubuntu 套件庫裡面找不到, 只好去 github 抓原始碼回來編譯。

2019年8月22日 星期四

暫時隱藏 android 手機相片資料夾

近日開始, 從香港入境中國, 會被檢查手機。 其實有兩個簡單的方法可以暫時隱藏手機相片資料夾。 這是 security by obscurity (which is no security!) 用白話講, 這是很弱的偽裝, 只夠對付忙碌的第一線檢查人員; 如果一開始就已被盯上、 已被列入特殊觀察名單, 那麼這兩招其實是無效的。

2019年8月19日 星期一

網頁表格轉 csv, 瀏覽器 inspector 手動剪貼版

玩資料視覺化, 經常需要從網頁上下載表格, 再轉成 csv。 以前就曾搜尋到 sebsauvage.net 上面的 html2csv.py, 後來忘記了; 最近又重新發現一次。 很簡單: python2 html2csv.py abc.html 它會把 abc.html 裡面的所有表格串在一起, 產生一個 abc.csv 。 如果有合併列或合併欄等等比較複雜的狀況, 還是需要後續處理, 但至少比自己寫 regexp 簡單多了。 全文完。

下載 html 檔 喂~ 這樣就結束? 這篇未免太 ㄌㄢˋ ㄩˊ ㄔㄨㄥ ㄕㄨˋ 了吧! [現在有同音異字的成語太多了, 我都不知道國字該怎麼寫才對...] 至少應該要交代一下如何取得 html 啊。 如果是大量的靜態網頁, 可以用 wget 或 lynx -dump 或 curl 取得。 有可能需要 設定 user agent 才不會被網站拒絕。 如果是 javascript 所動態產生的、 上述指令無法取得的網頁呢? 如果頁面數量很多, 那就考慮用 puppeteer。 如果只是單一或少數的 [js 動態產生的] 頁面, 那就手動另存新檔就好。 可是有一些 js 頁面需要你點幾個地方之後, 才會動態填值進表格。 這時 firefox 的 console 就很好用了 -- 即使不是 js 程式設計師也值得學一下。

2019年8月7日 星期三

尺規作圖遊樂場 Dr. Geo

過圓外一點 C 做切線 CE 跟 CF 還記得小時候學的 (沒有刻度的) 直尺與圓規作圖嗎? 光用這兩個工具, 就可以畫出相似三角形、 三角形的外接圓/內切圓等等圖形。 這是很燒腦又很好玩的益智遊戲。 用電腦畫更好玩, 因為繪圖完成後, 你可以用滑鼠抓著原圖的頂點或圓心, 改變原圖 (例如三角形) 的大小/形狀/位置的同時, 看著衍生圖 (例如外接圓或內切圓) 跟著變動, 超有成就感! 十幾年前我寫過 DrGeo: 物理老師也會心動的幾何教學玩具。 後來 Dr. Geo 大改版; 幾個月前得知: 新版的 Dr. Geo 不僅支援中文顯示, 也支援中文輸入, 今天終於要來重寫一篇新版的介紹文了。

2019年8月3日 星期六

簡單語音指令辨識

完整的自然語言語音辨識很複雜; 但在很多應用場合中, 如果可以讓用戶以十來個簡單語音指令控制電器/電腦/apps, 就已經很方便了, 而想要訓練這樣的類神經網路, 門檻當然比完整的語音辨識低很多。 Simple Audio Recognition (以下簡稱 SAR 一文) 所介紹的 tensorflow 原始碼當中的 speech_commands 範例, 就是這樣的工具。 餵一段一秒鐘的聲音, 它會判斷這是 "yes", "no", "up"、 "down"、 "left"、 "right"、 "on"、 "off"、 "stop"、 "go" 當中的哪一個語音命令, 或是未知的聲音 (UNKNOWN) 或是無聲 (SILENCE) (其實可能是很小聲的背景噪音)。 假設讀者已經先照著 貴哥的 colab 初學筆記 認識了 colab 的基本操作, 今天這篇文章將接續著帶大家用 colab 把 speech_commands 的操作流程幾乎走一遍。

2019年7月13日 星期六

貴哥的 colab 初學筆記

Google colaboratory 提供短暫 (數小時) 的免費雲端 GPU 算力, 真是深度學習初學者的福音啊! 前提是你要有 google drive 的帳號, 並且略會操作 Jupyter Notebook。 網路上已有很多入門教學文; 貴哥一看到有 shell 可用, 忍不住就好奇多探索一些, 於是也寫一篇自己的初學筆記。 基於 「站在巨人肩膀上」 的原則, 比較多人介紹的基本操作就只簡單帶過, 細節可參考 台大機械所 Wei-Hsiang Wang 的 Colab 基本操作筆記 (中文) 及 fuat 的 Google Colab Free GPU Tutorial (英文)