本人找到了一条路(不知道对错的路),采集训练的 数据和清理数据。
涉及到如何利用爬虫采集网页csv文件
数据是在UCI 上的 UCI官网如下http://archive.ics.uci.edu/ml/index.php 。就拿里面最热门的Iris数据来说。进入数据的下载页http://archive.ics.uci.edu/ml/machine-learning-databases/iris/,可以将iris.data右键另存为本地文件。当然还有另外一种方法,就是利用爬虫进行在http://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data采集代码如下
import os
from bokeh.models import pd
#百度到的代码,正确是正确,但是
def ReadAndSaveDataByPandas(target_url = None,save=False):
wine = pd.read_csv(target_url, header=0, sep=",")
if save == True:
'''
import os
os.getcwd() #获取当前工作路径
'''
# dt.to_csv('Result.csv') # 相对位置,保存在getwcd()获得的路径下
# dt.to_csv('C:/Users/think/Desktop/Result.csv') # 绝对位置
#这里是绝对路径 不建议如此,但是我就想保存到这 wine.to_csv("C:/Users/Administrator/Desktop/Iris.csv",
index=0,header=1)
target_url = "http://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"
ReadAndSaveDataByPandas(target_url,True)
如何利用read_csv读取文件,并转化为字典形式
利用panda库的read_csv读取文件然后再转换为我们想要的格式
import numpy as np
import pandas as pd
def getIrisData(path):
names=['1','2','3','4','target_names','target']
read=pd.read_csv(path,names=names,sep=',')
for i in range(len(read)):
if (read['target_names'][i] == 'Iris-setosa' ):
read['target'][i]=0
elif (read['target_names'][i] == 'Iris-versicolor'):
read['target'][i]= 1
else:
read['target'][i]= 2
'''
#read['target'] = pd.Categorical(read['target_names']).codes 这种写法才是完美的
#这种写法好像更好
read['target'][read['target_names']== 'Iris-setosa']=0
read['target'][read['target_names'] == 'Iris-versicolor'] = 1
read['target'][read['target_names'] == 'Iris-virginica'] = 2
'''
# print(read)
#还有这种写法啊
''' array=read.values
X = array[:, 0:4]
'''
X = np.array(read[['1','2','3','4']])
print(X)
Y=np.array(read['target'])
print(Y)
#获得花中的种类
list2=[]
for i in range(len(read['target_names'])):
if read['target_names'][i] not in list2:
list2.append(read['target_names'][i])
# print(list2)
list1=dict([('data',X),('target',Y),('feature_names',list2)])
print (list1)
return list1
#我调试的时候用的是这个路径,第一步不是的,所以要注意位置甚至是文件名。
#getIrisData('../../Data/iris.csv')
至于为什么 将数据搞成这个形式 。因为from sklearn.datasets import load_iris 里的数据也是这个形式。弄不弄弄成其他形式,暂时不知道。
处理是《机器学习系统设计》第二章的第一个代码,如下。
from matplotlib import pyplot as plt
from sklearn.datasets import load_iris
#此路径不一定是你的路径
from MLDownding.loadIris.handleIris import getIrisData
#这里是利用load_iris的数据,如果利用自己的数据,就把这段注释掉用下面那个data=。。。
data=load_iris()
#data=getIrisData('../../Data/iris.data')
features=data['data']
print(data)
feature_names=data['feature_names']
target=data['target']
pairs=[(0,1),(0,2),(0,3),(1,2),(1,3),(2,3)]
for i,(p0,p1) in enumerate (pairs):
plt.subplot(2,3,i+1)
for t,marker,c in zip(range(3),">ox","rgb"):
plt.scatter(features[target==t,p0],features[target==t,p1],marker=marker,c=c)
plt.xlabel(feature_names[p0])
plt.ylabel(feature_names[p1])
plt.xticks([])
plt.yticks([])
plt.show()