數據儀錶盤是一個重要的數據可視化工具,可以將數據可視化展示給用戶,使其更容易理解數據的含義和趨勢,更好地做出決策。在這篇文章里,我們將使用Python編寫一個交互式數據儀錶盤。
一、選擇可視化工具
Python中有很多強大的可視化工具,例如matplotlib、seaborn和Bokeh等。在這裡我們選擇使用Bokeh來構建我們的數據儀錶盤,因為它具有以下優點:
1. Bokeh支持交互式可視化展示,用戶可以鼠標選取數據點、縮放、滾輪和移動等交互操作。
2. Bokeh的可視化呈現非常漂亮,而且可以在Web瀏覽器中呈現。
3. Bokeh的代碼量非常少,易於上手和維護。
二、數據採集和處理
在Bokeh中,數據可以來自不同的源,例如 MySQL 數據庫,CSV 文件和 Pandas 數據框架。在這篇文章中,我們將使用 Pandas 數據框架的數據集。數據集是一個 CSV 文件,其中包含有關三家公司的股票價格數據。在這裡,我們將使用 Pandas 數據框架讀取該數據集,並對其進行必要的處理。
import pandas as pd
df = pd.read_csv('stocks.csv')
# 添加收盤價與開盤價之間的差
df['Diff'] = df['Close'] - df['Open']
# 添加新的列,表示漲跌情況
df['Up_or_Down'] = ['Up' if diff>0 else 'Down' for diff in df['Diff']]
三、創建儀錶盤
現在我們已經有了數據,並且對其進行了處理,下一步是創建交互式數據儀錶盤。在本篇文章中,我們使用Bokeh創建一個網頁,用於呈現數據儀錶盤。
步驟如下:
1. 導入必要的包和函數。
from bokeh.plotting import figure, output_file, show
from bokeh.models import ColumnDataSource
from bokeh.layouts import gridplot
2. 創建數據源。數據源是一個包含在數據集中的數據子集,並用於在儀錶盤中呈現數據。
df_source = ColumnDataSource(df)
3. 創建需要在儀錶盤中顯示的圖表。在這裡,我們創建一個圖表來顯示每家公司的開盤價和收盤價。
p1 = figure(title='Stock Prices', x_axis_label='Date', y_axis_label='Price')
p1.segment(x0='Date', y0='Low', x1='Date', y1='High', color='Black', source=df_source)
p1.vbar(x='Date', top='Open', bottom='Close', width=0.5, fill_color='green', line_color='black', source=df_source)
4. 創建一個用於交互式操作的 JavaScript 代碼塊。在這裡,我們將使用 Bokeh 的 JavaScript 庫創建一個 JavaScript 回調函數,以響應用戶與圖表的交互操作。
callback = CustomJS(args=dict(source=df_source), code="""
var data = source.data;
var diff = data['Diff'];
var up_or_down = data['Up_or_Down'];
for (var i=0; i < diff.length; i++) {
if (diff[i] > 0) {
up_or_down[i] = 'Up';
} else {
up_or_down[i] = 'Down';
}
}
source.change.emit();
""")
5. 創建一個呈現儀錶盤的網頁,並將所有圖表放入網頁中。
output_file('stocks.html')
p = gridplot([[p1]], toolbar_location='left', plot_width=900)
show(p)
最終的代碼示例如下:
# 導入必要的包和函數
from bokeh.plotting import figure, output_file, show
from bokeh.models import ColumnDataSource, CustomJS
from bokeh.layouts import gridplot
# 讀取數據集,添加新列
df = pd.read_csv('stocks.csv')
df['Diff'] = df['Close'] - df['Open']
df['Up_or_Down'] = ['Up' if diff >0 else 'Down' for diff in df['Diff']]
# 創建數據源
df_source = ColumnDataSource(df)
# 創建圖表
p1 = figure(title='Stock Prices', x_axis_label='Date', y_axis_label='Price')
p1.segment(x0='Date', y0='Low', x1='Date', y1='High', color='Black', source=df_source)
p1.vbar(x='Date', top='Open', bottom='Close', width=0.5, fill_color='green', line_color='black', source=df_source)
# 創建響應用戶交互事件的 JavaScript 代碼塊
callback = CustomJS(args=dict(source=df_source), code="""
var data = source.data;
var diff = data['Diff'];
var up_or_down = data['Up_or_Down'];
for (var i=0; i < diff.length; i++) {
if (diff[i] > 0) {
up_or_down[i] = 'Up';
} else {
up_or_down[i] = 'Down';
}
}
source.change.emit();
""")
# 創建網頁
output_file('stocks.html')
p = gridplot([[p1]], toolbar_location='left', plot_width=900)
# 顯示儀錶盤
show(p)
這個儀錶盤具有以下功能:
1. 顯示每家公司的開盤價和收盤價。
2. 使用綠色表示上漲,使用紅色表示下跌。
3. 當用戶按下「上漲」或「下跌」按鈕時,繪圖顏色會從綠色或者紅色改為藍色。
我們使用簡單的代碼創建了一個功能強大且易於理解的交互式數據儀錶盤。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/194506.html