机器学习:数据处理基操

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

一、模块导入

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

图像处理ASIC设计方法 笔记6 数据拼接和帧格式校正

第四章大模板卷积ASIC设计方案 P80 实时图SPRM 数据位宽64bit,4个SPRAM,同时得到4行数据 绘制卷积芯片数据路径图,卷积芯片内部模块图 根据这个图,本书后续对各个模块都进行介绍。 P81 第一个模块 图像输入前端FIFO 学习图像处理中好的设计思路:帧格式校验和数据拼接 …

STM32+ESP8266水墨屏天气时钟:ESP8266连接心知天气获取数据

项目背景 利用STM32F103C8T6和ESP8266模块进行通信,获取心知天气的数据。 硬件设计为串口1(PA9和PA10)连接ESP8266. 串口2打印 一.ESP8266连接WIFI ESP8266模块可以通过AT指令控制搭配使用源代码API函数开发,总体开发速度快,难度较低。 说…

板子合集1.0

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 原文链接:https://blog.csdn.net/JK01WYX/ 文章目录 1.快速幂板子2.gcd得最大公约数3.堆优化的dijkstra板子4.线段树1板子 区间加线段…

Vue--》打造简易直播应用平台项目实战

今天开始使用 vue3 + ts 搭建一个简易直播应用平台项目,因为文章会将项目的每一个地方代码的书写都会讲解到,所以本项目会分成好几篇文章进行讲解,我会在最后一篇文章中会将项目代码开源到我的github上,大家可以自行去进行下载运行,希望本文章对有帮助的朋友们能多多关注本…

奇怪的需求之与图片做交互

1.起因 客户想要展示自己的地图,该地图上有各种工作数据,和工作点位,已有的地图不能满足需求.于是提出将这张图片当成大背景 2.经过 鉴于文件格式和尺寸的原因,协商后客户提出将图片做成缩放效果,同时具有点击效果,原先直接进入的主页,现在为点击图片中的某条线路进入主页面…

【论文阅读】多传感器SLAM数据集

一、M2DGR 该数据集主要针对的是地面机器人,文章正文提到,现在许多机器人在进行定位时,其视角以及移动速度与车或者无人机有着较大的差异,这一差异导致在地面机器人完成SLAM任务时并不能直接套用类似的数据集。针对这一问题该团队…

Sentinel 规则持久化,基于Redis持久化【附带源码】

B站视频讲解 学习链接🔗 文章目录 一、理论二、实践2-1、dashboard 请求Redis2-1-1、依赖、配置文件引入2-1-2、常量定义2-1-3、改写唯一id2-1-4、新Provider和Publisher2-1-5、改写V2 2-2、应用服务改造2-2-1、依赖、配置文件引入2-2-2、注册监听器 三、源码获取3…

从0到1实现自助棋牌室系统:技术调研

前言 春节返乡之际,发现老家县城竟然开了近十家棋牌室。巧的是朋友也有意涉足,便咨询我自助棋牌室的软件投入成本。作为程序员的我,在思考了自助棋牌室背后的技术需求后,嗅到了一丝丝商机:何不自己开发一个自助棋牌室…

操作系统的运行机制

目录 一. 特权指令与非特权指令二. 中断和异常2.1. 内中断2.2 外中断 三. 系统调用 注:很多人习惯把Linux、Windows、MacOS的“小黑框”中使用的命令也称为“指令”,其实这是“交互式命令接口”,注意与本节的“指令”区别开。本节中的“指令”指二进制机…

jenkins实战(1)

一, Jenkins官网介绍: Jenkins 持续集成、持续部署 下载地址:Jenkins download and deployment 提供两种类型: LTS(长期版)和Weekly(最近一周的版本) 注: 必须是Java8及以上版本(官网针对这一点有做说明) 二, 安装 下载war包,java -jar XXX --httpPort8081 或 下载war包…

Linux:kubernetes(k8s)搭建mater节点(kubeadm,kubectl,kubelet)(2)

安装k8有多种方式如: minikube kubeadm 二进制安装 命令行工具 我这里就使用kubeadm进行安装 环境 3台centos7 master ip :192.168.113.120 2G运存 2内核 node1 ip :192.168.113.121 2G运存 2内核 node2 ip :192.168.1…

Myqsort:基于冒泡排序算法的C语言实现

我们将详细介绍一个基于冒泡排序算法的自定义排序函数——Mysqrt。该函数通过使用用户提供的比较函数进行元素间的比较&#xff0c;并结合swap交换函数对任意类型的数据进行排序。下面是对代码的逐行解析。 逻辑导图 代码实现 // 头文件 #include<stdio.h>// 定义比较函…

关于uniapp小程序的分包问题

开发uniapp小程序时&#xff0c;在打包上传代码时会出现超出2M的打包限制不能上传&#xff0c;那么我们该怎么做呢&#xff1f; 1.对于图片&#xff0c;将图片从后端服务取&#xff0c;尽量不要放在静态资源&#xff0c;图片体积会影响打包大小。 2.使用分包&#xff0c;tabb…

SSH教程

ssh 是远程连接的利器, 可以说凡是涉及到 linux 服务器, ssh 就是一个绕不开的话题. 本文作为一个教程, 尽可能详细的帮助读者设置 ssh, 并给出一些常用的 ssh 配置方法 (主要用于 linux 系统的远程登录和文件传输). 1. 简介 ssh 分为两个部分, sshd 服务端和 ssh 客户端. ssh…

2024-02学习笔记

1.当我们向Set集合中添加一个已经存在的元素时 当我们向Set集合中添加一个已经存在的元素时&#xff0c;Set集合会如何处理呢&#xff1f;实际上&#xff0c;Set集合不会将重复的元素添加到集合中。当我们向Set集合中添加一个元素时&#xff0c;Set集合会首先判断该元素是否已…

[C++]C++使用yolov9结合bytetrack实现目标追踪演示

【简介】 在C中实现YOLOv9的目标检测与ByteTrack的多目标追踪是一个相对复杂的过程&#xff0c;涉及到深度学习、计算机视觉和实时数据处理等多个领域。下面我将简单介绍这两个技术&#xff0c;并概述如何在C中实现它们。 YOLOv9&#xff08;You Only Look Once&#xff0c;版…

STL常见容器(map/multimap容器)---C++

STL常见容器目录&#xff1a; 8.map/ multimap容器8.1 map基本概念8.2 map构造和赋值8.3 map大小和交换8.4 map插入和删除8.5 map查找和统计8.6 map容器排序8.6.1 内置类型排序8.6.2 自定义类型排序8.6.3 自定义和内置类型混合排序 8.7 实例8.7.1 案例描述8.7.2 实现步骤 8.map…

Vue.js+SpringBoot开发高校实验室管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 实验室类型模块2.2 实验室模块2.3 实验管理模块2.4 实验设备模块2.5 实验订单模块 三、系统设计3.1 用例设计3.2 数据库设计 四、系统展示五、样例代码5.1 查询实验室设备5.2 实验放号5.3 实验预定 六、免责说明 一、摘…

基于springboot+vue的人格障碍诊断系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…