Redmine is a great tool to organize tasks. It has many built in functions like spent time report but also there are many limitations. Thanks to the package redmineR we can access to Redmine data and use the power of R to analyze and visualize it.
In this little introductory tutorial I will focus only on spent time data but I’d like to highlight that there are many more analytical potential on the redmineR package. Check the documentation for more details (help(package = “redmineR”)).
First of all we have to connect to our Redmine database with the API key. In this example I use a dummy Redmine site with a random data which has been prepared for this tutorial. My code is fully reproducible so the URL and the API key is valid! (Just please do not delete it :) )
Basic data preparation:
Once we connect I just download all the spent time data which is available on the server and store it as an R data frame object.
As we can see the are lists on the data frame which wont be so optimal for us later when need to transform the data a little bit. So I unlist the column ‘user’ to get access to usernames:
I filter the data to a specific week. When data manipulation is required I use the functions of package dplyr. I pick the days between ‘2018-07-09’ and ‘2018-07-13’.
Analysis of users daily performance:
At first I group the data by users and days and after it I just summarize how many working hours the users did per day.
I assume that the expected working hours per day is 8. If I divide the actual worked hours by the expected working hours and I exact 1 out of it finally the result can be a type of performance indicator for the managers.
With the package ggplot2 we can visualize the result:
According to our chart the workload is not the same between days. For example Jenny did an overtime on Monday but in the next few days she only worked 4 hours.
Analysis of users weekly performance:
With the analogy of the previous example we can also calculate the weekly performance. We just don’t need the ‘spent on’ column as a grouping variable anymore.
Now just determine a tolerance level which indicates us the “outliers”. In this example I use +10% as a maximum and -10% as a minimum level. So if somebody works more or less than 10 percent as we expect we mark him or her.
As we see only James performed as we expect. Agnes outperformed a little bit so there is a danger of born-out or overload. In the other hand Jenny and Tom worked less hours than the expectation maybe the task allocation between our collages is not proper.
This tutorial helped us to prove that there is an analytical potential on the package redmineR so I highly recommend to dig deeper into it.