<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Seaborn + Pandas帶你玩轉(zhuǎn)股市數(shù)據(jù)可視化分析

          共 11250字,需瀏覽 23分鐘

           ·

          2021-05-24 19:20

          ↑↑↑關(guān)注后"星標(biāo)"簡說Python

          人人都可以簡單入門Python、爬蟲、數(shù)據(jù)分析
           簡說Python推薦 
          來源:數(shù)據(jù)STUDIO
          作者:云朵君

          大家好,我是老表。

          導(dǎo)讀: 前面探索性數(shù)據(jù)分析在介紹可視化探索特征變量時已經(jīng)介紹了多個可視化圖形繪制方法,本文繼續(xù)介紹兩大繪圖技巧,分布使用seaborn與pandas包繪制可視化圖形。旨在通過金融股市歷史價格數(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(128)
          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)系時,FacetGrid[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)系

          seabornpairplot函數(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=(126))

          pandas繪圖

          條形圖

          dataset['Volume'].resample('Y').mean().plot.bar()

          pandas可視化[2]中,可以使用SeriesDataFrame上的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'])

          參考資料

          [1] 

          FacetGrid: https://blog.csdn.net/weixin_42398658/article/details/82960379

          [2] 

          pandas可視化: https://pandas.pydata.org/pandas-docs/stable/user_guide/visualization.html

          [3] 

          安德魯斯曲線: https://en.wikipedia.org/wiki/Andrews_plot

          [4] 

          平行坐標(biāo): https://en.wikipedia.org/wiki/Parallel_coordinates  

          --END--


          留言贈書

          贈書規(guī)則給本文點(diǎn)贊("在看"不作要求),掃描下方二維碼,添加老表的微信。把點(diǎn)贊截圖發(fā)給我,我會發(fā)送抽獎碼給大家,時間截止至05月28號 20:00。,可獲得《人工智能數(shù)學(xué)基礎(chǔ)》贈書一本。

          掃碼即可加我微信

          觀看朋友圈,獲取最新學(xué)習(xí)資源

          注意:中獎?wù)?4小時內(nèi),微信私聊我回復(fù):書名+姓名+電話+收件地址即可領(lǐng)取,逾期不候!為了大家都有機(jī)會中獎,本月已經(jīng)中過書的朋友,再次中獎將不再贈書。

          本批書籍由 北京大學(xué)出版社 贊助,再次致謝。也歡迎大家自行前往購買支持。


          簡說Python 投稿規(guī)則及激勵

          規(guī)則:必須是自己的原創(chuàng)文章,和Python相關(guān)技術(shù)文章,形式不限制(文字、圖文、漫畫等),字?jǐn)?shù)800+,在微信公眾號首發(fā)。

          激勵

          根據(jù)文章內(nèi)容 字?jǐn)?shù) 分為兩種基礎(chǔ)和深度

          基礎(chǔ)文章:每投稿兩篇可以獲得技術(shù)相關(guān)圖書一本 從書單里選

          深度文章:每1k字50-100元(代碼不算)

          額外激勵

          文章閱讀量超過2000,激勵50元

          文章被同量級大號轉(zhuǎn)載次數(shù)5次及以上,激勵100元

          長期投稿作者還有額外激勵,技術(shù)能力可以的,還可以一起做項(xiàng)目,接私活,內(nèi)推等。



          學(xué)習(xí)更多:
          整理了我開始分享學(xué)習(xí)筆記到現(xiàn)在超過250篇優(yōu)質(zhì)文章,涵蓋數(shù)據(jù)分析、爬蟲、機(jī)器學(xué)習(xí)等方面,別再說不知道該從哪開始,實(shí)戰(zhàn)哪里找了

          點(diǎn)贊”傳統(tǒng)美德不能丟 

          瀏覽 52
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  无码AV电影 | 亚洲成人中文字幕影院 | 亚洲色图第一页 | 影音先锋最新男人资源 | 国产婷婷激情综合 |