数据导入与预处理-第8章-实战演练-数据分析师岗位分析

  • 1.数据分析概述
    • 1.1 本章内容
    • 1.2 什么是数据分析
    • 1.3 数据分析的流程
    • 1.4 使用pyecharts绘制图表
      • 1.4.1 pyecharts简介
      • 1.4.2安装pyecharts
      • 1.4.3 pyecharts绘制图表过程
        • 1 创建图表类对象
        • 2 添加图表数据与系列配置项
        • 3 添加图表全局配置项
        • 4. 渲染图表
  • 2. 分析目标与思路
    • 2.1 分析目标
    • 2.2 数据收集
      • 2.21 导入模块:
      • 2.2.2 导入数据
    • 2.3 数据预处理
      • 2.3.1. 查看数据的整体信息
      • 2.3.2 重复值处理
      • 2.3.3 缺失值处理
    • 2.4 数据分析与展现
      • 2.4.1 数据分析师岗位的需求趋势
      • 2.4.2 数据分析师岗位的热门城市Top10
      • 2.4.3 不同城市数据分析师岗位的薪资水平
      • 2.4.4 数据分析师岗位的学历要求

备注:本文内容来源于黑马的《数据导入与预处理》教材

1.数据分析概述

1.1 本章内容

本案例数据为招聘网站上收集的有关数据分析师岗位的数据,对该数据集从数据分析的角度出发,利用pandas、pyecharts库处理与展现数据,开发一个完整的数据分析项目。

1.2 什么是数据分析

数据分析是指运用适当的统计分析方法对收集的大量数据进行分析,将这些数据加以汇总和理解并消化,以实现最大化地开发数据的功能,发挥数据的作用。

1.3 数据分析的流程

1.4 使用pyecharts绘制图表

大部分数据是以文本或数值的形式显示的,这种形式的数据不仅让人感觉十分枯燥,而且无法让人直观地看到其中的关系和规律。
为帮助用户快速地从数据中捕获信息,可以用图表形式的数据替代诸如文本或数值形式的数据,更好地给人们传递数据内部潜在的信息。

1.4.1 pyecharts简介

pyecharts官网有很多案例,如果使用pyecharts,可以在官网中找到相关配置
✨ 特性

简洁的 API 设计,使用如丝滑般流畅,支持链式调用
囊括了 30+ 种常见图表,应有尽有
支持主流 Notebook 环境,Jupyter Notebook 和 JupyterLab
可轻松集成至 Flask,Django 等主流 Web 框架
高度灵活的配置项,可轻松搭配出精美的图表
详细的文档和示例,帮助开发者更快的上手项目
多达 400+ 地图文件以及原生的百度地图,为地理数据可视化提供强有力的支持

1.4.2安装pyecharts

pip install pyecharts==1.9.0

1.4.3 pyecharts绘制图表过程

使用pyecharts绘制各种图表的过程大致相同,一般可分为4步:

创建图表类对象
添加图表数据与系列配置项
添加图表全局配置项
渲染图表

1 创建图表类对象

pyecharts库支持绘制30+个丰富的Echarts 图表,它针对每个图表均提供了相应的类,并将这些图表类封装到pyecharts.charts模块中。

前表中列举的类均代表一个常见的图表,它们可使用与类同名的构造方法创建图表实例。

Line(init_opts=opts.InitOpts())

init_opts:表示初始化配置项,该参数需要接收一个InitOpts类的对象,通过构建的InitOpts类对象可以为图表指定一些通用的属性,比如背景颜色、画布大小等。

构建示例

line_demo = Line(init_opts=opts.InitOpts(theme=ThemeType.ROMA))

2 添加图表数据与系列配置项

系列配置项是一些针对图表特定元素属性的配置项,包括图元样式、文本样式、标签、线条样式、标记样式、填充样式等,其中每个配置项都对应一个类。


使用add_xaxis()、add_yaxis()或add()方法可以添加图表数据或系列配置项。

add_yaxis(self, series_name, y_axis, is_selected=True,  is_connect_nones=False, xaxis_index=None, yaxis_index=None, color=None, is_symbol_show=True,  symbol=None, symbol_size=4, ...)

y_axis:表示系列数据。
symbol:表示标记,可以接收的取值有‘circle’(圆形)、‘rect’(矩形)、‘roundRect’(圆角矩形)、‘triangle’(三角形)、‘diamond’(菱形)、‘pin’(大头针)、‘arrow’(箭头)、‘none’(无)。
symbol_size:表示标记的大小。

为前面创建的line_demo对象添加一组数据,并设置折线图的标记为菱形、标记大小为10。

line_demo.add_yaxis('', jobs_count.values.tolist(), symbol='diamond',symbol_size=10)

3 添加图表全局配置项

全局配置项是一些针对图表通用属性的配置项,包括初始化属性、标题组件、图例组件、工具箱组件、视觉映射组件、提示框组件、数据区域缩放组件,其中每个配置项都对应一个类。

若pyecharts需要为图表设置全局配置项(InitOpts除外),则需要将全局配置项传入set_global_options()方法中。

set_global_opts(self, title_opts=opts.TitleOpts(), legend_opts=opts.LegendOpts(),  tooltip_opts=None, toolbox_opts=None, brush_opts=None, xaxis_opts=None, yaxis_opts=None, visualmap_opts=None, datazoom_opts=None, graphic_opts=None, axispointer_opts=None)

title_opts:表示标题组件的配置项,接收一个TitleOpts类的对象;
yaxis_opts:表示y轴的配置项,接收一个AxisOpts类的对象。

4. 渲染图表

图表可通过两种方法进行渲染:render()和render_notebook(),其中render()方法用于将图表渲染到HTML文件;render_notebook()方法用于将图表渲染到Jupyter Notebook工具中。

line_demo.render_notebook()

2. 分析目标与思路

目标驱使行动,行动决定思路。在项目伊始期间,我们需要明确项目的目标,只有明确了目标,才能保证后期的行为不会偏离方向,否则得出的分析结果将没有任何指导意义。

2.1 分析目标

分析数据分析师岗位的需求趋势
分析数据分析师岗位的热门城市Top10
分析不同城市数据分析师岗位的薪资水平
分析数据分析师岗位的学历要求

在明确了分析目标之后,我们需要将项目目标分解到数据分析的各个环节,方便开发人员清楚自己在各环节应该开展哪些工作。

2.2 数据收集

熟悉数据收集的工作内容,可以熟练地使用pandas库读取文件中的数据,并筛选与分析目标关联紧密的列数据
在开发项目之前,我们需要提前准备好分析的数据。这里直接使用从天池网站上下载的一份有关数据分析师岗位的数据(从2019年11月初到12月初),分别将这些数据保存至lagou01.csv和lagou02.xlsx文件中。数据集下载地址

观察两张表格可知,两张表格中有多列标题相同的数据,但并非每列数据都与数据分析目标有关,这里只需要保留与数据分析目标相关的部分列数据即可

2.21 导入模块:

import time
import pandas as pd
from pyecharts.charts import Bar, Line, Pie
from pyecharts import options as opts
from pyecharts.globals import SymbolType, ThemeType

2.2.2 导入数据

读取lagou01.csv文件的数据

# 读取lagou01.csv文件的数据
recruit_obj = pd.read_csv('lagou01.csv', encoding='gbk')
# 过滤与分析目标无关的数据,保留有关的数据
new_df_01 = pd.DataFrame([recruit_obj['city'], recruit_obj['companyFullName'], recruit_obj['salary'], recruit_obj['companySize'], recruit_obj['district'], recruit_obj['education'], recruit_obj['firstType'], recruit_obj['positionAdvantage'], recruit_obj['workYear'], recruit_obj['createTime']]).T
new_df_01

输出为:

读取lagou02.xlsx文件的数据

# 读取lagou02.xlsx文件的数据
recruit_obj2 = pd. read_excel('lagou02.xlsx',engine='openpyxl')
new_df_02 = pd.DataFrame( [recruit_obj2['city'], recruit_obj2['companyFullName'], recruit_obj2['salary'],recruit_obj2['companySize'], recruit_obj2['district'],recruit_obj2['education'], recruit_obj2['firstType'], recruit_obj2['positionAdvantage'], recruit_obj2['workYear'], recruit_obj2['createTime']]).T
new_df_02

输出为:

转换时间格式

# 转换时间格式
new_df_01['createTime'] = pd.to_datetime(new_df_01['createTime'])
new_df_02['createTime'] = pd.to_datetime(new_df_02['createTime'])
new_df_01.head()

输出为:

采用上下堆叠的方式合并数据

# 采用上下堆叠的方式合并数据
final_df = pd.concat([new_df_01, new_df_02], ignore_index=True)
# 给final_df重新设置列索引的名称
final_df = final_df.rename(columns={'city':'城市', 'companyFullName':'公司全称', 'salary':'薪资','companySize':'公司规模', 'district':'区', 'education':'学历','firstType':'第一类型', 'positionAdvantage':'职位优势','workYear':'工作经验', 'createTime':'发布时间'})
final_df

输出为:

2.3 数据预处理

尽管从网站上采集的数据是比较规整的,但可能会存在着一些问题,无法直接被应用到数据分析中。为增强数据的可用性,我们需要对前面准备的数据进行一系列的数据清理操作,包括检测与处理重复值、检测与处理缺失值。

2.3.1. 查看数据的整体信息

final_df.info()

输出为:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3143 entries, 0 to 3142
Data columns (total 10 columns):#   Column  Non-Null Count  Dtype
---  ------  --------------  -----         0   城市      3142 non-null   object        1   公司全称    3142 non-null   object        2   薪资      3142 non-null   object        3   公司规模    3142 non-null   object        4   区       3135 non-null   object        5   学历      3142 non-null   object        6   第一类型    3142 non-null   object        7   职位优势    3142 non-null   object        8   工作经验    3142 non-null   object        9   发布时间    3142 non-null   datetime64[ns]
dtypes: datetime64[ns](1), object(9)
memory usage: 245.7+ KB

info返回结果分析如下:

由于整组数据中没有数值类型的数据,所以这里不再检测异常值,而只需要检测与处理重复值、缺失值即可。

2.3.2 重复值处理

# 检测重复值
final_df[final_df.isna().values==True]

输出为:

删除重复值

final_df = final_df.drop_duplicates()
final_df

输出为:

2.3.3 缺失值处理

检测缺失值

# 检测缺失值
final_df[final_df.isna().values==True]

输出为:

删除下面的空行 每行非空缺值少于4个的所在行

# 删除下面的空行 每行非空缺值少于4个的所在行
final_df.dropna(axis=0, how='any', thresh=4, subset=None, inplace=True)
# 检测缺失值
final_df[final_df.isna().values==True]

输出为:

填充值并查看

# 填充一个指定的值
final_df = final_df.fillna('未知')
final_df.loc[28]

输出为:

2.4 数据分析与展现

2.4.1 数据分析师岗位的需求趋势

若希望了解数据分析师岗位的需求趋势,需要对近一个月每天的岗位招聘总数量进行统计,为直观地看到岗位需求的变化趋势,这里会将统计的数据绘制成一个折线图。

转变时间格式

# 转变时间格式
final_df['发布时间'] = final_df['发布时间'].dt.strftime('%Y-%m-%d')
final_df.head(10)

输出为:

统计每组中城市一列的的数量

# 将相同日期划分为一组,并统计每组中城市一列的的数量,以得到需求量
jobs_count = final_df.groupby(by="发布时间").agg({'城市':'count'})
jobs_count.head(10)

输出为:

可视化展示

from pyecharts.globals import WarningType
WarningType.ShowWarning = False
line_demo = (    Line(init_opts=opts.InitOpts(theme=ThemeType.ROMA))# 添加x轴、y轴的数据、系列名称.add_xaxis(jobs_count.index.tolist()).add_yaxis('', jobs_count.values.tolist(), symbol='diamond', symbol_size=10)# 设置标题.set_global_opts(title_opts=opts.TitleOpts(title="数据分析师岗位的需求趋势"),yaxis_opts=opts.AxisOpts(name="需求数量 ( 个)",name_location="center", name_gap=30))
)
line_demo.render_notebook()

输出为:

由图可知,从2019年11月3日到2019年11月23日对应的折线呈缓慢上升的趋势,从2019年11月23日到2019年12月1日对应的折线呈快速上升的趋势,说明市场上对数据分析师岗位的需求变大。

2.4.2 数据分析师岗位的热门城市Top10

若希望了解数据分析师岗位需求的热门城市,需要对近一个月内每天的岗位招聘总数量进行统计,为直观地看到数据分析师岗位的需求量,这里会将统计的数据绘制成一个柱形图,并在该图中柱形的上方标注出具体的数值。

# 查看列城市的各个值统计
city_num = final_df['城市'].value_counts()
city_num.head(10)

输出为:

成都    416
武汉    392
北京    366
上海    345
深圳    253
南京    228
广州    172
西安    164
长沙    148
厦门    131
Name: 城市, dtype: int64

将前10个结果转换为列表类型的数据

# 将前10个结果转换为列表类型的数据
city_values = city_num.values[:10].tolist()
city_index = city_num.index[:10].tolist()

可视化展示

bar_demo = (    Bar()# 添加x轴、y轴的数据、系列名称.add_xaxis(city_index).add_yaxis("",city_values)# 设置标题.set_global_opts(title_opts=opts.TitleOpts(
title='数据分析师岗位的热门城市Top10'),
xaxis_opts=opts.AxisOpts(
axislabel_opts=opts.LabelOpts(rotate=-15)),visualmap_opts=opts.VisualMapOpts(max_=450), yaxis_opts=opts.AxisOpts(name="需求数量 ( 个)", name_location="center", name_gap=30))
)
bar_demo.render_notebook()

输出为:

由图可知,北京市、成都市、武汉市对应的柱形条最高,说明这几个城市对数据分析师岗位的需求较大,需求数量大约为400个。

2.4.3 不同城市数据分析师岗位的薪资水平

若希望了解不同城市的数据分析师岗位的薪资水平,需获得不同城市的数据分析师岗位的薪资平均值,为直观地看到不同城市数据分析师岗位的薪资水平,这里会将统计的数据绘制成一个柱形图,并将获得的平均值标注到柱形的上方。

# 将数据里面的大写K转化为小写字母k
final_df['薪资'] = final_df['薪资'].str.lower().fillna(" ")
# 增加两列,一列是薪资范围的最大值,一列是薪资范围的最小值
final_df["薪资最小值"] = final_df["薪资"].str.extract(r'(\d+)').astype(int)
final_df["薪资最大值"] = final_df["薪资"].str.extract(r'\-(\d+)').astype(int)
average_df = final_df[["薪资最小值", "薪资最大值"]]
final_df["薪资平均值"] = average_df.mean(axis=1)
final_df.drop(columns=["薪资"], inplace=True)
final_df.head(10)

输出为:

可视化展示

companyNum = final_df.groupby('城市')['薪资平均值'].mean().sort_values(ascending=False)
companyNum = companyNum.astype(int)company_values = companyNum.values.tolist()
company_index = companyNum.index.tolist()
# 绘制柱形图
bar_demo2 = (    Bar()# 添加x轴、y轴的数据、系列名称.add_xaxis(company_index).add_yaxis("",company_values)# 设置标题.set_global_opts(title_opts=opts.TitleOpts(title='不同城市数据分析师岗位的薪资水平'),xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)),visualmap_opts=opts.VisualMapOpts(max_=21),yaxis_opts=opts.AxisOpts(name="薪资(K)",
name_location="center", name_gap=30))
)
bar_demo2.render_notebook()

输出为:

由图可知,北京市数据分析师岗位的平均薪资最高,大约为21K;上海市数据分析师岗位的平均薪资次之,大约为20K。

2.4.4 数据分析师岗位的学历要求

若希望了解数据分析师岗位对学历的要求,需要了解不同学历的占比情况,为直观地看到数据分析师岗位的学历要求,这里会将统计的数据绘制成一个圆环图,并将具体的比例值标注到圆环图上方。
可视化展示

# 数据分析师岗位对学历的要求占比
education = final_df["学历"].value_counts()
cut_index = education.index.tolist()
cut_values = education.values.tolist()
data_pair = [list(z) for z in zip(cut_index,cut_values)]
# 绘制饼图
pie_obj = (Pie(init_opts=opts.InitOpts(theme=ThemeType.ROMA)).add('', data_pair, radius=['35%', '70%']).set_global_opts(title_opts=opts.TitleOpts(title='数据分析师岗位的学历要求'),legend_opts=opts.LegendOpts(orient='vertical', pos_top='15%', pos_left='2%')).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}:{d}%"))
)
pie_obj.render_notebook()

输出为:

由图可知,本科对应的图形所占的比例最大,说明数据分析师岗位对本科学历的需求较多;博士对应的图形所占的比例最小,说明数据分析师岗位对博士学历的需求较小。

https://cloud.tencent.com/developer/support-plan?invite_code=1oazrmuzddbc1
我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=1oazrmuzddbc1

数据导入与预处理-第8章-实战演练-数据分析师岗位分析相关推荐

  1. 数据导入与预处理-第4章-数据获取python读取pdf文档

    数据导入与预处理-第4章-数据获取Python读取PDF文档 1 PDF简介 1.1 pdf是什么 2 Python操作PDF 2.1 pdfplumber库 2.2 pdfplumber基本操作 2 ...

  2. 数据导入与预处理-第5章-数据清理

    数据导入与预处理-第5章-数据清理 1. 数据清理概述 1.1 数据清理概述 1.2 什么是缺失值 1.3 什么是重复值 1.4 什么是异常值 2. 数据清理案例 2.1 缺失值处理 2.1.1 缺失 ...

  3. 数据导入与预处理-拓展-pandas时间数据处理01

    数据导入与预处理-拓展-pandas时间数据处理01 Pandas时序数据系列博客 Pandas时间序列数据处理 1.好用的Python库 2.Pandas历史 3.时序数据处理 3.1 时序中的基本 ...

  4. dplyr | 数据导入和预处理的常用函数

    在正式分析数据前,我们通常需要先预处理一下数据,比如筛选有效样本,定义变量格式,处理缺失值等,目的是把数据整理成比较清洁的形式,便于后续处理,而R的tidyverse系列工具包针对此提供了丰富多样的处 ...

  5. 大数据技术之Hive 第4章 DDL数据定义语言

    第4章 DDL数据定义语言 4.1 创建数据库 CREATE DATABASE [IF NOT EXISTS] database_name [COMMENT database_comment] [LO ...

  6. 大数据技术原理与应用——第一章 大数据概述

    第一章 大数据概述 1.1 大数据时代 1.1.1 第三次信息化浪潮 信息化浪潮 发生时间 标志 解决的问题 代表企业 第一次浪潮 1980年前后 个人计算机 信息处理 Intel.AMD.IBM.苹 ...

  7. 数据导入HBase最常用的三种方式及实践分析

    要使用Hadoop,数据合并至关重要,HBase应用甚广.一般而言,需要针对不同情景模式将现有的各种类型的数据库或数据文件中的数据转入至HBase中. 常见方式为:1.使用HBase的API中的Put ...

  8. 02_clickhouse安装,卸载,启动/关闭服务,交互式命令(数据库创建,数据导入,查询),批模式数据导入,MySQL接口操作ClickHouse,DBeaver可视化工具安装与使用(学习笔记)

    1 ClickHouse安装 安装文件清单 clickhouse-client-${version}.noarch.rpm clickhouse-common-static-dbg-${version ...

  9. mysql将备份的数据导入_成功将MySQL的大型数据导入导出和备份(转载)

    原来的数据使用的是MySQL4.1,大概有800M左右.使用 mysqldump -u username -p dbname > "filename" 导出的时候很容易死掉, ...

  10. solr mysql增量导入_10.Solr4.10.3数据导入(DIH全量增量同步Mysql数据)

    1.创建MySQL数据 create databasesolr;usesolr;DROP TABLE IF EXISTSstudent;CREATE TABLEstudent ( idchar(10) ...

最新文章

  1. [deviceone开发]-do_Http组件示例
  2. 简单好听的id_一位妈妈给孩子的10大家规,简单实用,值得所有父母借鉴!
  3. 《程序员代码面试指南》第二章 链表问题 在单链表和双链表中删除倒数第K个节点...
  4. 中国矿山机械行业运行现状与投资战略规划报告2022版
  5. Chrome开发者工具和Firebug的一些简单比较
  6. java线程池(ThreadPool)
  7. 心理学上的被动_心理学:骨子里就被动的人,一定会有这5种表现
  8. idhttp.post方式 调用datasnap rest 远程方法
  9. uboot引导linux内核,u-boot启动内核的几种方式
  10. 深度解析vsftpd服务
  11. Oracle 存储过程调用语句
  12. Kali Linux系统设置中文语言环境-1
  13. ASP.NET Core的身份认证框架IdentityServer4--(5)自定义用户登录(通过接口登录,无UI版本)...
  14. directUI的心得
  15. 线索二叉树是一种什么结构_技术面试之常用的数据结构
  16. SPC-Light显示正常的日期与时间
  17. Zabbix学习(十七)zabbix low-level discover zabbix批量部署必备
  18. 用python快速导出浏览器的标头(headers)
  19. 美通企业日报 | 英国名校哈罗落户深圳;绿叶与克利夫兰医学中心在沪打造未来医院...
  20. TCL通讯宣布于9月30日港股收盘后从港交所退市

热门文章

  1. java 逆矩阵_用Java实现求逆矩阵
  2. IDEA社区版下载与安装详细教程
  3. ios审核新坑解决,因为需要访问相机权限被拒绝We noticed that your app requests the user’s consent to access their camera
  4. 腾讯云服务器搭建鸿蒙Hi3861开发板开发环境
  5. php excel复选框,Element表格嵌入复选框以及单选框的方法介绍(代码示例)
  6. 在职研究生论文如何查重?
  7. (休息几天)读米什金之货币银行学——金融市场工具
  8. 全球AMR调度系统分析(RMS、TMS)
  9. 致敬mentohust,路由器使用Socket认证华科校园网
  10. IAR_EW_MSP430下载