Ich habe eine Reihe von Daten, die aus Werten aus mehreren Experimenten besteht (1-40, in der MWE ist es 1-5). Die Gesamtmenge der Einträge in meinen ursprünglichen Daten ~ 4.000.000, die ich versuche zu glätten, um es anzuzeigen:Glättungskurve für Matplotlib.pyplot mit Pandas oder numpy/scipy
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import spline
from statsmodels.nonparametric.smoothers_lowess import lowess
df = pd.DataFrame()
df["values"] = np.random.randint(100000, 200000, 1000)
df["id"] = [1,2,3,4,5] * 200
plt.figure(1, figsize=(11.69,8.27))
# Both fail for my amount of data:
plt.plot(spline(df["values"], df["id"], range(100)), "r-")
plt.plot(lowess(df["values"], df["id"]), "r-")
beid scipy.interplate und statsmodels.nonparametric.smoothers_lowess.lowess, wirft aus Speicherausnahmen für meine Daten. Gibt es einen effizienten Weg, um dies zu lösen, zum Beispiel in GNU R mit ggplot2 und geom_smooth()?
, warum Sie tun 'Bereich (100)' im ersten Plot? An diesem Ort ist ein Int. – Lucas
Laut der Dokumentation (https://docs.scipy.org/doc/scipy-0.18.1/reference/generated/scipy.interpolate.spline.html) ist es eine Liste/ein Array von neuen x-Werten, die dies tun würden sei in diesem Fall [0, 2, ..., 99], oder? – Robin
Trennen Sie die Glättungsberechnung vom Plotaufruf, damit Sie sehen, wo sie fehlschlägt. Meine Vermutung ist, dass das Erstellen eines Plots mit 4 Millionen Punkten nicht sehr informativ ist und viel Speicherplatz benötigt. Außerdem sollte der bei der lokalen Regression zu verwendende Anteil reduziert werden, wenn die Stichprobengröße so groß ist. – user333700