De tweede datum zoeken met Tableau Prep
Een veelvoorkomende behoefte in analyses is het bepalen van de datum waarop een tweede gebeurtenis plaatsvindt, bijvoorbeeld wanneer een klant een tweede aankoop doet (en daardoor een terugkerende klant wordt) of wanneer een bestuurder een tweede verkeersovertreding begaat. De datum van een eerste gebeurtenis is gemakkelijk te vinden: het is gewoon de minimumdatum ofwel de vroegste datum. De tweede datum is moeilijker te vinden.
In deze tweedelige zelfstudie gaan we verkeersovertredingsdata vormgeven en de volgende vragen beantwoorden:
Hoeveel dagen verliepen er tussen de eerste en de tweede overtreding voor elke bestuurder?
Vergelijk de boetebedragen voor de eerste en tweede overtreding. Zijn ze gecorreleerd?
Welke bestuurder betaalde in totaal het meest? Wie betaalde het minst?
Hoeveel bestuurders hadden meerdere soorten overtredingen?
Wat was het gemiddelde boetebedrag voor bestuurders die nooit een verkeerscursus hebben gevolgd?
In de eerste fase gebruiken we Tableau Prep Builder om de data voor onze analyse te herstructureren. In de tweede fase, Analyse met de tweede datum in Tableau Desktop, gaan we over tot de analyse in Tableau Desktop.
Het doel van deze zelfstudie is om verschillende concepten te presenteren in de context van een realistisch scenario en om de opties door te nemen. Het is niet de bedoeling om voor te schrijven welke optie het beste is. Aan het einde van de cursus hebt u meer inzicht in de impact van de datastructuur op berekeningen en analyses. Ook bent u beter bekend met verschillende aspecten van Tableau Prep en berekeningen in Tableau Desktop.
Opmerking: om de taken in deze zelfstudie uit te voeren, hebt u Tableau Prep Builder (geïnstalleerd of via de browser) en de gedownloade data nodig. Voor het tweede deel moet ook Tableau Desktop zijn geïnstalleerd.
De dataset is Traffic Violations.xlsx. U kunt dit bestand het beste opslaan in uw map Mijn Tableau Prep-opslagplaats > Databronnen.
Zie de Implementatiegids voor Tableau Desktop en Tableau Prep(Link wordt in een nieuw venster geopend) (in het Engels) om Tableau Prep Builder en Tableau Desktop te installeren voordat u verdergaat met deze zelfstudie. Anders kunt u de gratis proefversie van Tableau Prep(Link wordt in een nieuw venster geopend) (in het Engels) en Tableau Desktop(Link wordt in een nieuw venster geopend) (in het Engels) downloaden.
De data
In dit voorbeeld kijken we naar data over verkeersovertredingen. Elke overtreding is een rij. Er worden gegevens vastgelegd over de bestuurder, de datum, het soort overtreding, of de bestuurder verplicht was om een verkeerscursus te volgen en het boetebedrag.
Gewenste datastructuur
De data zijn momenteel zo gestructureerd dat elke overtreding een rij is. Een bestuurder met meerdere overtredingen verschijnt op meerdere rijen, en het is niet gemakkelijk om te bepalen welke overtreding de eerste of de tweede was.
Om onze recidivisten te onderzoeken, willen we een dataset die de datums van de eerste en de tweede overtreding van elkaar scheidt, evenals de informatie die aan elk van die overtredingen is gekoppeld, waarbij elke rij een bestuurder is.
De data herstructureren
Hoe realiseren we dit met Tableau Prep? We bouwen de flow stapsgewijs op, beginnend met het ophalen van de eerste overtredingsdatum, vervolgens de tweede en dan het vormgeven van de uiteindelijke dataset. Zorg ervoor dat u het Excel-bestand (Traffic Violations.xlsx) hebt gedownload om het proces te volgen.
Initiële aggregatie voor 1e overtredingsdatum
Eerst maken we verbinding met het bestand Traffic Violations.xlsx.
Open Tableau Prep Builder.
Klik op het startscherm op Verbinding maken met data.
Klik in het deelvenster Verbindingen op Microsoft Excel. Navigeer naar de locatie waar u Traffic Violations.xlsx hebt opgeslagen en klik op Openen.
Het blad Infractions (Overtredingen) verschijnt automatisch in het deelvenster Flow.
Zie Verbinding maken met data voor meer informatie.
Vervolgens moeten we de datum van de eerste overtreding per bestuurder vaststellen. Hiervoor gebruiken we een Aggregeren-stap en maken we een minidataset van Driver ID (Bestuurders-ID) en Minimum Infraction Date (Minimale overtredingsdatum).
Bij het gebruik van een Aggregeren-stap in Tableau Prep is elk veld dat moet definiëren wat een rij vormt een Gegroepeerd veld. (Voor ons is dat Driver ID (Bestuurders-ID).) Elk veld dat wordt geaggregeerd en gepresenteerd op het niveau van de gegroepeerde velden is een Geaggregeerd veld. (Voor ons is dat Infraction Date (Overtredingsdatum).)
Selecteer Infractions (Overtredingen) in het deelvenster Flow, klik op het pluspictogram en selecteer Aggregeren.
Sleep Driver ID (Bestuurders-ID) naar het neerzetgebied Gegroepeerde velden.
Sleep Infraction Date (Overtredingsdatum) naar het gebied Geaggregeerde velden. De standaardaggregatie is CNT (Aantal). Klik op CNT en verander de aggregatie in Minimum.
Hiermee wordt de kleinste (vroegste) datum geïdentificeerd, oftewel de eerste overtredingsdatum per bestuurder.
Zie Data opschonen en vormgeven voor meer informatie over aggregaties.
Selecteer in het deelvenster Flow Aggregeer 1, klik op het pluspictogram en selecteer Opschoningsstap zodat we de uitvoer van de aggregatie kunnen opschonen.
Dubbelklik in het deelvenster Profiel op de veldnaam Infraction Date (Overtredingsdatum) en verander deze in 1st Infraction Date (1e overtredingsdatum).
In dit stadium zien de deelvensters Flow en Profiel er als volgt uit:
In het deelvenster Profiel van deze opschoningsstap zien we dat onze data nu uit 39 rijen en slechts 2 velden bestaan. Velden die niet voor groepering of aggregatie worden gebruikt, gaan verloren. Maar we willen een deel van de originele informatie behouden. We kunnen deze velden toevoegen aan de groepering of aggregatie (maar dit zou het detailniveau veranderen of aggregatie van de velden vereisen), of deze minidataset weer met het origineel verbinden via een join (waardoor in feite een nieuwe kolom wordt toegevoegd aan de originele data voor 1st Infraction Date (1e overtredingsdatum)). We gaan de join maken.
Selecteer Infractions (Overtredingen) in het deelvenster Flow, klik op het pluspictogram en selecteer Opschoningsstap.
Zorg dat u met de muis de stap Infractions (Overtredingen) aanwijst en niet de lijn tussen deze stap en de aggregatiestap. Als de nieuwe opschoningsstap tussen de twee stappen wordt ingevoegd in plaats van te vertakken, gebruikt u de pijl Ongedaan maken op de werkbalk en probeert u het opnieuw. Het menu bevat de optie Toevoegen, niet Invoegen.
Hiermee wordt uw flow vertakt met alle oorspronkelijke data. We gaan de resultaten van de aggregatie via een join verbinden met deze kopie van de volledige data. Door een join te maken met Driver ID (Bestuurders-ID) voegen we de minimumdatum van onze aggregatie toe aan de oorspronkelijke data.
Sleep de stap Opschonen 2 naar de stap Opschonen 1 en zet deze neer op Een join maken.
De standaard-joinconfiguratie is in principe correct: een binnenste join op Driver ID = Driver ID (Bestuurders-ID = Bestuurders-ID).
Zie Joins maken van uw data voor meer informatie over joins.
Omdat sommige velden, zoals de velden in de JOIN-component, tijdens het maken een join kunnen worden gedupliceerd, is het vaak een goed idee om overbodige velden op te schonen nadat u een join hebt uitgevoerd.
Selecteer Join 1 in het deelvenster Flow, klik op het pluspictogram en selecteer Opschoningsstap.
Klik in het deelvenster Profiel met de rechtermuisknop of (in MacOS) met Ctrl ingedrukt op de kaart voor Driver ID-1 (Bestuurders-ID-1) en selecteer Verwijderen.
Om de veldvolgorde te wijzigen, sleept u de kaart voor 1st Infraction Date (1e overtredingsdatum) tussen Driver ID (Bestuurders-ID) en Infraction Date (Overtredingsdatum), waar u de zwarte lijn ziet verschijnen.
In dit stadium ziet de flow er als volgt uit:
Als we naar het onderstaande dataraster kijken, zien we onze nieuwe, gecombineerde dataset. We hebben de minimale (ofwel eerste) overtredingsdatum voor elke bestuurder toegevoegd aan elke rij in de dataset.
Tweede aggregatie voor 2e overtredingsdatum
We moeten ook de tweede overtredingsdatum vaststellen. Om dit te doen, willen we alle rijen uitfilteren waarin de datum van de overtreding gelijk is aan het minimum. Zo verwijderen we de eerste datum. Vervolgens kunnen we het minimum van de resterende datums bepalen met behulp van een andere aggregatiestap. Zo houden we de tweede overtredingsdatum over. We geven deze datum voor de duidelijkheid een andere naam.
Opmerking: omdat we de huidige data van Opschonen 3 verderop in de flow willen gebruiken, voegen we nog een opschoningsstap toe om de tweede overtredingsdatum te achterhalen. Hierdoor blijft de huidige status van de data in Opschonen 3 beschikbaar voor later gebruik.
Selecteer Opschonen 3 in het deelvenster Flow, klik op het pluspictogram en selecteer Opschoningsstap.
Kies op de werkbalk in het deelvenster Profiel Waarden filteren. Maak het filter
[Infraction Date] != [1st Infraction Date]
.Verwijder het veld 1st Infraction Date (1e overtredingsdatum).
Selecteer Opschonen 4 in het deelvenster Flow, klik op het pluspictogram en selecteer Aggregeren.
Sleep Driver ID (Bestuurders-ID) naar het neerzetgebied Gegroepeerde velden. Sleep Infraction Date (Overtredingsdatum) naar het gebied Geaggregeerde velden en verander de aggregatie in Minimum.
Selecteer Aggregeer 2 in het deelvenster Flow, klik op het pluspictogram en selecteer Opschoningsstap. Wijzig de naam Infraction Date (Overtredingsdatum) in 2nd Infraction Date (2e overtredingsdatum).
In dit stadium ziet de flow er als volgt uit:
We hebben nu voor elke bestuurder de datum van de tweede overtreding vastgesteld. Om alle overige informatie voor elke overtreding te verkrijgen (type, boete, verkeerscursus), moeten we deze weer met de volledige dataset verbinden via een join.
Sleep Opschonen 5 naar Opschonen 3 en zet deze stap neer op Een join maken.
De standaard-joinconfiguratie is in principe weer correct: een binnenste join op Driver ID = Driver ID (Bestuurders-ID = Bestuurders-ID).
Selecteer Join 2 in het deelvenster Flow, klik op het pluspictogram en selecteer Opschoningsstap. Verwijder de velden Driver ID-1 (Bestuurders-ID-1) en 1st Infraction Date (1e overtredingsdatum). Deze velden zijn niet langer nodig.
In dit stadium ziet de flow er als volgt uit:
Volledige datasets voor de 1e en 2e overtredingen maken
Laten we alvorens verder te gaan even een stap terug doen en nadenken over alles wat we hebben en hoe we dat allemaal bijeen willen brengen. Onze gewenste eindtoestand is een dataset die er als volgt uitziet, met een kolom voor Driver ID (Bestuurders-ID), en dan kolommen voor datum, type, verkeerscursus en boetebedrag voor de 1e en 2e overtredingen.
Hoe realiseren we dat?
In de stap Opschonen 3 hebben we onze complete dataset met een kolom waarin de datum van de eerste overtreding voor elke bestuurder wordt herhaald.
We willen alle rijen voor een bestuurder, die niet de eerste overtreding betreffen, verwijderen en een dataset met alleen eerste overtredingen opbouwen. Dat wil zeggen dat we de informatie voor een bepaalde bestuurder alleen willen behouden als 1st Infraction Date = Infraction Date (1e overtredingsdatum = Overtredingsdatum). Nadat we hebben gefilterd om alleen de rij met de eerste overtreding te behouden, kunnen we het veld Infraction Date (Overtredingsdatum) verwijderen en de veldnamen opruimen.
Na de tweede aggregatie en join hebben we ook onze volledige dataset met een kolom voor de tweede overtredingsdatum.
We kunnen een soortgelijk filter uitvoeren, 2nd Infraction Date = Infraction Date (2e overtredingsdatum = Overtredingsdatum), om alleen de rij met informatie over de 2e overtreding van elke bestuurder te bewaren. Wederom kunnen we ook de nu overbodige Infraction Date (Overtredingsdatum) verwijderen en de veldnamen opruimen.
We beginnen met de eerste set overtredingsdata.
Selecteer Opschonen 3 in het deelvenster Flow, klik op het pluspictogram en selecteer Opschoningsstap.
Net als in stap 10 hierboven willen we een vertakking toevoegen voor de nieuwe opschoningsstap, zonder deze tussen Opschonen 3 en Opschonen 4 in te voegen.
Klik in het deelvenster Profiel op Waarden filteren in de werkbalk terwijl deze nieuwe Opschonen-stap geselecteerd is. Maak het filter
[1st Infraction Date] = [Infraction Date]
.Verwijder het veld Infraction Date (Overtredingsdatum).
Wijzig de veldnamen Infraction Type (Type overtreding) Traffic School (Verkeerscursus) en Fine Amount (Boetebedrag) door er '1st' (1e) voor te plaatsen.
Dubbelklik op de naam Opschonen 7 onder de stap in het deelvenster Flow en wijzig de naam in Robust 1st (Robuust 1e).
En nu de tweede set overtredingsdata.
Selecteer Opschonen 6 in het deelvenster Flow na de laatste join.
Klik op Waarden filteren in de werkbalk. Maak het filter
[2nd Infraction Date] = [Infraction Date]
.Verwijder het veld Infraction Date (Overtredingsdatum).
Wijzig de veldnamen Infraction Type (Type overtreding) Traffic School (Verkeerscursus) en Fine Amount (Boetebedrag) door er '2nd' (2e) voor te plaatsen.
Dubbelklik op de naam Opschonen 6 onder de stap in het deelvenster Flow en wijzig de naam in Robust 2nd (Robuust 2e).
In dit stadium ziet de flow er als volgt uit:
De volledige dataset maken
Nu we deze twee overzichtelijke datasets hebben met volledige informatie over de eerste en tweede overtreding per bestuurder, kunnen we ze weer met elkaar verbinden met behulp van een join op Driver ID (Bestuurders-ID). Dit resulteert in de gewenste datastructuur.
Sleep Robust 2nd naar Robust 1st en zet het neer op Een join maken.
De standaard-JOIN-component is in principe correct: Driver ID = Driver ID (Bestuurders-ID-1 = Bestuurders-ID-1).
Omdat we geen bestuurders willen schrappen die geen tweede overtreding hebben begaan, moeten we hier een join links van maken. Klik in het gebied Join-type op het niet-gearceerde gebied van het diagram naast Robust 1st (Robuust 1e), waardoor het in een join Links wordt omgezet.
Selecteer Join 3 in het deelvenster Flow, klik op het pluspictogram en selecteer Opschoningsstap. Verwijder het veldduplicaat Driver ID-1 (Bestuurders-ID-1).
De data bevinden zich in de gewenste staat, zodat we uitvoer kunnen maken en kunnen overgaan tot analyse.
Selecteer in het deelvenster Flow de zojuist toegevoegde stap Opschonen 6, klik op het pluspictogram en selecteer Uitvoer toevoegen.
Verander in het deelvenster Uitvoer het Uitvoertype in .csv en klik vervolgens op Bladeren. Typ Driver Infractions (Bestuurdersovertredingen) als naam en kies de gewenste locatie voordat u op Accepteren klikt om op te slaan.
Klik op de knop Flow uitvoeren onderaan het deelvenster om uw uitvoer te genereren. Klik op Gereed in het statusdialoogvenster om het dialoogvenster te sluiten.
Tip: zie Uw werk opslaan en delen voor meer informatie over uitvoer en over het uitvoeren van een flow.
De definitieve flow ziet er ongeveer als volgt uit:
Opmerking: u kunt het voltooide flowbestand downloaden om uw werk te controleren: Driver Infractions.tflx (Bestuurdersovertredingen).
Samenvatting
In het eerste stadium van deze zelfstudie wilden we onze originele dataset voorbereiden op analyse van de eerste en tweede overtredingsdatums. Het proces bestaat uit drie fasen:
De eerste en tweede overtredingsdatums identificeren:
Maak een aggregatie die Driver ID (Bestuurders-ID-1) en MIN Infraction Date (Overtredingsdatum) behoudt. Verbind deze met behulp van een join met de originele dataset om een 'tussenliggende dataset' te maken waarin de eerste (minimum) overtredingsdatum voor elke rij wordt herhaald.
Filter in een nieuwe stap alle rijen uit waar de 1st Infraction Date (1e overtredingsdatum) overeenkomt met de Infraction Date (Overtredingsdatum). Maak vanuit die gefilterde dataset een aggregatie die Driver ID (Bestuurders-ID) en MIN Infraction Date (Overtredingsdatum) behoudt. Verbind deze via een join met de tussenliggende dataset uit de eerste stap. Hiermee wordt de tweede overtredingsdatum geïdentificeerd.
Maak opgeschoonde datasets voor de eerste en tweede overtredingen:
Ga terug, maak een vertakking vanuit de tussenliggende dataset en filter om alleen de rijen te behouden waar de 1st Infraction Date (1e overtredingsdatum) overeenkomt met de Infraction Date (Overtredingsdatum). Hiermee wordt een dataset voor alleen de eerste overtreding opgebouwd. Ruim deze op door alle overbodige velden te verwijderen en alle gewenste velden (behalve Driver ID (Bestuurders-ID)) een andere naam te geven om aan te geven dat ze voor de eerste overtreding zijn. Dit is de dataset Robust 1st (Robuust 1e).
Ruim de dataset voor de tweede overtredingsdatum op. Schoon de joinresultaten van stap 2 op door zodanig te filteren dat alleen de rijen overblijven waar de 2nd Infraction Date (2e overtredingsdatum) overeenkomt met de Infraction Date (Overtredingsdatum). Verwijder alle overbodige velden en hernoem alle gewenste velden (behalve Driver ID (Bestuurders-ID)) om aan te geven dat ze voor de tweede overtreding zijn. Dit is de dataset Robust 2nd (Robuust 2e).
Combineer de data over de eerste en tweede overtreding in één dataset:
Maak een join om de datasets Robust 1st en Robust 2nd (Robuust 1e en Robuust 2e) te verbinden, waarbij u ervoor zorgt dat alle records van Robust 1st worden behouden om te voorkomen dat bestuurders zonder tweede overtreding verloren gaan.
Vervolgens willen we onderzoeken hoe deze data in Tableau Desktop kunnen worden geanalyseerd.
Opmerking: speciale dank aan Ann Jackson's Workout Wednesday-onderwerp Geven klanten meer uit aan hun eerste of tweede aankoop?(Link wordt in een nieuw venster geopend) (in het Engels) en Andy Kriebel's Tableau Prep-tip De eerste en tweede aankoopdatum retourneren(Link wordt in een nieuw venster geopend) (in het Engels), die de inspiratie vormden voor deze zelfstudie. Als u op deze links klikt, verlaat u de website van Tableau. Tableau neemt geen verantwoordelijkheid voor de juistheid of actualiteit van pagina's die worden onderhouden door externe aanbieders. Neem contact op met de eigenaren als u vragen hebt over hun inhoud.