数据分析这个职位有前途吗?--数据预处理(二)

通过前面的文章获取了要分析的取样的数据格式如下,接下来是要对每一列的数据进行分析,并对分析的数据进行数据的处理,通过pandas包对数据进行转换处理,通过matplotlib包对数据有一个直观的图形化显示

1 数据概览

通过dataframe的describe 方法对数据有一个总的印象,对每一列会显示总的数量,去重后的数据数量,数量最多的数据(名称,数量),可以对整份数据有一个总的认识,接下来要对每一列结合图形再进一步进行处理,例如“business”列数据

总的数量:34829 去重后的数量:970 数量最多的类型:互联网/电子商务 互联网/电子商务 类型的数量:3476

2 公司类型处理

以上的图形只要python几行代码就可以实现,通过对数据进行分组,统计数据,进行排序后,通过柱状图进行展示,直观的告诉我们其中 民营企业的招聘人数是最多,并且是遥遥领先

 1def autolabel(rects):
 2    for rect in rects:
 3        height = rect.get_height()
 4        plt.text(rect.get_x()+rect.get_width()/2-0.1, height, '%s' % height)
 5def company_type_desc(data,file_name="公司类型数量分布"):
 6    companyTypeGroup=data['company_type'].groupby(data['company_type'])
 7    companyTypeCount=companyTypeGroup.count().sort_values(ascending=False)
 8    plt.figure(figsize=(22, 12))
 9    rects =plt.bar(x = arange(len(companyTypeCount.index)),height = companyTypeCount.values)
10    plt.xticks(arange(len(companyTypeCount.index)),companyTypeCount.index,rotation=360)
11    autolabel(rects)
12    plt.title("公司类型数量分布")
13    plt.xlabel('公司类型')
14    plt.ylabel('数量')
15    plt.savefig("data/"+file_name+".jpg")
复制代码

第6行是获取company_type列并根据该列进行分组 第7行是通过count对分组进行计数后通过sort_values对数据进行排序,并且设置为降序 第8行是初始化Matplotlib并且设置好图形的比例 第9-10行是为了解决Matplotlib显示的时候,x轴的数据没有按数据的排序显示的问题,如果是直接按37行的代码直接执行,显示的数据是乱序的 第11行是为了在每个柱状图的上方显示数量进行的处理,其中text方法是可以在图形上任意的地方填写文字,通过计算每个柱状的坐标进行填写

3 学历处理

通过上图可以看到 大专是要求最多。发现还有其他非法的数据,招聘人数的数据在这一列显示,这个是因为在获取数据的时候,该结构的数据获取不对。通过该图型,可以看出非法的数据的占比不多,直接进行过滤就可以,通过下面的代码过滤掉有招聘数量的数据

 data=data[data["education"].apply(lambda x:True if str(x).find("招")==-1 else False)]
复制代码

清洗后的数据如下

4 招聘人数处理

由于招聘人数的类型有79种那么多,一个图表显示太挤,只取前20的数据进行分析处理,代码如下

headcountCount=headcountGroup.count().sort_values(ascending=False)[0:20]
复制代码

通过前20的图表发现有一些非法的数据,由于占比的数量不多,直接进行过滤掉,代码如下

data=data[data["headcount"].apply(lambda x:True if str(x).find("发布")==-1 else False)]
复制代码

过滤后的数据显示

5 发布时间处理

由上图可以看出,职位信息的发布时间都是最近3个月的,而且是在最近一个星期更新的频率最高,这个是因为招聘网站的信息排序导致用户经常频繁的更新发布职位信息,具体的实现代码如下

 1def deal_publish_data(value):
 2    try:   
 3        datetime.datetime.strptime(value,'%m-%d')   
 4    except ValueError:  
 5        return False  
 6    return True 
 7def publish_date_plot_desc(data):
 8    data['publish_date']=data['publish_date'].apply(lambda x:str(x).replace("发布",""))
 9    data=data[data['publish_date'].apply(lambda x: deal_publish_data(x))]
10    publishDateGroup=data['publish_date'].groupby(data['publish_date'])
11    publishDateCount=publishDateGroup.count().sort_index(ascending=False)
12    plt.figure(figsize=(22, 12))
13    plt.plot(arange(len(publishDateCount.index)), publishDateCount.values)
14    plt.xticks(arange(len(publishDateCount.index)),publishDateCount.index,rotation=90)
15    plt.title("发布时间分布")
16    plt.xlabel('发布时间')
17    plt.ylabel('数量')
18    plt.savefig("data/发布时间分布--按时间.jpg")
复制代码

第8行 是对数据进行替换处理,变成是月份-天数的格式 第9行 是调用了日期转换的判断,选取日期转换成功的数据 第10行 是对索引列进行排序,也就是日期进行排序

6 行业处理

由于行业的内容是用“,”,"/"隔开的,需要对数据一行拆分成多行进行处理,主要是通过下面的代码进行处理

data=data['business'].str.split('/', expand=True).stack().reset_index(level=0).set_index('level_0').rename(columns={0:'business'}).join(data.drop('business', axis=1))
data=data['business'].str.split(',', expand=True).stack().reset_index(level=0).set_index('level_0').rename(columns={0:'business'}).join(data.drop('business', axis=1))
复制代码

关注公众号,回复“51job”获取项目代码

转载于:https://juejin.im/post/5bc6d0186fb9a05d36350a3e

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值