Khi làm việc với chuỗi thời gian, vẽ biểu đồ kết quả thử nghiệm A/B hoặc thực hiện các loại phân tích khác, điều phổ biến là muốn vẽ biểu đồ đường [thường là giá trị trung bình của dữ liệu của bạn theo thời gian] và khoảng tin cậy để biểu thị độ không đảm bảo trong dữ liệu mẫu
Dưới đây chúng tôi trình bày cách tạo biểu đồ đường với khoảng tin cậy bằng cách sử dụng nhiều thư viện vẽ đồ thị, bao gồm các phiên bản tương tác với Altair và Plotly
Nhập & Thiết lập
Hiển thị mãimport altair as alt
from matplotlib import pyplot as plt
from matplotlib_inline.backend_inline import set_matplotlib_formats
import numpy as np
import pandas as pd
import plotly.graph_objects as go
import seaborn as sns
set_matplotlib_formats['retina']
# Create our new styles dictionary for use in rcParams.
dpi = 144
mpl_styles = {
'figure.figsize': [6, 4],
# Up the default resolution for figures.
'figure.dpi': dpi,
'savefig.dpi': dpi,
}
sns.set_theme[context='paper']
plt.rcParams.update[mpl_styles]
Dữ liệu
Dưới đây chúng tôi lấy một số dữ liệu chuỗi thời gian từ bộ dữ liệu tích hợp của Seaborn. Chúng tôi giữ hai phiên bản của dữ liệu
1. Dữ liệu "thô" với nhiều quan sát mỗi ngàydf = sns.load_dataset['taxis'] df.head[]
2. Dữ liệu tổng hợp với một hàng mỗi ngàydf = sns.load_dataset['taxis'] df.head[]
df = sns.load_dataset['taxis']
df.head[]
pickupdropoffhành kháchkhoảng cáchgiá vétiptolltotalcolorpaymentpickup_zonedropoff_zonepickup_boroughdropoff_boroughpickup_date02019-03-23 20. 21. 092019-03-23 20. 27. 2411. 607. 02. 150. 012. 95thẻ tín dụng màu vàng Lenox Hill WestIN/Turtle Bay SouthManhattanManhattan2019-03-2312019-03-04 16. 11. 552019-03-04 16. 19. 0010. 795. 00. 000. 09. 30màu vàngcashUpper West Side SouthUpper West Side SouthManhattan2019-03-0422019-03-27 17. 53. 012019-03-27 18. 00. 2511. 377. 52. 360. 014. 16màu vàngthẻ tín dụngAlphabet CityWest VillageManhattanManhattan2019-03-2732019-03-10 01. 23. 592019-03-10 01. 49. 5117. 7027. 06. 150. 036. 95màu vàngthẻ tín dụngHudson SqYorkville WestManhattanManhattan2019-03-1042019-03-30 13. 27. 422019-03-30 13. 37. 1432. 169. 01. 100. 013. 40màu vàngthẻ tín dụngMidtown EastYorkville WestManhattanManhattan2019-03-30
# Convert the pickup time to datetime and create a new column truncated to day.
df['pickup'] = pd.to_datetime[df.pickup]
df['pickup_date'] = pd.to_datetime[df.pickup.dt.date]
# Altair can't handle more than 5k rows so we truncate the data.
df = df.loc[df['pickup_date'] >= '2019-03-01'][:5000]
# We also create a grouped version, with calculated mean and standard deviation.
df_grouped = [
df[['pickup_date', 'fare']].groupby[['pickup_date']]
.agg[['mean', 'std', 'count']]
]
df_grouped = df_grouped.droplevel[axis=1, level=0].reset_index[]
# Calculate a confidence interval as well.
df_grouped['ci'] = 1.96 * df_grouped['std'] / np.sqrt[df_grouped['count']]
df_grouped['ci_lower'] = df_grouped['mean'] - df_grouped['ci']
df_grouped['ci_upper'] = df_grouped['mean'] + df_grouped['ci']
df_grouped.head[]
pickup_datemeanstdcountcici_lowerci_upperxlabelci_label02019-03-0111. 2884628. 8771871821. 2897219. 99874112. 578182Khoảng giá vé trung bìnhConf [95%]12019-03-0211. 8301289. 5057701561. 49169910. 33843013. 321827Khoảng giá vé trung bìnhConf [95%]22019-03-0312. 6423089. 7875171301. 68250710. 95980114. 324815Khoảng giá vé trung bìnhConf [95%]32019-03-0413. 99023313. 5387741292. 33636411. 65386816. 326597Khoảng giá vé trung bìnhConf [95%]42019-03-0512. 3039449. 4485481801. 38033610. 92360813. 684281Khoảng giá vé trung bìnhConf [95%]
Matplotlib
Với dữ liệu được tổng hợp trước và khoảng tin cậy đã được xác định trong khung dữ liệu của chúng tôi, việc sử dụng Matplotlib để vẽ sơ đồ này khá đơn giản
fig, ax = plt.subplots[]
x = df_grouped['pickup_date']
ax.plot[x, df_grouped['mean']]
ax.fill_between[
x, df_grouped['ci_lower'], df_grouped['ci_upper'], color='b', alpha=.15]
ax.set_ylim[ymin=0]
ax.set_title['Avg Taxi Fare by Date']
fig.autofmt_xdate[rotation=45]
sinh ra biển
Seaborn là một trình bao bọc đẹp xung quanh Matplotlib, vì vậy cho phép có một cú pháp rất giống nhau, nhưng nó cũng đi kèm với một số phép thuật nếu bạn chỉ cung cấp cho nó dữ liệu thô
ax = sns.lineplot[data=df, x='pickup_date', y='fare']
# A more verbose but explicit version of the above not relying on defaults:
# ax = sns.lineplot[data=df, x='pickup_date', y='fare', estimator='mean', ci=95,
# n_boot=1000]
ax.set_title['Avg Taxi Fare by Date']
ax.set_ylim[0]
ax.figure.autofmt_xdate[rotation=45]
Theo mặc định, nếu có nhiều hơn một quan sát cho mỗi giá trị
df = sns.load_dataset['taxis']
df.head[]
3 duy nhất, Seaborn sẽ lấy giá trị trung bình của những quan sát đó và khởi động khoảng tin cậy 95% bằng cách sử dụng 1000 lần lặp lại. Khá đẹpChúng tôi cũng có thể làm điều tương tự với dữ liệu tổng hợp, rất giống với Matplotlib
________số 8
bàn thờ
Altair tương tự như Seaborn ở chỗ nó có một số cách tự động để tạo và hiển thị biểu đồ đường với khoảng tin cậy. Tuy nhiên, lợi ích của Altair là nó tương tác theo mặc định [mặc dù có thể hơi dài dòng]
Trước tiên, chúng tôi tạo biểu đồ bằng dữ liệu thô. Altair cho phép các phương pháp tổng hợp trong thông số kỹ thuật, vì vậy,
df = sns.load_dataset['taxis']
df.head[]
4 cung cấp cho chúng tôi giá vé trung bình cho mỗi ngày. Và đối với khoảng tin cậy, df = sns.load_dataset['taxis']
df.head[]
5 là điều kỳ diệu mà chúng ta cầndf = sns.load_dataset['taxis']
df.head[]
1Lưu ý, điều này xuất ra một biểu đồ tương tác nhưng chúng tôi chỉ hiển thị một phiên bản tĩnh ở đây vì dữ liệu cơ bản cho phiên bản này [vì nó sử dụng dữ liệu thô] khá lớn
Chúng ta cũng có thể dễ dàng làm điều này một cách rõ ràng hơn bằng cách sử dụng dữ liệu tổng hợp và
df = sns.load_dataset['taxis']
df.head[]
6. Chúng tôi cũng thêm một chú giải công cụ đẹp để hiển thị tất cả các giá trị khi di chuột quadf = sns.load_dataset['taxis']
df.head[]
3Dưới đây là đầu ra được nhúng, với chú giải công cụ
Cuối cùng, chúng tôi đi xa hơn một chút và sử dụng một số logic lựa chọn Altair để hiển thị các giá trị theo quy tắc dọc, với các điểm được đánh dấu, thay vì dựa vào chú giải công cụ. Nó khá dài dòng nhưng cuối cùng trông rất đẹp
df = sns.load_dataset['taxis']
df.head[]
4Một lần nữa, điều này rất năng động, hãy di chuột qua biểu đồ
âm mưu
Plotly là một thư viện trực quan hóa tương tác khác cung cấp miễn phí cho chúng tôi các chú giải công cụ di chuột thực sự đẹp mắt [cùng với các chức năng khác]
df = sns.load_dataset['taxis']
df.head[]
5Chơi xung quanh với viz dưới đây;
Một cách khác để làm điều đó là chỉ cần có một yếu tố
df = sns.load_dataset['taxis']
df.head[]
7 cho dải tin cậy. Bạn nối các giá trị cận trên với các giá trị cận dưới bị đảo ngược và sau đó điền vào khu vực bên trong nó. Vấn đề duy nhất với phương pháp này là không thể có được chú giải công cụ hay cho các giới hạn trên/dưới [hoặc ít nhất là không dễ dàng]df = sns.load_dataset['taxis']
df.head[]
0Một lần nữa, chỉ cần tiết kiệm băng thông ở đây và nhúng hình ảnh tĩnh ở đây, nhưng đây thực sự là một cốt truyện tương tác
Và đó là cách vẽ biểu đồ đường với khoảng tin cậy bằng bốn thư viện python khác nhau