当前位置:脚本大全 > > 正文

python数据分割教程(python3对拉勾数据进行可视化分析的方法详解)

时间:2021-10-22 07:12:47类别:脚本大全

python数据分割教程

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

前言

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

(本次博客源码地址:https://github.com/maxlyu/lagou_analyze )

下面话不多说了,来一起看看详细的介绍吧

一、前期准备

由于上次抓的数据里面包含有 id 这样的信息,我们需要将它去掉,并且查看描述性统计,确认是否存在异常值或者确实值。

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • read_file = "analyst.csv"
  • # 读取文件获得数据
  • data = pd.read_csv(read_file, encoding="gbk")
  • # 去除数据中无关的列
  • data = data[:].drop(['id'], axis=1)
  • # 描述性统计
  • data.describe()
  • python数据分割教程(python3对拉勾数据进行可视化分析的方法详解)

    结果中的 unique 表示的是在该属性列下面存在的不同值个数,以学历要求为例子,它包含【本科、大专、硕士、不限】这4个不同的值,top 则表示数量最多的值为【本科】,freq 表示出现的频率为 387。由于薪资的 unique 比较多,我们查看一下存在什么值。

  • ?
  • 1
  • 2
  • 3
  • print(data['学历要求'].unique())
  • print(data['工作经验'].unique())
  • print(data['薪资'].unique())
  • python数据分割教程(python3对拉勾数据进行可视化分析的方法详解)

    二、预处理

    从上述两张图可以看到,学历要求和工作经验的值比较少且没有缺失值与异常值,可以直接进行分析;但薪资的分布比较多,总计有75种,为了更好地进行分析,我们要对薪资做一个预处理。根据其分布情况,可以将它分成【5k 以下、5k-10k、10k-20k、20k-30k、30k-40k、40k 以上】,为了更加方便我们分析,取每个薪资范围的中位数,并划分到我们指定的范围内。

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • # 对薪资进行预处理
  • 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实现的分词库,对中文有着很强大的分词能力。

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • import jieba
  • def cut_text(text):
  •  stopwords =['熟悉','技术','职位','相关','工作','开发','使用','能力',
  •  '优先','描述','任职','经验','经验者','具有','具备','以上','善于',
  •  '一种','以及','一定','进行','能够','我们']
  •  for stopword in stopwords:
  •  jieba.del_word(stopword)
  •  
  •  words = jieba.lcut(text)
  •  content = " ".join(words)
  •  return content
  • 预处理完成之后,就可以进行可视化分析了。

    三、可视化分析

    我们先绘制环状图和柱状图,然后将数据传进去就行了,环状图的代码如下:

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 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()
  • 柱状图的代码如下:

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 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()
  • 我们再把学历要求和薪资的数据稍微处理一下变成字典形式,传进绘制好的环状图函数就行了。另外,我们还要对【任职要求】的文本进行可视化。

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 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数据分割教程(python3对拉勾数据进行可视化分析的方法详解)        

      python数据分析师的学历大部分要求是本科,占了86%。

    python数据分割教程(python3对拉勾数据进行可视化分析的方法详解)        

      从柱状图可以看出,python数据分析师的工作经验绝大部分要求1-5年。

    python数据分割教程(python3对拉勾数据进行可视化分析的方法详解)        

    由此可以得出python数据分析的工资为10k-20k的比较多,40以上的也不少,工资高估计要求会比较高,所以我们看一下职位要求。

    python数据分割教程(python3对拉勾数据进行可视化分析的方法详解)      

    从词云图可看出,数据分析肯定要对数据比较敏感,并且对统计学、excel、python、数据挖掘、hadoop等也有一定的要求。不仅如此,还要求具有一定的抗压能力、解决问题的能力、良好的表达能力、思维能力等。

    总结

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

    原文链接:https://www.cnblogs.com/lyuzt/p/10643941.html

    上一篇下一篇

    猜您喜欢

    热门推荐