数学建模-数据预处理(数据清洗、标准化)

news2025/1/23 7:01:22

在数学建模的比赛中,数据分析类的题目中往往我们要面对大量的数据,在给出的数据中,如果数据缺失会影响到判断和后序的操作

这里我们给出一个数据预处理的办法:数据清洗(Data Clearning):涉及到检测和纠正数据中的错误、不完整、不准确或不适用的部分,以确保数据质量和可靠性。数据清洗的主要目标是使数据集合适合于后续分析和建模工作。

原理:

  • 数据适应性:将数据调整为适合分析和建模的形式。这包括数据类型的转换、格式的统一、数据集成等操作,以确保数据能够被正确理解和使用。

  • 数据完整性:确保数据集中没有缺失重要信息的记录。处理缺失值是数据清洗中重要的一部分,可以通过填充、删除或者推断等方法来处理缺失数据,以确保分析和建模的准确性。

 

在数据清洗的过程中你可以自己判断需不需要标准化

进行数据标准化是数据预处理中的一项重要步骤,其主要目的是消除不同特征之间由于量纲不同而导致的数据差异,使得数据更加可比较和可解释。以下是进行数据标准化的主要原因:

  1. 消除量纲影响:不同特征可能由于其量纲不同(如单位、量级等)而导致数据值范围差异很大。这种差异会影响到某些基于距离或相似度计算的算法,例如K近邻算法和支持向量机等。通过标准化,可以将不同特征的值都缩放到相似的范围内,避免某些特征对距离计算的影响过大。

  2. 提高模型收敛速度和性能:在使用基于梯度的优化算法(如梯度下降法)训练模型时,特征的值范围如果差异很大,可能会导致优化过程变得缓慢,甚至难以收敛。通过标准化,可以加快优化算法的收敛速度,提高模型训练的效率和性能。

  3. 增强特征的可解释性:标准化后,所有特征都具有相似的尺度和分布,这使得特征的权重更容易解释。在某些模型(如线性回归)中,特征的权重直接反映了其对输出的影响程度,标准化可以确保权重的解释更为准确和可靠。

  4. 改善数据分布的对称性:某些机器学习模型(如逻辑回归、支持向量机等)要求特征服从某种特定的分布,例如服从正态分布。标准化可以使得数据更接近正态分布,有助于提升模型的表现。

  5. 增强模型的稳定性:标准化可以减少数据中的噪声和异常值对模型的影响,提升模型的稳定性和泛化能力。

py代码模板:

# -*- coding: utf-8 -*-
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from multiprocessing import Pool, cpu_count  # 多进程处理
from sklearn.preprocessing import StandardScaler  # 导入标准化器

# 1. 加载数据(分块读取)
def load_large_data(csv_file, chunksize):
    """
    分块读取大型 CSV 文件,并返回一个生成器对象。
    """
    reader = pd.read_csv(csv_file, chunksize=chunksize)
    return reader

# 2. 处理缺失值
def handle_missing_values(chunk):
    """
    处理缺失值,用均值填充数值型列的缺失值。
    """
    numeric_columns = chunk.select_dtypes(include=[np.number]).columns.tolist()
    chunk[numeric_columns] = chunk[numeric_columns].fillna(chunk[numeric_columns].mean())
    return chunk

# 3. 标准化数据(根据数据判断需不需要)
# def standardize_data(chunk):
#     """
#     使用 Z-score 标准化对数值型特征进行标准化处理。
#     """
#     numeric_columns = chunk.select_dtypes(include=[np.number]).columns.tolist()
#     scaler = StandardScaler()
#     chunk[numeric_columns] = scaler.fit_transform(chunk[numeric_columns])
#     return chunk

# 4. 处理异常值
def handle_outliers(chunk):
    """
    使用 IQR 方法处理异常值。
    """
    for column in chunk.columns:
        if pd.api.types.is_numeric_dtype(chunk[column]):
            Q1 = chunk[column].quantile(0.25)
            Q3 = chunk[column].quantile(0.75)
            IQR = Q3 - Q1
            lower_bound = Q1 - 1.5 * IQR
            upper_bound = Q3 + 1.5 * IQR
            chunk = chunk[(chunk[column] >= lower_bound) & (chunk[column] <= upper_bound)]
    return chunk

# 5. 保存处理后的数据
def save_processed_data(processed_data, output_file):
    """
    将处理后的数据保存为 CSV 文件。
    """
    pd.concat(processed_data).to_csv(output_file, index=False)
    print(f"Processed data saved to {output_file}")

# 主程序
if __name__ == "__main__":
    # 读取大型数据集,每次读取的行数
    input_file = '问题一数据(未处理).csv'  # 替换为你的输入文件路径
    chunksize = 1000  # 每次读取的行数,根据实际情况调整
    reader = load_large_data(input_file, chunksize)

    # 多进程处理数据
    pool = Pool(cpu_count())  # 使用 CPU 核心数作为进程数
    processed_chunks = pool.map(handle_missing_values, reader)
    pool.close()
    pool.join()

    # 标准化数据
    #根据数据判断需要需要进行标准化
    # processed_chunks = [standardize_data(chunk) for chunk in processed_chunks]

    # 处理异常值
    processed_chunks = [handle_outliers(chunk) for chunk in processed_chunks]

    # 保存处理后的数据
    output_file = 'processed_data.csv'  # 替换为你的输出文件路径
    save_processed_data(processed_chunks, output_file)

实例:

在这个比赛当中的第一问:

就需要用到数据清洗

加油

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

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

相关文章

良心推荐——揭秘10款文件加密软件!(小编真心推荐!好用!)

文件加密不仅能够有效防止敏感数据被非法获取或篡改&#xff0c;还能在数据丢失或被盗时降低损失。 因此&#xff0c;选择一款高效、可靠的文件加密软件成为了企业保障信息安全不可或缺的一环。 今天&#xff0c;小编就为大家揭秘10款良心推荐的文件加密软件&#xff0c;其中首…

BurpSuite教程——渗透测试第一关:BP工具使用

想要学好网络渗透&#xff0c;了解并熟练使用渗透工具是重要的一关。 Burp Suite 是一款广泛使用的网络安全工具&#xff0c;主要用于测试Web应用程序的安全性。它提供了一系列的功能&#xff0c;帮助安全专家和渗透测试人员发现和利用Web应用程序中的安全漏洞。 目录 一、前…

JetBrains GoLand单元测试不支持单个单元测试case执行

譬如函数代码 func AddInt(a, b int32) int32 {return a b } 单元测试代码&#xff1a; func TestAddInt(t *testing.T) {type args struct {a int32b int32}tests : []struct {name stringargs argswant int32}{{name: "add",args: args{a: 1, b: 2},want: 3},{n…

安卓自定义控件

文章目录 引入布局创建自定义控件 引入布局 首先创建一个项目&#xff0c;创建一个空的活动。然后右键单击res/layout创建一个Layout Resource File文件&#xff0c;取名title.xml。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmln…

【Android Studio】彻底卸载

文章目录 卸载程序控制面板卸载安全软件卸载 删除文件重启计算机 我们在Android开发时涉及重装时&#xff0c;如果卸载不干净&#xff0c;再次安装是不会正常运行项目的&#xff0c;接下来就让我教你如何删除干净吧。 卸载程序 控制面板卸载 control控制面板一>程序一>…

算法通关:016:设计循环双端队列

文章目录 题目思路代码运行结果问题为什么能直接调用方法名 题目 leetcode641 设计循环双端队列 思路 代码 import java.util.Deque; import java.util.LinkedList;/*** Author: ggdpzhk* CreateTime: 2024-08-03* 641 双端队列&#xff1a;利用双向链表和动态数组实现*/ pu…

百款HTML5小游戏源码搭建的网站,轻松为你的小程序或网站增加流量!

百款HTML5小游戏源码搭建的网站&#xff0c;轻松为你的小程序或网站增加流量&#xff01; 访问链接&#xff1a;http://43.139.69.156/game/80h5/index.html 需要源码可以看主页介绍 &#x1f680;&#x1f31f; 引爆你的创意&#xff01;100款HTML5小游戏源码大公开&#xff…

kettle从入门到精通 第八十三课 ETL之kettle kettle调用python且接收返回值

场景&#xff1a;kettle调用python执行脚本&#xff0c;处理之后&#xff0c;再把结果数据流发给下一个步骤。 看到有个qq群里有个小伙伴求助要实现kettle调用python脚本&#xff0c;然后接收python脚本执行的结果&#xff0c;最后将结果传递到下一个步骤。之前的课程里面介绍的…

bugku-web-xxx二手交易市场

打开题目&#xff0c;点击进入链接&#xff0c;是一个二手交易市场平台 先登录看看 评论了两下&#xff0c;发现<>被注释 对注释字符进行了过滤&#xff0c;无法闭合&#xff0c;sql注入点不存在 看看头像上传&#xff0c;上传文件&#xff0c;抓包 看到后面好长一串…

(001)mysql全接触

1. MySQL 如何优化SQL查询语句? 正确回答通过率&#xff1a;73.0%[ 详情 ] 推荐指数&#xff1a; ★★★★ 试题难度&#xff1a; 中级 建议性操作方案如下&#xff1a; 1&#xff1a;避免全表扫描 考虑在 where 和 order by 涉及的列上建立索引&#xff0c;in 和 not in 也…

ShardingSphere 之ShardingJDBC扩展功能:分片审计、数据加密、读写分离、广播表、绑定表

文章目录 分片审计数据加密读写分离广播表绑定表 分片审计 开发者手册 分片审计功能是针对数据库分片场景下对执行的 SQL 语句进行审计操作。可以对我们要执行的sql进行拦截并进行审核。 目前ShardingSphere内置的分片审计算法只有一个&#xff0c;DML_SHARDING_CONDITIONS。…

教您一键批量下载拼多多批发图片信息,节省时间

图片是电商的核心展示手段&#xff0c;高质量、吸引人的图片能显著提升商品吸引力&#xff0c;增强用户体验&#xff0c;促进购买决策。良好的视觉呈现有助于品牌形象的塑造&#xff0c;提高转化率和客户满意度&#xff0c;对电商平台的流量和销售业绩具有直接影响。 使用图快…

InnoDB锁机制

目录 第一节&#xff1a;锁的基本概念 1. 锁的定义与作用 2. Lock与Latch的区别 3. 锁的占有模式 4. 锁的类型 图文结合示例 Lock与Latch对比图 锁的占有模式兼容性图 锁的类型层次图 第二节&#xff1a;事务隔离级别与MVCC 事务隔离级别 MVCC&#xff08;多版本并发…

《机器人SLAM导航核心技术与实战》第1季:第8章_激光SLAM系统

视频讲解 【第1季】8.第8章_激光SLAM系统-视频讲解【第1季】8.1.第8章_激光SLAM系统_Gmapping算法-视频讲解【第1季】8.2.第8章_激光SLAM系统_Cartographer算法-视频讲解【第1季】8.3.第8章_激光SLAM系统_LOAM算法-视频讲解 第1季&#xff1a;第8章_激光SLAM系统 先 导 课第…

用2点结构标定3点结构的顺序

在行列可自由变换的平面上2点结构只有3个 (A,B)---6*30*2---(0,1)(1,0) 让A分别是2a1&#xff0c;2&#xff0c;3&#xff0c;让B全是0。当收敛误差为7e-4&#xff0c;收敛199次取迭代次数平均值&#xff0c;得到 结构 迭代次数 2a1 58742.717 1.00001 2a2 80796.605 1…

如何在uniapp上隐藏默认导航栏

当要定义导航栏&#xff0c;使用uni.switchTab来跳转页面时&#xff0c;需要将默认的导航栏进行隐藏。 比如使用 uni.hideTabBar(); 去隐藏的话&#xff0c;可能会有闪现出现的可能性。 我们可以在package.json当中的 tabBar加"custom": true。例: "tabBar&q…

【TS】TypeScript类型断言:掌握类型转换的艺术

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 TypeScript类型断言&#xff1a;掌握类型转换的艺术1. 引言2. 什么是类型断言&a…

基于特性价值来确认测试重点

目录 核心特性&#xff1a; 潜力特性&#xff1a; 噱头特性&#xff1a; 辅助特性&#xff1a; 无人问津的特性&#xff1a; 测试重点的确立&#xff1a; 软件的特性包含如下几种&#xff0c;核心特性&#xff0c;潜力特性&#xff0c;噱头特性&#xff0c;无人问津特性&…

Project Euler_Problem 277_A Modified Collatz Sequence

原题目&#xff1a; 题目大意&#xff1a; 一串字母可以视作迭代过程中每一轮除3余多少&#xff0c;问最小的大于1e15的满足那串序列的数是多大 解题思路&#xff1a;可以把那一大串字母&#xff0c;看作是不停地对初始数值x做连续运算&#xff0c;且每一轮运算的结果都应当是…

03:【stm32】GPIO

GPIO 1、芯片的引脚分布2、IO复用与重映射3、片上外设GPIO3.1、GPIO的寄存器组3.2、8种工作模式3.3、最大输出速度3.4、GPIO的内部结构 1、芯片的引脚分布 STM32F103C8T6这款芯片一共有48个引脚&#xff0c;他们分为了特殊功能引脚和普通的IO引脚。其中特殊功能的引脚有如下几个…