李沐动手深度学习(pycharm中运行笔记)——04.数据预处理

04.数据预处理(与课程对应)

1、导入相关库

python 复制代码
import os
import torch
import pandas as pd

2、读取csv文件、对数据进行预处理,成为可以转成tensor张量的数据;下面创建一个人工数据集,并存储在csv(逗号分隔值)文件;创建目录为../data/house_tiny.csv(../代表上一级目录,即data/house_tiny.csv应该在此代码目录的上一级目录中会有data/目录)

python 复制代码
os.makedirs(os.path.join('..', 'data'), exist_ok=True)  # 使用 os.makedirs 函数创建目录,os.path.join('..', 'data') 用于拼接路径,这里是在当前目录的上一级目录中创建名为 data 的目录,exist_ok=True 表示如果该目录已经存在,不会抛出异常。
data_file = os.path.join('..', 'data', 'house_tiny.csv')  # data_file = os.path.join('..', 'data', 'house_tiny.csv'):拼接文件路径,确定要操作的 CSV 文件的路径,该文件位于上一级目录的 data 目录下,文件名为 house_tiny.csv
with open(data_file, 'w') as f:  # 以写入模式打开指定的 CSV 文件,with 语句确保文件在使用完后会正确关闭。
    # 在 with 语句块中,通过 f.write 方法写入了 CSV 文件的表头 NumRooms, Alley, Price 以及几行数据,每行数据用逗号分隔不同的字段值,其中 NA 表示缺失值。
    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')

3、读取 csv 文件一般用 pandas库

python 复制代码
data = pd.read_csv(data_file)
print("data:", data)

运行结果:

4、为了处理缺失的数据,典型的方法包括 插值 和 删除,这里,使用插值

python 复制代码
inputs, outputs = data.iloc[:, 0:2], data.iloc[:, 2]  # 用iloc把所有行、第0与1列拿出来放到inputs;用iloc把所有行、第2列拿出来放到outputs
inputs = inputs.fillna(inputs.mean())  # 用fillna对inputs中所有NA填一个值,填mean均值;NumRooms中的 NA 填为均值3.0;Alley是字符串,没有均值所以NA没变
print("inputs:", inputs)

运行结果:

5、 对于inputs中的类别值或离散值,我们将"NAN"视为一个类别;缺失值也是一种值,把它变为数值;以及对于字符串的处理;把这一列里面所有出现的不同种类的数值都变成一个特征(Alley有两类值Pave、NA,那就创建2类)

python 复制代码
inputs = pd.get_dummies(inputs, dummy_na=True)  # 创建两类后对应复制1、0
print("inputs:", inputs)

运行结果:

6、现在 inputs 和 outputs 中的所有条目都是数值类型,它们可以转换为tensor张量格式

python 复制代码
x, y = torch.tensor(inputs.values), torch.tensor(outputs.values)
print("x:", x, "\ny:", y)

运行结果:

7、完整代码:

python 复制代码
import os
import torch
import pandas as pd

# 读取csv文件、对数据进行预处理,成为可以转成tensor张量的数据
# 创建一个人工数据集,并存储在csv(逗号分隔值)文件
os.makedirs(os.path.join('..', 'data'), exist_ok=True)  # 使用 os.makedirs 函数创建目录,os.path.join('..', 'data') 用于拼接路径,这里是在当前目录的上一级目录中创建名为 data 的目录,exist_ok=True 表示如果该目录已经存在,不会抛出异常。
data_file = os.path.join('..', 'data', 'house_tiny.csv')  # data_file = os.path.join('..', 'data', 'house_tiny.csv'):拼接文件路径,确定要操作的 CSV 文件的路径,该文件位于上一级目录的 data 目录下,文件名为 house_tiny.csv
with open(data_file, 'w') as f:  # 以写入模式打开指定的 CSV 文件,with 语句确保文件在使用完后会正确关闭。
    # 在 with 语句块中,通过 f.write 方法写入了 CSV 文件的表头 NumRooms, Alley, Price 以及几行数据,每行数据用逗号分隔不同的字段值,其中 NA 表示缺失值。
    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')

# 读取 csv 文件一般用 pandas库
data = pd.read_csv(data_file)
print("--------------------data--------------------")
print("data:", data)

# 为了处理缺失的数据,典型的方法包括 插值 和 删除,这里,使用插值
inputs, outputs = data.iloc[:, 0:2], data.iloc[:, 2]  # 用iloc把所有行、第0与1列拿出来放到inputs;用iloc把所有行、第2列拿出来放到outputs
inputs = inputs.fillna(inputs.mean())  # 用fillna对inputs中所有NA填一个值,填mean均值;NumRooms中的 NA 填为均值3.0;Alley是字符串,没有均值所以NA没变
print("--------------------inputs1--------------------")
print("inputs:", inputs)

# 对于inputs中的类别值或离散值,我们将"NAN"视为一个类别;缺失值也是一种值,把它变为数值;以及对于字符串的处理;把这一列里面所有出现的不同种类的数值都变成一个特征(Alley有两类值Pave、NA,那就创建2类)
inputs = pd.get_dummies(inputs, dummy_na=True)  # 创建两类后对应复制1、0
print("--------------------inputs2--------------------")
print("inputs:", inputs)

# 现在 inputs 和 outputs 中的所有条目都是数值类型,它们可以转换为tensor张量格式
x, y = torch.tensor(inputs.values), torch.tensor(outputs.values)
print("--------------------x、y--------------------")
print("x:", x, "\ny:", y)

如果此文章对您有所帮助,那就请点个赞吧,收藏+关注 那就更棒啦,十分感谢!!!

相关推荐
爱学习的徐徐8 分钟前
Python 豆瓣TOP250 爬虫类讲解
爬虫·python
老歌老听老掉牙11 分钟前
SymPy 绘图完全指南:从基础到高级应用
python·绘图·sympy
Yolo566Q13 分钟前
基于PyTorch深度学习遥感影像地物分类与目标检测、分割及遥感影像问题深度学习优化实践技术应用
pytorch·深度学习·分类
小白学大数据15 分钟前
Python爬虫技术:招标信息抓取与关键词过滤 (1)
开发语言·爬虫·python
~无忧花开~1 小时前
JavaScript学习笔记(十七):ES6生成器函数详解
开发语言·前端·javascript·笔记·学习·es6·js
电商API_180079052471 小时前
获取淘宝商品视频API接口解析:通过商品链接url获取商品视频item_video
开发语言·爬虫·python·数据挖掘·数据分析
精灵vector1 小时前
构建自定义AI客户支持助手——LangGraph 中断机制
人工智能·python
optimistic_chen2 小时前
【Java EE进阶 --- SpringBoot】Mybatis操作数据库(基础)
数据库·经验分享·spring boot·笔记·spring·java-ee·mybatis
用户8356290780512 小时前
使用Python自动化移除Excel公式,保留纯净数值
后端·python
Pocker_Spades_A2 小时前
Python快速入门专业版(五十):Python异常处理:try-except语句(捕获单一与多个异常)
开发语言·python