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网络编程学习笔记(10):webpy框架
Jun 09 Python
python re正则表达式模块(Regular Expression)
Jul 16 Python
Python3实现将文件树中所有文件和子目录归档到tar压缩文件的方法
May 22 Python
把csv文件转化为数组及数组的切片方法
Jul 04 Python
win10 64bit下python NLTK安装教程
Sep 19 Python
Python基于Logistic回归建模计算某银行在降低贷款拖欠率的数据示例
Jan 23 Python
Django REST framework 如何实现内置访问频率控制
Jul 23 Python
基于Python实现拆分和合并GIF动态图
Oct 22 Python
Python matplotlib绘制图形实例(包括点,曲线,注释和箭头)
Apr 17 Python
PyTorch安装与基本使用详解
Aug 31 Python
Django REST Framework 分页(Pagination)详解
Nov 30 Python
Python xlwings插入Excel图片的实现方法
Feb 26 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程序中的常见漏洞进行攻击(上)
2006/10/09 PHP
php实现多城市切换特效
2015/08/09 PHP
一个简单的jQuery插件制作 学习过程及实例
2010/04/25 Javascript
ASP.NET jQuery 实例3 (在TextBox里面阻止复制、剪切和粘贴事件)
2012/01/13 Javascript
JavaScript 函数惰性载入的实现及其优点介绍
2013/08/12 Javascript
使用jquery实现以post打开新窗口
2014/03/19 Javascript
一个JavaScript函数把URL参数解析成Json对象
2014/09/24 Javascript
JsRender实用入门教程
2014/10/31 Javascript
js实现文本框中输入文字页面中div层同步获取文本框内容的方法
2015/03/03 Javascript
javascript实现checkbox复选框实例代码
2016/01/10 Javascript
Boostrap模态窗口的学习小结
2016/03/28 Javascript
vue下拉列表功能实例代码
2018/04/08 Javascript
原生js实现拖拽功能基本思路详解
2018/04/18 Javascript
Vue 父子组件数据传递的四种方式( inheritAttrs + $attrs + $listeners)
2018/05/04 Javascript
JS判断两个数组或对象是否相同的方法示例
2019/02/28 Javascript
使用Vant完成通知栏Notify的提示操作
2020/11/11 Javascript
Python学习笔记(一)(基础入门之环境搭建)
2014/06/05 Python
推荐11个实用Python库
2015/01/23 Python
详解使用pymysql在python中对mysql的增删改查操作(综合)
2017/01/18 Python
python三大神器之fabric使用教程
2019/06/10 Python
Python中使用__new__实现单例模式并解析
2019/06/25 Python
Python操作多维数组输出和矩阵运算示例
2019/11/28 Python
Python 格式化打印json数据方法(展开状态)
2020/02/27 Python
英国电动工具购买网站:Anglia Tool Centre
2017/04/25 全球购物
英国演唱会订票网站:Ticket Selection
2018/03/27 全球购物
美国羽绒床上用品第一品牌:Pacific Coast
2018/08/25 全球购物
澳大利亚领先的折扣药房:Chemist Direct(有中文站)
2018/11/24 全球购物
标记环网Toke Ring IEEE802.5
2014/05/26 面试题
JSF的标签库有哪些
2012/04/27 面试题
最新的互联网创业计划书
2014/01/10 职场文书
校长竞聘演讲稿
2014/05/16 职场文书
个人校本研修方案
2014/05/26 职场文书
2014年教研员工作总结
2014/12/23 职场文书
公证处委托书
2015/01/28 职场文书
Pytorch 如何实现LSTM时间序列预测
2021/05/17 Python
Python中time与datetime模块使用方法详解
2022/03/31 Python