1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        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ù)分析在介紹可視化探索特征變量時(shí)已經(jīng)介紹了多個(gè)可視化圖形繪制方法,本文繼續(xù)介紹兩大繪圖技巧,分布使用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)備。

        折線圖看趨勢(shì)

        折線圖在股市中地位是不可撼動(dòng)的,折線圖即股票走勢(shì)圖也就是K線圖,是股民們分析股市歷史數(shù)據(jù)即走勢(shì)的重要圖形,通常分為,日、周、月、季、年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ù)直方圖做對(duì)比

        dataset['Increase_Decrease'].value_counts()
        Decrease    812
        Increase 759
        Name: Increase_Decrease, dtype: int64

        計(jì)數(shù)直方圖會(huì)自動(dòng)聚合求和??梢杂靡员容^各個(gè)不同階段成交量或成交金額的有力工具。

        sns.countplot(
                dataset['Increase_Decrease'],
                label="Count")   

        散點(diǎn)圖看相關(guān)性

        散點(diǎn)圖表示因變量(Y軸數(shù)值)隨自變量(X軸數(shù)值)變化的大致趨勢(shì),從而選擇合適的函數(shù)對(duì)數(shù)據(jù)點(diǎn)進(jìn)行擬合;散點(diǎn)圖中包含的數(shù)據(jù)越多,比較的效果也越好。

        可以使用散點(diǎn)圖提供關(guān)鍵信息:

        1、變量之間是否存在數(shù)量關(guān)聯(lián)趨勢(shì);
        2、如果存在關(guān)聯(lián)趨勢(shì),是線性還是曲線的;
        3、如果有某一個(gè)點(diǎn)或者某幾個(gè)點(diǎn)偏離大多數(shù)點(diǎn),也就是離群值,通過散點(diǎn)圖可以一目了然。從而可以進(jìn)一步分析這些離群值是否可能在建模分析中對(duì)總體產(chǎn)生很大影響。

        # Scatterplot
        dataset.plot(kind="scatter"
                     x="Open"
                     y="Close",
                     figsize=(10,8))

        二元散點(diǎn)圖和一元直方圖

        用 sns.jointplot 可以同時(shí)看到兩個(gè)變量的聯(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)合分布圖也可以自動(dòng)進(jìn)行 KDE 和回歸。

        sns.jointplot(dataset.loc[:,'Open'], 
                      dataset.loc[:,'Close'], 
                      kind="reg"
                      color="#ce1414")

        結(jié)構(gòu)化多繪圖網(wǎng)格

        當(dāng)您想要在數(shù)據(jù)集的子集中分別可視化變量的分布或多個(gè)變量之間的關(guān)系時(shí),FacetGrid[1]類非常有用。一個(gè)FacetGrid可以與多達(dá)三個(gè)維度可以得出:row,col,和hue。前兩個(gè)與得到的軸陣列有明顯的對(duì)應(yīng)關(guān)系; 將色調(diào)變量視為沿深度軸的第三個(gè)維度,其中不同的級(jí)別用不同的顏色繪制。

        基本工作流程是FacetGrid使用數(shù)據(jù)集和用于構(gòu)造網(wǎng)格的變量初始化對(duì)象。然后,可以通過調(diào)用FacetGrid.map()或?qū)⒁粋€(gè)或多個(gè)繪圖函數(shù)應(yīng)用于每個(gè)子集 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)圖

        按照不同類別對(duì)樣本數(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í),用該參數(shù)做一些調(diào)整,
        # 也可以設(shè)置間距如,jitter = 0.1
                           edgecolor="gray")
        # 可以通過hue參數(shù)對(duì)散點(diǎn)圖中的數(shù)值進(jìn)行分類

        小提琴圖

        小提琴圖是箱線圖與核密度圖的結(jié)合,箱線圖展示了分位數(shù)的位置,核密度圖則展示了任意位置的密度,通過小提琴圖可以知道哪些位置的數(shù)據(jù)點(diǎn)聚集的較多,因其形似小提琴而得名。

        其外圍的曲線寬度代表數(shù)據(jù)點(diǎn)分布的密度,中間的箱線圖則和普通箱線圖表征的意義是一樣的,代表著中位數(shù)、上下分位數(shù)、極差等。細(xì)線代表  置信區(qū)間。

        當(dāng)使用帶有兩種顏色的變量時(shí),將split設(shè)置為 True 則會(huì)為每種顏色繪制對(duì)應(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ù)值由小到大對(duì)應(yīng)色彩由暗到亮。

        pairplot看特征間的關(guān)系

        seabornpairplot函數(shù)可視化探索數(shù)據(jù)特征間的關(guān)系。

        當(dāng)你需要對(duì)多維數(shù)據(jù)集進(jìn)行可視化時(shí),最終都要使用散布矩陣圖**(pair plot)** 。如果想畫出所有變量中任意兩個(gè)變量之間的圖形,用矩陣圖探索多維數(shù)據(jù)不同維度間的相關(guān)性非常有效。

        散布圖有兩個(gè)主要用途。其一,他們圖形化地顯示兩個(gè)屬性之間的關(guān)系。直接使用散布圖,或使用變換后屬性的散布圖,也可以判斷非線性關(guān)系。

        其二,當(dāng)類標(biāo)號(hào)給出時(shí),可以使用散布圖考察兩個(gè)屬性將類分開的程度。意思是用一條直線或者更復(fù)雜的曲線,將兩個(gè)屬性定義的平面分成區(qū)域,每個(gè)區(qū)域包含一個(gè)類的大部分對(duì)象,則可能基于這對(duì)指定的屬性構(gòu)造精確的分類器。

        sns.pairplot(dataset.drop(
            ["Increase_Decrease""Buy_Sell_on_Open"
            "Buy_Sell"],axis=1), size=3,
                     # diag_kind="kde"
                    )

        PairGrid 成對(duì)關(guān)系子圖

        子圖網(wǎng)格,用于在數(shù)據(jù)集中繪制成對(duì)關(guān)系。

        此類將數(shù)據(jù)集中的每個(gè)變量映射到多軸網(wǎng)格中的列和行??梢允褂貌煌?code style="padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;background-color: rgba(27, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(205, 133, 63);">axes-level繪圖函數(shù)在上三角形和下三角形中繪制雙變量圖,并且每個(gè)變量的邊際分布可以顯示在對(duì)角線上。

        它還可以使用hue參數(shù)表示條件化的附加級(jí)別,該參數(shù)以不同的顏色繪制不同的數(shù)據(jù)子集。這使用顏色來解析第三維上的元素,但僅在彼此之上繪制子集,而不會(huì)像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方法,它只是一個(gè)簡單的包裝器 plt.plot(),另外還有一些有幾個(gè)繪圖功能在pandas.plotting 內(nèi)。

        安德魯斯曲線

        安德魯斯曲線[3]允許將多元數(shù)據(jù)繪制為大量曲線,這些曲線是使用樣本的屬性作為傅里葉級(jí)數(shù)的系數(shù)而創(chuàng)建的。通過為每個(gè)類別對(duì)這些曲線進(jìn)行不同的著色,可以可視化數(shù)據(jù)聚類。屬于同一類別的樣本的曲線通常會(huì)更靠近在一起并形成較大的結(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)表示為連接的線段。每條垂直線代表一個(gè)屬性。一組連接的線段代表一個(gè)數(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ù)的方法。它基于簡單的彈簧張力最小化算法?;旧希谄矫嫔显O(shè)置了一堆點(diǎn)。在我們的情況下,它們?cè)趩挝粓A上等距分布。每個(gè)點(diǎn)代表一個(gè)屬性。然后,假設(shè)數(shù)據(jù)集中的每個(gè)樣本都通過彈簧連接到這些點(diǎn)中的每個(gè)點(diǎn),彈簧的剛度與該屬性的數(shù)值成正比(將它們標(biāo)準(zhǔn)化為單位間隔)。樣本在平面上的沉降點(diǎn)(作用在樣本上的力處于平衡狀態(tài))是繪制代表樣本的點(diǎn)的位置。根據(jù)樣本所屬的類別,其顏色會(huì)有所不同。

        from pandas.plotting import radviz

        radviz(dataset[
            ['Open','High''Low''Close', 'Increase_Decrease']]
              "Increase_Decrease"
        )

        滯后圖

        滯后圖用于檢查數(shù)據(jù)集或時(shí)間序列是否隨機(jī)。隨機(jī)數(shù)據(jù)在滯后圖中不應(yīng)顯示任何結(jié)構(gòu)。非隨機(jī)結(jié)構(gòu)意味著基礎(chǔ)數(shù)據(jù)不是隨機(jī)的。該lag參數(shù)可以傳遞,而當(dāng)lag=1時(shí)基本上是data[:-1]對(duì) data[1:]

        from pandas.plotting import lag_plot
        lag_plot(dataset['Volume'].tail(250))

        自相關(guān)圖

        自相關(guān)圖通常用于檢查時(shí)間序列中的隨機(jī)性。通過在變化的時(shí)滯中計(jì)算數(shù)據(jù)值的自相關(guān)來完成此操作。如果時(shí)間序列是隨機(jī)的,則對(duì)于任何和所有時(shí)滯間隔,此類自相關(guān)應(yīng)接近零。如果時(shí)間序列不是隨機(jī)的,則一個(gè)或多個(gè)自相關(guān)將明顯為非零。圖中顯示的水平線對(duì)應(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--


        留言贈(zèng)書

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

        掃碼即可加我微信

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

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

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


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

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

        激勵(lì)

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

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

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

        額外激勵(lì)

        文章閱讀量超過2000,激勵(lì)50元

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

        長期投稿作者還有額外激勵(lì),技術(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)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            日韩一级性爱视频 | 床戏做爰呻吟声 | 欧美干b视频 | 国a产久v久伊人 台湾一级特黄aa大片免费看 | 亚洲艹| 欧美一区二区三区四区夜夜大片 | 2017人人操 | 99国产精品白浆无码流出网站 | by73777在线看片 | 国产91精品入口 |