1.实现数据集划分代码如下:
#按照给定的特征划分数据集
def splitDataSet(dataSet,feature,value):
reDataSet=[]
for featureVector in dataSet:
if featureVector[feature]==value:
reduceFeature=featureVector[:feature]
reduceFeature.extend(featureVector[feature+1:])
reDataSet.append(reduceFeature)
return reDataSet
测试函数代码如下:
dataSet=[[1,1,'yes'],[1,1,'yes'],[1,0,'no'],[0,1,'no'],[0,1,'no']]
labels=['no surfacing','flippers']
reDataSet1=splitDataSet(dataSet,0,1)
reDataSet2=splitDataSet(dataSet,0,0)
print(reDataSet1)
print(reDataSet2)
运行结果:
[[1, 'yes'], [1, 'yes'], [0, 'no']]
[[1, 'no'], [1, 'no']]
2.代码解析:
1.函数的三个参数:待划分的数据集、划分数据集的特征、划分数据集的特征值。
2.python语言不考虑内存分配的问题。
3.python语言在函数中传递的是列表的引用,在函数内部对列表进行修改,将会影响列表对象的整个生存周期。为了消除这个影响,不修改原始数据集,所以在函数的开始声明一个新列表对象。
4.数据集这个列表中的各个元素也是一个列表。遍历数据集中的每个元素,一旦发现符合要求的值,则将其添加到新建的列表中。用if语句将符合特征的数据抽取出来。
5.列表的append和extend方法的区别:
>>> #append
>>> list1=[1,2,3]
>>> list2=['a','b','c']
>>> list1.append(list2)
>>> list1
[1, 2, 3, ['a', 'b', 'c']]
>>> #extend
>>> list1=[1,2,3]
>>> list2=['a','b','c']
>>> list1.extend(list2)
>>> list1
[1, 2, 3, 'a', 'b', 'c']