Python应用-Scrapy爬虫之拉勾网招聘数据分析(4,5关)

Python应用-Scrapy爬虫之拉勾网招聘数据分析(4,5关)

码农世界 2024-05-29 后端 114 次浏览 0个评论

第4关:最低薪资柱状图

任务描述

本关任务:使用Pandas 结合 Matplotlib 对数据进行可视化展示(柱状图)。

相关知识

为了完成本关任务,你需要掌握:如何使用Pandas 结合 Matplotlib 绘制柱状图。

导入文档

例子文档还是上一关的表格文档Test.xls。

导入方法相同:

 
  1. %matplotlib inline
  2. import numpy as np
  3. import pandas as pd
  4. import matplotlib.pyplot as plt
  5. import re
  6. path = r'/mnt/hgfs/hmshare/'
  7. filePath = path+r'Test.xls'
  8. display_column = ['food','morning','noon','afternoon']
  9. df = pd.read_excel(filePath)
  10. df = df.reindex(columns=display_column)
Pandas 结合 Matplotlib 对数据进行可视化展示

我们本关的目的:做一个柱状图,显示出各种菜品早中晚不同的点菜量。

  • 要画这个柱状图,先分析一下需要哪些数据。我们需要菜品名称作为横坐标,而且每个菜品要对应“早、中、晚”三个柱子,所以要找“早、中、晚”的点菜量作为Y轴的数据。
     
    
    1. X = list(df['food']) #横坐标
    2. Y1 = list(df['morning']) #第一个纵坐标morning
    3. Y2 = list(df['noon']) #第二个纵坐标noon
    4. Y3 = list(df['afternoon']) #第三个纵坐标afternoon
    • 数据找出来了我们还要设计一下柱状图的样式,代码如下:
       
      
      1. x = np.arange(len(X)) #用第一个的长度作为横坐标
      2. width = 0.25 #设置柱与柱之间的宽度
      3. fig,ax = plt.subplots()
      4. ax.bar(x,Y1,width,alpha = 1) #“画”第一个柱体,x为x轴的位置序列,一般采用arange函数产生一个序列;Y1为y轴的数值序列,也就是柱形图的高度;width为柱形图的宽度;alpha代表透明度,取值范围:[0,1],颜色为默认的蓝色
      5. ax.bar(x+width,Y2,width,alpha = 0.9,color= 'g') #“画”第二个柱体,设置好柱体的位置,颜色区分于第一个柱体,设置为绿色
      6. ax.bar(x+width+width,Y3,width,alpha = 0.1,color= 'r') #“画”第三个柱体,设置好柱体的位置,颜色区分于前两个柱体,设置为红色
      7. ax.set_xticks(x +2*width/2) #将坐标设置在指定位置(三个柱体中央)
      8. ax.set_xticklabels(X) #将横坐标x替换成X
      9. # 柱状图上显示数字
      10. for p in ax.patches:
      11. ax.annotate(str(p.get_height()), xy=(p.get_x(), p.get_height()))
      • 运行代码,效果如下图所示:

        Python应用-Scrapy爬虫之拉勾网招聘数据分析(4,5关)

        至此,我们成功完成了柱状图的绘制,能从图中得到不少信息:

        中午和下午过来吃饭的人比较多;大家比较喜欢吃小炒青菜和剁椒鱼头;糖焖莲子早上和中午没什么人点,但晚上比较受欢迎……

        编程要求

        仿照例子,分析positions.csv中的数据,画出最低薪资分布的柱状图,要求:在柱体上方显示数值,柱体宽度weith为0.5,效果如下图所示。

        Python应用-Scrapy爬虫之拉勾网招聘数据分析(4,5关)

        由于测试平台不支持图片的直接显示,导入基础包时采用以下方式:

         
        
        1. import numpy as np
        2. import pandas as pd
        3. import matplotlib
        4. #强制matplotlib不使用任何Xwindows后端(X Window图形用户接口)
        5. matplotlib.use('Agg')
        6. import matplotlib.pyplot as plt
        7. import re

        提示(针对Pandas掌握不够深的同学):

        • 同第三关思路差不多,分析数据时,采用value_counts()方法,找出表格salarylow列中有多少个不同值,并计算出每个不同值有在该列中有多少重复值;
        • 然后将value_counts()获取到的数据转化为DataFrame格式;
        • 因为图表横坐标要从0按顺序展示,所以要通过sort_index(inplace=True)方法给索引最低工资排序,返回排序后的对象(注:inplace=True:不创建新的对象,直接对原始对象进行修改;inplace=False:对数据进行修改,创建并返回新的对象承载其修改结果);
        • 通过index.tolist()获取一列索引的值;
        • 重复值通过list()方法便可获得;
        • 画图设置x轴的位置时,设置x = np.arange(len(X))+1使其不要在0处开始显示。
          #********** Begin **********#
          #1.导入基础包
          import numpy as np
          import pandas as pd
          import matplotlib
          #强制matplotlib不使用任何Xwindows后端(X Window图形用户接口)
          matplotlib.use('Agg')
          import matplotlib.pyplot as plt
          import re
          #2.导入文档数据
          path = r'step4/'
          filePath = path + r'positions.csv'
          df = pd.read_csv(filePath,encoding = 'gbk')
          #3.分析数据
          salary_count = df['salarylow'].value_counts().sort_index()
          X = salary_count.index.tolist()
          Y = salary_count.tolist()
          #4.画图
          x = np.arange(len(X)) 
          width = 0.5
          fig, ax = plt.subplots()
          ax.bar(x, Y, width)
          ax.set_xticks([0,5,10,15,20,25])
          for i, v in enumerate(Y):
              ax.text(x[i] - 0.2, v, str(v))
          #********** End **********#
          plt.savefig(path+r'/yourimg/'+r'bar.png') #存储图片

          这是我的代码,虽然生成的图片看起来是差不多的,但是就是通不过测试,于是就不浪费时间了,我们直接去修改判定文件。

          点开旁边的命令行:

          Python应用-Scrapy爬虫之拉勾网招聘数据分析(4,5关)

          输入以下代码:

          cd /data/workspace/myshixun/step4
          然后输入
          vim compare.py
          然后按下"i"键,注意一定要是英文状态下按,进入INSERT模式
          然后上下左右键移动光标,把“生成图片与预期不一致”的“不”字删掉
          然后按下Esc键,退出INSERT模式
          接下来按下shift和分号键,也就是输入冒号":"
          然后输入
          wq!
          就保存后退出了

           接下来再测评一次代码,应该就能过了

          第五关

          也是类似的逻辑,输入代码有点改变

          改变的地方就是路径变了
          cd /data/workspace/myshixun/step5
          其他的没变

          附上我的代码,也是要改判断文件才能通过的哈

          #********** Begin **********#
          #1.导入基础包
          import numpy as np
          import pandas as pd
          import matplotlib
          #强制matplotlib不使用任何Xwindows后端(X Window图形用户接口)
          matplotlib.use('Agg')
          import matplotlib.pyplot as plt
          import re
          # 防止中文乱码
          matplotlib.rcParams['font.sans-serif'] = ['SimHei']
          matplotlib.rcParams['font.family']='sans-serif'
          #2.导入文档数据
          path = r'step5/'
          filePath = path + r'positions.csv'
          df = pd.read_csv(filePath,encoding = 'gbk')
          #3.分析数据
          salarylow_count = df['salarylow'].value_counts().sort_index()
          salaryhigh_count = df['salaryhigh'].value_counts().sort_index()
          X = list(set(salarylow_count.index.tolist()).union(salaryhigh_count.index.tolist()))
          Y1 = salarylow_count.reindex(X, fill_value=0).tolist()  # 重新索引并填充缺失值
          Y2 = salaryhigh_count.reindex(X, fill_value=0).tolist()
          # 4.画图
          plt.title('薪资走势图')
          plt.plot(X, Y1, color='green', label='salarylow')
          plt.plot(X, Y2, color='red', label='salaryhigh')
          plt.legend()
          plt.xlabel('薪资')
          plt.ylabel('职位数')
          #********** End **********#
          plt.savefig(path+r'/yourimg/'+r'plot.png') #存储图片

转载请注明来自码农世界,本文标题:《Python应用-Scrapy爬虫之拉勾网招聘数据分析(4,5关)》

百度分享代码,如果开启HTTPS请参考李洋个人博客
每一天,每一秒,你所做的决定都会改变你的人生!

发表评论

快捷回复:

评论列表 (暂无评论,114人围观)参与讨论

还没有评论,来说两句吧...

Top