【问题标题】:Parsing Nested Row Text Document for Frequency Distribution Plot with Python使用 Python 解析频率分布图的嵌套行文本文档
【发布时间】:2020-11-21 15:52:23
【问题描述】:

我有一个具有以下结构的文档:

CUSTOMERID1
    conversation-id-123
    conversation-id-123
    conversation-id-123
CUSTOMERID2
    conversation-id-456
    conversation-id-789

我想解析文档以获取频率分布图,其中 X 轴上的对话数量和 Y 轴上的客户数量。有谁知道使用 Python 最简单的方法?

我对频率分布图很熟悉,但在如何将数据解析为正确的数据结构以构建图时却苦苦挣扎。感谢您提前提供的任何帮助!

【问题讨论】:

  • 您有两个独特的客户和三个独特的对话。您不能绘制#customers 与#conversations。您想要每个客户进行多次对话还是每次对话有多少客户。您能否为您给出的示例提供您想要的示例输出图? CUSTOMERID1 如何进行 3 次相同的对话?

标签: python parsing frequency-distribution


【解决方案1】:

您可以尝试以下方法:


>>> dict_ = {}
    
>>> with open('file.csv') as f:
        for line in f:
            if line.startswith('CUSTOMERID'):
                dict_[line.strip('\n')] = list_ = []
            else:
                list_.append(line.strip().split('-'))
    
>>> df = pd.DataFrame.from_dict(dict_, orient='index').stack()
>>> df.transform(lambda x:x[-1]).groupby(level=0).count().plot(kind='bar')

输出:

如果您只想要X 轴中的12,只需将dict_[line.strip('\n')] = list_ = [] 这一行更改为dict_[line.strip('CUSTOMERID/\n')] = list_ = []

【讨论】:

  • CUSTOMERID1 只是实际 ID 的一个示例。实际 ID 不会以“CUSTOMERID。与对话 ID 相同”开头。你想要的是这样的:customers = [i.strip() for i in lines if not i.startswith('---- ') ] 和 conversations = [i.strip() for i in lines if i.startswith('----')] 来创建你的字典。注意:无法为连续空格格式化此注释,因此应将四个破折号替换为四个空格。
猜你喜欢
  • 1970-01-01
  • 2015-10-16
  • 2014-05-23
  • 2017-04-03
  • 2018-04-02
  • 1970-01-01
  • 1970-01-01
  • 2011-05-17
  • 1970-01-01
相关资源
最近更新 更多