<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>

          Pandas DataFrame 的可視化工具大全

          共 5677字,需瀏覽 12分鐘

           ·

          2022-07-05 18:38

          簡介

          Excel的好處之一是它提供了一個(gè)直觀和強(qiáng)大的圖形界面來查看你的數(shù)據(jù)。相比之下,pandas + Jupyter notebook 提供了大量的編程能力,但在圖形化顯示和操作DataFrame視圖方面能力有限。

          在Python生態(tài)系統(tǒng)中,有幾個(gè)工具被設(shè)計(jì)來填補(bǔ)這一空白。它們的復(fù)雜程度從簡單的JavaScript庫到復(fù)雜的、全功能的數(shù)據(jù)分析引擎不等。一個(gè)共同點(diǎn)是它們都提供了一種以圖形格式查看和選擇性地過濾數(shù)據(jù)的方法。從這個(gè)共同點(diǎn)出發(fā),它們?cè)谠O(shè)計(jì)和功能上有很大的不同。

          本文將回顧這些DataFrame可視化選項(xiàng)中的幾個(gè),以便讓你了解情況并評(píng)估哪些選項(xiàng)可能對(duì)你的分析過程有用。

          背景介紹

          對(duì)于這篇文章,我們將使用某銷售數(shù)據(jù)集樣本。下面是Jupyter notebook中的數(shù)據(jù)視圖。

          1. import pandas

          2. url = 'https://github.com/chris1610/pbpython/blob/master/data/2018_Sales_Total_v2.xlsx?raw=True'

          3. df = pd.read_excel(url)


          4. df

          下面是Excel中一個(gè)類似的視圖,對(duì)所有列都應(yīng)用了過濾器。

          這種在Excel中熟悉的視圖使你能夠輕松地看到你的所有數(shù)據(jù)。你可以通過過濾和排序來檢查數(shù)據(jù),并在需要時(shí)深入了解細(xì)節(jié)。當(dāng)你在探索一個(gè)新的數(shù)據(jù)集或解決一個(gè)現(xiàn)有數(shù)據(jù)集的新問題時(shí),這種類型的功能是最有用的。

          顯然,對(duì)于數(shù)百萬行的數(shù)據(jù),這是不可行的。然而,即使你有大的數(shù)據(jù)集,并且是一個(gè)pandas專家,希望你仍然會(huì)把DataFrames轉(zhuǎn)存到Excel,并查看數(shù)據(jù)的子集。

          我使用Excel+python的部分原因是,在Excel中檢查數(shù)據(jù)的特別能力要比普通的DataFrame視圖好得多。

          有了這個(gè)背景,讓我們來看看在Excel中復(fù)制這種簡單的查看能力的一些選項(xiàng)。

          JavaScript工具

          最簡單的方法是使用一個(gè)JavaScript庫來為Jupyter notebook中的DataFrame視圖添加一些交互性。

          Qgrid

          我們要看的第一個(gè)工具是來自Quantopian的Qgrid。這個(gè)Jupyter notebook部件使用SlickGrid組件來為你的DataFrame添加互動(dòng)性。

          一旦它被安裝,你可以顯示一個(gè)支持排序和過濾數(shù)據(jù)的DataFrame版本。

          1. import qgrid

          2. import pandas

          3. url = 'https://github.com/chris1610/pbpython/blob/master/data/2018_Sales_Total_v2.xlsx?raw=True'

          4. df = pd.read_excel(url)


          5. widget = qgrid.show_grid(df)

          6. widget

          Qgrid支持使用基于底層數(shù)據(jù)類型的各種部件進(jìn)行直觀的過濾。此外,你可以配置一些渲染功能,然后將選定的數(shù)據(jù)讀入一個(gè)DataFrame。這是一個(gè)相當(dāng)有用的功能。

          Qgrid不進(jìn)行任何可視化,也不允許你使用pandas表達(dá)式來過濾和選擇數(shù)據(jù)。

          總的來說,Qgrid對(duì)于簡單的數(shù)據(jù)操作和檢查來說效果不錯(cuò)。

          PivottableJs

          下一個(gè)選項(xiàng)并不是用來查看DataFrame的,但我認(rèn)為它是一個(gè)非常有用的總結(jié)數(shù)據(jù)的工具,所以我把它包括在內(nèi)。

          pivottablejs模塊使用一個(gè)透視表JavaScript庫,用于交互式數(shù)據(jù)透視和總結(jié)。

          一旦安裝了它,使用起來就很簡單。

          1. from pivottablejs import pivot_ui


          2. pivot_ui(df)

          在這個(gè)例子中,我通過點(diǎn)擊和拖動(dòng)總結(jié)了每個(gè)客戶的購買數(shù)量。

          除了基本的求和功能外,你也可以做一些可視化和統(tǒng)計(jì)分析。

          這個(gè)小組件對(duì)于過濾原始的DataFrame沒有用處,但是對(duì)于數(shù)據(jù)的透視和總結(jié)來說確實(shí)很強(qiáng)大。其中一個(gè)很好的特點(diǎn)是,一旦你建立了透視表,你就可以過濾數(shù)據(jù)。

          這個(gè)部件的另一個(gè)缺點(diǎn)是,它沒有利用任何pandas的透視或選擇功能。盡管如此,pivottablejs仍然是一個(gè)非常有用的快速透視和總結(jié)的工具。

          數(shù)據(jù)分析應(yīng)用

          第二類GUI應(yīng)用是成熟的應(yīng)用,通常使用網(wǎng)絡(luò)后端,如Flask或基于Qt的獨(dú)立應(yīng)用。這些應(yīng)用程序的復(fù)雜性和能力各不相同,從簡單的表格視圖和繪圖能力到強(qiáng)大的統(tǒng)計(jì)分析。這些工具的一個(gè)獨(dú)特之處在于,它們與pandas緊密結(jié)合,因此你可以使用pandas代碼來過濾數(shù)據(jù)并與這些應(yīng)用程序進(jìn)行交互。

          PandasGUI

          我將討論的第一個(gè)應(yīng)用程序是PandasGUI。這個(gè)應(yīng)用程序的獨(dú)特之處在于,它是一個(gè)用Qt構(gòu)建的獨(dú)立應(yīng)用程序,可以從Jupyter notebook中調(diào)用。

          使用前面例子中的相同數(shù)據(jù),導(dǎo)入 show命令。

          1. from pandasgui import show


          2. show(df)

          如果一切順利的話,你最終會(huì)得到一個(gè)獨(dú)立的GUI。因?yàn)樗且粋€(gè)獨(dú)立的應(yīng)用程序,你可以對(duì)視圖進(jìn)行相當(dāng)多的配置。例如,我移動(dòng)了幾個(gè)標(biāo)簽,在一個(gè)頁面上顯示更多的能力。

          在這個(gè)例子中,我使用pandas查詢語法過濾數(shù)據(jù),以顯示一個(gè)客戶和購買數(shù)量>15的情況。

          PandasGUI與Plotly集成,也可以建立可視化。下面是一個(gè)單價(jià)柱狀圖的例子。

          PandasGUI的一個(gè)很好的功能是,過濾器在所有標(biāo)簽中都對(duì)DataFrame有效。你可以使用這個(gè)功能,在繪制或轉(zhuǎn)換數(shù)據(jù)時(shí)嘗試不同的數(shù)據(jù)視圖。

          PandasGUI的另一個(gè)功能是,你可以通過透視或融合來重新塑造數(shù)據(jù)。下面是一個(gè)按SKU分類的單位銷售量的匯總。

          下面是產(chǎn)生的視圖的樣子。

          PandasGUI是一個(gè)令人印象深刻的應(yīng)用程序。我喜歡它如何跟蹤所有的變化,并且只是一個(gè)標(biāo)準(zhǔn)pandas功能的小包裝。這個(gè)程序正在積極開發(fā)中,所以我將密切關(guān)注它,看它如何隨著時(shí)間的推移而改進(jìn)和發(fā)展。

          Tabloo

          Tabloo這個(gè)名字讓我每次看到它都會(huì)微笑。希望某個(gè)BI商業(yè)化可視化工具不會(huì)因?yàn)檫@個(gè)名字的相似性而感到不悅!

          無論如何,Tabloo使用Flask后端為DataFrames提供一個(gè)簡單的可視化工具,以及類似于PandasGUI的繪圖能力。

          使用Tabloo與PandasGUI非常相似。

          1. import tabloo


          2. tabloo.show(df)

          Tabloo使用了像PandasGUI那樣的查詢語法,但我無法弄清楚如何像PandasGUI那樣添加多個(gè)過濾器。

          最后,Tabloo確實(shí)也有一些基本的繪圖功能,但它不像PandasGUI那樣豐富。

          Tabloo有一些有趣的概念,但沒有像PandasGUI那樣的能力。它已經(jīng)有一段時(shí)間沒有更新了,所以它可能處于休眠狀態(tài),但我想把它包含進(jìn)來,以獲得盡可能完整的調(diào)查。

          Dtale

          最后一個(gè)應(yīng)用程序是Dtale,它是最復(fù)雜的選項(xiàng)。Dtale的架構(gòu)與Tabloo類似,它使用Flask后端,但也包括一個(gè)強(qiáng)大的React前端。Dtale是一個(gè)成熟的項(xiàng)目,有很多的文檔和很多的功能。我將在這篇文章中只介紹一小部分功能。

          開始使用Dtale與本類別中的其他應(yīng)用程序類似。

          1. import dtale


          2. dtale.show(df)

          這個(gè)視圖給你一個(gè)提示,Dtale不僅僅是一個(gè)數(shù)據(jù)框架查看器。它是一個(gè)非常強(qiáng)大的統(tǒng)計(jì)工具集。我不能在這里介紹所有的增強(qiáng)功能,但這里有一個(gè)快速例子,顯示了單位價(jià)格列的直方圖。

          我非常喜歡Dtale的一個(gè)特點(diǎn)是,你可以導(dǎo)出代碼并看到它在做什么。這是一個(gè)非常強(qiáng)大的功能,使Excel+Python解決方案區(qū)別于普通的Excel。

          下面是一個(gè)從上面的可視化中導(dǎo)出代碼的例子。

          1. # DISCLAIMER: 'df' refers to the data you passed in when calling 'dtale.show'


          2. import numpy as np

          3. import pandas as pd


          4. if isinstance(df, (pd.DatetimeIndex, pd.MultiIndex)):

          5. df = df.to_frame(index=False)


          6. # remove any pre-existing indices for ease of use in the D-Tale code, but this is not required

          7. df = df.reset_index().drop('index', axis=1, errors='ignore')

          8. df.columns = [str(c) for c in df.columns] # update columns to strings in case they are numbers


          9. s = df[~pd.isnull(df['{col}'])][['{col}']]

          10. chart, labels = np.histogram(s, bins=20)

          11. import scipy.stats as sts


          12. kde = sts.gaussian_kde(s['unit price'])

          13. kde_data = kde.pdf(np.linspace(labels.min(), labels.max()))

          14. # main statistics

          15. stats = df['unit price'].describe().to_frame().T

          關(guān)于過濾數(shù)據(jù)的問題,Dtale也允許你對(duì)數(shù)據(jù)進(jìn)行格式化。在下面的例子中,我對(duì)貨幣和日期列進(jìn)行了格式化,使其更容易閱讀。

          正如我先前所說,Dtale是一個(gè)強(qiáng)大的工具,有很多能力。如果你有興趣,我鼓勵(lì)你檢查一下,看看它是否適合你。

          需要注意的一個(gè)方面是,在試圖運(yùn)行Dtale時(shí),你可能會(huì)遇到Windows防火墻問題。在一個(gè)封閉的公司機(jī)器上,這可能是一個(gè)問題。關(guān)于各種安裝選項(xiàng)的更多細(xì)節(jié),請(qǐng)參考文檔。

          不管這個(gè)問題如何,我認(rèn)為它絕對(duì)值得檢查一下Dtale,即使只是為了看看你可以使用的所有功能。

          IDE變量查看器

          如果你在VS Code或Spyder等工具中進(jìn)行開發(fā),你可以使用一個(gè)簡單的DataFrame變量查看器。

          例如,這里是使用Spyder的變量資源管理器對(duì)我們的DataFrame的查看。

          如果你使用Spyder,這個(gè)查看器是非常方便的。你在GUI中沒有任何過濾數(shù)據(jù)的能力,但你可以改變排序順序。

          VS Code也有一個(gè)類似的功能。下面是一個(gè)簡單的視圖,顯示了你如何過濾數(shù)據(jù)。

          如果你已經(jīng)在Spyder或VS code中進(jìn)行工作,這些功能都很有用。然而,當(dāng)涉及到復(fù)雜的過濾或復(fù)雜的數(shù)據(jù)分析時(shí),它們幾乎沒有Dtale的能力。

          但我希望VS Code能繼續(xù)改進(jìn)他們的DataFrame查看器?,F(xiàn)在看來,VS Code幾乎可以做任何事情,所以我很想看看這個(gè)功能是如何發(fā)展的。

          PyXLL

          前面提到的文章需要PyXLL包,這是一個(gè)商業(yè)應(yīng)用。我對(duì)一個(gè)公司開發(fā)商業(yè)產(chǎn)品沒有意見。我認(rèn)為這對(duì) Python 生態(tài)系統(tǒng)的成功至關(guān)重要。然而,一個(gè)付費(fèi)的選項(xiàng)意味著你可能需要得到更多的支持才能把它引入你的組織。幸運(yùn)的是,你可以免費(fèi)試用30天,看看它是否符合你的需求。

          拋開這個(gè)注意事項(xiàng),讓我們用我們的例子數(shù)據(jù)集來試試。

          真正強(qiáng)大的是,你可以讓notebook與Excel并列,并使用jupyter魔法命令在notebook和Excel之間交換數(shù)據(jù)。在這個(gè)例子中,使用 %xl_set df將直接把DataFrame放到Excel文件中。然后,你可以在混合模式下與Excel工作。

          PyXLL在整合Python和Excel方面有很多不同的功能,所以很難將其與前面討論的框架進(jìn)行比較。總的來說,我喜歡使用Excel的可視化組件加上Python編程的力量的想法。如果你對(duì)這種Python和Excel的結(jié)合感興趣,你肯定應(yīng)該看看PyXLL。

          xlwings

          xlwings已經(jīng)存在了一段時(shí)間,xlwings與PyXLL類似,它也是由一家商業(yè)公司支持的。然而,它有一個(gè)開源的社區(qū)版,以及一個(gè)付費(fèi)的專業(yè)版。這里的例子使用的是社區(qū)版。完整的專業(yè)版xlwings軟件包有幾個(gè)不同的功能來整合Excel和Python。

          雖然xlwings不能直接與Jupyter notebook集成,但你可以用DataFrame實(shí)時(shí)填充Excel電子表格并使用Excel進(jìn)行分析。

          下面是一個(gè)簡短的代碼片段。

          1. import pandas as pd

          2. import xlwings as xw


          3. url = 'https://github.com/chris1610/pbpython/blob/master/data/2018_Sales_Total_v2.xlsx?raw=True'

          4. df = pd.read_excel(url)


          5. # Create a new workbook and add the DataFrame to Sheet1

          6. xw.view(df)

          這段代碼將打開一個(gè)新的Excel實(shí)例并將df放入A1單元格。下面是它的樣子。

          這可以是一個(gè)快速的捷徑,而不是保存并重新打開Excel來查看你的數(shù)據(jù)。其實(shí)這樣做很簡單,所以我可能會(huì)在自己的數(shù)據(jù)分析中多嘗試一些。

          總結(jié)

          這篇文章已經(jīng)涵蓋了很多內(nèi)容。這里有一張圖片,總結(jié)了我們討論的所有選項(xiàng)。

          是否有一個(gè)適用于所有人的解決方案?我不這么認(rèn)為。我想寫這篇文章的部分原因是,我想引起對(duì) "最佳 "解決方案的討論。我希望你能借此機(jī)會(huì)查看其中一些解決方案,看看它們是否適合你的分析過程。這些解決方案中的每一個(gè)都以不同的方式解決了問題的不同方面。我猜想,用戶很可能會(huì)把其中幾個(gè)結(jié)合在一起--這取決于他們?cè)噲D解決的問題。

          我預(yù)測(cè)我們將繼續(xù)看到這個(gè)領(lǐng)域的演變。我希望我們能夠找到一個(gè)解決方案,利用Excel的一些互動(dòng)直觀的方面,以及與使用Python和pandas進(jìn)行數(shù)據(jù)操作有關(guān)的力量和透明度。隨著Guido van Rossum加入微軟,也許我們會(huì)在這個(gè)領(lǐng)域看到更多的進(jìn)展?

          瀏覽 116
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

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

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <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>
                  国产精品久久久久久久免费大片 | 中国另类福利操逼 | 北条麻妃99 | 97人妻视频 | 人妻资源网 |