现在有个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)