侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

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

Python  /  管理员 发布于 7年前   145

前言

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

(本次博客源码地址: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 jiebadef 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等也有一定的要求。不仅如此,还要求具有一定的抗压能力、解决问题的能力、良好的表达能力、思维能力等。

总结

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


  • 上一条:
    Python3实现的旋转矩阵图像算法示例
    下一条:
    python2.7使用plotly绘制本地散点图和折线图
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • Laravel 11.15版本发布 - Eloquent Builder中添加的泛型(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客