(大)數(shù)據(jù)處理:從txt到數(shù)據(jù)可視化

Python 2.7
IDE Pycharm 5.0.3
numpy 1.11.0
matplotlib 1.5.1

本次可視化數(shù)據(jù)由機器學(xué)習(xí)實戰(zhàn)傾情提供(就是盜用了數(shù)據(jù)和改了一點點程序更加易讀)


前言

將txt中數(shù)據(jù)進行可視化展示用于分析需求

你只需要知道

每行的第一列數(shù)據(jù)是飛行里程莺奔,第二列是玩游戲所占百分比時間培漏,第三列是每年吃的冰激凌消耗量炉擅,第四列是某個xx覺得這類人的適合約會的感興趣程度宙攻,也就是說啦陷嘴,他一年飛40920公里蠢涝,有百分之八左右的時間在玩游戲乏苦,每年還要吃掉0.9公升哦蛉顽,這個對象xx覺得好有魅力,非常想和它約會呢矾端,就是這個意思掏击!


準(zhǔn)備食材

我用的datingTestSet.txt,是左邊那個

剛下載下來的txt是左邊那個秩铆,第四列也就是類別了砚亭,但是中文怎么轉(zhuǎn)化為右邊那個數(shù)值強度呢灯变?還是挺簡單的,掃描每一行的時候把判斷相等字符串直接替換就可以了捅膘,詳細(xì)請看如下代碼片段添祸,這里單獨拿出來看一下。

#將評價轉(zhuǎn)化為數(shù)字
        if listFromLine[3] == 'largeDoses':
            listFromLine[3] =3
        elif listFromLine[3] == 'smallDoses':
            listFromLine[3]=2
        else:
            listFromLine[3]=1

經(jīng)過轉(zhuǎn)化之后寻仗,形式應(yīng)該和右邊那個一樣了刃泌,非常想約會是3,一般是2署尤,不想是1耙替,就醬紫。這也就是類別了沐寺。


從txt到存入array數(shù)組

我現(xiàn)在接觸到的保存在txt中數(shù)據(jù)的有(大)數(shù)據(jù)處理:從txt到MySql的數(shù)據(jù)預(yù)處理遷徙中的北京市一個月的出租車GPS數(shù)據(jù)(350G)林艘,高光譜數(shù)據(jù)AVIRIS遙感圖像數(shù)據(jù)(.mat)也是可以轉(zhuǎn)化為txt的,所以如何將txt數(shù)據(jù)清洗后存入到array也好混坞,存入到database也好狐援,這都是數(shù)據(jù)處理后續(xù)工作避不開的前提,廢話不多說究孕,開始啥酱。

完整代碼

# -*- coding: utf-8 -*-
from numpy import *
import matplotlib.pyplot as plt

def file2matrix(filename):
    fr = open(filename,'r')
    arrayOlines = fr.readlines()
    numberOfLines = len(arrayOlines)
    returnMat = zeros((numberOfLines,3)) #構(gòu)造全零陣來存放數(shù)
    classLabelVector = [] #開辟容器
    index = 0

    for line in arrayOlines:
        #清洗數(shù)據(jù)
        line = line.strip()
        listFromLine = line.split('\t')
        #將評價轉(zhuǎn)化為數(shù)字
        if listFromLine[3] == 'largeDoses':
            listFromLine[3] =3
        elif listFromLine[3] == 'smallDoses':
            listFromLine[3]=2
        else:
            listFromLine[3]=1
        #存入數(shù)據(jù)到list
        returnMat[index,:] = listFromLine[0:3] #三個特征分別存入一行的三個列
        classLabelVector.append(int(listFromLine[3])) #最后一行是類別標(biāo)簽

        index +=1
    return returnMat,classLabelVector


#將喜歡強度轉(zhuǎn)化為顏色
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_rgb

datingDataMat,datingLabels = file2matrix('C:\\Users\\MrLevo\\Desktop\\machine_learning_in_action\\Ch02\\datingTestSet.txt')


##################創(chuàng)建圖表1#####################
plt.figure(1) #創(chuàng)建圖表1

ax1 = plt.subplot(1,2,1) # 圖表1中創(chuàng)建子圖1
plt.title("original color")
plt.xlabel('play game/time %')
plt.ylabel('ice cream cost/week')

ax2 = plt.subplot(1,2,2) # 圖表1中創(chuàng)建子圖2
plt.title("improved color")
plt.xlabel('play game/time %')
plt.ylabel('ice cream cost/week')

###################創(chuàng)建圖表2####################
plt.figure(2) #創(chuàng)建圖表2

ax3 = plt.subplot(2,2,1) # 圖表2中創(chuàng)建子圖1
plt.title("play game & ice cream cost")
plt.xlabel('play game/time %')
plt.ylabel('ice cream cost/week')

ax4 = plt.subplot(2,2,2) # 圖表2中創(chuàng)建子圖2
plt.title("fly distance & play game")
plt.xlabel('fly distance/year')
plt.ylabel('play game/time %')

ax5 = plt.subplot(2,2,3) # 圖表2中創(chuàng)建子圖2
plt.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散點圖展示第二列和第三列數(shù)據(jù)
ax2.scatter(datingDataMat[:,1],datingDataMat[:,2],s=15*array(datingLabels),color=ColorOfDatingLable(datingLabels)) #scatter散點圖展示第二列和第三列數(shù)據(jù),第一個15*array(datingLabels)用來表現(xiàn)不同標(biāo)簽的不同半徑
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()

產(chǎn)生的效果圖如下

三幅對比圖

對比圖分析

從上圖中可以看出,紅點的密集區(qū)域以及各個維度之間的聯(lián)系厨诸,其中吃不吃冰激凌镶殷,這個貌似并不能作為評判的影響性因素,因為冰激凌量的多少微酬,完全符合了均勻分布绘趋。唯一有價值的算是第二幅圖,我們可以看出颗管,飛行時間在40000左右陷遮,玩游戲時間所占比例為10%左右,xx女士比較喜歡這樣類型的男士垦江,并且表現(xiàn)出了極大興趣帽馋,而飛行時間過長,或者游戲時間很短比吭,卻不受她的青睞绽族,我們這里揣測一下xx女士的想法,她喜歡的類型應(yīng)該是比較活潑的衩藤,見多識廣吧慢,但又能不經(jīng)常出差希望陪伴在自己身邊的男士,從飛行距離上看出赏表,適當(dāng)?shù)穆眯心茉鲩L見識娄蔼,會更有趣怖喻,而過長的飛行時間底哗,只能表明岁诉,他要么在出差,要么就屬于那種全世界游玩的人跋选,這樣的不定性而缺乏安全感涕癣,我想這也就是xx女士并不喜歡這類男士的原因吧,而飛行時間很短前标,缺乏對外界的認(rèn)識坠韩,讓xx女士覺得這類男士缺乏見識和有趣度,你想炼列,一個常年待在家的人只搁,會有多少有趣呢,俗話說得好俭尖,讀萬卷書不如行萬里路氢惋,我想也是xx女士判別一個人是否有趣的因素吧,而游戲時間上來說稽犁,過短的游戲時間焰望,可能會讓xx女士認(rèn)為男士缺乏幽默,激情已亥,智商的表現(xiàn)熊赖,畢竟游戲很多都是對一個人反應(yīng)能力,情商虑椎,布局能力的各方面體現(xiàn)震鹉,所以,xx女士認(rèn)為一個不玩游戲捆姜,并且飛行距離超長的男士传趾,只能判斷為長期出差在外,所以并不喜歡這類娇未,而她對那些‘死宅’卻保持著一般的興趣墨缘,這點說明,死宅也有春天啊零抬,哈哈哈镊讼。


改進代碼

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

ax1.scatter(datingDataMat[:,1],datingDataMat[:,2],15*array(datingLabels),15*array(datingLabels)) #scatter散點圖展示第二列和第三列數(shù)據(jù)

第一個好理解蝶棋,15*array(datingLabels)它來規(guī)定點的尺度大小,而第二個的15*array(datingLabels)來表示顏色忽妒?很抱歉玩裙,我查找scatter顏色參數(shù)的過程中兼贸,沒有看到這個表示方法的,可能我沒找到吧吃溅,如果有人知道請告訴我一聲為什么可以這么表示顏色溶诞。我目前知道的表示顏色的參數(shù)可以有類似“r”,或者三原色的數(shù)值表示的决侈,并沒有看到單數(shù)值表示的螺垢。所以我改進了一下,寫了個ColorOfDatingLable函數(shù)赖歌,里面是將數(shù)值轉(zhuǎn)換為顏色值對應(yīng)起來枉圃。所用的語句是這個

ax2.scatter(datingDataMat[:,1],datingDataMat[:,2],s=15*array(datingLabels),color=ColorOfDatingLable(datingLabels)) #scatter散點圖展示第二列和第三列數(shù)據(jù),第一個15*array(datingLabels)用來表現(xiàn)不同標(biāo)簽的不同半徑

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

新舊函數(shù)對比

相比較而言庐冯,修改后的圖更加清晰孽亲,特色明顯。


你可能還需要知道


致謝

numpy快速入門
@星星點燈--Python圖表繪制:matplotlib繪圖庫入門
@MrLevo520--機器學(xué)習(xí)之K-近鄰算法(Python描述)基礎(chǔ)
matplotlib官方文檔
@MrLevo520--(大)數(shù)據(jù)處理:從txt到MySql的數(shù)據(jù)預(yù)處理遷徙

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市犯祠,隨后出現(xiàn)的幾起案子旭等,更是在濱河造成了極大的恐慌,老刑警劉巖衡载,帶你破解...
    沈念sama閱讀 211,423評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件搔耕,死亡現(xiàn)場離奇詭異,居然都是意外死亡痰娱,警方通過查閱死者的電腦和手機弃榨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,147評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來梨睁,“玉大人鲸睛,你說我怎么就攤上這事∑潞兀” “怎么了官辈?”我有些...
    開封第一講書人閱讀 157,019評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長遍坟。 經(jīng)常有香客問我拳亿,道長,這世上最難降的妖魔是什么愿伴? 我笑而不...
    開封第一講書人閱讀 56,443評論 1 283
  • 正文 為了忘掉前任肺魁,我火速辦了婚禮,結(jié)果婚禮上隔节,老公的妹妹穿的比我還像新娘鹅经。我一直安慰自己寂呛,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,535評論 6 385
  • 文/花漫 我一把揭開白布瘾晃。 她就那樣靜靜地躺著贷痪,像睡著了一般。 火紅的嫁衣襯著肌膚如雪酗捌。 梳的紋絲不亂的頭發(fā)上呢诬,一...
    開封第一講書人閱讀 49,798評論 1 290
  • 那天,我揣著相機與錄音胖缤,去河邊找鬼。 笑死阀圾,一個胖子當(dāng)著我的面吹牛哪廓,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播初烘,決...
    沈念sama閱讀 38,941評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼涡真,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了肾筐?” 一聲冷哼從身側(cè)響起哆料,我...
    開封第一講書人閱讀 37,704評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎吗铐,沒想到半個月后东亦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,152評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡唬渗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,494評論 2 327
  • 正文 我和宋清朗相戀三年典阵,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片镊逝。...
    茶點故事閱讀 38,629評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡壮啊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出撑蒜,到底是詐尸還是另有隱情歹啼,我是刑警寧澤,帶...
    沈念sama閱讀 34,295評論 4 329
  • 正文 年R本政府宣布座菠,位于F島的核電站狸眼,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏辈灼。R本人自食惡果不足惜份企,卻給世界環(huán)境...
    茶點故事閱讀 39,901評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望巡莹。 院中可真熱鬧司志,春花似錦甜紫、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至激才,卻和暖如春拓型,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背瘸恼。 一陣腳步聲響...
    開封第一講書人閱讀 31,978評論 1 266
  • 我被黑心中介騙來泰國打工劣挫, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人东帅。 一個月前我還...
    沈念sama閱讀 46,333評論 2 360
  • 正文 我出身青樓压固,卻偏偏與公主長得像,于是被迫代替她去往敵國和親靠闭。 傳聞我的和親對象是個殘疾皇子帐我,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,499評論 2 348

推薦閱讀更多精彩內(nèi)容