拿公投統計資料學 pandas

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

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

2 週 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

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

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

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

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

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

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

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

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

1 個月 1 週 ago
VNC 是遠端桌面連線程式, 也可以當成電子白板或廣播教學軟體來用。 以前就有聽說過: 如果採用 novnc, 那麼客戶端可以不必安裝任何程式, 只要有瀏覽器就可以連線。 這學期我終於開始用這個方法上課。 如上圖: 以廣播教學為例, 在老師機上除了啟動 vnc 伺服器之外, 另外再啟動 websockify (圖中的 "launch.sh" 會去呼叫 websockify)。 後者的功能基本上就是把 vnc 協定與 http 協定互相翻譯, 。 你也可以說它是一個 vnc 與 http 之間的轉接頭。 這樣一來, 不論是老師或學生, 都可以用瀏覽器透過 websockify 跟 vnc 伺服器連線。 首先安裝軟體。 你可以用 apt 的方式安裝 python-websockify 套件, 也可以省略此步驟, 等一下讓 novnc 自動幫你處理。 另外, 也要從 github
ckhung

YOLO 自動框出相片裡的人/動物/生活用品

1 個月 2 週 ago
今天介紹的這個神奇好物, 看圖就知道了。 我偷懶把三張圖擠在一起。 底層是繁忙的街道圖; 左上是森林裡幾隻吃素的 (絕對不包含韓國瑜); 右上是巴黎鐵塔餐廳的一張餐桌。 神奇的 YOLO 技術 把圖裡的人/動物/物件都標示出來了, 而且, 在 cpu-only 的電腦上, 每張圖只花幾秒鐘! 關於 R-CNN、 Fast R-CNN、 Faster R-CNN、 YOLO、 SSD, 請見 這篇; 小格不太談理論 (因為我沒研究 ^_^), 只介紹好玩的玩具。 我從 原作者的 repo 把程式碼 clone 過來 我自己的 repo 並小改了一下。 下載我包的 docker: docker pull ckhung/keras-yolo3:18B 這裡面包含上面的 github repo。 如果程式碼有更新, 可能只會更新 github 而不會更新 docker image。
ckhung

程式設計老手的股市初學淺見

1 個月 3 週 ago
多年以前就買過股票, 但根本就是矇著眼睛亂買, 也曾聽信名嘴買到下市股票。 最近為了籌退休金, 才開始認真爬文讀書學習股市常識。 還沒開始賺錢, 但現在買得很有方向感、 很心安。 真的, 沒有做功課就不要隨便進股市; 但做功課其實並沒有一開始想像的那麼困難。 對程式設計師來說, 買正確的股票, 比銀行定存或儲蓄險都要好太多倍了。 買儲蓄險之前, 請先搜尋 「儲蓄險 提前解約」。 當初我也覺得自己不會理財, 也鐵齒地認為自己不會需要用到那麼多現金, 所以每存了一些現金, 就買儲蓄險。 現在學會買股票, 才 (太晚) 體認到: 現金放在儲蓄險裡面因而失去流動性, 也是一種很大的風險。 對散戶而言, 現在的買股環境比二十年前的環境好太多了, 因為證交所及許多網站提供了豐富的公開資訊。 需要收盤價、 EPS、 ... 任何資訊, 只要搜尋一下, 就可以找到個股資訊, 進而知道如何用
ckhung

快速畫風移轉: 你的圖片/相片/影片, 以名畫家的動漫風格重現!

2 個月 1 週 ago
兩年前的此時, 畫風轉移魔法引發熱烈討論。 我有自己架起來玩過, 很好玩, 但光是轉一張圖就要好幾個小時。 這兩年來, 不斷有人提出改良版的演算法。 目前最佳的版本稱為 fast style transfer, 如果不計算預先訓練畫風的時間, 只計算轉移的時間, 速度超快。 即使是在我的 2014 年老電腦上只用 CPU (Intel Pentium G2030 @ 3.00GHz) 也能處理影片。 下圖每塊 212x120 的 13 秒影片各約耗時 3.5 到 4 分鐘。 我們將以 ~/fst 為工作目錄。 把圖片跟影片放在 ~/fst/media/ 到 這個 gist 抓回我寫的 transform_iv.py (改寫自原作者的 transform_video.py)。 抓回 我製作的 (cpu 版的) FST docker: docker pull
ckhung

影片裁剪合併/放大縮小/快轉慢播的萬用工具 ffmpeg

2 個月 1 週 ago
處理影片檔的工具很多; 但如果需要大量批次處理的話, 當然要學 ffmpeg , 因為你可以把它寫到 shell script 裡面去。 先前在玩 畫風轉移魔法 時, 繞了一些遠路, 不小心學了一些 ffmpeg 指令, 在這裡筆記一下。 首先安裝 mediainfo 套件, 以便從命令列查看影片檔的屬性。 例如可以這樣查影片寬度/高度/時間長度: mediainfo dog-water.mp4 | grep -Pi '^(width|height|duration)' 例如下面這個範例影片的大小是 426x240 長度 13 秒多。 截取畫面的右邊 2/3: ffmpeg -i dog-water.mp4 -vf 'crop=284:240:142:0' out.mp4 或是 ffmpeg -i dog-water.mp4 -vf 'crop=iw*2/3:
ckhung

幫 proxmox 的 lxc 擴充硬碟

2 個月 3 週 ago
在 proxmox 上面, 原則上每個 lxc 容器配置一個檔案系統。 例如我的 proxmox 採用 zfs 作為檔案系統。 有一部 lxc 容器, id 是 371, 那麼在 /etc/pve/lxc/371.conf 裡面就會有一句: rootfs: local-zfs:subvol-371-disk-1,size=4G 之類的。 這個檔案系統對應到 proxmox host 的 rpool/data/subvol-371-disk-1 。 (假設你的 zfs pool 名為 rpool) 但如果這個容器要當作 ftp 伺服器或 docker 伺服器, 最好把資料放在第二顆硬碟上, 這樣資料備份跟伺服器狀態備份才比較方便分開處理。 以下指令都是在 proxmox 4.4 的環境底下測試。 先關掉容器: pct shutdown 371 建立一個檔案系統: zfs
ckhung

精簡扼要、 不拖泥帶水的終端機 sakura

2 個月 4 週 ago
今天要介紹的不是櫻花牌熱水器, 而是 sakura 終端機。 自從 roxterm 開發者被 GTK 3.2 打敗 之後, 較新版本的 debian 跟 ubuntu 再也沒有 roxterm 可用。 還好找到 sakura, 恰好符合我對終端機最基本的需求 (有分頁、 16 色) 而且跟 其他終端機 比起來, 它需要的相依套件最少, 不會牽拖一大堆親戚住進你的系統。。 直接 sudo apt install sakura 就安裝好了。 初次執行, 沒有設定檔可參考? 沒關係, 按 ^d 離開 sakura, 下次再進入 sakura, 就會在 ~/.config/sakura/ 底下看到一個已填妥所有預設值的 sakura.conf 設定檔。 也就是說, 如果你沒有設定檔, 或是如果你在使用過程當中按了某些鍵 (下詳) 改變了 sakura 的設定, 那麼當你關閉最後一個分
ckhung

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

2 個月 4 週 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

三種方式產生 scatter plot / bubble chart

3 個月 ago
資料視覺化的 常用圖形類別 當中, 我最喜歡用 scatter plot (散點圖) 以及它的變形 bubble chart (氣泡圖), 因為 scatter plot 能用位置 (X-Y 座標) 及顏色把一張試算表的兩個數值欄位及一個類別欄位同時呈現在一張圖上; 而 bubble chart 則再補上 「圓圈大小」, 較 scatter plot 更多展現出一個數值欄位。 為了畫 bubble chart, 暑假我繞了好多遠路。 最後找到最簡單的方法, 把一些重點提示摘要在這篇裡。 從這篇快速起步之後, 每一種方法當然都還有更多本文未提及的參數可以調整, 請自行搜尋/查手冊。 程式碼及資料檔 (satellites.csv) 放在 github 的 ckhung/scatplot; 範例圖的物理意義請見 重新發現克卜勒第三定律。 一、 gnuplot 這是最簡單的
ckhung

連鑰匙孔都藏起來的 ssh 完全防禦: SPA

3 個月 1 週 ago
如果說 ssh 服務是進入伺服器的鎖頭, 那麼帳號密碼就是開鎖的鑰匙。 你可以用 密不透水的設定 來保護鎖頭, 或是用 fail2ban 把企圖開鎖但履試履敗的可疑份子擋在庭院之外一陣子, 讓他連試鑰匙的機會都沒有。 但其實另外還有一個中文世界鮮少人知道的終極絕招: 把鎖頭/鑰匙孔整個藏起來, 只當懂門路的人 (你自己) 用特定暗號敲門時, 才讓鎖頭/鑰匙孔短暫出現一兩分鐘。 今天要介紹的伺服器完全防禦機制叫做 Single Packet Authorization (SPA)。 一、 概念解說 這要先從 port knocking 說起。 這個機制的運作方式是: 先用防火牆預設把所有的 ports (或至少重要的 ports, 例如 22) 通通封掉, 這就像是在門鎖之外再蓋上一層 沒有鎖頭、 沒有鑰匙孔的門 一樣。 然後跟客戶端約好按照某個特定順序敲幾個 ports (
ckhung

資料視覺化幫我重新發現克卜勒第三定律

3 個月 1 週 ago
如果你沒空看 18 分鐘的 TED 演講 Hans Rosling 用前所未有的方法詮釋數字統計, 那麼至少要欣賞一下這個 4 分鐘的短片 「200 年, 200 個國家」: 資料視覺化可以幫我們從枯燥的數字當中, 一眼看出奇特、 令人驚訝的現象。 而且即使我們手邊沒有任何特殊的資源, 還是可以玩出一些有趣的東西。 今天我們要重新發現 (天文學上的) 克普勒第三定律。 我們省略上一篇 用 perl 的 csv 句型處理維基百科頁面 的繁瑣過程, 直接下載成果檔 satellites.csv。 這是太陽系所有天然衛星的列表, 包含 name (名稱)、 radius (星體半徑)、 orbit_major (軌道半長軸)、 rev_cycle (公轉週期)、 planet (所屬行星) 等等欄位。 我們用 gnuplot 來畫圖: set datafile
ckhung

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

3 個月 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
已檢查
27 分鐘 6 秒 ago
大人問小孩: 「全世界的玩具隨便你挑? 這怎麼可能? 如果我要的玩具只有一個, 正好又被別人借走了呢?」
「玩具閘門後面, 每種玩具永遠只有一個。 任何人想玩, 隨時都可以生一個複製品給你。
這裡沒有人搶玩具。 這裡是 玩具烏托邦。」
* * * *
貴哥在這裡分享自由軟體跟免費雲端工具的知識與技術, 目的是希望打破 「品牌忠誠肥羊」 們的迷思、 要「讓數位高牆倒下」 (請搜尋)。

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