数据可视化(十):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])*1000else:lt = s.split('-')return eval(lt[0][:-1])*1000def get_high_saraly(s):if "以" in s:return eval(s[:-3])*1000else:lt = s.split('-')return eval(lt[1][:-1])*1000df_.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.mzph.cn/bicheng/11899.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

20240513每日后端---聊聊策略模式+责任链解决业务多if判断

责任链模式 责任链模式是一种行为设计模式, 允许你将请求沿着处理者链进行发送。 收到请求后, 每个处理者均可对请求进行处理, 或将其传递给链上的下个处理者。 策略模式 策略模式是一种行为设计模式, 它能让你定义一系列算法&…

Rpcx (二):传输

一、Transport 传输 rpcx 可以通过 TCP、HTTP、UnixDomain、QUIC和KCP通信。你也可以使用http客户端通过网关或者http调用来访问rpcx服务。 TCP 这是最常用的通信方式。高性能易上手。可以使用TLS加密TCP流量。 Example: 101basic 服务端使用 tcp 做为网络名并且在注册中心…

C++之map和set 的封装

通过红黑树的学习(C之红黑树-CSDN博客)让我了解到map和set的底层如何实现,这一次我们来对map和set进行封装。 目录 1.map和set底层原理 2.map和set的定义 3.map和set的仿函数 4.map和set的插入 5.map和set的迭代器 5.1迭代器的构造 5.2…

Maven修改本地仓库的默认路径

前言 忽然发现当时下载Maven时候的默认路径没有与Maven放到同一个文件夹内,强迫症的我就想着修改一下Maven的路径!也方便后续我的jar包管理,放到C盘下可能会导致占用C盘空间等等问题吧。以下是我的操作过程: 一、创建一个本地仓库…

QX---mini51单片机学习---(6)独立键盘

目录 1键盘简绍 2按键的工作原理 3键盘类型 4独立键盘与矩阵键盘的特点 5本节相关原理图 6按键特性 7实践 1键盘简绍 2按键的工作原理 内部使用轻触按键,常态按下按键触点才闭合 3键盘类型 编码键盘与非编码键盘 4独立键盘与矩阵键盘的特点 5本节相关原理…

GStreamer中如何自定义配置线程优先级

1.引言 如果看了gstreamer官方教程配置多线程出现编译不过的问题了,不妨进来看看这篇文章或许能解决一些编译问题。 GStreamer 本质上是多线程的,并且是完全线程安全的。大多数线程内部对应用程序是隐藏的,这应该使应用程序开发更容易。但是&…

RabbitMQ--死信队列

目录 一、死信队列介绍 1.死信 2.死信的来源 2.1 TTL 2.2 死信的来源 3.死信队列 4.死信队列的用途 二、死信队列的实现 1.导入依赖 pom.xml 2.application.properties 3.配置类 4.生产者 5.业务消费者(正常消费者) 6.死信队列消费者 一、…

Linux系统安全整改实践指南

在当前信息化高速发展的时代,Linux操作系统凭借其开源、稳定和高效的特点,在服务器市场占据着举足轻重的地位。然而,随着网络威胁的日益复杂化,确保Linux系统的安全性成为了一项至关重要的任务。本文旨在提供一套全面的Linux系统安…

leetcode 1319.连通网络的操作次数

思路:DFS(连通块) 其实一开始的时候,并不知道这道题的精髓在哪,总想着,啊?这怎么用图论的思想做啊? 细细思考之后,这道题还是比较有意思的,需要有一定的数据…

# Mysql 数据库区分大小写吗?

Mysql 数据库区分大小写吗? 1、MySQL 数据库在区分大小写方面有特定的行为,这取决于多个因素,包括操作系统、配置参数以及使用的字符集。 2、数据库名和表名: 在 Linux 系统中,数据库和表名是严格区分大小写的。 而…

【前端性能优化】深入解析重绘和回流,构建高性能Web界面

🔥 个人主页:空白诗 文章目录 🎯 引言:探索Web性能的基石🏗️ 基础概念:什么是重绘和回流?📌 回流(Reflow)📌 重绘(Repaint&#xff0…

蓝桥杯国赛每日一题:交换瓶子(图论,环,贪心)

题目描述: 有 N 个瓶子,编号 1∼N,放在架子上。 比如有 5 个瓶子: 2 1 3 5 4要求每次拿起 2 个瓶子,交换它们的位置。 经过若干次后,使得瓶子的序号为: 1 2 3 4 5对于这么简单的情况&#…

使用Flask部署Web应用:从入门到精通

文章目录 第一部分:准备工作第二部分:部署Flask应用到AWS部署到AWS Lambda 第三部分:部署Flask应用到腾讯云服务器部署到腾讯云服务器 第四部分:优化和扩展结论 在现代软件开发中,Web应用的部署是一个至关重要的环节。…

使用Flask-SocketIO构建实时Web应用

文章目录 准备工作编写代码编写HTML模板运行应用 随着互联网的发展,实时性成为了许多Web应用的重要需求之一。传统的HTTP协议虽然可以实现实时通信,但是其长轮询等机制效率低下,无法满足高并发、低延迟的需求。为了解决这一问题,诞…

python常见数据的存取

python数据的存取 python数据的存取数据的保存3.1.1 保存list3.1.2 保存Dict3.1.3 保存Set3.1.4 保存Dataframe3.1.5 保存Matrix 3.2 数据的读取3.2.1 读取txt文件中的数据3.2.2 读取excel文件中的数据3.2.3 读取csv文件中的数据3.2.4 读取stata文件中的数据3.2.5 读取R文件中的…

计算机发展史故事【14】

大象踢踏舞 如果要把电脑50 年的历史划分为两个不同的阶段,那么,1981 年无疑是个分界线。就在那一年,IBM 公司推出个人电脑PC 机,使人类社会大步跨进个人电脑新时代。今天,全世界正在使用的PC 机已达到2 亿台&#xf…

视频拼接融合产品的产品与架构设计(三)内存和显存单元数据迁移

上一篇文章 视频拼接融合产品的产品与架构设计(二) 这一篇沉下先来,彻底放弃了界面,界面最终的体现是最后要做的,现在要做的是产品的架构,使用链式架构方式迁移数据。同时增加插件口,方便编程序。 插件架构 为了视频…

Android 开机过程画面

Android 开机画面流程 Android 开机动画加载流程涉及bootloader、内核、Android 核心进程、Android文件系统 Bootloader(引导加载程序):当设备启动时,首先由 Bootloader 加载。Bootloader 位于设备的固化存储器中,其主要功能是初始化硬件并启动操作系统。 内核加载:Boo…

Kivy 项目51斩百词 3 屏幕页面转换

MRWord/pages/indexpage/index.py class IndexPage(GridLayout):# 初始化def __init__(self, **kwargs):super().__init__(**kwargs)staticmethoddef index_to_upload():App.get_running_app().screen_manager.current "Upload"定义了一个名为 IndexPage 的类&…