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

本文主要是介绍数据可视化(十):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()

在这里插入图片描述

这篇关于数据可视化(十):Pandas数据分析师职位信息表分析——箱线图、水平柱状图、学历城市双维分析等高级操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/986502

相关文章

从基础到高级详解Go语言中错误处理的实践指南

《从基础到高级详解Go语言中错误处理的实践指南》Go语言采用了一种独特而明确的错误处理哲学,与其他主流编程语言形成鲜明对比,本文将为大家详细介绍Go语言中错误处理详细方法,希望对大家有所帮助... 目录1 Go 错误处理哲学与核心机制1.1 错误接口设计1.2 错误与异常的区别2 错误创建与检查2.1 基础

Nginx分布式部署流程分析

《Nginx分布式部署流程分析》文章介绍Nginx在分布式部署中的反向代理和负载均衡作用,用于分发请求、减轻服务器压力及解决session共享问题,涵盖配置方法、策略及Java项目应用,并提及分布式事... 目录分布式部署NginxJava中的代理代理分为正向代理和反向代理正向代理反向代理Nginx应用场景

Linux下利用select实现串口数据读取过程

《Linux下利用select实现串口数据读取过程》文章介绍Linux中使用select、poll或epoll实现串口数据读取,通过I/O多路复用机制在数据到达时触发读取,避免持续轮询,示例代码展示设... 目录示例代码(使用select实现)代码解释总结在 linux 系统里,我们可以借助 select、

Redis中的有序集合zset从使用到原理分析

《Redis中的有序集合zset从使用到原理分析》Redis有序集合(zset)是字符串与分值的有序映射,通过跳跃表和哈希表结合实现高效有序性管理,适用于排行榜、延迟队列等场景,其时间复杂度低,内存占... 目录开篇:排行榜背后的秘密一、zset的基本使用1.1 常用命令1.2 Java客户端示例二、zse

Redis中的AOF原理及分析

《Redis中的AOF原理及分析》Redis的AOF通过记录所有写操作命令实现持久化,支持always/everysec/no三种同步策略,重写机制优化文件体积,与RDB结合可平衡数据安全与恢复效率... 目录开篇:从日记本到AOF一、AOF的基本执行流程1. 命令执行与记录2. AOF重写机制二、AOF的

使用Java填充Word模板的操作指南

《使用Java填充Word模板的操作指南》本文介绍了Java填充Word模板的实现方法,包括文本、列表和复选框的填充,首先通过Word域功能设置模板变量,然后使用poi-tl、aspose-words... 目录前言一、设置word模板普通字段列表字段复选框二、代码1. 引入POM2. 模板放入项目3.代码

利用Python操作Word文档页码的实际应用

《利用Python操作Word文档页码的实际应用》在撰写长篇文档时,经常需要将文档分成多个节,每个节都需要单独的页码,下面:本文主要介绍利用Python操作Word文档页码的相关资料,文中通过代码... 目录需求:文档详情:要求:该程序的功能是:总结需求:一次性处理24个文档的页码。文档详情:1、每个

Python的pandas库基础知识超详细教程

《Python的pandas库基础知识超详细教程》Pandas是Python数据处理核心库,提供Series和DataFrame结构,支持CSV/Excel/SQL等数据源导入及清洗、合并、统计等功能... 目录一、配置环境二、序列和数据表2.1 初始化2.2  获取数值2.3 获取索引2.4 索引取内容2

Python内存管理机制之垃圾回收与引用计数操作全过程

《Python内存管理机制之垃圾回收与引用计数操作全过程》SQLAlchemy是Python中最流行的ORM(对象关系映射)框架之一,它提供了高效且灵活的数据库操作方式,本文将介绍如何使用SQLAlc... 目录安装核心概念连接数据库定义数据模型创建数据库表基本CRUD操作创建数据读取数据更新数据删除数据查

Go语言中json操作的实现

《Go语言中json操作的实现》本文主要介绍了Go语言中的json操作的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录 一、jsOChina编程N 与 Go 类型对应关系️ 二、基本操作:编码与解码 三、结构体标签(Struc