[This article was first published on Rstats – OUseful.Info, the blog…, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
A bit more tinkering with F1 data from the ergast db, this time trying to generating trivia / facts around races.
The facts are identified using SQL queries:
#starts for a team q=paste0('SELECT d.code, COUNT(code) AS startsforteam, c.name AS name FROM drivers d JOIN races r JOIN results rs JOIN constructors c WHERE c.constructorId=rs.constructorId AND d.driverId=rs.driverId AND r.raceId=rs.raceId AND d.code IN (',driversThisYear_str,') ',upto,' GROUP BY d.code, c.name HAVING (startsforteam+1) % 50 = 0') startsTeammod50=dbGetQuery(ergastdb, q) #looking for poles to date modulo 5 q=paste0('SELECT d.code, COUNT(code) AS poles FROM drivers d JOIN qualifying q JOIN races r WHERE r.raceId=q.raceId AND d.code IN (',driversThisYear_str,') AND d.driverId=q.driverId AND q.position=1',upto,' GROUP BY code HAVING poles>1 AND (poles+1) % 5 = 0') lookingpolesmod5=dbGetQuery(ergastdb, q)
Some of the queries also embed query fragments, which I intend to develop further…
upto=paste0(' AND (year<',year,' OR (year=',year,' AND round<',round,')) ')
I'm using knitr to generate Github flavoured markdown (gfm) from my Rmd docs – here’s part of the header:
--- output: md_document: variant: gfm ---
The following recipe then takes results from the trivia queries and spiels the output:
if (nrow(startsTeammod50)>0) { for (row in 1:nrow(startsTeammod50)) { text = '- `r startsTeammod50[row, "code"]` is looking for their `r toOrdinal(startsTeammod50[row, "startsforteam"]+1)` start for `r startsTeammod50[row, "name"]`' cat(paste0(knit_child(text=text,quiet=TRUE),'\n')) } } if (nrow(lookingpolesmod5)>0) { for (row in 1:nrow(lookingpolesmod5)) { text = '- `r lookingpolesmod5[row, "code"]` is looking for their `r toOrdinal(lookingpolesmod5[row, "poles"]+1)` ever pole position' cat(paste0(knit_child(text=text,quiet=TRUE),'\n')) } }
We then get outputs of the form:
- BOT is looking for their 100th race start
- HAM is looking for their 100th start for Mercedes
See more example outputs here: Bahrain F1 2018 – Race Trivia.
This is another recipe I need to work up a little further and add to Wrangling F1 Data With R.
To leave a comment for the author, please follow the link and comment on their blog: Rstats – OUseful.Info, the blog….
R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.