iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 7
1
AI & Data

人工智慧 vs.工人智慧系列 第 7

Day 07:數據資料來源大部分解 (上集)

https://ithelp.ithome.com.tw/upload/images/20190906/20119726yQFD4MUBme.jpg

班長:65K2步槍大部分解開始

兵:大部分解開始

取下彈匣,檢查托彈鈑是否正常。 正常

分解槍背帶 …

阿 … 不是 這個大部分解啦,在搞什麼 ?

我們在上一篇有提到抓回來的 PTT 文章長什麼樣子,既然有了資料,那是不是可以先來看看這些資料能做什麼?其實在第三天的文章『Day 03: 高手真的在名間』就有提到我們曾經找出過什麼資料:

1)誰表的文章最多?
2)誰發表的文章被推文數最多?

在這裡就針對這兩個數字去說明我們用了哪些方法來找的。

1)誰表的文章最多?
要誰發表的文章最多,首先當然是要知道文章是被誰發表過,所以先針對文章內的 author 做個統計。 現在需要計算這兩個數據,然後把它互相對比對一下就可以了:

  1. 發表過文章的作者代號
  2. 發表過的文章數量清單

好用的程式碼不用嗎?當然直接拿我先寫好的 code 當範例啊 ?

https://github.com/deternan/PTT_Stock/blob/master/src/main/java/ptt/statistics/Statistical_AuthorsList.java

在這個範例檔有些地方要配合你自己的環境進行調整:

folder_source :存放已經下載的 ptt 文章位置
folder_output :結果輸出位置

首先,用 for 迴圈把所有的檔案讀取一次

File folder = new File(folder_source);  
File[] listOfFiles = folder.listFiles();
for (File file : listOfFiles){
 <執行 functions>
}

在 <執行 function> 的部分,就是擷取文章內的 author。function 裡面有需多該執行的 method,首先執行ReadFile(<檔案路徑>) 會將檔案暫存為字串,會再接續 Parsing(<字串>) 進行 author 的截取。先用 allAuthor_temp 這個把擷取出的作者代號存入,之後用CountDuplicatedList() 計算每個 author 的累計數量,再來使用 Java 內建的 LinkedHashMap 直接做排序,將 author 代號與數量輸出至 allAuthor_array 和 allAuthorStastic_array 中 ; 這時候就已經完成全部作者代號 (author) 的收集了。

好,這時候 allAuthorStastic_array 這個向量中已經幫我們排序好由大到小順序的作者數量,這就是每個作者發表文章的數量。同樣的,我也先把作者清單也列出來給大家使用

https://github.com/deternan/PTT_Stock/blob/master/output/AuthorList_20190508.txt

說明一下檔案後面數字的意思,因為PTT每天都會產生新文章出來,所以後面數值就是哪一天輸出後的結果,這個檔案是我在 2019年05月08日 輸出的,所以用 20190508 當結尾。

因為我們用了 MapSort 來累計作者出現在哪些文章中,所以只要把某作者代號當成一個 key,只要某文章出現該作者帶好,則 value就+1,如此 MapSort 就可以幫我們算出作者發表過了多少文章。這邊是我找出的數量:

https://github.com/deternan/PTT_Stock/blob/master/output/AuthorStatistical.txt

好!解決了作者名稱,再來就是去累計每篇文章到底都是哪些作者所發表的,如此再比對一下就可以知道了。

  1. 誰發表的文章被推文數最多?
    為了方便之後查詢資料方便,這部分會分兩個階段。第一個階段先把全部的文章被推文數量做個排序,輸出成文字檔,這只是為了方便之後想要人工閱讀時的便利性。第二階段則是用這個輸出的文字檔做統計的計算;如此就可以得到『誰發表的文章被推文數』的數值。

在第一階段的程式碼可以到這裡下載:

Statistical_articlePush.java

也可以直接看一下處理過後的結果:

MessageStatistical_20190518.txt

我們用前面提到的作者清單跟這一份輸出資料做一下交叉的比對,然後累積起這些數量即可得到此數值。程式碼的部分也已經完成,可以直接使用:

Statistical_NumofPushByAllAuthor.java

這裡依序用三個方法執行:

  • AllAuthorList() :讀取作者清單列表 (第一份文件)
  • ReadPushRecord():讀取經排序後的文章推文數 (第二份文件)
  • Sort BubbleSort():排序推文數

當依據完成三個方法後,可以得到這個輸出檔:

AuthorPushedNumber.txt

  • f204137 50288
  • roberchu 35640
  • ckw19 33314

輸出的左邊是作者代號,右邊是被推文的數量。以上依序完成了這兩個數據,下一次繼續講另外兩個也應該注意的數字囉。


免責聲明:本文章提到的股市指數與說明皆為他人撰寫文章內容,包括:選股條件,買入條件,賣出條件和風險控制參數,只適用於文章內的解釋與說明,此提示及建議內容僅供參考之用,並不構成投資研究、認購、招攬或邀約任何人士投資任何投資產品或交易策略,亦不應視為投資建議。


上一篇
Day 06:資料處理
下一篇
Day 08:數據資料來源大部分解 (下集)
系列文
人工智慧 vs.工人智慧30

尚未有邦友留言

立即登入留言