【发布时间】:2020-09-29 07:49:01
【问题描述】:
我必须编写一个将吸烟与肺癌风险关联起来的程序。为此,我在两个文件中有数据。 我的代码正在计算在同一行中给出的数据(例如:美国,23.3 与西班牙,77.9 和 意大利,24.2 与俄罗斯,60.8) 如何修改我的代码,以便计算相同国家/地区的数量并忽略仅出现在一个文件中的国家(它不应该计算德国、法国、中国、韩国,因为它们只在一个文件中) 非常感谢您提前提供的帮助:)
吸烟档案:
Country, Percent Cigarette Smokers Data
America,23.3
Italy,24.2
Russia,23.7
France,14.9
England,17.9
Spain,17
Germany,21.7
第二个文件:
Cases Lung Cancer per 100000
Spain,77.9
Russia,60.8
Korea,61.3
America,73.3
China,66.8
Vietnam,64.5
Italy,43.9
和我的代码:
def readFiles(smoking_datafile, cancer_datafile):
'''
Reads the data from the provided file objects smoking_datafile
and cancer_datafile. Returns a list of the data read from each
in a tuple of the form (smoking_datafile, cancer_datafile).
'''
# init
smoking_data = []
cancer_data = []
empty_str = ''
# read past file headers
smoking_datafile.readline()
cancer_datafile.readline()
# read data files
eof = False
while not eof:
# read line of data from each file
s_line = smoking_datafile.readline()
c_line = cancer_datafile.readline()
# check if at end-of-file of both files
if s_line == empty_str and c_line == empty_str:
eof = True
# check if end of smoking data file only
elif s_line == empty_str:
raise OSError('Unexpected end-of-file for smoking data file')
# check if at end of cancer data file only
elif c_line == empty_str:
raise OSError('Unexpected end-of-file for cancer data file')
# append line of data to each list
else:
smoking_data.append(s_line.strip().split(','))
cancer_data.append(c_line.strip().split(','))
# return list of data from each file
return (smoking_data, cancer_data)
def calculateCorrelation(smoking_data, cancer_data):
'''
Calculates and returns the correlation value for the data
provided in lists smoking_data and cancer_data
'''
# init
sum_smoking_vals = sum_cancer_vals = 0
sum_smoking_sqrd = sum_cancer_sqrd = 0
sum_products = 0
# calculate intermediate correlation values
num_values = len(smoking_data)
for k in range(0,num_values):
sum_smoking_vals = sum_smoking_vals + float(smoking_data[k][1])
sum_cancer_vals = sum_cancer_vals + float(cancer_data[k][1])
sum_smoking_sqrd = sum_smoking_sqrd + \
float(smoking_data[k][1]) ** 2
sum_cancer_sqrd = sum_cancer_sqrd + \
float(cancer_data[k][1]) ** 2
sum_products = sum_products + float(smoking_data[k][1]) * \
float(cancer_data[k][1])
# calculate and display correlation value
numer = (num_values * sum_products) - \
(sum_smoking_vals * sum_cancer_vals)
denom = math.sqrt(abs( \
((num_values * sum_smoking_sqrd) - (sum_smoking_vals ** 2)) * \
((num_values * sum_cancer_sqrd) - (sum_cancer_vals ** 2)) \
))
return numer / denom
【问题讨论】:
-
欢迎来到 SO!请详细说明您的代码当前做了什么以及为什么它不适合您。根据您的问题,我无法确定您的问题是什么。
-
我的代码正在计算同一行中给出的数据(例如:美国、23.3 西班牙、77.9 意大利、24.2 与俄罗斯、60.8) 如何修改我的代码以便计算相同的数字国家并忽略只出现在一个文件中的国家(它不应该计算德国、法国、中国、韩国,因为它们只在一个文件中)。这是我在代码末尾所要求的
-
并编辑了我的代码。希望现在详细说明
-
首先您可以在文件中创建两个国家/地区列表,然后使用
set()检查哪些名称是唯一的。
标签: python database file self-modifying