# -*- coding: utf-8 -*-
"""
Created on Thu Feb 28 15:57:14 2019
@author:
"""
from sklearn.feature_extraction import DictVectorizer
import csv
from sklearn import preprocessing
from sklearn import tree
from sklearn.externals.six import StringIO
#文件读取
alldata=open(r'E:\Python exc\data.csv','rt')
reader = csv.reader(alldata)
headers=next(reader)
print(headers)
featureList=[]
labelList=[]
for row in reader:
labelList.append(row[len(row)-1])
rowDict={}
for i in range(1,len(row)-1):
rowDict[headers[i]]=row[i]
featureList.append(rowDict)
print(featureList)
#vectorize file
#vec = DictVectorizer
#dummyX = vec.fit_transform(featureList).toarray()
#print("dummyX:"+ str(dummyX))
#print(vec.get_feature_names())
vec = DictVectorizer()
dummyX = vec.fit_transform(featureList).toarray()
print("dummyX : " + str(dummyX))
print ("feature mapping : " + str(vec.get_feature_names()))
print("labelList:"+str(labelList))
#vectorize classlabels
lb = preprocessing.LabelBinarizer()
dummyY = lb.fit_transform(labelList)
print("dummyY :"+ str(dummyY))
#tree分类器,ID3算法
clf = tree.DecisionTreeClassifier(criterion = "entropy")
clf = clf.fit(dummyX,dummyY)
print("clf:" + str(clf))
#创建dot文件并输出树数据
with open('treeclass.dot','w') as f:
f = tree.export_graphviz(clf, feature_names = vec.get_feature_names() , out_file = f)
#dot -Tpdf E:\Python exc\treeclass.dot -o E:\Python exc\treeclass.pdf
testSet = open(r'E:\Python exc\test.csv','rt')
rea = csv.reader(testSet)
testList = []
for row in rea:
#将每一行的结果放入labelList
labelList.append(row[len(row)-1])
#对每一行数据创建一个字典(将每行特征数据转为JSON格式),将headers中的字段与实际值对应 如age:youth
rowDict = {}
#i从1开始,取消RID的影响
for i in range(1,len(row)-1):
rowDict[headers[i]] = row[i]
testList.append(rowDict)
# print testList
#把testList向量化
vec = DictVectorizer()
testX = vec.fit_transform(testList).toarray()
print("testX : " + str(testX))
predictSet = clf.predict(testX)
print (predictSet)
注:将Dtree输出为dot文件,并将其转化为PDF格式:安装Graphviz:http://Graphviz.org/ 并配置环境变量。