Spreadsheets en valkuilen

Stand-up comedian, wiskundige en schrijver Matt Parker heeft geweldig grappige filmpjes en boeken gemaakt over een veelheid aan wiskundige onderwerpen. Een van die onderwerpen is spreadsheets. Hier ga je wat meer lezen over enkele verrassende of verwarrende zaken die je kunt tegenkomen als je met een spreadsheet werkt. Het is ontleend aan het boek Humble Pi, a Comedy of Maths Errors. Dit boek bevat overigens nog veel meer lezenswaardigs!

Voorkennis: basale bekendheid met Excel, binaire getallen, hexadecimale getallen.


Inhoud:

Voorloopnullen

Spreadsheets zijn superhandig om snel en overzichtelijk gegevens op te slaan en ermee te rekenen. Maar er kan zoveel misgaan. Om te beginnen: als iets eruitziet als een getal, en klinkt als een getal betekent dat nog niet dat het een getal is. Een perfect voorbeeld: telefoonnummers. Heb je ooit twee telefoonnummers opgeteld? Of de priemfactoren van je telefoonnummer gevonden?
De vuistregel zou moeten zijn: als je er niet mee rekent, sla het dan niet op als getal.
In Nederland begint elk telefoonnummer met een 0.

Opdracht

Open Excel en voer het mobiele telefoonnummer 0612345678 in in een cel.

Je ziet: de 0 verdwijnt!
Matt Parker schrijft: ‘Ik heb een persoonlijke ervaring met verdwijnende voorloop-nullen. Enige jaren geleden had ik een credit card waarvan de security-code op de achterkant 097 was (belangrijke woorden in deze zin zijn: ‘enige jaren geleden’, ik ga hier niet intrappen). Menige website verwijderde de voorloop-nul zodra ik de code invoerde, en gaf aan dat de code incorrect was.’


Wetenschappelijke notatie

Internationale telefoonnummers bevatten meer cijfers dan 10. Dit kan soms tot onverwachte effecten leiden in Excel.

Opdracht

Voer een willekeurig telefoonnummer in met een voorloop-nul en dan nog 12 cijfers.

Hier gaat Excel over op de wetenschappelijke notatie! Heel nuttig om relevante informatie over de orde van grootte van een getal overzichtelijk te presenteren. Niet handig als alle cijfers betekenis hebben, zoals bij een telefoonnummer.
Eigenlijk kunnen we beter spreken van telefooncijfers: het zijn geen getallen, en ook geen nummer in de betekenis van logische nummering. Als je twijfelt of iets een getal is, bedenk dan of het zinvol is om er de helft van te nemen. Als je iemand vraagt om de helft van zijn telefoonnummer, dan zal deze misschien de eerste helft van de cijfers noemen. Als het antwoord op de vraag naar de helft niet de deling is maar de opsplitsing, dan is het dus geen getal.

Opdracht

Bedenk nog meer soorten cijferreeksen die wel betekenis hebben maar geen getal zijn.
Hint

Gelukkig heeft Excel wel een oplossing voor dit probleem: bij de celeigenschappen kun je aangeven dat de inhoud van de cel gezien moet worden als tekst, en niet als getal. Je moet er wel zelf aan denken!

Opdracht

Selecteer een aantal cellen in Excel, en klik op de rechtermuisknop: Celeigenschappen
Selecteer Tekst
Voer vervolgens in de cellen enkele telefoonnummers en bankrekeningnummers in.
Je ziet dat de uitlijning van de cel nu ook standaard links staat. Bij getallen is de standaarduitlijning rechts.


Hexadecimaal

Excel zet automatisch een cijferreeks om in een getal, ook als dat niet de bedoeling is. Maar ook andersom: soms herkent Excel een tekenreeks niet als getal, terwijl die reeks wel degelijk een getal voorstelt. Dit komt vooral voor bij getallen die niet in ons ‘gewone’ tientallige stelsel geschreven zijn, maar bijvoorbeeld in het zestientallig stelsel, ofwel het hexadecimale stelsel.
In het tientallige stelsel heb je de cijfers 0 tot en met 9. In het hexadecimale stelsel heb je zestien ‘cijfers’ nodig om een getal weer te geven.
Bijvoorbeeld: het tientallige getal 19527 ziet er in het zestientallig stelsel uit als 4C47. De C ziet er uit als een letter, maar het is hier een cijfer: het is het cijfer dat de waarde twaalf representeert. Net zoals het cijfer 7 dat, tja, de waarde zeven representeert. Toen de wiskundigen door hun cijfers heen waren, bedachten ze dat letters een perfecte bron voor meer symbolen waren, en zelfs al een logische volgorde hebben. Dus ze hebben de letters ingezet als cijfers, tot grote verwarring van velen, inclusief Excel.
Als je een letter als cijfer in Excel invoert, neemt het programma aan dat het hier om een woord gaat, en niet om een getal.
Het probleem is dat hexadecimale getallen niet alleen een speeltje van wiskundigen zijn. Als computers gek zijn op binaire getallen, dan is hun tweede liefde de hexadecimale getallen. Het is echt simpel om te switchen tussen binair en hexadecimaal. Daarom wordt het hexadecimale stelsel vaak gebruikt om binaire getalweergave wat mensvriendelijker te maken. Het hexadecimale getal 4C47 is hetzelfde getal als het binaire 100110001000111 maar is veel eenvoudiger om te lezen. Hexadecimaal is binair in vermomming.

Opdracht

Excel kan wel degelijk omgaan met hexadecimale getallen. Bijvoorbeeld met de functie HEX.N.DEC() die een hexadecimaal getal omzet in een decimaal getal. Bijvoorbeeld:
= HEX.N.DEC(“4C47”) in een cel intypen levert als resultaat 19527 (of 19527.00, afhankelijk van de opmaak van de cel)
Probeer het eens uit. Bedenk dat je een cel waarin je een functie zet altijd begint met een =

Het jammere is wel, dat wanneer je Excel vraag om een decimaal getal om te zetten in hexadecimaal met de functie DEC.N.HEX(), dan komt er prompt het gewenste hexadecimale getal uit, alleen is Excel dan wel vergeten dat het hier om een getal gaat. Als je twee zulke getallen wilt optellen, of je wilt delen, of iets anders wiskundigs, dan moet je weer terugvertalen naar decimaal, daar je wiskunde-ding doen, en dan weer terugvertalen.

Het kan nog gekker. Sommige hexadecimale getallen worden in Excel wel als getal herkend, alleen… niet het goede getal! Bijvoorbeeld: het decimale getal 489 wordt hexadecimaal geschreven als 1E9 maar als je in Excel 1E9 invoert, dan ziet Excel de letter E tussen twee cijfers, en dat komt hem bekend voor: het is wetenschappelijke notatie! Plotseling wordt jouw 1E9 gezien als 1.000.000.000; van 489 naar een miljard in een oogwenk.
Hetzelfde probleem doet zich voor in alle gevallen waarin hexadecimale getallen alleen de letter E als letter-cijfer bevatten, en waarbij de E niet het eerste of laatste cijfer is. Van zulke getallen is een lijst gemaakt op de On-Line Encyclopedia of Integer Sequences:
Reeks van hexadecimale getallen die Excel als tientallig herkent.


Datumvelden

Een andere valkuil is het automatisch herkennen van een tekst die eruitziet als een datum. In de Engelstalige versie van Excel is er een probleem geweest bijvoorbeeld in de biologie, waar het ging om een enzym met de naam MARCH5, waarbij Excel automatisch overgaat naar een datumcel. Iets dergelijks met SEP15, een gen. Omdat ook biologen graag en veelvuldig gebruik maken van Excel, is er in 2016 een onderzoek gedaan naar publicaties met Excel-bestanden over genen, en er zijn tussen 2005 en 2015 maar liefst 35174 bestanden gevonden. Daarvan zijn er in 987 gevallen fouten gevonden die door Excel gegenereerd zijn door namen van genen anders te interpreteren dan wat het zijn. Het is me niet helemaal duidelijk wat de impact van dergelijke fouten is, maar het lijkt me niet goed.
Deze problemen hebben allemaal te maken met het uitzoeken van het type van een gegeven.
Bijvoorbeeld: 22/12 kan een getal zijn, maar ook een datum, of gewoon een tekst. Een database moet dus niet alleen gegevens opslaan, maar ook metadata: gegevens over de gegevens. Van elk gegeven is niet alleen de waarde bekend, maar ook het type. Daarom, nogmaals: een telefoonnummer moet je niet opslaan als getal.

In Excel zijn er mogelijkheden om gegevenstypes te onderscheiden, maar ze zijn verre van intuïtief en even ver van gebruiksvriendelijk. De standaard instelling van een spreadsheet is niet geschikt voor gebruik bij wetenschappelijk onderzoek.


Eindigheid

Een andere beperking van spreadsheets als database is dat ze eindig zijn.
In 2010 heeft WikiLeaks een overzicht van 92000 rapporten over de oorlog in Afghanistan naar de kranten gestuurd. Julian Assange heeft ze persoonlijk afgeleverd bij het bureau van de Guardian. De journalist constateerde dat ze echt waren, alleen stopten de rapporten, tot hun verbazing, abrupt bij april 2009, terwijl ze tot het eind van dat jaar zouden moeten doorlopen.
Je raadt het al: Excel telde zijn rijen in een 16-bits getal, dus er waren maximaal 2^16=65536 rijen beschikbaar. Dus toen de journalist de gegevens in Excel invoerde, was alles na de eerste 65536 gegevens verdwenen. Assange vond zelf de verklaring: de limiet van Excel was bereikt. Sindsdien heeft Excel zijn grenzen aangepast, maar er zijn nog steeds grenzen. Het lijkt wel of je eindeloos kunt scrollen, maar op zeker moment bereik je de grens.

Opdracht:

Zoek uit hoeveel rijen en kolommen een spreadsheet in Excel kan hebben. Het zijn er veel! Als je veel geduld hebt kun je het met scrollen vinden, maar je kunt ook alvast een eind op streek raken:
Hint


 


Auteur: Anneke Grünefeld