Pandas进行数据预处理(标准化数据)③

news2025/4/16 15:50:56

数据标准化处理代码解析

  • 数据标准化处理代码解析
  • 课前预习
      • 1. 离差标准化(Min - Max Scaling)
      • 结果
      • 2. 标准差标准化(Standard Scaling)
      • 结果
      • 3. 小数定标标准化(Decimal Scaling)
      • 结果
    • 代码整体概述
    • 代码详细解析
      • 1. 导入必要的库
      • 2. 读取数据并进行预处理
      • 3. 离差标准化
      • 4. 标准差标准化
      • 5. 小数定标标准化
      • 结果
    • 总结

数据标准化处理代码解析

在数据分析和机器学习领域,数据标准化是一个重要的预处理步骤,它可以使不同特征的数据具有可比性,提高模型的性能。本文将详细解析一段Python代码,该代码实现了对用户每月支出数据的三种标准化方法:离差标准化、标准差标准化和小数定标标准化。

课前预习

当然可以!下面为你详细解释离差标准化、标准差标准化和小数定标标准化,并给出简单的例子。

1. 离差标准化(Min - Max Scaling)

在这里插入图片描述

离差标准化是将数据缩放到[0, 1]区间的一种方法。其公式为:
[
X_{scaled} = \frac{X - X_{min}}{X_{max} - X_{min}}
]

示例
假设有一组数据:[10, 20, 30, 40, 50]

  • 首先,找出最小值 X m i n = 10 X_{min}=10 Xmin=10和最大值 X m a x = 50 X_{max}=50 Xmax=50
  • 对于数据点10,标准化后的值为: 10 − 10 50 − 10 = 0 \frac{10 - 10}{50 - 10} = 0 50101010=0
  • 对于数据点20,标准化后的值为: 20 − 10 50 − 10 = 0.25 \frac{20 - 10}{50 - 10} = 0.25 50102010=0.25
  • 对于数据点30,标准化后的值为: 30 − 10 50 − 10 = 0.5 \frac{30 - 10}{50 - 10} = 0.5 50103010=0.5
  • 对于数据点40,标准化后的值为: 40 − 10 50 − 10 = 0.75 \frac{40 - 10}{50 - 10} = 0.75 50104010=0.75
  • 对于数据点50,标准化后的值为: 50 − 10 50 − 10 = 1 \frac{50 - 10}{50 - 10} = 1 50105010=1

以下是使用Python实现的代码:

import numpy as np

data = np.array([10, 20, 30, 40, 50])
min_val = data.min()
max_val = data.max()
scaled_data = (data - min_val) / (max_val - min_val)
print("离差标准化后的数据:", scaled_data)

结果

在这里插入图片描述

2. 标准差标准化(Standard Scaling)

在这里插入图片描述

标准差标准化是将数据转换为均值为0,标准差为1的标准正态分布。其公式为:
[
X_{scaled} = \frac{X - \mu}{\sigma}
]
其中, μ \mu μ是数据的均值, σ \sigma σ是数据的标准差。

示例
假设有一组数据:[10, 20, 30, 40, 50]

  • 首先,计算均值 μ = 10 + 20 + 30 + 40 + 50 5 = 30 \mu = \frac{10 + 20 + 30 + 40 + 50}{5} = 30 μ=510+20+30+40+50=30
  • 然后,计算标准差 σ = ( 10 − 30 ) 2 + ( 20 − 30 ) 2 + ( 30 − 30 ) 2 + ( 40 − 30 ) 2 + ( 50 − 30 ) 2 5 ≈ 14.14 \sigma=\sqrt{\frac{(10 - 30)^2+(20 - 30)^2+(30 - 30)^2+(40 - 30)^2+(50 - 30)^2}{5}}\approx14.14 σ=5(1030)2+(2030)2+(3030)2+(4030)2+(5030)2 14.14
  • 对于数据点10,标准化后的值为: 10 − 30 14.14 ≈ − 1.41 \frac{10 - 30}{14.14}\approx - 1.41 14.1410301.41
  • 对于数据点20,标准化后的值为: 20 − 30 14.14 ≈ − 0.71 \frac{20 - 30}{14.14}\approx - 0.71 14.1420300.71
  • 对于数据点30,标准化后的值为: 30 − 30 14.14 = 0 \frac{30 - 30}{14.14}=0 14.143030=0
  • 对于数据点40,标准化后的值为: 40 − 30 14.14 ≈ 0.71 \frac{40 - 30}{14.14}\approx0.71 14.1440300.71
  • 对于数据点50,标准化后的值为: 50 − 30 14.14 ≈ 1.41 \frac{50 - 30}{14.14}\approx1.41 14.1450301.41

以下是使用Python实现的代码:

import numpy as np

data = np.array([10, 20, 30, 40, 50])
mean_val = data.mean()
std_val = data.std()
scaled_data = (data - mean_val) / std_val
print("标准差标准化后的数据:", scaled_data)

结果

在这里插入图片描述

3. 小数定标标准化(Decimal Scaling)

在这里插入图片描述

小数定标标准化通过移动小数点的位置来进行数据缩放。其公式为:
[
X_{scaled} = \frac{X}{10^j}
]
其中, j j j是满足 1 0 j ≥ max ⁡ ( ∣ X ∣ ) 10^j\geq\max(|X|) 10jmax(X)的最小整数。

示例
假设有一组数据:[10, 20, 30, 40, 50]

  • 首先,找出数据的绝对值的最大值 max ⁡ ( ∣ X ∣ ) = 50 \max(|X|)=50 max(X)=50
  • 因为 1 0 2 = 100 ≥ 50 10^2 = 100\geq50 102=10050,所以 j = 2 j = 2 j=2
  • 对于数据点10,标准化后的值为: 10 1 0 2 = 0.1 \frac{10}{10^2}=0.1 10210=0.1
  • 对于数据点20,标准化后的值为: 20 1 0 2 = 0.2 \frac{20}{10^2}=0.2 10220=0.2
  • 对于数据点30,标准化后的值为: 30 1 0 2 = 0.3 \frac{30}{10^2}=0.3 10230=0.3
  • 对于数据点40,标准化后的值为: 40 1 0 2 = 0.4 \frac{40}{10^2}=0.4 10240=0.4
  • 对于数据点50,标准化后的值为: 50 1 0 2 = 0.5 \frac{50}{10^2}=0.5 10250=0.5

以下是使用Python实现的代码:

import numpy as np

data = np.array([10, 20, 30, 40, 50])
j = np.ceil(np.log10(np.abs(data).max()))
scaled_data = data / (10 ** j)
print("小数定标标准化后的数据:", scaled_data)

结果

在这里插入图片描述

这些标准化方法在数据预处理中非常有用,可以帮助提高机器学习模型的性能。

代码整体概述

代码主要使用了pandasnumpy库,从CSV文件中读取用户每月支出信息,对数据进行清洗和预处理,然后分别使用自定义的函数对每月支出数据进行三种标准化处理,并打印出标准化前后的数据。

代码详细解析

1. 导入必要的库

import pandas as pd
import numpy as np
  • 代码解释
    • import pandas as pd:导入pandas库并将其重命名为pdpandas是一个强大的数据处理和分析库,用于读取、处理和分析表格数据。
    • import numpy as np:导入numpy库并将其重命名为npnumpy是Python的一个科学计算库,提供了高效的数组操作和数学函数。

2. 读取数据并进行预处理

try:
    pay = pd.read_csv('./data/user_pay_info.csv', index_col=0)
    # 确保每月支出列是数值类型
    pay['每月支出'] = pd.to_numeric(pay['每月支出'], errors='coerce')
    pay = pay.dropna(subset=['每月支出'])
  • 代码解释
    • pd.read_csv('./data/user_pay_info.csv', index_col=0):使用pandasread_csv函数从CSV文件中读取数据,并将第一列作为索引列。
    • pd.to_numeric(pay['每月支出'], errors='coerce'):将每月支出列的数据转换为数值类型,errors='coerce'表示如果遇到无法转换的值,将其转换为NaN
    • pay.dropna(subset=['每月支出']):删除每月支出列中包含NaN值的行。

3. 离差标准化

    # 自定义离差标准化函数
    def min_max_scale(data):
        data = (data - data.min()) / (data.max() - data.min())
        return data

    # 对用户每月支出信息表的每月支出数据做离差标准化
    pay_min_max = min_max_scale(pay['每月支出'])
    print('离差标准化之前每月支出数据为:\n', pay['每月支出'].head())
    print('离差标准化之后每月支出数据为\n', pay_min_max.head())
  • 代码解释
    • min_max_scale函数:自定义的离差标准化函数,公式为 x s c a l e d = x − x m i n x m a x − x m i n x_{scaled}=\frac{x - x_{min}}{x_{max}-x_{min}} xscaled=xmaxxminxxmin,将数据缩放到[0, 1]区间。
    • min_max_scale(pay['每月支出']):调用min_max_scale函数对每月支出列的数据进行离差标准化。
    • print语句:打印离差标准化前后的每月支出数据的前几行。

4. 标准差标准化

    # 自定义标准差标准化函数
    def standard_scaler(data):
        std = data.std()
        if std == 0:
            return pd.Series([0] * len(data), index=data.index)
        data = (data - data.mean()) / std
        return data

    # 对用户每月支出信息表的每月支出数据做标准差标准化
    pay_standard = standard_scaler(pay['每月支出'])
    print('标准差标准化之前每月支出数据为:\n', pay['每月支出'].head())
    print('标准差标准化之后每月支出数据为:\n', pay_standard.head())
  • 代码解释
    • standard_scaler函数:自定义的标准差标准化函数,公式为 x s c a l e d = x − μ σ x_{scaled}=\frac{x - \mu}{\sigma} xscaled=σxμ,其中 μ \mu μ 是数据的均值, σ \sigma σ 是数据的标准差。如果标准差为0,则将所有数据置为0。
    • standard_scaler(pay['每月支出']):调用standard_scaler函数对每月支出列的数据进行标准差标准化。
    • print语句:打印标准差标准化前后的每月支出数据的前几行。

5. 小数定标标准化

    # 自定义小数定标标准化函数
    def decimal_scaler(data):
        data = data / 10 ** np.ceil(np.log10(data.abs().max()))
        return data

    # 对用户每月支出信息表的每月支出数据做小数定标标准化
    pay_decimal = decimal_scaler(pay['每月支出'])
    print('小数定标标准化之前的每月支出数据:\n', pay['每月支出'].head())
    print('小数定标标准化之后的每月支出数据:\n', pay_decimal.head())

except FileNotFoundError:
    print("错误:未找到文件,请检查文件路径。")
except Exception as e:
    print(f"发生未知错误:{e}")
  • 代码解释
    • decimal_scaler函数:自定义的小数定标标准化函数,公式为 x s c a l e d = x 1 0 j x_{scaled}=\frac{x}{10^j} xscaled=10jx,其中 j j j 是满足 1 0 j ≥ max ⁡ ( ∣ x ∣ ) 10^j \geq \max(|x|) 10jmax(x) 的最小整数。
    • decimal_scaler(pay['每月支出']):调用decimal_scaler函数对每月支出列的数据进行小数定标标准化。
    • print语句:打印小数定标标准化前后的每月支出数据的前几行。
    • except语句:捕获文件未找到错误和其他未知错误,并打印相应的错误信息。

结果

在这里插入图片描述

总结

通过本文的代码解析,我们学习了如何使用Python对数据进行三种常见的标准化处理:离差标准化、标准差标准化和小数定标标准化。读者在学习后能够掌握以下知识和技能:

  • 学会使用pandasnumpy库进行数据读取、处理和分析。
  • 理解离差标准化、标准差标准化和小数定标标准化的原理和实现方法。
  • 掌握自定义函数的编写和调用,以及异常处理的方法。

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

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

相关文章

基于uniapp 实现画板签字

直接上效果图 代码 <template><view class"container"><!-- 签名画布 --><view class"canvas-container"><canvas canvas-id"signCanvas" class"sign-canvas"touchstart"handleTouchStart"touc…

JDBC 初认识、速了解

目录 一. JDBC的简介 1. 数据的持久化 2. 什么是JDBC 二. JDBC中常用的类和接口 1. Driver 接口 2. DriverManager 类 3. Connection 接口 4. Statement 接口 5. PreparedStatement接口 6. ResultSet 接口 三. 总结 前言 从现在开始就来讲解JDBC的相关知识了 本文的…

(2025亲测可用)Chatbox多端一键配置Claude/GPT/DeepSeek-网页端配置

1. 资源准备 API Key&#xff1a;此项配置填写在一步API官网创建API令牌&#xff0c;一键直达API令牌创建页面创建API令牌步骤请参考API Key的获取和使用API Host&#xff1a;此项配置填写https://yibuapi.com/v1查看支持的模型请参考这篇教程模型在线查询 2. ChatBox网页版配…

4.vtk光照vtkLight

文章目录 VTK中的光照1. vtkLight 的两种类型&#xff1a;位置光照和方向光照2. vtkLight 的常用方法3. 方法命名风格4. vtkProp 的可见性与 vtkLight 的开关 示例 VTK中的光照 vtkLight: 用于定义一个或多个光源。每个光源可以有其颜色、位置、焦点等属性。 vtkActor: 每个vtk…

YOLOv2学习笔记

YOLOv2 背景 YOLOv2是YOLO的第二个版本&#xff0c;其目标是显著提高准确性&#xff0c;同时使其更快 相关改进&#xff1a; 添加了BN层——Batch Norm采用更高分辨率的网络进行分类主干网络的训练 Hi-res classifier去除了全连接层&#xff0c;采用卷积层进行模型的输出&a…

【YOLOv8改进 - 卷积Conv】PConv(Pinwheel-shaped Conv): 风车状卷积用于红外小目标检测, 复现!

YOLOv8目标检测创新改进与实战案例专栏 专栏目录: YOLOv8有效改进系列及项目实战目录 包含卷积,主干 注意力,检测头等创新机制 以及 各种目标检测分割项目实战案例 专栏链接: YOLOv8基础解析+创新改进+实战案例 文章目录 YOLOv8目标检测创新改进与实战案例专栏介绍摘要文章链…

Dockerfile项目实战-单阶段构建Vue2项目

单阶段构建镜像-Vue2项目 1 项目层级目录 以下是项目的基本目录结构&#xff1a; 2 Node版本 博主的Windows电脑安装了v14.18.3的node.js版本&#xff0c;所以直接使用本机电脑生成项目&#xff0c;然后拷到了 Centos 7 里面 # 查看本机node版本 node -v3 创建Vue2项目 …

Zabbix 简介+部署+对接Grafana(详细部署!!)

目录 一.Zabbix简介 1.Zabbix是什么 2.Zabbix工作原理&#xff08;重点&#xff09;​ 3.Zabbix 的架构&#xff08;重点&#xff09;​ 1.服务端 2.客户端&#xff1a; 4.Zabbix和Prometheus区别 二.Zabbix 部署 1.前期准备 2.安装zabbix软件源和组件 3.安装数据库…

Ubuntu2404装机指南

因为原来的2204升级到2404后直接嘎了&#xff0c;于是要重新装一下Ubuntu2404 Ubuntu系统下载 | Ubuntuhttps://cn.ubuntu.com/download我使用的是balenaEtcher将iso文件烧录进U盘后&#xff0c;使用u盘安装&#xff0c;默认选的英文版本&#xff0c; 安装后&#xff0c;安装…

Spring Cloud初探之使用load balance包做负载均衡(三)

一、背景说明 基于前一篇文章《Spring Cloud初探之nacos服务注册管理(二)》&#xff0c;我们已经将服务注册到nacos。接下来继续分析如何用Spring cloud的load balance做负载均衡。 load balance是客户端负载均衡组件。本质是调用方拿到所有注册的服务实例列表&#xff0c;然…

vector常用的接口和底层

一.vector的构造函数 我们都是只讲常用的。 这四个都是比较常用的。 第一个简单来看就是无参构造&#xff0c;是通过一个无参的对象来对我们的对象进行初始化的&#xff0c;第一个我们常用来当无参构造来使用。 第二个我们常用的就是通过多个相同的数字来初始化一个vector。 像…

【2025年3月中科院1区SCI】Rating entropy等级熵及5种多尺度,特征提取、故障诊断新方法!

引言 2025年3月&#xff0c;研究者在国际机械领域顶级期刊《Mechanical Systems and Signal Processing》&#xff08;JCR 1区&#xff0c;中科院1区 Top&#xff0c;IF&#xff1a;7.9&#xff09;上以“Rating entropy and its multivariate version”为题发表科学研究成果。…

【AI学习】李宏毅老师讲AI Agent摘要

在b站听了李宏毅2025最新的AI Agent教程&#xff0c;简单易懂&#xff0c;而且紧跟发展&#xff0c;有大量最新的研究进展。 教程中引用了大量论文&#xff0c;为了方便将来阅读相关论文&#xff0c;进一步深入理解&#xff0c;做了截屏纪录。 同时也做一下分享。 根据经验调整…

Nacos-Controller 2.0:使用 Nacos 高效管理你的 K8s 配置

作者&#xff1a;濯光、翼严 Kubernetes 配置管理的局限 目前&#xff0c;在 Kubernetes 集群中&#xff0c;配置管理主要通过 ConfigMap 和 Secret 来实现。这两种资源允许用户将配置信息通过环境变量或者文件等方式&#xff0c;注入到 Pod 中。尽管 Kubernetes 提供了这些强…

【BUG】Redis RDB快照持久化及写操作禁止问题排查与解决

1 问题描述 在使用Redis 的过程中&#xff0c;遇到如下报错&#xff0c;错误信息是 “MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persist on disk...”&#xff0c;记录下问题排查过程。 2 问题排查与解决 该错误提示表明&#…

java分页实例

引言 在现代Web应用和移动应用中&#xff0c;面对大量数据的展示&#xff0c;分页技术成为了提升用户体验和优化数据加载效率的关键手段。尤其是在MySQL数据库环境中&#xff0c;合理运用分页查询不仅能显著减少服务器负载&#xff0c;还能提升数据访问速度&#xff0c;为用户提…

【Linux篇】ELF文件及其加载与动态链接机制

ELF文件及其加载与动态链接机制 一. EFL文件1.1 ELF文件结构二. ELF文件形成与加载2.1 ELF形成可执行2.2 ELF控制性文件的加载2.2.1总结 三. ELF加载与进程地址空间3.1 动态链接与动态库加载3.1.1 进程如何看到动态库 3.2 全局偏移量表GOT(global offset table&#xff09;3.2.…

经典算法 判断一个图中是否有环

判断一个图中是否有环 问题描述 给一个以0 0结尾的整数对列表&#xff0c;除0 0外的每两个整数表示一条连接了这两个节点的边。假设节点编号不超过100000大于0。你只要判断由这些节点和边构成的图中是否存在环。存在输出YES&#xff0c;不存在输出NO。 输入样例1 6 8 5 3 …

AI与深度伪造技术:如何识别和防范AI生成的假视频和假音频?

引言&#xff1a;深度伪造的崛起 近年来&#xff0c;人工智能技术迅猛发展&#xff0c;其中深度伪造&#xff08;Deepfake&#xff09; 技术尤为引人注目。这项技术利用深度学习和神经网络&#xff0c;可以轻松生成高度逼真的假视频和假音频&#xff0c;使人物的面部表情、语音…

ESP32驱动读取ADXL345三轴加速度传感器实时数据

ESP32读取ADXL345三轴加速度传感器实时数据 ADXL345三轴加速度传感器简介ADXL345模块原理图与引脚说明ESP32读取ADXL345程序实验结果 ADXL345三轴加速度传感器简介 ADXL345是一款由Analog Devices公司推出的三轴数字加速度计&#xff0c;分辨率高(13位)&#xff0c;测量范围达…