導(dǎo)讀:本文介紹兩大繪圖技巧,分布使用seaborn與pandas包繪制可視化圖形。旨在通過金融股市歷史價(jià)格數(shù)據(jù)學(xué)習(xí)可視化繪圖技巧。
在日常生活中,可視化技術(shù)常常是優(yōu)先選擇的方法。盡管在大多數(shù)技術(shù)學(xué)科(包括數(shù)據(jù)挖掘)中通常強(qiáng)調(diào)算法或數(shù)學(xué)方法,但是可視化技術(shù)也能在數(shù)據(jù)分析方面起到關(guān)鍵性作用。
除了折線圖和散點(diǎn)圖,你還知道哪些一行代碼就能繪制出的酷炫又實(shí)用的可視化圖形呢?下面我們就來一起探索吧。
導(dǎo)入相關(guān)模塊
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(style=“white”, color_codes=True)
數(shù)據(jù)準(zhǔn)備
此處數(shù)據(jù)獲取及特征構(gòu)造可參見金融數(shù)據(jù)準(zhǔn)備。
折線圖看趨勢
折線圖在股市中地位是不可撼動的,折線圖即股票走勢圖也就是K線圖,是股民們分析股市歷史數(shù)據(jù)即走勢的重要圖形,通常分為,日、周、月、季、年K線圖。
單條折線
fig, ax = plt.subplots()
fig.set_size_inches(12, 8)
sns.lineplot(dataset.index ,
dataset[‘Adj Close’])
雙折線
sns.lineplot(x=dataset.index,
y=“Adj Close”,
hue=“Increase_Decrease”, data=dataset)
多條折線
# Plot Multi lines
sns.lineplot(data=dataset[
[‘Open’, ‘Low’, ‘High’, ‘Close’]])
計(jì)數(shù)直方圖做對比
dataset[‘Increase_Decrease’].value_counts()
Decrease 812
Increase 759
Name: Increase_Decrease, dtype: int64
計(jì)數(shù)直方圖會自動聚合求和。可以用以比較各個不同階段成交量或成交金額的有力工具。
sns.countplot(
dataset[‘Increase_Decrease’],
label=“Count”)
散點(diǎn)圖看相關(guān)性
散點(diǎn)圖表示因變量(Y軸數(shù)值)隨自變量(X軸數(shù)值)變化的大致趨勢,從而選擇合適的函數(shù)對數(shù)據(jù)點(diǎn)進(jìn)行擬合;散點(diǎn)圖中包含的數(shù)據(jù)越多,比較的效果也越好。
可以使用散點(diǎn)圖提供關(guān)鍵信息:
1、變量之間是否存在數(shù)量關(guān)聯(lián)趨勢;2、如果存在關(guān)聯(lián)趨勢,是線性還是曲線的;3、如果有某一個點(diǎn)或者某幾個點(diǎn)偏離大多數(shù)點(diǎn),也就是離群值,通過散點(diǎn)圖可以一目了然。從而可以進(jìn)一步分析這些離群值是否可能在建模分析中對總體產(chǎn)生很大影響。
# Scatterplot
dataset.plot(kind=“scatter”,
x=“Open”,
y=“Close”,
figsize=(10,8))
二元散點(diǎn)圖和一元直方圖
用 sns.jointplot 可以同時看到兩個變量的聯(lián)合分布與單變量的獨(dú)立分布。
grid=sns.jointplot(x=“Open”,
y=“Close”,
data=dataset,
size=5)
grid.fig.set_figwidth(8)
grid.fig.set_figheight(8)
聯(lián)合分布圖也可以自動進(jìn)行 KDE 和回歸。
sns.jointplot(dataset.loc[:,‘Open’], dataset.loc[:,‘Close’], kind=“reg”, color=“#ce1414”)
結(jié)構(gòu)化多繪圖網(wǎng)格
當(dāng)您想要在數(shù)據(jù)集的子集中分別可視化變量的分布或多個變量之間的關(guān)系時,F(xiàn)acetGrid[1]類非常有用。一個FacetGrid可以與多達(dá)三個維度可以得出:row,col,和hue。前兩個與得到的軸陣列有明顯的對應(yīng)關(guān)系; 將色調(diào)變量視為沿深度軸的第三個維度,其中不同的級別用不同的顏色繪制。
基本工作流程是FacetGrid使用數(shù)據(jù)集和用于構(gòu)造網(wǎng)格的變量初始化對象。然后,可以通過調(diào)用FacetGrid.map()或?qū)⒁粋€或多個繪圖函數(shù)應(yīng)用于每個子集 FacetGrid.map_dataframe()。最后,可以使用其他方法調(diào)整繪圖,以執(zhí)行更改軸標(biāo)簽,使用不同刻度或添加圖例等操作。
grid = sns.FacetGrid(dataset, col=‘Buy_Sell’, hue=“Increase_Decrease”, size=5) .map(plt.scatter, “Open”, “Close”) .add_legend()grid.fig.set_figwidth(15)grid.fig.set_figheight(6)
grid = sns.FacetGrid(dataset, col=‘Buy_Sell’, row=‘Buy_Sell_on_Open’, hue=“Increase_Decrease”, size=6)grid.map(sns.kdeplot, “Close”) grid.add_legend()
箱圖可看離群值
# Boxplot
sns.boxplot(x=‘Increase_Decrease’,
y=dataset[‘Close’],
data=dataset)
分類散點(diǎn)圖
按照不同類別對樣本數(shù)據(jù)進(jìn)行分布散點(diǎn)圖繪制。
ax = sns.boxplot(x=‘Increase_Decrease’,
y=dataset[‘Close’],
data=dataset)
ax = sns.stripplot(x=‘Increase_Decrease’,
# 按照x軸類別進(jìn)行繪制
y=dataset[‘Close’],
data=dataset,
jitter=True,
# 當(dāng)數(shù)據(jù)重合較多時,用該參數(shù)做一些調(diào)整,# 也可以設(shè)置間距如,jitter = 0.1
edgecolor=“gray”)
# 可以通過hue參數(shù)對散點(diǎn)圖中的數(shù)值進(jìn)行分類
小提琴圖
小提琴圖是箱線圖與核密度圖的結(jié)合,箱線圖展示了分位數(shù)的位置,核密度圖則展示了任意位置的密度,通過小提琴圖可以知道哪些位置的數(shù)據(jù)點(diǎn)聚集的較多,因其形似小提琴而得名。
其外圍的曲線寬度代表數(shù)據(jù)點(diǎn)分布的密度,中間的箱線圖則和普通箱線圖表征的意義是一樣的,代表著中位數(shù)、上下分位數(shù)、極差等。細(xì)線代表 置信區(qū)間。
當(dāng)使用帶有兩種顏色的變量時,將split設(shè)置為 True 則會為每種顏色繪制對應(yīng)半邊小提琴。從而可以更容易直接的比較分布。
sns.violinplot(x=‘Increase_Decrease’,
y=dataset[‘Volume’],
hue=‘Buy_Sell’,
split=True,
data=dataset,
size=6)熱力圖
熱力圖在實(shí)際中常用于展示一組變量的相關(guān)系數(shù)矩陣,在展示列聯(lián)表的數(shù)據(jù)分布上也有較大的用途,通過熱力圖我們可以非常直觀地感受到數(shù)值大小的差異狀況。
sns.heatmap(dataset[[‘Open’, ‘High’, ‘Low’, ‘Adj Close’, ‘Volume’, ‘Returns’]].corr(),
annot=True,
linewidths=.5,
fmt= ‘.3f’)
熱力圖的右側(cè)是顏色帶,上面代表了數(shù)值到顏色的映射,數(shù)值由小到大對應(yīng)色彩由暗到亮。
pairplot看特征間的關(guān)系
seaborn中pairplot函數(shù)可視化探索數(shù)據(jù)特征間的關(guān)系。
當(dāng)你需要對多維數(shù)據(jù)集進(jìn)行可視化時,最終都要使用散布矩陣圖**(pair plot)** 。如果想畫出所有變量中任意兩個變量之間的圖形,用矩陣圖探索多維數(shù)據(jù)不同維度間的相關(guān)性非常有效。
散布圖有兩個主要用途。其一,他們圖形化地顯示兩個屬性之間的關(guān)系。直接使用散布圖,或使用變換后屬性的散布圖,也可以判斷非線性關(guān)系。
其二,當(dāng)類標(biāo)號給出時,可以使用散布圖考察兩個屬性將類分開的程度。意思是用一條直線或者更復(fù)雜的曲線,將兩個屬性定義的平面分成區(qū)域,每個區(qū)域包含一個類的大部分對象,則可能基于這對指定的屬性構(gòu)造精確的分類器。
sns.pairplot(dataset.drop(
[“Increase_Decrease”, “Buy_Sell_on_Open”,
“Buy_Sell”],axis=1), size=3,
# diag_kind=“kde”
)
PairGrid 成對關(guān)系子圖
子圖網(wǎng)格,用于在數(shù)據(jù)集中繪制成對關(guān)系。
此類將數(shù)據(jù)集中的每個變量映射到多軸網(wǎng)格中的列和行。可以使用不同的axes-level繪圖函數(shù)在上三角形和下三角形中繪制雙變量圖,并且每個變量的邊際分布可以顯示在對角線上。
它還可以使用hue參數(shù)表示條件化的附加級別,該參數(shù)以不同的顏色繪制不同的數(shù)據(jù)子集。這使用顏色來解析第三維上的元素,但僅在彼此之上繪制子集,而不會像axes-level函數(shù)接受色相那樣為特定的可視化效果定制色相參數(shù)。
sns.set(style=“white”)df = dataset.loc[:,[‘Open’,‘High’,‘Low’]]g = sns.PairGrid(df, diag_sharey=False)g.map_lower(sns.kdeplot, cmap=“Blues_d”)g.map_upper(plt.scatter)g.map_diag(sns.kdeplot, lw=3)
dataset.boxplot(by=“Increase_Decrease”, figsize=(12, 6))
pandas繪圖
條形圖
dataset[‘Volume’].resample(‘Y’).mean().plot.bar()
pandas可視化[2]中,可以使用Series和DataFrame上的plot方法,它只是一個簡單的包裝器 plt.plot(),另外還有一些有幾個繪圖功能在pandas.plotting 內(nèi)。
安德魯斯曲線
安德魯斯曲線[3]允許將多元數(shù)據(jù)繪制為大量曲線,這些曲線是使用樣本的屬性作為傅里葉級數(shù)的系數(shù)而創(chuàng)建的。通過為每個類別對這些曲線進(jìn)行不同的著色,可以可視化數(shù)據(jù)聚類。屬于同一類別的樣本的曲線通常會更靠近在一起并形成較大的結(jié)構(gòu)。
from pandas.plotting import andrews_curves
andrews_curves(dataset[
[‘Open’, ‘Close’, ‘Increase_Decrease’]],
“Increase_Decrease”)
平行坐標(biāo)
平行坐標(biāo)[4]是一種用于繪制多元數(shù)據(jù)的繪制技術(shù) 。平行坐標(biāo)允許人們查看數(shù)據(jù)中的聚類,并直觀地估計(jì)其他統(tǒng)計(jì)信息。使用平行坐標(biāo)點(diǎn)表示為連接的線段。每條垂直線代表一個屬性。一組連接的線段代表一個數(shù)據(jù)點(diǎn)。趨于聚集的點(diǎn)將顯得更靠近。
from pandas.plotting import parallel_coordinates
parallel_coordinates(dataset[
[‘Open’, ‘High’, ‘Low’, ‘Increase_Decrease’]],
“Increase_Decrease”)
徑向坐標(biāo)可視化
RadViz是一種可視化多變量數(shù)據(jù)的方法。它基于簡單的彈簧張力最小化算法。基本上,在平面上設(shè)置了一堆點(diǎn)。在我們的情況下,它們在單位圓上等距分布。每個點(diǎn)代表一個屬性。然后,假設(shè)數(shù)據(jù)集中的每個樣本都通過彈簧連接到這些點(diǎn)中的每個點(diǎn),彈簧的剛度與該屬性的數(shù)值成正比(將它們標(biāo)準(zhǔn)化為單位間隔)。樣本在平面上的沉降點(diǎn)(作用在樣本上的力處于平衡狀態(tài))是繪制代表樣本的點(diǎn)的位置。根據(jù)樣本所屬的類別,其顏色會有所不同。
from pandas.plotting import radviz
radviz(dataset[
[‘Open’,‘High’, ‘Low’, ‘Close’, ‘Increase_Decrease’]],
“Increase_Decrease”)
滯后圖
滯后圖用于檢查數(shù)據(jù)集或時間序列是否隨機(jī)。隨機(jī)數(shù)據(jù)在滯后圖中不應(yīng)顯示任何結(jié)構(gòu)。非隨機(jī)結(jié)構(gòu)意味著基礎(chǔ)數(shù)據(jù)不是隨機(jī)的。該lag參數(shù)可以傳遞,而當(dāng)lag=1時基本上是data[:-1]對 data[1:]。
from pandas.plotting import lag_plot
lag_plot(dataset[‘Volume’].tail(250))
自相關(guān)圖
自相關(guān)圖通常用于檢查時間序列中的隨機(jī)性。通過在變化的時滯中計(jì)算數(shù)據(jù)值的自相關(guān)來完成此操作。如果時間序列是隨機(jī)的,則對于任何和所有時滯間隔,此類自相關(guān)應(yīng)接近零。如果時間序列不是隨機(jī)的,則一個或多個自相關(guān)將明顯為非零。圖中顯示的水平線對應(yīng)于95%和99%的置信帶。虛線是99%置信帶。
from pandas.plotting import autocorrelation_plot
autocorrelation_plot(dataset[‘Volume’])
編輯:jq
-
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
6892瀏覽量
88828
原文標(biāo)題:Seaborn + Pandas 帶你玩轉(zhuǎn)股市數(shù)據(jù)可視化分析
文章出處:【微信號:DBDevs,微信公眾號:數(shù)據(jù)分析與開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論