Passe eine Kurve an die Grenze eines Streudiagramms an
Ich versuche, eine Kurve an die Grenze eines Streudiagramms anzupassen.Dieses Bild als Referenz ansehen.
Ich habe bereits mit dem folgenden (vereinfachten) Code eine Übereinstimmung erreicht. Es schneidet den Datenrahmen in kleine vertikale Streifen und ermittelt dann den Mindestwert in diesen Streifen mit der Breitewidth
, ignoriertnan
s. (Die Funktion nimmt monoton ab.)
def func(val):
""" returns some function of 'val'"""
return val * 2
for i in range(0, max_val, width)):
_df = df[(df.val > i) & (df.val < i + width)] # vertical slice
if np.isnan(np.min(func(_df.val)): # ignore nans
continue
xs.append(i + width)
ys.append(np.min(func(_df.val)))
Ich mache dann die Passform mitscipy.optimize.curve_fit
. Meine Frage ist: Gibt es eine natürlichere oder pythonischere Möglichkeit, dies zu tun - und kann ich die Genauigkeit auf irgendeine Weise verbessern? (Zum Beispiel durch eine höhere Gewichtung von Bereichen des Streudiagramms mit einer höheren Punktedichte?)