0基础动手学深度学习-李沐-ML-数据预处理

os.path.join(path, *paths)函数:
功能:

​ 拼接路径,返回值是所有成员的拼接,可以同时传入多个参数

例:
print(os.path.join('..','data0'))
print(os.path.join('..','data0','gagaga'))
#########输出为############
# ..\data0
# ..\data0\gagaga
os.makedirs(path, mode, exist_ok)函数:
功能:

​ 在path(路径)下创建文件夹

参数:
path:

​ 需要递归创建的目录,可以是相对或者绝对路径

mode:

​ 可选参数,用于设置新目录的权限。默认值为0o777,表示最大权限。

exist_ok:

​ 可选参数,如果设置为True,则即使目录已经存在也不会引发错误。默认值为False。当为默认值时如果目标目录已存在将引发 FileExistsError

例:
path = os.path.join('..','data0')
# os.path.join(path,*paths)函数返回值是文件名
os.makedirs(path)
pandas.get_dummies(data, columns,dummy_na)函数:基于one-hot编码的特征提取
功能:

​ 将离散型特征每一种取值看作一种状态,将不同值的变量转换为0/1

参数:
data:

​ 输入的数据(dataframe,series,array-like)

columns:

​ 指定所需要实现类别转换的列名

dummy_na:

​ 增加一列表示NaN值,默认值为false

例:
x = pd.DataFrame([['banana', 'monkey'], ['bone', 'dog'], ['bamboo', 'panda']], columns=['food', 'animal'])
print(x)
print(pd.get_dummies(x))
##########输出为#################
#      food  animal
# 0  banana  monkey
# 1    bone     dog
# 2  bamboo   panda
#    food_bamboo  food_banana  food_bone  animal_dog  animal_monkey  animal_panda
# 0            0            1          0           0              1             0
# 1            0            0          1           1              0             0
# 2            1            0          0           0              0             1
离散性特征与连续性特征
离散性特征:

​ 指在数据集中具有有限个取值的特征。这些特征通常表示为分类或离散的变量,而不是连续变量。

定性离散特征:

​ 也称为名义型特征,表示某个事物的类别或属性。它们没有固定的顺序或数值关系。例如,性别(男/女)、颜色(红/绿/蓝)

定量离散特征:

​ 也称为有序型特征,表示某个事物的按一定顺序排列的类别或属性。它们具有特定的数值关系,但与连续变量不同,定量离散特征之间的取值之间没有无限可能的连续性。例如,教育程度(小学/初中/高中/大学)

连续性特征:

​ 连续性特征(例如年龄、身高、温度等)

内置函数fillna(value):
功能:

​ 用于填充value到数据中。

参数:
value:

​ 缺失值(NaN)或指定值

用法示例:
1.填充缺失值为指定值:
df.fillna(value)
2.填充缺失值为前一个非缺失值:
df.fillna(method='ffill')
3.填充缺失值为后一个非缺失值:
df.fillna(method='bfill')
4.在指定的列中填充缺失值:
df['column_name'].fillna(value)
5.在指定的列中填充缺失值为前一个非缺失值:
df['column_name'].fillna(method='ffill')
6.在指定的列中填充缺失值为后一个非缺失值:
df['column_name'].fillna(method='bfill')

注意:默认情况下,fillna函数会按列进行填充,即从第一列开始,然后从上到下依次填充缺失值。

数据预处理
创建数据集:

​ 创建一个人工数据集并存储到指定目录下的CSV文件

CSV文件:

​ 每一行为一个数据每一个列为一个特征,逗号分隔值

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')          # 创建的人工数据集有四行三列
with…as…语句:
作用:

​ 简化资源管理,提供了一种确保资源在使用后被正确释放的方法,即使在出现异常的情况下也能够正常工作

底层原理:

​ with 语句实现原理建立在上下文管理器之上。

上下文管理器:

​ 一个实现__enter__和__exit__方法的类,使用with语句确保在嵌套块的末尾调用__exit__方法把文件关闭防止执行异常而占用资源。

with open('./test_runoob.txt', 'w') as file:
    file.write('hello world !')
# 以上实例将 hello world! 写到 ./test_runoob.txt 文件上。
# 执行顺序:
#   	首先调用 __enter__ 方法,然后执行 with 语句中的代码,最后调用 __exit__ 方法。 即使出现错误,也会调用 __exit__ 方法,也就是会关闭文件流。
工作流程:

​ 1. with语句后面的对象,它的方法__enter__会被自动调用

​ 2. __enter__方法返回的对象会赋值给as后面定义的变量temp

​ 3. with as代码体中的语句开始全部执行

​ 4.代码体中的代码全部执行结束后,with语句后面的对象另一个特殊方法__exit__会被自动调用

使用方式:
1.打开文件并读取内容:
with open('file.txt', 'r') as f:
    content = f.read()
    # 在with语句块内对文件进行操作   
    # 文件会在with语句块结束后自动关闭
2.写入内容到文件:
with open('file.txt', 'w') as f:
    f.write('Hello, world!')
    # 在with语句块内对文件进行操作    
    # 文件会在with语句块结束后自动关闭
读取数据集:

​ 使用pandas从创建的人工数据集目录中读取文件

import pandas as pd
 
data = pd.read_csv(data_file)# pd.read_csv()函数的返回值是一个字符串
 
print(data)
#########输出为############## 
   NumRooms Alley   Price
0       NaN  Pave  127500
1       2.0   NaN  106000
2       4.0   NaN  178100
3       NaN   NaN  140000
缺失值【NAN,(Not a Number)】处理:
处理缺失值的方式:

​ 1. 插值法

​ 2. 删除法:删除行直接忽略缺失值

插值法的例子:
inputs, outputs = data.iloc[:, 0:2], data.iloc[:, 2] 
#把人工数据集分为两组数据,前两列和所有行分为inputs(ID列不考虑在内),最后一列分为outputs
# iloc方法是根据行号和列号来获取DataFrame中的数据的方法,但这个方法使用时无需添加括号。
inputs = inputs.fillna(inputs.mean())                
#我们使用平均函数mean()返回值来填充缺失项(对一列中的所有已知数据求和取平均)
print(inputs)
################输出为############
   NumRooms Alley
0       3.0  Pave
1       2.0   NaN
2       4.0   NaN
3       3.0   NaN
数据格式转换:

​ 为了将数据集转换成张量方便训练,使用one-hot编码来赋值(利用pandas.get_dummies(data, columns)函数).

inputs = pd.get_dummies(inputs, dummy_na=True)# 特征提取
X, y = torch.tensor(inputs.values), torch.tensor(outputs.values)
print(X,y)
##############输出为############## 
(tensor([[3., 1., 0.],
         [2., 0., 1.],
         [4., 0., 1.],
         [3., 0., 1.]], dtype=torch.float64),
 tensor([127500, 106000, 178100, 140000]))
One-Hot编码
功能:

​ 将离散的分类变量转换为二进制向量表示的一种常用编码方式。在 One-Hot 编码中,对于每个不同的类别取值,都会创建一个对应的维度,并且只有一个维度的值为 1(代表归属于该类别),其他维度的值为 0。

例:

在这里插入图片描述

在上图中,读码时要每一列从上到下读取,如狗的One-Hot编码:[1, 0, 0]

好处:通过One-Hot编码可以将原始的分类变量转换为多个维度的二进制向量,便于机器学习算法对分类变量进行处理和分析。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值