數(shù)據(jù)分析崗位近況分析學習總結(jié)
老師指路->http://www.reibang.com/u/1f32f227da5f
B站視頻:https://www.bilibili.com/video/BV1qa4y1J7dS
數(shù)據(jù)讀取
理解數(shù)據(jù)
數(shù)據(jù)清洗
數(shù)據(jù)分析
1祭玉、數(shù)據(jù)讀取
#導(dǎo)入相關(guān)模塊
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import re#正則解析
from wordcloud import WordCloud
import warnings
warnings.filterwarnings('ignore')
#連接mysql
import pymysql
pymysql.install_as_MySQLdb()
from sqlalchemy import create_engine
engine=create_engine('mysql://user:password@localhost:3306/frogdata?charset=gbk')
#讀取數(shù)據(jù)
df=pd.read_sql_query('select * from Boss_analyst',con=engine)
2闸天、理解數(shù)據(jù)
字段解釋
- position - 職位
- salary_range - 薪水區(qū)間
- work_year - 工作經(jīng)驗
- city - 城市
- tag1 - 技能標簽1
- tag2 - 技能標簽2
- tag3 - 技能標簽3
- tag4 - 技能標簽4
- tag5 - 技能標簽5
- company_name - 公司名稱
- text - 未知
- company_type - 公司類型
- company_welfare -公司福利
3孩革、數(shù)據(jù)清洗
對表中的position、salary_range勉耀、work_year佩厚、city骤素、text侠鳄、company_welfare字段數(shù)據(jù)進行清洗
#觀察數(shù)據(jù)的整體情況
df.info()
總共有4482條數(shù)據(jù)。tag4送讲、tag5奸笤、company_walfare列的有存在空缺數(shù)據(jù),但空缺不多哼鬓,而且這三個指標不是關(guān)鍵性指標揭保,所以暫不做處理
#考慮到爬取的數(shù)據(jù)可能存在重復(fù)數(shù)據(jù),此處做去重處理
df.drop_duplicates(inplace=True)
df.shape[0]
4435 存在47條重復(fù)數(shù)據(jù)
position 字段清洗
#觀察position字段
df.position.unique()
發(fā)現(xiàn)存在異常數(shù)據(jù)魄宏,這里需要對不相關(guān)的職位進行去除
df=df.loc[df.position.str.contains('數(shù)據(jù)|分析|Data|算法|Bi|ETL')]
df.shape[0]
3423
考慮數(shù)據(jù)類的崗位有數(shù)據(jù)運營、數(shù)據(jù)挖掘存筏、商業(yè)分析師宠互、算法工程師、ETL工程師等
salary_range字段清洗
#觀察salary_range字段
df['salary_range'].unique()
數(shù)據(jù)很不規(guī)整椭坚,初步判斷存在以下三種格式:'15-25K·13薪'予跌、'15-25K'、100-150元/天 善茎,打算把這一列的數(shù)據(jù)拆解分為兩列-最低薪水券册、最高薪水
def cut_word(word,types):
#把數(shù)據(jù)規(guī)整為'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]
#拆分數(shù)據(jù)-最低薪水垂涯、最高薪水
position3= salary_range.find('-')
bottom_salary= salary_range[:position3]
top_salary= salary_range[position3+1:]
#傳入types參數(shù)烁焙,接收最低薪水、最高薪水的數(shù)據(jù)
if types == 'bottom':
return bottom_salary
else:
return top_salary
#利用apply函數(shù)進行數(shù)據(jù)轉(zhuǎn)化
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')
#新增平均薪水列耕赘,方面后面做統(tǒng)計分析
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字段中學歷數(shù)據(jù)和工作年限數(shù)據(jù)混雜在了一起骄蝇,需要將其分列
學歷有7種數(shù)據(jù)格式:學歷不限、中專/中技操骡、高中九火、大專赚窃、本科、碩士岔激、博士
工作經(jīng)驗有三種數(shù)據(jù)格式:x-x年勒极、x天/周x個月、經(jīng)驗不限虑鼎。
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('中')
#通過切片把數(shù)據(jù)規(guī)整為學歷和工作經(jīng)驗兩列數(shù)據(jù)
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參數(shù)震叙,接收學歷和工作年限的數(shù)據(jù)
if types == 'education_background':
return educational_background
else:
return work_year
#利用apply函數(shù)進行數(shù)據(jù)轉(zhuǎn)化掀鹅,將學歷數(shù)據(jù)新添加到'education_background'列,工作經(jīng)驗數(shù)據(jù)新添加到'work_year'列
df['education_background']=df['work_year'].apply(cut_word1,types='education_background')
df['work_year']=df['work_year'].apply(cut_word1,types='work_year')
work_year字段已清洗完畢媒楼,轉(zhuǎn)化為work_year和education_background兩列數(shù)據(jù)
#work_year中存在2天/周3個月之類的數(shù)據(jù)乐尊,判斷是實習/兼職職位,這邊把全職和實習的崗位數(shù)據(jù)區(qū)分開來
df_part_time=df.loc[df.work_year.str.contains('天|周|月')]
#全職崗位
df_full_time=df.loc[~df.work_year.str.contains('天|周|月')]
city字段清洗
#觀察city數(shù)據(jù)
df_full_time['city'].unique()
有些值只顯示城市名稱划址,有些細分到了區(qū)扔嵌,這邊把數(shù)據(jù)維度統(tǒng)一規(guī)整到城市名稱
#通過apply函數(shù)和if邏輯判斷,把帶有·點的數(shù)據(jù)的城市地區(qū)維度進行切片截取
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字段包含了公司融資情況夺颤、公司類型痢缎、公司規(guī)模數(shù)據(jù),需將其轉(zhuǎn)化分列世澜,其中公司類型已存在(company_type)
只需轉(zhuǎn)化為公司融資情況和公司規(guī)模兩列
清洗結(jié)果
4独旷、數(shù)據(jù)分析
整體思路
- 數(shù)據(jù)類崗位整體需求
- 城市、學歷寥裂、工作經(jīng)驗對薪水的影響
- 不同崗位對應(yīng)的學歷要求嵌洼、薪水分布情況
- 公司一般會用什么福利待遇來吸引求職者
- 不同崗位要求的關(guān)鍵技能點是什么
1、數(shù)據(jù)類崗位整體需求
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)
#工作經(jīng)驗
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-10
bins=[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%%')
#調(diào)整子圖的間距
plt.tight_layout()
分析:
學歷要求:大專是最低要求麻养,招高中或中專/中技的極少,最好是本科及以上
工作經(jīng)驗需求:偏向招聘有一定經(jīng)驗的求職者诺舔,尤其3-5年經(jīng)驗的需求最旺盛鳖昌。一般工作3年以上,對于整個職業(yè)的了解會比較深入低飒,技術(shù)趨于成熟许昨,能夠幫助做一些獨立的項目
崗位分布情況:北上廣深杭對其需求都差不多,相對來說北京機會最多褥赊,廣州偏少
公司融資情況:招聘數(shù)據(jù)類崗位的一般都是達到了一定規(guī)模的大型企業(yè)
行業(yè)分布情況:互聯(lián)網(wǎng)行業(yè)需求是最多的车要,包括電商、金融崭倘。還有一些乙方公司也有一定需求翼岁,比如數(shù)據(jù)服務(wù)類类垫、咨詢類
薪資情況:受工作經(jīng)驗影響較大,3年工作經(jīng)驗薪資一般集中在20-30K琅坡,比較可觀
省略234
5悉患、不同崗位要求的關(guān)鍵技能點是什么
#數(shù)據(jù)運營職位相關(guān)技能
list_tag1=df_full_time[df_full_time['position']=='數(shù)據(jù)運營']['tag1'].tolist()
list_tag2=df_full_time[df_full_time['position']=='數(shù)據(jù)運營']['tag2'].tolist()
list_tag3=df_full_time[df_full_time['position']=='數(shù)據(jù)運營']['tag3'].tolist()
list_tag4=df_full_time[df_full_time['position']=='數(shù)據(jù)運營']['tag4'].tolist()
list_tag5=df_full_time[df_full_time['position']=='數(shù)據(jù)運營']['tag5'].tolist()
wordcloud_1=pd.Series(list_tag1+list_tag2+list_tag3+list_tag4+list_tag5).value_counts()
#數(shù)據(jù)分析職位相關(guān)技能
#數(shù)據(jù)挖掘職位相關(guān)技能
分析:
數(shù)據(jù)運營類崗位要求:基本的數(shù)據(jù)分析工具要掌握,熟悉sql,理解業(yè)務(wù)和產(chǎn)品榆俺,會數(shù)據(jù)挖掘和建模更好
數(shù)據(jù)分析類崗位要求:熟悉SQL售躁、 R/Python、hive,掌握基本的數(shù)據(jù)倉庫茴晋、數(shù)據(jù)挖掘陪捷、建模的知識,具備一定的業(yè)務(wù)經(jīng)驗
數(shù)據(jù)挖掘類崗位要求:熟悉Python/R诺擅、Spark市袖、Linux、Hadoop烁涌、SQL苍碟,掌握機器學習算法、數(shù)據(jù)結(jié)構(gòu)等