机器学习:数据处理基操

news2024/9/26 5:19:08

在处理完数据之后,选择好模型,就可以用训练集训练模型,用测试集输入模型 然后输出需要预测的结果啦~

一、模块导入

import numpy as np
import pandas as pd #读入数据

二、pandas数据

一、dataframe基础

一、dataframe的创建

  • 通过字典来创建DataFrame

字典的键值表示列号,value用列表格式,表示该列的行数据。

外层key做列索引,内层key做行索引

persons = {
    'name': ['小睿', '小丽', '小明', '小红'],
    'age': [19, 18, 18, 17],
    'sex': ['男', '男', '女', '男'],
}
# 字典的key作为列索引
data_frame1 =pd.DataFrame(persons)

b9ddbe3b48a64ec4bf319e262a4a4863.png

二、从csv中读入

pd.read_csv()有很多参数

raw_data=pd.read_csv(path,names=names,header=None,delim_whitespace=True)

path指定文件路径,names指定列名,header指明csv文件中是否有列名,delim_whitespace、sep可以用来将同一列的数据分割成多列,usecols 可以选择数据中的列放入dataframe

names=['CRIM','ZN','INDUS','CHAS','NOX','RM','AGE','DIS',
'RAD','TAX','PRTATIO','B','LSTAT','MEDV']
path='E:\Python项目程序\人工智能企业实训\housing.csv'
raw_data=pd.read_csv(path,names=names,header=None,delim_whitespace=True)
print(raw_df.head(3))#head用于读取多少行

print(raw_df.describe())#按一列的来算
print(raw_df.info())#查看数据类型,如果有obj需要编码,最好用32类型的;也可以看是否存在空值

三、数据探索

我们可以查看数据是否有空值,数据的均值方差等来查看数据的特征,如果数据存在空值,我们可能需要进行缺失值处理。查看数据特征和异常值还可以通过画图来观察到。

使用dataframe的数据基本信息

方法:

  • head()
  • describe()
  • info()52565033a4b94668accf9838bbb59bb1.png1c93cb3a5cb54551b460c8e431ee4e20.png

由于数据集在同一列中,并且没有列名,因此我们需要使用sep将一列中的多个数据拆开,由于没有列名,需要使用header=None:

import pandas as pd
names=['CRIM','ZN','INDUS','CHAS','NOX','RM','AGE','DIS','RAD','TAX','PRTATIO','B','LSTAT','MEDV']
df=pd.read_csv('./dataset.csv',names=names,header=None,delim_whitespace=True)#默认是当前路径下的文件,如果没有names=names,则列名默认从0开始编号
print(df.head())

注意:接下来的df全是这里用pd.read_csv()得到的。

一、head方法(查看前n行)

  • 输出dataframe中的前n行,标识出列名和行号
print(df.head())#默认输出数据前五行

ab6f88fbaa8f4f438f4488d32023fc9b.png

print(df.head(10))#输出数据前10行

ec6fd369528f4e9580750ff29cb54a01.png

二、describe方法(查看列的数学统计)

  • 输出dataframe中每一列的数学统计值。
print(df.describe())

b547414f92474565a9a8a5c27f06a036.png

它将打印每一列特征的个数,平均数,方差,最小值,最大值,以及箱型图中的25%、50%、75%。

三、info方法(查看空值和数据类型)

  • 输出每一列是否存在空值,以及类型
print(df.info())

5490df666b954918a0bc83834a3913c0.png

None被认为是空值

四、isnull方法(转换数据为是否为空)

  • 对每一个数据判断是否为空,不为空值为False(和notnull()方法相反)
  • 搭配sum()方法可以直接找到空值个数
  • df.isnull().sum() 每一列空值个数
  • df.isnull().sum().sum()数据中存在空值的个数
print(df.isnull())

05bc8edbfb454fcfa96a059e6a0920f1.png

print(df.isnull().sum())

4fec587b4f494bd0b9993fa14113999b.png

sum()方法类似于数据库中的聚集函数,对每一列求总和,输出出来,返回的是一个Series类型。还可以再使用一次sum(),求出series中元素的总和。

print(df.isnull().sum().sum())

c1e9ff79410e4fba9412e8895dcaaa4c.png

五、查看是否有空值

path='./data.csv'
df=pd.read_csv(path)

print(df.isnull().sum())#输入每一列的空值个数
print(df.isnull().sum().sum())#输入总共的空值个数

四、数据预处理

我们要将需要预测的数据,和训练数据合并之后再进行一起处理,因为输入模型的数据格式要相同。之前在查看空值时,也应该合并。

train_data = pd.read_csv( "./data./train.csv")
test_data = pd.read_csv( "./data./test.csv")
# 合并train, test
data = pd.concat([train_data, test_data], axis=0)#因为要对列进行统一处理
'''axis=0是指在y轴上合并,即按行合并'''

一、缺失值处理

3cc57ac5e87e4511acc17c3e4262a022.png

缺失值处理有很多种方式,这里只写两个。将这些方法当做类调用即可,不需要关注实现。调用之后直接使用被填充后的数据。

IterativeImputer多变量缺失值填补

2336c04d719d4a6c87d8cbaf3aa44977.png

#df是df=pd.read_csv(path),从csv中读取到的文件,Dataframe格式
from sklearn.experimental import enable_iterative_imputer
from sklearn.impute import IterativeImputer

imp_mean = IterativeImputer(random_state=0)#random_state是随机种子
imp_mean.fit(df)
filled_data =imp_mean.transform(df)
'''filled_data和df的区别就是 filled_data是数据已经被填充了的,并且filled_data不是Dataframe类型'''

save_df=pd.DataFrame(filled_data)#保存填充后的文件
csv_path='./IterativeImputer.csv'
save_df.to_csv(csv_path,index=False)

②KNNImputer K近邻缺失值填补

该方法是借助 包含缺失值数据附近的 其他特征和它最像的 n_neighbors个数据的 该特征值的平均值来填补缺失值的。

from sklearn.impute import KNNImputer

imputer=KNNImputer(n_neighbors=2)
df=pd.Dataframe(imputer.fit_transform(df))

解释:

'''使用具有缺失值的样本的两个最近邻居的平均特征值替换编码为np.nan的缺失值:'''
from sklearn.impute import KNNImputer
data = [[2, 4, 8], [3, np.nan, 7], [5, 8, 3], [4, 3, 8]]
imputer = KNNImputer(n_neighbors=1)
imputer.fit_transform(data)
'''可以看到,因为第二个样本的第一列特征3和第三列特征7,与第一行样本的第一列特征2和第三列特征8的欧氏距离最近,所以缺失值按照第一个样本来填充,填充值为4。那么n_neighbors=2呢?'''
imputer = KNNImputer(n_neighbors=2)
imputer.fit_transform(data)
'''此时根据欧氏距离算出最近相邻的是第一行样本与第四行样本,此时的填充值就是这两个样本第二列特征4和3的均值:3.5。'''

二、数据标准化

一、最大最小值缩放

from sklearn.preprocessing import MinMaxScaler
scaler=MinMaxScaler(feature_range=(0,1))
X1=scaler.fit_transform(df)

二、正态化数据

from sklearn.preprocessing import StandardScaler
scaler=StandardScaler().fit(df)
X1=scaler.transform(df)

三、标准化数据(归一化)

Normalize Data 处理是将每一行数据的距离处理成1的数据,又叫归一化 适合处理稀疏数据(有很多0), 归一处理的数据对使用权重输入的神经网络和使用距离的K近邻准确度有显著提升

from sklearn.preprocessing import Normalizer
scaler=Normalizer().fit(df)
X1=transformer.transform(df)

三、数据编码、异常值处理

部分处理方式。日期需要特殊处理,对于一些值也可能需要进行数据清洗。

一、one-hot编码

data=data[['Survived','Pclass','Sex','Age','Fare','Embarked','Title','TicketGroup']]
#上面
data=pd.get_dummies(data)#ont-hot编码

 二、标签编码

from sklearn.preprocessing import LabelEncoder
cat_columns = data.select_dtypes(include='O').columns
for col in cat_columns:
    le = LabelEncoder()
    data[col] = le.fit_transform(data[col])
'''对非数值特征进行标签编码,即非数值编码成0,1,2,3,4'''
'''A,B,C变成0,1,2这种'''
'''one-hot编码需要大量存储空间'''

data.drop(['id'], axis=1, inplace=True)
train = data[data['label'].notnull()]
test = data[data['label'].isnull()].drop(['label'], axis=1)

五、特征选择

PCA主成分分析法、递归特征消除RFE、多维标度法MDS等等。

一、随机森林重要性得分(有很多种方式)

from sklearn.ensemble import ExtraTreesClassifier
model=ExtraTreesClassifier()
fit=model.fit(X,y) #X是从train中抽出的特征,y是标签
print(fit.feature_importances_)

二、递归特征消除RFE

from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression
model=LogisticRegression()
rfe=RFE(model,3)
fit=rfe.fit(X,y)
print('被选定的特征',fit.support_)
print('特征排名:',fit.ranking_)

六、划分训练测试集

正确做法:先划分数据集,再分别进行同样的特征选择,防止数据泄露。

        因为测试集对于模型来说应该是“看不见”的,而对于计算特征得分,或者主成分分析,递归下降法等特征选择算法都需要对整个数据集进行考虑,因此为了使得测试集对于模型而言是完全未知的,就需要我们先将训练集和测试集分离之后,再分别用同样的方式进行特征选择。

        注意这样即使是使用降维的特征选择也是不会有问题的。因为我们在划分出测试集时,是进行随机抽取的,换句话说,由于随机性,测试集也具有数据的代表性。

from sklearn.model_selection import train_test_split

'''-----------------选出特征和标签------------------------'''
#X选择特征列(一般不包含id号), Y选择标签列
X=raw_data.iloc[:,0:13]#dataframe 可以用iloc[行范围,列范围]选择特征列
Y=raw_data.iloc[:,13]#选择标签列

'''----------划分训练集和测试集(如果没有可以测试模型得分的测试集时)------------'''
x_train,x_test,y_train,y_test=train_test_split(X,Y,test_size=0.1,random_state=11)
#按照test:train=0.1进行随机划分训练集和测试集 ,这里随机种子=11
#x_train -- y_train  ; x_test -- y_test
#将训练集进一步划分成训练集和验证集
x_train,x_val,y_train,y_val=train_test_split(x_train,y_train,test_size=0.1,random_state=11)

#x_train 和 y_train作为输入用来进行模型训练。

七、绘图常用模块

import matplotlib.pyplot as plt
import seaborn as sns

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

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

相关文章

latex中\documentclass[preprint,review,12pt]{elsarticle}的详细解释

在LaTeX中,\documentclass 是一个命令,用于指定文档所使用的文档类。文档类定义了文档的总体结构、格式和样式。elsarticle 是一个常用的文档类,它主要用于在Elsevier出版的期刊上提交论文。 详细解释 \documentclass[preprint,review,12pt…

【Linux】ecs 挂载分区

🍎个人博客:个人主页 🏆个人专栏:Linux ⛳️ 功不唐捐,玉汝于成 目录 前言 正文 详细步骤: 结语 我的其他博客 前言 在Linux系统中,挂载分区是连接额外存储空间到文件系统的重要步骤之一…

【转载】深度学习笔记——详解损失函数

原文链接: https://blog.csdn.net/weixin_53765658/article/details/136360033 CSDN账号: Purepisces github账号: purepisces 希望大家可以Star Machine Learning Blog https://github.com/purepisces/Wenqing-Machine_Learning_Blog 损失函数 根据您使用的神经网络类型和数…

kubectl 命令行管理K8S(下)

目录 声明式资源管理方式 介绍 命令 修改yaml文件指定的资源 离线修改 在线修改 YAML 语法格式 查看 api 资源版本标签 编辑yaml配置清单生成资源 编写yaml文件 yaml创建Deployment yaml创建service服务对外提供访问并测试 yaml创建Pod 生成模板 pod模板 serivc…

【降维算法UMAP】调参获得更适合的低维图

目录 UMAP降维介绍 UMAP的主要步骤 1. 学习高维空间中数据点间的距离 2. 构建高维图 local_connectivity参数 n_neighbors参数 3. 构建低维图 计算最小距离 min_dist超参数 最小化成本函数 R语言中的RunUMAP函数 关键参数 Reference UMAP降维介绍 为什么要降维&am…

最长上升子序列(LIS)简介及其例题分析

一.最长上升子序列(LIS)的相关知识 1.最长上升子序列(Longest Increasing Subsequence),简称LIS,也有些情况求的是最长非降序子序列,二者区别就是序列中是否可以有相等的数。假设我们有一个序…

[数据结构]栈

1.栈的概念及结构 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出的原则。 压栈:栈的插入操作叫做进栈/压栈/入栈&#…

【UEFI实战】BIOS中的openssl

BIOS中的openssl openssl是一个密码库或者密码工具,在密码学基础_hex string is too short, padding with zero bytes t-CSDN博客介绍了基本的密码学概念已经openssl工具的使用,而这里将介绍BIOS下如何使用openssl。 在开源的BIOS代码库EDK中包含一个C…

数据结构作业复盘1:字符串疑难杂症小汇总(字符串赋值,指针数组...)

学校里开始上数据结构了,一开始是从C语言一些相关的基础开始讲起。第一次作业主要是字符串相关的基础知识以及编程题目。先做了一部分,整理了一下一些字符串隐含的知识和一些易误易混的概念,算是给自己的一个复盘和归纳。 strcpy函数相关 首…

Linux系统编程之多线程

目录 1、进程与线程 2、线程的优势与使用理由 3、多线程的使用 3.1 线程的使用 1.线程创建函数 2.线程退出函数 3.线程的等待 4.线程脱离 5. 线程ID获取及比较 6.示例 3.2 互斥锁的应用 1.互斥锁相关API 2.示例 3.3 条件变量的使用 1. 创建及销毁条件变量 2. 等待…

数字化转型导师坚鹏:证券公司数字化领导力提升之道

证券公司数字化领导力提升之道 ——融合中西智慧,践行知行合一思想,实现知行果合一 课程背景: 很多证券公司存在以下问题: 不知道证券公司数字化思维如何提升? 不清楚证券公司数字化领导力模型内涵?…

加密与安全_探索数字证书

文章目录 Pre概述使用keytool生成证书使用Openssl生成证书 (推荐)证书的吊销小结 Pre PKI - 借助Nginx 实现Https 服务端单向认证、服务端客户端双向认证 PKI - 04 证书授权颁发机构(CA) & 数字证书 PKI - 数字签名与数字证…

土壤侵蚀量化评估

根据之前的文章,已经算出了R、K、LS、C、P 现在计算土壤侵蚀,将几个前期制作好的因子的TIFF文件,用栅格计算器相乘 发现局部地区存在轻度侵蚀,大部分区域是微度侵蚀 然后对比了一下范围 其中的几个因子都在文献范围内,说明计算结果并未出错,可能就是研究区正常范围和结…

《数字图像处理(MATLAB版)》相关算法代码及其分析(1)

目录 1 自适应中值滤波算法 1.1 函数定义 1.2 输入参数检查 1.3 初始化 1.4 自适应中值滤波过程 1.5 处理剩余未处理的像素 1.6 总结 2 计算输入数组的平均值 2.1 函数定义 2.2 注释 2.3 输入验证 2.4 计算平均值 2.5 总结 3 基于高斯模型的贝叶斯分类器 3.1 函…

【搭建 Hbase 集群】

搭建 Hbase 集群 一、准备工作二、三台服务器之间的 SSH 免密登录1.修改hosts文件添加DNS映射2.在每台服务器上生成 SSH 密钥对3.将公共密钥(通常为 ~/.ssh/id_rsa.pub)复制到目标服务器上4.从本地使用 SSH 命令无需密码连接到目标服务器 二、安装JDK1.执…

Linux/Docker 修改系统时区

目录 1. Linux 系统1.1 通过 timedatectl 命令操作1.2 直接修改 /etc/localtime 文件 2. Docker 容器中的 Linux 操作环境: CentOS / AlmaOSMySQL Docker 镜像 1. Linux 系统 1.1 通过 timedatectl 命令操作 使用 timedatectl list-timezones 命令列出可用的时区…

Learning from Unlabeled 3D Environments forVision-and-Language Navigation

这篇论文是关于高级指令的 摘要 在视觉和语言导航 (VLN) 中,实体代理需要按照自然语言指令在真实的 3D 环境中进行导航。现有 VLN 方法的一个主要瓶颈是缺乏足够的训练数据,导致对未见过的环境的泛化效果不理想。虽然 VLN 数据通常是手动收集的&#x…

2024年 前端JavaScript Web APIs 第一天 笔记

1.1 -声明变量const优先 1.2 -DOM树和DOM对象 1.3 -获取DOIM元素 1.4 -DOM修改元素内容以及年会抽奖 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content&quo…

初识面相对象深入理解、构造方法--学习JavaEE的day12

day12 一、初识面相对象深入理解 需求&#xff1a; 创建人类的对象&#xff0c;并操作对象 分析&#xff1a; 人类 - Person 属性&#xff1a;name、sex、age 方法&#xff1a;eat、sleep 场景&#xff1a;创建多个对象&#xff0c;去操作对象 public class Person {//成员变…

9、taocms代码审计

一、XSS 1、DOM型xss 限制 无复现 payload: aa)alert(1)( 触发的参数&#xff1a;name代码 根据路由找到对应的文件&#xff0c;在api.php里接受全局变量action&#xff0c;最终赋值给$m,判断 如果$m不在数组就结束&#xff0c;新建方法复制给$model。检查类的方法是否存…