什么是数据预处理?
数据预处理(data preprocessing)是指在主要的处理以前对数据进行的一些处理。一般我们得到的数据会存在有缺失值、重复值等,在使用之前需要进行数据预处理。它是一系列对数据操作的统称。
为什么要进行数据预处理?
现实世界中数据大体上都是不完整,不一致的脏数据,无法直接进行数据挖掘,或挖掘结果差强人意。为了提高数据挖掘的质量产生了数据预处理技术。
数据预处理有多种方法:
- 数据清洗:可以用来清楚数据中的噪声,纠正不一致。
- 数据集成:将数据由多个数据源合并成一个一致的数据存储,如数据仓库。
- 数据归约:可以通过如聚集、删除冗余特征或聚类来降低数据的规模。
- 数据变换:(例如,规范化)可以用来把数据压缩到较小的区间,如0.0到1.0。
这些数据处理技术在数据挖掘之前使用,大大提高了数据挖掘模式的质量,降低挖掘所需要的时间。
本章总结在学习数据清洗–使用numpy包的相关内容
数据清洗–numpy包的使用
创建数组
使用了四种创建数组的方法
- 使用np.array()生成NDarray
- 使用随机数函数生成array
- 使用arange函数创建array
- 创建特殊数组函数
np.zeros() #全0数组
np.ones() #全1数组
np.full() #全n数组
np.linspace() #线性序列数组(元素之间等差)
np.eye() #单位矩阵数组
np.diag() #对角矩阵数组
import numpy as np
'''
使用np.array()生成NDarray
'''
arr1=np.array([1,3.14,-5,2,6.2,0],ndmin=1)
arr2=np.array([[5,6,7,8,9],[4,3,2,1,0]])
'''
使用随机数函数生成array
'''
arr4=np.random.randint(10,size=(4,2))
arr5=np.random.rand(2,3,4)
arr6=np.random.uniform(size=(2,3))
arr7=np.random.uniform(1,10,size=(2,3))
arr8=np.random.random((2,3))
arr9=np.random.randn(2,3)
'''
使用arange函数创建array
'''
arr10=np.arange(1,10,2)
arr11=np.arange(12).reshape((3,4))
'''
创建特殊数组函数
np.zeros() #全0数组
np.ones() #全1数组
np.full() #全n数组
np.linspace() #线性序列数组(元素之间等差)
np.eye() #单位矩阵数组
np.diag() #对角矩阵数组
'''
arr12=np.zeros(5)
arr13=np.zeros((3,3),dtype=int)
arr14=np.full((3,5),4)
arr15=np.linspace(1,10)
arr16=np.eye(3,4,1)
'''
总结:指定数组内元素都是什么,指定形状是什么样的。
'''
查看数组的相关属性
import numpy as np
'''
数组属性介绍
ndarray.shape 返回一个包含数组维度的元组
ndarray.dtype 返回数组元素的类型
ndarray.ndim 返回数组的维数
ndarray.size 返回数组中包含元素的个数
'''
np.random.seed(123)
arr8 = np.random.randn(6)
arr9 = np.random.randint(10, size=(2, 3))
arr10 = np.random.randint(10, size=(2,3,4))
print(arr8)
print(arr9)
print(arr10)
print(arr8.shape)
print(arr9.shape)
print(arr10.shape)
print(arr8.ndim)
print(arr9.ndim)
print(arr10.ndim)
print(arr8.dtype)
print(arr9.dtype)
print(arr10.dtype)
print(arr8.size)
print(arr9.size)
print(arr10.size)
'''
numpy的矢量化功能
更简便的处理两个数组间元素的运算
原生的python列表做加法会拼接两个列表,想要实现元素的运算需要用循环。
'''
a=[1,2,3]
b=[4,5,6]
print(a+b)
c=[]
for i in range(len(a)):
c.append(a[i]+b[i])
print(c)
arr1=np.array(a)
arr2=np.array(b)
print(arr1+arr2)
'''
优点:
简洁,易理解
代码越少,出错越低
执行效果更好,效率更高。numpy代码用C 比python效率更高
'''
数组的变换操作
import numpy as np
'''
ndarray的各种变换操作
数组的维度变换 数组的类型变换 数组内元素类型变换
ndarray.reshape ndarray.tolist ndarray.astype
ndarray.resize
'''
arr=np.random.randint(1,100,(2,2))
print(arr)
print(arr.reshape((4,1)))
arr1=np.arange(1,10).reshape((3,3))
print(arr1)
arr2=np.linspace(1,10,12).reshape((3,4))
print(arr2)
arr.resize((1,4))
print(arr)
print(arr.tolist())
list(arr)
print(arr.dtype)
print(arr.astype(str))
print(arr.dtype)
数组的广播
如果满足以下条件之一,那么数组被称为可广播的。
- 如果数组不具有相同的秩,则将较低等级数组的形状维度添加1,直到两个形状具有相同的大小.
- 其中一个数组的维度大小和元素个数为1,相当于对单个标量进行广播
- 在一个数组的大小为1且另一个数组的大小大于1的任何维度中,第一个数组的行为就像沿着该维
度复制一样
明显上面说的都不像我能懂的人话
所以给一张图做解释:
import numpy as np
'''
广播功能
如果满足以下条件之一,那么数组被称为可广播的。
如果数组不具有相同的秩,则将较低等级数组的形状维度添加1,直到两个形状具有相同的大小.
其中一个数组的维度大小和元素个数为1,相当于对单个标量进行广播
在一个数组的大小为1且另一个数组的大小大于1的任何维度中,第一个数组的行为就像沿着该维
度复制一样
'''
arr=np.arange(3)
print(arr)
arr=np.arange(3)+5
print(arr)
arr1=np.ones((3,3))
print(arr1)
arr2=np.ones((3,3))+np.arange(3)
print(arr2)
arr3=np.arange(3)
print(arr3)
arr4=np.arange(3).reshape((3,1))
print(arr4)
arr5=arr3+arr4
print(arr5)
'''
1.如果运算双方都是数组,形状不一致,一个数组经过向一个方向广播后,可以得到和另一个数组一样的形状,广播可行
2.如果运算双方都是数组,形状不一致,分别向各自一个方向广播,广播后得两个数组形状相同,广播可行
3.如果运算双方,一个是数组,一个是标量,不受广播方向约束,标量可以向两个方向广播
不满足条件的数组无法进行广播操作
'''
以上就是第一天学习数据清洗的相关内容,如果有疏漏希望大佬指正,蒟蒻会认真改进。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)