【问题标题】:How to do data analysis using Python, of a file with thousands of dictionaries in each line如何使用 Python 对每行包含数千个字典的文件进行数据分析
【发布时间】:2015-03-22 02:32:49
【问题描述】:

我目前有一个包含 5000 行的文件,每行有一本字典。所有字典都有相同的字段。我的问题是:

我应该学习 SQL 来存储这些数据并用它进行分析,还是使用我已经足够好的文件,我应该只使用 pandas 或其他一些模块来进行数据分析。

我真的不知道该走哪条路。

【问题讨论】:

  • 这取决于您必须访问数据、修改数据、添加数据等的频率和频率。我认为没有一个单一的答案。 5000 行并不多,sqlite 将是轻量级的解决方案,比f.open 可靠得多
  • 我知道这是一个相当主观的问题。我不需要太多修改它,我的计划是分析数据,然后为它创建一个 GUI,这样我就可以有更好的数据可视化。我会研究一下 sqlite。
  • 方式,这个问题太模糊了。答案完全取决于您的用例。话虽如此,我经常发现在数据库中清理和聚合数据比通过 Pandas/etc 更容易。

标签: python sql pandas


【解决方案1】:

虽然这个问题很笼统 - 应该注意的是,我如何存储我的数据集我使用什么工具来分析我的数据的问题非常不同的问题。 对于需要定期修改或更新的数据集,数据库通常比压缩文件更可取(因为修改压缩文件内容需要您重写所有数据)。例如,我可能不会将sqlite 用于nltk.corpus,尽管也可能有用例。

如果您决定使用 sqlite 并且您的原始数据是字典格式,尤其是包含许多字段 - 您可能会发现 exectracerowtrace 很有用: http://apidoc.apsw.googlecode.com/hg/connection.html#apsw.Connection.setrowtracehttp://apidoc.apsw.googlecode.com/hg/connection.html#apsw.Connection.setexectrace 有用。

例如,要以dict 而不是元组格式从sqlite 中获取行,您可以这样做:

def rowtracer(cursor, sql):
    dictionary = {}
    for index, (name, type_) in enumerate(cursor.getdescription()):
        dictionary[name] = sql[index]
    return dictionary

    con.setrowtrace(rowtracer)

对于插入,您可以在字典中传递值,即

"""insert into my_table(name, data) values(:name, :date)"""

【讨论】:

  • 字典上有很多字段,总共大约40个,但我可能只需要大约4-5个字段,所以我认为从所有字典中删除不需要的字段一定很容易,如果他们关键值是否相同?另外,是否可以创建一个 GUI 来分析来自 SQLite 的数据?
猜你喜欢
  • 1970-01-01
  • 2020-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多