python数据分割教程(python3对拉勾数据进行可视化分析的方法详解)
python数据分割教程
python3对拉勾数据进行可视化分析的方法详解前言
上回说到我们如何把拉勾的数据抓取下来的,既然获取了数据,就别放着不动,把它拿出来分析一下,看看这些数据里面都包含了什么信息。
(本次博客源码地址: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() |
结果中的 unique 表示的是在该属性列下面存在的不同值个数,以学历要求为例子,它包含【本科、大专、硕士、不限】这4个不同的值,top 则表示数量最多的值为【本科】,freq 表示出现的频率为 387。由于薪资的 unique 比较多,我们查看一下存在什么值。
|
print (data[ '学历要求' ].unique()) print (data[ '工作经验' ].unique()) print (data[ '薪资' ].unique()) |
二、预处理
从上述两张图可以看到,学历要求和工作经验的值比较少且没有缺失值与异常值,可以直接进行分析;但薪资的分布比较多,总计有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" ) # 隐藏坐标 |
四、成果与总结
python数据分析师的学历大部分要求是本科,占了86%。
从柱状图可以看出,python数据分析师的工作经验绝大部分要求1-5年。
由此可以得出python数据分析的工资为10k-20k的比较多,40以上的也不少,工资高估计要求会比较高,所以我们看一下职位要求。
从词云图可看出,数据分析肯定要对数据比较敏感,并且对统计学、excel、python、数据挖掘、hadoop等也有一定的要求。不仅如此,还要求具有一定的抗压能力、解决问题的能力、良好的表达能力、思维能力等。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对开心学习网的支持。
原文链接:https://www.cnblogs.com/lyuzt/p/10643941.html
- python学生管理系统与数据库(python学生管理系统学习笔记)
- python中字符串截取规则(Python中的字符串切片截取字符串的详解)
- python 绕过密码(一小段Python代码,破解加密zip文件的密码)
- python豆瓣电影爬虫课程设计报告(详解python 模拟豆瓣登录豆瓣6.0)
- python3.9.1如何安装模块(Python3.6中Twisted模块安装的问题与解决)
- python怎么导入xlsx(用Python将结果保存为xlsx的方法)
- linux下python安装pip(在Docker中的ubuntu中安装Python3和Pip的问题)
- python 模式识别(python实现全盘扫描搜索功能的方法)
- python的解释器怎么安装其他版本(在Python文件中指定Python解释器的方法)
- python规定输入值的最大值(实例讲解Python中整数的最大值输出)
- python里面的print怎么用(python中的print输出)
- 正则表达式在python的中的应用(Python中正则表达式的用法总结)
- python切片的用法(Python进阶之全面解读高级特性之切片)
- pythonsvr时序预测(利用Python半自动化生成Nessus报告的方法)
- 如何用python爬取最新电影(使用python实现抓取腾讯视频所有电影的爬虫)
- python什么是深拷贝什么是浅拷贝(Python深拷贝与浅拷贝用法实例分析)
- 终于来了,淘宝更改账户名测试中,快去看看你能不能修改(淘宝更改账户名测试中)
- 淘宝支持账号名修改,网友 终于可以 重新做人 了(淘宝支持账号名修改)
- 盘点那些年让人称奇的年终奖 最后一个赢辣条毫无悬念(盘点那些年让人称奇的年终奖)
- 你还没有升职吗 他竟因为几套激励理论,升职了(你还没有升职吗)
- 某知名企业绩效管理体系及薪酬分配体系操作手册(某知名企业绩效管理体系及薪酬分配体系操作手册)
- 职场人改不掉这4个习惯,只会越混越穷,一辈子也翻不了身(职场人改不掉这4个习惯)
热门推荐
- react重点和难点(关于React状态管理的三个规则总结)
- js实现网页特效(利用原生js模拟直播弹幕滚动效果)
- php闰年计算公式(php判断/计算闰年的方法小结三种方法)
- sql server新建用户无法登录(sqlserver 因为选定的用户拥有对象,所以无法除去该用户的解决方法)
- vue左侧边栏的制作(Vue+Vant实现顶部搜索栏)
- 云主机属于什么层次的云服务(什么是云?什么是云服务?什么是云主机?)
- python函数操作大全(Python的高阶函数用法实例分析)
- 各种云服务器区别(日本云服务器有什么特性?好不好?)
- hive分析后如何录入mysql(hive从mysql导入数据量变多的解决方案)
- dedecms标签调用大全(Dedecms文章标题长度修改方法小结)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9