2016-09-23 6 views
0

I in dem folgende Format eine CSV-Datei habe:Daten Python Analysieren

30 1964 1 1 
30 1962 3 1 
30 1965 0 1 
31 1959 2 1 
31 1965 4 1 
33 1958 10 1 
33 1960 0 1 
34 1959 0 2 
34 1966 9 2 
34 1958 30 1 
34 1960 1 1 
34 1961 10 1 
34 1967 7 1 
34 1960 0 1 
35 1964 13 1 
35 1963 0 1 

Die erste Spalte zeigt die überlebt, das Alter und die letzte Spalte zeigt die Überlebensrate (1, wenn der Patient 5 Jahre oder länger; 2, wenn Patient starb innerhalb von 5 Jahren) Ich muss berechnen, welches Alter die höchste Überlebensrate hat. Ich bin neu bei Python und ich kann nicht herausfinden, wie es weitergeht. Ich war in der Lage, das am meisten wiederholte Alter mit der Mode-Funktion zu berechnen, aber ich kann nicht herausfinden, wie man eine Spalte überprüft und die entsprechende andere Spalte ausdruckt. Bitte helfen Sie.

Ich konnte eine Antwort finden, wo ich nur die erste Zeile analysieren musste.

+3

Es sieht so aus, als ob Sie möchten, dass wir einen Code für Sie schreiben. Während viele Benutzer bereit sind, Code für einen in Not geratenen Coder zu produzieren, helfen sie normalerweise nur, wenn das Poster bereits versucht hat, das Problem selbst zu lösen. Eine gute Möglichkeit, diesen Aufwand zu demonstrieren, besteht darin, den Code, den Sie bisher geschrieben haben, die Beispieleingabe (falls vorhanden), die erwartete Ausgabe und die Ausgabe, die Sie tatsächlich erhalten (Konsolenausgabe, Trace-Backs usw.), einzubeziehen. Je mehr Details Sie angeben, desto mehr Antworten erhalten Sie wahrscheinlich. Überprüfen Sie die [FAQ] und [fragen]. –

+0

Erforschen Sie CSV-Scraping mit Python, schreiben Sie etwas Code und kommen Sie zurück, wenn Sie Probleme haben. –

+0

Danke Łukasz Rogalski und jacob-on-stackoverflow – StevieG

Antwort

1

Ich bin mir nicht ganz sicher, ob ich Ihre Logik klar verstanden habe, um das Alter mit der maximalen Überlebensrate zu bestimmen. Unter der Annahme, dass das Alter, das die höchste Zahl von 1s hat, die höchste Überlebensrate hat, wird der folgende Code geschrieben:

Ich habe den Leseteil ein wenig anders gemacht, da der Datensatz drahtgebunden wirkte, wenn ich csv verwendete. Wenn das csv-Modul in Ihrer Umgebung gut funktioniert, verwenden Sie es. Die Idee ist, jedes Wertelement in jeder Zeile abzurufen; wir sind an der 0. und 3. Spalte interessiert.

Im folgenden Code, halten wir ein Wörterbuch, survival_map, und zählen die Häufigkeit eines bestimmten Alters mit einem

import operator 

survival_map = {} 

with open('Dataset.csv', 'rb') as in_f: 
    for row in in_f: 
     row = row.rstrip() #to remove the end line character 
     items = row.split(',') #I converted the tab space to a comma, had a problem otherwise 

     age = int(items[0]) 
     survival_rate = int(items[3]) 

     if survival_rate == 1:   
      if age in survival_map: 
       survival_map[age] += 1 
      else: 
       survival_map[age] = 1 

1. zugeordnet sind Sobald wir die Wörterbuch aufzubauen, {33: 2, 34: 5, 35: 2, 30: 3, 31: 2}, sie in umgekehrter Richtung durch den Schlüssel sortiert wird:

sorted_survival_map = sorted(survival_map.items(), key=operator.itemgetter(1), reverse = True) 
max_survival = sorted_survival_map[0] 

UPDATE:

Für einen einzigen Maximalwert, OP Vorschlag (in einem Kommentar) Ist bevorzugt. Posting hier:

maximum = max(dict, key=dict.get) 
print(maximum, dict[maximum]) 

Für mehr Max-Wert

max_keys = [] 
max_value = 0 
for k,v in survival_map.items(): 
    if v > max_value: 
     max_keys = [k] 
     max_value = v 
    elif v == max_value: 
     max_keys.append(k) 

print [(x, max_value) for x in max_keys] 

Natürlich ist dies durch ein Wörterbuch Verständnis erreicht werden könnte; Aus Gründen der Lesbarkeit schlage ich dies jedoch vor. Dies geschieht auch durch einen Durchgang durch die Objekte im Wörterbuch, ohne es mehrmals zu durchlaufen. Daher hat die Lösung eine O (n) -Komplexität und wäre am schnellsten.

+0

Ich habe folgendes verwendet, um mein Wörterbuch zu sortieren: – StevieG

+0

Ich habe folgendes verwendet, um mein Wörterbuch zu sortieren: maximum = max (dict, key = dict.bekommen) Drucken (maximal, dict [Maximum]) Allerdings habe ich zwei Schlüssel mit den gleichen höchsten Werten. Aber der obige Code druckt nur einen. Wie kann ich beide ausdrucken? – StevieG

+0

Sicher ist Ihr Ansatz besser. Wenn Sie nur ein Maximum haben, sollten Sie das verwenden. Wenn Sie jedoch mehrere Maximalwerte haben, verwenden Sie den Code in meinem neuesten Update. –