在数学建模的比赛中,数据分析类的题目中往往我们要面对大量的数据,在给出的数据中,如果数据缺失会影响到判断和后序的操作
这里我们给出一个数据预处理的办法:数据清洗(Data Clearning):涉及到检测和纠正数据中的错误、不完整、不准确或不适用的部分,以确保数据质量和可靠性。数据清洗的主要目标是使数据集合适合于后续分析和建模工作。
原理:
-
数据适应性:将数据调整为适合分析和建模的形式。这包括数据类型的转换、格式的统一、数据集成等操作,以确保数据能够被正确理解和使用。
-
数据完整性:确保数据集中没有缺失重要信息的记录。处理缺失值是数据清洗中重要的一部分,可以通过填充、删除或者推断等方法来处理缺失数据,以确保分析和建模的准确性。
在数据清洗的过程中你可以自己判断需不需要标准化
进行数据标准化是数据预处理中的一项重要步骤,其主要目的是消除不同特征之间由于量纲不同而导致的数据差异,使得数据更加可比较和可解释。以下是进行数据标准化的主要原因:
-
消除量纲影响:不同特征可能由于其量纲不同(如单位、量级等)而导致数据值范围差异很大。这种差异会影响到某些基于距离或相似度计算的算法,例如K近邻算法和支持向量机等。通过标准化,可以将不同特征的值都缩放到相似的范围内,避免某些特征对距离计算的影响过大。
-
提高模型收敛速度和性能:在使用基于梯度的优化算法(如梯度下降法)训练模型时,特征的值范围如果差异很大,可能会导致优化过程变得缓慢,甚至难以收敛。通过标准化,可以加快优化算法的收敛速度,提高模型训练的效率和性能。
-
增强特征的可解释性:标准化后,所有特征都具有相似的尺度和分布,这使得特征的权重更容易解释。在某些模型(如线性回归)中,特征的权重直接反映了其对输出的影响程度,标准化可以确保权重的解释更为准确和可靠。
-
改善数据分布的对称性:某些机器学习模型(如逻辑回归、支持向量机等)要求特征服从某种特定的分布,例如服从正态分布。标准化可以使得数据更接近正态分布,有助于提升模型的表现。
-
增强模型的稳定性:标准化可以减少数据中的噪声和异常值对模型的影响,提升模型的稳定性和泛化能力。
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