Code: Select all
Location = ['CIL', 'BUR', 'SNA', 'PRT'] #a 3-letter code for each unique location data is recorded
TpD = [2.0, 6.5, 32.0, 2.86] #the average number of times per day an event occurs at that location (the independent variable)
Output = [3685, 58492, 285938, 10491] #the total recorded output produced by those events over a year (the dependent variable)
d=pd.DataFrame({'Location':Location, 'TpD':TpD, 'Output':Output})
- kumulative empirische und exponentielle Verteilungen über den Bereich von A bis zu allen TpD-Werten >A berechnen
- die K-S-Statistik für diese beiden Verteilungen berechnen
- wählen Sie den TpD-Wert B aus, der die kleinste K-S-Statistik für den TpD-Wert A erzeugt.
- erstellen Sie eine neue Spalte im DataFrame, die den Wert B in derselben Zeile/diesem Index wie Wert A auflistet
Code: Select all
KSS = []
for a in d.TpD:
Rng = stat.ecdf(d[d['TpD'].between(0,a)].Output).cdf.quantiles
Emp = stat.ecdf(d[d['TpD'].between(0,a)].Output).cdf.probabilities
Exp = stat.expon.cdf(Rng, 0, Rng.mean())
KSS.append(stat.kstest(Emp,Exp).statistic)
d['KSS'] = KSS
d.KSS.min()
Code: Select all
for a in d.TpD:
test = pd.DataFrame()
test['TpD'] = d['TpD'].drop_duplicates().sort_values(ascending=True).reset_index(drop=True)
KSS = []
bins = []
for b in test.TpD:
Rng = stat.ecdf(d[d['TpD'].between(a,b)].Output).cdf.quantiles
Emp = stat.ecdf(d[d['TpD'].between(a,b)].Output).cdf.probabilities
Exp = stat.expon.cdf(Rng, 0, Rng.mean())
KSS.append(stat.kstest(Emp,Exp).statistic)
test['KSS'] = KSS
bins.append(test[test.KSS.min()].TpD)
d['bins'] = bins
Einerseits wäre es schön, wenn ich die spezifischen Fehler in diesem Skript beheben könnte, damit ich weiß, was ich falsch mache. Andererseits muss es sicherlich eine Möglichkeit geben, dies zu tun, für die keine for-Schleifen erforderlich sind. Aus Verzweiflung griff ich auf for-Schleifen zurück, nachdem ich allein mit Pandas wahrscheinlich ein Dutzend verschiedener Befehlssätze erfolglos ausprobiert hatte, bevor ich die ersten drei Schritte, wie im zweiten Codeblock gezeigt, durchführte. Für Vorschläge zu beiden Ansätzen wäre ich dankbar.
Bearbeiten: Auf Anfrage, hier ist alles in einem einzigen Block. Ich bin mir nicht sicher, ob es dazu beitragen wird, das Problem reproduzierbarer zu machen, wenn kein realistischer Datensatz vorhanden ist, aber ich weiß auch nicht, wie man einen künstlich erstellt.
Code: Select all
import pandas as pd
import scipy.stats as stat
Location = ['CIL', 'BUR', 'SNA', 'PRT'] #a 3-letter code for each unique location data is recorded
TpD = [2.0, 6.5, 32.0, 2.86] #the average number of times per day an event occurs at that location (the independent variable)
Output = [3685, 58492, 285938, 10491] #the total recorded output produced by those events over a year (the dependent variable)
d=pd.DataFrame({'Location':Location, 'TpD':TpD, 'Output':Output})
for a in d.TpD:
test = pd.DataFrame()
test['TpD'] = d['TpD'].drop_duplicates().sort_values(ascending=True).reset_index(drop=True)
KSS = []
bins = []
for b in test.TpD:
Rng = stat.ecdf(d[d['TpD'].between(a,b)].Output).cdf.quantiles
Emp = stat.ecdf(d[d['TpD'].between(a,b)].Output).cdf.probabilities
Exp = stat.expon.cdf(Rng, 0, Rng.mean())
KSS.append(stat.kstest(Emp,Exp).statistic)
test['KSS'] = KSS
bins.append(test[test.KSS.min()].TpD)
d['bins'] = bins
Mobile version