问题是要保存字典以进行数据分析,以便可以扩展。 我正在执行10000个搜索,并根据结果为每个查询保存一个词典。最后,我得到如下字典:
{
'query_1' : {'has_result': True (or False),
'direct_result': True (or False),
'title': "title_1",
'summary': "summary_1",
'infobox': {'header_11': "data_11",
'header_12': "data_12",
.
.
.
}
'query_2' : {'has_result': True (or False),
'direct_result': True (or False),
'title': "title_2",
'summary': "summary_2",
'infobox': {'header_21': "data_21",
'header_22': "data_22",
.
.
.
}
.
.
.
}
问题部分显然是“信息框”。我不知道每个“信息框”将获得多少个键值对(通常不超过50个)。而且每个信息框的密钥都应有所不同。
现在,我只能想到以下将数据保存为csv的方法。
+---------+------------+---------------+---------+-----------+----------------+--------------+
| query | has_result | direct_result | title | summary | infobox_header | infobox_data |
+---------+------------+---------------+---------+-----------+----------------+--------------+
| query_1 | TRUE | TRUE | title_1 | summary_1 | header_1 | data_1 |
| query_1 | TRUE | TRUE | title_1 | summary_1 | header_2 | data_2 |
| query_1 | TRUE | TRUE | title_1 | summary_1 | header_3 | data_3 |
| query_1 | TRUE | TRUE | title_1 | summary_1 | header_4 | data_4 |
| query_1 | TRUE | TRUE | title_1 | summary_1 | header_5 | data_5 |
| query_2 | TRUE | FALSE | title_2 | summary_2 | header_1 | data_1 |
| query_2 | TRUE | FALSE | title_2 | summary_2 | header_2 | data_2 |
| query_2 | TRUE | FALSE | title_2 | summary_2 | header_3 | data_3 |
| query_2 | TRUE | FALSE | title_2 | summary_2 | header_4 | data_4 |
+---------+------------+---------------+---------+-----------+----------------+--------------+
我的解决方案的问题是'title'和'summary'是一个字符串变量。对于10000个查询,这并不是什么大问题。我最终得到大约200,000行。但我只是在考虑是否从理论上讲,这是保存此字典以进行数据分析的最佳方法。
如果将来我使用100,000或1,000,000个查询该怎么办?您将如何解决这个问题?您会从一开始就使用不同的数据结构吗?以及如何准备进行数据分析?
答案 0 :(得分:0)
对于使用Python进行数据分析,最好的选择是使用一个类。值得庆幸的是,有第三方库提供了此功能,例如Pandas。
以下解决方案使用@MaxU's explode
recipe。
import pandas as pd
# construct dataframe from dictionary of dictionaries, d
df = pd.DataFrame.from_dict(d, orient='index').rename_axis('query').reset_index()
# extract header & data, drop infobox
df['header'] = df['infobox'].map(list)
df['data'] = df['infobox'].map(lambda x: list(x.values()))
df = df.drop('infobox', 1)
# expand dataframe
res = explode(df, ['header', 'data'])
print(res)
query has_result direct_result title summary header data
0 query_1 True False title_1 summary_1 header_11 data_11
1 query_1 True False title_1 summary_1 header_12 data_12
2 query_2 False True title_2 summary_2 header_21 data_21
3 query_2 False True title_2 summary_2 header_22 data_22
选择存储是一个广泛的问题,它取决于您的用例,需求,现有的基础结构等。通常,您可能会发现Pickle和HDF5足够了。 HDF5具有可移植性。