我在许多商店有以下 df,每周花费: shop1 shop2 shop3 shop4 shop5 shop6 shop7 \date_week 2 4328.85 5058.17 3028.68 2513.28 4204.10 1898.26 2209.75 3 5472.00 5085.59 3874.51 1951.60 2984.71 1416.40 1199.42 4 4665.53 4264.05 2781.70 2958.25 4593.46 2365.88 2079.73 5 5769.36 3460.79 3072.47 1866.19 3803.12 2166.84 1716.71 6 6267.00 4033.58 4053.70 2215.04 3991.31 2382.02 1974.92 7 5436.83 4402.83 3225.98 1761.87 4202.22 2430.71 3091.33 8 4850.43 4900.68 3176.00 3280.95 3483.53 4115.09 2594.01 9 6782.88 3800.03 3865.65 2221.43 4116.28 2638.28 2321.55 10 6248.18 4096.60 5186.52 3224.96 3614.24 2541.00 2708.36 11 4505.18 2889.33 2937.74 2418.34 5565.57 1570.55 1371.54 12 3115.26 1216.82 1759.49 2559.81 1403.61 1550.77 478.34 13 4561.82 827.16 4661.51 3197.90 1515.63 1688.57 247.25 shop8 shop9 date_week 2 3578.81 3134.39 3 4625.10 2676.20 4 3417.16 3870.00 5 3980.78 3439.60 6 3899.42 4192.41 7 4190.60 3989.00 8 4786.40 3484.51 9 6433.02 3474.66 10 4414.19 3809.20 11 3590.10 3414.50 12 4297.57 2094.00 13 3963.27 871.25 如果我将这些绘制成线图或“意大利面条图”,效果很好。目标是查看过去三个月内 9 家商店的每周销售额趋势。但看起来有点乱:newgraph.plot()我查看了类似的问题,例如这个使用的问题,df.interpolate()但看起来我需要首先在其中缺少值。这个答案似乎需要一个时间序列。有没有另一种方法来平滑线条?如果这些值不再完全准确并不重要,一些插值就可以了。我感兴趣的只是过去几周的趋势。我也尝试过logy=True让plot()线条平静一点的方法,但没有帮助。
1 回答
阿晨1998
TA贡献2037条经验 获得超6个赞
您可以通过绘制过去几周的回归线来显示趋势,可能与实际数据分开,因为该图已经如此拥挤。我会使用 seaborn,因为它具有方便的regplot()功能:
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
df.plot(figsize=[12, 10], style='--')
plt.xlim(2, 18)
last4 = df[len(df)-4:]
plt.gca().set_prop_cycle(None)
for shop in df.columns:
sns.regplot(last4.index + 4, shop, data=last4, ci=None, scatter=False)
plt.ylabel(None)
plt.xticks(list(df.index)+[14, 17], labels=list(df.index)+[10, 13]);
添加回答
举报
0/150
提交
取消