项目背景

本次练习使用的数据集为美国城市巴尔的摩2016年公务员工资的数据集,将通过数据可视化和数据描述性分析等手段,分析其工资分布情况。

数据来源

本次使用的数据集可以从 https://catalog.data.gov/dataset/baltimore-city-employee-salaries-fy2016该网站进行下载。

其中,一共有13818条数据,7个字段,分别为:

  • Name(姓名)
  • JobTitle(职位名称)
  • AgencyID(工号)
  • Agency(单位)
  • HireDate(入职日期)
  • AnnualSalary(年薪)
  • GrossPay(总薪资-税前)

定义问题

本次练习将围绕工资数据集进行。分别会以下问题展现分析:
- 年薪的总体分布情况
- 年薪最高的职务,人数最多的职位
- 公务人员入职日期的情况

数据清洗与整理

# 设置notebook cell多行输出
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = 'all' #默认为'last'import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import os
import warningsos.chdir(r'E:\python_learn\train') # 设置相对路径
warnings.filterwarnings('ignore')  # 设置忽略警告
plt.style.use('ggplot')   # 设置matplotlib的整体风格
file_name = 'Baltimore_City_Employee_Salaries_FY2016.csv'
salary = pd.read_csv(file_name)
salary.head()
Name JobTitle AgencyID Agency HireDate AnnualSalary GrossPay
0 Aaron,Patricia G Facilities/Office Services II A03031 OED-Employment Dev (031) 10/24/1979 12:00:00 AM $56705.00 $54135.44
1 Aaron,Petra L ASSISTANT STATE'S ATTORNEY A29045 States Attorneys Office (045) 09/25/2006 12:00:00 AM $75500.00 $72445.87
2 Abbey,Emmanuel CONTRACT SERV SPEC II A40001 M-R Info Technology (001) 05/01/2013 12:00:00 AM $60060.00 $59602.58
3 Abbott-Cole,Michelle Operations Officer III A90005 TRANS-Traffic (005) 11/28/2014 12:00:00 AM $70000.00 $59517.21
4 Abdal-Rahim,Naim A EMT Firefighter Suppression A64120 Fire Department (120) 03/30/2011 12:00:00 AM $64365.00 $74770.82
# 查看数据结构
salary.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 13818 entries, 0 to 13817
Data columns (total 7 columns):
Name            13818 non-null object
JobTitle        13818 non-null object
AgencyID        13818 non-null object
Agency          13818 non-null object
HireDate        13818 non-null object
AnnualSalary    13818 non-null object
GrossPay        13546 non-null object
dtypes: object(7)
memory usage: 755.8+ KB

从返回的数据信息和结构信息可知,HireDate、AnnualSalary和GrossPay这3个字段的数据类型与实际不符,AnnualSalary和GrossPay字段的数据含有特殊符号,并且GrossPay字段部分数据缺失。

因此接下来要对存在问题的字段进行以下的清洗和整理工作:

  • GrossPay字段的缺失数据处理
  • AnnualSalary和GrossPay字段删除特殊符号
  • AnnualSalary和GrossPay str → numeric
  • HireDate str → datetime
  • JobTitle、Agency str → category
# 缺失值判断及处理
salary.isna().sum()
salary.isna().sum().sum()# 缺失数据比例较少,可以选择删除处理
Name              0
JobTitle          0
AgencyID          0
Agency            0
HireDate          0
AnnualSalary      0
GrossPay        272
dtype: int64272
salary = salary.dropna()
salary.isna().sum()
salary.isna().sum().sum()   # 缺失数据处理完成
Name            0
JobTitle        0
AgencyID        0
Agency          0
HireDate        0
AnnualSalary    0
GrossPay        0
dtype: int640
# AnnualSalary和GrossPay字段删除特殊符号def f(x):return x.strip('$')   # 删除$符号
salary['AnnualSalary'] = salary['AnnualSalary'].map(f)
salary['GrossPay'] = salary['GrossPay'].map(f)salary.head()
Name JobTitle AgencyID Agency HireDate AnnualSalary GrossPay
0 Aaron,Patricia G Facilities/Office Services II A03031 OED-Employment Dev (031) 10/24/1979 12:00:00 AM 56705.00 54135.44
1 Aaron,Petra L ASSISTANT STATE'S ATTORNEY A29045 States Attorneys Office (045) 09/25/2006 12:00:00 AM 75500.00 72445.87
2 Abbey,Emmanuel CONTRACT SERV SPEC II A40001 M-R Info Technology (001) 05/01/2013 12:00:00 AM 60060.00 59602.58
3 Abbott-Cole,Michelle Operations Officer III A90005 TRANS-Traffic (005) 11/28/2014 12:00:00 AM 70000.00 59517.21
4 Abdal-Rahim,Naim A EMT Firefighter Suppression A64120 Fire Department (120) 03/30/2011 12:00:00 AM 64365.00 74770.82
# HireDate、AnnualSalary和GrossPay这3个字段转换为与实际数据相符的数据类型
# AnnualSalary和GrossPay → floatsalary['AnnualSalary'] = salary['AnnualSalary'].astype(float)
salary['GrossPay'] = salary['GrossPay'].astype(float)# HireDate → datetime
salary['HireDate'] = pd.to_datetime(salary['HireDate'])salary.head()
salary.info()  # 查看转换后的数据结构  → 数据清洗后一共13546条数据
Name JobTitle AgencyID Agency HireDate AnnualSalary GrossPay
0 Aaron,Patricia G Facilities/Office Services II A03031 OED-Employment Dev (031) 1979-10-24 56705.0 54135.44
1 Aaron,Petra L ASSISTANT STATE'S ATTORNEY A29045 States Attorneys Office (045) 2006-09-25 75500.0 72445.87
2 Abbey,Emmanuel CONTRACT SERV SPEC II A40001 M-R Info Technology (001) 2013-05-01 60060.0 59602.58
3 Abbott-Cole,Michelle Operations Officer III A90005 TRANS-Traffic (005) 2014-11-28 70000.0 59517.21
4 Abdal-Rahim,Naim A EMT Firefighter Suppression A64120 Fire Department (120) 2011-03-30 64365.0 74770.82
<class 'pandas.core.frame.DataFrame'>
Int64Index: 13546 entries, 0 to 13817
Data columns (total 7 columns):
Name            13546 non-null object
JobTitle        13546 non-null object
AgencyID        13546 non-null object
Agency          13546 non-null object
HireDate        13546 non-null datetime64[ns]
AnnualSalary    13546 non-null float64
GrossPay        13546 non-null float64
dtypes: datetime64[ns](1), float64(2), object(4)
memory usage: 846.6+ KB
# 异常值检测
salary_num = salary.iloc[:,5:]# 箱型图检测
color = dict(boxes='DarkGreen', whiskers='DarkOrange', medians='DarkBlue', caps='Gray')  # 颜色设置
box = salary_num.plot.box(figsize=(10,6),color=color)
plt.title('Outliers detection box chart',fontsize=14,pad=12)# 筛出异常值
lst = []
cols = salary_num.columns
for col in cols:salary_num_col = salary_num[col]q1 = salary_num_col.quantile(0.25)q3 = salary_num_col.quantile(0.75)iqr = q3-q1ma = q3+iqr*1.5mi = q1-iqr*1.5err = salary_num_col[(salary_num_col > ma) | (salary_num_col < mi)]lst.append(err)err_data = pd.concat(lst)
print('一共检测出异常数据%i条!'%(len(err_data)),'\n')
print('异常数据展示前10条 \n',err_data.head(10))
Text(0.5, 1.0, 'Outliers detection box chart')
一共检测出异常数据343条! 异常数据展示前10条 306     132600.0
448     130100.0
803     127500.0
849     132200.0
1183    130200.0
1336    138200.0
1352    157100.0
1658    127500.0
1938    166320.0
2193    129587.0
dtype: float64

鉴于不清楚异常值的产生原因,以及对美国公务人员的工资制度等信息不清楚,暂不对异常数据进行处理。

数据探索

总体情况

# 人数
number_salary = salary['AgencyID'].count()
print('数据集涵盖的样本数为:%i'%number_salary)
数据集涵盖的样本数为:13546
# 单位
def s(x):return x.split('(')[0]
salary['Agency'] = salary['Agency'].map(s)  # 按左括号分裂
salary['Agency'] = salary['Agency'].astype('category')
company_count = len(salary['Agency'].cat.categories)
print('数据集涵盖的单位数为:%i个'%company_count)
数据集涵盖的单位数为:67个
# 职位
salary['JobTitle'] = salary['JobTitle'].astype('category')  # 将JobTitle转为分类数据
post_count = len(salary['JobTitle'].cat.categories)
print('数据集涵盖的职位数为:%i个'%post_count)
数据集涵盖的职位数为:1034个
# 人均年薪
per_salary = salary['AnnualSalary'].sum()/number_salary
print('美国城市巴尔的摩2016年公务员人均年薪为:%.2f 美元'%per_salary)
美国城市巴尔的摩2016年公务员人均年薪为:53507.98 美元

工资总体分布情况

  • 年薪总体分布
  • 最高年薪
  • 年薪最多人数的区间
# 工资总体分布情况 --->>> 直方图描述salary['AnnualSalary'].hist(figsize=(8,6),bins=20,alpha=0.8)
plt.title('AnnualSalary',pad=12)
plt.xlabel('AnnualSalary',fontsize=12,labelpad=10)
plt.ylabel('Number of people',fontsize=12,labelpad=10)

1、从直方图的分布反映出,年薪的总体分布基本呈正态分布,但分布向左倾斜,说明美国城市巴尔的摩公务员高工资的职位还是较少。

2、其中,年薪在4-8万美元之间的公务员占大部分,最高年薪达15万美元。

工资与职位的分布情况

  • 年薪最高的职位
  • 人数最多的职位
# 职位工资分布
post_salary = salary.groupby('JobTitle').mean()['AnnualSalary'].sort_values(ascending=False).head(10)
post_salary  # 平均年薪排名前10的职位
JobTitle
STATE'S ATTORNEY              238772.0
Police Commissioner           200000.0
Executive Director V          182500.0
MAYOR                         171635.0
Executive Director III        171306.5
CITY SOLICITOR                169800.0
DIRECTOR PUBLIC WORKS         169800.0
CITY AUDITOR                  163000.0
Deputy Police Commissioner    154900.0
Executive Director I          153905.0
Name: AnnualSalary, dtype: float64
# 柱状图描述post_salary.plot(kind='bar',colormap='Blues_r',alpha=0.8,width=0.8,figsize=(12,6),rot=45,)
plt.ylim([0,300000])
plt.title('Top 10 positions with average annual salary - picture01',fontsize=14,pad=12)
plt.ylabel('Average annual salary',fontsize=12,labelpad=12)
for x,y in zip(range(len(post_salary)),post_salary):plt.text(x,y+0.5,'%.f'%y,ha='center',va='bottom',fontsize=12,)

# 职位人数分布
post_people = salary.groupby('JobTitle').count()['AgencyID'].sort_values(ascending=False).head(10)
post_people  # 人数最多的前10职位
JobTitle
POLICE OFFICER                   1756
LABORER (Hourly)                  551
EMT Firefighter Suppression       351
RECREATION ARTS INSTRUCTOR        319
OFFICE SUPPORT SPECIALIST III     303
CROSSING GUARD                    260
POLICE OFFICER (EID)              251
COMMUNITY AIDE                    245
POLICE SERGEANT                   235
SEASONAL MAINT AIDE               207
Name: AgencyID, dtype: int64
# 柱状图描述post_people.plot(kind='bar',colormap='Greens_r',alpha=0.8,width=0.8,figsize=(12,6),rot=45,)
plt.ylim([0,2000])
plt.title('Top 10 positions with the largest number of people - Picture02',fontsize=14,pad=12)for x,y in zip(range(len(post_people)),post_people):plt.text(x,y,'%.f'%y,ha='center',va='bottom',fontsize=12,)

1、如柱状图1所示,年薪最高的职位为STATE’S ATTORNEY(州检察官),其次为Police Commissioner(警察局长)和Executive Director V(执行董事)

2、如柱状图2所示,人数最多的职位为POLICE OFFICER(警务人员),其次为LABORER-Hourly(小时劳工)和EMT Firefighter Suppression(消防员)

公务员入职情况

  • 公务人员2016年入职分布情况,入职人数最多的月份
# 公务人员2016年入职分布情况
salary['month'] = salary['HireDate'].dt.month  # 添加一列月份列
salary.head()entry_month = salary.groupby('month').count()['AgencyID']
entry_month
Name JobTitle AgencyID Agency HireDate AnnualSalary GrossPay month
0 Aaron,Patricia G Facilities/Office Services II A03031 OED-Employment Dev 1979-10-24 56705.0 54135.44 10
1 Aaron,Petra L ASSISTANT STATE'S ATTORNEY A29045 States Attorneys Office 2006-09-25 75500.0 72445.87 9
2 Abbey,Emmanuel CONTRACT SERV SPEC II A40001 M-R Info Technology 2013-05-01 60060.0 59602.58 5
3 Abbott-Cole,Michelle Operations Officer III A90005 TRANS-Traffic 2014-11-28 70000.0 59517.21 11
4 Abdal-Rahim,Naim A EMT Firefighter Suppression A64120 Fire Department 2011-03-30 64365.0 74770.82 3
month
1     1097
2      946
3     1018
4      967
5     1023
6     1468
7     1198
8     1283
9     1227
10    1185
11    1099
12    1035
Name: AgencyID, dtype: int64
# 柱状图描述
entry_month.plot(kind='barh',figsize=(14,8),colormap='Oranges_r',alpha=0.8,width=0.7,)plt.title('Employment distribution of public servants in 2016',fontsize=14,pad=12)
plt.xlim([0,1800])
plt.xlabel('Number_of_people',labelpad=12)
for x,y in zip(entry_month,range(len(entry_month))):plt.text(x,y,'%.f'%x,ha='left',va='center',fontsize=12,)

# 折线图
entry_month.plot(kind='line',figsize=(10,6),colormap='Blues_r',alpha=0.8,)
plt.ylabel('Number of people',labelpad=12)
plt.title('Employment distribution of public servants in 2016',fontsize=14,pad=12)
plt.xlim([1,12])
plt.ylim([0,1800])
plt.axhline(y=entry_month.mean(),ls='--',c='r',lw=0.8,alpha=0.5,) #添加人数均值水平直线
plt.text(x=6,y=entry_month.max()+30,s=entry_month.max(),fontdict={'size':14,'color':'r'})
plt.text(x=12+0.1,y=entry_month.mean(),s=round(entry_month.mean()),fontdict={'size':14,'color':'r'})

1、入职人数在月均入职人数1129人附近上下波动。

2、入职人数最多为6月份,共入职1468人,而入职人数最少为2月,其次为4月。

总结

1、从数据集所涵盖数据中,样本数量为13546,涵盖67个单位,1034个职位的数据,样本类别分布是否均衡未知。

2、美国巴尔的摩2016年公务员人均年薪为53507.98美元,其公务员高工资的职位较少,公务员年薪普遍集中在4-8万美元之间,最高年薪达到15万美元。

3、其中年薪最高的TOP3职位分别为州检察官,警察局长和执行董事;而人数最多TOP3职位则分别为警务人员,小时劳工和EMT消防员。

4、其入职人数最多为6月份,入职人数最少为2月和4月。

美国某城市16年公务员工资集描述性分析相关推荐

  1. 中国的城市看多了,贴贴美国的城市,肯定对你的视觉产生冲击

    以下版权发展CAISHI硬道理 和版权归作者和新华网共同拥有.出处http://www.chinabbs.com/bbs/00/78882.html 现看看几张图片,详情请访问http://www.c ...

  2. 【机关事业单位工资测算系统v1.3免费版】专业公务员工资测算软件

    软件语言:简体中文 授权方式:共享软件 软件大小:1.24MB 更新时间:2013-07-27 下载次数:0 推荐星级:0 运行环境:Win2K,WinXP,Win2003,Vista,Win7 软件 ...

  3. 美国每月1-2千美元的工资怎么生活?

    知识人网老师在咨询时,经常有申请者问:去美国做公派访问学者及博士后,留学基金委(CSC)的资助够不够用?下面我们就请一位在美国读博的学生,谈谈他在美国每月1-2千美元工资的生活. 文章之前,我们先说说 ...

  4. 2022-2028全球及中国城市轨道交通信号系统行业研究深度分析报告

    报告页码 : 98 图表 : 124 受新冠肺炎疫情等影响,QYResearch调研显示,2021年全球城市轨道交通信号系统市场规模大约为 亿元(人民币),预计2028年将达到 亿元,2022-202 ...

  5. 员工每月工资数据集可视化分析

    前言 最近在学习<从零开始学Python数据分析>这本书,第六章的综合实例--巴尔的摩公务员工资数据集,原网站上数据集被清除,于是在Kaggle上寻找了相似的数据"Employe ...

  6. 2022HZWA比武题 服务器集群分析

    2022HZWA比武题 服务器集群分析 文章目录 2022HZWA比武题 服务器集群分析 仿真 server.E01 46.通过对小型集群服务器分析,该服务器系统类型是? 47.通过对小型集群服务器分 ...

  7. 工资管理系统——总体分析设计(原创文档)

    项目名称:工资管理系统 文档编号:01                                              文档名称:工资管理系统总体分析                     ...

  8. 计算机常见故障排除实验报告,会计信息系统实验报告(1-6章)实验重点问题的分析问题...

    会计信息系统实验报告(1-6章)实验重点问题的分析问题 一.系统管理和基础设置 1. 哪些操作员可以进入系统管理进行工作,在功能上有什么区别? 2.权限设置的"角色"功能有何作用? ...

  9. GSVA包进行基因集变异分析

    基因集变异分析(GSVA)是一种非参数.无监督的方法,用于通过表达数据集的样本估计基因集富集的变异.GSVA在坐标系中执行更改,将数据从逐个样本矩阵的基因转换为逐个样本矩阵的基因集,从而允许对每个样本 ...

最新文章

  1. python创建一个类似于国家象棋棋盘的0-1矩阵_NumPy练习题(全中文并附详细讲解)...
  2. 一文看懂Python(三)-----字典篇
  3. Jquery$和$$的区别
  4. EasyExcel实现读操作
  5. MongoDB 权限认证
  6. matlab dtft的函数,DTFT的Matlab矩阵计算的理解
  7. [golang]如何看懂调用堆栈
  8. 在Markdown中更改图像大小
  9. 来自微信官方:微信支付跨平台软件架构首次曝光
  10. Axure的使用---原型图
  11. [VS]网页连接数据库
  12. 什么是冲激函数、时域卷积、冲激响应以及频响曲线
  13. CISSP备考大全(完整版)
  14. 如何批量获取过期老域名
  15. 金钱找零问题,招行笔试题
  16. 开发一个最简单的iOS App
  17. nba全明星java_2018nba全明星阵容
  18. android实时视频网络传输方案总结(一共有五套)
  19. sync.Map详解
  20. 独家专访 | 获得软银巨额投资的 Mapbox,要如何为自动驾驶提供地图服务?

热门文章

  1. 配置VS Code 使其支持vue项目断点调试
  2. java rrdtool_RRDtool简体中文教程 v1.01(转载)
  3. 简单的二、十、十六进制互相转换(亲测)
  4. Python预测——多元线性回归
  5. 2021年安全员-B证-项目负责人(广东省)考试试卷及安全员-B证-项目负责人(广东省)试题及解析
  6. 健身房综合云管理项目
  7. 手写识别+.mat格式+图片转为mnist+mnist转为.mat文件
  8. 那些裸辞在家的人都怎么样了
  9. JSON 文件的数据抽取
  10. Linux 基础入门 05