原文:https://www.kaggle.com/benhamner/d/uciml/iris/python-data-visualizations
See Kaggle Datasets for other datasets to try visualizing. The World
Food Facts data is an especially rich one for visualization.
完整版代碼,可直接下載:http://download.csdn.net/download/u013527419/9806632
seaborn 庫的一些簡單用法,可以見:http://blog.csdn.net/longgb123/article/details/53228256
裏面有幾篇文章是介紹這個庫的
比較常用的圖表有:
- 查看目標變量的分佈。當分佈不平衡時,根據評分標準和具體模型的使用不同,可能會嚴重影響性能。
-iris[“Species”].value_counts() - 對 Numerical Variable,可以用 Box Plot 來直觀地查看它的分佈。
-sns.boxplot(x=”Species”, y=”PetalLengthCm”, data=iris) - 對於座標類數據,可以用 Scatter Plot 來查看它們的分佈趨勢和是否有離羣點的存在。
-iris.plot(kind=”scatter”, x=”SepalLengthCm”, y=”SepalWidthCm”)
-sns.jointplot(x=”SepalLengthCm”, y=”SepalWidthCm”, data=iris, size=5) - 對於分類問題,將數據根據 Label 的不同着不同的顏色繪製出來,這對 Feature 的構造很有幫助。
-sns.FacetGrid(iris,hue=”Species”,size=5).map(plt.scatter,”SepalLengthCm”,”SepalWidthCm”).add_legend() - 繪製變量之間兩兩的分佈和相關度圖表。
-sns.pairplot(iris, hue=”Species”, size=3)
-sns.pairplot(iris, hue=”Species”, size=3, diag_kind=”kde”)
詳細例子說明
# coding=utf-8
import pandas as pd
from sklearn.datasets import load_iris
# 載入seaborn,因爲載入時會有警告出現,因此先載入warnings,忽略警告。
import warnings
warnings.filterwarnings("ignore")
import seaborn as sns
import matplotlib.pyplot as plt
sns.set(style="white", color_codes=True)
iris = pd.DataFrame(load_iris().data)
iris.columns = ['SepalLengthCm','SepalWidthCm','PetalLengthCm','PetalWidthCm']
iris['Species'] = load_iris().target
# 首先探索一下數據集的大體情況,多少個樣本,每一個樣本多少個特徵等
print iris.shape
print iris.head()
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
# 探索一下是否爲均衡分類
# 分幾類?每一類多少個樣本?
# 可以從結果看出,很均勻。。。若爲不均衡分類,則可參照此文https://www.svds.com/learning-imbalanced-classes/進行處理。
print iris["Species"].value_counts()
- 1
- 2
- 3
- 4
# plot是畫圖的最主要方法,Series和DataFrame都有plot方法。
# plot默認生成是曲線圖,你可以通過kind參數生成其他的圖形,可選的值爲:line, bar(柱狀圖), barh,
# kde, density, scatter(散點圖)。
# 對於座標類數據,可以用 Scatter Plot 來查看它們的分佈趨勢和是否有離羣點的存在
iris.plot(kind="scatter", x="SepalLengthCm", y="SepalWidthCm")
- 1
- 2
- 3
- 4
- 5
# 用seaborn庫來畫出與上面相似的圖
# seaborn 的 jointplot 函數可以在同一個圖中畫出二變量的散點圖和單變量的柱狀圖
sns.jointplot(x="SepalLengthCm", y="SepalWidthCm", data=iris, size=5)
- 1
- 2
- 3
# 上面的兩個散點圖並不能顯示每一個點所屬的類別
# 所以,接下來用 seaborn 的 FacetGrid 函數按照Species花的種類來在散點圖上標上不同的顏色,hue英文是色彩的意思。
sns.FacetGrid(iris, hue="Species", size=5).map(plt.scatter, "SepalLengthCm", "SepalWidthCm").add_legend()
- 1
- 2
- 3
# 通過箱線圖來查看單個特徵的分佈
# 對 Numerical Variable,可以用 Box Plot 來直觀地查看不同花類型的分佈。
sns.boxplot(x="Species", y="PetalLengthCm", data=iris)
- 1
- 2
- 3
# 下面的操作,將每一個Species所屬的點加到對應的位置,加上散點圖,
# 振動值jitter=True 使各個散點分開,要不然會是一條直線
# 注意此處要將座標圖用ax先保存起來,這樣第二次纔會在原來的基礎上加上散點圖
ax = sns.boxplot(x="Species", y="PetalLengthCm", data=iris)
ax = sns.stripplot(x="Species", y="PetalLengthCm", data=iris, jitter=True, edgecolor="gray")
- 1
- 2
- 3
- 4
- 5
# violinplot 小提琴圖,查看密度分佈,結合了前面的兩個圖,並且進行了簡化
# 數據越稠密越寬,越稀疏越窄
sns.violinplot(x="Species", y="PetalLengthCm", data=iris, size=6)
# sns.kdeplot == kernel density 核密度圖(單個變量)
sns.FacetGrid(iris, hue="Species", size=6).map(sns.kdeplot, "PetalLengthCm").add_legend()
# pairplot 任意兩個變量間的關係
sns.pairplot(iris, hue="Species", size=3)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
# 上圖中,中間對角線的部分圖形也可以用kde顯示
sns.pairplot(iris, hue="Species", size=3, diag_kind="kde")
- 1
- 2
# 下面的用Pandas自帶的畫圖
# We can quickly make a boxplot with Pandas on each feature split out by species
iris.boxplot(by="Species", figsize=(12, 6))
# Andrews Curves 用樣本的各個屬性作爲傅里葉級數的係數然後畫出來
# Andrews Curves 將高維的點化爲二維的曲線,曲線是一條傅里葉函數的樣子,參數項爲不# 同的特徵值,臆想出來了自變量t,這樣每個點都是一條曲線
from pandas.tools.plotting import andrews_curves
andrews_curves(iris, "Species")
#
# Another multivariate visualization technique pandas has is parallel_coordinates
# Parallel coordinates 將每個特徵作爲單獨的一列畫,然後用線將每一個樣本的特徵連接起來
from pandas.tools.plotting import parallel_coordinates
parallel_coordinates(iris, "Species")
# Which puts each feature as a point on a 2D plane, and then simulates
# having each sample attached to those points through a spring weighted by the
# relative value for that feature
from pandas.tools.plotting import radviz
radviz(iris, "Species")
plt.show()
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21