????????????????本項目的數據來源是2019年拉勾網——上海的數據分析崗位的信息
首先第一步:爬取數據
爬取的代碼就不貼上來了,有很多種,本人的爬蟲水平僅限于BeautifulSoup庫和requests庫,更深入的scrapy等并沒掌握;注意用requests爬取的話,請求方式是post,get是無法得到頁碼的
貼上最后爬取到的2019上海拉勾網數據分析崗位的csv文件鏈接:鏈接:https://pan.baidu.com/s/1jqYAs1HsBtHVM1BiRiHHqQ;提取碼:nfoh
第二步:數據的清洗和重構
先正常導入數據分析需要的庫,設置畫圖可顯示中文和負號以及seaborn的主題
讀取文件,爬取后的源數據是這樣的
然后是去重,inplace=True直接將去重后的結果保存下來。
df.drop_duplicates(subset=['公司全稱','職位名稱','技能標簽'], keep='first', inplace=True)
接下來要判斷是否有缺失值,有的話需要處理缺失值
從上圖可以看到還是有不少公司地址是帶缺失的,我們這里可以填補成“未知”,再用布爾值索引方法看是否處理成功
df[df.fillna('未知').isna().values == True]
看數據發現,我們需要再添加一列薪資列,取薪資范圍的中間值,方便之后做數據分析
tmp = df['薪資范圍'].str.split('-', expand=True)
def drop_k(x):?
? ?? return re.search('\d+', x).group()
tmp = tmp.applymap(drop_k)
tmp = tmp.apply(pd.to_numeric)
def average_s(x):
????return (x[0] + x[1]) / 2
tmp['平均薪資'] = tmp.apply(average_s, axis=1)
tmp
上述處理過后,可以發現,平均薪資已經出來了,就是薪資范圍下限和薪資范圍上限的均值
把列的名字改一下,可讀性更強
tmp = tmp.rename({0:'最低薪資 單位:k',1:'最高薪資 單位:k','平均薪資':'平均薪資 單位:k'}, axis=1)
然后我們把做好的平均薪資表和原表合并一下
df = df.join(tmp)
現在,我們基本的數據清洗和重構已經完成了,后續就是根據具體要分析的內容來做可視化了
第三步:數據分析
我們先來分析下不同工作經驗的崗位數量情況,并用直方圖和餅圖來可視化
首先去除“不限”這個不確定因素,然后將目前的“所需資歷”按照從少到多來排序,增加可讀性
tmp = df[df['所需資歷'] != '不限']
result = tmp.groupby('所需資歷')?
tmp2 = result.size()?
list_custom = ['應屆畢業生', '1年以下', '1-3年', '3-5年', '5-10年', '10年以上']
下面自定義兩個函數,一個專門進行排序,一個專門獲取索引值和列值,后續也會用到
先用seaborn來畫Bar狀圖
可以直觀看到,工作經驗要求3-5年的最多,1-3年其次,剛畢業或1年以下的經驗是比較少的,我們換個餅圖來看一下:
from pyecharts import Pie
pie = Pie('上海拉勾網數據分析 工作經驗統計')
pie.add('', xindex, vals, is_label_show=True, legend_top='bottom',
? ??????????????radius=[20,75], rosetype='area')
pie
未完待續,后續繼續分析教育背景和薪資間的關系,工作經驗和薪資之間的關系,公司行業的分布情況,工作標簽分布情況等等