今天应上一篇文章的坑,开始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 final
def 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: