Who needs Excel? Managing your students qualifications with org-table

Daniel Molina (he/him) - website: https://www.danimolina.net Mastodon: @dmolina@fosstodon.org, dmolina@mailbox.org

Format: 16-min talk; Q&A: ask questions via Etherpad/IRC; we'll e-mail the speaker and post answers on this wiki page after the conference
Status: All done


In this talk I will explain how to use org-table to review and calculate the qualifications of the students (but the used techniques are general). I will show how to use several tables, one for each partial exam, using weights for create the final table. I also use summarize table with org-aggregate for a general view of results, and export the qualification to PDF. All the process with Emacs!

I’ll demonstrate some functionality I use for:

  • Formula for calculate the qualification using weights, that can be easily updated.

  • Summarize tables with org-aggregate (https://github.com/tbanel/orgaggregate).

  • Create a final table making reference to tables in different files.

For several years, I have been using that workflow, and I consider it is very natural with many advantages, like writing the reasons/feedback in the same file with the qualifications, or to be able to use a version control.

About the speaker:

My name is Daniel Molina Cabrera, I am a senior lecturer in Computer Science at the University of Granada, in Spain. I use only Linux in my computer, and after been using Vim many years, last years I mainly use Emacs for editing, as file manager, as email program, ...

In my experience, using org-table is very powerful and useful, but many interesting features are not well-known. Unfortunately, sometimes it is difficult to see examples showing the possibilities, and I think this example could be very informative.



  • Very impressive on your skill over the org-table
  • Thank you for your opinion.
  • Never use aggregate function before, will have a try.
  • Yes, you should, it is clearly a nice package and very useful. Also, it is very well documented at its page: https://github.com/emacsmirror/orgtbl-aggregate
  • org table is awesome, but it lacks the fold, if i don't missing something. long table is bad to view
    • You can put the table under a heading, and you will be able to fold it.
      • very true. Long tables also have performance issues unfortunately. (IME) but still invaluable for any form of data analysis. I've not used the aggregate package used in this talk: must have a look. Don't get me wrong: I will put up with the performance hit of long tables well before I would ever consider one of those other tools!
      • any block can be folded by pressing TAB on its header line
        • I have manage about 200+ students evaluations with multiple columns (20+) in a single org file. It is not fast, but I can't say it is worst than using Excell (or even LibreOffice's Calc). I have separate my students in multiple tables, according to their groups, and that helps.
  • Got an answer on mastodon concerning org tables and formulas: "The documentation is not ideal", which is a little sad.
    • sadly, that's true. Much experimentation is needed.
      • I find the documentation for org tables quite good. It does help if you know Calc as well, however. But, of course, updates to the documentation are always welcome...
  • This talk was really good in showing how to actually make some things though. Going to look up the aggregate package.

Questions and answers

  • Q: Why we splitter the table like this, instead of using a giant master table?
    • A: Actually, some of the tables are only for me, and other are published. This is the main reason to have several tables.
  • Q: Do you have some kind of school administrative system you have to enter the grades into in addition, or is this how you present the grades to the students? Do you use it for your own records only?
    • A: Well, I use the final table (and for each practique) and export it to PDF to put the qualifications, it is not only for my own records. Also, there is a school administrative system that I need to use to publish the final score. In order to make easier to me, I export in the same order and then with the browser I put the qualifications. It is suppose to import from csv (and I could export from my org-table) for it is not always working nicely, it is a pity, because in that case, I could automatically  put the qualifications.
  • Q:
    • A:
  • Q:
    • A:
  • Q:
    • A:


[00:00:01.360] Introduction

Welcome everybody. My name is Daniel Molina and I'm going to give this talk "Who needs Excel? Managing your students' qualifications with Org-table". I'm a professor. I work every day. I have to qualify my students. While most would consider normal in this situation, would be to use Excel or LibreOffice for doing that. However, I think that approaching it from Emacs has several interesting advantages. First, I would like to write the qualification next to the justification, next to the student error, and in the Excel format, it's not comfortable to do that. Actually, I always prefer to write in Emacs for many reasons, as many of you. Also, I love text format because I can compare versions using a control version system like Git and easily change. This is very useful for the revision period in which a student visits me and maybe I can change the qualification for any reason. I also can export the results directly to PDF to publish them in my online campus for the student. I have many tools for doing that. I already knew about Org-table formula. I thought it was very cool and useful to use Emacs for that, and I have actually found a package orgtbl-aggregate that seemed adequate for doing that. Unfortunately, I didn't see a lot of information about how to do that in a painless way. So, I have to learn, training and testing, and then prepare these tools to solve that problem and to help other teachers. Anyway, it could be used not only for teaching but for more contexts.

[00:01:41.960] Demonstration

Well, let's start. First, I have two sections, the comments and the section of the table, or results. I have... The comment for each student is in a different headline. It's very useful to check with a note. I can go directly using your helm or ivy or consult to go directly to the section. So it's very nice. Then I put the comment, right, completely wrong, it answers other questions. I put other comments here that I could send to the student, you can imagine, and then I can put the qualification, the score for each student. The thing with that is, initially, when I started doing that, I put, I don't know, the exception and a qualification with that. Okay, that's one point, this a three, and use a column total with something like that. Okay, that's nice.

[00:03:08.320] Range

But then, when I started getting more and more parts, I considered it more useful to use, to put for each part, which is the maximum qualification, on the range of the qualification. In that case, I'm going to put, the first one is two scores, the second three points, the third one is one point, and the last one, four points. And instead of putting that in that way, I like to put one is completely right, zero is completely wrong, or maybe some intermediate values for that. Of course, I have to change the qualification, the formula, so it's very simple. I only have to put, multiply the values of the second line with that. So, it's very useful for doing that.

[00:04:11.900] More qualifications

Okay, that's the first part, so I can put the comment, I can go to the section, I can create... I'm going to put more qualifications. Now I'm going to put the table. First I'm going to change, rename the column name, because it's easier when there is only one word. And it's very simple to use. You only have to put the name, aggregate, the name of the table, in that case group A, and in another string, the columns. For instance, name, surname, total. And you can see that you can get a lesson list with all the students, but only with the final score to publish them. Okay? Even you can update the name of the column, not in the original table, but in the lesson table using that format. Okay? That is a good option.

[00:05:34.240] Subsets

Now we are going to see how can we use that to make a subset of the students. For instance, imagine, this is me, I'm going to put the bad, I change, now I can update, you can see this, but also I'm going to put a list with the students that have failed the exam. It's simple, because this package has the option :cond. I'm going to put first to see it better, I'm going to put a condition in which we aggregate less than a half, 5, and I have to use a string-to-number total. In that way, I can see that this is the student that has failed the exam, I could use that to make another table, this is the people that passed the exam.

[00:07:08.300] Sorting

Another interesting feature is that I can... the lesson table can be sorted automatically. It's simple. You only have to put this symbol (^), and you can put next to the column you want to use for the sort, and then you can put a if you want to sort alphabetically, in uppercase if you want to reverse the sort, and n if you want to sort numerically. For instance, I can put that from the lesser score to the best score, or here from the best score to the lesser score. And this sort is completely independent to the sort of the original table.

[00:07:51.641] New table

Now I'm going to do another different thing, we are going to put a new table, I'm going to put a new table in which I'm going to put the number of passed students, failed students and the ratio of students. It's simple. I'm going to put the pass, in that case, as column, I can put the count, of course, I can put the count, the number of students that have passed, so I'm going to put in that way, ok? I'm going to put pass, count, failed, ratio. You can see, ok? But this only the count, you are going to put the number wrong. So, it's true, but you can actually put formula here. For instance, you can say, I know that I have 3 students, so the number of failed is 3 minus the passed student. And also, I can put the formula, is the people, the students that passed, divide into the number total of students, ok? Let's go to put that in that way, is the people that passed, it is better in that way, and also I can put directly the number of, the ratio of students. So, in that way, I can have a table with the students that passed, the students that failed and the ratio of people that passed.

[00:10:01.280] Statistics

Sometimes this type of qualification will be useful for me, to see how much has been the sound, how much good has been the exercise. Now, I'm going to put a new table. This new table is going to go some statistics, statistics_score, begin: aggregate :table "final". In this case, I'm going to use not the original table, but a final, I'm going to put final_group, final_p1, final_p2, ok? And as :cols, I'm going to put directly how many results I have, I put number, I'm going to put also the mean. You can see that mean total is not working because I'm using this table and I renamed, the column name was renamed, so it's mean(Score), mean, and then the score. You can obtain stdiv -- sdev, sorry, there was an error about that, and two decimal, and that is another interesting score.

[00:12:17.800] Combining

Now, I'm going to finish showing how we can use. To finish it, we are going to see how we can combine several tables or even an aggregated table in a new table. For instance, you can have a table for the practice 1, you can have a table for the practice 2, so I'm going to do that. I'm going to move this table. You can copy or remove, doesn't matter the order, I'm going to put this to identify the result of practice 2, Org create an ID (org-id-get-create), then we have a previous result, and I have a final table. The final table could be complicated, but it's not so much complicated, it's only that, I'm going to put something that the formula wants. The formula is to make an org-lookup-first of the second name, considering that it's unique, remote of the surname, and let's say another remote of the $3 element, ok, that's an error because I don't put yet the ID, so I'm going to copy -- mark and copy -- and paste the unique ID generated, I'm going to put that... I think there is missing one. Finally. Okay, that's right. So imagine that I change something here, for instance, I put... I change that, actually, this is changed also, and this is changed. This is a good way to divide the classification in several files, one for the practice 1, one for the practice 2, and one final practice that I can finally export in a final table. Of course you can make it a lot more pretty, but this is all I want to show you. I hope with this talk you have learned a lot more about Org formula, [orgtbl-aggregate] package, and how you can use all this techniques to improve your qualification of a student, or for whatever you want.

Captioner: danielmolina

Questions or comments? Please e-mail dmolina@mailbox.org