我使用此处的apyori
包进行一些事务处理分析:https://pypi.python.org/pypi/apyori/1.1.1
似乎包dump_as_json()
方法为每个可能的购物篮吐出RelationRecords
的字典。
我想将这些json格式的词典放到一个pandas数据帧中,但在尝试使用pd.read_json()
时却遇到了不同的错误。
这是我的代码:
import apyori, shutil, os
from apyori import apriori
from apyori import dump_as_json
import pandas as pd
import json
try:
from StringIO import StringIO
except ImportError:
from io import StringIO
transactions = [
['Jersey','Magnet'],
['T-Shirt','Cap'],
['Magnet','T-Shirt'],
['Jersey', 'Pin'],
['T-Shirt','Cap']
]
results = list(apriori(transactions))
results_df = pd.DataFrame()
for RelationRecord in results:
dump_as_json(RelationRecord,output_file)
print output_file.getvalue()
json_file = json.dumps(output_file.getvalue())
print json_file
print data_df.head()
如何将output_file
中存储的json格式化词典存入pandas数据帧?
答案 0 :(得分:2)
我建议阅读StackOverflow关于生成Minimal, Complete, and Verifiable example的指南。此外,像"我不断收到错误的陈述"不是很有帮助。也就是说,我看了一下这个apyori
包的代码和源代码。抛开错别字,看起来问题就在这里:
for RelationRecord in results:
dump_as_json(RelationRecord,output_file)
您正在创建一个每行一个对象的JSON文件(我认为这有时被称为LSON或Line-JSON。)作为一个完整的文档,它只是不是有效的JSON。您可以尝试将其保留为同类词典列表或其他一些pd.DataFrame友好结构。
output = []
for RelationRecord in results:
o = StringIO()
dump_as_json(RelationRecord, o)
output.append(json.loads(o.getvalue()))
data_df = pd.DataFrame(output)
答案 1 :(得分:0)
summary_df = pd.DataFrame(columns=('Items','Antecedent','Consequent','Support','Confidence','Lift'))
Support =[]
Confidence = []
Lift = []
Items = []
Antecedent = []
Consequent=[]
for RelationRecord in results:
for ordered_stat in RelationRecord.ordered_statistics:
Support.append(RelationRecord.support)
Items.append(RelationRecord.items)
Antecedent.append(ordered_stat.items_base)
Consequent.append(ordered_stat.items_add)
Confidence.append(ordered_stat.confidence)
Lift.append(ordered_stat.lift)
summary_df['Items'] = Items
summary_df['Antecedent'] = Antecedent
summary_df['Consequent'] = Consequent
summary_df['Support'] = Support
summary_df['Confidence'] = Confidence
summary_df['Lift']= Lift
最终数据框如下所示:
希望这会有所帮助:)