(大)資料處理:從txt到資料視覺效果

來源:互聯網
上載者:User

Python 2.7
IDE Pycharm 5.0.3
numpy 1.11.0
matplotlib 1.5.1

本次可視化資料由機器學習實戰傾情提供(就是盜用了資料和改了一點點程式更加易讀) 前言

將txt中資料進行可視化展示用於分析需求
你只需要知道

每行的第一列資料是飛行裡程,第二列是玩遊戲所佔百分比時間,第三列是每年吃的冰激淩消耗量,第四列是某個xx覺得這類人的適合約會的感興趣程度,也就是說啦,他一年飛40920公裡,有百分之八左右的時間在玩遊戲,每年還要吃掉0.9公升哦,這個對象xx覺得好有魅力,非常想和它約會呢,就是這個意思。 準備食材

剛下載下來的txt是左邊那個,第四列也就是類別了,但是中文怎麼轉化為右邊那個數值強度呢。還是挺簡單的,掃描每一行的時候把判斷相等字串直接替換就可以了,詳細請看如下程式碼片段,這裡單獨拿出來看一下。

#將評價轉化為數字        if listFromLine[3] == 'largeDoses':            listFromLine[3] =3        elif listFromLine[3] == 'smallDoses':            listFromLine[3]=2        else:            listFromLine[3]=1

經過轉化之後,形式應該和右邊那個一樣了,非常想約會是3,一般是2,不想是1,就醬紫。這也就是類別了。 從txt到存入array數組

我現在接觸到的儲存在txt中資料的有(大)資料處理:從txt到MySql的資料預先處理遷徙中的北京市一個月的出租車GPS資料(350G),高光譜資料AVIRIS遙感映像資料(.mat)也是可以轉化為txt的,所以如何將txt資料清洗後存入到array也好,存入到database也好,這都是資料處理後續工作避不開的前提,廢話不多說,開始。 完整代碼

# -*- coding: utf-8 -*-from numpy import *import matplotlib.pyplot as pltdef file2matrix(filename):    fr = open(filename,'r')    arrayOlines = fr.readlines()    numberOfLines = len(arrayOlines)    returnMat = zeros((numberOfLines,3)) #構造全零陣來存放數    classLabelVector = [] #開闢容器    index = 0    for line in arrayOlines:        #清洗資料        line = line.strip()        listFromLine = line.split('\t')        #將評價轉化為數字        if listFromLine[3] == 'largeDoses':            listFromLine[3] =3        elif listFromLine[3] == 'smallDoses':            listFromLine[3]=2        else:            listFromLine[3]=1        #存入資料到list        returnMat[index,:] = listFromLine[0:3] #三個特徵分別存入一行的三個列        classLabelVector.append(int(listFromLine[3])) #最後一行是類別標籤        index +=1    return returnMat,classLabelVector#將喜歡強度轉化為顏色def ColorOfDatingLable(num):    datingLabels_rgb = []    for i in range(len(num)):        if num[i]==3:            datingLabels_rgb.append('red')        elif num[i]==2:            datingLabels_rgb.append('green')        else:            datingLabels_rgb.append('black')    return datingLabels_rgbdatingDataMat,datingLabels = file2matrix('C:\\Users\\MrLevo\\Desktop\\machine_learning_in_action\\Ch02\\datingTestSet.txt')##################建立圖表1#####################plt.figure(1) #建立圖表1ax1 = plt.subplot(1,2,1) # 圖表1中建立子圖1plt.title("original color")plt.xlabel('play game/time %')plt.ylabel('ice cream cost/week')ax2 = plt.subplot(1,2,2) # 圖表1中建立子圖2plt.title("improved color")plt.xlabel('play game/time %')plt.ylabel('ice cream cost/week')###################建立圖表2####################plt.figure(2) #建立圖表2ax3 = plt.subplot(2,2,1) # 圖表2中建立子圖1plt.title("play game & ice cream cost")plt.xlabel('play game/time %')plt.ylabel('ice cream cost/week')ax4 = plt.subplot(2,2,2) # 圖表2中建立子圖2plt.title("fly distance & play game")plt.xlabel('fly distance/year')plt.ylabel('play game/time %')ax5 = plt.subplot(2,2,3) # 圖表2中建立子圖2plt.title("fly distance & ice cream cost")plt.xlabel('fly distance/year')plt.ylabel('ice cream cost/week')#plt.scatter(x[i],y[i],marker = 樣式,s=大小半徑,color =(np.random.rand(1,3)),label = str(i+1))ax1.scatter(datingDataMat[:,1],datingDataMat[:,2],15*array(datingLabels),15*array(datingLabels)) #scatter散佈圖展示第二列和第三列資料ax2.scatter(datingDataMat[:,1],datingDataMat[:,2],s=15*array(datingLabels),color=ColorOfDatingLable(datingLabels)) #scatter散佈圖展示第二列和第三列資料,第一個15*array(datingLabels)用來表現不同標籤的不同半徑ax3.scatter(datingDataMat[:,1],datingDataMat[:,2],s=15*array(datingLabels),color=ColorOfDatingLable(datingLabels),label='largeDoses/smallDoses/didntLike')ax4.scatter(datingDataMat[:,0],datingDataMat[:,1],s=15*array(datingLabels),color=ColorOfDatingLable(datingLabels),label='largeDoses/smallDoses/didntLike')ax5.scatter(datingDataMat[:,0],datingDataMat[:,2],s=15*array(datingLabels),color=ColorOfDatingLable(datingLabels),label='largeDoses/smallDoses/didntLike')ax3.legend(loc='upper right')ax4.legend(loc='upper right')ax5.legend(loc='upper right')plt.show()

產生的效果圖如下

對比圖分析

從上圖中可以看出,紅點的密集地區以及各個維度之間的聯絡,其中吃不吃冰激淩,這個貌似並不能作為評判的影響性因素,因為冰激淩量的多少,完全符合了均勻分布。唯一有價值的算是第二幅圖,我們可以看出,飛行時間在40000左右,玩遊戲時間所佔比例為10%左右,xx女士比較喜歡這樣類型的男士,並且表現出了極大興趣,而飛行時間過長,或者遊戲時間很短,卻不受她的青睞,我們這裡揣測一下xx女士的想法,她喜歡的類型應該是比較活潑的,見多識廣,但又能不經常出差希望陪伴在自己身邊的男士,從飛行距離上看出,適當的旅行能增長見識,會更有趣,而過長的飛行時間,只能表明,他要麼在出差,要麼就屬於那種全世界遊玩的人,這樣的不定性而缺乏安全感,我想這也就是xx女士並不喜歡這類男士的原因吧,而飛行時間很短,缺乏對外界的認識,讓xx女士覺得這類男士缺乏見識和有趣度,你想,一個常年待在家的人,會有多少有趣呢,俗話說得好,讀萬卷書不如行萬裡路,我想也是xx女士判別一個人是否有趣的因素吧,而遊戲時間上來說,過短的遊戲時間,可能會讓xx女士認為男士缺乏幽默,激情,智商的表現,畢竟遊戲很多都是對一個人反應能力,情商,布局能力的各方面體現,所以,xx女士認為一個不玩遊戲,並且飛行距離超長的男士,只能判斷為長期出差在外,所以並不喜歡這類,而她對那些‘死宅’卻保持著一般的興趣,這點說明,死宅也有春天啊,哈哈哈。 改進代碼

畫散點陣scatter來說,它的參數設定是這樣的:
#plt.scatter(x[i],y[i],marker = 樣式,s=大小半徑,color =顏色,label = 點備忘
而書中的有一行代碼是這樣的,我相信也有小夥伴們覺得這個很奇怪:

ax1.scatter(datingDataMat[:,1],datingDataMat[:,2],15*array(datingLabels),15*array(datingLabels)) #scatter散佈圖展示第二列和第三列資料

第一個好理解,15*array(datingLabels)它來規定點的尺度大小,而第二個的15*array(datingLabels)來表示顏色。很抱歉,我尋找scatter顏色參數的過程中,沒有看到這個表示方法的,可能我沒找到吧,如果有人知道請告訴我一聲為什麼可以這麼表示顏色。我目前知道的表示顏色的參數可以有類似“r”,或者三原色的數值表示的,並沒有看到單數值表示的。所以我改進了一下,寫了個ColorOfDatingLable函數,裡面是將數值轉換為顏色值對應起來。所用的語句是這個

ax2.scatter(datingDataMat[:,1],datingDataMat[:,2],s=15*array(datingLabels),color=ColorOfDatingLable(datingLabels)) #scatter散佈圖展示第二列和第三列資料,第一個15*array(datingLabels)用來表現不同標籤的不同半徑

他們兩的對比圖我也放在一塊比較了,如圖顯示

相比較而言,修改後的圖更加清晰,特色明顯。 你可能還需要知道 一些numpy的常用方式,請見numpy快速入門 matplotlib的常用例子,致謝@星星點燈–Python圖表繪製:matplotlib繪圖庫入門 它來自於機器學習之K-近鄰演算法(Python描述)基礎並且只是其中處理資料的一部分 matplotlib官方文檔 致謝

numpy快速入門
@星星點燈–Python圖表繪製:matplotlib繪圖庫入門
@MrLevo520–機器學習之K-近鄰演算法(Python描述)基礎
matplotlib官方文檔
@MrLevo520–(大)資料處理:從txt到MySql的資料預先處理遷徙

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.