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写入CSV文件的方法
Jul 08 Python
Python实现批量检测HTTP服务的状态
Oct 27 Python
Python Queue模块详细介绍及实例
Dec 27 Python
pygame加载中文名mp3文件出现error
Mar 31 Python
python实现将读入的多维list转为一维list的方法
Jun 28 Python
Python创建一个空的dataframe,并循环赋值的方法
Nov 08 Python
实例详解Python装饰器与闭包
Jul 29 Python
Django实现文件上传下载
Oct 06 Python
在keras里实现自定义上采样层
Jun 28 Python
python中使用.py配置文件的方法详解
Nov 23 Python
如何判断pytorch是否支持GPU加速
Jun 01 Python
python画条形图的具体代码
Apr 20 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微信分享到朋友圈、QQ、朋友、微博
2019/02/18 PHP
WordPress免插件实现面包屑导航的示例代码
2020/08/20 PHP
javascript CSS画图之基础篇
2009/07/29 Javascript
Javascript 面向对象 继承
2010/05/13 Javascript
初学js 新节点的创建 删除 的步骤
2011/07/04 Javascript
基于jquery &amp; json的省市区联动代码
2012/06/26 Javascript
Jquery中children与find之间的区别详细解析
2013/11/29 Javascript
js实现的GridView即表头固定表体有滚动条且可滚动
2014/02/19 Javascript
js实现根据身份证号自动生成出生日期
2015/12/15 Javascript
jQuery插件扩展测试实例
2016/06/21 Javascript
JavaScript使用键盘输入控制实现数字验证功能
2016/08/19 Javascript
JavaScript执行环境及作用域链实例分析
2018/08/01 Javascript
Vue实现左右菜单联动实现代码
2018/08/12 Javascript
记录一篇关于redux-saga的基本使用过程
2018/08/18 Javascript
使用JQuery自动完成插件Auto Complete详解
2019/06/18 jQuery
微信小程序实现按字母排列选择城市功能
2019/11/25 Javascript
5分钟快速看懂ES6中的反射与代理
2019/12/19 Javascript
ES5 模拟 ES6 的 Symbol 实现私有成员功能示例
2020/05/06 Javascript
Python机器学习算法之k均值聚类(k-means)
2018/02/23 Python
Numpy数据类型转换astype,dtype的方法
2018/06/09 Python
python TKinter获取文本框内容的方法
2018/10/11 Python
python导入模块交叉引用的方法
2019/01/19 Python
Python文件读写w+和r+区别解析
2020/03/26 Python
Python根据字符串调用函数过程解析
2020/11/05 Python
解决import tensorflow导致jupyter内核死亡的问题
2021/02/06 Python
详解background属性的8个属性值(面试题)
2020/11/02 HTML / CSS
HTML5在a标签内放置块级元素示例代码
2013/08/23 HTML / CSS
Dockers美国官方网站:卡其裤、男士服装、鞋及配件
2016/11/22 全球购物
2014年中秋节活动总结
2014/08/29 职场文书
五一劳动节演讲稿
2014/09/12 职场文书
授权收款委托书
2014/09/23 职场文书
2014超市收银员工作总结
2014/11/13 职场文书
师德先进个人材料
2014/12/20 职场文书
幼儿园托班教育随笔
2015/08/14 职场文书
python人工智能human learn绘图可创建机器学习模型
2021/11/23 Python
Java 超详细讲解hashCode方法
2022/04/07 Java/Android