[譯]使用Python和Dash 創建一個儀錶盤(上)

来源:https://www.cnblogs.com/bigdata1024/archive/2023/07/16/17536704.html
-Advertisement-
Play Games

## 介紹 在數據科學和分析的領域,數據能力的釋放不僅是通過提取見解的方式, 同時也要能通過有效的方式來傳達見解.這就是數據可視化發揮見解的地方. ![image](https://img2023.cnblogs.com/blog/682547/202307/682547-2023070809272 ...


介紹

在數據科學和分析的領域,數據能力的釋放不僅是通過提取見解的方式, 同時也要能通過有效的方式來傳達見解.這就是數據可視化發揮見解的地方.

image

數據可視化是信息和數據的可視化呈現. 它使用可視化元素,如圖表、圖形、地圖,使其更容易看懂原始數據中的模式、趨勢及異常值.對於數據科學家和分析師來說,數據可視化是一個必不可少的工具,它有助於更快、更準確地理解數據,支持用數據講故事.並幫助做出數據驅動的決策.

在這篇文章中, 你將學會用Python和Dash框架創建一個儀錶盤來可視化Netflix的內容分佈和分類.

image

什麼是Dash?

Dash是一個開源的低代碼框架,由 Plotly 開發, 用來在純Python中創建分析型的網路應用.傳統上為了實現這個目的, 可能需要使用JavaScript和HTML,要求你在後端(Python)和前端(JavaScript和HTML)有所專長.

然而,Dash 彌補了這一差距.使數據科學家和分析師只用Python就可以建立互動的、美觀的儀錶盤.這方面的低代碼開發使Dash成為創建分析性儀錶盤的合適選擇,特別是對於那些主要使用Python的人.

數據集分析

現在你已經熟悉了Dash, 讓我們開始我們的實踐項目吧.你將使用Kaggle上Netflix電影和電視節目數據集,由 Shivam Bansal創建.

這個數據集包含截止至2021年Netflix提供的電影和電視節目詳細信息,比如內容類型,標題,導演,演員,製作國家.發行年份,評級,持續時間等等.

即使該數據集創建於2021年,它仍然是發展數據可視化技能和瞭解媒體娛樂趨勢的寶貴資源。

使用這個數據集,你的目標是創建一個儀錶盤,使以下幾點可視化:

  • 內容的地理分佈: 一張地圖,展示了多年來不同國家的內容生產情況的變化。
  • 內容分類: 這種可視化方法將Netflix的內容分為電視節目和電影,以查看哪些類型的內容最突出。

設置項目工作區

讓我們開始為項目創建一個名為netflix-dashboard的目錄,然後通過以下命令初始化並激活一個Python虛擬環境:

mkdir netflix-dashboard && cd netflix-dashboard

python3 -m venv netflix-venv && source netflix-venv/bin/activate

接下來,你需要安裝一些外部軟體包。你將使用pandas進行數據處理,dash用於創建儀錶盤,plotly用於創建圖表,dash-bootstrap-components用於為儀錶盤添加一些樣式:

pip3 install pandas dash plotly dash-bootstrap-components

清理數據集

通過Netflix的數據集,你會發現導演、演員和國家這幾列的數值缺失。為了方便分析,將date_added列的字元串值轉換為日期時間也很方便。

為了清理數據集,你可以創建一個新的文件clean_netflix_dataset.py,代碼如下,然後運行它:

import pandas as pd

# Load the dataset
df = pd.read_csv("netflix_titles.csv")
df['director'].fillna("No director", inplace=True)
df['cast'].fillna("No cast", inplace=True)
df['country'].fillna("No country", inplace=True)

# Drop missing and duplicate values
df.dropna(inplace=True)
df.drop_duplicates(inplace=True)

df['date_added'] = pd.to_datetime(df['date_added'].str.strip())

# Save the cleaned dataset
df.to_csv('netflix_titles_cleaned.csv', index=False)

開始使用Dash

隨著工作區的建立和數據集的清理,你已經準備好開始製作你的儀錶盤了。創建一個新文件app.py,代碼如下:

from dash import Dash, dash_table, html

# Initialize a Dash app

app = Dash(__name__)

# Define the app layout
app.layout = html.Div([
    html.H1("Netflix Movies and TV Shows Dashboard"),
    html.Hr(),
])

# Start the dash app in local development mode

if __name__ == "__main__":
    app.run_server(debug=True)

讓我們來分析一下app.py中的代碼:

  • app = Dash(__name__): 這一行初始化了一個新的Dash應用程式。可以把它看作是你的應用程式的基礎。
  • app.layout = html.Div(...): app.layout屬性讓你寫類似HTML的代碼來設計你的應用程式的用戶界面。上面的佈局使用html.H1(...)標題元素作為儀錶盤的標題,併在標題下麵使用水平規則html.Hr()元素。
  • app.run(debug=True): 這一行啟動一個開發伺服器,在本地開發模式下為你的Dash應用提供服務。Dash使用Flask,一個輕量級的Web伺服器框架,將你的應用程式提供給Web瀏覽器。

在運行app.py之後,你會在終端看到一條信息,表明你的Dash應用程式正在運行,並且可以訪問http://127.0.0.1:8050/。在你的網路瀏覽器中打開這個URL來查看它:

image

結果看起來很普通,對嗎?不要擔心! 本節旨在展示最基本的Dash應用結構和組件。你很快就會添加更多的功能和組件,使之成為一個很酷的儀錶板.

引入Dash Bootstrap組件

下一步是為你的儀錶盤的佈局編寫代碼,併為它添加一些樣式. 為此,你可以使用Dash Bootstrap Components(DBC),這是一個為Dash提供Bootstrap組件的庫,使你能夠開發具有響應式佈局的風格的應用程式。

儀錶板將採用標簽佈局,這為在同一空間內組織不同類型的信息提供了一種緊湊的方式。每個標簽將對應於一個獨特的可視化。

讓我們繼續修改app.py的內容以納入DBC:

from dash import Dash, dcc, html
import dash_bootstrap_components as dbc

# Initialize a Dash app
app = Dash(__name__, external_stylesheets=[dbc.themes.BOOTSTRAP])

# Define the app layout
app.layout = dbc.Container([
    dcc.Store(id='store'),
    html.H1("Netflix Movies and TV Shows Dashboard"),
    html.Hr(),
    dbc.Tabs([
        dbc.Tab(label='Geographical content distribution', tab_id='tab1'),
        dbc.Tab(label='Content classification', tab_id='tab2')
    ],
        id="tabs",
        active_tab='tab2'
    ),
    html.Div(id="tab-content", className='p-4')
])

# Start the dash app in local development mode
if __name__ == "__main__":
    app.run_server(debug=True)

在這個修改後的佈局中,你會看到新的組件:

dbc.Container: 使用dbc.Container作為頂層組件,將整個儀錶盤佈局包裹在一個響應式的、靈活的容器中。
dcc.Store: 這個Dash Core組件允許你在客戶端(用戶的瀏覽器上)存儲數據,通過將數據保存在本地來提高應用程式的性能。
dbc.Tabsdbc.Tab: 每個dbc.Tab代表一個單獨的標簽,它將包含不同的可視化內容。標簽屬性是出現在標簽本身上的內容,而tab_id則用於識別標簽。dbc.Tabs的active_tab屬性用於指定Dash應用程式啟動時的活動標簽。

現在運行app.py。現在產生的儀錶板將有一個Bootstrap風格的佈局,有兩個空標簽:
image

添加回調和可視化

當使用Dash時,互動性是通過回調函數實現的。回調函數是一個當輸入屬性發生變化時被自動調用的函數。它被命名為 "回調",因為每當應用程式中發生變化時,Dash就會 "回調 "這個函數。

在這個儀錶盤中,你將使用回調來渲染所選標簽中的相關可視化內容,每個可視化內容都將存儲在自己的Python文件中,在一個新的組件目錄下,以便更好地組織和模塊化項目結構。

微信公眾號

作者:chaplinthink [犒賞]

出處:https://www.cnblogs.com/bigdata1024/p/17536704.html

本文以學習、研究和分享為主,如需轉載,請聯繫本人,標明作者和出處,非商業用途!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • # 一. 索引概述 ## 1. 介紹 **索引是幫助MySQL高效獲取數據的數據結構(有序)。在數據之外,資料庫系統還維護著滿足特定查找演算法的數據結構,這些數據結構以某種方式引用(指向)數據,這樣就可以在這些數據結構上實現高級查找演算法,這種數據結構就是索引。** ![](https://tcs-de ...
  • 原文地址:https://blog.csdn.net/zhanglei5415/article/details/131434931 ## 一、問題 當對含有中文的url字元串,進行NSURL對象包裝時,是不能被識別的。 不會得到期望的NSURL對象,而是返回一個nil 值 ; ```objectiv ...
  • 博客推行版本更新,成果積累制度,已經寫過的博客還會再次更新,不斷地琢磨,高質量高數量都是要追求的,工匠精神是學習必不可少的精神。因此,大家有何建議歡迎在評論區踴躍發言,你們的支持是我最大的動力,你們敢投,我就敢肝 ...
  • 今天接到粉絲私信,詢問是否可以通過Canvas繪製一些圖形,然後根據粉絲提供的模板圖,通過Canvas進行模擬繪製,通過分析發現,圖形雖然相對簡單,但是如果不藉助相應的軟體,純代碼繪製還是稍微費些時間。今天將繪製圖形源碼分享出來,僅供學習分享之用,如有不足之處,還請指正。 ...
  • 博客推行版本更新,成果積累制度,已經寫過的博客還會再次更新,不斷地琢磨,高質量高數量都是要追求的,工匠精神是學習必不可少的精神。因此,大家有何建議歡迎在評論區踴躍發言,你們的支持是我最大的動力,你們敢投,我就敢肝 ...
  • ![](https://img2023.cnblogs.com/blog/3076680/202307/3076680-20230713141300146-1450511408.png) # 1. 水平擴展 ## 1.1. 有助於提高系統的整體容量和韌性 ## 1.2. 現階段構建的幾乎所有系統,都 ...
  • 電腦編程發展至今,一共只有三個編程範式: - 結構化編程 - 面向對象編程 - 函數式編程 ### 編程範式和軟體架構的關係 - 結構化編程是各個模塊的演算法實現基礎 - 多態(面向對象編程)是跨越架構邊界的手段 - 函數式編程是規範和限制數據存放位置與訪問許可權的手段 **軟體架構的三大關註重點** ...
  • ### 歡迎訪問我的GitHub > 這裡分類和彙總了欣宸的全部原創(含配套源碼):[https://github.com/zq2599/blog_demos](https://github.com/zq2599/blog_demos) ### 本篇概覽 - 作為《Java擴展Nginx》系列的第七 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...