Visual progress analysis


As far as I am aware there is only the text-based statistics page in Pleco to see progress of flashcards. Is that right?
I am someone who really likes to look at the statistics to monitor my progress. Is there any way to visually analyze the
progress though?

Recently, I have been working on a little visualization tool using the flashcard backups (that I kept for some reason). But the
problem is that the backups only give me a snapshot once every week and I have to merge them all together to get something
like a history.

Would it be possible to actually save the history of a flashcard? There is already the right/wrong history, but the entries don't
have timestamps. Could you add timestamps to the right/wrong history and also add the score of the flashcards after every review?

Furthermore, I was wondering if you ever considered open sourcing parts of Pleco to push the development forward. After all, I don't
want to export my flashcard backups to another app or to my computer to analyze my progress. A visual analysis tool in Pleco would
be a lot more convenient.


Staff member
We're saving history in 4.0, we hadn't done it before because when we last did a major redesign of our flashcard system the amount of space this would take up was actually a significant problem :)

(we're also adding a highly customizable statistics screen - with graphs - but if you don't end up finding that that meets your needs you should have all of the data you need to do your own report in our database file)


Staff member
Not at the moment; I'd suggest you disable them entirely and set up reminders in your calendar app instead, on whatever frequency you like.


I have written a little tool that works for my specific use case. If anybody is interested, has collected some flashcard backups, and has a little bit of a programming background, head over to my Github and give it a try.

It looks something like this.


I've done this query in DB Browser for SQLite. You can plot query results in that program, under View -> Plot. Just check what column you want for X and what column(s) you want for Y. My main scorefile happens to be 2, hence pleco_flash_scores_2:

with correct as (select * from pleco_flash_scores_2 where correct > 1),
individual as
(select strftime('%Y-%W', date(firstreviewedtime,'unixepoch')) timeslice, count(*) as items from correct
group by timeslice
order by timeslice)
select a.timeslice, a.items, sum(b.items) as cum_items from individual a, individual b
where a.timeslice >= b.timeslice
group by a.timeslice
It only uses the most recent backup and just treats the first reviewed time as the time learned, which is approximately true. If it's not, it's basically the same graph shifted over by a week.

If you want to extend that query to do characters instead of just cards, this other query might inspire you (yes, it only covers up to 2-character cards):

with correct as (select * from pleco_flash_scores_2 where correct > 1),
     correct_hw as (select hw from pleco_flash_cards join correct on id=card)
select    (select date(max(lastreviewedtime),'unixepoch') from correct) as date,
        (select count(*) from correct) as 'items',
        count(*) as hanzi_known from
            (select substr(hw, 0, instr(hw || '@', '@')) as hanzi from correct_hw
select substr(hw, instr(hw || '@', '@') + 1, 1) as hanzi from correct_hw where hanzi <> '')