柳向陽 戴崢 杜茜亞 吳榮信 李玉香*
(河北科技師范學院 河北 秦皇島 066004)
Python具有易學易用、類庫豐富、功能強大的特點。Python在機器學習、人工智能、數據爬蟲、大數據處理等方面擁有非常豐富的插件,使得Python 可以非常方便地實現諸多使用其他語言難以實現的功能。其中Python的類庫非常強大,本文主要用到numpy、pandas、matplotlib對數據進行處理和統計分析。
當使用爬蟲爬取網站的數據時,需要遵守網站所有者針對所有爬蟲所制定的協議,這就是robots協議。在地址欄輸入https://www.lagou.com/robots.txt,結果如下:
User-agent: Jobuispider
Disallow: /
User-agent: *
Disallow:/*?*
Disallow:/gongsi/v1/
通過查看robots協議,知道哪些數據可以爬取、哪些數據不可以爬取。
(1)導入requests庫
用import requests導入,為實現向網站發送GET類型的HTTP請求、并獲取返回的響應做準備。
(2)導入xlwt庫
用import xlwt導入,為實現將爬取的數據存入excel表格做準備。
(3)用開發者工具獲取HTTP頭部信息
右鍵單擊Chrome瀏覽器頁面,選擇“開發者工具”或按“F12”鍵,獲取Headers標簽的HTTP頭部信息,如requests URL、User-Agent等信息。
(4)輸入要爬取的職位和要爬取的頁數,進行數據爬取、解析
招聘信息很多,但我們感興趣的職位應該只有幾個,所以采用輸入的方式,如“python”。招聘信息很多,但只有最近的信息對我們才有意義,故查找有限頁數,如“30”。
用s=requests.session()和s.get(url,headers=headers,timeout=2)爬取數據;
用info=result.json()解析數據;
(5)將數據保存到excel表中
用w=xlwt.Workbook(encoding='utf-8')建立工作簿;
用ws=w.add_sheet(jos,cell_overwrite_ok=True)建立工作表;
用ws.write(0,0,'序號')、ws.write(0,1,'公司')、ws.write(0,2,'城市')……建立表的列標題;
用循環實現表格數據的寫入;
用w.save('拉勾網.xls') 保存數據到excel表中,如圖1所示。
導入import numpy as np和import pandas as pd,為數據分析做準備。
步入21世紀的中國,面臨新的發展機遇和挑戰。這十年是極不平凡的十年:戰勝了2003年非典、2008年汶川地震等自然災害等,經受了2008年金融危機考驗,舉辦了第29屆奧運會、第41屆世博會。這十年也是中國成長的十年,一次次的經歷增強了中華民族的凝聚力,同時也提升了中國的國際影響力。這期間黨中央召開了十六大、十七大,更加堅定了改革開放的步伐。黨的十六大向世人昭示了新世紀的中國舉什么旗、走什么路、實現什么樣的目標等重大問題,并圍繞這些問題做了全方位的部署,大踏步向全面建成小康社會的目標邁進。黨的十七大總結了改革開放的歷史進程和經驗,對深入貫徹科學發展觀提出明確要求,將改革開放不斷深入推進。
Pandas擁有十分豐富的數據導入函數,可以從excel、 txt、SQL 數據庫等多種數據源中快速導入數據。本文使用pandas的read_excel()函數讀入數據表,代碼如下:
file = '拉勾網.xls' #賦值變量
df = pd.read_excel(file) #導入數據表
結果如圖2所示。
通過groupby()函數分組得出需要統計的數據,代碼如下:
cs_ave_money= df.groupby(['城市'])['平均薪資(k)'].mean()
cs_min_money=df.groupby(['城市'])['最低薪資(k)'].min()
cs_max_money=df.groupby(['城市'])['最高薪資(k)'].max()
cs_count=df.groupby(by=['城市']).size() #以城市分組查看其次數
data = list(cs_count.values) #出現的次數
labels=list(cs_count.keys()) #其對應的城市
結果如圖3~圖6所示。
導入import matplotlib.pyplot as plt,為數據展示做準備。
在完成對數據表的篩選處理后,就可以使用matplotlib提供的畫圖函數進行數據的展示,使其可視化,使其數據更加直觀,代碼如下:
plt.bar(np.arange(0,len(labels)*2,2),cs_min_money,alpha=0.5,width=0.5,color='yellow',edgecolor='red',label='最低薪資',lw=3)
plt.bar(np.arange(0,len(labels)*2,2)+0.5, cs_max_money, alpha=0.2, width=0.5, color='green', edgecolor='blue', label='最高薪資', lw=3)
plt.bar(np.arange(0,len(labels)*2,2)+1, cs_ave_money, alpha=0.2, width=0.5, color='red', edgecolor='blue', label='平均薪資', lw=3)
plt.title('各地區薪資對照表',color='r')plt.ylabel('薪資(K)')
plt.xlabel('城市')
plt.legend()
plt.xticks(np.arange(0,len(labels)*2,2)+0.5/2,labels)
plt.title('地區需求量分析',color='r')
plt.pie(data,labels=labels,autopct='%1.1f%%',shadow=False,startang le=150)
結果如圖7~圖8所示。
使用第三方庫numpy、pandas、matplotlib可以快速簡單的使其想要分析的數據可視化,在本次處理中,并列柱狀圖的位置及數值處理頗為繁瑣,可在日后改善。