今天我來給你講講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)出來腔长。
可視化視圖都有哪些?
按照數(shù)據(jù)之間的關(guān)系验残,我們可以把可視化視圖劃分為4類捞附,它們分別是比較、聯(lián)系、構(gòu)成和分布鸟召。我來簡(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è)變量纪挎,來看身高的取值分布,而暫時(shí)忽略其他變量跟匆。
- 多變量分析可以讓你在一張圖上可以查看兩個(gè)以上變量的關(guān)系异袄。比如“身高”和“年齡”,你可以理解是同一個(gè)人的兩個(gè)參數(shù)玛臂,這樣在同一張圖中可以看到每個(gè)人的“身高”和“年齡”的取值烤蜕,從而分析出來這兩個(gè)變量之間是否存在某種聯(lián)系。
可視化的視圖可以說是分門別類迹冤,多種多樣讽营,今天我主要介紹常用的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)出來的符號(hào)樣式也會(huì)不同叙量,你可以自己試一下甜癞。
下面三張圖分別對(duì)應(yīng)“x”“>”和“o”。
除了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代表不同的視圖繪制方式市栗。
好了缀拭,讓我們來模擬下咳短,假設(shè)我們的數(shù)據(jù)是隨機(jī)的1000個(gè)點(diǎn)。
我們運(yùn)行一下這個(gè)代碼蛛淋,就可以看到下面的視圖(第一張圖為Matplotlib繪制的咙好,第二張圖為Seaborn繪制的)。其實(shí)你能看到Matplotlib和Seaborn的視圖呈現(xiàn)還是有差別的褐荷。Matplotlib默認(rèn)情況下呈現(xiàn)出來的是個(gè)長(zhǎng)方形勾效。而Seaborn呈現(xiàn)的是個(gè)正方形,而且不僅顯示出了散點(diǎn)圖叛甫,還給了這兩個(gè)變量的分布情況葵第。
Matplotlib繪制:
Seaborn繪制:
擴(kuò)展閱讀:
數(shù)據(jù)可視化:掌握數(shù)據(jù)領(lǐng)域的萬金油技能
折線圖
折線圖可以用來表示數(shù)據(jù)隨著時(shí)間變化的趨勢(shì)。
在Matplotlib中合溺,我們可以直接使用plt.plot()函數(shù)卒密,當(dāng)然需要提前把數(shù)據(jù)按照X軸的大小進(jìn)行排序,要不畫出來的折線圖就無法按照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ì)的代碼。
然后我們分別用Matplotlib和Seaborn進(jìn)行畫圖商膊,可以得到下面的圖示伏伐。你可以看出這兩個(gè)圖示的結(jié)果是完全一樣的,只是在seaborn中標(biāo)記了x和y軸的含義晕拆。
直方圖
直方圖是比較常見的視圖藐翎,它是把橫坐標(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ì)是通過核函數(shù)幫我們來估計(jì)概率密度的方法抄谐。
這是一段繪制直方圖的代碼。
我們創(chuàng)建一個(gè)隨機(jī)的一維數(shù)組扰法,然后分別用Matplotlib和Seaborn進(jìn)行直方圖的顯示蛹含,結(jié)果如下,你可以看出塞颁,沒有任何差別浦箱,其中最后一張圖就是kde默認(rèn)為Ture時(shí)的顯示情況。
熱力圖
熱力圖祠锣,英文叫heat map酷窥,是一種矩陣表示方法,其中矩陣中的元素值用顏色來代表伴网,不同的顏色代表不同大小的值蓬推。通過顏色就能直觀地知道某個(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ù)量留特。
通過seaborn的heatmap函數(shù),我們可以觀察到不同年份玛瘸,不同月份的乘客數(shù)量變化情況蜕青,其中顏色越淺的代表乘客數(shù)量越多,如下圖所示:
成對(duì)關(guān)系
如果想要探索數(shù)據(jù)集中的多個(gè)成對(duì)雙變量的分布糊渊,可以直接采用sns.pairplot()函數(shù)右核。它會(huì)同時(shí)展示出DataFrame中每對(duì)變量的關(guān)系,另外在對(duì)角線上渺绒,你能看到每個(gè)變量自身作為單變量的分布情況贺喝。它可以說是探索性分析中的常用函數(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)度和花瓣寬度姿锭。通過這些數(shù)據(jù),需要你來預(yù)測(cè)鳶尾花卉屬于三個(gè)品種中的哪一種度陆。
這里我們用seaborn中的pairplot函數(shù)來對(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)系叽粹。
關(guān)于本次Python可視化的學(xué)習(xí)览效,我希望你能掌握:
視圖的分類,以及可以從哪些維度對(duì)它們進(jìn)行分類虫几;
十種常見視圖的概念锤灿,以及如何在Python中進(jìn)行使用,都需要用到哪些函數(shù)辆脸;
需要自己動(dòng)手跑一遍案例中的代碼但校,體驗(yàn)下Python數(shù)據(jù)可視化的過程。