数据的4个等级

除了可以将数据分为定量和定性的,数据还可以分为以下4个等级,每个等级都有不同的控制和数学操作等级;
定类等级(nominal level)
定序等级(ordinal level)
定距等级(interval level)
定比等级(ratio level)

定类等级是数据的第一个等级,其结构最弱。这个等级的数据只按名称分类。例如,血型(A、B、O和AB型)、动物物种和人名。这些数据都是定性的。

在这个等级上,虽然不能执行任何定量数学操作(例如加法或除法),但是我们可以用Pandas的value_counts方法进行计数;

print(salary_ranges['Grade'].value_counts())# Grade
# 0        61
# 7450     12
# 6870      9
# 7420      9
# 7170      9
#          ..
# 4310F     1
# 1063F     1
# 4290F     1
# 4267F     1
# 6465      1
# Name: count, Length: 688, dtype: int64

我们可以在定类等级上进行计数,因此可以绘制图表(如条形图)

import pandas as pd
import matplotlib.pyplot as pltsalary_ranges = pd.read_csv('./data/Salary_Ranges_by_Job_Classification.csv')
salary_ranges['Grade'].value_counts().sort_values(ascending=False).head(20).plot(kind = 'bar')
plt.show()

定序等级继承了定类等级的所有属性,同时具有以下重要附加属性:
定序等级的数据可以自然排序;
可以认为列中的某些数据比其他数据更好或更大。

和定类等级一样,定序等级的天然数据属性仍然是类别;

在定序等级,我们可以像定类等级那样进行计数,也可以引入比较和排序。因此,可以使用新的图表了。不仅可以继续使用条形图和饼图,而且因为能排序和比较,所以能计算中位数和百分位数。对于中位数和百分位数,我们可以绘制茎叶图和箱线图。

我们引入一个新的数据集来解释定序等级的数据。这个数据集表示多少人喜欢旧金山国际机场(IATA代码:SFO);可以看到数据集有3535行,每行有95个字段的数据;其中有一个定序字段是Q7A_ART,它有0-6七个数字值;

customer = pd.read_csv('./data/2013_SFO_Customer_survey.csv')
print(customer.shape)
print(customer['Q7A_ART'].value_counts().sort_values())# (3535, 95)
# Q7A_ART
# 1      20
# 2      71
# 0     100
# 3     696
# 6     779
# 5     803
# 4    1066
# Name: count, dtype: int64

pandas默认会将Q7A_ART视为普通的数字字段;

art_ratings = customer['Q7A_ART']
print(art_ratings.describe())
# count    3535.000000
# mean        4.300707
# std         1.341445
# min         0.000000
# 25%         3.000000
# 50%         4.000000
# 75%         5.000000
# max         6.000000
# Name: Q7A_ART, dtype: float64

Pandas把这个列当作数值处理了,因为这个列充满数。然而我们需要知道,虽然这些值是数,但每个数其实代表的是类别,所以该数据是定性的,更具体地说,是属于定序等级。如果删除0和6这两个类别,剩下的5个有序类别类似于餐厅的评分

art_ratings = art_ratings[(art_ratings >=1) & (art_ratings <=5)]
art_ratings = art_ratings.astype(str)
print(art_ratings.describe())
# count     2656
# unique       5
# top          4
# freq      1066
# Name: Q7A_ART, dtype: object

定序等级除了可以可视化数据为饼图、条形图之外,还可以可视化为箱线图;

art_ratings.value_counts().plot(kind='pie')
plt.show()art_ratings.value_counts().plot(kind='bar')
plt.show()art_ratings.value_counts().plot(kind='box')
plt.show()

在定距等级,数值数据不仅可以像定序等级的数据一样排序,而且值之间的差异也有意义。这意味着,在定距等级,我们不仅可以对值进行排序和比较,而且可以加减。

在定距等级上可以进行加减,这改变了整个游戏规则。既然可以把值加在一起,就能引入两个熟悉的概念:算术平均数(就是均值)和标准差。

我们引入新的数据集,这个数据集有860万行,每行代表某个城市某月的平均温度,上溯到18世纪。

pd.options.display.max_columns = None
pd.set_option('expand_frame_repr', False)
climate = pd.read_csv('./data/GlobalLandTemperaturesByCity.csv')
print(climate.head())
#            dt  AverageTemperature  AverageTemperatureUncertainty   City  Country Latitude Longitude
# 0  1743-11-01               6.068                          1.737  Århus  Denmark   57.05N    10.33E
# 1  1743-12-01                 NaN                            NaN  Århus  Denmark   57.05N    10.33E
# 2  1744-01-01                 NaN                            NaN  Århus  Denmark   57.05N    10.33E
# 3  1744-02-01                 NaN                            NaN  Århus  Denmark   57.05N    10.33E
# 4  1744-03-01                 NaN                            NaN  Århus  Denmark   57.05N    10.33E

删除有缺失值的记录

print(climate.info())climate.dropna(axis= 0 , inplace=True)
print(climate.info())# <class 'pandas.core.frame.DataFrame'>
# RangeIndex: 8599212 entries, 0 to 8599211
# Data columns (total 7 columns):
#  #   Column                         Dtype
# ---  ------                         -----
#  0   dt                             object
#  1   AverageTemperature             float64
#  2   AverageTemperatureUncertainty  float64
#  3   City                           object
#  4   Country                        object
#  5   Latitude                       object
#  6   Longitude                      object
# dtypes: float64(2), object(5)
# memory usage: 459.2+ MB
# None
# <class 'pandas.core.frame.DataFrame'>
# Index: 8235082 entries, 0 to 8599210
# Data columns (total 7 columns):
#  #   Column                         Dtype
# ---  ------                         -----
#  0   dt                             object
#  1   AverageTemperature             float64
#  2   AverageTemperatureUncertainty  float64
#  3   City                           object
#  4   Country                        object
#  5   Latitude                       object
#  6   Longitude                      object
# dtypes: float64(2), object(5)
# memory usage: 502.6+ MB
# None
#
# Process finished with exit code 0print(climate.isnull().sum())
# dt                               0
# AverageTemperature               0
# AverageTemperatureUncertainty    0
# City                             0
# Country                          0
# Latitude                         0
# Longitude                        0
# dtype: int64

AverageTemperature的不同值太多,无法像定序等级那样可视化饼图和条形图;

print(climate['AverageTemperature'].nunique())
# 103481

这个级别开始,最常用的图是直方图。直方图是条形图的“近亲”,用不同的桶包含不同的数据,对数据的频率进行可视化。

climate['AverageTemperature'].hist()
plt.show()

查看美国各个世纪的平均气温

climate['dt'] = pd.to_datetime(climate['dt'])
climate['year'] = climate['dt'].map(lambda value:value.year)climate_sub_us = climate.loc[climate['Country'] == 'United States']
climate_sub_us['century'] = climate_sub_us['year'].map(lambda value:int(value/100 + 1))
climate_sub_us['AverageTemperature'].hist(by=climate_sub_us['century'], sharex=True, sharey=True, figsize=(10,10), bins=20)
plt.show()

通过直线图也可以查看对应的平均气温变化;

climate['dt'] = pd.to_datetime(climate['dt'])
climate['year'] = climate['dt'].map(lambda value:value.year)climate_sub_us = climate.loc[climate['Country'] == 'United States']
climate_sub_us['century'] = climate_sub_us['year'].map(lambda value:int(value/100 + 1))
climate_sub_us.groupby('century')['AverageTemperature'].mean().plot(kind = 'line')
plt.show()

因为差值在这个等级是有意义的,所以我们可以回答美国从18世纪至今平均温度上升多少这个问题

climate['dt'] = pd.to_datetime(climate['dt'])
climate['year'] = climate['dt'].map(lambda value:value.year)climate_sub_us = climate.loc[climate['Country'] == 'United States']
climate_sub_us['century'] = climate_sub_us['year'].map(lambda value:int(value/100 + 1))
century_changes = climate_sub_us.groupby('century')['AverageTemperature'].mean()
print(century_changes)
print(century_changes[21] - century_changes[18])
# century
# 18    12.073243
# 19    13.662870
# 20    14.386622
# 21    15.197692
# Name: AverageTemperature, dtype: float64
# 3.124449115460898

定距及更高等级的一大好处是,我们可以使用散点图:在两个轴上绘制两列数据,将数据点可视化为图像中真正的点。在气候变化数据集中,year和averageTemperature列都属于定距等级,因为它们的差值是有意义的。

x = climate_sub_us['year']
y = climate_sub_us['AverageTemperature']
fig, ax = plt.subplots(figsize=(10, 5))
ax.scatter(x, y)
plt.show()

和预期一样,里面有很多噪声。考虑到每年每个城镇都会报告好几个平均气温,在图上每年有很多点也是理所应当的。我们用groupby清除年份的大部分噪声:

x = climate_sub_us['year'].unique()
y = climate_sub_us.groupby('year')['AverageTemperature'].mean()
fig, ax = plt.subplots(figsize=(10, 5))
ax.scatter(x, y)
plt.show()

对于等比等级,我们拥有最高程度的控制和数学运算能力。和定距等级一样,我们在定比等级上处理的也是定量数据。这里不仅继承了定距等级的加减运算,而且有了一个绝对零点的概念,可以做乘除运算。

通过旧金山的工资数据,可以看到Biweekly High Rate列处于定比等级,我们可以看一下最高的工资

fig = plt.figure(figsize=(15, 5))
ax = fig.gca()salary_ranges.groupby('Grade')[['BiweeklyHighRate']].mean().sort_values('BiweeklyHighRate', ascending=False).head(20).plot.bar(stacked=False, ax=ax,color='darkorange')
ax.set_title('Top 20 Grade by Mean Biweekly High Rate')
plt.show()

我们用同样的办法查看工资最低的工作;

fig = plt.figure(figsize=(15, 5))
ax = fig.gca()salary_ranges.groupby('Grade')[['BiweeklyHighRate']].mean().sort_values('BiweeklyHighRate', ascending=False).tail(20).plot.bar(stacked=False, ax=ax,color='darkorange')
ax.set_title('Bottom 20 Grade by Mean Biweekly High Rate')
plt.show()

我们可以计算最高工资和最低工资的比值;

sorted_df = salary_ranges.groupby('Grade')[['BiweeklyHighRate']].mean().sort_values('BiweeklyHighRate', ascending=False)
print(sorted_df.iloc[0][0]/sorted_df.iloc[-1][0])
# 13.931919540229886

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

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

相关文章

【CVPR 2023】解读VideoFusion:基于噪声共享机制的视频生成

Diffusion Models视频生成-博客汇总 前言:达摩院开源的VideoFusion是为数不多同时开源模型和推理代码的视频生成工作,通过设计噪声分解机制有效提高视频的时空连贯性,在一些关键指标上远超GAN-based方法和2022年谷歌的VDM。更重要的是,Diffusers库以此为基础,写了关键的两…

同时创建多个websoket(初始化多个连接、断开的重连、每个连接定时发消息、每个连接存储接收的数据(vuex或者pinia))

可复制现成代码直接使用&#xff01;&#xff01; 1.下边的例子演示了创建10个WebSocket 实例&#xff0c;当其中某一个连接失败时&#xff0c;会自动进行重连 <template><div></div> </template><script setup> import { ref, reactive, onMo…

ssh和scp的基本使用

ssh和scp的基本使用 1&#xff0c;ssh 本地连接远程服务器 ssh userhostname第一次连接时输入密码会生成密钥&#xff0c;后续就可以直接连接了 ssh配置文件&#xff1a;/etc/ssh/sshd_config 2&#xff0c;scp 传输本地文件至远程服务器 命令格式 scp [参数] [原路径] […

求二叉树的最大密度(可运行)

最大密度&#xff1a;二叉树节点数值的最大值 如果没有输出结果&#xff0c;一定是建树错误&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 我设置输入的是字符型数据&#xff0c;比较的ASCII值。 输入&#xff1a;FBE###CE### 输…

基于单片机设计的气压与海拔高度检测计(采用MPL3115A2芯片实现)

一、前言 随着科技的不断发展&#xff0c;在许多领域中&#xff0c;对气压与海拔高度的测量变得越来越重要。例如&#xff0c;对于航空和航天工业、气象预报、气候研究等领域&#xff0c;都需要高精度、可靠的气压与海拔高度检测装置。针对这一需求&#xff0c;基于单片机设计…

19.删除链表的倒数第 N 个节点

​题目来源&#xff1a; leetcode题目&#xff0c;网址&#xff1a;19. 删除链表的倒数第 N 个结点 - 力扣&#xff08;LeetCode&#xff09; 解题思路&#xff1a; 使用双指针找到倒数第 N1 个节点后删除链表的第 N 个节点即可。注意当 N 为链表长度时&#xff0c;倒数第 N1 …

Google Play 搜索不到应用

Google Play搜索不到已上架应用 这可能是由于多种原因造成的。首先&#xff0c;请确保你的应用在 Google Play 商店上已经成功上架&#xff0c;并且通过了审核。 如果你的应用已经上架&#xff0c;但在搜索时无法找到&#xff0c;可能有以下一些原因&#xff1a; 「1.索引延迟…

wpf devexpress实现输入验证使用验证规则

打开此项目 目标是一个registration form行为像google registration form。打开Google registration form 研究它的行为。当form是第一次显示&#xff0c;它的“Register”按钮应该启动&#xff1b;编辑器没有提示任何输入错误。输入First Name编辑器字段&#xff0c;清理输入…

端到端数据保护浅析

作为最重要的数据保护方式之一&#xff0c;NVMe端到端数据保护被众多企业用户所看重&#xff0c;它可以有效降低静默错误的发生&#xff0c;保护范围涵盖数据自Host端生成直至写入SSD NAND当中&#xff0c;以及从SSD NAND读取直至返回Host的全部流程。它使得数据不论是在SSD内部…

服务器安全怎么保障,主机安全软件提供一站式保护

服务器主机安全是指保护服务器主机免受未经授权的访问、破坏、窃取或滥用。 现在如今大部分公司、单位的相关数据都是存储在云端服务器上&#xff0c;这样即方便查询也方便保存。 可是一旦服务器主机受到威胁&#xff0c;损失将会不可估计。 以下是一些服务器主机安全的建议…

支付宝生僻字选择器

本文的数据来源于支付宝网页版本生僻字选择器。 let rareWords[{spell: "a",words: ["奡", "靉", "叆"]}, {spell: "b",words: ["仌", "昺", "竝", "霦", "犇", "愊…

粒子系统three.js

Three.js是一个非常流行的JavaScript 3D库&#xff0c;它提供了许多强大的功能来创建各种3D场景和动画效果。其中粒子系统是Three.js中非常重要的一部分&#xff0c;它可以用于创建各种特效&#xff0c;如火焰、烟雾、雨雪等等。本文将详细讲解Three.js中粒子系统的使用。 1. …

MySQL数据库——存储过程-条件处理程序(通过SQLSTATE指定具体的状态码,通过SQLSTATE的代码简写方式 NOT FOUND)

目录 介绍 案例 通过SQLSTATE指定具体的状态码 通过SQLSTATE的代码简写方式 NOT FOUND 介绍 条件处理程序&#xff08;Handler&#xff09;可以用来定义在流程控制结构执行过程中遇到问题时相应的处理步骤。具体语法为&#xff1a; DECLARE handler_action HANDLER FOR c…

Linux调度域与调度组

引入调度域的讨论可以参考这篇文章。这篇笔记重点分析了内核调度域相关的数据结构以及内核用于构建调度域的代码实现&#xff0c;以此来加深对调度域的理解。调度域是调度器进行负载均衡的基础。 调度域拓扑层级 整个系统的调度域组成一个层级结构&#xff0c;内核设计了stru…

上海亚商投顾:沪指冲高回落 短剧、地产股集体走强

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 三大指数早盘冲高&#xff0c;创业板指盘初涨超1%&#xff0c;午后则集体下行翻绿&#xff0c;北证50一度大涨…

MyBatis:关联查询

MyBatis 前言关联查询附懒加载对象为集合时的关联查询 前言 在 MyBatis&#xff1a;配置文件 文章中&#xff0c;最后介绍了可以使用 select 标签的 resultMap 属性实现关联查询&#xff0c;下面简单示例 关联查询 首先&#xff0c;先创建 association_role 和 association_…

【nacos】Java调用nacos SDK获取配置信息为null

通过 Nacos 提供的 Java 客户端 SDK 来获取配置信息&#xff0c;但是结果是null <!--添加maven依赖 --> <dependency><groupId>com.alibaba.nacos</groupId><artifactId>nacos-client</artifactId><version>2.1.2</version> …

【华为OD机试python】告警抑制【2023 B卷|100分】

【华为OD机试】-真题 !!点这里!! 【华为OD机试】真题考点分类 !!点这里 !! 题目描述 告警抑制,是指高优先级告警抑制低优先级告警的规则。高优先级告警产生后, 低优先级告警不再产生。请根据原始告警列表和告警抑制关系,给出实际产生的告警列表。 不会出现循环抑制的情况…

Postgresql常用命令函数

1、string_agg()函数 1.1用法: string_agg(expression, delimiter)&#xff0c;参数类型(text, text) or (bytea, bytea)&#xff0c;返回类型和参数类型一致,第一个参数是字段名&#xff0c;第二个参数是样式&#xff0c;比如&#xff0c;或者#分隔。 1.2实战: SELECT * FR…

深入解析数据结构与算法之堆

文章目录 &#x1f966;引言&#xff1a;&#x1f966;什么是堆&#x1f966;大顶堆与小顶堆&#x1f9c4;大顶堆&#xff08;Max Heap&#xff09;&#x1f9c4;小顶堆&#xff08;Min Heap&#xff09; &#x1f966;堆的表示&#x1f9c4;数组表示&#xff1a;&#x1f9c4;…