數據讀取
理解數據
數據清洗
數據分析javascript
一、數據讀取
#導入相關模塊import pandas as pdimport numpy as npimport matplotlib.pyplot as pltimport re#正則解析from wordcloud import WordCloudimport warningswarnings.filterwarnings('ignore')
#鏈接mysqlimport pymysqlpymysql.install_as_MySQLdb()from sqlalchemy import create_engineengine=create_engine('mysql://user:password@localhost:3306/frogdata?charset=gbk')
#讀取數據df=pd.read_sql_query('select * from Boss_analyst',con=engine)
二、理解數據
字段解釋php
position - 職位css
salary_range - 薪水區間java
work_year - 工做經驗python
city - 城市mysql
tag1 - 技能標籤1算法
tag2 - 技能標籤2sql
tag3 - 技能標籤3apache
tag4 - 技能標籤4ruby
tag5 - 技能標籤5
company_name - 公司名稱
text - 未知
company_type - 公司類型
company_welfare -公司福利
三、數據清洗
對錶中的position、salary_range、work_year、city、text、company_welfare字段數據進行清洗
#觀察數據的總體狀況df.info()
總共有4482條數據。tag四、tag五、company_walfare列的有存在空缺數據,但空缺很少,並且這三個指標不是關鍵性指標,因此暫不作處理
#考慮到爬取的數據可能存在重複數據,此處作去重處理df.drop_duplicates(inplace=True)df.shape[0]
4435 存在47條重複數據
position 字段清洗
#觀察position字段df.position.unique()
發現存在異常數據,這裏須要對不相關的職位進行去除
df=df.loc[df.position.str.contains('數據|分析|Data|算法|Bi|ETL')]df.shape[0]
3423
考慮數據類的崗位有數據運營、數據挖掘、商業分析師、算法工程師、ETL工程師等
salary_range字段清洗
#觀察salary_range字段df['salary_range'].unique()
數據很不規整,初步判斷存在如下三種格式:'15-25K·13薪'、'15-25K'、100-150元/天 ,打算把這一列的數據拆解分爲兩列-最低薪水、最高薪水
def cut_word(word,types): #把數據規整爲'xx-xx'格式 position1=word.find('K') position2=word.find('元') #若是沒有找到該元素,find會返回值-1 if position1 != -1: salary_range=word[:position1] elif position2 != -1: salary_range=word[:position2] #拆分數據-最低薪水、最高薪水 position3= salary_range.find('-') bottom_salary= salary_range[:position3] top_salary= salary_range[position3+1:] #傳入types參數,接收最低薪水、最高薪水的數據 if types == 'bottom': return bottom_salary else: return top_salary
#利用apply函數進行數據轉化df['bottom_salary']=df['salary_range'].apply(cut_word,types='bottom').astype('int')df['top_salary']=df['salary_range'].apply(cut_word,types='top').astype('int')
#新增平均薪水列,方面後面作統計分析df['avg_salary']=df.apply(lambda x : (x.bottom_salary+x.top_salary)/2,axis=1)
work_year字段清洗
#觀察work_year字段df.work_year.unique()
work_year字段中學歷數據和工做年限數據混雜在了一塊兒,須要將其分列
學歷有7種數據格式:學歷不限、中專/中技、高中、大專、本科、碩士、博士
工做經驗有三種數據格式:x-x年、x天/周x個月、經驗不限。
def cut_word1(word,types): #找到學歷不限的學字,進行切片處理 position1=word.find('學') #找到學歷不限的大字,進行切片處理 position2=word.find('大') position3=word.find('本') position4=word.find('碩') position5=word.find('博') position6=word.find('高') position7=word.find('中') #經過切片把數據規整爲學歷和工做經驗兩列數據 if position1 != -1: work_year=word[:position1] educational_background=word[position1:] elif position2 != -1: work_year=word[:position2] educational_background=word[position2:] elif position3 != -1: work_year=word[:position3] educational_background=word[position3:] elif position4 != -1: work_year=word[:position4] educational_background=word[position4:] elif position5 != -1: work_year=word[:position5] educational_background=word[position5:] elif position6 != -1: work_year=word[:position6] educational_background=word[position6:] else: work_year=word[:position5-4] educational_background=word[position5-4:] #傳入types參數,接收學歷和工做年限的數據 if types == 'education_background': return educational_background else: return work_year #利用apply函數進行數據轉化,將學歷數據新添加到'education_background'列,工做經驗數據新添加到'work_year'列df['work_year'].apply(cut_word1,types='education_background') =df['work_year'].apply(cut_word1,types='work_year') =
work_year字段已清洗完畢,轉化爲work_year和education_background兩列數據
#work_year中存在2天/周3個月之類的數據,判斷是實習/兼職職位,這邊把全職和實習的崗位數據區分開來df_part_time=df.loc[df.work_year.str.contains('天|周|月')]#全職崗位df_full_time=df.loc[~df.work_year.str.contains('天|周|月')]
city字段清洗
#觀察city數據df_full_time['city'].unique()
有些值只顯示城市名稱,有些細分到了區,這邊把數據維度統一規整到城市名稱
#經過apply函數和if邏輯判斷,把帶有·點的數據的城市地區維度進行切片截取df_full_time['city']=df_full_time['city'].apply(lambda x :x[:x.find('·')] if x.find('·') != -1 else x)
text字段清洗
#觀察text字段df_full_time.text.unique()
text字段包含了公司融資狀況、公司類型、公司規模數據,需將其轉化分列,其中公司類型已存在(company_type)
只需轉化爲公司融資狀況和公司規模兩列
清洗結果
四、數據分析
總體思路
數據類崗位總體需求
城市、學歷、工做經驗對薪水的影響
不一樣崗位對應的學歷要求、薪水分佈狀況
公司通常會用什麼福利待遇來吸引求職者
不一樣崗位要求的關鍵技能點是什麼
一、數據類崗位總體需求
plt.figure(figsize=(16,6))
plt.rcParams['font.sans-serif']=['SimHei'] #用來正常顯示中文標籤plt.rcParams['axes.unicode_minus']=False #用來正常顯示負號
#學歷plt.subplot(2,3,1)df_full_time.education_background.value_counts().plot(kind='barh',alpha=0.7)
#工做經驗plt.subplot(2,3,2)df_full_time.work_year.value_counts().plot(kind='barh',alpha=0.7)
#崗位分佈plt.subplot(2,3,3)df_full_time.city.value_counts().plot(kind='pie',autopct='%.1f%%')
#公司融資狀況plt.subplot(2,3,4)df_full_time.company_financing .value_counts().plot(kind='barh',alpha=0.7)
#公司類別plt.subplot(2,3,5)df_full_time.company_type.value_counts().head(6).plot(kind='barh',alpha=0.7)
#薪水plt.subplot(2,3,6)#對薪水劃分層次,如18K屬於15-10bins=[0,3,5,10,15,20,30,105]level=['0-3','3-5','5-10','10-15','15-20','20-30','30+']df_full_time['avg_salary_level']=pd.cut(df_full_time.avg_salary,bins=bins,labels=level)df_full_time.avg_salary_level.value_counts().head(6).plot(kind='pie',autopct='%.1f%%')
#調整子圖的間距plt.tight_layout()
要求
分析:
學歷要求:大專是最低要求,招高中或中專/中技的極少,最好是本科及以上
工做經驗需求:偏向招聘有必定經驗的求職者,尤爲3-5年經驗的需求最旺盛。通常工做3年以上,對於整個職業的瞭解會比較深刻,技術趨於成熟,可以幫助作一些獨立的項目
崗位分佈狀況:北上廣深杭對其需求都差很少,相對來講北京機會最多,廣州偏少
公司融資狀況:招聘數據類崗位的通常都是達到了必定規模的大型企業
行業分佈狀況:互聯網行業需求是最多的,包括電商、金融。還有一些乙方公司也有必定需求,好比數據服務類、諮詢類
薪資狀況:受工做經驗影響較大,3年工做經驗薪資通常集中在20-30K,比較可觀
省略234
五、不一樣崗位要求的關鍵技能點是什麼
#數據運營職位相關技能list_tag1=df_full_time[df_full_time['position']=='數據運營']['tag1'].tolist()list_tag2=df_full_time[df_full_time['position']=='數據運營']['tag2'].tolist()list_tag3=df_full_time[df_full_time['position']=='數據運營']['tag3'].tolist()list_tag4=df_full_time[df_full_time['position']=='數據運營']['tag4'].tolist()list_tag5=df_full_time[df_full_time['position']=='數據運營']['tag5'].tolist()
wordcloud_1=pd.Series(list_tag1+list_tag2+list_tag3+list_tag4+list_tag5).value_counts()
#數據分析職位相關技能#數據挖掘職位相關技能
崗位要求
分析:
數據運營類崗位要求:基本的數據分析工具要掌握,熟悉sql,理解業務和產品,會數據挖掘和建模更好
數據分析類崗位要求:熟悉SQL、 R/Python、hive,掌握基本的數據倉庫、數據挖掘、建模的知識,具有必定的業務經驗
數據挖掘類崗位要求:熟悉Python/R、Spark、Linux、Hadoop、SQL,掌握機器學習算法、數據結構等
關注公衆號:Python爬蟲數據分析挖掘,免費獲取更多開源項目源碼
本文分享自微信公衆號 - Python爬蟲數據分析挖掘(zyzx3344)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。