記錄我是如何轉型大數據分析(二)——iris

在學習數據分析的過程中,iris數據算是我第一個接觸的比較官方的數據來源。這是一個關於鳶尾花的數據,有五個屬性:花瓣的長和寬、萼片的長和寬、花的三類。其中三類鳶尾花分別是:setosa, versicolor, virginica。

資料庫下載鏈接(點擊這裡)或者可以直接百度iris data。

美麗的鳶尾花

這裡我用到的python庫有

1、pandas

2、matploylib

3、seaborn

4、sklearn

iris = pd.read_csv(file_path,header=None)iris.head()

我這裡的數據沒有列名稱,所以我自己手動更改了列名稱

col_list = [sepal length in cm,sepal width in cm,petal length in cm,petal width in cm,class]iris.columns = col_list#很喜歡describe這個功能,可以從宏觀上很快的瀏覽我們的數據iris.describe()

這是總體的數據,沒有按照花的品種分類。我們可以看到總共有150條數據。

set(iris.loc[:,class])返回數據:{setosa, versicolor, virginica}

接下來我想要把數據按照品種分開, 這裡我用到了groupby

group = iris.groupby(class)group = group.agg({sepal length in cm:np.average, sepal width in cm:np.average, petal length in cm:np.average, petal width in cm:np.average})print group

下面我們來看下每個品種,花瓣的長和寬的關係是怎樣的

#篩選setosa的數據,並作散點圖a = iris[iris[class]==setosa]ax = a.plot(kind="scatter",x = sepal length in cm,y =sepal width in cm,label = seotsa)#篩選versicolor的數據,並作散點圖b = iris[iris[class]==versicolor]b.plot(kind="scatter",x = sepal length in cm,y =sepal width in cm,color = red,label = versicolor,ax = ax)#篩選virginica的數據,並作散點圖c = iris[iris[class]==virginica]c.plot(kind="scatter",x = sepal length in cm,y =sepal width in cm,color = green,label = "virginica",ax = ax)

同理,我們可以畫出花萼的長和寬的關係,這裡我用了另外一種方法:

sns.FacetGrid(iris,hue=class,size =5).map(plt.scatter,petal length in cm,petal width in cm).add_legend()

sns.pairplot(iris,hue =class)

將4個變數兩兩對比,可以看到藍色,也就是setosa和其他兩類很容易區分開來,但是紅色和綠色有點不好區分開。

接下來我們想要看看,是否可以根據花瓣的長和寬、萼片的長和寬來判斷屬於哪一類品種。

mapping = {setosa:1, versicolor:2, virginica:3}iris[map] = iris.loc[:,class].map(mapping)iris.head()

這裡我們將花的品種轉化為1,2,3類,加入了新的一列map

我們將我們的數據分成兩塊,我是這樣理解的,一塊是放特徵數據,一塊是放判斷結果

data = iris.iloc[:,0:4]target = iris.iloc[:,5]

from sklearn.linear_model import LogisticRegression #邏輯回歸from sklearn.cross_validation import train_test_split#分類訓練值,測試值from sklearn.metrics import classification_report #分析報告from sklearn.metrics import confusion_matrix #混淆矩陣

x_train,x_test,y_train,y_test = train_test_split(data,target)lr =LogisticRegression(C=10)lr.fit(data,target)pre_y = lr.predict(x_test)print classification_report(y_test,pre_y)

1號類型的,準確率和召回率都是100%,很容易區分,但是2,3類型,不能做到100%準確

cnf = confusion_matrix(y_test,pre_y)plt.matshow(cnf)

之後我應該要做一個AUC,ROC分析,這一段我還沒有完全理解,所以給自己留個坑,下次繼續填。

最後放一個鳶(yuan)尾花的百度百科,至少做完一個項目,還是要了解做的是啥吧。

狀態:找工作中

晚安


推薦閱讀:

【谷歌機器學習課程公開了!】Google AI 教育項目今起免費開放,完美支持中文
條件隨機場CRF
崛起中的機器文明
複習:NN和BP
嘗試克服一下小夥伴對神經網路的恐懼No.26

TAG:Python | 數據分析 | 機器學習 |