Поиск точки отклонения от исходного линейного тренда с помощью PythonPython

Программы на Python
Ответить
Anonymous
 Поиск точки отклонения от исходного линейного тренда с помощью Python

Сообщение Anonymous »

Я работаю с кривыми растяжения-деформации, которые изначально имеют линейный тренд, после чего тренд меняется от испытания к испытанию. Я пытаюсь найти точку, в которой данные отклоняются от этой первоначальной линейной тенденции - (выделено красной стрелкой на изображении).

Пока у меня есть этот код:

Код: Выделить всё

import pandas as pd
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit

df_input = pd.ExcelFile('data.xlsx')

sheet_names = df_input.sheet_names
dict_of_sheets = {}
for sheet in sheet_names:
dict_of_sheets['data' + sheet] = pd.read_excel(df_input, sheet_name=sheet)

for name,df in dict_of_sheets.items():
df['eff CP'] = df['CP'] - df['PP']
df['axial stress'] = df['eff CP'] + df['Sd']

def fit_func(x, a, b):
return a*x + b

fig, axs = plt.subplots(nrows=2, ncols=2, figsize=(10, 8))

for i, (name, df) in enumerate(dict_of_sheets.items()):
row = i // 2
col = i % 2
y = df['axial stress']
x = df['Axial Strain']

max_y = y.max()
max_row = df.loc[df['axial stress'] == max_y]
max_x = max_row['Axial Strain'].values[0]

label_peak_og = 'Peak stress: {0:.1f} MPa'.format(max_y)

short_df = df[x< 0.15]
stress= short_df['axial stress']
strain = short_df['Axial Strain']

popt, pcov = curve_fit(fit_func, strain, stress)
extended_strain = np.linspace(0, 0.2, 100)

axs[row, col].plot(x, y,zorder=0, label='edited data')
axs[row, col].set_title(name)
axs[row, col].set_xlabel('Strain')
axs[row, col].set_ylabel('Stress')
axs[row, col].scatter(max_x, max_y, color = 'hotpink', marker='^', zorder=1, label=label_peak_og)
axs[row, col].plot(extended_strain, fit_func(extended_strain, *popt), '--', label='Fitted function',zorder=3,)
axs[row, col].legend()

plt.tight_layout()
plt.show()
Я попытался вычислить остатки между данными и подобранным линейным трендом, но поскольку линейный тренд основан на меньшем наборе данных, я не могу вычислить остатки с исходными данными, как массивы имеют разные размеры.

Подробнее здесь: https://stackoverflow.com/questions/793 ... ith-python
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»