背景音樂:Summer Vibe - Walk off the Earth
缀纺迹看到這篇文章的人,每天都有好心情?(? ? ??)
1 概述
數據可視化,從數據層面,包括以下兩塊內容:
- 單變量的可視化:主要研究變量的自身特性
- 多變量的聯(lián)合可視化:主要研究變量與變量之間的相關性
其中湃密,單變量的可視化,要根據數據的類型來分別處理:
- 分類變量(categorical variable)
常用的有:餅圖、柱形圖 - 數值變量(numerical variable)
常用的有:概率密度圖迟螺、直方圖赶掖、箱式圖
回到標題本身,今天就來講講python的數據可視化达箍。
在python做數據分析的時候没龙,有三個模塊是繞不開的:pandas、numpy以及matplotlib缎玫。
同時硬纤,seaborn也是你可視化時必不可少的得力助手。
寫這個文章的目的赃磨,是對知識的一個梳理筝家,也方便有需要的人能盡快上手。
我會盡可能地用pandas邻辉、matplotlib和seaborn來共同實現上述可視化溪王,同時為了代碼簡潔,我會盡量不進行沒必要的設置值骇。
2 導入數據
首先莹菱,導入必備的模塊:
%matplotlib inline
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import seaborn as sns
本次所用的數據來自kaggle競賽的森林火災面積預測
df = pd.read_csv('forestfires.csv')
df.head() # 看前5行
3 分類特征
分類特征主要看兩個方面:
- 有幾種分類
- 每種分類的數量(或者比例)
這里為了演示,我用day變量吱瘩,代表了星期
order = ['mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun']
day_count = df['day'].value_counts()
day_count = day_count[order] # 不用loc的話就默認從大到小排序
day_count
結果為
mon 74
tue 64
wed 54
thu 61
fri 85
sat 84
sun 95
Name: day, dtype: int64
可以看到道伟,數據集里這個變量的分布還算平均。
3.1 餅圖
注意分類的種類不能太多使碾,不然餅圖就會被切得很細
3.1.1 pandas.Series.plot.pie
用autopct設置數字的格式
day_count.plot.pie(autopct='%.2f%%')
3.1.2 matplotlib.pyplot.pie
plt.pie(day_count, autopct='%.2f%%', labels=day_count.index)
3.2 柱狀圖
3.2.1 pandas.Series.plot.pie
day_count.plot.bar()
3.2.2 matplotlib.pyplot.bar
pos = range(len(day_count))
plt.bar(pos, day_count.values)
plt.xticks(pos, day_count.index)
3.2.3 seaborn.barplot
sns.barplot(day_count.index, day_count.values)
3.2.4 seaborn.countplot
用這個的好處在于皱卓,自動計算取值及其數量并可視化,節(jié)省一個步驟部逮。
函數中娜汁,可以設置order=order來指定順序。
sns.countplot(df['day'])
4 數值特征
數值特征主要看兩個方面:
- 它的取值區(qū)間
- 不同子區(qū)間的數量分布(或者密度分布)
為了演示兄朋,我用temp變量掐禁,代表溫度
temperature = df['temp']
4.1 直方圖
4.1.1 pandas.Series.plot.hist
temperature.plot.hist()
4.1.2 matplotlib.pyplot.hist
plt.hist(temperature)
4.1.3 seaborn.rugplot
這個是結合直方圖使用的,能變得更好看
plt.hist(temperature, color='orange')
sns.rugplot(temperature)
4.2 概率密度圖
4.2.1 pandas.Series.plot.density
temperature.plot.density()
4.2.2 seaborn.kdeplot
sns.kdeplot(temperature)
4.2.3 seaborn.distplot
這個還結合了直方圖颅和,節(jié)省步驟
函數中傅事,可以設置hist=False來取消直方圖
sns.distplot(temperature)
4.3 箱式圖
4.3.1 pandas.Series.plot.box
temperature.plot.box()
4.3.2 matplotlib.pyplot.boxplot
plt.boxplot(temperature)
plt.show()
4.3.3 seaborn.boxplot
orient默認值是h(水平),也可以設為v(垂直)
sns.boxplot(temperature, orient='v')