首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用python分析数据

使用python分析数据
EN

Stack Overflow用户
提问于 2016-09-24 05:14:38
回答 1查看 236关注 0票数 0

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

代码语言:javascript
复制
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的新手,我不知道该怎么做。我可以使用mode函数计算重复次数最多的年龄,但我不知道如何检查一列并打印相应的另一列。请帮帮忙。

我找到了一个答案,我只需要分析第一行。

代码语言:javascript
复制
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))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-24 06:27:15

我不完全确定我是否清楚地理解了你的逻辑,即确定存活率最高的年龄。假设具有最高数量的1的年龄具有最高的存活率,则编写以下代码

当我使用csv时,我做了一些不同的读取部分,因为数据集是有线的。如果csv模块在您的环境中运行良好,请使用它。其思想是,检索每一行中的值的每个元素;我们感兴趣的是第0列和第3列。

在下面的代码中,我们维护一个名为survival_map的字典,并计算与1关联的特定年龄的频率。

代码语言:javascript
复制
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},它就会按键反向排序:

代码语言:javascript
复制
sorted_survival_map = sorted(survival_map.items(), key=operator.itemgetter(1), reverse = True)
max_survival = sorted_survival_map[0]

更新:

对于单个最大值,最好使用OP的建议(在注释中)。在这里发帖:

代码语言:javascript
复制
maximum = max(dict, key=dict.get) 
print(maximum, dict[maximum])

对于多个最大值

代码语言:javascript
复制
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)时间复杂度,并且将是最快的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39669659

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档