Description
Read and Analyze 'Anki' Flashcard Databases.
Description
Comprehensive toolkit for reading and analyzing 'Anki' flashcard collection databases. Provides functions to access notes, cards, decks, note types, and review logs with a tidy interface. Features extensive analytics including retention rates, learning curves, forgetting curve fitting, and review patterns. Supports 'FSRS' (Free Spaced Repetition Scheduler) analysis with stability, difficulty, retrievability metrics, parameter comparison, and workload predictions. Includes visualization functions, comparative analysis, time-based analytics, card quality assessment, sibling card analysis, interference detection, predictive features, session simulation, and an interactive Shiny dashboard. Academic/exam preparation tools for medical students and board exam preparation. Export capabilities include CSV, Org-mode, Markdown, SuperMemo, Mochi, Obsidian SR, and JSON formats with progress reports.
README.md
ankiR
Comprehensive R toolkit for reading, analyzing, and visualizing Anki flashcard collection databases. 135 functions for collection analysis. For FSRS algorithm implementation, see r-fsrs.
Installation
# From r-universe (recommended)
install.packages("ankiR", repos = "https://cran.r-universe.dev")
# From GitHub
remotes::install_github("chrislongros/ankiR")
# Arch Linux (AUR)
# yay -S r-ankir
Quick Start
library(ankiR)
# One-liner overview
anki_quick_summary()
#> Anki: 5847 cards (4521 mature, 892 young, 434 new) | Due: 127 | Streak: 47 days | Retention: 91.2%
# Detailed report
anki_report()
# Collection health check (0-100 score)
anki_health_check()
Core Functions (Start Here)
| Function | Description |
|---|---|
anki_quick_summary() | One-line collection overview |
anki_report() | Comprehensive statistics |
anki_health_check() | Collection health score (0-100) |
anki_cards() | Read all cards |
anki_notes() | Read all notes |
anki_revlog() | Read review history |
anki_retention_rate() | Calculate retention |
anki_streak() | Current study streak |
anki_plot_heatmap() | Review calendar heatmap |
anki_plot_retention() | Retention over time |
Advanced users: See full function list below for forecasting, burnout detection, A/B testing, gamification, and more.
What's New in 0.6.0
Learning Efficiency Analysis
anki_learning_efficiency() # ROI: retention per time spent
anki_retention_by_type() # Retention by card type (cloze, basic, media)
anki_roi_analysis() # Knowledge half-life extension per study minute
Forgetting Curve Fitting
# Fit your personal forgetting curve and compare to FSRS defaults
curve <- anki_fit_forgetting_curve()
anki_plot_forgetting_curve(curve)
Optimal Review Times
anki_best_review_times() # Find when you learn best
anki_session_analysis() # Analyze study session patterns
anki_simulate_session(30) # Simulate a 30-minute session
Sibling & Interference Analysis
anki_sibling_analysis() # How do sibling cards affect each other?
anki_interference_analysis() # Find cards you confuse with each other
anki_weak_areas() # Tags/decks with lowest retention
Actionable Recommendations
anki_card_recommendations() # Leeches to rewrite, cards to unsuspend
anki_health_check() # Comprehensive health score (0-100)
anki_summary() # One-liner stats
anki_today() # Today's activity breakdown
Academic/Exam Preparation
anki_exam_readiness("2024-06-15") # Will you be ready for your exam?
anki_coverage_analysis() # % complete by topic
anki_study_priorities() # What to study first
anki_study_plan("2024-06-15", hours_per_day = 2)
Enhanced FSRS Analysis
fsrs_compare_parameters() # Compare your FSRS params to defaults
fsrs_memory_states() # Current memory state for all cards
fsrs_decay_distribution() # FSRS-6 per-card decay analysis
New Export Formats
anki_to_obsidian_sr() # Obsidian Spaced Repetition plugin
anki_to_mochi() # Mochi Cards JSON
anki_to_json() # Full collection as JSON
anki_progress_report("html") # Shareable progress report
Enhanced Search
# Advanced search operators
anki_search_enhanced("added:7 rated:3:1") # Added in 7 days, rated Again in 3 days
anki_search_enhanced("prop:lapses>5 is:leech") # High-lapse leeches
anki_search_enhanced("re:^The\\s+") # Regex search
anki_search_enhanced("deck:German OR deck:Spanish")
# Find similar cards with TF-IDF
anki_find_similar(1234567890, method = "tfidf")
Forecasting
# Monte Carlo forecasting (recommended for irregular study habits)
mc <- anki_forecast_monte_carlo(days_ahead = 30, n_sim = 1000)
mc$summary # Daily forecasts with CIs
mc$prob_above(day = 7, threshold = 100) # P(>100 reviews on day 7)
anki_plot_monte_carlo(mc) # Visualize with confidence bands
# Statistical forecasting (ARIMA, Holt-Winters, Seasonal)
anki_forecast_enhanced(method = "holt", days_ahead = 30)
# Compare methods
anki_compare_forecasts(days_ahead = 14)
# Scenario-based projections
anki_workload_projection(days = 30)
Visualizations
anki_plot_heatmap() # Calendar heatmap
anki_plot_retention() # Retention over time
anki_plot_forecast() # Upcoming workload
anki_plot_difficulty() # FSRS difficulty distribution
anki_plot_intervals() # Interval distribution
anki_plot_hours() # Reviews by hour
anki_plot_weekdays() # Reviews by weekday
anki_plot_forgetting_curve() # Personal forgetting curve

Time Series Analysis
anki_ts_retention(by = "week")
anki_ts_intervals(by = "week")
anki_ts_decompose() # Trend + seasonal + residual
anki_ts_anomalies() # Unusual study days
anki_ts_forecast() # Forecast future reviews

Core Features
Search (Anki-like syntax)
anki_search("deck:Medical tag:cardiology")
anki_search("is:due -is:suspended prop:ivl>30")
anki_leeches() # Problem cards
anki_mature() # Cards with ivl >= 21
anki_due() # Due for review
FSRS Data Reading
ankiR reads FSRS data from your Anki collection but does not implement the FSRS algorithm. For algorithm implementation, see fsrs-r-pure.
anki_cards_fsrs() # Get cards with FSRS parameters
fsrs_current_retrievability() # Current memory state from DB
fsrs_forgetting_index() # % below target retention
fsrs_get_parameters() # Read FSRS parameters from collection
fsrs_compare_parameters() # Compare your params to defaults
fsrs_memory_states() # Get memory states for all cards
fsrs_export_reviews() # Export reviews for external optimizer
fsrs_prepare_for_optimizer() # Prepare data for fsrs-r-pure
Comparative Analysis
anki_compare_periods() # This month vs last month
anki_compare_decks() # Side-by-side deck stats
anki_benchmark() # Compare to FSRS averages
Export
anki_to_csv("Medical", "medical.csv")
anki_to_org("Medical", "medical.org")
anki_to_markdown("Medical", "medical.md", format = "obsidian")
anki_to_obsidian_sr("Medical", "medical_sr.md")
anki_to_mochi("Medical", "medical.json")
anki_to_json(output = "collection.json")
anki_progress_report(format = "html")
Interactive Dashboard
anki_dashboard() # Launches Shiny app
Function Reference
| Category | Count | Key Functions |
|---|---|---|
| Core | 8 | anki_cards, anki_notes, anki_decks, anki_revlog |
| Analytics | 12 | anki_report, anki_stats_deck, anki_stats_daily |
| Efficiency | 3 | anki_learning_efficiency, anki_retention_by_type, anki_roi_analysis |
| Forgetting | 2 | anki_fit_forgetting_curve, anki_plot_forgetting_curve |
| Optimal Times | 3 | anki_best_review_times, anki_session_analysis, anki_simulate_session |
| Sibling/Interference | 3 | anki_sibling_analysis, anki_interference_analysis, anki_weak_areas |
| Recommendations | 4 | anki_card_recommendations, anki_health_check, anki_summary, anki_today |
| Academic/Exam | 4 | anki_exam_readiness, anki_coverage_analysis, anki_study_priorities, anki_study_plan |
| Plotting | 8 | anki_plot_heatmap, anki_plot_retention, anki_plot_forecast |
| Time Series | 14 | anki_ts_intervals, anki_ts_decompose, anki_forecast_enhanced |
| Forecasting | 3 | anki_forecast_monte_carlo, anki_plot_monte_carlo, anki_compare_forecasts |
| Burnout/Quality | 2 | anki_burnout_detection, anki_review_quality |
| Cohort/Velocity | 3 | anki_cohort_analysis, anki_learning_velocity, anki_backlog_calculator |
| Gamification | 1 | anki_gamification (XP, levels, achievements) |
| Streak Analytics | 1 | anki_streak_analytics |
| Content Analysis | 1 | anki_card_content |
| A/B Comparison | 2 | anki_ab_comparison, anki_compare_groups |
| Compare | 5 | anki_compare_decks, anki_compare_periods, anki_benchmark |
| Search | 9 | anki_search, anki_search_enhanced, anki_find_similar |
| Quality | 6 | anki_quality_report, anki_similar_cards, anki_tag_analysis |
| FSRS | 11 | fsrs_get_parameters, fsrs_compare_parameters, fsrs_memory_states |
| Media | 5 | anki_media_list, anki_media_unused, anki_media_missing |
| Export | 12 | anki_to_csv, anki_to_obsidian_sr, anki_to_mochi, anki_to_json |
| Utilities | 4 | anki_schema_version, anki_quick_summary, anki_today |
| Dashboard | 1 | anki_dashboard |
| Addon Import | 2 | import_addon_export, analyze_addon_import |
| Total | 137 |
Requirements
- R >= 4.1
- Anki 2.1+ (collection.anki2 format)
- Optional: ggplot2 (plots), shiny (dashboard)
Related Projects
License
MIT.