2016-09-23 3 views
0

У меня есть файл CSV в следующем формате:Анализ данных с использованием Python

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 

Первый столбец обозначает возраст и последний столбец обозначает коэффициент выживаемости (1, если пациент выживает 5 лет или дольше; 2, если пациент умер в течение 5 лет) Я должен рассчитать, какой возраст имеет самую высокую выживаемость. Я новичок в python, и я не могу понять, как это сделать. Я смог рассчитать самый повторный возраст, используя функцию режима, но я не могу понять, как проверить один столбец и распечатать соответствующий другой столбец. Пожалуйста помоги.

Я смог найти ответ, где мне пришлось анализировать только первую строку.

import csv 
import matplotlib.pyplot as plt 
import numpy as np 

df = open('Dataset.csv') 
csv_df=csv.reader(df) 
a=[] 
b=[] 

for row in csv_df: 
    a.append(row[0]) 
    b.append(row[3]) 

print('The age that has maximum reported incidents of cancer is '+ mode(a)) 
+3

Похоже, вы хотите, чтобы мы написали вам код. Хотя многие пользователи готовы создавать код для кодера, терпящего бедствие, они обычно помогают только тогда, когда плакат уже попытался решить проблему самостоятельно. Хорошим способом продемонстрировать это усилие является включение кода, который вы написали до сих пор, пример ввода (если есть), ожидаемого результата и выход, который вы фактически получаете (вывод консоли, трассировка и т. Д.). Чем больше деталей вы предоставляете, тем больше ответов вы получите. Проверьте [FAQ] и [ask]. –

+0

Проведите некоторое исследование CSV соскабливания с Python, напишите код и вернитесь, если у вас есть проблемы. –

+0

Спасибо Łukasz Rogalski и jacob-on-stackoverflow – StevieG

ответ

1

Я не совсем уверен, ясно ли я понял вашу логику для определения возраста с максимальной выживаемостью. Предполагая, что возраст, у которого есть самое высокое число 1s, имеет самую высокую выживаемость, написан следующий код:

Я сделал часть чтения немного по-другому, поскольку набор данных действовал проводным, когда я использовал csv. Если модуль csv отлично работает в вашей среде, используйте его. Идея состоит в том, чтобы получить каждый элемент значения в каждой строке; нас интересуют 0-й и 3-й столбцы.

В следующем коде, мы считаем, словарь, survival_map, и подсчитать частоту определенного возраста, связанное с 1.

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 

После того, как мы строим словарь, {33: 2, 34: 5, 35: 2, 30: 3, 31: 2}, сортируются в обратном направлении с помощью ключа:

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

ОБНОВЛЕНИЕ:

Для одного значения макс, предложение OP (в комментарии) является предпочтительным. Проводка его здесь:

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

Для кратных макс значений

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] 

Конечно, это может быть достигнуто с помощью словаря понимания; однако для удобства чтения я предлагаю это. Кроме того, это делается через один проход через объекты в словаре, не проходя через него несколько раз. Следовательно, решение имеет O (n) временную сложность и будет самым быстрым.

+0

Я воспользовался следующим, чтобы отсортировать мой словарь: – StevieG

+0

Для того, чтобы отсортировать мой словарь: maximum = max (dict, key = dict.get) печать (максимум, dict [максимум]) Однако у меня есть две клавиши с одинаковыми наивысшими значениями. Но вышеприведенный код печатает только один. Как я могу напечатать их оба? – StevieG

+0

Наверняка, ваш подход лучше. Если у вас есть только один максимум, вы должны использовать это. Если у вас несколько максимальных значений, используйте код в моем последнем обновлении. –

Смежные вопросы