返回顶部
首页 > 资讯 > 后端开发 > Python >数据预处理方法整理(数学建模)
  • 465
分享到

数据预处理方法整理(数学建模)

python数据分析机器学习深度学习cnn 2023-09-10 09:09:19 465人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章主要是整理了一些作者在各种建模比赛中遇到的数据预处理问题以及方法,主要针对excel或csv格式的数据,为后续进行机器学习或深度学习做前期准备 数据清洗 导入库和文件,这里使用的是绝对路径,可改为相对路径 import pandas

这篇文章主要是整理了一些作者在各种建模比赛中遇到的数据预处理问题以及方法,主要针对excel或csv格式的数据,为后续进行机器学习深度学习做前期准备

数据清洗

导入库和文件,这里使用的是绝对路径,可改为相对路径

import pandas as pdimport numpy as npimport matplotlib.pyplot as plt# 读取xls数据文件data = pd.read_csv(r'D:\1112222.csv',encoding='gbk')

传入的为csv格式的文件,如果是xlsx格式的文件,建议先使用excel另存为csv结尾格式的文件再进行操作,选择下图所示选项:

合并多个文件数据

可能同时存在多个csv文件,需要进行合并

import glob,osfilenames_in = r'D:\in'  # 输入文件的文件地址filenames_out = r'D:\inner'  # 新文件的地址path_in  = r'D:\in'file_names = os.listdir(path_in)file_paths = glob.glob(os.path.join(path_in,'*.csv'))print(file_paths) df1 = pd.DataFrame()for file in file_paths:    df2 = pd.read_csv(file,sep=',',header=None)    #df2=df2.iloc[:,2]  #只取第三列    df1 = pd.concat([df1, df2], axis=0)      #axis=0意思是纵向拼接,=1的时候是横向拼接print('dataframe的维度是:', df1.shape)#print(df1)# 输出数据到本地df1.to_csv(r'D:\inner\result.csv', index=False, sep=',')

填补缺失值

对于数字类型的数据,用均值填补空值;对于字符类型的数据,用众数填补空值

def fill_missing_values(df):    """用DataFrame中各列的均值或众数来填补空值"""    for column in df:        if df[column].dtype == np.number:  # 如果数据是数字类型            mean = df[column].mean()            df[column].fillna(mean, inplace=True)  # 用均值填补空值        else:  # 如果数据不是数字类型            mode = df[column].mode().iloc[0]  # 找到最频繁出现的项            df[column].fillna(mode, inplace=True)  # 用众数填补空值    return dfdata=fill_missing_values(data)

去除数据中的符号

对于有些数据,可能含有空格、中英文标点,需要进行去除

import stringfrom zhon.hanzi import punctuationpunctuation_string = string.punctuationfor i in punctuation_string:    data= data.replace(i, '')punctuation_str = punctuationfor i in punctuation_str:    data = data.replace(i, '')

当然,如果遇到这种数据,我会更建议使用excel自带的功能进行手动去除,比调代码更快(毕竟有时候可能调代码半天手动早就做好了)

如图,c列是一列数据前面有空格的数据,这时我们只需要在c列后插入新的一列,并在第一行中输入c列无空格的数据

输入好后,直接快捷键CTRL+E,即可自动将D列填充为去除空格后的数据(注意要确保此时其他数据没有别的空缺,否则会把别的空缺也自动填充上)

 四万个数据不到一秒就全部填充好了,速度还是比较快的。然后直接把c列删除即可。

如果是数据中包含特殊字符,想去除也可以用这个方法,只是对某几列做操作时,比调代码快。

去除冗余数据

有些数据,可能一整列都是同一个数据,没有变化,这些变量对机器学习没有帮助,但因为数据太多,不可能人工判断每列数据情况,需要代码调试进行去除

for col in data.columns:    # 如果这一列所有的值都相等    if data[col].nunique() == 1:        # 则删除这一列        data = data.drop(col, axis=1)

格式转换

将true和false类型数据转换为int型

data['11'] = data['11'].astype(int)

其他类型同理,将“int”改为想转换的类型即可

字母或字符串转换为对应数字

如果想将字母或字符串转换为数字在后续作为变量进行处理,建议直接在excel中快捷键CTRL+h进行转换,代码总是会出现各种错误。

合并某几列数据

如果给出的数据有年、月、日,需要将其合并成一列

data['timestamp'] = data['月'].astype(str) + '-' + data['日'].astype(str) + '-' + data['具体时间']data = data.drop(['月', '日', '具体时间'], axis=1)# 将时间戳列设置为索引#data.set_index('timestamp', inplace=True)data['time'] = pd.to_datetime('2023-' + data['timestamp'], fORMat='%Y-%m-%d-%H:%M:%S')

对多列数据求平均值并合并为一列:

class_df = (data['ROLL_ATT1']+data['ROLL_ATT2'])/2data['ROLL_ATT1']=class_dfdata = data.drop(['ROLL_ATT2','MAGNETIC_HEADING'], axis=1)

数据可视化

可以将已处理好的数据进行可视化

以某个自变量为横坐标(如时间),其余为纵坐标画出折线图,画出所有变量随时间变化的折线图:

import matplotlib.pyplot as plt#画出所有变量随时间变化图像feature = data.columns[1:]for feas in feature:    plt.plot(data['time'], data[feas])    plt.xlabel('Time')    plt.ylabel(feas)    plt.show()

判断某个变量的分布情况可以绘制分布图

# 绘制分布图plt.hist(df2['train1'], bins=20)plt.xlabel('train1')plt.ylabel('Frequency')plt.title('Takeoff Weight Distribution')plt.show()

 散点图绘制

import seaborn as snssns.pairplot(data , hue ='label')plt.savefig(r"D:\pairplot001.png")

效果如下:

也可以画出相关性系数热力图

import seaborn as snssns.set(style="ticks")sns.heatmap(data.corr(), annot=True, cmap="YlGnBu");plt.savefig(r"D:\heatmap.png")

效果如下:

 

 针对机器学习及深度学习数据预处理

导入库(keras库的内容是深度学习才需要用到的,仅进行机器学习可以不导入)

import numpy as npimport pandas as pdimport kerasfrom keras.models import Sequentialfrom keras.wrappers.scikit_learn import KerasClassifierfrom keras.utils import np_utils, plot_modelimport matplotlib.pyplot as plfrom sklearn import metricsfrom sklearn.model_selection import cross_val_score, train_test_split, KFoldfrom sklearn.preprocessing import LabelEncoderfrom keras.layers import Dense, Dropout, Flatten, Conv1D, MaxPooling1Dfrom keras.models import model_from_JSONimport matplotlib.pyplot as pltfrom sklearn.metrics import confusion_matriximport seaborn as snsimport osfrom sklearn.preprocessing import StandardScalerimport itertools

首先是对数据集进行划分

data2=data.drop(['label'],axis=1)X = np.expand_dims(data2.astype(float), axis=2)Y = data['label']print(X.shape)print(Y.shape)x_train, x_test, y_train, y_test = train_test_split(X, Y, test_size=0.7, random_state=20)x_valid, x_test, y_test, y_valid=train_test_split(X, Y, test_size=0.5, random_state=20)

数据标准化

standard = StandardScaler()# 对训练集进行标准化,它会计算训练集的均值和标准差保存起来x_train = standard.fit_transform(x_train)# 使用标准化器在训练集上的均值和标准差,对测试集进行归一化x_test = standard.transform(x_test)

接下来都是深度学习需要进行的预处理操作,机器学习不用

深度学习需要对label进行onehot编码

from keras.utils import to_cateGoricaly_test = to_categorical(y_test)y_train = to_categorical(y_train)from keras import backend as KK.set_image_dim_ordering("tf")#one_hot编码转换def one_hot(Train_Y, Test_Y):    Train_Y = np.array(Train_Y).reshape([-1, 1])    Test_Y = np.array(Test_Y).reshape([-1, 1])    Encoder = preprocessing.OneHotEncoder()    Encoder.fit(Train_Y)    Train_Y = Encoder.transform(Train_Y).toarray()    Test_Y = Encoder.transform(Test_Y).toarray()    Train_Y = np.asarray(Train_Y, dtype=np.int32)    Test_Y = np.asarray(Test_Y, dtype=np.int32)    return Train_Y, Test_Yy_train, y_test = one_hot(y_train, y_test)

接下来需要根据训练参数进行调整,假设训练参数设置如下

# 训练参数batch_size = 128epochs = 40 #训练轮数num_classes = 6 #总共的训练类数length = 2048BatchNorm = False # 是否批量归一化number = 1000 # 每类样本的数量normal = False # 是否标准化

 重塑训练参数,否则传入模型时会出错

x_train=x_train.reshape((x_train.shape[0],x_train.shape[1],1))x_test = x_test.reshape((x_test.shape[0], x_test.shape[1],1))

需要根据betch_size的大小改变选择的训练数据数目,否则传入模型训练会出错

# # 改变dataset的大小,变成batch_size的倍数def change_dataset_size(x, y, batch_size):    length = len(x)    if (length % batch_size != 0):        remainder = length % batch_size        x = x[:(length - remainder)]        y = y[:(length - remainder)]    return x, yx_train,y_train=change_dataset_size(x_train,y_train,batch_size)x_valid, y_valid=change_dataset_size(x_valid, y_valid,batch_size)

这一步之后基本就可以直接传入模型进行训练了 

来源地址:https://blog.csdn.net/weixin_53488599/article/details/130553461

--结束END--

本文标题: 数据预处理方法整理(数学建模)

本文链接: https://lsjlt.com/news/402166.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 数据预处理方法整理(数学建模)
    这篇文章主要是整理了一些作者在各种建模比赛中遇到的数据预处理问题以及方法,主要针对excel或csv格式的数据,为后续进行机器学习或深度学习做前期准备 数据清洗 导入库和文件,这里使用的是绝对路径,可改为相对路径 import pandas...
    99+
    2023-09-10
    python 数据分析 机器学习 深度学习 cnn
  • 数学建模--数据预处理
    目录 一、数据统计 1、行列式的最大元素和最小元素 2、求向量的平均值和中值  3、对矩阵做排序  二、数据优化(数据残缺值和异常值的处理) 1、数据残缺 ①插值 ②拟合  ③邻近替换 ④KNN算法填充 2、数据异常 ①拉依达准则 ②替换异...
    99+
    2023-09-04
    python 算法 numpy
  • Kylin如何进行数据建模和数据预处理
    Kylin 是一个开源的分布式分析引擎,专为交互式OLAP(联机分析处理)而设计。Kylin主要用于处理海量数据,并提供高效的多维分...
    99+
    2024-04-02
  • 数据处理方法整理【目前最全】
    数据处理方法 主要采用编写数据处理代码来对数据进行处理步骤,主要采用Python语言,使用相关的Pandas、Numpy、Scikit-learn等库来进行操作,一些代码实例如下。 1、缺失数据处理 ...
    99+
    2023-09-09
    python 大数据 数据分析 数据挖掘 big data
  • 有哪些数据预处理的方法
    今天就跟大家聊聊有关有哪些数据预处理的方法,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。数据预处理的方法有:1、数据清理,通过填写缺失的值、光滑噪声数据、识别或删除离群点并解决不一致...
    99+
    2023-06-14
  • python数据预处理
    Ⅰ.数据源 Ⅱ.导入库 import pandas as pdimport numpy as npfrom scipy import statsimport matplotlib.pyplot a...
    99+
    2023-09-21
    python 数据分析
  • python数据预处理的方法有哪些
    Python数据预处理的方法有:1. 数据清洗:处理缺失值、异常值、重复值等问题。2. 数据整合:将不同来源的数据整合到一起,如合并...
    99+
    2023-08-09
    python
  • 数学建模--预测类模型
    目录 一、中短期预测 1、灰色预测法 ①适用范围 ②模型实现  2、回归分析 ①适用范围 ②模型实现  3、时间序列分析 ①自适应滤波法 ②指数平滑法 ③移动平均法 4、微分方程 二、长期预测 1、神经网络预测 2、logistic模型 ①...
    99+
    2023-09-03
    python matlab 数据分析
  • torchvision.transforms 数据预处理:ToTensor()
    文章目录 1、ToTensor() 函数的作用2、读取图像时 PIL 和 opencv 的选择2.1 使用 PIL2.2 使用 opencv 3、ToTensor() 的使用3.1 关键...
    99+
    2023-10-08
    python numpy pytorch
  • python优化数据预处理方法是什么
    本篇内容主要讲解“python优化数据预处理方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python优化数据预处理方法是什么”吧!我们知道现实中的数据通常是杂乱无章的,需要大量的预处...
    99+
    2023-06-25
  • python优化数据预处理方法Pandaspipe详解
    我们知道现实中的数据通常是杂乱无章的,需要大量的预处理才能使用。Pandas 是应用最广泛的数据分析和处理库之一,它提供了多种对原始数据进行预处理的方法。 import nump...
    99+
    2024-04-02
  • nlp中文数据预处理方法是什么
    这篇文章主要介绍“nlp中文数据预处理方法是什么”,在日常操作中,相信很多人在nlp中文数据预处理方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”nlp中文数据预处理方法是什么”的疑惑有所帮助!接下来...
    99+
    2023-06-02
  • 数据挖掘(2.3)--数据预处理
    目录 三、数据集成和转换 1.数据集成  2.数据冗余性  2.1 皮尔森相关系数 2.2卡方检验  3.数据转换 四、数据的规约和变换 1.数据归约 2数据离散化 三、数据集成和转换 1.数据集成  数据集成是将不同来源的数据整合...
    99+
    2023-09-10
    人工智能 python 数据挖掘 数据分析
  • struts2数据处理_动力节点Java学院整理
    Struts2框架框架使用OGNL语言和值栈技术实现数据的流转处理。值栈就相当于一个容器,用来存放数据,而OGNL是一种快速查询数据的语言。 值栈:ValueStack一种数据结构,操作数据的方式为:先进后出 OGNL ...
    99+
    2023-05-31
    struts2 数据处理 ava
  • C++技术中的大数据处理:如何使用机器学习算法进行大数据预测和建模?
    利用 c++++ 中的机器学习算法进行大数据预测和建模包括:使用分布式处理库(如 spark)处理大数据集。使用智能指针和引用计数管理内存。利用多线程提高性能。常见的机器学习算法包括:线...
    99+
    2024-05-12
    机器学习 大数据处理 apache c++
  • Pytorch数据读取与预处理的实现方法
    这篇文章给大家分享的是有关Pytorch数据读取与预处理的实现方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。  在炼丹时,数据的读取与预处理是关键一步。不同的模型所需要的数据以及预处理方式各不相同,如果每个轮...
    99+
    2023-06-14
  • Java数据预统计处理的方法是什么
    Java中可以使用一些方法对数据进行预统计处理,其中常用的方法包括:1. 循环遍历:使用循环结构(如for循环、while循环)遍历...
    99+
    2023-08-24
    Java
  • 大数据预处理综述
    数据预处理背景 大数据项目开发流程 数据质量 准确性:数据是正确的,数据存储在数据库中的值对应于真实世界的值。 数据不准确的原因 数据收集设备故障。 数据输入错误。 数据传输过程出错。 命名约定、数据输入、输入字段格式不...
    99+
    2021-12-10
    大数据预处理综述
  • java使用JDBC动态创建数据表及SQL预处理的方法
    本文实例讲述了java使用JDBC动态创建数据表及SQL预处理的方法。分享给大家供大家参考,具体如下:这两天由于公司的需求,客户需要自定义数据表的字段,导致每张表的字段都不是固定的而且很难有一个通用的模板去维护,所以就使用JDBC动态去创建...
    99+
    2023-05-31
    java jdbc ava
  • 头歌:数据预处理之数据清洗
    本关任务:完成泰坦尼克号遇难数据的清洗。   案例背景 泰坦尼克号遭遇的灾难震惊世界,如何避免灾难甚至预测灾难呢? 要实现首先要做好泰坦尼克号的损失数据统计,才能为数据分析打下基础。 编程要求 根据提示,你需要完成: 缺失值填充离群点检测 ...
    99+
    2023-10-07
    python 开发语言
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作