2.2 数据预处理

2023-12-18 18:58:30

注意!!!

本博客仅用于本人学习笔记作用
资料来源:https://zh-v2.d2l.ai/chapter_introduction/index.html

数据预处理

读取数据集

import os
import pandas as pd

os.makedirs(os.path.join('.', 'data'), exist_ok=True)
data_file = os.path.join('.', 'data', 'house_tiny.csv')
with open(data_file, 'w') as f:
    f.write('NumRooms,Alley,Price\n')  # 列名
    f.write('NA,Pave,127500\n')  # 每行表示一个数据样本
    f.write('2,NA,106000\n')
    f.write('4,NA,178100\n')
    f.write('NA,NA,140000\n')

data = pd.read_csv(data_file)
print(data)
   NumRooms Alley   Price
0       NaN  Pave  127500
1       2.0   NaN  106000
2       4.0   NaN  178100
3       NaN   NaN  140000

处理缺失值

“NaN”项代表缺失值。 为了处理缺失的数据,典型的方法包括插值法和删除法, 其中插值法用一个替代值弥补缺失值,而删除法则直接忽略缺失值。 在这里,我们将考虑插值法。

通过位置索引iloc,我们将data分成inputs和outputs, 其中前者为data的前两列,而后者为data的最后一列。 对于inputs中缺少的数值,我们用同一列的均值替换“NaN”项。

巷子类型

“巷子类型”(“Alley”)通常是指房地产数据中的一个特征,用于描述房屋所在的巷子或背街的类型。在房地产领域,房屋的位置和周围环境是一个重要的因素,而巷子类型是其中之一。

巷子类型通常可以包含以下几种类别:

  1. “Pave”:表示巷子是铺设了道路或人行道的,通常是水泥或沥青路面,类似于一条小巷。

  2. “Grvl”:表示巷子是用碎石或砾石铺设的,通常没有硬化的路面,更类似于土路。

  3. “NaN”:这是一个特殊的类别,表示缺失值。当房地产数据中没有提供巷子类型的信息时,这个特征的值可能为"NaN"。

巷子类型可以在某些情况下影响房屋的价值或购买决策,因此在房地产数据分析和建模中,通常会将其作为一个特征进行处理。在处理巷子类型时,可以使用独热编码等方法,将其转化为机器学习模型能够理解的数值形式,以便进行分析或预测。
在这里插入图片描述
这里对于NumRooms这一列使fillna方法来进行填充,其中mean()用来计算列的平均值。
对于Alley_nan 这一分类特征采用的是独热编码来处理 “Alley” 列的缺失值。

转换为张量格式

在这里插入图片描述
将前面的输入和输出转为张量格式
在这里插入图片描述
在这里插入图片描述

练习

1、删除缺失值最多的列

# -*- coding: utf-8 -*-
# Author: xxx
"""
李沐《动手学深度学习Pytorch版》第二章第二节
"""
import os
import pandas as pd

os.makedirs(os.path.join('.', 'data'), exist_ok=True)
data_file = os.path.join('.', 'data', 'house_tiny.csv')
with open(data_file, 'w') as f:
    f.write('NumRooms,Alley,Price\n')  # 列名
    f.write('NA,Pave,127500\n')  # 每行表示一个数据样本
    f.write('2,NA,106000\n')
    f.write('4,NA,178100\n')
    f.write('NA,NA,140000\n')

data = pd.read_csv(data_file)
print(data)

import pandas as pd

# 读取CSV文件
data_file = "data/house_tiny.csv"
data = pd.read_csv(data_file)

# 统计每列中NaN值的数量
nan_counts = data.isna().sum()

# 找到包含NaN值最多的列
column_with_most_nans = nan_counts.idxmax()

# 删除包含NaN值最多的列
data_cleaned = data.drop(columns=[column_with_most_nans])

# 打印删除后的数据集
print(data_cleaned)

这几行代码的目的是处理数据中的缺失值:

  1. nan_counts = data.isna().sum(): 这行代码首先使用 data.isna() 方法检查数据中的每个元素是否为 NaN(缺失值),然后使用 .sum() 方法对每列中的 NaN 值进行求和,以得到每列中 NaN 值的数量。nan_counts 是一个包含每列 NaN 值数量的 Pandas Series。

  2. column_with_most_nans = nan_counts.idxmax(): 这行代码使用 nan_counts.idxmax() 找到具有最多 NaN 值的列的标签(列名)。它会返回一个字符串,表示包含最多 NaN 值的列的名称。

  3. data_cleaned = data.drop(columns=[column_with_most_nans]): 最后,通过使用 Pandas 的 drop 方法,删除包含最多 NaN 值的列,以得到一个新的数据框 data_cleaned,其中不包含具有最多缺失值的那一列。

这个过程的目的是去除数据集中缺失值较多的列,以确保数据质量和模型训练的有效性。在实际数据处理中,处理缺失值是一个重要的数据预处理步骤,可以根据具体情况采用不同的策略,如删除、均值填充、中位数填充等。
在这里插入图片描述
2、将处理后的数据集转换为张量模式

# 将数据转换为 PyTorch 张量
data_tensor = torch.tensor(data_cleaned.to_numpy(dtype=float))
print(data_tensor)

在这里插入图片描述

文章来源:https://blog.csdn.net/weixin_44064040/article/details/135064950
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。