0

情况如下:

我遇到的第一个问题是从 CSV 文件中获取信息。我正在编写代码的目的是获取有关 ZCTA(邮政编码)的大量信息,用于许多不同的群组(目前正在使用六个,但该代码旨在灵活地拥有任意数量的队列)。一个文件包含按队列划分的每个 ZCTA 的人口。另一个文件包含每个 ZCTA 的每个队列的“病例”(观察到的癌症病例)的数量。另一个文件有每个队列的粗略率,爱荷华州(本研究的重点),人们可以“预期”看到癌症人数的比率,对于一个人口,按队列。还有几个其他文件,但这些是重点,因为这是我的问题所在。

我的代码最初所做的是读取人口文件并通过 ZCTA 获取每个队列的人口。每个 ZCTA 和信息都存储在一个列表中,然后存储在一个列表列表(嵌套)中,其中包含所有 ZCTA。代码然后得到粗略的费率。然后,粗率乘以每个 ZCTA 的适当队列,并与每个 ZCTA 内的所有其他队列相加,以获得每个 ZCTA 的我们可以预期看到患有癌症的总人数。人口也被总结了。此信息存储在另一个列表中,以及包含所有 ZCTA 的列表中。该信息将成为重点(所有 ZCTA 的列表,每个 ZCTA 都包含总人口和预期病例总数)。

所以,问题是我需要获取这个新获得的列表并获取每个队列的 OBSERVED 病例数,将它们加在一起,将其附加到适当的 ZCTA 并将其写入新文件。我已经实现了可以很好地执行此操作的代码,除了底部 22 个左右的 ZCTA 没有获得观察到的案例数量。我不知道是代码还是什么,但它适用于所有其他 906,但没有得到底部的 22。

读者可以在以下位置找到我讨论过的文件(观察到的案例文件和输出文件)的示例数据:Gist

这是我正在使用的代码:

`expectedcsv = open('ExpectedCases.csv', 'w',  newline= '')
expectedwriter = csv.writer(expectedcsv, delimiter = ',')
expectedHeader = ['zcta', 'expected', 'pop', 'observed']
thecasesreader = csv.reader(thecasescsv, delimiter = ',')
for zcta in zctaPop:
   caseCounter = 0
   thecasescsv = open('NewCaseFile.csv', 'r', newline = '')
   thecasesreader = csv.reader(thecasescsv, delimiter = ',')
   for case in thecasesreader:
      if case[0] == zcta[0]:
         for i in range(3, len(case)):
            caseCounter += int(case[i])
   zcta.append(caseCounter)
   expectedwriter.writerow(zcta)
expectedcsv.close()
thecasescsv.close()`

我还想提出的其他一点是,稍后在代码中,所有这些的实际目的是为每个网格点创建一个 SMR 过滤器。网格点有些随意,它们被放置在整个爱荷华州(通过坐标)。SMR 是观察到的病例数除以预期病例数。阈值,即特定过滤器的预期案例数量由用户设置。因此,如果用户想要在 150 个预期案例(对于每个网格点)上创建过滤器,则代码会遍历每个 ZCTA,对预期案例求和,直到找到超过 150 个。到最后一个 ZCTA 的距离是过滤器的“半径”。

为此,我构建了一个距离矩阵(从每个网格点到每个 ZCTA 的距离),然后对其进行排序,最接近最远。由于文件的大小(2300 X 930),我必须逐行读取该文件并从其他文件中获取所有信息。所以,从最近的 ZCTA 开始,我得到人口、预期病例和观察病例(上面讨论了这个文件的问题),并将这些分别添加到各自的计数器(一个用于人口,一个用于观察,一个用于预期) . 然后它转到下一个最接近的 ZCTA 并执行相同的操作,直到超过阈值。

这里的问题是我无法使用 CSV 模块来读取这些文件,因为我已经从另一个文件中读取并且索引会丢失。所以,我不得不只使用常规filename.read()的,然后需要对maketransand进行一些有趣的使用.translate。我不确定它是否有效或效果很好。一切似乎都很好,但是如果没有解决上述问题,就无法判断。我已经包含了下面的代码,但想知道是否有人有更好的想法/建议?

`expectedCSV = open('ExpectedCases.csv', 'r', newline = '')
 table = str.maketrans('\r', ' ')
 content = expectedCSV.read()
 expectedCSV.close()
 content = content.translate(table)
 content = content.split(sep = '\n')
 newContent = []
 for item in content:
     newContent.append((item.split(sep= ',')))
 content = ' '
 for item in newContent:
     if item[0] == currentZcta:
          expectedTotal += (float(item[1]))
          totalPop += (float(item[2]))
          totalObservedCount += (float(item[3]))`

此外,我不知道如何将方法着色为蓝色,变量着色为红色,就像该站点的一些更出色的用户所做的那样。我会非常有兴趣学习如何在以后的帖子中做到这一点。

如果有人需要更多信息或任何澄清以帮助回答/制定解决方案,请务必询问!感谢您花时间阅读!

4

1 回答 1

0

所以,我最终通过计算观察值以及预期和人口来“解决”这个问题,方法是打开每个计算的 ZCTA 的文件。这并没有真正解决我正在处理的问题,而是找到了解决方法。我有点失望,更多的人没有看到和/或回应这一点。如果有人想出实际问题的答案,请务必在此处发布。-麦克风

于 2013-04-03T22:06:17.817 回答