協作閣

開源協作部落格

貓版文章分析

Jessy Chen / 2019-03-22 /


貓版文章分析

動機:

重點:想要看看貓版的網友都在討論什麼樣的主題,但在整理資料的時候就發現有不少地方需要處理,尤其是有關時間資訊的部分,因此這個禮拜就把重點放在了解時間的格式

Step 1. 利用 python 的 ptt-web-crawler package,抓取貓版近幾年的文章:


a. package 傳送門:https://github.com/jwlin/ptt-web-crawler (感謝Sean!)
b. 下載 package 到自己的電腦。
c. 找到檔案的儲存路徑(可能會在 Documents/GitHub 資料夾之下)。
d. 在終端機輸入指令python crawler.py -b cat -i 3500 4000(3500、4000分別為起始頁數和結束頁數)。
e. 耐心等待爬蟲完成,就可以在資料夾中看到一個 .json 檔案,檔名為 cat-3500-4000.json。

Step 2. 讀入資料:



先以最近兩年(2017-01-01至2018-12-31)的資料作分析。



若有機會分析更多年的資料,可以用下面的 code 來一次讀取多個檔案。

json_files <- list.files(pattern = "*.json")
json_files
data <- lapply(json_files, function(x){fromJSON(x)$articles})



Step 3. 整理 data frame:


a. 將date欄位轉成日期格式,以便篩選出近兩年的文章。
在轉換日期的過程中,遇到英文月份簡寫(如:Jun、Sep)無法顯示的問題,可能是時區造成的。

#> [1] "C"
#> [1] "en_US.UTF-8"
#> [1] "POSIXlt" "POSIXt"
#>           article_id             article_title       author board
#> 1 M.1529571783.A.45D [徵求] 中壢龍潭徵求誘捕籠 ji3h9 (直線)   cat
#>                                                                                                                                                                                                                                                                          content
#> 1 公司裡面 放貨的空間裡 原本有一隻貓在那邊遊蕩,因為抓不到,也就放他在那邊不理他 隔了一個多月發現,是一隻母貓,而且還附帶了三隻小的...... 今天本來要去試著驅趕他們,一進去沒多久,就發現我的腳滿滿的跳蚤 所以我想跟各位徵求誘捕籠,讓我不傷害他們一家子的捕獲他們 麻煩各位了(跪 
#>                  date             ip message_count.all message_count.boo
#> 1 2018-06-21 17:03:01 59.120.180.220                 8                 0
#>   message_count.count message_count.neutral message_count.push
#> 1                   6                     2                  6
#>                                                                                                                                                                                                                                                                                                                                                                                                        messages
#> 1 高調, 高調, 高調, 我覺得你先在牠們背上點除蚤藥,才能讓貓成為活動除蚤機, 抓不到啊....., 動物醫院應該會有吧?, 兩星期前在中壢環中東路上的美達寵物精品借過誘捕籠,老, 闆人很好也很有愛心,可接洽看看, 06/21 18:33, 06/21 18:33, 06/21 18:33, 06/21 20:45, 06/21 21:41, 06/21 22:36, 06/21 23:10, 06/21 23:10, 推, 推, 推, 推, →, 推, 推, →, mashu520, MidoBanA, stw0975, jonie, ji3h9, kobe770403, bbrrnn, bbrrnn
#>                                                  url
#> 1 https://www.ptt.cc/bbs/cat/M.1529571783.A.45D.html



strptime的其他符號可參考:http://www.learn-r-the-easy-way.tw/chapters/5?fbclid=IwAR1Ap-tTxwmKNWVIKwBSfCS-Uv9TfrjSMmbFyHRpcOsPsahLDX4hdLazOv4



b. 將文字部分用jieba斷詞。
原本以tidyverse套件裡的filter來找標題含有「認養」和「買貓」的文章,但因為這個json檔讀進來以後,竟然是一個巢狀data frame,無法使用filter這個功能,會回傳錯誤,因此改用了data[grepl(“買貓”, data$article_title), ]這個方式來找符合的文章。
但接著遇到的是標題或文章內容斷詞的問題,要篩掉「買貓飼料」、「買貓罐頭」這種標題,因此需要斷詞。

#> [[1]]
#> [1] "公司 裡面 放貨 的 空間 裡 原本 有 一隻 貓在 那邊 遊蕩 因為 抓 不到 也 就 放 他 在 那邊 不理 他 隔 了 一個多月 發現 是 一隻 母貓 而且 還 附帶 了 三隻 小 的 今天 本來 要 去 試著 驅趕 他們 一 進去 沒多久 就 發現 我 的 腳 滿滿的 跳蚤 所以 我 想 跟 各位 徵求 誘捕 籠 讓 我 不 傷害 他們 一家子 的 捕獲 他們 麻煩 各位 了 跪"
#> 
#> [[2]]
#> [1] "家中 有 一隻 眼睛 有 缺陷 的貓 前年 一直 在 興旺 給張 書豪 醫師 看診 覺得 張 醫師 真的 很 用心 很 愛 動物 眼科 很 專業 去年 搬離 台中 之後 就 沒 再 關心 興旺 今年 又 要 搬 到 彰化 還是 希望 之後 可以 再 跑 台 中 找 張 醫師 看診 看 了 興旺 FB 的 醫師 班表 之後 發現 張 醫師 不見 了 QQQQ 請問 有人 知道 張 醫師 是 去 了 別間 醫院 還是 去 了 哪 嗎 好 哦 謝謝 原本 是 想 說 如果 醫師 是 離職 了 這樣 問 好像 有點 尷尬 XD 若 沒人 知道 的話 會 直接 去問 醫院 的 因為 我 有 往前 翻 醫院 FB 前年 9 月 公告 張 醫師 要 進修 11 月 才 會 回來 結果 11 月班表 也 沒張 醫師 也 沒 特別 公告 QQ 啊 啊 是 這樣 非常感謝"
#> 
#> [[3]]
#> [1] "貓咪 所在地 台北 新北 聯絡人 稱呼 譚 S 電話 站 內信 交換 貓咪 名字 虎媽 脾氣 很 好 不怕 人 很 顧 小孩 一郎 男生 很皮 也 很傻 是 最 大隻 的 哥哥 小開 女孩 超會 玩 很 聰明 噗 噗 女孩 最 黏 媽媽 傻萌 膽小 貓咪 年齡 約 1.5 個 月 剛 學會 咬咬 貓咪 花色 虎斑 媽媽 生小虎斑 3 是否 結紮 請 認養 人 配合 節育手術 健康 情況 已 驅蟲 預計 下禮拜 打預防針 照片 必須 提供 https i imgur com DUSEKZj jpg https i imgur com 4 uskhcc jpg https i imgur com a04LgN5 jpg https i imgur com RAxHbkb jpg https i imgur com 27 zAUsl jpg https i imgur com xy26eBO jpg 送養 原因 媽媽 流浪 街頭 遇到 朋友 好心 幫 她 待產 其他 補充 可 分送 養 媽媽 個性 很 好 很 穩定 很 溫柔 孩子 傻傻 天 真的 如 有人 願意 母帶 一孩紙 優先 認養 人 條件 要求 1. 不 排斥 新手 請 做 足 功課 2. 基本 經濟 條件 寵物 看 醫生 不 便宜 3. 不 放養 4. 定期 健康檢查 備註 請 站 內信 自我介紹"

閱讀筆記

目前正在閱讀「Python網路爬蟲與資料視覺化」這本書,作者是陳允傑,閱讀到第二章。



1. 關聯式資料庫(relational database):
不同的data frame中,如果有相同的欄位名稱(column name),就可以用外來鍵(foreign key)搜尋,例如:有兩個data frame,其中一個是客戶的基本資料,另一個是某個月份的訂單表格,兩個df都有客戶ID這個欄位,就可以得到像是「哪個地區的人在該月份訂購金額最大」這樣的資料,而對訂單這個df來說,客戶的居住地就是一個外來鍵。在建置df的時候,欄位的命名最好能夠一致,在往後的使用上會比較方便。



2. 欄頭信息(header information):
在爬取網頁資料時,可以透過Chrome查看欄頭信息,了解關於該網頁的一些組成成份,像是要下載一個.json檔的時候,會發現有一個「MIME type」的資訊裡寫著「application/json」,其他還有「text/csv」、「text/html」、「image/gif」等類型,基本上形式都是「type/subtype」,type主要有text、image、audio、video和application,我們在寄發email的時候電腦也是用這樣的模式在進行的。



3. Selector Gadget和Xpath Helper:實用的小工具:
Selector Gadget 可以幫助我們在查看網頁的時候,以不同的顏色標示出我們想抓取的資料為何,再產生符合的 CSS 給我們。當我們點擊網頁的某個元素,會標示「綠色」,Selector Gadget會自動偵測其他符合的元素,標成「黃色」,之後再讓我們手動點掉不需要的元素,這時候會顯示「紅色」,接著就會出現最終的 CSS。可參考以下介紹:https://blog.gtwang.org/r/rvest-web-scraping-with-r/
Xpath Helper主要是搭配Chrome Inspector使用,輸入Xpath之後就會呈現抓取的結果。可參考:http://sweeteason.pixnet.net/blog/post/43059008-chrome-%E9%96%8B%E7%99%BC%E4%BA%BA%E5%93%A1%E5%B7%A5%E5%85%B7%E4%BB%8B%E7%B4%B9---%E6%90%AD%E9%85%8D-xpath-helper-%E5%A5%97%E4%BB%B6