使用python

时间:2016-09-23 21:14:38

标签: python data-analysis

我有一个csv文件,格式如下:

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

第一列表示年龄,最后一列表示存活率(如果患者存活5年或更长时间为1;如果患者在5年内死亡,则为2) 我必须计算哪个年龄的存活率最高。我是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))

1 个答案:

答案 0 :(得分: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)时间复杂度并且将是最快的。