五分鐘入門數(shù)據(jù)可視化,就是這么簡(jiǎn)單

image

@Author:Runsen

在數(shù)據(jù)科學(xué)中,有多種工具可以進(jìn)行可視化缸浦。在本文中夕冲,我(毛利)展示了使用Python來實(shí)現(xiàn)的各種可視化圖表。

Matplotlib是Python中最常用的可視化工具之一,可以非常方便地創(chuàng)建海量類型的2D圖表和一些基本的3D圖表餐济。

主要的可視化視圖

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

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

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

分布:關(guān)注單個(gè)變量鸽照,或者多個(gè)變量的分布情況螺捐,比如直方圖。

單變量可視化視圖:

一次值關(guān)注一個(gè)變量矮燎。如我們一次只關(guān)注身高變量定血,來看身高的取值分布,而暫時(shí)忽略其他變量诞外。

多變量可視化視圖:

可以讓一張圖同時(shí)查看兩個(gè)以上的變量澜沟,比如“身高”和“年齡”,你可以理解是同一個(gè)人的兩個(gè)參數(shù)峡谊,這樣在同一張圖中可以看到每個(gè)人的“身高”和“年齡”的取值茫虽,從而分析出這兩個(gè)變量之前是否存在某種聯(lián)系。

離散變量和連續(xù)變量:

離散變量是指其數(shù)值只能用自然數(shù)或整數(shù)單位計(jì)算的則為離散變量. 例如,企業(yè)個(gè)數(shù),職工人數(shù),設(shè)備臺(tái)數(shù)等,只能按計(jì)量單位數(shù)計(jì)數(shù),這種變量的數(shù)值一般用計(jì)數(shù)方法取得. 反之,在一定區(qū)間內(nèi)可以任意取值的變量叫連續(xù)變量,其數(shù)值是連續(xù)不斷的,相鄰兩個(gè)數(shù)值可作無限分割,即可取無限個(gè)數(shù)值.

針對(duì)離散變量我們可以使用常見的條形圖和餅圖完成數(shù)據(jù)的可視化工作既们,那么濒析,針對(duì)數(shù)值型變量,我們也有很多可視化的方法啥纸,例如箱線圖号杏、直方圖、折線圖斯棒、面積圖馒索、散點(diǎn)圖等等。

散點(diǎn)圖:

引入工具包名船,Matplotlib的pyplot包

 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ì)不同(就是以指定的符號(hào)當(dāng)成點(diǎn)畫圖)器一,你可以自己試一下课锌。

或使用工具包seaborn

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)?scatter固棚,代表散點(diǎn)的意思。

例子:

import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn as sns# 數(shù)據(jù)準(zhǔn)備N = 1000x = np.random.randn(N)y = np.random.randn(N)# 用 Matplotlib 畫散點(diǎn)圖plt.scatter(x,y,marker="x")plt.show()#用seaborn畫圖df=pd.DataFrame({'x':x,'y':y})sns.joinplot(x='x',y='y',data=df,kind='scatter',marker='x')#sns還是要借助pyplot來打印圖的 其自身無show方法plt.show()  

運(yùn)行結(jié)果:
image
image

折線圖:

折線圖可以用來表示數(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 類型。

例子:

import pandas as pdimport matplotlib.pyplot as pltimport seaborn as sns# 數(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="年", y="月", data=df)plt.show()

運(yùn)行結(jié)果:

image
image

如果要修改X和Y軸的參數(shù)需要這樣寫代碼 df中的參數(shù)名字和lineplot中的參數(shù)的一一對(duì)應(yīng)的霎匈,同時(shí)lineplot中的year就是x軸的名字戴差,money就是y軸的名字

df = pd.DataFrame({'year': x, 'money': y})sns.lineplot(x="year", y="money", data=df)plt.show()

直方圖:

直方圖是比較常見的視圖,它是把橫坐標(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ì)概率密度的方法故慈。

例子:

import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn as sns# 數(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()

運(yùn)行結(jié)果:
image
image
image

條形圖

條形圖可以幫我們查看類別的特征。在條形圖中图云,長(zhǎng)條形的長(zhǎng)度表示類別的頻數(shù)惯悠,寬度表示類別。

在 Matplotlib 中竣况,我們使用 plt.bar(x, height) 函數(shù)克婶,其中參數(shù) x 代表 x 軸的位置序列,height 是 y 軸的數(shù)值序列丹泉,也就是柱子的高度情萤。

在 Seaborn 中,我們使用 sns.barplot(x=None, y=None, data=None) 函數(shù)摹恨。其中參數(shù) data 為 DataFrame 類型筋岛,x、y 是 data 中的變量晒哄。

例子:

import matplotlib.pyplot as pltimport seaborn as sns# 數(shù)據(jù)準(zhǔn)備x = ['Cat1', 'Cat2', 'Cat3', 'Cat4', 'Cat5']y = [5, 4, 8, 12, 7]# 用 Matplotlib 畫條形圖plt.bar(x, y)plt.show()# 用 Seaborn 畫條形圖sns.barplot(x, y)plt.show()

運(yùn)行結(jié)果:
image
image

箱型圖:

它可以幫我們分析出數(shù)據(jù)的差異性睁宰、離散程度和異常值等。

箱線圖寝凌,又稱盒式圖柒傻,由五個(gè)數(shù)值點(diǎn)組成:最大值 (max)、最小值 (min)较木、中位數(shù) (median) 和上下四分位數(shù) (Q3, Q1)红符。

在 Matplotlib 中,我們使用 plt.boxplot(x, labels=None) 函數(shù)伐债,其中參數(shù) x 代表要繪制箱線圖的數(shù)據(jù)预侯,labels 是缺省值,可以為箱線圖添加標(biāo)簽峰锁。

在 Seaborn 中萎馅,我們使用 sns.boxplot(x=None, y=None, data=None) 函數(shù)。其中參數(shù) data 為 DataFrame 類型虹蒋,x校坑、y 是 data 中的變量拣技。

例子:

# 數(shù)據(jù)準(zhǔn)備# 生成 0-1 之間的 10*4 維度數(shù)據(jù)data=np.random.normal(size=(10,4)) lables = ['A','B','C','D']# 用 Matplotlib 畫箱線圖plt.boxplot(data,labels=lables)plt.show()# 用 Seaborn 畫箱線圖df = pd.DataFrame(data, columns=lables)sns.boxplot(data=df)plt.show()

運(yùn)行結(jié)果:

在這里插入圖片描述

<figcaption style="margin-top: 5px; text-align: center; color: #888; font-size: 14px;">在這里插入圖片描述</figcaption>

在這里插入圖片描述

<figcaption style="margin-top: 5px; text-align: center; color: #888; font-size: 14px;">在這里插入圖片描述</figcaption>

餅圖

餅圖是常用的統(tǒng)計(jì)學(xué)模塊,可以顯示每個(gè)部分大小與總和之間的比例耍目。在 Python 數(shù)據(jù)可視化中膏斤,它用的不算多。我們主要采用 Matplotlib 的 pie 函數(shù)實(shí)現(xiàn)它邪驮。

在 Matplotlib 中莫辨,我們使用 plt.pie(x, labels=None) 函數(shù),其中參數(shù) x 代表要繪制餅圖的數(shù)據(jù)毅访,labels 是缺省值沮榜,可以為餅圖添加標(biāo)簽。

這里我設(shè)置了 lables 數(shù)組喻粹,分別代表高中蟆融、本科、碩士守呜、博士和其他幾種學(xué)歷的分類標(biāo)簽型酥。nums 代表這些學(xué)歷對(duì)應(yīng)的人數(shù)。

例子:

  import matplotlib.pyplot as plt  # 數(shù)據(jù)準(zhǔn)備  nums = [25, 37, 33, 37, 6]  labels = ['High-school','Bachelor','Master','Ph.d', 'Others']  # 用 Matplotlib 畫餅圖  plt.pie(x = nums, labels=labels)  plt.show()

運(yùn)行結(jié)果:

image

總結(jié)

在 Python 生態(tài)系統(tǒng)中繪制數(shù)據(jù)是一件好事也是一件壞事查乒。繪制數(shù)據(jù)的工具有很多可供選擇既是一件好事也是一件壞事弥喉,盡力搞清楚哪一個(gè)工具適合你取決于你要實(shí)現(xiàn)什么。在一定程度上玛迄,你需要嘗試各種工具老弄清哪種工具適合你由境,我覺得沒有哪一個(gè)工具是最好或最壞。

下面是可視化知識(shí)點(diǎn)的思維導(dǎo)圖蓖议,希望大家轉(zhuǎn)發(fā)收藏

可視化知識(shí)點(diǎn)

image
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末虏杰,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子勒虾,更是在濱河造成了極大的恐慌纺阔,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件从撼,死亡現(xiàn)場(chǎng)離奇詭異州弟,居然都是意外死亡钧栖,警方通過查閱死者的電腦和手機(jī)低零,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拯杠,“玉大人掏婶,你說我怎么就攤上這事√杜悖” “怎么了雄妥?”我有些...
    開封第一講書人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵最蕾,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我老厌,道長(zhǎng)瘟则,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任枝秤,我火速辦了婚禮醋拧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘淀弹。我一直安慰自己丹壕,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開白布薇溃。 她就那樣靜靜地躺著菌赖,像睡著了一般。 火紅的嫁衣襯著肌膚如雪沐序。 梳的紋絲不亂的頭發(fā)上琉用,一...
    開封第一講書人閱讀 49,071評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音薄啥,去河邊找鬼辕羽。 笑死,一個(gè)胖子當(dāng)著我的面吹牛垄惧,可吹牛的內(nèi)容都是我干的刁愿。 我是一名探鬼主播,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼到逊,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼铣口!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起觉壶,我...
    開封第一講書人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤脑题,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后铜靶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體叔遂,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年争剿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了已艰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蚕苇,死狀恐怖哩掺,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情涩笤,我是刑警寧澤嚼吞,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布盒件,位于F島的核電站,受9級(jí)特大地震影響舱禽,放射性物質(zhì)發(fā)生泄漏炒刁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一誊稚、第九天 我趴在偏房一處隱蔽的房頂上張望切心。 院中可真熱鬧,春花似錦片吊、人聲如沸绽昏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽全谤。三九已至,卻和暖如春爷贫,著一層夾襖步出監(jiān)牢的瞬間认然,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來泰國打工漫萄, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留卷员,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓腾务,卻偏偏與公主長(zhǎng)得像毕骡,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子岩瘦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345

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