Frage

Ich schreibe ein Programm, um die tatsächlichen Abfragedaten Unternehmen wie Gallup oder Rasmussen veröffentlichen täglich zu simulieren: www.gallup.com und www.rassmussenreports.com

Ich bin mit einem Brute-Force-Methode, bei der der Computer einige zufällige tägliche Abfragedaten generiert und berechnet dann 3 Tage Mittelwerte zu sehen, ob der Mittelwert der Zufallsdaten Demoskopen Zahlen übereinstimmt. (Die meisten Unternehmen Umfrage Zahlen gibt drei Tage-Durchschnitt)

Derzeit funktioniert es gut für eine Iteration, aber mein Ziel ist es, die gängigste Simulation haben zu erzeugen, die die durchschnittlichen Abfragedaten übereinstimmen. Ich konnte dann den Code von überall von 1 bis 1000 Iterationen ändern.

Und das ist mein Problem. Am Ende des Tests habe ich ein Array in einer einzigen Variablen, die etwa wie folgt aussieht:

[40.1, 39.4, 56.7, 60.0, 20.0 ..... 19.0]

Das Programm produziert derzeit ein Array für jede korrekte Simulation. kann ich speichere jedes Array in einer einzigen Variablen, aber ich muß dann ein Programm, das 1 bis 1000 Variablen je nachdem, wie viele Iterationen erzeugen könnte ich gebeten!?

Wie vermeide ich das? Ich weiß, es ist eine intelligente Art und Weise, dies zu tun, dass das Programm nicht benötigen Variablen zum Speichern von Arrays zu erzeugen, je nachdem, wie viele Simulationen ich wollte.

Code-Prüfung für McCain:

 test = [] 

while x < 5: 

   test = round(100*random.random())

   mctest.append(test) 

   x = x +1 


mctestavg = (mctest[0] + mctest[1] + mctest[2])/3 

#mcavg is real data

if mctestavg == mcavg[2]: 
  mcwork = mctest 

Wie kann ich wiederholen, ohne dass mehrere mcwork Schaffung Vars?

War es hilfreich?

Lösung

wäre so etwas wie dieses Werk?

from random import randint    

mcworks = []

for n in xrange(NUM_ITERATIONS):
    mctest = [randint(0, 100) for i in xrange(5)]
    if sum(mctest[:3])/3 == mcavg[2]:
        mcworks.append(mctest) # mcavg is real data

Am Ende werden Sie mit einer Liste der gültigen mctest Listen links.

Was ich geändert:

  • verwendet, um eine Liste Verständnis die Daten statt einer for-Schleife zu bauen
  • Gebrauchte random.randint Zufallszahlen erhalten
  • Gebraucht Scheiben und sum den Durchschnitt der ersten drei Punkte berechnen
  • (Zu Ihrer eigentlichen Frage beantworten :-)) Setzen Sie die Ergebnisse in einer Liste mcworks, statt eine neue Variable für jede Iteration zu schaffen

Andere Tipps

Sprechen Sie über dies zu tun?

>>> a = [ ['a', 'b'], ['c', 'd'] ]
>>> a[1]
['c', 'd']
>>> a[1][1]
'd'

Listen in Python können jede Art von Objekt enthalten - Wenn ich die Frage richtig verstanden hat, wird ein list von lists die Arbeit machen? So etwas wie diese (vorausgesetzt, Sie eine Funktion generate_poll_data() haben, die Ihre Daten erzeugt:

data = []

for in xrange(num_iterations):
    data.append(generate_poll_data())

Dann data[n] wird die Liste der Daten aus der (n-1)th Sicht.

da Sie denken in Variablen , könnte man ein Wörterbuch über eine Liste von Listen bevorzugen:

data = {}
data['a'] = [generate_poll_data()]
data['b'] = [generate_poll_data()]

etc.

Ich würde mit in Erwägung ziehen, NumPy dies zu tun. Sie erhalten eine effiziente N-dimensionale Arrays, die Sie schnell und einfach Prozess.

Eine saubere Art und Weise, es zu tun ist, eine Liste von Listen in Kombination mit Pandas zu verwenden. Dann sind Sie in der Lage einen 3-Tages-Rollender-Durchschnitt zu erstellen. Dies macht es einfach nur um durch die Ergebnisse suchen, um die wirklichen als eine weitere Spalte hinzufügen, und mit Hilfe der loc Funktion für Feststellung, dass Spiel welche.

rand_vals = [randint(0, 100) for i in range(5))]
df = pd.DataFrame(data=rand_vals, columns=['generated data'])
df['3 day avg'] = df['generated data'].rolling(3).mean()
df['mcavg'] = mcavg # the list of real data
# Extract the resulting list of values
res = df.loc[df['3 day avg'] == df['mcavg']]['3 day avg'].values

Dies ist auch ordentlich, wenn Sie die gleiche Zufallswerte für verschiedene Umfragen / Personen verwenden möchten, nur eine weitere Spalte mit ihren realen Werte hinzufügen und die gleiche Suche für sie auszuführen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top