六種數據分析的基本可視化
數據可視化是數據科學中非常重要的一部分。在探索和理解數據時非常有用。在某些情況下,可視化在傳達信息方面比普通數字要好得多。
使用數據可視化技術可以輕松發現變量之間的關系,變量的分布以及數據中的基礎結構。
在本文中,我們將學習如何創建6種基本但常用的數據可視化類型。我還寫了一篇文章,解釋了如何使用Seaborn創建這些可視化。
我們將在這篇文章中使用Matplotlib。因此,您不僅將了解可視化,而且還將了解Matplotlib和Seaborn語法之間的區別。
我們將使用Kaggle上可用的食品雜貨和直銷數據集來創建可視化。
首先,將數據集讀取為Pandas數據框。
- import numpy as np
- import pandas as pd
- grocery = pd.read_csv("/content/Groceries_dataset.csv", parse_dates=['Date'])
- marketing = pd.read_csv("/content/DirectMarketing.csv")
> The first 5 rows of the grocery dataframe (image by author)
> The first 5 rows of the marketing dataframe (image by author)
我們現在可以開始創建可視化并探索數據集。
1. 線圖
線圖可視化兩個變量之間的關系。其中之一通常是時間,以便我們可以看到變量如何隨時間變化。
對于雜貨數據集,我們可以使用線圖來可視化所購買商品的數量隨時間的變化。
首先,我們使用Pandas的groupby函數計算每天購買的商品數量。
- items = grocery[['Date','itemDescription']]\
- .groupby('Date').count().reset_index()
- items.rename(columns={'itemDescription':'itemCount'}, inplace=True)
- items.head()
- Date item Count
- 2014-01-01 48 1
- 2014-01-02 62 2
- 2014-01-03 54 3
- 2014-01-04 64 4
- 2014-01-05 44
這是用于創建折線圖的matplotlib語法。
- plt.figure(figsize=(10,6))
- plt.title("Number of Items Purchased - Daily", fontsize=16)
- plt.plot('Date', 'itemCount',
- data=items[items.Date > '2015-08-01'])
- plt.xlabel('Date', fontsize=14)
- plt.ylabel('Item Count', fontsize=14)
> (image by author)
第一行創建一個Figure對象,第二行添加標題,第三行在Figure對象上繪制數據。最后兩行添加了x軸和y軸的標簽。
該圖包含2015-08-01年之后的數據,以供演示。
注意:默認圖形大小為(6,4)。我們可以為每個圖形分別更改它或更新默認圖形大小。
- #to get the default figure size
- plt.rcParams.get('figure.figsize')[6.0, 4.0]
- #to update the default figure size
- plt.rcParams['figure.figsize'] = (10,6)
2. 散點圖
散點圖通常用于可視化兩個數字變量的值。我們可以觀察它們之間是否存在相關性。因此,它也是一個關系圖。
散點圖可用于檢查營銷數據集中的薪水和支出金額之間是否存在相關性。我們還可以基于分類變量來區分值。
讓我們分別創建已婚和單身人士的工資和花費金額的散點圖。
- fig, ax = plt.subplots()
- plt.title("Salary vs Spent Amount", fontsize=16)
- ax.scatter('Salary', 'AmountSpent',
- data=marketing[marketing.Married == 'Married'])
- ax.scatter('Salary', 'AmountSpent',
- data=marketing[marketing.Married == 'Single'])
- ax.legend(labels=['Married','Single'], loc='upper left', fontsize=12)
> (image by author)
我們創建了帶有多個軸對象的Figure對象。每個類別(已婚和單身)的散點圖都繪制在軸對象上。
使用Seaborn分隔類別要容易得多。我們只是將列名傳遞給hue參數。
工資和支出金額之間存在正相關關系,這不足為奇。另一個見解是,已婚人士的收入通常比單身人士高。
注意:您可能已經注意到,第一圖和第二圖的" xticks"和" yticks"大小不同。我已經使用rc方法更新了這些設置,如下所示。
- plt.rc('xtick', labelsize=12)
- plt.rc('ytick', labelsize=12)
3. 直方圖
直方圖是一種檢查連續變量分布的方法。它將變量的值范圍劃分為bin,并顯示每個bin中的值數。因此,我們對值的分布方式進行了概述。
我們可以使用直方圖檢查支出金額的分布。
- plt.title("Distribution of Spent Amount", fontsize=16)
- plt.hist('AmountSpent', data=marketing, bins=16)
> (image by author)
bins參數用于更改箱數。越多的垃圾桶將導致更詳細的分發概述。
4. 箱形圖
箱形圖概述了變量的分布。它顯示了值如何通過四分位數和離群值分布。
箱形圖可用于檢查營銷數據集中消費量的分布。我們還可以根據" OwnHome"列進行區分。
- X1 = marketing[marketing.OwnHome == 'Own']['AmountSpent']
- X2 = marketing[marketing.OwnHome == 'Rent']['AmountSpent']
- plt.title("Distribution of Spent Amount", fontsize=16)
- plt.boxplot((X1,X2), labels=['Own Home', 'Rent'])
> (image by author)
我們可以將值數組傳遞給盒圖函數或元組中的多個數組。擁有房屋的人通常會花更多錢。這些值也更加分散。
中間的線代表變量的中位數。
5. 條形圖
條形圖主要用于分類變量。這是一個簡單的圖,但是對于報表或交付結果很有用。
我們可以使用subplots函數創建帶有兩個條形圖的圖形。
- fig, (ax1, ax2) = plt.subplots(nrows=1,
- ncols=2,
- sharey=True,
- figsize=(8,5))
- ax1.bar(x=location.index, height=location.values, width=0.5)
- ax1.set_title("Location", fontsize=14)
- ax2.bar(x=age.index, height=age.values, width=0.5)
- ax2.set_title("Age Groups", fontsize=14)
> (image by author)
我們可以看到每個類別中存在多少個值。這些信息可以簡單地通過pandas的value_counts函數獲得。但是,最好使用可視化。
6. 2D直方圖
2D直方圖在網格上組合了2個不同的直方圖(x軸和y軸)。因此,我們能夠可視化重疊或并發的密度。換句話說,我們可視化一對變量的分布。
我們可以使用hist2d函數輕松創建2D直方圖。
- plt.figure(figsize=(8, 8))
- plt.title("Histogram of Spent Amount and Salary", fontsize=16)
- plt.hist2d("AmountSpent", "Salary",
- range=[[0, 2000], [0, 80000]],
- data=marketing,
- cmap='Blues')
> (image by author)
為了獲得更多信息,我使用了range參數來限制x軸和y軸上的范圍。否則,由于異常值,大多數值將被壓縮到左下角。
較暗的區域包含更多的數據點。可以說,大多數人都在"支出額"和"工資"列的下部。
結論
我們在這篇文章中介紹的只是Matplotlib功能的一小部分。但是,這些基本圖通常用于探索性數據分析或創建數據報告。
此外,它們對學習Matplotlib的語法有很大幫助。像其他任何學科一樣,掌握Matplotlib的最佳方法是練習。熟悉基本功能后,即可繼續使用更高級的功能。
Matplotlib語法比Seaborn更復雜,但是它在繪圖上提供了更多的控制和靈活性。