[MySQL]猎聘网数据分析职位数据清洗

通过python编写爬虫,爬取了猎聘网关键词“数据分析”的全国范围内1月内发布的企业职位。

本次分析源数据的职位发布日期:2017年9月19日-2017年10月19日

爬虫介绍:爬取猎聘网职位信息

源数据:职位数据

清洗完成后,用于分析的数据2320条

数据清洗Query代码:datacleaning.sql

数据清洗结果:用于分析的数据

猎聘网职位爬取及分析系列文章已全部完成

系列文章一:[requests,pyquery]爬取猎聘网职位信息

系列文章三:[python,pandas]数据分析求职指南——猎聘网数据分析职位解析

数据清洗

观察原始数据(共27633条)情况,并使用MySQL对爬取的原始数据进行清洗。

原始数据字段如下所示:

  • JobTitle VARCHAR(255) :职位名称
  • company VARCHAR(255):公司名称
  • salary VARCHAR(255):薪酬
  • position VARCHAR(255):工作地
  • PubTime VARCHAR(255):发布时间
  • qualification VARCHAR(255):职位要求,包含学历、工作经验、语言、年龄
  • tag_list VARCHAR(255):职位标签,’tag1,tag2,…’
  • description TEXT:职位描述,详细介绍职位工作内容,任职要求等信息
  • industry VARCHAR(255):行业
  • industry_detail VARCHAR(255):猎聘更加细化的行业区分
  • companySize VARCHAR(255):公司规模,人员数
  • is_end INT(255):职位是否已结束,未结束为0,结束为1

薪酬数据

salary格式如’4-5万 72小时反馈’、’面议 24小时反馈’,包含职位反馈时间信息

  • 新建字段min_salary INT(255)、max_salary INT(255)、average_salary FLOAT
  • 从salary字段中提取min_salary、max_salary,并有average_salary = avg(min_salary,max_salary)
  • 薪酬为’面议’时,min_salary = max_salary = average_salary = 0

工作地数据

position格式为’国家’ 、 ‘城市’ 、 ‘城市-区县’,如:’新加坡’、’北京’、’广州-天河区’,将’-‘前后两部分分开

  • 新建字段position1 VARCHAR(255)、position2 VARCHAR(255)
  • 若position包含’-‘,前一部分为position1,后一部分为position2
  • 若position不包含’-‘,则position1 = position,position2 = null

发布时间

PubTime格式为’XXXX年XX月XX日’,是字符串形式

  • 新建字段pdate date
  • 提取pubtime中年月日,转化成 pdate = ‘%Y-%m-%d’

异常及空值处理

  • 因猎聘网职位详情页源码格式问题,若职位未给出公司规模数据,则爬取得到的公司规模字段实际为公司地址,令出现问题的行comAddress = companySize,并删除companySize字段内容
  • industry_detail字段为空时,令industry_detail = industry
  • comAddress字段为空时,令comAddress = position
  • companySize、tag_list、description字段为空,填充’null’

用于分析的数据

根据分析目的筛选用于分析的数据,获得2320条

  • 因猎聘网搜索较为模糊,结果中包含’会计助理’、’项目运营’等无关职位,对JobTitle进行筛选:包含’数据分析’、’大数据’、’数据运营’、’data’等
  • 只分析未结束职位:is_end = 0
  • 去重

源代码

--提取salary,获得min-max-average salary --新建列 ALTER TABLE DATA ADD (
min_salary FLOAT(10),
max_salary FLOAT(10),
average_salary FLOAT(10)
) ;
--when `salary` like '%面议%',min/max/average=0 UPDATE DATA SET `min_salary`=0, `max_salary`=0, `average_salary`=0
WHERE  `salary` LIKE '%面议%' ;
--salary不是面谈时,salary格式'min-max万' --min_salary=min UPDATE DATA SET `min_salary`= SUBSTRING_INDEX(`salary`,'-',1)
WHERE `salary` LIKE '%-%万%';
--max_Salary=max UPDATE DATA SET `max_salary`= (SUBSTRING(SUBSTRING_INDEX(`salary`,'万',1),LOCATE('-',SUBSTRING_INDEX(`salary`,'万',1))+1))
WHERE `salary` LIKE '%-%万%';
--average_salary = (min+max)/2 UPDATE DATA SET `average_salary`= (min_salary+max_salary)/2
WHERE `salary` LIKE '%-%万%';

--整理position,XX-XX或XX ALTER TABLE DATA ADD (
position1 VARCHAR(255),
position2 VARCHAR(255)
);
UPDATE DATA SET position1 = position
WHERE position NOT LIKE '%-%';
UPDATE DATA SET position2 = 'null'
WHERE position NOT LIKE '%-%';
UPDATE DATA SET position1 = SUBSTRING_INDEX(`position`,'-',1)
WHERE position LIKE '%-%';
UPDATE DATA SET position2 = SUBSTRING(`position`,LOCATE('-',`position`)+1)
WHERE position LIKE '%-%';

--发布时间pubtime:str->date to newfield:pubdate SELECT @y :=LEFT(data.`PubTime`,4) FROM `data`;
SELECT @m :=mid(pubtime,6,2) FROM `data`;
SELECT @d :=mid(pubtime,9,2) FROM `data`;
UPDATE `data` SET `pubdate`=str_to_Date(
concat(@y,'-',@m,'-',@d),'%Y-%m-%d');

--整理qualification --学历 SELECT substring_index(qualification,' ',1)
FROM `data`;
UPDATE TABLE `data` SET education = 
substring_index(qualification,' ',1)
--工作经验 UPDATE `data` SET 
`workexperience` = substring(substring_index(qualification,' ',2),char_length(substring_index(qualification,' ',1))+2) ;
--年龄要求 UPDATE `DATA` SET 
`age` = substring_index(qualification,' ',-1) ;
--工作语言 UPDATE `data` SET workLANGUAGE = 
mid(
qualification,
char_length(substring_index(qualification,' ',2))+2,
char_length(substring(`qualification`,char_length(substring_index(qualification,' ',2))+2))-char_length(`age`)-1
);

--找出comsize内容实际为address的,将其内容赋予comAddr并删除comsize内的内容 UPDATE DATA SET `comAddress`=`companySize`
WHERE (`companySize` NOT LIKE '%-%人%' AND companySize NOT LIKE '%人以上') ;
UPDATE DATA SET `companySize`=' '
WHERE (`companySize` NOT LIKE '%-%人%' AND companySize NOT LIKE '%人以上') ;

--填充空缺内容 --industry_detail为空时,用industry的内容填充 UPDATE DATA SET industry_detail = industry 
WHERE `industry_detail`=' ' ;
--addr内容为空时用position内容填充 UPDATE DATA SET `comAddress` = `position`
WHERE `comAddress`=' ' ;
--size内容为空时,填写'null' UPDATE DATA SET `companySize` = 'null'
WHERE `companySize`=' ' ;
--tag_list内容为空时,填写'null' UPDATE DATA SET `tag_list` = 'null'
WHERE `tag_list`=' ' ;
--description内容为空时,填写'null' UPDATE DATA SET `description` = 'null'
WHERE `description`=' ' ;

--查询用于分析的数据 SELECT jobtitle,company,min_salary,max_salary,average_salary,pdate,
tag_list,description,industry,companysize,comaddress,position1,
education,workexperience,worklanguage,age,is_end
FROM `data`
WHERE (
jobtitle LIKE '%数据%分析%' 
OR jobtitle LIKE'%大数据%' 
OR jobtitle LIKE '%大数据%' 
OR jobtitle LIKE '%数据%运营%'
OR jobtitle LIKE '%data%'
)
AND (is_end = 0);

    原文作者:RAYW
    原文地址: https://zhuanlan.zhihu.com/p/30422704
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞