發表文章

臉書爬蟲機器人- 抓發文留下的數位足跡,製成活動熱圖

圖片
在動物行為學的研究上,研究者可以針對該種動物的活動做成熱圖 Heat Map,例如縱座標是時間、橫座標是季節,這樣就可以看出該種動物隨著不同季節和時間的活動趨勢變化。

這樣的研究其實透過臉書的資訊也是可以達成的,就把人類的貼文當作活動足跡來偵測就好了啊。在前一篇當中,我把某一篇新竹市長某一篇特定文章的回應都擷取之後,就可以看出數千人在這個議題上面的活動時間。

基於這種處理技術,我也可以針對某一個人的貼文時間做分析,然後產生如上所述的熱圖,看出一個人的活動概況。

先來看一個範例吧,我就拿臉書創辦人 Mark Zuckerberg 最近50篇貼文來分析吧。大概可以看出每晚十一點到隔日六點多,就比較少臉書上的貼文。但是某幾天的凌晨會有貼文,而這幾天的下午又會有比較密集的貼文。如果我們增加貼文的數量,並且分析貼文的內容,那麼這裡頭的資訊量又可以多更多了。


想要試試看這種看起來很恐怖的蒐集資料方式嗎?其實方法跟前篇抓回應的類似。
就是開啟某個人的臉書頁面,然後一直往下滑,滑到貼文數量達到你設定的數字(例如50篇貼文)。然後再去把貼文裡的回應都點開來,特別把目標者的回應也抓出來。不過在 Mark Zuckerberg 的例子當中,我就沒做這件事情了。因為他的單篇文章回應數動不動就上萬,程式點很久都點不完,所以這一步我跳過了。

當全部的貼文都展開了之後,再把整個頁面的原始碼拿來分析,抓出目標的發文時間、內容等..。然後再針對時間資訊做分析處理,或進行繪圖。





教學的影片在此



程式碼在此
https://github.com/ChihHsiangChien/FBcrawl/blob/master/FBrobot-%E7%88%AC%E7%99%BC%E8%A8%80%E6%99%82%E9%96%93%E5%81%9A%E5%9C%96%E8%A1%A8.ipynb

臉書爬蟲機器人- 抓回應文章的資訊

圖片
9月30日來了米塔颱風,北台灣幾乎全部都放颱風假了,但唯獨新竹市沒有放假。於是市長的臉書某篇文章下在當晚湧入萬篇留言
https://www.cna.com.tw/news/firstnews/201909305002.aspx


當晚我正在觀望著到底會不會放颱風假,也順便繞去市長臉書看一看,也看到了這個盛況,然後想到自己才剛寫了一個臉書抓回應的爬蟲,正好可以用這個機會來練功一下。

各位在使用臉書都有這個煩人的經驗吧,如果你想要看某篇文章的所有留言,你得一直按顯示更多留言或回覆,按到都會翻白眼了。當然,這種繁瑣的工作就交給程式去完成吧,基本作法也就是用Selenium操縱webdriver,把該篇文章底下的留言都點開。然後把整個頁面的原始檔拿來分析,把每篇回應的資訊抓出來就可以了。



回應裡會有什麼資訊呢?原來除了使用者的id、url、回應內容之外,還有發文的時間。雖然你過了幾週再回去看某篇文章或回應,在頁面上只會顯示是「4週」這類不精確的時間,但是從原始碼中卻可以找到很精確的時間,例如data-tooltip-content顯示的中文時間,或是在data-utime裡的unix time。

<abbr data-tooltip-content="2019年9月29日 星期日下午10:28" data-hover="tooltip" minimize="true" class="livetimestamp" data-utime="1569767302" data-minimize="true" id="js_f9">4週</abbr>

在程式處理中,unix time比中文時間要好處理多了,直接用datetime的library的 datetime.get來處理就可以成為各種格式。這裡需要注意的還有時區轉換的問題,就我那天處理的經驗,是只要把unix time加上八小時就可以變成本時間。但是後來在處理別的臉書頁面文章時,卻發現同樣都是在台灣發文的,但是要加的時差卻不同?

全部資訊抓出來之後,可以存成資料庫像這樣


再經過pyplot畫一下直方圖就可以顯示大家的發言和時間的相關性了,在午夜前湧入非常多留言,過了…

使用 python 和 selenium 修改 moodle測驗

圖片
moodle是很好用的教學平台,可以在上面設定線上測驗讓學生練習。我通常都會設定每個測驗可以進行三次,然後及格分數可能是90分或100分。而在每次段考前一兩週,我會再將測驗次數提高幾次,讓之前沒有辦法達到及格分數的同學能再次嘗試。每次重新設定這些測驗的細項都會花去我非常多的時間,於是我就用python爬蟲的技術來處理了這樣雜事。

要做這件事需使用 selenium 。得先下載 chrome或firefox的webdriver,這可以讓python直接操作瀏覽器的元素,例如填寫資料或是按下按鈕。

我製作好的程式在github
https://github.com/ChihHsiangChien/moodleCrawl

chrome的webdriver在此連結 https://chromedriver.chromium.org/
下載的版本要搭配你本機使用的版本號碼

firefox的webdriver叫做geckodriver在此連結 https://github.com/mozilla/geckodriver/releases

在以下影片中,我使用的是gecodriver。在範例程式中我其實也有放chrome webdriver的程式碼,有興趣的解開註解就可以看到。

用程式來執行這些繁瑣工作真是非常方便,只要修改幾個地方,就可以放著讓程式執行,過幾分鐘就做好了。


以鋅空氣電池製作低成本高準確度的氧氣感測器

圖片
有天看到日本的國立科學博物館舉辦一個活動,是手作氧氣感測器(手作り酸素センサ),點下連結一看,似乎是一種低成本就可以製作的氧氣感測器,這讓我好訝異。市售的氧氣感測器,價格都是數千甚至上萬,怎麼有可能可以用低成本就作出一個呢?

經過一番搜尋後,我也跟著做出來了,算一算成本真的很低,一個甚至不到100元!這是怎麼做到的?

以下是相關的連結,有興趣的可以先自己看看,發明者是東京工業高等専門学校的高橋三男老師。

這是他的專利文件 酸素センサ及び計測装置,這部影片說明了製作方法 https://www.youtube.com/watch?v=FDW8GDlpOo8書籍 「酸素が見える! 」楽しい理科授業
這個氧氣感測器的感測原理很簡單,就是測量鋅空氣電池的電壓而已,對!就這樣而已。 一般人對鋅空氣電池應該很陌生,我也是做了這個東西才知道有這種電池,這種電池的陽極使用了鋅合金。而陰極是空氣中的氧,最常使用的地方是用在助聽器內,所以你搜尋網路賣場找助聽器電池就可以找得到了,在線上購物網站買的話,一卡是6顆,售價大約是180元上下,所以單顆價格大約30元。
使用前的電池外有貼紙貼著,撕開貼紙後,氧氣進入電池,電池開始進行化學反應而放電。當電池周圍氧氣越少,產生的電壓就會越低。而其電壓和氧氣的濃度是呈現線性關係的(這在專利文件中可以看到有實驗的數據)
電池的電壓怎麼測?不是拿三用電表直接測量,那樣測量的電壓是開路電壓,你應該加上數個電阻並聯和串聯組成負載電阻來測量電阻兩端的電壓,這個負載電阻內還有一個是可變電阻,這樣你就可以調整負載電阻的電阻值,使電壓調整到 20.9 mV之間,這個數字恰好對應環境中的氧氣值。隨後進行實驗時就可以直接觀察三用電表上的電壓值來得知現在的氧氣濃度。





這張電路圖來自專利說明書,最左邊就是感測器的核心-一枚鋅空電池,規格是PR44,不過實際去醫材行買時,你要說規格是675才可以。
圖上電阻的規格如下 R1 4.7Ω 的電阻器 R2 和 R3都是 1Ω的電阻器 Rv是 10Ω 的可變電阻
由電阻的串並聯公式來計算,這三個電阻器產生的電阻值在0.45Ω~3.25Ω之間,適合使用般的1.4的鋅空電池。但有些鋅空電池的放電電流比較大,那麼在這樣的電路上會發生很難調整到20.9mV的情況,如此就需要調整電路圖把R3拿掉,這樣合成的電阻在 0Ω 到 3.2Ω。
每個電池…

生物的自體螢光

在利用科學Maker的螢光顯微鏡觀察植物組織的螢光後,來整理一下可以看看哪些物體的螢光。

Autofluorescence自體螢光,最顯著的例子就是葉綠色的紅色螢光,在維基的頁面上列出了當它受到465nm與665nm的激發光源照射後,可以產生673nm與 726nm的螢光。簡單的說就是你用藍光或紫光照射葉綠素,就能看到它發出紅色螢光。要操作的話,就用驗鈔燈照葉綠素的溶液就看得到了。

那麼還有什麼東西可以像葉綠素一樣也發螢光呢?原來非常多啊
NAD(P)H (max. 460 nm)
核黃素 flavins (max. 520 nm)
蝶呤 pterins (max. 450 nm)
甲殼素 chitin (max. 450–460 and 520 nm)
膠原蛋白和彈性蛋白 collagen and elastin (max. 400–430, 465, 495 and 520 nm)
纖維素 cellulose (max. 420–430 nm)

那麼這些利用自體螢光可以做哪些研究呢?我在這篇Review Article
Vital Autofluorescence: Application to the Study of Plant Living Cells 看到了許多應用。

花粉粒的識別:不同種類的花粉粒分泌物不同,成分不同,螢光也就不同。風媒傳粉的花粉粒(樺樹、松樹等)主要是藍色螢光,而昆蟲傳粉的花粉粒則屬於不同的種類——藍色、黃色、綠色或藍綠色。未成熟的花粉因為有葉綠素所以會呈現紅色螢光,而成熟的花粉粒螢光顏色會不同。損傷識別:受到臭氧傷害或真菌傷害的植物組織或花粉粒螢光也會改變,真菌產生的螢光和植物組織也不同。雌蕊的螢光會因為花粉的種類而不同,會改變螢光的波峰和強度。乾燥的分泌細胞和新鮮的分泌細胞產生的螢光不同。
其他部分,我看到王小發在科學堂社團中整理了更多文獻資料
https://www.facebook.com/groups/1960895877510713/permalink/2080906335509666/

使用科學Maker的落射螢光模組觀察保衛細胞的紅色螢光

圖片
九月初看到科學Maker上,江老師釋放出一款限量模組,是給手機顯微鏡使用的【螢光模組/進階落射螢光模組】,內含

落射螢光的分光鏡cube 螢光模組A (紫光激發)

這個螢光模組真的很厲害,讓一般人也能使用到研究機構等級的螢光顯微鏡。江老師曾經在這篇貼文中,有提到兩款螢光模組的設計不同。電源方面,螢光A需要兩顆2032電池來供電,而螢光B只要一枚電池就可以。而濾片部分,螢光B需要多用一片濾片來濾出乾淨的螢光。




另外一個厲害的神器是【落射螢光的分光鏡cube】。組裝後是像下圖,將「分光鏡cube」裝在研究型手機顯微鏡的「通用物鏡模組」的載物板上,通用物鏡模組可以旋上任何標準的顯微鏡物鏡,模組上有小孔可以把分光鏡鎖上。




落射螢光的分光鏡運作原理是什麼呢?請Google一下螢光分光鏡(Fluorescence Beam Splitter)的圖片可以看到一些原理圖。在此模組中,其原理是將紫光平行射入分光鏡側邊的孔,分光鏡內的鍍膜玻璃把紫光反射經過物鏡到標本上,隨後標本產生的螢光通過物鏡向上通過分光鏡之後再進入觀測用目鏡。

來看看實際拍攝的結果,使用紫錦草來觀察。這是葉內維管束,旁邊還有一些葉肉組織。

我使用【十倍物鏡+通用模組+螢光落射模組+螢光A】在螢光顯微鏡拍攝下,可見葉綠素的紅色螢光和組織的綠色螢光
 使用同樣的設備找尋葉下表皮,看保衛細胞的螢光,在這倍率下,保衛細胞的螢光比起葉肉要遜色一些。

隨後我換成40倍物鏡來觀察,這是一般光源下的保衛細胞

而在此倍率下,微調入射的紫光就可以看見明顯的保衛細胞內的紅色螢光了。

用imagej的macro製作的無腦光譜分析程式

圖片
想要產生出如下圖這樣各種光譜分析圖,或是利用CFL燈泡(省電燈泡、日光燈等)來校正一整個資料夾的光譜照片,然後也是產生像下面這樣的圖。你覺得需要多少步驟呢?
只要兩個按鍵就好了喔,連輸入光譜值找對應的X座標都不用喔。





如何完成光譜分析呢?這部影片告訴你如何按兩個鈕就完成


程式碼 https://github.com/ChihHsiangChien/AutoSpectrum
為什麼可以按兩個鈕就完成,連輸入波長都不用呢?因為我已經在程式中去做了那些工作。讓程式自動用hue值辨識光譜顏色、尋找波峰,再用預設的光譜值套入來進行校正。這樣的程式到底是怎麼製作呢,我也將程式說明錄了下來(其實這是避免自己將來萬一忘了)






如果是想要用imagej自己手動作這些工作,我在幾年前的文章曾經寫過,可以參考一下
用imagej作分光光度計與光譜儀的量測分析