01


今天应上一篇文章的坑,开始Python数据分析的旅程。Python语言易读、易维护,在深度学习、机器学习和人工智能领域表现出色,推动现今最前沿的科学技术发展。Python相对较容易入门,系列的优点促使Python在数据分析领域占据了较大优势。另外,本文使用的Tableau是一项功能强大的数据可视化软件,能将数据运算与可视化图表完美结合起来,在商业实践中被越来越多的公司使用,成为了企业商业智能化解决方案的重要平台之一。本文就借助Python和Tableau的强大功能,进行一项简单的数据分析实例。




02





首先,用Python抓取前程无忧网站公布的全国数据分析相关的招聘岗位,然后对数据进行简单的清洗。使用Pycharm编辑器,同时安装requests/bs4/pandas等Python库,然后即可实现本文的数据分析功能。

首先import所需库,输入待爬虫网站,然后编写爬虫程序,选择需要爬取的信息,写入函数get_contents()中,代码如下:




以上代码运行后抓取了前程无忧网站上共2000页100000的招聘信息,然后再编写一段代码,将下来的信息存入csv文件中,以便于后续操作。
# - * - coding:utf-8 - * - from bs4 import BeautifulSoup import requests
import pandas as pd url =
r'https://search.51job.com/list/000000,000000,0000,00,9,99,' \
r'%25E6%2595%25B0%25E6%258D%25AE%25E5%2588%2586%25E6%259E%2590,2,{}.html?' \
r'lang=c&stype=1' \
r'&postchannel=0000&workyear=99&cotype=99°reefrom=99&jobterm=99&companysize=99&lonlat=0%2'
\
r'C0&radius=-1&ord_field=0&confirmdate=9&fromType=&dibiaoid=0&address=&line=&specialarea=00&from=&welfare='
final = [] def get_contents(): for i in range(0,2001): url_real = url.format(i)
try: res = requests.get(url_real) res.encoding = 'gbk' soup =
BeautifulSoup(res.text,'html.parser') total_content =
soup.select('.dw_table')[0] companys = total_content.select('.el') # y =
total_content.select('.t1 ') # print(y) for company in companys: total = {}
position_all = company.select('.t1 ')[0] position_a = position_all.select('a')
if len(position_a)>0: total['name'] = company.select('.t2')[0].text.strip()
total['position'] = position_a[0]['title'] total['location'] =
company.select('.t3')[0].text.strip() total['salary'] =
company.select('.t4')[0].text.strip() total['update_date'] =
company.select('.t5')[0].text.strip() total['pos_url'] =
position_a[0]['href'].strip() # total =
'{}\t{}\t{}\t{}\t{}\t{}\n'.format(name,position,location,salary,update_date,pos_url)
print("Dealing with page " + str(i) + ' Please waiting------')
print('Company\'s name is ' + total['name'] ) final.append(total) except:
print('Failed with page ' + str(i) + ' ------') return finaldef save_my_file():
# with open('data_analysis.csv','a+') as file_obj: df = pd.DataFrame(final)
df.to_csv('0512_51job-data_analysis.csv', mode = 'a',encoding = 'gbk')
get_contents() save_my_file() print(len(final))


放一张爬取的动图,边爬边打印进度:





函数save_my_file()完成了数据的保存。至此全部数据抓取完毕并成功存入本地文件。接下来对数据进行简单的清洗。主要任务包括去除非数据分析类岗位的招聘信息、区域的清洗,只取到市一级单位、区间类型的工资拆开分为最低和最高工资(统一为'K/月'单位)、去除工资项空白的数据等。
# - * - coding:utf-8 - * - import pandas as pd import numpy as np clean_data =
[] def select_dataposition(): data =
pd.read_csv('0512_51job-data_analysis.csv',header = 0,encoding= 'gbk') df =
pd.DataFrame(data) #df = df[True - df.name.duplicatde()] df =
df[df.position.str.contains(r'.*?数据.*?|.*?分析。*?')] #df = df[df.dropna(df.salary
='')] df.to_excel('data_51.xlsx') def get_file_elements(): file =
pd.read_excel('data_51.xlsx') file = pd.DataFrame(file) rows = len(file)
print(rows) for i in range(0, rows): raw_data = {} raw_data['公司'] =
file['name'][i] raw_data['职位'] = file['position'][i] if '-' in
file['location'][i]: plc_1 = str(file['location'][i]).find('-') raw_data['城市']
= file['location'][i][:plc_1] else: raw_data['城市'] = file['location'][i] #
print(file['salary'][i]) if file['salary'][i] == "": raw_data['最低工资'] = ''
raw_data['最高工资'] = '' elif '-' in file['salary'][i]: plc_2 =
str(file['salary'][i]).find('-') # print(plc_2) low_salary =
file['salary'][i][:plc_2] high_salary = file['salary'][i][plc_2 + 1
:].rstrip('万/月|千/月|万/年') # print(raw_data['high_salary']) if '万/月' in
file['salary'][i]: raw_data['最低工资'] = float(low_salary) * 10 raw_data['最高工资'] =
float(high_salary) * 10 elif '千/月' in file['salary'][i]: raw_data['最低工资'] =
float(low_salary) raw_data['最高工资'] = float(high_salary) elif '万/年' in
file['salary'][i]: raw_data['最低工资'] = float(low_salary) * 10 / 12
raw_data['最高工资'] = float(high_salary) * 10 / 12 else: raw_data['最低工资'] =
file['salary'][i] raw_data['最高工资'] = file['salary'][i] raw_data['网址'] =
file['pos_url'][i] raw_data['更新日期'] = file['update_date'][i]
clean_data.append(raw_data) print('Processing with line ' + str(i) + '------')
print('Still have ' + str(rows + 1 - i) + ' rows to complete------') return
clean_data def save_clean_data(): lt = pd.DataFrame(clean_data)
lt.to_excel('final_result.xlsx') print("Successfully Saved My File!")
#select_dataposition() get_file_elements() save_clean_data()


完成清洗后数据剩余7088条(最新数据截至5月12日)。




03








获得全部数据后,运用Tableau进行一些简单的分析,包括招聘公司的区域分布、招聘岗位薪资最高的城市和招聘岗位薪资最高的公司等。时间限制,先进行三项简单分析。后续对招聘岗位进行详细分类整合,如数据分析专员、数据分析师、数据专家、大数据分析师等类,对数据分析详细类别的岗位薪资、公司岗位类别进行进一步分析,分析结论将更具有现实意义。

(1)招聘岗位的区域分布:





数据可视化结果表明数据分析招聘岗位主要分布在沿海地区,江浙包邮区、珠三角地区分布密集,工资水平也较高;分布趋势由沿海向内陆逐渐递减,中西部地区岗位主要在省会城市,且这些省会城市的工资水平大致相当。

(2)招聘岗位薪资最高的城市:




排名前13的城市以沿海地区为主,薪资水平均超10K,目前最新招聘数据中上海被其余城市超越,但薪资也已经达到12K,有木有很激动?

(3)招聘岗位薪资最高的公司:




现招聘薪资排名前15的公司如上所示。平均月薪超40K,岗位以大数据工程师、架构师、总监等为主,属于数据分析的高端岗位。

本文的分享至此结束,招聘信息时时在更新,后续将继续就最新数据,做一些更深入的可视化分析、挖掘等,也可以作为今后技能学习、工作选择的指南针。

欢迎大家关注本人微信公众号,公众号将持续更新python,tableau,SQL等数据分析的文章。



ID: DataDreamInitiate

公众号名称:数据分析X小硕

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信