## 介紹 在數據科學和分析的領域,數據能力的釋放不僅是通過提取見解的方式, 同時也要能通過有效的方式來傳達見解.這就是數據可視化發揮見解的地方. ![image](https://img2023.cnblogs.com/blog/682547/202307/682547-2023070809272 ...
介紹
在數據科學和分析的領域,數據能力的釋放不僅是通過提取見解的方式, 同時也要能通過有效的方式來傳達見解.這就是數據可視化發揮見解的地方.
數據可視化是信息和數據的可視化呈現. 它使用可視化元素,如圖表、圖形、地圖,使其更容易看懂原始數據中的模式、趨勢及異常值.對於數據科學家和分析師來說,數據可視化是一個必不可少的工具,它有助於更快、更準確地理解數據,支持用數據講故事.並幫助做出數據驅動的決策.
在這篇文章中, 你將學會用Python和Dash框架創建一個儀錶盤來可視化Netflix的內容分佈和分類.
什麼是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來查看它:
結果看起來很普通,對嗎?不要擔心! 本節旨在展示最基本的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.Tabs
和dbc.Tab
: 每個dbc.Tab代表一個單獨的標簽,它將包含不同的可視化內容。標簽屬性是出現在標簽本身上的內容,而tab_id則用於識別標簽。dbc.Tabs的active_tab屬性用於指定Dash應用程式啟動時的活動標簽。
現在運行app.py。現在產生的儀錶板將有一個Bootstrap風格的佈局,有兩個空標簽:
添加回調和可視化
當使用Dash時,互動性是通過回調函數實現的。回調函數是一個當輸入屬性發生變化時被自動調用的函數。它被命名為 "回調",因為每當應用程式中發生變化時,Dash就會 "回調 "這個函數。
在這個儀錶盤中,你將使用回調來渲染所選標簽中的相關可視化內容,每個可視化內容都將存儲在自己的Python文件中,在一個新的組件目錄下,以便更好地組織和模塊化項目結構。