Python數(shù)據(jù)可視化的10種技能

image

今天我來(lái)給你講講Python的可視化技術(shù)。

如果你想要用Python進(jìn)行數(shù)據(jù)分析椎侠,就需要在項(xiàng)目初期開始進(jìn)行探索性的數(shù)據(jù)分析,這樣方便你對(duì)數(shù)據(jù)有一定的了解汰蜘。其中最直觀的就是采用數(shù)據(jù)可視化技術(shù),這樣枷莉,數(shù)據(jù)不僅一目了然,而且更容易被解讀召衔。同樣在數(shù)據(jù)分析得到結(jié)果之后祭陷,我們還需要用到可視化技術(shù)苍凛,把最終的結(jié)果呈現(xiàn)出來(lái)。

可視化視圖都有哪些颗胡?

按照數(shù)據(jù)之間的關(guān)系毫深,我們可以把可視化視圖劃分為4類,它們分別是比較毒姨、聯(lián)系哑蔫、構(gòu)成和分布。我來(lái)簡(jiǎn)單介紹下這四種關(guān)系的特點(diǎn):

比較:比較數(shù)據(jù)間各類別的關(guān)系,或者是它們隨著時(shí)間的變化趨勢(shì)闸迷,比如折線圖嵌纲;

聯(lián)系:查看兩個(gè)或兩個(gè)以上變量之間的關(guān)系,比如散點(diǎn)圖腥沽;

構(gòu)成:每個(gè)部分占整體的百分比逮走,或者是隨著時(shí)間的百分比變化,比如餅圖今阳;

分布:關(guān)注單個(gè)變量师溅,或者多個(gè)變量的分布情況,比如直方圖盾舌。

同樣墓臭,按照變量的個(gè)數(shù),我們可以把可視化視圖劃分為單變量分析和多變量分析妖谴。

  • 單變量分析指的是一次只關(guān)注一個(gè)變量窿锉。比如我們只關(guān)注“身高”這個(gè)變量,來(lái)看身高的取值分布膝舅,而暫時(shí)忽略其他變量嗡载。

  • 多變量分析可以讓你在一張圖上可以查看兩個(gè)以上變量的關(guān)系。比如“身高”和“年齡”仍稀,你可以理解是同一個(gè)人的兩個(gè)參數(shù)洼滚,這樣在同一張圖中可以看到每個(gè)人的“身高”和“年齡”的取值,從而分析出來(lái)這兩個(gè)變量之間是否存在某種聯(lián)系技潘。

可視化的視圖可以說(shuō)是分門別類判沟,多種多樣,今天我主要介紹常用的10種視圖崭篡,包括了散點(diǎn)圖挪哄、折線圖、直方圖琉闪、條形圖迹炼、箱線圖、餅圖颠毙、熱力圖斯入、蜘蛛圖、二元變量分布蛀蜜、成對(duì)關(guān)系刻两。

散點(diǎn)圖

散點(diǎn)圖的英文叫做scatter plot,它將兩個(gè)變量的值顯示在二維坐標(biāo)中滴某,非常適合展示兩個(gè)變量之間的關(guān)系磅摹。當(dāng)然滋迈,除了二維的散點(diǎn)圖,我們還有三維的散點(diǎn)圖户誓。

我在上一講中給你簡(jiǎn)單介紹了下Matplotlib這個(gè)工具饼灿,在Matplotlib中,我們經(jīng)常會(huì)用到pyplot這個(gè)工具包帝美,它包括了很多繪圖函數(shù)碍彭,類似Matlab的繪圖框架。在使用前你需要進(jìn)行引用:

import matplotlib.pyplot as plt

在工具包引用后悼潭,畫散點(diǎn)圖庇忌,需要使用plt.scatter(x, y, marker=None)函數(shù)。x舰褪、y 是坐標(biāo)漆枚,marker代表了標(biāo)記的符號(hào)。比如“x”抵知、“>”或者“o”。選擇不同的marker软族,呈現(xiàn)出來(lái)的符號(hào)樣式也會(huì)不同刷喜,你可以自己試一下。

下面三張圖分別對(duì)應(yīng)“x”“>”和“o”立砸。

image
image
image

除了Matplotlib外掖疮,你也可以使用Seaborn進(jìn)行散點(diǎn)圖的繪制。在使用Seaborn前颗祝,也需要進(jìn)行包引用:

import seaborn as sns

在引用seaborn工具包之后浊闪,就可以使用seaborn工具包的函數(shù)了。如果想要做散點(diǎn)圖螺戳,可以直接使用sns.jointplot(x, y, data=None, kind='scatter')函數(shù)搁宾。其中x、y是data中的下標(biāo)倔幼。data就是我們要傳入的數(shù)據(jù)盖腿,一般是DataFrame類型。kind這類我們?nèi)catter损同,代表散點(diǎn)的意思翩腐。當(dāng)然kind還可以取其他值,這個(gè)我在后面的視圖中會(huì)講到膏燃,不同的kind代表不同的視圖繪制方式茂卦。

好了,讓我們來(lái)模擬下组哩,假設(shè)我們的數(shù)據(jù)是隨機(jī)的1000個(gè)點(diǎn)等龙。

# 數(shù)據(jù)準(zhǔn)備

N = 1000

x = np.random.randn(N)

y = np.random.randn(N)

# 用Matplotlib畫散點(diǎn)圖

plt.scatter(x, y,marker='x')

plt.show()

# 用Seaborn畫散點(diǎn)圖

df = pd.DataFrame({'x': x, 'y': y})

sns.jointplot(x="x", y="y", data=df, kind='scatter');

plt.show()

我們運(yùn)行一下這個(gè)代碼处渣,就可以看到下面的視圖(第一張圖為Matplotlib繪制的,第二張圖為Seaborn繪制的)而咆。其實(shí)你能看到Matplotlib和Seaborn的視圖呈現(xiàn)還是有差別的霍比。Matplotlib默認(rèn)情況下呈現(xiàn)出來(lái)的是個(gè)長(zhǎng)方形。而Seaborn呈現(xiàn)的是個(gè)正方形暴备,而且不僅顯示出了散點(diǎn)圖悠瞬,還給了這兩個(gè)變量的分布情況。

Matplotlib繪制:

image

Seaborn繪制:

image

折線圖

折線圖可以用來(lái)表示數(shù)據(jù)隨著時(shí)間變化的趨勢(shì)涯捻。

在Matplotlib中浅妆,我們可以直接使用plt.plot()函數(shù),當(dāng)然需要提前把數(shù)據(jù)按照X軸的大小進(jìn)行排序障癌,要不畫出來(lái)的折線圖就無(wú)法按照X軸遞增的順序展示凌外。

在Seaborn中,我們使用sns.lineplot (x, y, data=None)函數(shù)涛浙。其中x康辑、y是data中的下標(biāo)。data就是我們要傳入的數(shù)據(jù)轿亮,一般是DataFrame類型疮薇。

這里我們?cè)O(shè)置了x、y的數(shù)組我注。x數(shù)組代表時(shí)間(年)按咒,y數(shù)組我們隨便設(shè)置幾個(gè)取值。下面是詳細(xì)的代碼但骨。

# 數(shù)據(jù)準(zhǔn)備

x = [2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019]

y = [5, 3, 6, 20, 17, 16, 19, 30, 32, 35]

# 使用Matplotlib畫折線圖

plt.plot(x, y)

plt.show()

# 使用Seaborn畫折線圖

df = pd.DataFrame({'x': x, 'y': y})

sns.lineplot(x="x", y="y", data=df)

plt.show()

然后我們分別用Matplotlib和Seaborn進(jìn)行畫圖励七,可以得到下面的圖示。你可以看出這兩個(gè)圖示的結(jié)果是完全一樣的奔缠,只是在seaborn中標(biāo)記了x和y軸的含義掠抬。

image
image

直方圖

直方圖是比較常見的視圖,它是把橫坐標(biāo)等分成了一定數(shù)量的小區(qū)間校哎,這個(gè)小區(qū)間也叫作“箱子”剿另,然后在每個(gè)“箱子”內(nèi)用矩形條(bars)展示該箱子的箱子數(shù)(也就是y值),這樣就完成了對(duì)數(shù)據(jù)集的直方圖分布的可視化贬蛙。

在Matplotlib中雨女,我們使用plt.hist(x, bins=10)函數(shù),其中參數(shù)x是一維數(shù)組阳准,bins代表直方圖中的箱子數(shù)量氛堕,默認(rèn)是10。

在Seaborn中野蝇,我們使用sns.distplot(x, bins=10, kde=True)函數(shù)讼稚。其中參數(shù)x是一維數(shù)組括儒,bins代表直方圖中的箱子數(shù)量,kde代表顯示核密度估計(jì)锐想,默認(rèn)是True帮寻,我們也可以把kde設(shè)置為False,不進(jìn)行顯示赠摇。核密度估計(jì)是通過(guò)核函數(shù)幫我們來(lái)估計(jì)概率密度的方法固逗。

這是一段繪制直方圖的代碼。

# 數(shù)據(jù)準(zhǔn)備

a = np.random.randn(100)

s = pd.Series(a)

# 用Matplotlib畫直方圖

plt.hist(s)

plt.show()

# 用Seaborn畫直方圖

sns.distplot(s, kde=False)

plt.show()

sns.distplot(s, kde=True)

plt.show()

我們創(chuàng)建一個(gè)隨機(jī)的一維數(shù)組藕帜,然后分別用Matplotlib和Seaborn進(jìn)行直方圖的顯示烫罩,結(jié)果如下,你可以看出洽故,沒有任何差別贝攒,其中最后一張圖就是kde默認(rèn)為Ture時(shí)的顯示情況。

image
image
image

熱力圖

熱力圖时甚,英文叫heat map隘弊,是一種矩陣表示方法,其中矩陣中的元素值用顏色來(lái)代表荒适,不同的顏色代表不同大小的值梨熙。通過(guò)顏色就能直觀地知道某個(gè)位置上數(shù)值的大小。另外你也可以將這個(gè)位置上的顏色吻贿,與數(shù)據(jù)集中的其他位置顏色進(jìn)行比較。

熱力圖是一種非常直觀的多元變量分析方法哑子。

我們一般使用Seaborn中的sns.heatmap(data)函數(shù)舅列,其中data代表需要繪制的熱力圖數(shù)據(jù)。

這里我們使用Seaborn中自帶的數(shù)據(jù)集flights卧蜓,該數(shù)據(jù)集記錄了1949年到1960年期間帐要,每個(gè)月的航班乘客的數(shù)量。

# 數(shù)據(jù)準(zhǔn)備

flights = sns.load_dataset("flights")

data=flights.pivot('year','month','passengers')

# 用Seaborn畫熱力圖

sns.heatmap(data)

plt.show()

通過(guò)seaborn的heatmap函數(shù)弥奸,我們可以觀察到不同年份榨惠,不同月份的乘客數(shù)量變化情況,其中顏色越淺的代表乘客數(shù)量越多盛霎,如下圖所示:

image

成對(duì)關(guān)系

如果想要探索數(shù)據(jù)集中的多個(gè)成對(duì)雙變量的分布赠橙,可以直接采用sns.pairplot()函數(shù)。它會(huì)同時(shí)展示出DataFrame中每對(duì)變量的關(guān)系愤炸,另外在對(duì)角線上期揪,你能看到每個(gè)變量自身作為單變量的分布情況。它可以說(shuō)是探索性分析中的常用函數(shù)规个,可以很快幫我們理解變量對(duì)之間的關(guān)系凤薛。

pairplot函數(shù)的使用姓建,就好像我們對(duì)DataFrame使用describe()函數(shù)一樣方便,是數(shù)據(jù)探索中的常用函數(shù)缤苫。

這里我們使用Seaborn中自帶的iris數(shù)據(jù)集速兔,這個(gè)數(shù)據(jù)集也叫鳶尾花數(shù)據(jù)集。鳶尾花可以分成Setosa活玲、Versicolour和Virginica三個(gè)品種涣狗,在這個(gè)數(shù)據(jù)集中,針對(duì)每一個(gè)品種翼虫,都有50個(gè)數(shù)據(jù)屑柔,每個(gè)數(shù)據(jù)中包括了4個(gè)屬性,分別是花萼長(zhǎng)度珍剑、花萼寬度掸宛、花瓣長(zhǎng)度和花瓣寬度。通過(guò)這些數(shù)據(jù)招拙,需要你來(lái)預(yù)測(cè)鳶尾花卉屬于三個(gè)品種中的哪一種唧瘾。

# 數(shù)據(jù)準(zhǔn)備

iris = sns.load_dataset('iris')

# 用Seaborn畫成對(duì)關(guān)系

sns.pairplot(iris)

plt.show()

這里我們用seaborn中的pairplot函數(shù)來(lái)對(duì)數(shù)據(jù)集中的多個(gè)雙變量的關(guān)系進(jìn)行探索,如下圖所示别凤。從圖上你能看出饰序,一共有sepal_length、sepal_width规哪、petal_length和petal_width4個(gè)變量求豫,它們分別是花萼長(zhǎng)度、花萼寬度诉稍、花瓣長(zhǎng)度和花瓣寬度蝠嘉。

下面這張圖相當(dāng)于這4個(gè)變量?jī)蓛芍g的關(guān)系。比如矩陣中的第一張圖代表的就是花萼長(zhǎng)度自身的分布圖杯巨,它右側(cè)的這張圖代表的是花萼長(zhǎng)度與花萼寬度這兩個(gè)變量之間的關(guān)系蚤告。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市服爷,隨后出現(xiàn)的幾起案子杜恰,更是在濱河造成了極大的恐慌,老刑警劉巖仍源,帶你破解...
    沈念sama閱讀 216,651評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件心褐,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡笼踩,警方通過(guò)查閱死者的電腦和手機(jī)檬寂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)戳表,“玉大人桶至,你說(shuō)我怎么就攤上這事昼伴。” “怎么了镣屹?”我有些...
    開封第一講書人閱讀 162,931評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵圃郊,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我女蜈,道長(zhǎng)持舆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,218評(píng)論 1 292
  • 正文 為了忘掉前任伪窖,我火速辦了婚禮逸寓,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘覆山。我一直安慰自己竹伸,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評(píng)論 6 388
  • 文/花漫 我一把揭開白布簇宽。 她就那樣靜靜地躺著勋篓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪魏割。 梳的紋絲不亂的頭發(fā)上譬嚣,一...
    開封第一講書人閱讀 51,198評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音钞它,去河邊找鬼拜银。 笑死,一個(gè)胖子當(dāng)著我的面吹牛遭垛,可吹牛的內(nèi)容都是我干的尼桶。 我是一名探鬼主播,決...
    沈念sama閱讀 40,084評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼耻卡,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼疯汁!你這毒婦竟也來(lái)了牲尺?” 一聲冷哼從身側(cè)響起卵酪,我...
    開封第一講書人閱讀 38,926評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎谤碳,沒想到半個(gè)月后溃卡,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,341評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蜒简,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評(píng)論 2 333
  • 正文 我和宋清朗相戀三年瘸羡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片搓茬。...
    茶點(diǎn)故事閱讀 39,731評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡犹赖,死狀恐怖队他,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情峻村,我是刑警寧澤麸折,帶...
    沈念sama閱讀 35,430評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站粘昨,受9級(jí)特大地震影響垢啼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜张肾,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評(píng)論 3 326
  • 文/蒙蒙 一芭析、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧吞瞪,春花似錦馁启、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至浪听,卻和暖如春螟碎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背迹栓。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工掉分, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人克伊。 一個(gè)月前我還...
    沈念sama閱讀 47,743評(píng)論 2 368
  • 正文 我出身青樓酥郭,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親愿吹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子不从,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評(píng)論 2 354

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