使用 Python 解析频率分布图的嵌套行文本文档
Parsing Nested Row Text Document for Frequency Distribution Plot with Python
我有一个结构如下的文档:
CUSTOMERID1
conversation-id-123
conversation-id-123
conversation-id-123
CUSTOMERID2
conversation-id-456
conversation-id-789
我想解析文档以获取频率分布图,其中 X 轴为对话数量,Y 轴为客户数量。有谁知道使用 Python 执行此操作的最简单方法?
我熟悉频率分布图部分,但正在努力解决如何将数据解析为正确的数据结构以构建图的问题。感谢您提前提供的任何帮助!
您可以尝试以下方法:
>>> 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
轴中使用 1
和 2
,只需将 dict_[line.strip('\n')] = list_ = []
这一行更改为 dict_[line.strip('CUSTOMERID/\n')] = list_ = []
。
我有一个结构如下的文档:
CUSTOMERID1
conversation-id-123
conversation-id-123
conversation-id-123
CUSTOMERID2
conversation-id-456
conversation-id-789
我想解析文档以获取频率分布图,其中 X 轴为对话数量,Y 轴为客户数量。有谁知道使用 Python 执行此操作的最简单方法?
我熟悉频率分布图部分,但正在努力解决如何将数据解析为正确的数据结构以构建图的问题。感谢您提前提供的任何帮助!
您可以尝试以下方法:
>>> 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
轴中使用 1
和 2
,只需将 dict_[line.strip('\n')] = list_ = []
这一行更改为 dict_[line.strip('CUSTOMERID/\n')] = list_ = []
。