top of page
Foto van schrijverRené Meijboom

Een korte intro in data-analyse met R

Bijgewerkt op: 9 nov 2023


In deze blog sta ik stil bij een recent voorbeeld van innovatie. Ik beschrijf hoe ik R heb ingezet bij het analyseren van loadtest-resultaten, omdat een andere analyse tool zoals die van MicroFocus LoadRunner / Performance Center niet voor handen was. Dit was het geval in een klantsituatie waarbij teams in staat zijn gesteld zelf al zoveel en zo vroeg mogelijk te performancetesten, met tools als bijvoorbeeld JMeter. Zo kunnen teams meer autonoom opereren en ontstaat er al in een eerder stadium een eerste beeld over de performance van een applicatie.


Wanneer er grote hoeveelheden data zijn om te analyseren, of wanneer er simpelweg een aantal CSV-bestanden met gegevens verwerkt en weergegeven moeten worden in een tabel of grafiek, wordt daar vaak Excel voor gebruikt. Zolang je eenvoudige gegevens verwerkt, is dit best een goede oplossing. Maar in de praktijk moet je vaak meerdere bestanden combineren en wil je diverse berekeningen op de ingelezen gegevens loslaten. Wij hebben in het gebruik van R een goede oplossing gevonden.


R is een programmeertaal en omgeving voor statistische analyse en grafische representatie van gegevens. R is de open-source versie van S. Meer informatie is te vinden op de website van het R-Project (www.r-project.org). R-Studio is een populaire IDE voor R en is zowel als open source en als commerciële editie beschikbaar. RStudio draait op Windows, Mac en Linux.


In het volgende voorbeeld is er sprake van een drietal bestanden die gecorreleerd moeten worden:

  1. create.dat – dit bestand bevat items die op een bepaald tijdstip zijn gecreëerd.

  2. queue.dat – dit bestand bevat meerdere tijdstippen per items waarop deze op een queue geplaatst zijn.

  3. processed.dat – dit bestand bevat meerdere statussen en tijdstippen per verwerkt item van de queue.

In onderstaand plaatje worden een paar regels van de verschillende bestanden weergegeven.

Hoewel het mogelijk is om dit in Excel te correleren en weer te geven in een grafiek, is dat geen eenvoudige klus. Met behulp van R kan dit veel sneller een eenvoudiger, zeker met grote bestanden. Er zijn veel packages beschikbaar voor R die als hulpmiddel kunnen dienen bij data manipulatie of weergeven van grafieken en tabellen. Hieronder zie je de grafiek die met R gemaakt is waarin het aantal events per minuut zijn weergegeven.

De bijbehorende tabel toont de gegevens zoals die gebruikt zijn voor het creëren van bovenstaande grafiek.

Het is verder mogelijk om te filteren en sorteren. In onderstaande tabel is gefilterd op id 313-1563955 en gesorteerd op id. Op deze manier is het eenvoudig om alle events per id terug te vinden.

De code die nodig is om dit alles te maken kun je hieronder terugvinden. Zelfs als je nog niet bekend bent met de taal R is het al goed mogelijk om deze code te lezen. Het is zeker de moeite waard om je in R te verdiepen, het is een krachtig hulpmiddel voor data-analyse.

---
title: "Data analyse met R"
author: "Rene Meijboom"
date: "26 februari 2019"
output: html_document
---

```{r demo, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
options(warn = -1)
library(formattable)
library(DT)
library(plotly)

create <- read.csv("create.dat",
               header = FALSE,
               stringsAsFactors=FALSE,
               sep = ",")
names(create)<- c("name","id","datetime")
create$datetime <- as.POSIXct(strptime(create$datetime, "%Y-%m-%dT%H:%M:%S"))
create["event"] <- c("created")

publish <- read.csv("queue.dat",
                   header = FALSE,
                   stringsAsFactors=FALSE,
                   sep = ",")
names(publish)<- c("id","datetime")
publish$datetime <- as.POSIXct(strptime(publish$datetime, "%Y-%m-%dT%H:%M:%S")) 
publish["event"] <- c("on queue")

processed <- read.csv("processed.dat",
                   header = FALSE,
                   stringsAsFactors=FALSE,
                   sep = ",")
names(processed)<- c("id","status","datetime")
processed$datetime <- as.POSIXct(strptime(processed$datetime, "%Y-%m-%dT%H:%M:%S")) 
processed["event"] <- c("processed")

total <- rbind(subset(processed,select = c("id","datetime","event")),rbind(subset(create,select = c("id","datetime","event")),publish))

aggr <- aggregate(id~datetime+event, FUN=length, data=total)

dfgran <- aggregate(id~event+strftime(cut(aggr$datetime, "60 sec"), "%H:%M:%S"), FUN=length, data=aggr)
names(dfgran)<- c("event","time","count")

plot_ly(dfgran, x=~dfgran$time, y=~dfgran$count, color=dfgran$event, type = 'scatter', mode = 'lines') %>%
layout(title = 'Events per minute',
      xaxis = list(title = 'Elapsed time'),
      yaxis = list(title = 'Number of items'),
      margin = list(l = 50,
  r = 50,
  b = 100,
  t = 100,
  pad = 4))

as.datatable(formattable(total))
```
 

Conclusie is wat mij betreft dat R je prima mogelijkheden geeft om tot complexe data analyses te komen. Al dan niet in samenhang met een geautomatiseerd performance test framework. Heb jij ervaring met R, of juist met een ander, vergelijkbaar tool? We zien jouw ervaringen graag als reactie tegemoet!


De in deze blog besproken 'data-analyse met R' is een voorbeeld van één van de innovaties die PerformanceArchitecten samen met haar klanten ontwikkeld. Innovatie is iets waar de omstandigheden steeds vaker om vragen gezien de snelle ontwikkeling binnen het vakgebied. Al deze innovaties komen samen in de aanpak Quality Engineering (QE) van PerformanceArchitecten. QE ondersteunt klanten met het opzetten van een integrale kwaliteitsaanpak in een DevOps en CI/CD omgeving. Het draagt bij aan een sneller ontwikkelproces met een betere kwaliteit. Zowel op functioneel gebied als op non-functioneel gebied. Mocht je hier vragen over hebben of mocht je hier gewoon eens over willen sparren, zien we graag je reactie!

Recente blogposts

Alles weergeven

Comments


bottom of page