python3对拉勾数据进行可视化分析的方法详解


Posted in Python onApril 03, 2019

前言

上回说到我们如何把拉勾的数据抓取下来的,既然获取了数据,就别放着不动,把它拿出来分析一下,看看这些数据里面都包含了什么信息。

(本次博客源码地址:https://github.com/MaxLyu/Lagou_Analyze (本地下载))

下面话不多说了,来一起看看详细的介绍吧

一、前期准备

由于上次抓的数据里面包含有 ID 这样的信息,我们需要将它去掉,并且查看描述性统计,确认是否存在异常值或者确实值。

read_file = "analyst.csv"
# 读取文件获得数据
data = pd.read_csv(read_file, encoding="gbk")
# 去除数据中无关的列
data = data[:].drop(['ID'], axis=1)
# 描述性统计
data.describe()

python3对拉勾数据进行可视化分析的方法详解

结果中的 unique 表示的是在该属性列下面存在的不同值个数,以学历要求为例子,它包含【本科、大专、硕士、不限】这4个不同的值,top 则表示数量最多的值为【本科】,freq 表示出现的频率为 387。由于薪资的 unique 比较多,我们查看一下存在什么值。

print(data['学历要求'].unique())
print(data['工作经验'].unique())
print(data['薪资'].unique())

python3对拉勾数据进行可视化分析的方法详解

二、预处理

从上述两张图可以看到,学历要求和工作经验的值比较少且没有缺失值与异常值,可以直接进行分析;但薪资的分布比较多,总计有75种,为了更好地进行分析,我们要对薪资做一个预处理。根据其分布情况,可以将它分成【5k 以下、5k-10k、10k-20k、20k-30k、30k-40k、40k 以上】,为了更加方便我们分析,取每个薪资范围的中位数,并划分到我们指定的范围内。

# 对薪资进行预处理
def pre_salary(data):
 salarys = data['薪资'].values
 salary_dic = {}
 for salary in salarys:
 # 根据'-'进行分割并去掉'k',分别将两端的值转换成整数
 min_sa = int(salary.split('-')[0][:-1])
 max_sa = int(salary.split('-')[1][:-1])
 # 求中位数
 median_sa = (min_sa + max_sa) / 2
 # 判断其值并划分到指定范围
 if median_sa < 5:
 salary_dic[u'5k以下'] = salary_dic.get(u'5k以下', 0) + 1
 elif median_sa > 5 and median_sa < 10:
 salary_dic[u'5k-10k'] = salary_dic.get(u'5k-10k', 0) + 1
 elif median_sa > 10 and median_sa < 20:
 salary_dic[u'10k-20k'] = salary_dic.get(u'10k-20k', 0) + 1
 elif median_sa > 20 and median_sa < 30:
 salary_dic[u'20k-30k'] = salary_dic.get(u'20k-30k', 0) + 1
 elif median_sa > 30 and median_sa < 40:
 salary_dic[u'30k-40k'] = salary_dic.get(u'30k-40k', 0) + 1
 else:
 salary_dic[u'40以上'] = salary_dic.get(u'40以上', 0) + 1
 print(salary_dic)
 return salary_dic

对【薪资】进行预处理之后,还要对【任职要求】的文本进行预处理。因为要做成词云图,需要对文本进行分割并去除掉一些出现频率较多但没有意义的词,我们称之为停用词,所以我们用 jieba 库进行处理。jieba 是一个python实现的分词库,对中文有着很强大的分词能力。

import jieba
def cut_text(text):
 stopwords =['熟悉','技术','职位','相关','工作','开发','使用','能力',
 '优先','描述','任职','经验','经验者','具有','具备','以上','善于',
 '一种','以及','一定','进行','能够','我们']
 for stopword in stopwords:
 jieba.del_word(stopword)
 
 words = jieba.lcut(text)
 content = " ".join(words)
 return content

预处理完成之后,就可以进行可视化分析了。

三、可视化分析

我们先绘制环状图和柱状图,然后将数据传进去就行了,环状图的代码如下:

def draw_pie(dic):
 labels = []
 count = []
 
 for key, value in dic.items():
 labels.append(key)
 count.append(value)
 
 fig, ax = plt.subplots(figsize=(8, 6), subplot_kw=dict(aspect="equal"))

 # 绘制饼状图,wedgeprops 表示每个扇形的宽度
 wedges, texts = ax.pie(count, wedgeprops=dict(width=0.5), startangle=0)
 # 文本框设置
 bbox_props = dict(boxstyle="square,pad=0.9", fc="w", ec="k", lw=0)
 # 线与箭头设置
 kw = dict(xycoords='data', textcoords='data', arrowprops=dict(arrowstyle="-"),
 bbox=bbox_props, zorder=0, va="center")

 for i, p in enumerate(wedges):
 ang = (p.theta2 - p.theta1)/2. + p.theta1
 y = np.sin(np.deg2rad(ang))
 x = np.cos(np.deg2rad(ang))
 # 设置文本框在扇形的哪一侧
 horizontalalignment = {-1: "right", 1: "left"}[int(np.sign(x))]
 # 用于设置箭头的弯曲程度
 connectionstyle = "angle,angleA=0,angleB={}".format(ang)
 kw["arrowprops"].update({"connectionstyle": connectionstyle})
 # annotate()用于对已绘制的图形做标注,text是注释文本,含 'xy' 的参数跟坐标点有关
 text = labels[i] + ": " + str('%.2f' %((count[i])/sum(count)*100)) + "%"
 ax.annotate(text, size=13, xy=(x, y), xytext=(1.35*np.sign(x), 1.4*y),
  horizontalalignment=horizontalalignment, **kw)
 plt.show()

柱状图的代码如下:

def draw_workYear(data):
 workyears = list(data[u'工作经验'].values)
 wy_dic = {}
 labels = []
 count = []
 # 得到工作经验对应的数目并保存到count中
 for workyear in workyears:
 wy_dic[workyear] = wy_dic.get(workyear, 0) + 1
 print(wy_dic)
 # wy_series = pd.Series(wy_dic)
 # 分别得到 count 的 key 和 value
 for key, value in wy_dic.items():
 labels.append(key)
 count.append(value)
 # 生成 keys 个数的数组
 x = np.arange(len(labels)) + 1
 # 将 values 转换成数组
 y = np.array(count)
 
 fig, axes = plt.subplots(figsize=(10, 8))
 axes.bar(x, y, color="#1195d0")
 plt.xticks(x, labels, size=13, rotation=0)
 plt.xlabel(u'工作经验', fontsize=15)
 plt.ylabel(u'数量', fontsize=15)
 
 # 根据坐标将数字标在图中,ha、va 为对齐方式
 for a, b in zip(x, y):
 plt.text(a, b+1, '%.0f' % b, ha='center', va='bottom', fontsize=12)
 plt.show()

我们再把学历要求和薪资的数据稍微处理一下变成字典形式,传进绘制好的环状图函数就行了。另外,我们还要对【任职要求】的文本进行可视化。

from wordcloud import WordCloud
# 绘制词云图
def draw_wordcloud(content):
 
 wc = WordCloud(
 font_path = 'c:\\Windows\Fonts\msyh.ttf',
 background_color = 'white',
 max_font_size=150, # 字体最大值
 min_font_size=24, # 字体最小值
 random_state=800, # 随机数
 collocations=False, # 避免重复单词
 width=1600,height=1200,margin=35, # 图像宽高,字间距
 )
 wc.generate(content)

 plt.figure(dpi=160) # 放大或缩小
 plt.imshow(wc, interpolation='catrom',vmax=1000)
 plt.axis("off") # 隐藏坐标

四、成果与总结

python3对拉勾数据进行可视化分析的方法详解

python数据分析师的学历大部分要求是本科,占了86%。

python3对拉勾数据进行可视化分析的方法详解

从柱状图可以看出,python数据分析师的工作经验绝大部分要求1-5年。

python3对拉勾数据进行可视化分析的方法详解

由此可以得出python数据分析的工资为10k-20k的比较多,40以上的也不少,工资高估计要求会比较高,所以我们看一下职位要求。

python3对拉勾数据进行可视化分析的方法详解

从词云图可看出,数据分析肯定要对数据比较敏感,并且对统计学、excel、python、数据挖掘、hadoop等也有一定的要求。不仅如此,还要求具有一定的抗压能力、解决问题的能力、良好的表达能力、思维能力等。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
Python生成8位随机字符串的方法分析
Dec 05 Python
Python简单实现查找一个字符串中最长不重复子串的方法
Mar 26 Python
python 实现selenium断言和验证的方法
Feb 13 Python
python使用pandas处理大数据节省内存技巧(推荐)
May 05 Python
Python for循环及基础用法详解
Nov 08 Python
如何使用Python脚本实现文件拷贝
Nov 20 Python
在Python中通过threshold创建mask方式
Feb 19 Python
使用python实现多维数据降维操作
Feb 24 Python
Django 解决上传文件时,request.FILES为空的问题
May 20 Python
Python 在 VSCode 中使用 IPython Kernel 的方法详解
Sep 05 Python
Python合并多张图片成PDF
Jun 09 Python
Python Numpy库的超详细教程
Apr 06 Python
python2.7使用plotly绘制本地散点图和折线图
Apr 02 #Python
Python时间序列处理之ARIMA模型的使用讲解
Apr 02 #Python
Python代码实现删除一个list里面重复元素的方法
Apr 02 #Python
从0开始的Python学习014面向对象编程(推荐)
Apr 02 #Python
Python参数解析模块sys、getopt、argparse使用与对比分析
Apr 02 #Python
python flask安装和命令详解
Apr 02 #Python
详解python 3.6 安装json 模块(simplejson)
Apr 02 #Python
You might like
PHP判断远程图片或文件是否存在的实现代码
2014/02/20 PHP
让ThinkPHP支持大小写url地址访问的方法
2014/10/31 PHP
PHP实现动态web服务器方法
2015/07/29 PHP
功能强大的PHP图片处理类(水印、透明度、旋转)
2015/10/21 PHP
图片格式的JavaScript和CSS速查手册
2007/08/20 Javascript
uploadify 3.0 详细使用说明
2012/06/18 Javascript
jquery实现带复选框的表格行选中删除时高亮显示
2013/08/01 Javascript
Jquery插件实现点击获取验证码后60秒内禁止重新获取
2015/03/13 Javascript
jQuery获取checkbox选中的值
2016/01/28 Javascript
动态加载js文件简单示例
2016/04/21 Javascript
JS限制条件补全问题实例分析
2016/12/16 Javascript
js正则表达式验证表单【完整版】
2017/03/06 Javascript
vue中实现先请求数据再渲染dom分享
2018/03/17 Javascript
vue实现点击选中,其他的不选中方法
2018/09/05 Javascript
js实现课堂随机点名系统
2019/11/21 Javascript
Vue3 响应式侦听与计算的实现
2020/11/11 Javascript
[01:00]选手抵达华西村 整装待发备战2016国际邀请赛中国区预选赛
2016/06/25 DOTA
python基础教程之类class定义使用方法
2014/02/20 Python
Pthon批量处理将pdb文件生成dssp文件
2015/06/21 Python
python3批量删除豆瓣分组下的好友的实现代码
2016/06/07 Python
Python实现将sqlite数据库导出转成Excel(xls)表的方法
2017/07/17 Python
Python读取sqlite数据库文件的方法分析
2017/08/07 Python
python并发编程多进程 模拟抢票实现过程
2019/08/20 Python
pytorch 状态字典:state_dict使用详解
2020/01/17 Python
Django REST Swagger实现指定api参数
2020/07/07 Python
西班牙在线宠物商店:zooplus.es
2017/02/24 全球购物
瑞典的玛丽小姐:Miss Mary of Sweden
2019/02/13 全球购物
双立人加拿大官网:Zwilling加拿大
2020/08/10 全球购物
家长会演讲稿范文
2014/01/10 职场文书
党员组织关系介绍信
2014/02/13 职场文书
安全教育感言
2014/03/04 职场文书
小学教师读书活动总结
2014/07/08 职场文书
迎国庆演讲稿
2014/09/05 职场文书
话题作文之财富(600字)
2019/12/03 职场文书
Python代码风格与编程习惯重要吗?
2021/06/03 Python
js面向对象编程OOP及函数式编程FP区别
2022/07/07 Javascript