Tagarchief: Grafiek

Voetbal en gegevensvalidatie

Hoewel de titel van dit artikel misschien anders doet vermoeden (het gaat dus NIET over het checken van persoonsbewijzen bij een voetbalwedstrijd), gaan we het hebben over het valideren van de invoer van gegevens in een cel in Excel.

De aanleiding hiervoor was een discussie op een internet-forum over “Lege velden in keuzelijst met invoervak“.
Al snel kwam daar de opmerking langs, dat het onderliggende probleem waarschijnlijk makkelijker en beter met gegevensvalidatie kon worden opgelost; dan was er ook geen VBA nodig.
Het probleem in het kort: de toegestane invoer in een cel is afhankelijk van de keuze, die in een andere cel is gemaakt.

voetbalcompetitieOm de daar geschetste oplossing in de praktijk te kunnen laten zien, heb ik de stand van de twee Nederlandse profvoetbalcompetities genomen (Bron: www.voetbaluitslagen.nl).
NB Het valt me nu pas op hoe goed de stad Eindhoven het doet!

Stand voetbalcompetities

Dus eerst maar eens een voorbeeld opzetten (zie Voorbeeldbestand):voetbalcompetitie

  1. eerst de standen van de twee competities onder elkaar gezet, gesorteerd op clubnaam, waarbij de kolom met de punten (Pnt.) voor ons het belangrijkste is
  2. dan een schema opzetten van de beste 3 per competitie (zie hierboven).
    Daarbij maak ik gebruik van de functie Grootste:
    =GROOTSTE(H15:H32;1)
    Dit levert het maximum op van de Eredivisiepunten; in het Voorbeeldbestand, tabblad CompOvz1, heb ik deze reeks een naam gegeven, ErePnt, zodat de bedoeling van de formule duidelijker is.
    Door de 1 te veranderen in 2 vinden we het één na hoogste puntentotaal enz.
    Via Index en Vergelijken (zie het artikel over Verticaal zoeken) vinden we de bijbehorende clubs.
    NB zoals uit de stand hierboven mag blijken gaat het bij een gelijk aantal punten niet altijd goed; er wordt geen rekening gehouden met doelsaldo.
  3. dan nog wat Voorwaardelijke opmaak ‘strooien’ over het overzicht (zie mijn vorige blog) en we krijgen wat beter inzicht in de voetbal-verhoudingen in Nederland.
    NB we zien nu wel dat AZ en Feyenoord een gelijk aantal punten hebben
  4. voetbalcompetitiede verhoudingen tussen de clubs kunnen ook grafisch worden weergegeven.
    Op de x-as staan de gegevens van de kolommen B en C; Excel zorgt zelf voor een duidelijke lay-out wat betreft de indeling van de twee competities.
    De titel is dynamisch, wat in dit geval inhoudt dat deze verandert wanneer de datum in cel B2 wordt gewijzigd:
    * maak een willekeurig titel aan,
    * kvoetbalcompetitielik ergens in de titel,
    * kies de formulebalk en tik een verwijzing naar de cel met de gewenste titel-tekst in, inclusief de naam van het tabblad en een !
    In het voorbeeld staat de titel-tekst in cel N27, waar met behulp van de functie Teken een scheiding tussen de twee elementen van de titel is gemaakt.

Combinatie van grafieken

De grafiek kan wel wat duidelijker: een betere scheiding tussen de twee competities, wie staan bovenaan, hoe staat mijn favoriete club er voor?voetbalcompetitie

  1. in het Voorbeeldbestand, op het tabblad CompOvz2, is het onderscheid tussen de competities geregeld door de behaalde punten in 2 verschillende kolommen te plaatsen, een extra kolomgrafiek toe te voegen, de overlap van de grafieken op 100% te zetten en de kleuren aan te passen
  2. daarna is er een label toegevoegd aan de nummers 1 tot en met 3: achter iedere club (in kolom F) staat een formule, die kijkt of de club bij de eerste 3 hoort:
    =ALS(D15=Ere_1;1;ALS(D15=Ere_2;2;ALS(D15=Ere_3;3;””)))
    Ere_1 is de naam van de cel, die het aantal punten van de aanvoerder van de ranglijst bevat etc.
    Het bereik F15:F52 is als een nieuwe grafiek toegevoegd; bij Opmaak is gekozen voor Geen opvulling maar wel zijn Gegevenslabels toegevoegd
  3. om onze favoriete club er te laten uitspringen, voegen we een nieuwe grafiek toe, die alleen de punten van deze club bevat; zie kolom G:
    =ALS(C15=Voorkeur;D15+E15;””)
    Geef deze grafiek een afwijkende kleur.

Gegevensvalidatie

In het vorige voorbeeld staat de naam van de favoriete club in cel J4, die de naam Voorkeur heeft gekregen.
De (groene) kolom in de grafiek bij de favoriet wordt natuurlijk alleen maar zichtbaar, wanneer die cel een bestaande clubnaam bevat. In Excel dwingen we dat af via Gegevensvalidatie.

  1. voetbalcompetitieselecteer cel J4 in het tabblad CompOvz2 van het Voorbeeldbestand
  2. kies binnen de menutab Gegevens in het blok Hulpmiddelen voor gegevens de optie Gegevensvalidatie
  3. er opent zich een keuzescherm:
    voetbalcompetitie
  4. bij Toestaan kiezen we de optie Lijst
  5. en als Bron geven we het bereik op, waar alle clubnamen staan; in het voorbeeld heeft dat bereik de naam Teams.
    LET OP: denk aan het =-teken

voetbalcompetitieSelecteer J4 en tik een clubnaam in; komt deze niet (precies) in de clublijst voor dan krijgt u een foutmelding. Het is daarom handiger om het ‘vinkje’ achter de cel te gebruiken, zodat u de keuzelijst kunt gebruiken.

‘Meervoudige’ keuzelijst

In het vorige voorbeeld bestaat de lijst, waaruit een favoriete club gekozen kan worden, uit 38 teams.
Via scrollen in de zijbalk van de keuzelijst is de gewenste club nog vrij snel te vinden. Bij langere lijsten is dat vaak onhandig.

Als voorbeeld zou het in dit geval makkelijker zijn om eerst een competitie te kiezen (Eredivisie of Jupiler) en daarna pas een club uit de gekozen competitie.voetbalcompetitie
Dat is wat ik bedoel met ‘meervoudige’ keuzelijst: de inhoud van de tweede wordt bepaald door de keuze in de eerste.

Op de volgende manier is dit in te regelen (zie het Voorbeeldbestand, tabblad CompOvz3):

  1. voor de competitie-keuze voegen we weer een gegevensvalidatie toe (aan cel J3): kies binnen de menutab Gegevens in het blok Hulpmiddelen voor gegevens de optie Gegevensvalidatie
  2. bij Toestaan kiezen we opnieuw de optie Lijst
  3. voetbalcompetitiebij Bron wordt meestal een celbereik van toegestane elementen opgegeven.
    In dit geval hebben we maar 2 mogelijkheden: Eredivisie of Jupiler. De namen van de betreffende clubs liggen vast in de celbereiken EreTeams, respectievelijk JupTeams. Deze 2 namen geven we als bron van de lijst op, gescheiden door een ; (punt-komma).
  4. aan cel J4 geven we weer een gegevensvalidatie.
    Bij Toestaan kiezen we weer Lijst; bij Bron zijn we geneigd om de cel J3 mee te geven, maar helaas: Excel zal dan alleen de letterlijke tekst uit die cel aan de keuzelijst meegeven (dus EreTeams of JupTeams).
    Nee, bij Bron moeten we invullen
    =INDIRECT(J3)
    De functie Indirect zorgt er voor, dat niet de inhoud van J3 zelf wordt gebruikt, maar de inhoud van het bereik waar J3 naar verwijst (EreTeams of JupTeams dus).

GPX? XML! dus Excel

StravaVorige week heb ik een fietstocht georganiseerd voor een groep collega’s; mooi weer, wat heuvels, prachtige omgeving, gezellige mensen: wat wil een mens nog meer?
Nou, wat minder discussie over het aantal gefietste kilometers en de geklommen hoogtemeters zou prettig zijn!

Zeker nu steeds meer fietsers gebruik maken van een GPS (al dan niet op de smartphone) en de kilometers op Strava worden gezet, eindigt een fietstocht vaak in een langdurige twist over de exacte cijfers van de geleverde prestatie.
Trouwens niet alleen bij het fietsen gebeurt dit; ik ken een fanatieke groep wandelaars waar na een tocht flink wordt overlegd welk aantal kilometers aan het thuisfront kan worden gemeld (het hoogste natuurlijk!).

GPX

Om te onderzoeken waar de verschillen door worden veroorzaakt, kwam ik er al snel achter, dat dit inherent is aan het gebruik van een GPS. De verbinding met de satellieten is niet altijd optimaal, waardoor verstoringen kunnen optreden. Zeker wanneer het gaat over het meten van de hoogte, laat menige GPS nog wel eens een steek vallen. Of ineens is de ontvangst beter en geeft de GPS een stijging (of daling) aan terwijl je stil staat!

Om de resultaten beter te kunnen vergelijken heb ik de tocht, die ik op Strava had gezet, geëxporteerd naar een GPX-bestand. Dit type bestand wordt bij navigatie-software meestal als standaard voor uitwisseling gebruikt. Soms is een dergelijk bestand direct van de GPS of smartphone te downloaden; anders kun je het omzetten met behulp van een programma als bijvoorbeeld Basecamp.

Nader onderzoek (met het alom gewaardeerde hulpmiddel Kladblok) leverde op, dat het eigenlijk een XML-bestand is.

XML

XML begint de Haarlemmermeerolie voor bestandsuitwisseling te worden. Deze standaard wordt door steeds meer pakketten ondersteund, waaronder zeker ook al jaren door Excel!

Waarom ik als titel voor deze blog “GPX? XML! dus Excel” heb gebruikt mag nu duidelijk zijn.

GPX importeren in Excel

Het voert te ver om hier alles rond XML uit de doeken te doen, dus ik geef een verkorte handleiding hoe de GPX-file in te lezen in Excel:

  1. Open Excel, zorg dat er geen bestand geopend is
  2. download een GPX-bestand (van Strava, GPS, internet)
  3. sleep het GPX-bestand naar het Excel-symbool op de werkbalk, Excel klapt dan open, sleep het GPX-bestand nu in Excel (de cursor krijgt dan een plusje) en laat de muis-button los
  4. Excel geeft een foutmelding, maar die negeren we gewoon, dus op JXMLa klikken
  5. in het volgende dialoogscherm kies je de eerste optie (Als een XML-tabel)
  6. 2 keer waarschuwingen negeren door OK te klikken en daar is onze route!

XML2

Excel maakt er direct een zogenaamde tabel van; in latere verwijzingen zie je de naam Tabel2 terugkomen. Binnenkort toch eens wat vertellen over de (nieuwe) mogelijkheden van tabellen!

Niet alle kolommen zijn voor ons interessant, maar E en F leveren de coördinaten (lat=latitude/breedtegraad, lon=longitude/lengtegraad), G de hoogte (ele=elevation), H een samengepakte vorm van de dag en het bijbehorende tijdstip en I de temperatuur op dat moment.

GPX-analyse

We gaan dit bestandje nu verder analyseren: download het Voorbeeldbestand.

In het eerste werkblad staan de gegevens van Strava. Ik heb een tweede werkblad aangemaakt (Berek), waarin we diverse berekende kolommen zien:

  1. in kolom A ‘knippen’ we het tijdstipXML3 los van de datum door een DEEL er van te pakken. Aangezien dit dan een tekst is, maken we er via TIJDWAARDE een echte tijd van.
  2. in B3 staat de formule
    =AFRONDEN(6370973,27862*((2*BOOGSIN(WORTEL((SIN((RADIALEN(Strava!E2)-RADIALEN(Strava!E3))/2)^2)+COS(RADIALEN(Strava!E2))*COS(RADIALEN(Strava!E3))*(SIN((RADIALEN(Strava!F2)-RADIALEN(Strava!F3))/2)^2)))));0)
    Het voert te ver om deze door te spitten, maar uit de coördinaten van het tijdstip uit regel 3 en die van de vorige regel, wordt de afstand daartussen bepaald (in meters).
  3. in C gaan we die meters gecumuleerd volgen (als kilometers)
  4. D bevat de verstreken tijd tussen twee metingen en E de gecumuleerde tijd
  5. en in F staat de snelheid: B gedeeld door D.
    Wel even opletten: we willen de snelheid in km/uur, dus de getallen in B moeten gedeeld worden door 1.000; aangezien in Excel een tijd intern als fractie van een dag wordt vastgelegd (dus 6 uur wordt in Excel 0,25 etc) vermenigvuldigen we de getallen in D nog met 24 om er uren van te maken.

Bestudering van de resultaten verklaart al wat van de vreemde snelheidsgrafieken in Strava en andere software: tussen veel metingen zitten soms maar enkele seconden en slechts luttele meters (toch eens harder gaan fietsen!). Aangezien we hier dan met relatief grote afrondingen zitten, kan het resultaat (de snelheid) ook behoorlijk variëren.

Om dit effect te verkleinen heb ik nog wat kolommen toegevoegd, waarin ik de snelheid niet tussen 2 opeenvolgende metingen bepaal, maar de intervallen vergroot. Hierdoor wordt het afrondingsprobleem voor een gedeelte uitgemiddeld.

Google Maps

Om makkelijk te kunnen analyseren waarom de snelheid op sommige stukken zo hoog (of laag) is heb ik in kolom K nog een hyperlink naar Google-maps toegevoegd:
=HYPERLINK(“http://maps.google.nl/maps?q=”&SUBSTITUEREN(Tabel2[@lat];”,”;”.”)&”,”&SUBSTITUEREN(Tabel2[@lon];”,”;”.”))

Meestal zoek je in Google-maps via een plaatsnaam en/of adres, maar je kunt ook coördinaten opgeven.
Aangezien Google een punt als decimaal scheidingsteken verwacht (de 2 coördinaten worden door een komma gescheiden), voeren we op de lat en lon een substitutie uit. Het resultaat kan er dan als volgend uitzien:
http://maps.google.nl/maps?q=50.867841,5.99487

Grafieken

XML-grafiekOmdat zoveel detail-informatie zoals weergegeven in het werkblad Berek zich uitstekend leent om grafisch weer te geven, heb ik een werkblad Grafieken toegevoegd.

De bovenste grafiek komt uit Strava; in de tweede is duidelijk te zien, dat de berekende snelheid (met een interval van 4 metingen) heel goed aansluit bij Strava!

In de derde grafiek zijn de hoogte en de snelheid niet tegen de afstand maar tegen de tijd uitgezet. XML5
Dan valt direct een vreemd stuk op in de grafiek. Bij de afstand-grafiek liep de lijn door; bij de tijd zit een onderbreking??

Hier is goed te zien hoe slecht de (mijn?) GPS met hoogtes omgaat: na de pauze waren we echt niet gestegen (alleen koffie gedronken!).

LET OP: bij het maken van dergelijke grafieken (waar de gegevens voor de x-as niet gelijkmatig zijn verdeeld; de ene keer 1 sec, dan weer 5 sec), kun je geen gewone Lijn-grafiek nemen; kies dan Spreiding als grafiektype.