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