day1
import numpy as np
import pandas as pd
dataset = pd.read_csv('Data.csv',header = 0) # header是选从哪一行开始作为第一行
# dataset是一个dataframe类型
#dataset = pd.read_csv('Data.csv', names=["编号", "姓名", "地址", "日期"]) #names用于第一行不是列名的情况
# iloc[ : , : ] 前面的冒号就是取行数,后面的冒号是取列数
X = dataset.iloc[ : , :-1].values #加上.values就可以把这个处理成数组的形式来使用了
Y = dataset.iloc[ : , 3].values
## 由于有一些数据项是缺失的,所以我们需要对这些缺失的数据项补全
# from sklearn.preprocessing import Imputer 报错
# 在sklearn的0.22以上版本的sklearn去除了Imputer类,我们可以使用SimpleImputer类代替。或者降级回版本sklearn 0.19
print(X)
print("------------处理Nan值-------------------")
from sklearn.impute import SimpleImputer
# imputer = Imputer(missing_values = "NaN", strategy = "mean", axis = 0)之前版本这里axis = 0表示按列进行
imputer = SimpleImputer(missing_values = np.nan, strategy = "mean") # 新版本得用np.nan
imputer = imputer.fit(X[ : , 1:3])
X[ : , 1:3] = imputer.transform(X[ : , 1:3])
# 返回值为SimpleImputer()类,通过fit(X)方法可以计算X矩阵的相关值的大小,以便填充其他缺失数据矩阵时进行使用
# 填补缺失值,一般使用该方法前要先用fit()方法对矩阵进行处理
print(X)
print("----------------将字母那种也处理成数据--------------------")
## 下一步处理标签值,由于yes/no这种数据没法利用,所以需要稍微处理一下
from sklearn.preprocessing import LabelEncoder,OneHotEncoder
from sklearn.compose import ColumnTransformer
labelencoder_X = LabelEncoder()
X[ : , 0] = labelencoder_X.fit_transform(X[ : , 0])
print(X)
print("----------------独热编码-------------------------------")
"""
ColumnTransformer(transformers, -->(名称,转换器,列)元组的列表,指定要应用于数据子集的转换器对象。
remainder=‘drop’, -->默认为’drop’,未指定的列将被删除.通过指定
remainder=‘passthrough’,所有未指定的剩余列transformers将自动通过)
"""
#onehotencoder = OneHotEncoder(categorical_features = [0]) #这个意思是应用到第0列上
#X = onehotencoder.fit_transform(X).toarray()
## sklearn变了好多,可以用ColumnTransformer
ct = ColumnTransformer([('my_ohe', OneHotEncoder(), [0])], remainder='passthrough')
# remainder = 'passthrough会把剩下的也加进来
X = ct.fit_transform(X) #.toarray() 这里就不要加.toarray()了
labelencoder_Y = LabelEncoder()
Y = labelencoder_Y.fit_transform(Y)
print(X)
print(Y)
print("----------------将数据集分割为训练集和测试集---------------------------")
from sklearn.model_selection import train_test_split
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size = 0.2, random_state=0)
# test_size表示测试集的比例,同理train_size表示训练集的比例
# random_state这一项只要有个值就是每次划分都一样,如果没有值,每次划分就不一样
print(X_train)
print("*********")
print(X_test)
print("**********")
print(Y_train)
print("********")
print(Y_test)
print("-----------特征缩放-------------------")
'''
大多数机器学习算法在计算中使用两个点之间的欧氏距离,特征在幅度,单位和范围上引起了很大的变化
所以我们需要一个特征缩放
'''
from sklearn.preprocessing import StandardScaler
sc_X = StandardScaler()
X_train = sc_X.fit_transform(X_train)
X_test = sc_X.fit_transform(X_test)
print(X_train)
print("****")
print(X_test)