gpt4 book ai didi

Python解析大文本文件并抓取多层次数据

转载 作者:行者123 更新时间:2023-11-28 20:52:47 25 4
gpt4 key购买 nike

如果我对此的描述完全迟钝,首先让我道歉,大部分内容仍在即时学习。

我有几个大型的综合医院信息文本文件 (.txt)(约 600,000 行),我正在使用 Python 对其进行解析。我一直在使用默认字典 (python2.7) 来获取 pt 深度一级的计数和子计数。诊断。例如,如果希望捕捉心脏病发作然后根据类型(伪代码)进行区分:

if 'heart attack' in line[65:69]: 
defaultdict['heart attack'] +=1
if [65:69] == 'worst kind':
defaultdict['worst'] += 1
else:
defaultdict['not worst'] +=1

通过这种方式,我可以捕捉到心脏病发作以及它们是否是我感兴趣的特定事件。一切正常。但是,现在我还想收集患者年龄(以编码范围报告)、性别(M、F、U)和种族等信息(来自同一行)。我意识到我的技术是不太适合这个——它的复杂性似乎在快速增长。所以,在我深入研究之前——我应该有另一种方法来解决这个问题吗?

最终我打算将所有这些文件放入一个实际的数据库中,但这基本上是最后一条信息。我需要当前的项目,所以我很乐意将它转储到 excel 中并暂时绘制图表。

感谢任何建议!

编辑:示例线就像 -

02032011JuniorHospital       932220320M09A228393
03092011MassGeneralHospitals 923392818F09B228182

所以所有的行都是固定长度的,其中行 [0:8] 始终是日期,等等。有一个单独的文件(字典?)解释了数字的含义 - 所以诊断将类似于 410.22,年龄将在 0 = 0-1 岁、1 = 2-3 岁等范围内......

目标:对于我想要的每个诊断,还想知道特定诊断是一种兴趣的子类型(使用上面的代码没问题),与该诊断相关的各种年龄是多少(即,有多少在每个年龄段)。我目前将此输出到 excel 文件 (csv),因此我想要可以根据需要绘制的各种多列。

再一次,我可以想出如何做到这一切,只需创建一些额外的默认指令——似乎应该有一种更简单的方法将它们组合到一个主要对象中!

最佳答案

您可以概括分层计数的概念,以获得更易于修改的更清晰的代码。分层计数器类的一个基本示例是

class HierarchicCounter(object):
def __init__(self, key, hierarchy):
self.key = key
self.hierarchy = hierarchy
self.counts = defaultdict(int)
self.subcounters = defaultdict(self._create_subcounters)

def _create_subcounters(self):
return {key: HierarchicCounter(key, hierarchy)
for key, hierarchy in self.hierarchy.iteritems()}

def count(self, line):
key = self.key(line)
if key is None:
return
self.counts[key] += 1
for subcounter in self.subcounters[key].itervalues():
subcounter.count(line)

这个类的构造函数接受两个参数。 key 参数是“键函数”,它告诉计数器它应该计数什么。如果一行被馈送到计数器,它会对其应用键函数并增加与检索到的键对应的计数。 hierarchy 参数是一个字典,将所需子计数器的关键函数映射到它们各自的层次结构。

示例用法:

def diagnosis_major(line):
return line[0:3]

def diagnosis_minor(line):
return line[3:5]

def age(line):
return int(line[5:7])

def sex(line):
return line[7]

counter = HierarchicCounter(
diagnosis_major, {diagnosis_minor: {sex: {}}, age: {}})

这会创建一些简单的关键函数,从一行中提取不同的字段。在您的应用程序中,关键功能可能会变得更加复杂。您也可以在这里过滤掉键——如果键函数返回 None,计数器将简单地忽略该行。最后两行创建了一个具有以下计数层次结构的 HierarchicCounter 实例:

diagnosis_major
|-- diagnosis_minor
| \-- sex
\-- age

因此计数器统计了每个重大诊断的病例数。对于每一个大诊断,统计这个大诊断对应的小诊断和年龄。对于每个次要诊断,每个主要诊断都会计算性别。

当然这个例子并不完整。您需要添加一些代码,以某种格式实际输出在计数器层次结构中收集的计数——这只是为了让您了解如何以更通用的方式对其进行抽象。

关于Python解析大文本文件并抓取多层次数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6258531/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com