教你用Python爬网站数据,并用BI可视化分析!

2023-11-17

两年时间里曾经换过一份工作,一直都是从事大数据相关的行业。目前是一家企业的BI工程师,主要工作就是给业务部门出报表和业务分析报告。

回想自己过去的工作成绩也还算是不错的,多次通过自己分析告,解决了业务的疑难杂症,领导们各种离不开。

但安逸久了总会有点莫名的慌张,所以我所在的这个岗位未来会有多大发展空间,十年之后我能成为什么样的人呢?自己的收入空间还有多少?

一番惆怅之后,别再问路在何方了,于是抄起自己的“家伙”,花了一小会时间爬了智联招聘上BI岗位的数据信息,做了个分析。

PS:所用工具为Python+BI

数据分析的过程如同烧一顿饭,先要数据采集(买菜),然后数据建模(配菜)、数据清洗(洗菜)、数据分析(做菜)、数据可视化(摆盘上菜)。

所以第一步,要采集/选择数据。

一、Python爬取智联招聘岗位信息(附源码)

选择智联招聘,通过Python来进行“BI工程师”的关键数据信息的爬取,这里大家也可以试着爬取自己岗位的关键词,如“数据分析师”、“java开发工程师 ”等。经过F12分析调试,数据是以JSON的形式存储的,可以通过智联招聘提供的接口调用返回。

img

那么我这边通过Python对智联招聘网站的数据进行解析,爬取了30页数据,并且将岗位名称、公司名称、薪水、所在城市、所属行业、学历要求、工作年限这些关键信息用CSV文件保存下来。

附上完整Python源码:

import requests
import json
import csv
from urllib.parse import urlencode
import time
 
def saveHtml(file_name,file_content): #保存conten对象为html文件
 with open(file_name.replace('/','_')+'.html','wb') as f:
 f.write(file_content)
 
def GetData(url,writer):#解析并将数据保存为CSV文件
 response= requests.get(url)
 data=response.content
 saveHtml('zlzp',data) #保存html文件
 jsondata=json.loads(data)
 dataList=jsondata['data']['results']
 #print(jsondata)
 for dic in dataList:
 jobName=dic['jobName'] #岗位名称
 company=dic['company']['name'] #公司名称
 salary=dic['salary'] #薪水
 city=dic['city']['display'] #城市
 jobtype = dic['jobType']['display'] #所属行业
 eduLevel=dic['eduLevel']['name'] #学历要求
 workingExp=dic['workingExp']['name'] #工作经验
 print(jobName,company,salary,city,jobtype,eduLevel,workingExp)
 writer.writerow([jobName,company,salary,city,jobtype,eduLevel,workingExp])
param={ 'start':0,
 'pageSize':60,
 'cityId':489,
 'workExperience':-1,
 'education':-1,
 'companyType': -1,
 'employmentType': -1,
 'jobWelfareTag': -1,
 'kw': 'BI工程师', #搜索关键词,可以根据你需要爬取的岗位信息进行更换
 'kt': 3,
 'lastUrlQuery': {"p":1,"pageSize":"60","jl":"681","kw":"python","kt":"3"}
 }#参数配置
pages=range(1,31)#爬取1-30页数据
out_f = open('test.csv', 'w', newline='')
writer = csv.writer(out_f)
writer.writerow(['jobName','company','salary','city','jobtype','eduLevel','workingExp'])
for p in pages: #自动翻页
 param['start']=(p-1)*60
 param['lastUrlQuery']['p']=p
 url = 'https://fe-api.zhaopin.com/c/i/sou?' + urlencode(param)
 GetData(url,writer)
 time.sleep(3)#间隔休眠3秒,防止IP被封
 print(p)
out_f.close() 

经过一番编译调试,代码成功运行。

img

全部数据爬取完毕,一共1800条,保存在本地CSV文件中。

数据是爬到了,具体我想了解哪些信息呢:各城市的BI岗位需求情况以及薪资水平;薪水随工作经验的涨幅情况,以及有哪些具体的高薪岗。

由此可见,想要分析的角度很多,且看了源数据,还要做不少的数据处理。最简单快速出可视化的方法自然是用BI工具,来对数据做简单清洗加工,并呈现可视化。

BI能应付绝大多数场景的数据分析,尤其擅长多维数据切片,不需要建模;甚至数据清洗环节也能放在前端,通过过滤筛选、新建计算公式等来解决。最后呈现可视化,并可设计数据报告。

这里我用FineBI来做这样一份分析。

FineBI做分析大体是这样的流程:连接/导入数据——数据处理/清洗(过滤、筛选、新增公式列)——探索式分析——数据可视化——出报告。

二、数据清洗加工

1.薪水上下限分割:

将CSV文件数据导入FineBI中(新建数据链接,建立一个分析业务包,然后导入这张excel表)。因为薪水是以xxK-xxk(还有一些类似校招/薪资面议的数据)的形式进行存储的,我这边使用FineBI新增公式列(类似excel函数)将这些字符进行分割:

薪水下限(数值):left( indexofarray ( split (salary,“-”) ,1),find( “K”,INDEXOFARRAY( split(salary,“-”) ,1))-1)

薪水上限(含K字符):right ( indexofarray( split(salary,“-”) ,2),len(salary)- find(“K”,indexofarray(split(salary,“-”),2 ) ) )

薪水上限(数值):left( 薪水上限(文本),find(“K”,薪水上限(文本))-1 )

这样就得到每个岗位的数值格式的薪水区间了:

img

2.脏数据清洗:

浏览了一下数据,没有大问题,但是发现里面有一些类似BIM工程师的岗位信息,这些应该都是土木行业的工程师,这边我直接过滤掉即可(不包含“BIM”且不包含“bim”)。

img

3.岗位平均数据计算

再新增列,平均薪水=(薪水下限+薪水上限)/2,即可得到每个岗位的平均薪水。

img

4.真实城市截取

由于城市字段存储有的数据为“城市-区域”格式,例如“上海-徐汇区”,为了方便分析每个城市的数据,最后新增列“城市”,截取“-”前面的真实城市数据。

城市:if(find(“-”,city)>0 , left(city, find(“-”,city)-1 ),city)

img

至此,18000多条数据差不多清洗完毕,食材已经全部准备好,下面可以正式开始数据可视化的美食下锅烹饪。

三、数据可视化

数据可视化可以说是很简单了,拖拽要分析的数据字段即可。

但是这里用finebi分析要理解一个思路。常规我们用excel做分析或者说做图表,是先选用钻则图表然后设定系列、数值。这里没有系列和数值的概念,只有横轴和竖轴。拖入什么字段,该字段就以该轴进行扩展,至于图表嘛,finebi会自动判别推荐。

我这边以各城市平均薪水/岗位数量分析为例给大家简单展示FineBI的可视化呈现过程。

1、横轴以“城市”字段扩展,展现两类数据。先是薪水值,拖拽到纵轴,默认对数值类的字段是汇总求和的。点击字段可直接对改字段修改计算、过滤等操作。

动图封面

此图来自官网,图中数据不是本次分析的数据,仅供参考

2、然后分析每个城市BI岗位的情况。将数据记录数这个指标拖入到纵轴展示。同样的方式,可以修改字段名。这里为了区分两者,将其修改为折线图,并且倒叙展示。

动图封面

同理,其他图表也是这样的操作,想清楚展现什么样的数据,怎样展现,数据要作何处理。就得心应手了。其他图表就不一一赘述了。

最后,大概花了15分钟,一份完整的智联招聘网站-BI工程师岗位数据分析的可视化报告就制作完成啦~

img

审美有限,只能做成这样,其实这个FineBI还能做出这样的效果。

img

img

四、分析结果

1.目前BI工程师岗位在智联招聘网站的平均薪资为13.46K(痛哭。。。拉低平均薪水的存在),主要薪水区间大概在12-15K(占比27.07%),相关工作需求总数为634个(仅仅为某一天的招聘需求数据)。

2.从城市岗位需求数量分布来看,BI工程师需求主要集中在北京、上海、深圳、广州区域;各城市BI工程师平均薪水方面,去除岗位需求量较少的城市来看,国内排在前面的分别为深圳(14.72K)、上海(14.59K)、北京(14.51)、杭州(12.07K)、成都(11.13K)、广州(10.94K)。

3.从工作年限的平均薪水和岗位需求数量来看,工作5-10年的资深BI工程师的平均薪水可以达到20K以上(朝资深BI工程师方向奋斗!!!1年以下年限的计算出来的平均薪水虽然为19K,但是由于样本量只有3个,所以参考意义不大),其中大部分的工作需求年限为3-5年,平均薪水为14.24K。

4.从学历方面来看,最低学历需求主要以本科/大专为主,本科和大专学历要求的平均薪资分别为12.68K和11.97K(感觉差距并不大,过硬的技术实力可能才是企业最为看重的吧),博士和硕士学历需求很少。

5.看了一些高薪的招聘企业,最高的可以给到30K~40K的薪酬水平,其中主要是互联网、IT类公司为主。

好文推荐

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

教你用Python爬网站数据,并用BI可视化分析! 的相关文章

  • 将字符串转换为浮点数列表(在 python 中)

    出于数据存储的目的 我尝试从 txt 文件恢复浮点列表 从字符串中可以看出 a 1 3 2 3 4 5 我想恢复 a 1 3 2 3 4 5 我期待一个简单的解决方案 例如list a 但我找不到类似的东西 Use the AST模块 Ex
  • Django 营业时间

    我想添加诊所的营业时间 我已经对此进行了调查在 Django 中实现 开放时间 的任何现有解决方案 https stackoverflow com questions 8128143 any existing solution to imp
  • 使用 keras 澄清 Yolo v3 模型输出

    我将 yolo v3 模型与 keras 一起使用 该网络为我提供了形状如下的输出容器 1 13 13 255 1 26 26 255 1 52 52 255 所以我找到了这个link https www cyberailab com ho
  • 如何在Python中反转列表的列表? [复制]

    这个问题在这里已经有答案了 我想知道如何反转 python 中的列表列表 例如 原来的 list 1 2 3 4 5 6 7 8 9 输出 new list 7 8 9 4 5 6 1 2 3 现在 我正在尝试这样做 new list re
  • 使用python编辑html,但是lxml将漂亮的html实体转换为奇怪的编码

    我正在尝试使用 python 带有 pyquery 和 lxml 来更改和清理一些 html Eg html div p It 146 s a spicy meatball p div lxml html clean 函数 clean ht
  • 如何搜索一列并用找到的内容填充另一列?

    我有一个带有虚构人物数据的大熊猫数据框 下面是一个小例子 每个人都由一个数字定义 import pandas as pd import numpy as np df pd DataFrame Number 5569 3385 9832 64
  • 如何进行重定向并保留查询字符串?

    我想进行重定向并保留查询字符串 就像是self redirect加上发送的查询参数 那可能吗 newurl my new route urllib urlencode self request params self redirect ne
  • 将 numpy 数组及其大小写入二进制文件

    我需要将 2D numpy 数组写入文件 包括其尺寸 以便我可以从 C 程序中读取它并创建相应的数组 我编写了一些简单的代码来保存数组 并且可以从 C 读取它 但是如果我尝试先写入数组的大小 它总是会给我一个错误 这是我的简单 python
  • 在Python中,如何通过去掉括号和大括号来打印Json

    我想以一种很好的方式打印 Json 我想去掉方括号 引号和大括号 只使用缩进和行尾来显示 json 的结构 例如 如果我有一个像这样的 Json A A1 1 A2 2 B B1 B11 B111 1 B112 2 B12 B121 1
  • Python MySQLdb:connection.close() VS。光标.close()

    如果我使用MySQLdb通过Python连接到MySQL Server 我创建一个connection and a cursor像这样 connection MySQLdb connect cursor connection cursor
  • python 硒 按名称查找元素

    查找电子邮件输入的正确代码是什么https accounts google com ServiceLogin html 是
  • 使用张量流导出神经网络的权重

    我使用张量流工具编写了神经网络 一切正常 现在我想导出神经网络的最终权重以制定单一的预测方法 我怎样才能做到这一点 您需要在训练结束时使用以下命令保存模型tf train Saver https www tensorflow org ver
  • Pandas 根据条件替换数据框值

    我有一个主数据框 df Colour Item Price Blue Car 40 Red Car 30 Green Truck 50 Green Bike 30 然后我有一个价格修正数据框 df pc Colour Item Price
  • Python:如何“杀死”类实例/对象?

    我希望 Roach 类在达到一定量的 饥饿 时 死亡 但我不知道如何删除该实例 我的术语可能有误 但我的意思是 窗户上有大量 蟑螂 我希望特定的蟑螂完全消失 我会向您展示代码 但它很长 我将蟑螂类添加到策划者类蟑螂种群列表中 一般来说 每个
  • 从 SUDS 中的 SOAP 响应中提取 Cookie

    我必须使用具有多种服务的 API 所有这些都需要来自下面的身份验证的 JSESSION cookie 然而 当我调用下一个服务时 它不会保留 cookie 因此会拒绝它们 from suds client import Client url
  • python 中“重载”函数的最佳方法? [复制]

    这个问题在这里已经有答案了 我正在尝试在 python 中做这样的事情 def foo x y do something at position x y def foo pos foo pos x pos y 所以我想根据我提供的参数数量调
  • 如何在Python中不使用库函数将字符串转换为整数?

    我正在尝试转换 a 546 to a 546 不使用任何库函数 我能想到的 最纯粹 gt gt gt a 546 gt gt gt result 0 gt gt gt for digit in a result 10 for d in 01
  • 如何使用 Matplotlib 可视化标量二维数据?

    所以我有一个网格网格 矩阵 X 和 Y 以及标量数据 矩阵 Z 我需要将其可视化 最好是一些 2D 图像 在各点处带有颜色 显示 Z 值 我做了一些研究 但没有找到任何能完全满足我想要的效果的东西 pyplot imshow Z 看起来不错
  • 如何从 Anaconda 更新 Pandas 以及最后是否可以使用 eclipse

    我已经使用以下文档通过 Anaconda 安装了 Python http www kevinsheppard com images 0 09 Python introduction pdf http www kevinsheppard co
  • nltk 标记化和缩写

    我用 nltk 对文本进行标记 只是将句子输入到 wordpunct tokenizer 中 这会拆分缩写 例如 don t 到 don t 但我想将它们保留为一个单词 我正在改进我的方法 以实现更精确的文本标记化 因此我需要更深入地研究

随机推荐

  • MySQL锁的总结

    锁保证数据并发访问的一致性 有效性 锁是mysql在服务器层和存储引擎层的并发控制 锁机制 共享锁与排他锁 共享锁 读锁 其它事务可以读 但不能写 排他锁 写锁 其它事务不能读 也不能写 锁粒度 mysql不同的存储引擎支持不同的锁机制 所
  • verilog基本语法总结

    最近学习了verilog基本语法 总结如下 数值表示 Verilog HDL 有下列四种基本的值来表示硬件电路中的电平逻辑 0 逻辑 0 或 假 1 逻辑 1 或 真 x 或 X 未知 z 或 Z 高阻 整数数值表示方法 十进制 d 或 D
  • Java使用 java.util.regex.Pattern 正则表达式校验参数值是否规范

    场景 java中我们可以利用 Pattern 注解对某个入参进行规则校验 但有些特殊参数在接口入口处不方便校验 需要在代码中校验 一 使用 Pattern 注解校验 Pattern regexp a zA Z0 9 message xxx号
  • JVM学习笔记---Java内存模型

    12 1 Java内存模型 Java内存模型 Java Memory Model 是Java虚拟机规范中定义的 用来屏蔽掉java程序在各种不同的硬件和操作系统对内存的访问的差异 以实现让Java程序在各种平台下都能达到一致的内存访问效果
  • echarts的tooltip旋转方案

    当echarts横屏的时候 tooltip还是原来的角度 没有跟着旋转过来 官网说可以使用extraCssText来旋转 但是我测过了无效 extraCssText transform rotate 270deg 详细看了一下官网 发现可以
  • Scanner类中next()和nextLine()的区别

    详解Scanner类中next 和nextLine 的区别 Scanner类中的next 和nextLine 方法是我们经常使用的键盘录入方法 那么两者之间有何不同呢 next 从控制台获取字符串 如果字符串中包含空格 只会获取空格前前的字
  • python的requests请求https时,与fiddler冲突造成ssl错误

    目录 原因 解决方案 把fiddler关掉就好 去掉requests的ssl验证 保持fiddler和requests的证书一致 使用从浏览器导出证书 可以放到代码目录下 走fiddler代理 使用fiddler导出的证书 要用openss
  • 亚马逊(Amazon)公共开发者注册步骤

    亚马逊公共开发者注册步骤 持续更新 第一步 创建AWS账号 第二步 创建角色 第三步 亚马逊后台申请开发者 第一步 创建AWS账号 到AWS平台上面注册一个账号信息 资料啥的就填你自己的吧 这块操作很简单 AWS注册链接 注册完直接登录 进
  • Pocket Yoga for mac:一个神奇的瑜伽助手,让你的身心更健康

    Pocket Yoga for Mac 口袋瑜伽 是一款专为瑜伽爱好者设计的应用程序 无论您是初学者还是经验丰富的瑜伽修行者 这款应用都能帮助您在家中或办公室进行高效的瑜伽练习 Pocket Yoga for Mac提供了一系列的瑜伽课程和
  • Integer、new Integer、int之间的区别与比较

    最近面试代码分析题频繁遇到 所以就此做一个整理与回顾 希望能帮到大家 如有错误欢迎纠正 这里先说一下这三种类型分别是什么 int int是java中的一种基本数据类型默认值为0 Integer int的包装类 默认值为null new In
  • flask框架和配置

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 flask框架介绍 flsak框架的安装 实现Flask基本操作 Flask的配置 flask框架介绍 Flask诞生于2010年 使用python语言基于Werk
  • 通过 docker-compose 搭建高可用 nginx + keepalived 集群

    目录 1 搭建环境 2 Keepalived介绍 3 搭建步骤 1 搭建环境 两台虚拟机 CentOS Linux release 7 9 2009 Core Docker version 23 0 1 Docker compose ver
  • 小知识记录

    1 加URL地址栏上的图标 在jsp文件中写 在webroot下加入此图片 并且把名字换成 favicon ico 2 处理并发 读一致性 隔离级别 脏读 不可重复读 幻影读 同步锁 乐观锁 数据版本 Version 记录机制实现 悲观锁
  • 一文弄懂Ubuntu安装配置方法(挂载、SSH、用户管理)

    Ubuntu安装配置方法 挂载 SSH 用户管理 这篇文章是本人使用Ubuntu四年来 对常用操作的总结 需要的同学可以保存备用 安装Ubuntu U盘安装 注意安装英文版的为佳 挂载分区 最好切换到root 确定要挂载的分区和目录 查看已
  • 设计数组工具类、日期工具类;线程模拟多窗口售票流程;总结内部类访问方式;区分数值和字符串并排序;猜四位数小游戏

    文章目录 1 设计可存储不同长度 兼容多种类型数组工具类 2 控制台随机输入数值或字符串 区分出数值和字符串 从小到大输出 要求 个数 类型不限 去除重复 3 设计日期工具类 兼容jdk5 8 4 总结内部类访问方式 内部类特性 静态内部类
  • python自己写包_自己写python包

    广告关闭 腾讯云11 11云上盛惠 精选热门产品助力上云 云服务器首年88元起 买的越多返的越多 最高返5000元 packages find packages exclude tests exmaple 所有包除了tests和exmapl
  • Docker容器与虚拟化技术:GitHub账户注册

    目录 一 实验 1 GitHub 一 实验 1 GitHub 1 GitHub是一个面向开源及私有软件项目的托管平台 因为只支持Git作为唯一的版本库格式进行托管 故名GitHub 2 官网 GitHub Let s build from
  • ArcGIS构建缓冲区,合并两个重叠的面

    问题描述 需要构建线缓冲区 并将重叠的缓冲区合并成一个面要素 不相邻的不需要合并 解决思路 构建缓冲区 并进行融合 相关工具描述 ArcMap提供的缓冲区 buffer 工具 融合类型有三种 但ALL不能满足需求 联合 Union 工具 会
  • 集成FCM推送一系列问题

    FCM Firebase Cloud Messaging 首先集成FCM需要一定的条件 必要条件 Android2 3版本以上的手机和拥有Google service的框架应用和不在国内的网络 使用外网 第一国内的手机一般阉割了Google
  • 教你用Python爬网站数据,并用BI可视化分析!

    两年时间里曾经换过一份工作 一直都是从事大数据相关的行业 目前是一家企业的BI工程师 主要工作就是给业务部门出报表和业务分析报告 回想自己过去的工作成绩也还算是不错的 多次通过自己分析告 解决了业务的疑难杂症 领导们各种离不开 但安逸久了总