如何计算数据的平均值以使绘图平坦?

2024-10-02 12:28:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图绘制的数据框中有数据。大约在第4天左右之后,数据会导致绘图像图中所示那样呈波浪状。你知道我该怎么处理吗?这是我的密码:

(我知道这不是最漂亮的…)

control_temp = pd.read_excel(r'Downloads/controltempt.xlsx')
control_temp = control_temp.drop(index = 0)
control_temp = control_temp.drop(labels = 'Unnamed: 2', axis = 1)
control_temp = control_temp.drop(labels = 'Unnamed: 4', axis = 1)
control_temp = control_temp.drop(labels = 'Unnamed: 5', axis = 1)
control_temp = control_temp.drop(labels = 'Unnamed: 6', axis = 1)
# control_temp = control_temp.drop(control_temp.index[range(1975,3591)])
control_temp['Time'] = pd.to_datetime(control_temp['Time'])
control_temp = control_temp.set_index('Time').resample('12H').first()
control_temp = control_temp.dropna()
control_temp = control_temp.resample('S')
control_temp = control_temp.interpolate(method='cubic')

plt.plot(control_temp.index, control_temp['Unnamed: 3'], c = 'green')


wc4_temp = pd.read_excel(r'Downloads/wc4.xlsx')
wc4_temp = wc4_temp.drop(index = 0)
wc4_temp = wc4_temp.drop(labels = 'Unnamed: 2', axis = 1)
wc4_temp = wc4_temp.drop(labels = 'Unnamed: 4', axis = 1)
wc4_temp = wc4_temp.drop(labels = 'Unnamed: 5', axis = 1)
wc4_temp = wc4_temp.drop(labels = 'Unnamed: 6', axis = 1)
# wc4_temp = wc4_temp.drop(wc4_temp.index[range(1609,2807)])
wc4_temp['Time'] = pd.to_datetime(wc4_temp['Time'])
wc4_temp = wc4_temp.set_index('Time').resample('12H').first()
wc4_temp = wc4_temp.dropna()
wc4_temp = wc4_temp.resample('S')
wc4_temp = wc4_temp.interpolate(method='cubic')

plt.plot(wc4_temp.index, wc4_temp['Unnamed: 3'], c = 'blue')


wc48_temp = pd.read_excel(r'Downloads/wc48.xlsx')
wc48_temp = wc48_temp.drop(index = 0)
wc48_temp = wc48_temp.drop(labels = 'Unnamed: 2', axis = 1)
wc48_temp = wc48_temp.drop(labels = 'Unnamed: 4', axis = 1)
wc48_temp = wc48_temp.drop(labels = 'Unnamed: 5', axis = 1)
wc48_temp = wc48_temp.drop(labels = 'Unnamed: 6', axis = 1)
# wc48_temp = wc48_temp.drop(wc48_temp.index[range(1158,2570)])
wc48_temp['Time'] = pd.to_datetime(wc48_temp['Time'])
wc48_temp = wc48_temp.set_index('Time').resample('12H').first()
wc48_temp = wc48_temp.dropna()
wc48_temp = wc48_temp.resample('S')
wc48_temp = wc48_temp.interpolate(method='cubic')

plt.plot(wc48_temp.index, wc48_temp['Unnamed: 3'], c = 'red')
fig = plt.figure(1, figsize = (10,5))
date_format = mpl_dates.DateFormatter('%d')
plt.gca().xaxis.set_major_formatter(date_format)
plt.minorticks_on()
plt.tick_params(which = 'minor', direction = 'in', top = True, right = True)
plt.tick_params(which = 'major', direction = 'in', top = True, right = True)
plt.xlabel("Days")
plt.ylabel("Temperature (\u00b0C)")
plt.title('Temperature over 4 Days')
plt.ylim(0,32)
plt.legend(bbox_to_anchor = [.99,.28], labels = ['Control','.4 W/C', '.48 W/C'])
plt.show()

Here is the plot


Tags: toindexlabelstimeplttempcontroldrop
1条回答
网友
1楼 · 发布于 2024-10-02 12:28:37

嗯,有许多不同的选项来平滑数据。如果您不断获得更多数据,您可能需要一个在线算法来平滑数据。在这种情况下,一个exponential moving average(EMA)。 这里有一些code来计算EMA

如果您有一个固定的数据集,因此没有新数据进入,您可以应用average filter using convolution

import numpy as np 
x = np.random.randint(0,10,(100,))
kernel = np.ones(5)/5
smoothed = np.convolve(kernel,x)

此外,还有一系列针对smooth data的更特定于应用程序的方法

相关问题 更多 >

    热门问题