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

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

image.png

1 数据概览

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

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

2 公司类型处理

image.png
以上的图形只要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 学历处理

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

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

清洗后的数据如下
image.png

4 招聘人数处理

image.png
由于招聘人数的类型有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)]

过滤后的数据显示
image.png

5 发布时间处理

image.png
由上图可以看出,职位信息的发布时间都是最近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 行业处理

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

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”获取项目代码
image.png

展开阅读全文

没有更多推荐了,返回首页