NumPy :一个用Python实现的科学计算包
1. 一个强大的N维数组对象Array
2. 快速的数学运算阵列
3. 实用的线性代数、傅里叶变换和随机数生产函数
pandas : 解决数据分析的数据分析包
1. 处理缺失数据
2. 可以让数据规范化、明确化
3. 数据分割、合并
4. 加载Excel文件(xxx.csv),数据库和保存/加载数据从超速 HDF5格式
5. 生成日期范围和频率转换,移动窗口统计,线性回归移动窗口,日期转移和滞后等。
sklearn.preprocessing:数据预处理
- 关于 sklearn 更多内容
- 这里主要用来处理缺失数据(常用的三种方法)
- 删除 :最简单最直接的方法,很多时候也是最有效的方法,这种做法的缺点是可能会导致信息丢失。
- 补全 :平均数、中位数、众数、最大值、最小值、固定值、插值等等。用规则或模型将缺失数据补全,这种做法的缺点是可能会引入噪声
- 忽略 :有一些模型,如随机森林,自身能够处理数据缺失的情况,在这种情况下不需要对缺失数据做任何的处理,这种做法的缺点是在模型的选择上有局限。
Imputer :sklearn.preprocessing中的一个类,提供了基本的策略将缺失值(NaN/nan),使用均值、中值或最常见的价值缺失值的行或列
LabelEncoder :对不连续的数字或者文本进行编号
OneHotEncoder:用于将表示分类的数据扩维
OneHotEncoder 输入必须是int数组,把类别数据转换成多列0,1数据。
LabelEncoder,把数据转化成int整形
源数据 Data.csv
第2列和第三列中分别有一项数据是空白的,这就是缺失数据(NaN/nan)
Python:
首先在右侧File explorer 找到你的数据所在文件夹
在代码中导入数据
#处理矩阵
import numpy as np
#数据可视化--画图
import matplotlib.pyplot as plt
#解决数据分析
import pandas as pd
dataset = pd.read_csv('Data.csv')
# .iloc[] 根据索引选择的位置
# 获取到最后一个之前-1表示倒数第一
X = dataset.iloc[:,:-1].values
# 单独拿出最后一列数据 Purchased ,Purchased的索引是3
# [:,3] 所有类的第三列的所有数据
y = dataset.iloc[:,3].values
#处理缺失数据
from sklearn.preprocessing import Imputer
# strategy 补缺值方式 mean(默认) 平均值 median 中值 most_frequent 出现次数最多的
# axis 0(默认) - 列 1 - 行
imputer = Imputer(missing_values = 'NaN', strategy = 'mean', axis = 0, copy = True)
#Country 只有3种
imputer = imputer.fit(X[:, 1:3])
X[:, 1:3] = imputer.transform(X[:, 1:3])
#数据规范化
#OneHotEncoder - 用于将表示分类的数据扩维
#LabelEncoder - 对不连续的数字或者文本进行编号
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
labelencoder_X = LabelEncoder()
#用LabelEncoder 把 需要转换的第一列转化成int型数组
X[:, 0] = labelencoder_X.fit_transform(X[:, 0])
onehotencoder = OneHotEncoder(categorical_features = [0])
X = onehotencoder.fit_transform(X).toarray()
labelencoder_y = LabelEncoder()
y = labelencoder_y.fit_transform(y)
缺失数据就已经通过求平局值的方式补全,并且把Country转成了所需要的数字代表。
sklearn.cross_validation.train_test_split 把数据集分成训练集和测试集
# 把数据集分成训练集和测试集
from sklearn.cross_validation import train_test_split
# test_size 测试数据20%
#random_state 当别人重新运行你的代码的时候就能得到完全一样的结果,复现和你一样的过程,如果你设置为 默认的None,则会随机选择一个种子,准确度可能会有波动
# 避免过拟合,采用交叉验证,验证集占训练集20%,固定随机种子(random_state)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 0)