数据可视化(十):Pandas数据分析师职位信息表分析——箱线图、水平柱状图、学历城市双维分析等高级操作

Tips:"分享是快乐的源泉💧,在我的博客里,不仅有知识的海洋🌊,还有满满的正能量加持💪,快来和我一起分享这份快乐吧😊!

喜欢我的博客的话,记得点个红心❤️和小关小注哦!您的支持是我创作的动力!数据源存放在我的资源下载区啦!

数据可视化(十):Pandas数据分析师职位信息表分析——箱线图、水平柱状图、学历城市双维分析等高级操作

目录

  • 数据可视化(十):Pandas数据分析师职位信息表分析——箱线图、水平柱状图、学历城市双维分析等高级操作
    • 案例二:数据分析师职位信息表分析
      • 问题1:将firstType列的 空值 填充为 "未知"
      • 问题2:处理positionId列重复值(按照positionId去重),保留第一次出现的重复行
      • 问题3:获取平均工资,形成新列 average_salary
      • 问题4:城市分布情况画出水平柱状图对比
      • 问题5:平均薪资概率图(将平均薪资分成50个柱子)
      • 问题6:按城市画出平均工资箱线图
      • 问题7:按学历画出平均工资箱线图
      • 问题8:按工作年限画出平均工资箱线图
      • 问题9:学历、城市双维度画出平均工资箱线图
      • 问题10:直方图显示各个城市薪资最小值 最大值 平均值
      • 问题11:直方图显示各个城市各学历平均值
      • 问题12: 对薪资划分等级,然后作堆积百分比柱形图
      • 问题13:将positionLables职位标签信息作为词云显示

本次作业绘图可采用seaborn、matplotlib库或者pandas内置绘图功能

案例二:数据分析师职位信息表分析

# 导入数据

df = pd.read_csv('data/data_analyst.csv',encoding='gb2312')
df.sample(5)
# 数据清洗

# 查看空值
df.isnull().sum()

在这里插入图片描述

问题1:将firstType列的 空值 填充为 “未知”

# 处理空值

display( df.firstType.unique() )
df['firstType'].fillna("未知", inplace=True)
df.fillna("未知", inplace=True)
# 处理重复值

len(df.positionId)-df.positionId.nunique()

在这里插入图片描述

问题2:处理positionId列重复值(按照positionId去重),保留第一次出现的重复行

# 去重

df_ = df.drop_duplicates(subset='positionId', keep='first')#按照positionId去重,保留第一次出现的重复行
len(df_.positionId)-df_.positionId.nunique()
# 取最低工资和最高工资 转换
# salary这一列是字符串
df_['salary'].sample(10)
# salary中有  25k以上 这样没有上限的字眼,需要改成  25k-无上限

# df.query('salary.str.contains("以上")', engine='python')['salary'].map(lambda x:x[:-2]+'-无上限')

df_.query('salary.str.contains("以")', engine='python')['salary']

在这里插入图片描述

# 注意,带有以上以下的没有最高最低,为了计算平均工资,最小最大值都是一个值
def get_low_saraly(s):
    if "以" in s:
        return eval(s[:-3])*1000
    else:
        lt = s.split('-')
        return eval(lt[0][:-1])*1000

def get_high_saraly(s):
    if "以" in s:
        return eval(s[:-3])*1000
    else:
        lt = s.split('-')
        return eval(lt[1][:-1])*1000

df_.loc[:, 'low_salary'] = df_['salary'].map(get_low_saraly)
df_.loc[:, 'high_salary'] = df_['salary'].map(get_high_saraly)
df_.sample()

在这里插入图片描述

问题3:获取平均工资,形成新列 average_salary

# 获取平均工资

df_.loc[:, 'average_salary'] = (df_['low_salary'] + df_['high_salary'])/2
df_.sample(5)

在这里插入图片描述

问题4:城市分布情况画出水平柱状图对比

# 城市分布情况

s = df_.city.value_counts()
display(s)

# 画出水平柱状图对比

plt.barh(s.index, width=s.values, height=0.5)
plt.xlabel('职位数量')
plt.ylabel('城市')
plt.title('职位城市分布')
plt.show()

在这里插入图片描述

问题5:平均薪资概率图(将平均薪资分成50个柱子)

# 平均薪资概率图

# 将平均薪资分成50个柱子

s = df_['average_salary']

plt.hist(s.values, bins=50, color='r')
plt.xlabel('平均薪资')
plt.ylabel('职位数量')
plt.title('平均薪资概率图')
plt.show()

在这里插入图片描述

问题6:按城市画出平均工资箱线图

# 按城市

df_1 = df_[ ['city', 'average_salary']]
# 画布大一些
df_1.boxplot(by='city', figsize=(8,8))

# or
groups = df_.groupby('city')
fig = plt.figure(figsize=(8,8))
labels = []
values = []
for g in groups:
    labels.append(g[0])
    values.append(g[1].average_salary.values)
plt.boxplot(values, labels=labels)
plt.show()

在这里插入图片描述

问题7:按学历画出平均工资箱线图

# 按学历

df_1 = df_[ ['education', 'average_salary']]
df_1.boxplot(by='education', figsize=(8,8))

# or
groups = df_.groupby('education')
labels = []
values = []
for g in groups:
    labels.append(g[0])
    values.append(g[1].average_salary.values)
fig = plt.figure(figsize=(8,8))
plt.boxplot(values, labels=labels)
plt.show()

在这里插入图片描述

问题8:按工作年限画出平均工资箱线图

# 按工作年限

df_1 = df_[ ['workYear', 'average_salary']]
df_1.boxplot(by='workYear', figsize=(8,8))

# or
groups = df_.groupby('workYear')
labels = []
values = []
for g in groups:
    labels.append(g[0])
    values.append(g[1].average_salary.values)
fig = plt.figure(figsize=(8,8))
plt.boxplot(values, labels=labels)
plt.show()

在这里插入图片描述

问题9:学历、城市双维度画出平均工资箱线图

# 学历、城市双维度

df_1 = df_[ ['city', 'education', 'average_salary']]
df_1.boxplot(by=['city', 'education'], figsize=(24,8), rot=90)

# or
groups = df_.groupby(['city', 'education'])
labels = []
values = []
for g in groups:
    labels.append(g[0])
    values.append(g[1].average_salary.values)
fig = plt.figure(figsize=(24,8))
plt.boxplot(values, labels=labels)
plt.xticks(rotation=90)
plt.show()

在这里插入图片描述

问题10:直方图显示各个城市薪资最小值 最大值 平均值

# 直方图显示各个城市薪资最小值 最大值 平均值
# 采用dataframe绘制直方图方便!

df_[['low_salary', 'high_salary', 'average_salary', 'city']].groupby('city').mean().plot.bar()

在这里插入图片描述

问题11:直方图显示各个城市各学历平均值

# 直方图显示各个城市各学历平均值

df_[['city', 'education', 'average_salary']].groupby(['city','education']).\
mean().unstack().plot.bar(figsize=(15,10))

在这里插入图片描述

问题12: 对薪资划分等级,然后作堆积百分比柱形图

# 对薪资划分等级,然后作堆积百分比柱形图

bins=[0, 3000, 5000, 10000, 15000, 20000, 30000, 100000]
level=['0-3','3-5','5-10','10-15','15-20','20-30','30+']
df_['level'] = pd.cut(df_['average_salary'], bins=bins, labels=level)
df_[['average_salary', 'level']]
df_2 = df_.groupby(['city', 'level']).average_salary.count().unstack() #分组计算职位数量
display(df_2)
df_3 = df_2.apply(lambda x:x/x.sum(), axis=1) # 改成占比
display(df_3)
df_3.plot.bar(stacked=True, figsize=(15, 8))

在这里插入图片描述
在这里插入图片描述

问题13:将positionLables职位标签信息作为词云显示

# 将positionLables职位标签信息作为词云显示

from wordcloud import WordCloud
import jieba
from PIL import Image as img

#s = df_['positionLables'].dropna().str[1:-1].replace(" ","")

s = df_['positionLables'].sum()
words = dict()
lt = jieba.lcut(s)
for word in lt:
    if len(word)>=2:
        words[word] = words.get(word, 0) + 1
#display(words)
wordcloud = WordCloud(font_path='assets//SimHei.ttf', 
                      width=1200, height=800, 
                      background_color='white', 
                      mask=np.array(img.open('assets/myimg.jpg')))
wordcloud.fit_words(words)
plt.figure(figsize=(15,15))
axs = plt.imshow(wordcloud)#正常显示词云
plt.axis('off')#关闭坐标轴
plt.show()

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/621156.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

STM32+CubeMX移植HAL库实现SYN6288语音合成模块模块

这里写目录标题 SYN6288语音模块简介引脚定义注意要点CubeMX配置HAL库移植运行结果 SYN6288语音模块简介 SYN6288中文语音合成芯片是北京宇音天下科技有限公司于2010年初推出的一款性/价比更高,效果 更自然的一款中高端语音合成芯片。SYN6288通过异步串口(UART)通讯…

picoCTF-Web Exploitation-Java Code Analysis!?!

Description BookShelf Pico, my premium online book-reading service.I believe that my website is super secure. I challenge you to prove me wrong by reading the ‘Flag’ book!Here are the credentials to get you started: Username: “user”Password: “user” S…

计算机发展史故事【11】

爆发超新星 IBM 号称巨人,竟在巨型机领域败在小小的控制数据公司CDC 手下。在小型机领域,“霸主”DEC 公司的“后院”也曾“起火”,绝非一直风平浪静。 本世纪60 年代末,DEC 公司因开发小型电脑迅速崛起,赢得“小型机…

五子棋对战(网页版)

目录 一、项目背景 用户模块 匹配模块 对战模块 二、核心技术 三、相关知识 WebSocket 原理 报文格式 代码 服务器代码 客户端代码 四、项目创建 4.1、实现用户模块 编写数据库代码 数据库设计 配置MyBatis 创建实体类 创建UserMapper 创建UserMapper接口 实现UserMapper.xml 前…

Android Studio Please select Android SDK

解决方案: 1、打开 SDK Manager 2、选择编辑(Edit) 3、 一直Next,直到完成,解决!

科技查新中的工法查新点如何确立与提炼?案例讲解!

按《工程建设工法管理办法》( 建 质[2014]103 号) ,工法,是指以工程为对象,以工艺为核心,运用系 统工程原理,把先进技术和科学管理结合起来,经过一定工程实践形成的综合配套的施工方…

redis安装与群集

项目需求: 1.安装redis 2.测试redis性能,100个并发连接,100000个请求测试 3.在当前数据库下创建键值对 a11,a22,a33,a44,a55 4.查看键值对 5.将a1改名为a11,将a2删除 5.将a3移动到1号数据库 6搭建redis集群(可选) 测试环境…

如何使用Docker安装并运行Nexus容器结合内网穿透实现远程管理本地仓库

前言 作者简介: 懒大王敲代码,计算机专业应届生 今天给大家聊聊如何使用Docker安装并运行Nexus容器结合内网穿透实现远程管理本地仓库,希望大家能觉得实用! 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!&#x1f496…

vue3组件插槽

Index.vue: <script setup> import { ref, onMounted } from vue import Child from ./Child.vue import ./index.cssonMounted(() > {}) </script><template><div class"m-home-wrap"><Child>插槽</Child><div class&qu…

linux不小心将/etc/passwd用户文件清空或删除解决方法

大概思路&#xff1a;进入单用户模式将passwd-引子程序复制为删除的passwd用户文件&#xff0c;关闭selinux 此系统为&#xff1a;centos 7 1.在GRUB引导的时候按e进入编辑模式&#xff0c;linux16那一行的ro 修改为rw rd.break ‘ ’ 2.ctrlx执行 3.进入单用户模式后修改根…

Cocos 2048从创建到发布上线

一、制作2048小游戏过程 扫描体验2048小游戏 场景搭建&#xff0c;4X4棋盘和基础设置绘制背景板&#xff0c;包含预制体等信息考虑在棋盘中随机出现两个数字方块&#xff0c;数字为2&#xff0c;初始化操作滑动事件部分&#xff0c;让方块移动起来&#xff0c;每滑动一次就生成…

【机器学习与实现】K近邻算法

目录 一、KNN算法简介&#xff08;一&#xff09;KNN算法包括三个步骤&#xff08;二&#xff09;超参数K的影响 二、距离度量三、邻近点的搜索算法四、KNN算法的特点五、KNN常用的参数及其说明六、分类算法的性能度量&#xff08;一&#xff09;混淆矩阵及相关概念&#xff08…

从零创建一个vue2项目

标题从零创建一个vue2项目&#xff0c;项目中使用TensorFlow.js识别手写文字 npm切换到淘宝镜像 npm config set registry https://registry.npm.taobao.org安装vue/cli -g npm install -g vue/cli检查是否安装成功 vue -V创建项目 vue create 项目名安装TensorFlow npm …

韶音、南卡、倍思开放式耳机值得买吗?王牌机型对比测评

今年&#xff0c;开放式耳机市场迎来了众多新品&#xff0c;为消费者提供了丰富的选择。在这样的背景下&#xff0c;正确挑选一款既符合音质需求又兼具佩戴舒适的开放式耳机显得格外关键。作为长期使用开放式耳机的用户&#xff0c;我发现很多人在韶音、南卡、漫步者这三个品牌…

k8s v1.20二进制部署

目录 一、环境准备 二、操作系统初始化配置 2.1.关闭防火墙 ​编辑 2.2.关闭selinux 2.3.关闭swap 2.4.根据规划设置主机名 2.5在master添加hosts 2.6.调整内核参数 2.7.时间同步 三、部署 docker引擎 3.1.所有 node 节点部署docker引擎 四、部署 etcd 集群 4.1.…

【数据库】docker搭建mysql8一主两从节点,配置proxysql读写分离

docker搭建mysql8一主两从节点&#xff0c;配置proxysql读写分离 一、docker 搭建 mysql8 一主两从节点1.1 相关配置文件与docker启动1.2 半同步复制1.3 主从同步异常处理 二、mysql 中间件 ProxySql 配置读写分离2.1 在mysql服务里创建给proxySQL访问的用户2.2 安装ProxySql及…

Reactor Netty TCP 服务器端-响应式编程-011

🤗 ApiHug {Postman|Swagger|Api...} = 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱,有温度,有质量,有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace The Next Generation API Development Platform…

2024第八季完美童模 上海翎秀赛区 初赛 火热启动

第八季完美童模新篇启航&#xff0c;打响2024全明星联赛第三站的火热赛程&#xff01;本季全球赛亮点纷呈&#xff0c;带领全球选手体验暑期最高规格国民赛&#xff01;6季上榜CCTV新闻报道&#xff0c;稳坐行业赛事头把交椅&#xff1b;分赛区遍布全球各地&#xff0c;覆盖350…

【Linux】自动化构建工具make/Makefile和git介绍

&#x1f308;个人主页&#xff1a;秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343&#x1f525; 系列专栏&#xff1a;https://blog.csdn.net/qinjh_/category_12625432.html 目录 前言 Linux项目自动化构建工具-make/Makefile 举例 .PHONY 常见符号 依赖关系…

前端报错 SyntaxError: Unexpected number in JSON at position xxxx at JSON.parse

问题描述​ 控制台提示 SyntaxError: Unexpected number in JSON at position xxxx at JSON.parse 问题原因​ 原因&#xff1a;JSON 数据格式错误&#xff0c;是否符合 JSON 格式。 解决方法​ 应为json格式数据 什么是json格式数据 JSON&#xff08;JavaScript Object …