互联网金融之量化投资深度文本挖掘——附源码文档
查看之前文章請點擊右上角,關注并且查看歷史消息,還可以在文章最后評論留言。謝謝您的支持!
-
回復【文本挖掘】或者【點擊閱讀原文】獲取鏈接與代碼附錄
一、 功能概述
? ? ? ?關鍵詞詞頻&網絡圖是以股票論壇、 個股新聞、研究報告三個網站作為數據源,以文本數據挖掘作為核心技術,以 Lucene 檢索作為系統框架, 以證券分析為目的, 實現的智能文本分析系統,該系統主要實現了以下功能:
-
關鍵詞詞頻統計
-
關鍵詞網絡圖
? ? ??其中,關鍵詞詞頻統計功能是: 對于給定的關鍵詞(Word)以及給定的股票代碼(Ticker)在一定的時間范圍[StartDate,EndDate]內,計算每周的平均詞頻占比, 同時給出該詞頻占比時間序列與股價之間的相關系數。
? ? ? ?關鍵詞網絡圖的功能是: 對于給定的關鍵詞(Word)在一定的時間范圍[StartDate,EndDate]內,根據 TF-IDF 關聯度指標為依據,給出與關鍵詞最相關的 20 個一級詞,以及與一級詞最相關的 5 個二級詞,組成關鍵詞網絡圖。
二、功能模塊
? ? ? ?如本文之前所述, 本文分析系統的兩個功能是建立在三個文本的數據源,Lucene 檢索的架構之上的。 所以,實現關鍵詞詞頻、關鍵詞網絡圖的功能需要先做一些準備工作和模塊支持, 本文所實現的智能文本分析系統只要分為以下幾個模塊:
-
爬蟲模塊
-
檢索模塊
-
統計模塊
-
關鍵詞詞頻模塊
-
關鍵詞網絡模塊
1) 爬蟲模塊
? ? ? ?爬蟲模塊的主要作用在于將股票論壇、 個股新聞、研究報告三個網站的網頁數據通過網頁解析的方式將文本內容爬下來, 用于之后模塊的文本挖掘。 爬蟲模塊將爬到的文本數據以【 日期 + 股票代碼】 為單位存至相應的 TXT 文本文件當中,同時將文本文件所在的位置以及其他相關信息寫入數據庫。對于每個數據源,都有一個獨立的程序進行網頁爬蟲,他們分別是:
▲GetGuba_pylucene.py? ?股票論壇網頁爬蟲
▲GetMbReport_pylucene.py ??研究報告網頁爬蟲
▲GetSinaNews_pylucene.py? ?個股新聞網頁爬蟲
2) 檢索模塊
? ? ? ?檢索模塊的主要作用在于以 Lucene 為架構, 將爬蟲模塊爬到的文本數據加入到全文索引當中, 在建立索引的過程中,系統以“句子”作為基本的檢索單位即檢索關鍵詞能夠定位到該關鍵詞所在的句子。 另外, 索引采用增量的方式來建立,即每次只將最新爬的文本加入到搜索索引當中, 而對于三個數據源,系統分別建立了三個獨立的索引。同時,在建立的索引的基礎上, 檢索模塊還實現了基本的文本檢索功能, 檢索程序能夠在一定的時間范圍內對于檢索給定關鍵詞,并返回該關鍵詞所在的存儲文件的文件名,以及該關鍵詞所在的“句子”,并將所有的檢索結果輸出到一個給定的文件中。
? ? ? ?簡而言之,檢索模塊提供了建立索引和文本搜索兩個主要的功能,他們分別是:
▲IndexFiles_pylucene.py? ?增量建立索引
▲SearchFiles_pylucene.py? ?關鍵詞全文檢索
3) 統計模塊
? ? ? ?設計統計模塊是為了隨后的關鍵詞詞頻和網絡模塊進行數據的準備,和爬蟲模塊和檢索模塊一樣,統計模塊也是基礎模塊。 統計模塊的主要功能有三個:
▲ 以【用戶字典】為列表,計算用戶字典中每個關鍵詞在三個數據源中出現的總詞頻數
▲ 以【用戶字典】為列表,計算用戶字典中每個關鍵詞在三個數據源中出現過的總文檔數
▲ 以句子為單位,計算三個數據源中每天文檔的總句子數
? ? ? ?其中,用戶字典關鍵詞的詞頻數和文檔數,是為了關鍵詞網絡模塊中計算TF-IDF 相關度指標所準備的數據,而每天的句子數則樹為了關鍵詞詞頻模塊中計算詞頻占比所準備的數據。對于統計模塊的這三個功能,分別有三個獨立的程序進行,他們分別是:
▲IDFCalWord.py? ?計算關鍵詞總詞頻數
▲IDFCal.py? ?計算關鍵詞所在文檔數
▲SentenceCal.py? 計算每天文檔的句子數
4) 關鍵詞詞頻模塊
? ? ? ?通過建立三個基礎模塊, 能夠完成一系列的應用,關鍵詞詞頻模塊是其中的一個應用模塊, 關鍵詞詞頻模塊的主要功能在于:對于給定的關鍵詞以及給定的股票代碼,在一定的時間范圍內,計算每周的平均詞頻占比, 給出詞頻占比序列的曲線和股票價格曲線的對比圖, 同時給出該詞頻占比與股價之間的相關系數。
? ? ? 模塊中沒有直接使用關鍵詞每天的詞頻,而是根據每天的詞頻,以及當天文檔的句子總數計算關鍵詞的詞頻占比。 對于關鍵詞 ,詞頻占比 的計算公式如下:
? ? ? 其中, 公式的各個指標的意義如下:
? ? ? 分子: 概念關鍵詞 在第 i 天出現的次數
? ? ? 分母: 第 i 天中文檔的句子總數
? ? ? ?從詞頻占比的計算公式可以看出, 詞頻占比是將每個星期的關鍵詞的詞頻總和除以每個星期文檔的句子總數得到的。 使用詞頻占比而非直接采用詞頻,能夠更公平地反應出關鍵詞 每天的關注程度,從而更合理地對詞頻信號進行使用。另外,在計算關鍵詞與給定股票的相關系數時, 模塊會以一周為頻率計算關鍵詞的詞頻占比時間序列,同時計算該周內給定股票股價的均值,計算兩個時間序列的相關系數作為兩者相關性的依據。
? ? ? ?對于關鍵詞詞頻模塊, 只有一種調用的方式,調用時需給出關鍵詞、股票代碼以及時間范圍:
▲ sigWordSeq.py ??關鍵詞詞頻時間序列
5) 關鍵詞網絡模塊
? ? ? 和關鍵詞詞頻模塊一樣,關鍵詞網絡模塊也屬于應用模塊, 關鍵詞網絡模塊的主要功能在于: 對于給定的關鍵詞、在一定的時間范圍內,根據 TF-IDF 關聯度指標為依據,給出與關鍵詞最相關的 20 個一級詞,以及與一級詞最相關的 5個二級詞,組成關鍵詞網絡圖。
? ? ? ?其中關聯度指標采用的是TF-IDF算法, TF-IDF是一種常用的文本檢索與本文探勘的加權技術,主要用于評估某個詞對于一份特定文檔的重要程度。 在本文的關鍵詞網絡模塊中,將給定關鍵詞的搜索結果集合作為特定文檔, TF-IDF用于評估搜索結果中每個詞對于該結果的關聯程度,即對于關鍵詞的關聯程度。 TF-IDF的具體計算公式如下:
其中 x 為搜索結果中的某個詞,為詞 x 的與關鍵詞的TF-IDF關聯度指標,其他符號意義如下:
對于關鍵詞網絡模塊,提供了兩種形式的調用,一是對于給定的關鍵詞,生成完整的關鍵詞網絡圖,二是對于只給出與關鍵詞關聯度最高的20只股票組合,他們分別是:
▲ WordNet.py ??完整關鍵詞網絡圖
▲ WordNet_stock.py ??關鍵詞關聯股票組合
三、 模塊運行
1) 爬蟲模塊舉例2個,其余不再呈現
路徑: D:\TotalCode\LuceneCode\GetData\GetGuba_pylucene.py
功能: 股票論壇網頁爬蟲
輸入參數:無
運行舉例: python ? GetGuba_pylucene.py
運行過程實例:
運行結果:
路徑:?D:\TotalCode\LuceneCode\GetData\GetSinaNews_pyl
功能: 個股新聞網頁爬蟲
輸入參數:無
運行舉例:?python ? GetGuba_pylucene.py
運行過程實例:
運行結果:
2) 檢索模塊
路徑:?D:\TotalCode\LuceneCode\Index_Search\IndexFiles_pylucene.py
功能: 增量建立索引
輸入參數:<數據目錄> <索引目錄> <開始日期> <結束日期>
運行舉例:python IndexFiles_pylucene.py D:\DATA\text D:\DATA\Index\text
20120715 20120820
運行過程實例:
運行結果:
路徑:?D:\TotalCode\LuceneCode\Index_Search\SearchFiles_pylucene.py
功能: 關鍵詞全文檢索
輸入參數:<索引目錄> <關鍵詞> <輸出文件>
運行舉例:python SearchFiles_pylucene.py D:\DATA\Index\text "頁巖氣 "
D:\TotalCode\LuceneCode\Index_Search\Output_pylucene.txt
運行過程實例:
3)統計模塊舉例1個,其余不再呈現
路徑:?D:\TotalCode\LuceneCode\ICTCLAS_Cal/IDFCal.py
功能: 計算關鍵詞所在文檔數
輸入參數:<數據源> <開始日期> <結束日期>
運行舉例:python IDFCal.py 股票論壇 20120715 20120820
運行過程實例:
運行結果:
4)關鍵詞詞頻模塊舉例1個,其余不再呈現
路徑:?D:\TotalCode\LuceneCode\ICTCLAS_ IDF/ sigWordSeq.py
功能:?關鍵詞詞頻時間序列
輸入參數:<數據源> <關鍵詞> <股票代碼> <開始日期> <結束日期> <是否搜索標識>
運行舉例:python sigWordSeq.py 股票論壇 "物聯網" 000001 20100601?20120820 1
運行過程實例:
運行結果:
路徑:D:\TotalCode\LuceneCode\ICTCLAS_ IDF/ WordNet.py
功能:?完整關鍵詞網絡圖
輸入參數:<數據源> <關鍵詞> <開始日期> <結束日期>
運行舉例:python WordNet.py 研究報告 "頁巖氣" 20120601 20120817
運行過程實例:
運行結果:
四、模塊效率性能總匯
根據上表所示的各模塊平均時間效率估計的結果,可以得到如下結論:
▲ 在三個數據源中,所有模塊個股新聞的平均運行時間是最長的,研究報告次之,而股票 ? ? ?論壇是耗時最少的
▲ 所有模塊的時間消耗主要都關鍵詞的搜索上,模塊的平均耗時和模塊進行的關鍵詞搜索 ? ? ?次數成正比
▲ 關鍵詞詞頻模塊 sigWordSeq 進行了一次詞頻檢索,因此和檢索模塊SearchFiles 的平 ? ? ? ?均耗時相當
▲ 關鍵詞網絡模塊 WordNet_stock 同樣只進行了一次關鍵詞檢索,但是在計算關聯股票 ? ? ? ?TF-IDF 指標是需要耗費一定的時間,因此平均耗時略長于單次的檢索
▲ 關鍵詞網絡模塊 WordNet 由于需要進行對 20 個一級詞的搜索,因此耗費的時間是最長 ? ? ?的。另外, 由于三個數據源中【 個股新聞】的數據量最大,運行 WordNet 一旦遇到高 ? ? ?頻詞會消耗大量的時間,需要格外注意。
-
本文基于光大文本挖掘系統框架概述全文。
總結
以上是生活随笔為你收集整理的互联网金融之量化投资深度文本挖掘——附源码文档的全部內容,希望文章能夠幫你解決所遇到的問題。