Python数据预处理:把csv文件变成sklearn数据集,缺失值填补,数据缩放

不想看过程的直接看总结

          • 总结

现在有个700x10的csv文件,第一行是数据的属性值,最后一列是类别。
首先导入数据,然后把它变成ndarray。

import csv
import numpy as np
from numpy import nan
csvFile = open("./breast-cancer-wisconsin.csv","r")
csv_data = csv.reader(csvFile)
cancer=np.array([i for i in csv_data])

关于Bunch这种数据类型,我们只需要填充四个参数即可生成,分别是data,target,feature_names,target_names。

#只取第1行,前9列
attribute_names=cancer[0,:9]
da=cancer[1:,:9]
data=[]
#data这个数据全是str
for i in da:
    temp=[]
    for j in i:
        if j=='?':
            temp.append(nan)
        else:
            temp.append(int(j))
    data.append(temp)

attribute_names=cancer[0,:8]
target=[]
for i in cancer[1:,9]: #除去第一行的第九列
    if i=='class1':
        target.append(0)
    if i=='class2':
        target.append(1)      
target_names=['class1','class2']

from sklearn.datasets.base import Bunch
real_data = Bunch(data=data, target=target, feature_names= attribute_names, target_names = target_names)

打印以下real_data可以发现它和sklearn其他数据包比如iris,都是同样类型的数据。
处理缺失值,缩放数据:

from sklearn.preprocessing import MinMaxScaler
from sklearn.preprocessing import Imputer
imp = Imputer(strategy='mean')
X, y =real_data.data, real_data.target
X2=imp.fit_transform(X)
X_new = MinMaxScaler().fit_transform(X2)
print(X_new)

这里用到了sklearn.preprocessing中的Imputer包,他可以采用三种不同策略填充缺失值,将数据中的nan替换成其他值:
mean: 将所有的nan值替换为矩阵制定坐标轴上元素的平均值(默认axis=0),也就是说该列其他元素的平均值来填充它。
median: 中值 填充
most_frequent: 该列出现频率最高的填充。

总结

生成Bunch数据

from sklearn.datasets.base import Bunch
your_data=Bunch(data=[[1,2,3...],[],[]],
				target=[1,0,1,0..],
				feature_names=['a', 'b', ...],
				target_names=['y1','y2'..])

处理缺失值,缩放

from sklearn.preprocessing import MinMaxScaler
from sklearn.preprocessing import Imputer
imp = Imputer(strategy='mean') # or median or most_frequent
X2 = imp.fit_transform(X)
X3 = MinMaxScaler().fit_transform(X2)

你可能感兴趣的:(统计学/数据处理/机器学习,csv,数据分析,python,数据挖掘)