前言
這是Python資料可視化的系列短篇,針對初級和中級用戶,將理論和示例代碼相結合,使用matplotlib, seaborn, plotly等工具創建不同主題的圖表,
本文主題是如何在圖表中顯示誤差,
import os
import warnings
import requests
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.tsa.arima_model import ARIMA
%matplotlib inline
plt.style.use("fivethirtyeight")
warnings.filterwarnings("ignore")
PS:如有需要Python學習資料的小伙伴可以加下方的群去找免費管理員領取
可以免費領取原始碼、專案實戰視頻、PDF檔案等
1. 顯示測量誤差
科學測量往往存在誤差,準確的報告誤差跟報告測量結果同樣重要,
測量誤差(也稱為觀察誤差)是測量值和真實值之間的差異,包括隨機誤差(任何實驗中都會自然發生的誤差)和系統誤差(由影響所有測量的錯誤校準的儀器引起),
舉一個例子,假設您正在測量100個學生的體重,有的學生穿較多的衣服,導致重500克,有的學生可能脫水導致輕200克,這些都是測量誤差,事實上所有收集的樣本都會存在誤差,大多數情況下它們不可避免,所以在資料可視化中,有效顯示這些錯誤可以傳達更完整的資訊,
在matplotlib中通過呼叫ax.errorbar()創建誤差圖(errorbar),誤差圖由一個點和穿過這個點的線段組成,點對應測量結果,線段代表測量誤差,
# 設定亂數種子
np.random.seed(123)
# 觀測值的數量
n_observations = 30
x = np.arange(n_observations)
# 虛擬測量值
y = np.sin(x) + np.random.randn(n_observations)
# 測量誤差,假設誤差服從均勻分布
errors = np.random.randint(1, 3, n_observations)
# 呼叫ax.errorbar介面,提供3個陣列,x, y, yerr
# fmt控制點和線段的樣式,跟ax.plot的fmt相同
# color: 控制點的顏色
# ecolor: 代表誤差的線段的顏色
# elinewidth: 代表誤差的線段的大小
fig, ax = plt.subplots(figsize=(10, 7))
ax.errorbar(x, y, yerr=errors, fmt="o", color="black",
ecolor="lightgray", elinewidth=3)
2. 顯示預測誤差
在機器學習領域,回歸模型和時間序列模型用于預測,模型會同時生成預測誤差(所謂置信區間),在可視化預測結果時,通常要求顯示預測值和預測區間,這可以通過ax.plot()和ax.fill_between()實作,
接下來使用一個真實的案例說明,先從蜂鳥資料獲取黃金價格,然后用ARIMA(自回歸整合移動平均)預測未來30天的價格,可視化預測結果,
# 從蜂鳥資料下載黃金價格
params = {
"symbol": "XAUUSD", # 現歡訓金ID
"start_date": "2010-01-01",
"end_date": "2020-08-05",
"apikey": os.getenv("TROCHIL_API") # 在蜂鳥資料官網注冊獲取API密鑰
}
resp = requests.get("https://api.trochil.cn/v1/forex/history", params)
data = https://www.cnblogs.com/hhh188764/p/pd.DataFrame.from_records(resp.json()["data"])
data["datetime"] = pd.to_datetime(data["datetime"])
data.set_index("datetime", inplace=True)
# 創建ARMIA模型,預測未來30天價格走勢
model = ARIMA(data.close, order=(1, 1, 1))
results = model.fit()
fc, errors, conf = results.forecast(steps=30, alpha=0.05)
fc_df = pd.DataFrame({
"forecast": fc,
"lower": conf[:, 0],
"upper": conf[:, 1]
}, index=pd.date_range("2020-08-06", periods=30))
# 可視化預測結果,包括點預測值和預測區間
# 預測區間包括置信下限和上限,代表真實值可能落入的范圍
# 呼叫ax.plot顯示點預測值,ax.fill_between顯示預測區間
data_since_2020 = data["2020":]
fig, ax = plt.subplots(figsize=(12, 7))
data_since_2020.close.plot(ax=ax, label="Historical Prices")
ax.plot(fc_df.index, fc_df.forecast, label="Forecast Prices")
ax.fill_between(fc_df.index, fc_df.lower, fc_df.upper, color="gray", alpha=0.3, label="Forecast Interval")
ax.set_title("Plot Forecast Errors")
ax.legend(loc="upper left")
<matplotlib.legend.Legend at 0x7fbfa348d9a0>
本文的文字及圖片來源于網路,僅供學習、交流使用,不具有任何商業用途,著作權歸原作者所有,如有問題請及時聯系我們以作處理,
作者:蜂鳥資料Trochil
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/45153.html
標籤:Python
上一篇:apache+djnago+websocket 部署配置
下一篇:內置函式
