- 機器學習案例分析(基于Python語言)
- 王愷
- 2121字
- 2020-07-02 15:47:56
1.4 案例分析
1.4.1 網絡爬蟲及信息提取
1.問題描述
從網絡中獲取的大量信息,是目前數據分析工作中的一個常用數據來源。這里,通過一個簡單的實驗,掌握如何從網絡中下載網頁內容并從網頁中提取需要的數據。
具體要求:從百度新聞中根據指定關鍵詞進行搜索,并下載指定條數的新聞標題,將這些標題顯示在屏幕上或輸出到文件中。
2.求解思路和相關知識介紹
1)獲取網頁數據
本實驗使用requests庫的get函數從指定網頁上下載數據,其使用方法描述如下:
get(url,params=None,**kwargs)
作用:發送一個get請求。
url:指定要從哪個網址獲取網頁數據。
params(可選):在請求時發送的字典、元組列表或字節類型的數據。
**kwargs:一些可選參數。
返回:Response類對象。
例如,通過:
request=requests.get(url,timeout=30,headers=headersParameters)
可以創建一個Response類對象request。通過這個request對象,可以從url對應的網址下載網頁數據,超時設置為30秒,headersParameters中保存了請求頭的信息,如:
代碼清單1-1 設置請求頭信息

2)從網頁數據中提取信息
下載的網頁數據中包含了大量信息,但通常只有部分信息是我們需要的。因此,需要使用正則表達式對網頁數據進行匹配,提取出需要的那些信息。在設計正則表達式前,需要先分析要提取的信息在網頁中對應的HTML代碼。在瀏覽器中訪問網頁,按F12鍵調出瀏覽器的調試工具(單擊圖1-62中的箭頭),查看頁面上的元素,然后查看要獲取元素的HTML代碼(圖1-62中紅框所示)。

圖1-62 網頁調試頁面示例
根據圖1-63中的信息,可以設計出如下正則表達式:

圖1-63 新聞標題對應的HTML代碼

即匹配以<h3 class="c-title">開始、以</h3>結束的字符串,[\s\S]*?表示匹配盡可能短的內容。
匹配結果中雖然包含了要提取的標題信息,但還包含<…>等無關的HTML標記,因此,還需要通過re.sub函數去除title中多余的HTML標記,如:

3)數據顯示和文件保存
假設已將新聞標題保存在了titles中,則可以通過for循環將這些新聞標題顯示在屏幕上,如:
代碼清單1-2 使用for循環顯示新聞標題

按類似的方法,也可以將新聞標題寫入filepath所對應的文件中,如:
代碼清單1-3 將新聞標題寫入文件

3.代碼實現及分析
代碼清單1-4給出了本實驗網絡爬蟲的完整代碼,請讀者在自己的計算機中實現并測試該系統。
代碼清單1-4 網絡爬蟲完整代碼



4.實驗結果及分析
代碼運行后,將在屏幕上顯示爬取進度和提取的新聞標題,如下所示:
已獲取10條新聞標題
已獲取20條新聞標題
已獲取30條新聞標題
已獲取40條新聞標題
已獲取45條新聞標題
1:南開大學商學院MBA“天團導師”工程校友導師公開課第一講《易經與…
2:南開大學科學營:觀《別有洞天》探科技奧妙
3:南開大學吳志成教授做客中國政法大學名家論壇
4:南開大學第21屆研究生支教團成員風采展示
5:南開大學科學營:電光科技日新月異
……
同時,會在當前目錄下創建文件名為newstitlelist.txt的文本文件,打開該文件后同樣可看到新聞標題信息。
提示這里所說的當前目錄指的是Jupyter Notebook的默認目錄。Windows下Jupyter Notebook默認啟動路徑就是當前cmd啟動Jupyter的路徑,可以通過命令行查看當前路徑,然后去當前路徑下查看是否新增了一個名為newstitlelist.txt的文件。
1.4.2 股票數據圖表繪制
1.問題描述及數據集獲取
以圖表形式展示數據,能夠更加清晰地表達數據的整體信息,這是數據分析工作中經常會使用的數據可視化方法。本實驗中,以股票數據為例,進行燭臺圖和條形圖的繪制。
股票數據集的獲取有多種方式,這里使用tushare包來實現。tushare是一個免費、開源的Python財經數據接口包,主要實現對股票等金融數據從數據采集、清洗加工到數據存儲的過程,能夠為金融分析人員快速提供整潔、多樣、便于分析的數據,在數據獲取方面極大地減輕他們的工作量,使他們更加專注于策略和模型的研究與實現。
2.求解思路和相關知識介紹
1)獲取股票數據
本實驗使用tushare的get_k_data函數獲取股票k線數據,關于該函數使用的完整幫助信息如下:

函數的主要參數和數據屬性如表1-7和表1-8所示。
表1-7 get_k_data函數主要參數

表1-8 get_k_data函數數據屬性

本實驗中只指定code(股票代碼)和start(開始日期)這兩個參數完成股票數據的獲取,如通過:

可獲取代碼為002739的股票從2019-01-01開始到現在的數據。返回的是一個DataFrame格式數據(詳情參見Pandas庫)。部分股票數據集如表1-9所示。
表1-9 部分股票數據集

2)數據格式轉換
使用Matplotlib繪制圖表時,要求傳入NumPy的ndarray類型的數據。因此,在繪制圖表前,需要先將DataFrame格式數據轉換為ndarray類型,如:

其中,wdyx是DataFrame格式的股票數據,self.mat_wdyx則是NumPy的ndarray類型的數據。
另外,圖表中將日期作為坐標軸標簽時,要求使用數值類型的日期數據,而不能傳入字符串類型的日期數據。因此,需要將股票數據中第1列字符串格式的日期數據轉換為數值格式:
代碼清單1-5 日期格式轉換

其中,dates中保存了字符串類型的日期數據,num_time中保存了轉換后的數值類型的日期數據。
3)圖表繪制
需要繪制的圖表中包含兩個子圖,一個子圖中顯示燭臺圖,另一個子圖中顯示條形圖。因此,首先創建一個包含兩個子圖的圖表:
代碼清單1-6 創建圖表

然后,分別在兩個子圖中完成燭臺圖和條形圖的繪制。
最后,通過plt.show函數顯示圖表。
提示Anaconda默認安裝的包中不包括mpl_finance和tushare包,所以需要用戶自己單獨安裝。打開Anaconda Prompt,使用以下命令安裝mpl_finance和tushare包。
pip install mpl_finance
pip install tushare
3.代碼實現及分析
代碼清單1-7給出了繪制股票數據圖表的完整代碼,請讀者在自己的計算機中實現并測試該系統。
代碼清單1-7 繪制股票數據圖表的完整代碼


4.實驗結果及分析
代碼運行后,結果如圖1-64所示。圖1-64分為上、下兩個子圖,上方的子圖以燭臺圖的形式顯示了股票數據,而下方的子圖以條形圖的形式顯示了股票數據。

圖1-64 用燭臺圖和條形圖展示股票數據
- 嵌入式系統及其開發應用
- Mastering Spark for Data Science
- Visual FoxPro 6.0數據庫與程序設計
- Mastering Machine Learning Algorithms
- 永磁同步電動機變頻調速系統及其控制(第2版)
- 21天學通Java Web開發
- Linux:Powerful Server Administration
- C++程序設計基礎(上)
- Excel 2007終極技巧金典
- INSTANT Adobe Story Starter
- 智慧未來
- 計算機辦公應用培訓教程
- Generative Adversarial Networks Projects
- ARM嵌入式系統開發完全入門與主流實踐
- ARM嵌入式開發實例