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