在資料科學和分析的領域,資料能力的釋放不僅是通過提取見解的方式, 同時也要能通過有效的方式來傳達見解.這就是資料視覺化發揮見解的地方.
資料視覺化是資訊和資料的視覺化呈現. 它使用視覺化元素,如圖表、圖形、地圖,使其更容易看懂原始資料中的模式、趨勢及異常值.對於資料科學家和分析師來說,資料視覺化是一個必不可少的工具,它有助於更快、更準確地理解資料,支援用資料講故事.並幫助做出資料驅動的決策.
在這篇文章中, 你將學會用Python和Dash框架建立一個儀表盤來視覺化Netflix的內容分佈和分類.
Dash是一個開源的低程式碼框架,由 Plotly 開發, 用來在純Python中建立分析型的網路應用.傳統上為了實現這個目的, 可能需要使用JavaScript和HTML,要求你在後端(Python)和前端(JavaScript和HTML)有所專長.
然而,Dash 彌補了這一差距.使資料科學家和分析師只用Python就可以建立互動的、美觀的儀表盤.這方面的低程式碼開發使Dash成為建立分析性儀表盤的合適選擇,特別是對於那些主要使用Python的人.
現在你已經熟悉了Dash, 讓我們開始我們的實踐專案吧.你將使用Kaggle上Netflix電影和電視節目資料集,由 Shivam Bansal建立.
這個資料集包含截止至2021年Netflix提供的電影和電視節目詳細資訊,比如內容型別,標題,導演,演員,製作國家.發行年份,評級,持續時間等等.
即使該資料集建立於2021年,它仍然是發展資料視覺化技能和了解媒體娛樂趨勢的寶貴資源。
使用這個資料集,你的目標是建立一個儀表盤,使以下幾點視覺化:
讓我們開始為專案建立一個名為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)
隨著工作區的建立和資料集的清理,你已經準備好開始製作你的儀表盤了。建立一個新檔案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 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檔案中,在一個新的元件目錄下,以便更好地組織和模組化專案結構。