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

          Python 交互式數(shù)據(jù)可視化框架:Dash(上)

          共 7468字,需瀏覽 15分鐘

           ·

          2021-01-15 18:37

          過去,創(chuàng)建分析型Web應(yīng)用程序需要開發(fā)人員的豐富經(jīng)驗(yàn),這些開發(fā)人員需要掌握多種編程語(yǔ)言和框架知識(shí)。如今,您只需使用Python編程語(yǔ)言即可制作數(shù)據(jù)可視化界面。而其中一種流行的工具就是Dash(https://dash.plotly.com/introduction)。
          Dash使數(shù)據(jù)科學(xué)家能夠在交互式Web應(yīng)用程序中展示其結(jié)果。您無需成為網(wǎng)頁(yè)開發(fā)專家??赡苤恍枰粋€(gè)下午的時(shí)間,您就可以構(gòu)建和部署Dash應(yīng)用程序,并與他人共享。
          在本教程中,您將學(xué)習(xí)下列內(nèi)容:
          • 創(chuàng)建一個(gè)Dash應(yīng)用程序
          • 如何使用Dash核心組件和HTML組件
          • 自定義Dash應(yīng)用程序的樣式
          • 使用回調(diào)函數(shù)構(gòu)建交互式應(yīng)用程序
          • 在Heroku上部署您的應(yīng)用程序
          Dash 是什么?
          Dash是用于構(gòu)建數(shù)據(jù)可視化界面的開源框架。它于2017年作為Python第三方庫(kù)發(fā)布,現(xiàn)已發(fā)展為包含R語(yǔ)言和Julia語(yǔ)言的版本。Dash使數(shù)據(jù)分析師無需掌握高級(jí)Web開發(fā)知識(shí)即可構(gòu)建Web數(shù)據(jù)可視化應(yīng)用。
          下面三種技術(shù)構(gòu)成Dash的核心:
          • 1、Flask提供了Web服務(wù)器功能。
          • 2、React.js呈現(xiàn)網(wǎng)頁(yè)的用戶界面。
          • 3、Plotly.js生成您在應(yīng)用程序中使用的圖表。
          但是您不必?fù)?dān)心如何使這些技術(shù)進(jìn)行協(xié)同工作。Dash將幫助您,您只需要會(huì)編寫Python、R或Julia語(yǔ)言,以及一些CSS知識(shí)即可。
          加拿大的Plotly(https://plotly.com/)公司建立了Dash并支持其發(fā)展。您可能從共享其名稱的流行圖形庫(kù)(https://plotly.com/graphing-libraries/)中了解該公司。Plotly公司開放了Dash的源代碼,并根據(jù)MIT許可證發(fā)布了它,因此您可以免費(fèi)使用Dash。
          Plotly還為Dash提供了稱為Dash Enterprise的商業(yè)伙伴付費(fèi)服務(wù)。這項(xiàng)付費(fèi)服務(wù)為商業(yè)公司提供了以下支持服務(wù),例如在Dash應(yīng)用程序上托管、部署和處理身份驗(yàn)證。但是這些功能不在Dash的開源生態(tài)系統(tǒng)中。
          Dash將幫助您快速構(gòu)建dashboard儀表板。如果您習(xí)慣于使用Python分析數(shù)據(jù)或建立數(shù)據(jù)可視化效果,那么Dash將是您工具箱中的有用補(bǔ)充。以下是一些您可以使用Dash制作的示例:
          • 可實(shí)時(shí)分析交易頭寸的dashboard儀表盤https://dash-gallery.plotly.host/dash-web-trader/
          • 數(shù)百萬個(gè) Uber 行程的可視化
          https://dash-gallery.plotly.host/dash-uber-rides-demo/
          • 一個(gè)交互式的財(cái)務(wù)報(bào)告
          https://dash-gallery.plotly.host/dash-financial-report/
          這只是很簡(jiǎn)單的幾個(gè)樣例。如果您想查看其他有趣的用例,請(qǐng)查看Dash App Gallery(https://dash-gallery.plotly.host/Portal/)。
          Python中的Dash入門
          在本教程中,您將學(xué)習(xí)使用Dash構(gòu)建儀表板的詳細(xì)過程。如果遵循這些示例,那么您將從本地計(jì)算機(jī)上的準(zhǔn)系統(tǒng)儀表板轉(zhuǎn)到部署在Heroku上的樣式化儀表板。
          要構(gòu)建儀表板,您將使用2015年至2018年期間美國(guó)鱷梨銷售和價(jià)格數(shù)據(jù)集(https://www.kaggle.com/neuromusic/avocado-prices)。該數(shù)據(jù)集由Justin Kiggins使用Hass Avocado Board(https://www.hassavocadoboard.com/retail/volume-and-price-data)提供的數(shù)據(jù)整理而來。
          如何設(shè)置本地環(huán)境
          要開發(fā)應(yīng)用,您需要一個(gè)新目錄來存儲(chǔ)代碼和數(shù)據(jù),以及一個(gè)干凈的Python 3 虛擬環(huán)境。要?jiǎng)?chuàng)建這個(gè)環(huán)境,請(qǐng)按照以下說明進(jìn)行操作,選擇與您的操作系統(tǒng)匹配的版本。
          如果您使用的是Windows系統(tǒng),請(qǐng)打開命令提示符并執(zhí)行以下命令:
          c:\>?mkdir?avocado_analytics?&&?cd?avocado_analytics
          c:\>?c:\path\to\python\launcher\python?-m?venv?venv
          c:\>?venv\Scripts\activate.bat
          第一個(gè)命令為您的項(xiàng)目創(chuàng)建一個(gè)目錄,并將當(dāng)前位置移動(dòng)到該目錄。第二條命令在該位置創(chuàng)建一個(gè)虛擬環(huán)境。最后一條命令激活虛擬環(huán)境。確保將第二個(gè)命令中的路徑替換為Python 3啟動(dòng)器的路徑。
          如果您使用的是macOS或Linux系統(tǒng),請(qǐng)從終端執(zhí)行以下步驟:
          $?mkdir?avocado_analytics?&&?cd?avocado_analytics
          $?python3?-m?venv?venv
          $?source?venv/bin/activate
          前兩個(gè)命令執(zhí)行以下操作:
          1、創(chuàng)建一個(gè)名為avocado_analytics的目錄?
          2、將您當(dāng)前的位置移動(dòng)到avocado_analytics目錄?
          3、在該目錄中創(chuàng)建一個(gè)干凈的虛擬環(huán)境venv
          最后一條命令激活您剛剛創(chuàng)建的虛擬環(huán)境。
          接下來,您需要安裝所需的庫(kù)。您可以在虛擬環(huán)境中使用pip來實(shí)現(xiàn)。如下安裝庫(kù):
          (venv)?$?python?-m?pip?install?dash==1.13.3?pandas==1.0.5
          此命令將在您的虛擬環(huán)境中安裝Dash和pandas。您將使用這些軟件包的特定版本,以確保與本教程中使用的環(huán)境具有相同的環(huán)境。除了Dash之外,pandas還可以幫助您讀取和處理將在應(yīng)用程序中使用的數(shù)據(jù)。
          最后,您需要一些數(shù)據(jù)以將其輸入到儀表板中。將數(shù)據(jù)另存為avocado.csv在項(xiàng)目的根目錄中。到目前為止,您應(yīng)該已經(jīng)有了一個(gè)虛擬環(huán)境,其中包含必需的庫(kù)以及項(xiàng)目根文件夾中的數(shù)據(jù)。您項(xiàng)目的結(jié)構(gòu)應(yīng)如下所示:
          avocado_analytics/
          |
          ├──?venv/
          |
          └──?avocado.csv
          接下來,您將構(gòu)建第一個(gè)Dash應(yīng)用程序。
          如何構(gòu)建Dash應(yīng)用程序
          分兩個(gè)步驟考慮構(gòu)建Dash應(yīng)用程序的過程:
          • 根據(jù)應(yīng)用的布局來定義應(yīng)用的外觀。
          • 使用回調(diào)函數(shù)來確定應(yīng)用程序的哪些部分是交互式的,以及它們?nèi)绾雾憫?yīng)。
          在本節(jié)中,您將了解布局,在下一節(jié)中,將學(xué)習(xí)如何使儀表板具有交互性。首先,設(shè)置初始化應(yīng)用程序所需的所有內(nèi)容,然后定義應(yīng)用程序的布局。
          初始化您的Dash應(yīng)用程序
          在項(xiàng)目的根目錄中創(chuàng)建一個(gè)名為app.py的空文件,然后在本節(jié)中查看app.py的代碼。
          這是app.py的前幾行:
          import?dash
          import?dash_core_components?as?dcc
          import?dash_html_components?as?html
          import?pandas?as?pd

          data?=?pd.read_csv("avocado.csv")
          data?=?data.query("type?==?'conventional'?and?region?==?'Albany'")
          data["Date"]?=?pd.to_datetime(data["Date"],?format="%Y-%m-%d")
          data.sort_values("Date",?inplace=True)

          app?=?dash.Dash(__name__)
          在第1至4行中,導(dǎo)入所需的庫(kù):dash,dash_core_components,dash_html_componentspandas。每個(gè)庫(kù)都為您的應(yīng)用程序提供了一個(gè)構(gòu)建模塊:
          • dash可幫助您初始化應(yīng)用程序。
          • dash_core_components允許您創(chuàng)建交互式組件,例如圖形,下拉列表或日期范圍。
          • dash_html_components使您可以訪問HTML標(biāo)記。
          • pandas可以幫助您閱讀和整理數(shù)據(jù)。
          在第6到9行中,您將讀取數(shù)據(jù)并對(duì)其進(jìn)行預(yù)處理以在儀表板中使用。之所以要過濾掉某些數(shù)據(jù),是因?yàn)楫?dāng)前版本的儀表板不是交互式的,否則繪制的值就沒有意義了。
          在第11行上,創(chuàng)建Dash類的實(shí)例。如果您以前使用過Flask,則初始化Dash類可能看起來很熟悉。在Flask中,通常使用Flask(__ name__)初始化WSGI應(yīng)用程序。同樣,對(duì)于Dash應(yīng)用程序,您可以使用Dash(__ name__)。
          定義Dash應(yīng)用程序的布局
          接下來,您將定義應(yīng)用程序的layout屬性。此屬性決定了您應(yīng)用的外觀。在這種情況下,您將使用標(biāo)題下方帶有說明的標(biāo)題和兩個(gè)圖表。定義方式如下:
          app.layout?=?html.Div(
          ????children=[
          ????????html.H1(children="Avocado?Analytics",),
          ????????html.P(
          ????????????children="Analyze?the?behavior?of?avocado?prices"
          ????????????"?and?the?number?of?avocados?sold?in?the?US"
          ????????????"?between?2015?and?2018",
          ????????),
          ????????dcc.Graph(
          ????????????figure={
          ????????????????"data":?[
          ????????????????????{
          ????????????????????????"x":?data["Date"],
          ????????????????????????"y":?data["AveragePrice"],
          ????????????????????????"type":?"lines",
          ????????????????????},
          ????????????????],
          ????????????????"layout":?{"title":?"Average?Price?of?Avocados"},
          ????????????},
          ????????),
          ????????dcc.Graph(
          ????????????figure={
          ????????????????"data":?[
          ????????????????????{
          ????????????????????????"x":?data["Date"],
          ????????????????????????"y":?data["Total?Volume"],
          ????????????????????????"type":?"lines",
          ????????????????????},
          ????????????????],
          ????????????????"layout":?{"title":?"Avocados?Sold"},
          ????????????},
          ????????),
          ????]
          )
          這段代碼定義了app對(duì)象的layout屬性。此屬性使用由Dash組件組成的樹結(jié)構(gòu)確定應(yīng)用程序的外觀。
          Dash組件預(yù)先包裝在Python庫(kù)中。在安裝Dash時(shí),其中一些會(huì)附帶Dash。其余的您必須單獨(dú)安裝。幾乎每個(gè)應(yīng)用程序中都會(huì)看到兩組組件:
          1、Dash HTML Components(https://dash.plotly.com/dash-html-components)為HTML元素提供Python包裝器。例如,您可以使用此庫(kù)來創(chuàng)建元素,例如段落,標(biāo)題或列表。
          2、Dash Core Components(https://dash.plotly.com/dash-core-components)組件為您提供了用于創(chuàng)建交互式用戶界面的Python模塊。您可以使用它來創(chuàng)建交互式元素,例如圖形,滑塊或下拉菜單。
          在第13至20行,您可以在實(shí)踐中看到Dash HTML組件。首先定義父組件html.Div。然后,再添加兩個(gè)元素,即標(biāo)題(html.H1)和段落(html.P)作為其子元素。
          這些組件等效于divh1p HTML標(biāo)簽。您可以使用組件的參數(shù)來修改標(biāo)簽的屬性或內(nèi)容。例如,要指定div標(biāo)記內(nèi)的內(nèi)容,請(qǐng)使用html.Div中的children參數(shù)。
          組件中還有其他參數(shù),例如style,classNameid,它們引用HTML標(biāo)簽的屬性。在下一部分中,您將看到如何使用其中的一些屬性來設(shè)置儀表板的樣式。
          第13至20行所示的部分布局將轉(zhuǎn)換為以下HTML代碼:
          <div>
          ??<h1>Avocado?Analyticsh1>
          ??<p>
          ????Analyze?the?behavior?of?avocado?prices?and?the?number
          ????of?avocados?sold?in?the?US?between?2015?and?2018
          ??p>
          ??
          div>
          當(dāng)您在瀏覽器中打開應(yīng)用程序時(shí),將呈現(xiàn)此HTML代碼。它遵循與Python代碼相同的結(jié)構(gòu),帶有div標(biāo)記,其中包含h1p元素。
          在布局代碼段的第21至24行中,您實(shí)際上可以從Dash 核心組件中看到圖形組件。app.layout中有兩個(gè)dcc.Graph組件。第一個(gè)繪制了研究期間鱷梨的平均價(jià)格,第二個(gè)繪制了同期美國(guó)鱷梨的銷售數(shù)量。
          在后臺(tái),Dash使用Plotly.js生成圖形。dcc.Graph組件需要一個(gè)包含繪圖數(shù)據(jù)和布局的圖形對(duì)象或Python字典。在這種情況下,請(qǐng)?zhí)峁┖笳摺?/span>
          最后,這兩行代碼可幫助您運(yùn)行應(yīng)用程序:
          if?__name__?==?"__main__":
          ????app.run_server(debug=True)
          第48和49行使您可以使用Flask的內(nèi)置服務(wù)器在本地運(yùn)行Dash應(yīng)用程序。來自app.run_serverdebug = True參數(shù)在您的應(yīng)用程序中啟用熱重載(hot-reloading)選項(xiàng)。這意味著當(dāng)您對(duì)應(yīng)用程序進(jìn)行更改時(shí),它會(huì)自動(dòng)重新加載,而無需重新啟動(dòng)服務(wù)器。
          最后,這是app.py的完整版本。您可以將此代碼復(fù)制到之前創(chuàng)建的空app.py文件中。
          import?dash
          import?dash_core_components?as?dcc
          import?dash_html_components?as?html
          import?pandas?as?pd

          data?=?pd.read_csv("avocado.csv")
          data?=?data.query("type?==?'conventional'?and?region?==?'Albany'")
          data["Date"]?=?pd.to_datetime(data["Date"],?format="%Y-%m-%d")
          data.sort_values("Date",?inplace=True)

          app?=?dash.Dash(__name__)

          app.layout?=?html.Div(
          ????children=[
          ????????html.H1(children="Avocado?Analytics",),
          ????????html.P(
          ????????????children="Analyze?the?behavior?of?avocado?prices"
          ????????????"?and?the?number?of?avocados?sold?in?the?US"
          ????????????"?between?2015?and?2018",
          ????????),
          ????????dcc.Graph(
          ????????????figure={
          ????????????????"data":?[
          ????????????????????{
          ????????????????????????"x":?data["Date"],
          ????????????????????????"y":?data["AveragePrice"],
          ????????????????????????"type":?"lines",
          ????????????????????},
          ????????????????],
          ????????????????"layout":?{"title":?"Average?Price?of?Avocados"},
          ????????????},
          ????????),
          ????????dcc.Graph(
          ????????????figure={
          ????????????????"data":?[
          ????????????????????{
          ????????????????????????"x":?data["Date"],
          ????????????????????????"y":?data["Total?Volume"],
          ????????????????????????"type":?"lines",
          ????????????????????},
          ????????????????],
          ????????????????"layout":?{"title":?"Avocados?Sold"},
          ????????????},
          ????????),
          ????]
          )

          if?__name__?==?"__main__":
          ????app.run_server(debug=True)
          這是準(zhǔn)系統(tǒng)儀表板的代碼。它包括您在本節(jié)前面檢查過的所有代碼片段。
          現(xiàn)在該運(yùn)行您的應(yīng)用程序了。在項(xiàng)目的根目錄內(nèi)和項(xiàng)目的虛擬環(huán)境中打開一個(gè)終端。運(yùn)行python app.py,然后使用您喜歡的瀏覽器訪問http:// localhost:8050。
          成功運(yùn)行!您的儀表板應(yīng)如下所示:

          好的方面是,您現(xiàn)在已經(jīng)擁有儀表板的工作版本。壞的方面是,您還需要做一些工作才能向他人展示。儀表板遠(yuǎn)不只是視覺上令人愉悅,您仍然需要為其添加一些交互性。
          但是請(qǐng)放心,您將在下一節(jié)中學(xué)習(xí)如何解決這些問題。

          更多閱讀



          2020 年最佳流行 Python 庫(kù) Top 10


          2020 Python中文社區(qū)熱門文章 Top 10


          Top 10 沙雕又有趣的 GitHub 程序

          特別推薦




          點(diǎn)擊下方閱讀原文加入社區(qū)會(huì)員

          瀏覽 128
          點(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>
                  蜜桃av免费 | 国产精品久久六区 | 亚洲视频在线免费观 | 人人插人人操 | 久热最新视频在线观看 |