只需一行代码,就可以将anki数据库加载为pandas数据框!
ankipandas的Python项目详细描述
注意:这个项目还是很新鲜的。小心尝试并给出反馈!
说明
Anki是最流行的间隔重复学习抽认卡系统之一, pandas是最流行的用于数据分析和操作的python包。 那么,还有什么比把两者结合在一起更好的呢?
使用AnkiPandas可以使用pandas轻松分析或操作 安基抽认卡。
功能:
- select:使用^{tt2}轻松选择卡片、笔记或评论的任意子集$ (one of many introductions, official documentation)
- visualize:使用pandas的强大功能built in tools或切换到更通用的 seaborn(统计分析)或matplotlib库
- maniple:对表应用快速批量操作(例如添加标记、更改组、设置字段内容、挂起卡等) 或者遍历表并逐步执行这些操作
- add:添加新笔记和卡片
- 导入和导出:pandas可以导出到csv、ms excel、html、json,… (io documentation)
pros:
- easy installation:通过python包管理器安装(独立于anki安装)
- simple:只需一行代码即可开始
- 方便:将有关cards、notes、models、decks和更多信息集中在一个表中!
- 完全文档化:Documentation on readthedocs
- 经过良好测试:超过100个单元测试以保持一切正常
备选方案:如果您的主要目标是添加新卡、模型等,您还可以 看看genanki项目。
安装
AnkiPandas可用作pypi package 可以使用python package manager:
安装或升级pip3 install --user --upgrade ankipandas
对于最新的开发版本,也可以使用克隆版本 此存储库的:
git clone https://github.com/klieret/ankipandas/
cd ankipandas
pip3 install --user --upgrade .
用法
启动非常简单:
fromankipandasimportCollectioncol=Collection()
并且col.notes将是包含所有注释的数据帧,并且 使许多事情变得简单的方法。 类似地,您可以使用col.cards或col.revs访问卡片或评论。
如果调用时没有任何参数Collection()将尝试查找 你的anki数据库本身。不过,这可能需要一些时间。 为了方便起见,只需提供(部分)到数据库的路径,然后 (如果您有多个用户)您的anki用户名,例如 Collection(".local/share/Anki2/",user="User 1")在许多Linux上 装置。
要获取有关每个列的解释的信息,请使用 notes.help_cols()。
查看documentation以了解有关 可用的方法!
一些基本示例:
分析
显示所有卡组每张卡的评论次数(重复次数)的直方图:
col.cards.hist(column="creps",by="cdeck")
将每层水蛭的数量显示为饼图:
cards=col.cards.merge_notes()selection=cards[cards.has_tag("leech")]selection["cdeck"].value_counts().plot.pie()
查找模型MnemoticModel的所有注释,其中Mnemotic字段为空:
notes=col.notes.fields_as_columns()notes.query("model=='MnemoticModel' and 'Mnemotic'==''")
操纵
将difficult-japanese和marked标记添加到包含标记的所有注释中 Japanese和leech:
selection=col.notes.has_tags(["Japanese","leech"])selection=selection.add_tag(["difficult-japanese","marked"])col.notes.update(selection)col.write(modify=True)# Overwrites your database after creating a backup!
对于用English标记的LanguageModel模型的所有注释,将language字段设置为English:
selection=col.notes.has_tag(["English"]).query("model=='LanguageModel'").fields_as_columns()selection["language"]="English"col.notes.update(selection)col.write(modify=True)
将所有标记为leech的卡移动到卡组Leeches Only:
selection=col.cards.has_tag("leech")selection["cdeck"]="Leeches Only"col.cards.update(selection)col.write(modify=True)
贡献
非常感谢您的帮助!建议、错误报告和功能请求 最好以github issues的形式打开。你也可以先在 gitter community。 如果您想自己编写代码,欢迎您提交pull request!
许可证和免责声明
这个软件是根据MIT license授权的。(尽管尽了最大的努力) 来了,没有任何保证。 这个标志的灵感来自Anki logo(license) 以及logo of the pandas package (license2)。 此库及其作者与 安基或熊猫项目的任何方式。