想快速學會資料視覺化?這裡有一門4小時的Kaggle微課程

機器之心發表於2019-04-27

想要製作漂亮的視覺化圖表嗎?Kaggle 平臺上有一個資料視覺化的微課程,總時長才 4 小時。快來學習吧!

課程地址:https://www.kaggle.com/learn/data-visualization-from-non-coder-to-coder

想快速學會資料視覺化?這裡有一門4小時的Kaggle微課程

課程簡介

該課程為免費課程,共包含 15 節課,時長 4 小時。主講人 Alexis Cook 曾就讀於杜克大學、密歇根大學和布朗大學,在多個線上學習平臺(如 Udacity 和 DataCamp)教授資料科學

這門課程使用的資料視覺化工具是 Seaborn,所以學員需要稍微瞭解如何寫 Python 程式碼。不過沒有任何程式設計經驗的人也可以通過該課程學會資料視覺化,正如課程名稱那樣:Data Visualization: from Non-Coder to Coder,透過資料視覺化見證程式設計的魅力。

該課程包含 15 節課,分為課程講解和練習兩類,每一堂講解課後都有一節練習課,讓學員及時鞏固和應用所學知識。

課程涉及對資料視覺化工具 Seaborn 的介紹,如何繪製折線圖、柱狀圖、熱圖、散點圖、分佈圖,如何選擇圖表型別和自定義樣式,課程期末專案,以及如何舉一反三為自己的專案建立 notebook。課程目錄如下所示:

想快速學會資料視覺化?這裡有一門4小時的Kaggle微課程

想快速學會資料視覺化?這裡有一門4小時的Kaggle微課程

下面,我們將選取其中一節課——散點圖(Scatter Plots)進行簡單介紹。

如何建立高階散點圖

點進去你會在左側看到這節課的大致內容,如下圖所示,「散點圖」共包含五個部分:

想快速學會資料視覺化?這裡有一門4小時的Kaggle微課程

btw,眼尖的讀者會發現,下面還有一個 comments 版塊。所以,該課程還是互動式的呢,你可以邊學習邊評論。

通過這節課,你將學習如何建立高階的散點圖。

設定 notebook

首先,我們要設定編碼環境。

輸入:

import pandas as pdimport matplotlib.pyplot as plt%matplotlib inlineimport seaborn as snsprint("Setup Complete")

輸出:

Setup Complete

載入和檢查資料

我們將使用一個保險費用(合成)資料集,目的是瞭解為什麼有些客戶需要比其他人支付得更多。資料集地址:https://www.kaggle.com/mirichoi0218/insurance/home

想快速學會資料視覺化?這裡有一門4小時的Kaggle微課程

輸入:

# Path of the file to readinsurance_filepath = "../input/insurance.csv"# Read the file into a variable insurance_datainsurance_data = pd.read_csv(insurance_filepath)

列印前五行,以檢查資料集是否正確載入。

輸入:

insurance_data.head()

輸出:

想快速學會資料視覺化?這裡有一門4小時的Kaggle微課程

散點圖

為了建立簡單的散點圖,我們使用 sns.scatterplot 命令並指定以下值:

水平 x 軸(x=insurance_data['bmi'])

垂直 y 軸(y=insurance_data['charges'])

輸入:

sns.scatterplot(x=insurance_data['bmi'], y=insurance_data['charges'])

輸出:

<matplotlib.axes._subplots.AxesSubplot at 0x7f4d146c3dd8>

想快速學會資料視覺化?這裡有一門4小時的Kaggle微課程

上面的散點圖表明身體質量指數(BMI)和保險費用是正相關的,BMI 指數更高的客戶通常需要支付更多的保險費用。(這也不難理解,高 BMI 指數通常意味著更高的慢性病風險。)

如果要再次檢查這種關係的強度,你可能需要新增一條迴歸線,或者最擬合資料的線。我們通過將該命令更改為 sns.regplot 來實現這一點。

輸入:

sns.regplot(x=insurance_data['bmi'], y=insurance_data['charges'])

輸出:

/opt/conda/lib/python3.6/site-packages/scipy/stats/stats.py:1713: FutureWarning: Using a non-tuple sequence for multidimensional indexing is deprecated; use `arr[tuple(seq)]` instead of `arr[seq]`. In the future this will be interpreted as an array index, `arr[np.array(seq)]`, which will result either in an error or a different result. return np.add.reduce(sorted[indexer] * weights, axis=axis) / sumval<matplotlib.axes._subplots.AxesSubplot at 0x7f4d10de8748>

想快速學會資料視覺化?這裡有一門4小時的Kaggle微課程

著色散點圖

我們可以使用散點圖展示三個變數之間的關係,實現方式就是給資料點著色。

例如,為了瞭解吸菸對 BMI 和保險費用之間關係的影響,我們可以給資料點 'smoker' 進行著色編碼,然後將'bmi'、'charges'作為座標軸。

輸入:

sns.scatterplot(x=insurance_data['bmi'], y=insurance_data['charges'], hue=insurance_data['smoker'])

輸出:

<matplotlib.axes._subplots.AxesSubplot at 0x7f4d10d0c6a0>

想快速學會資料視覺化?這裡有一門4小時的Kaggle微課程

以上散點圖展示了不抽菸的人隨著 BMI 指數的增加保險費用會稍有增加,而抽菸的人的保險費用要增加得多得多。

要想進一步明確這一事實,我們可以使用 sns.lmplot 命令新增兩個迴歸線,分別對應抽菸者和不抽菸者。(你會看到抽菸者的迴歸線更加陡峭。)

輸入:

sns.lmplot(x="bmi", y="charges", hue="smoker", data=insurance_data)

輸出:

/opt/conda/lib/python3.6/site-packages/scipy/stats/stats.py:1713: FutureWarning: Using a non-tuple sequence for multidimensional indexing is deprecated; use `arr[tuple(seq)]` instead of `arr[seq]`. In the future this will be interpreted as an array index, `arr[np.array(seq)]`, which will result either in an error or a different result. return np.add.reduce(sorted[indexer] * weights, axis=axis) / sumval<seaborn.axisgrid.FacetGrid at 0x7f4d10c73240>

想快速學會資料視覺化?這裡有一門4小時的Kaggle微課程

sns.lmplot 命令與其他命令有一些不同:

  • 這裡沒有用 x=insurance_data['bmi'] 來選擇 insurance_data 中的'bmi'列,而是設定 x="bmi"來指定列的名稱。

  • 類似地,y="charges" 和 hue="smoker"也包含列的名稱。

  • 我們使用 data=insurance_data 來指定資料集。

最後,還有一個圖要學。我們通常使用散點圖顯示兩個連續變數(如"bmi"和 "charges")之間的關係。但是,我們可以調整散點圖的設計,來側重某一個類別變數(如"smoker")。我們將這種圖表型別稱作類別散點圖(categorical scatter plot),可使用 sns.swarmplot 命令構建。

輸入:

sns.swarmplot(x=insurance_data['smoker'], y=insurance_data['charges'])

輸出:

<matplotlib.axes._subplots.AxesSubplot at 0x7f4d10c50c88>

想快速學會資料視覺化?這裡有一門4小時的Kaggle微課程

除此之外,這個圖向我們展示了:

  • 不抽菸的人比抽菸的人平均支付的保險費用更少;

  • 支付最多保險費用的客戶是抽菸的人,而支付最少的客戶是不抽菸的人。

相關文章