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实现读取目录所有文件的文件名并保存到txt文件代码
Nov 22 Python
Python实现基于权重的随机数2种方法
Apr 28 Python
Python 数据结构之堆栈实例代码
Jan 22 Python
Python入门_浅谈数据结构的4种基本类型
May 16 Python
python 简单的绘图工具turtle使用详解
Jun 21 Python
全面分析Python的优点和缺点
Feb 07 Python
django manage.py扩展自定义命令方法
May 27 Python
在python中用url_for构造URL的方法
Jul 25 Python
Django获取应用下的所有models的例子
Aug 30 Python
解决pycharm启动后总是不停的updating indices...indexing的问题
Nov 27 Python
Python 图片添加美颜效果
Apr 28 Python
python数字图像处理:图像简单滤波
Jun 28 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
实用函数9
2007/11/08 PHP
使用php判断服务器是否支持Gzip压缩功能
2013/09/24 PHP
PHP使用CURL_MULTI实现多线程采集的例子
2014/07/29 PHP
php自定义函数实现统计中文字符串长度的方法小结
2017/04/15 PHP
PHP基于自定义类随机生成姓名的方法示例
2017/08/05 PHP
PHP+MySQL实现消息队列的方法分析
2018/05/09 PHP
自己整理的一个javascript日期处理函数
2010/10/16 Javascript
Jquery之Ajax运用 学习运用篇
2011/09/26 Javascript
JS数学函数Exp使用说明
2012/08/09 Javascript
轻松掌握JavaScript装饰者模式
2016/08/27 Javascript
Node.js测试中的Mock文件系统详解
2016/11/21 Javascript
Javascript中构造函数要注意的一些坑
2017/01/23 Javascript
微信小程序自定义导航隐藏和显示功能
2017/06/13 Javascript
Vue的双向数据绑定实现原理解析
2020/02/17 Javascript
在vue中实现嵌套页面(iframe)
2020/07/30 Javascript
[06:35]2014DOTA2国际邀请赛 老男孩梦圆西雅图中国军团世界最强
2014/07/22 DOTA
python调用新浪微博API项目实践
2014/07/28 Python
python编写简单爬虫资料汇总
2016/03/22 Python
python的xpath获取div标签内html内容,实现innerhtml功能的方法
2019/01/02 Python
python flask几分钟实现web服务的例子
2019/07/26 Python
Django ORM 常用字段与不常用字段汇总
2019/08/09 Python
天猫超市:阿里巴巴打造的网上超市
2016/11/02 全球购物
Foot Locker意大利官网:全球领先的运动鞋和服装零售商
2017/05/30 全球购物
俄罗斯电子产品在线商店:UltraTrade
2020/01/30 全球购物
证券期货行业个人的自我评价
2013/12/26 职场文书
幼儿园大班毕业感言
2014/02/06 职场文书
巡警年度自我鉴定
2014/02/21 职场文书
高级工程师英文求职信
2014/03/19 职场文书
高中竞选班长演讲稿
2014/04/24 职场文书
火灾现场处置方案
2014/05/28 职场文书
领导四风问题整改措施思想汇报
2014/10/13 职场文书
管理失职检讨书范文
2015/05/05 职场文书
风雨哈佛路观后感
2015/06/03 职场文书
保险公司岗前培训工作总结
2015/10/24 职场文书
解决jupyter notebook启动后没有token的坑
2021/04/24 Python
java中为什么说子类的构造方法默认访问的是父类的无参构造方法
2022/04/13 Java/Android