机器学习 数据的采集和清洗

本人找到了一条路(不知道对错的路),采集训练的 数据和清理数据。

第一步  采集

          涉及到如何利用爬虫采集网页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()

 

你可能感兴趣的:(机器学习,机器学习,网络爬虫,数据采集)