手记

数据分析这个职位有前途吗?--数据挖掘(三)

通过前面对数据对简单的分析,清洗,到目前为止我对数据分析这个职位有了一个大概的了解,但是对数据的认知还不足以回答题目的问题,接下来是对数据进行进一步的挖掘

1 我比较俗,有没有前途先看钱

1.1 工资分布按数量进行排序

图片.png


需要对薪资的数据进行处理,把字符串的类型转换为数字,并把薪资范围作一个比较乐观的处理,取最大范围的值,并把年薪值简单的按12个月换算成月薪

 1def tran_salary(value): 2    if str(value).find("千/月")!=-1: 3        value=int(float(str(value).replace("千/月", "").split("-")[1].strip())) 4    elif str(value).find("万/年")!=-1: 5        value=str(value).replace("万/年", "").split("-")[1].strip() 6        value=int(float(value)*10/12) 7    elif str(value).find("万/月")!=-1: 8        value=str(value).replace("万/月", "").split("-")[1].strip() 9        value=int(float(value)*10)10    elif str(value).find("万以上/月")!=-1:11        value=str(value).replace("万以上/月", "").strip()12        value=int(float(value)*10)13    elif str(value).find("万以上/年")!=-1:14        value=str(value).replace("万以上/年", "").strip()15        value=int(float(value)*10/12)16    else:17        value=018    return value19def salary_desc(data):20    data['salary']=data['salary'].apply(lambda x:tran_salary(x))21    salaryGroup=data['salary'].groupby(data['salary'])22    salaryCount=salaryGroup.count().sort_values(ascending=False)[0:40]23    plt.figure(figsize=(22, 12))24    rects =plt.bar(x = arange(len(salaryCount.index)),height = salaryCount.values)25    plt.xticks(arange(len(salaryCount.index)),salaryCount.index,rotation=360)26    autolabel(rects)27    plt.title("工资分布")28    plt.xlabel('工资(千/月)')29    plt.ylabel('数量')30    plt.savefig("data/工资分布--按数量排序.jpg")

1.2 工资分布按工资排序

图片.png


只需要把前面的代码的第23行换成如下的代码,按薪资进行排序就可以

 salaryCount=salaryGroup.count().sort_index(ascending=False)[0:40]

1.3 工资分组显示

通过柱状图没有给我们很直观的每个工资的占比,下面是通过饼图的展示方式,对薪资进行“1万以下, 1万到2万, 2万到3万, 3万到4万, 4万到5万, 5万到10万,10万以上”分层显示,可以看到90%的人薪资是在2万以下


图片.png


第3,4行代码是定义分层的范围,还有显示的文字,最关键的是第5行通过dataframe的cut的方法进行分层

 1 def salary_desc_pie(data):
 2    data['salary']=data['salary'].apply(lambda x:tran_salary(x)) 3    bins = [ data['salary'].min(), 10, 20, 30, 40,50,100,data['salary'].max()] 4    labels = ['1万以下', '1万到2万', '2万到3万', '3万到4万', '4万到5万', '5万到10万','10万以上'] 5    data['月薪分层'] = pd.cut(data['salary'], bins, labels=labels) 6    salaryGroup=data['salary'].groupby(data['月薪分层']).count() 7    labels=list(map(lambda x:"%s (%s,%s)"%(x,str(round(float(salaryGroup[x])/data['salary'].count()*100,2))+"%",str(salaryGroup[x])),labels)) 8    plt.figure(figsize=(22, 12)) 9    plt.pie(salaryGroup.values, labels=labels,10                                       labeldistance=1.1, autopct='%2.0f%%', shadow=False,11                                       startangle=90, pctdistance=0.6)  
12    plt.axis('equal')13    plt.legend(loc='upper left', bbox_to_anchor=(-0.1, 1))14    plt.savefig("data/工资分布--饼图.jpg")

2 具备什么条件才能高薪

2.1 月薪2万以上的数据显示

通过下列的图可以得出结论:如果你是本科毕业并具备了3-4年的互联网,电子商务的工作经验,那么你去民营企业拿到这个薪资的概率很大。


图片.png


图片.png


图片.png


只需要第二行代码对薪资的范围过滤大于月薪20千的数据就可以

1    data['salary']=data['salary'].apply(lambda x:tran_salary(x))2    data=data[data['salary'].apply(lambda x: float(x)>20)]

2.2 月薪2万需要具备的能力

具备的能力,是通过职位描述里面的要求进行分析,通过对职位描述的文字进行拆分,并且对停用词进行过滤,筛选出薪资要求2万的关键字,并且通过云词进行显示,这样比较直观


图片.png

1def gen_userdict(data_ser): 2    wfile = open('data/job_desc_dict.txt', 'w',encoding='utf-8') 3    wfile.truncate() 4    userdict = {} 
 5    for index in data_ser.index: 6        cutWord=jieba.cut(str(data_ser[index]),cut_all=False) 7        for j in cutWord:  
 8            j=j.replace(' ', '') 9            if j != "":10                if (j in userdict):  
11                    userdict[j] += 1  12                else:  
13                    userdict[j] = 114    user_dict_pf=pd.DataFrame(list(userdict.items()), columns=['word', 'num'])15    stopwords=pd.read_csv("data/stopwords.txt",index_col=False,quoting=3,sep=" ",names=['stopword'],encoding='utf-8')16    user_dict_pf=user_dict_pf[~user_dict_pf['word'].isin(stopwords['stopword'])]17    user_dict_pf=user_dict_pf.sort_values(by = 'num',ascending = False)[0:100]18    cloud_text={}19    for idx,item in user_dict_pf.iterrows():20        cloud_text[item['word']]=item['num']21        wfile.write(item['word'] + ' ' + str(item['num']) + '\n') 
22    gen_word_cloud(cloud_text)2324def gen_word_cloud(cloud_text):25    wc = WordCloud(26    background_color="white", #背景颜色27    max_words=500, #显示最大词数28    font_path="simhei.ttf",  #使用字体29    min_font_size=15,30    max_font_size=50, 
31    width=800  #图幅宽度32    )33    wc.generate_from_frequencies(cloud_text)34    wc.to_file("data/词云.png")

第6行通过结巴分词对职位的描述进行拆分。
第15,16行读取停用词,并对前面的结果过滤停用词

3 看看你有没有拖后腿

看看你的工资有没有被平均


图片.png

第13行对工作经验的数据进行处理
第14行对薪资进行过滤,对于超出月薪5万的数据进行过滤,防止被平均了
第15行对工作经验进行分组,并对分组的工资进行求平均值

 1def tran_work_experience(value): 2    if str(value).find("年经验")!=-1: 3        if str(value).find("-")!=-1: 4            value=int(float(str(value).replace("年经验", "").split("-")[1].strip())) 5            pass
 6        else: 7            value=int(float(str(value).replace("年经验", "").strip())) 8    else: 9        value=010    return value11def salary_work_experience_rel(data):12    data['salary']=data['salary'].apply(lambda x:tran_salary(x))13    data['work_experience']=data['work_experience'].apply(lambda x:tran_work_experience(x))14    data=data[data['salary']<50]15    df_mean = data.groupby('work_experience')['salary'].mean()16    plt.figure(figsize=(22, 12))17    rects =plt.bar(x = arange(len(df_mean.index)),height = df_mean.values)18    plt.xticks(arange(len(df_mean.index)),df_mean.index,rotation=360)19    autolabel(rects)20    plt.title("工作经验-工资关系")21    plt.xlabel('工作经验(年)')22    plt.ylabel('工资(千/月)')23    plt.savefig("data/工作经验-工资关系.jpg")



作者:数据运营python
链接:https://www.jianshu.com/p/71d72608105f


0人推荐
随时随地看视频
慕课网APP