官术网_书友最值得收藏!

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 用燭臺圖和條形圖展示股票數據

主站蜘蛛池模板: 全州县| 宁夏| 胶南市| 庆安县| 娄底市| 荔波县| 嘉义县| 阿图什市| 耿马| 横山县| 仲巴县| 遵义县| 普宁市| 武城县| 工布江达县| 安岳县| 夏河县| 水富县| 寻乌县| 临城县| 龙里县| 东阳市| 晴隆县| 九台市| 盐亭县| 彩票| 江北区| 铜陵市| 宁明县| 凌源市| 青岛市| 运城市| 平邑县| 定陶县| 临湘市| 和田市| 灵石县| 肥城市| 神农架林区| 涿鹿县| 阿巴嘎旗|