繁体   English   中英

使用python分析数据

[英]Analyze data using python

我有以下格式的 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

第一列表示年龄,最后一列表示存活率(1 如果患者存活 5 年或更长时间;2 如果患者在 5 年内死亡)我必须计算哪个年龄的存活率最高。 我是 python 的新手,我不知道如何继续。 我能够使用 mode 函数计算重复次数最多的年龄,但我无法弄清楚如何检查一列并打印相应的另一列。 请帮忙。

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

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))

我不完全确定我是否清楚地理解您确定具有最大存活率的年龄的逻辑。 假设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),并且将是最快的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM