首页 > 其他分享 >数学建模-数据预处理(数据清洗、标准化)

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

时间:2024-08-04 15:28:35浏览次数:16  
标签:chunk 标准化 建模 numeric import 数据 预处理 columns

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

这里我们给出一个数据预处理的办法:数据清洗(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)

实例:

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

就需要用到数据清洗

加油

标签:chunk,标准化,建模,numeric,import,数据,预处理,columns
From: https://blog.csdn.net/AuRoRamth/article/details/140906480

相关文章

  • Flask 快速搭建模板1
    快速搭建基础框架成品预览pip安装需要导入的基础包pipinstallflaskpipinstallflask-sqlalchemypipinstallflask-wtfpipinstallbootstrap-flaskpipinstallflask-loginpipinstallflask-moment创建目录结构typenul>main.pytypenul>config.pytyp......
  • 推荐3款免费且实用的数据库管理工具
    前言数据库在日常工作中确实扮演着至关重要的角色,无论是数据管理、分析还是应用开发,都离不开它的支持。今天大姚给大家分享3款免费且实用的数据库管理工具,希望可以帮助到有需要的同学。DBeaverDBeaver是一款免费的跨平台数据库工具,适用于开发人员、数据库管理员、分析师和所有......
  • 数据库读写分离和分库分表
    读写分离读写分离主要是为了将对数据库的读写操作分散到不同的数据库节点上。一般情况下,我们都会选择一主多从,也就是一台主数据库负责写,其他的从数据库负责读。主库和从库之间会进行数据同步,以保证从库中数据的准确性。这样的架构实现起来比较简单,并且也符合系统的写少读多......
  • Java常用类和数据结构与算法
    1.其他常用类1.1.Math类java.lang.Math提供了一系列静态方法用于科学计算;其方法的参数和返回值一般为double型。如果需要更加强大的数学运算能力,可以使用apachecommons下面的Math类库publicclassTestMath{publicstaticvoidmain(String[]args){S......
  • Matlab实现GAF-PCNN-MATT、GASF-CNN、GADF-CNN的多特征输入数据分类预测/故障诊断
    对于使用GAF-PCNN-MATT、GASF-CNN、GADF-CNN技术来进行多特征输入数据的分类预测或故障诊断,你可以考虑以下步骤:数据准备:准备你的多特征输入数据集,确保数据的质量和一致性。每个样本应该包含多个特征。特征提取:使用GramianAngularField(GAF)、GramianAngularSecto......
  • 什么?陶瓷也可以用来存储数据了?
    现在是一个数据指数增长的时代,根据IDC数据预测,2025年全世界将产生175ZB的数据。这里面大部分数据是不需要存储的,在2025预计每年需要存储11ZB的数据。换算个容易理解的说法,1ZB是10^18Bytes,相当于要写5556万块容量18TB的硬盘。这些存储的数据中,仅10%认为是Hot频繁访问的......
  • mysql 是否该数据列每个数据都唯一就应该设置唯一索引?
    前言比较一下唯一索引和普通索引的区别。如果有一列数据唯一,这个时候是否是就直接设置唯一索引,这样可以避免插入重复的值,来实现业务需求。那么唯一索引是如何保持唯一的呢?这个对性能是否有影响。正文数据库我们知道是增删改查。那么首先来看下这个查,唯一索引是如何查数据的......
  • django多数据库操作
    1.读写分离192.168.1.2default主数据库负责写入192.168.1.3slave从数据库负责读取2.生成数据库表pythonmanage.pymakemigrations分别迁移到主从数据库pythonmanage.pymigrate--database=defaultpythonmanage.pymigrate--database=slave多个app分......
  • 使用LangChain访问个人数据第五章-检索
    需要学习提示词工程的同学请看面向开发者的提示词工程需要学习ChatGPT的同学请查看搭建基于ChatGPT的问答系统需要学习LangChian开发的同学请查看基于LangChain开发应用程序本部分前几个章节请查看使用LangChain访问个人数据第一章-简介使用LangChain访问个人数据第......
  • Python面试题:结合Python技术,如何使用NetworkX进行复杂网络建模与分析
    NetworkX是一个用于创建、操作和研究复杂网络(图)的Python库。它提供了丰富的工具来构建、操纵和分析各种类型的图。下面是一个基本的示例,演示如何使用NetworkX进行复杂网络建模与分析。安装NetworkX首先,确保你已经安装了NetworkX。可以使用以下命令进行安装:pipinstallne......