Verward over welke visualisatietool te gebruiken? Ik heb de voor- en nadelen van elk hulpmiddel voor u op een rijtje gezet
Foto door oxana v op Unsplash
Deze handleiding is bijgewerkt met een aantal meer diepgaande voorbeelden. U kunt de laatste versie van de blog hier vinden.
Als u begint met Python-visualisatie, wordt u misschien overweldigd door het aantal bibliotheken en voorbeelden:
Matplotlib
Seaborn
Plotly
Bokeh
Altair
Folium
Als u een DataFrame hebt dat wacht om gevisualiseerd te worden, welke moet u dan kiezen? Sommige bibliotheken kunnen in specifieke gevallen beter zijn dan andere. Dit artikel laat de voor- en nadelen van elk zien. Aan het eind van dit artikel moet u de verschillende kenmerken van elke library kunnen onderscheiden en gemakkelijker de optimale kunnen kiezen.
We zullen dit doen aan de hand van een voorbeelddataset en deze met elke library verkennen, waarbij we ons richten op een paar specifieke kenmerken:
Interactiviteit
Wilt u dat uw visualisatie interactief is?
Sommige bibliotheken, zoals Matplotlib, geven visualisaties weer als afbeeldingen; ze zijn dus goed voor het uitleggen van concepten (in een paper, diadeck of presentatie).
Met bibliotheken als Altair, Bokeh en Plotly kunt u daarentegen interactieve grafieken maken waarin uw gebruikers kunnen duiken en die ze zelf kunnen verkennen
Syntaxis en flexibiliteit
Hoe verschilt de syntaxis voor elke bibliotheek? Met bibliotheken van een lager niveau, zoals Matplotlib, kunt u alles doen wat u maar kunt bedenken – maar ten koste van een complexere API. Sommige bibliotheken, zoals Altair, zijn zeer declaratief, wat het gemakkelijker maakt om uw gegevens in kaart te brengen.
Type gegevens en visualisatie
Werkt u met een gespecialiseerde use-case, zoals een geografische plot, met grote gegevens, of gebruikt u een plot-type dat alleen door een bepaalde bibliotheek wordt ondersteund?
Data
Om het vergelijken te vergemakkelijken, zal ik in dit artikel de echte data gebruiken die ik van Github heb geschraapt:
Ik ga de visualisaties van elke bibliotheek insluiten met behulp van Datapane, wat een Python-framework en API is voor het publiceren en delen van Python-rapporten. Als u meer voorbeelden uit de praktijk wilt zien, bekijk dan de door gebruikers bijgedragen rapporten in de Datapane gallery.
Om het artikel te volgen, kunt u ofwel het csv-bestand van hier downloaden of de directe gegevens van Datapane Blob.
import datapane as dpdp.Blob.get(name='github_data', owner='khuyentran1401').download_df()
Denk eraan om vooraf in te loggen bij Datapane met uw token als u de Blob wilt gebruiken. Dit zou minder dan 1 minuut moeten duren
Matplotlib
Matplotlib is waarschijnlijk de meest gebruikte Python bibliotheek voor het visualiseren van data. Iedereen die geïnteresseerd is in data science heeft Matplotlib waarschijnlijk minstens één keer gebruikt.
Pros
Makkelijk om de eigenschappen van de gegevens te zien
Bij het analyseren van gegevens kan een snelle blik op de verdeling ideaal zijn.
Als ik bijvoorbeeld snel de verdeling van de top 100 gebruikers met de meeste volgers wil bekijken, is het gebruik van Matplotlib meestal voldoende.
Zelfs al ziet de x-as van Matplotlib er niet goed uit, we hebben een beter begrip van de verdeling van de gegevens door naar de grafiek te kijken.
2. Kan alles plotten
Matplotlib is zeer veelzijdig, wat betekent dat het elke soort grafiek kan plotten die u zich maar kunt voorstellen. De website van Matplotlib bevat zeer uitgebreide documentatie en diverse grafieken in de galerij, waardoor het gemakkelijk is om tutorials te vinden voor elke gekke plot die je maar kunt bedenken.
Zo’n tekst als deze:
Cons
Matplotlib kan alles plotten, maar het kan ingewikkeld zijn om niet-basic plots te plotten of de plots aan te passen zodat ze er mooi uitzien.
Ook al is de plot goed genoeg om de verdeling te visualiseren, als u uw gegevens aan anderen wilt laten zien, moet u de x-as en de y-as aanpassen, wat veel moeite kost. Dit komt omdat Matplotlib een extreem low-level interface heeft.
Takeaway: Matplotlib kan alles plotten, maar complexe plots vergen misschien veel meer codes dan andere bibliotheken
Seaborn is een Python datavisualisatiebibliotheek gebaseerd op Matplotlib. Het biedt een hoger niveau wrapper op de bibliotheek die het gemakkelijker maakt om te gebruiken.
Pros
Minder code
Het biedt een hoger niveau interface voor soortgelijke plots. Met andere woorden, seaborn biedt over het algemeen vergelijkbare plots als matplotlib, maar met minder code en een mooier ontwerp.
We gebruiken dezelfde gegevens als voorheen om een vergelijkbare heatmap van de grafiek te tekenen.
We krijgen een betere heatmap zonder het x- en y-label in te stellen!
Maak veelgebruikte plots mooier
Veel mensen kiezen voor seaborn als het gaat om populaire plots zoals bar plot, box plot, count plot, histograms, etc niet alleen omdat ze met minder code gemaakt kunnen worden maar ook omdat ze er veel mooier uitzien. Zoals we in ons voorbeeld hierboven kunnen zien, zien de kleuren er ook beter uit dan de standaard kleuren van Matplotlib.
Cons
Seaborn is meer beperkt en heeft niet zo’n brede collectie als matplotlib
Takeaway: Seaborn is een versie op een hoger niveau van Matplotlib. Ook al heeft het niet zo’n brede collectie als Matplotlib, seaborn maakt populaire plots zoals bar plot, box plot, heatmap, etc er mooi uit zien in minder code.
Plotly
Plotly’s Python grafiekbibliotheek maakt het gemakkelijk om interactieve, publicatie-kwaliteit grafieken te maken. Het kan ook soortgelijke grafieken maken als Matplotlib en seaborn, zoals lijnplots, scatterplots, gebiedsgrafieken, staafdiagrammen, enz.
Pros
Like R
Als u een fan bent van plots in R en de functies ervan mist bij de overstap naar Python, biedt Plotly u dezelfde kwaliteit plots met Python!
Mijn favoriet is Plotly Express omdat het heel gemakkelijk is en zelfs sneller om geweldige plots te maken vanuit een enkele regel Python.
Makkelijk om interactieve plots te maken
Plotly maakt het ook gemakkelijk om interactieve plots te maken. Interactieve plots zijn niet alleen mooi, maar maken het ook gemakkelijker voor kijkers om elk gegevenspunt van dichterbij te bekijken.
Herken je de staafplot die we eerder hebben gemaakt met matplotlib? Laten we eens kijken hoe dat uitpakt met Plotly
Met ongeveer dezelfde regels code produceren we een interactieve plot waarbij we met de muis over elke staaf kunnen gaan om te zien welke gebruiker en het aantal volgers de staaf vertegenwoordigt. Dit betekent dat de gebruiker van uw visualisatie deze zelf kan verkennen.
3. Complexe plots eenvoudig gemaakt
Met Plotly kunnen sommige plots die gewoonlijk moeilijk te maken zijn, eenvoudig worden gemaakt.
Bijv. als we een kaart willen maken om de locaties van Github-gebruikers te visualiseren, kunnen we hun lengte- en breedtegraden vinden zoals hier getoond, en dan die gegevens gebruiken om de locaties van gebruikers op de kaart te markeren zoals dit
Met een paar regels code worden de locaties van alle gebruikers mooi weergegeven op een kaart. De kleur van de bubbels staat voor het aantal vorken en de grootte voor het totale aantal sterren
Takeaway: Plotly is geweldig om interactieve en publicatie-kwaliteit grafieken te maken met weinig regels code.
Altair
Altair is een declaratieve statistische visualisatie bibliotheek voor Python gebaseerd op vega-lite, waardoor het ideaal is voor plots die veel statistische transformatie vereisen.
Pros
1. Eenvoudige visualisatiegrammatica
De grammatica die wordt gebruikt om de visualisatie te maken is eenvoudig te begrijpen. Alleen de links tussen de datakolommen en de coderingskanalen hoeven te worden vermeld en de rest van het plotten gebeurt automatisch. Dit klinkt abstract, maar is van groot belang wanneer je met gegevens werkt, en het maakt het visualiseren van informatie echt snel en intuïtief.
Bij voorbeeld, met de titanic gegevens hierboven, zouden wij het aantal mensen in elke klasse willen tellen, alles wat wij nodig hebben is count()
in de y_as
2. Gemakkelijk om gegevens te transformeren
Altair maakt het ook heel gemakkelijk om de gegevens te transformeren tijdens het maken van de grafiek
Bijvoorbeeld, als we de gemiddelde leeftijd van elk geslacht in de Titanic willen vinden, in plaats van de transformatie van tevoren te doen zoals Plotly, kunnen we de transformatie uitvoeren binnen de code om de grafiek te maken.
We kunnen er ook voor zorgen dat de klasse een nominaal gegeven is (categorisch gegeven zonder enige volgorde) met :N
of ervoor zorgen dat de gemiddelde leeftijd een kwantitatief gegeven is (maat voor waarden zoals getallen) met :Q
Zie een volledige lijst van gegevenstransformaties hier
3. Eenvoudige koppeling van plots
Altair stelt u ook in staat om indrukwekkende koppelingen te maken tussen plots, zoals het gebruik van een intervalselectie om de inhoud van een bijgevoegd histogram te filteren.
Wanneer we bijvoorbeeld het aantal mensen in elke klasse willen visualiseren binnen het interval dat we selecteren in een puntgrafiek tussen leeftijd en tarief, zouden we iets als dit kunnen doen.
Als we onze muis slepen om het interval binnen de scatter plot te selecteren, zouden we de verandering in het staafdiagram hieronder kunnen zien. In combinatie met de transformaties en berekeningen van eerder, betekent dit dat u een aantal zeer interactieve plots kunt maken die on-the-fly berekeningen uitvoeren – zonder dat er zelfs een draaiende Python-server voor nodig is!
Cons
Tenzij u aangepaste styling specificeert, zien de eenvoudige grafieken zoals het staafdiagram er niet zo gestyled uit als seaborn of Plotly. Altair raadt ook geen datasets met meer dan 5000 steekproeven aan en raadt in plaats daarvan aan dat u uw gegevens aggregeert voordat u ze visualiseert.
Takeaway: Altair is ideaal voor geavanceerde grafieken om statistieken te tonen. Altair kan niet overweg met gegevens boven 5000 monsters en sommige eenvoudige grafieken zien er niet zo gestileerd uit in vergelijking met Plotly of Seaborn.
Bokeh
Bokeh is een flexibele interactieve visualisatiebibliotheek die zich richt op webbrowsers voor weergave.
Pros
Interactieve versie van Matplotlib
Als we een rangorde maken tussen de interactieve visualisatiebibliotheken hierboven, staat Bokeh waarschijnlijk op de eerste plaats wat betreft de gelijkenis met Matplotlib.
Matplotlib kan elke plot maken omdat het een low-level visualisatiebibliotheek is. Bokeh kan zowel als een high-level of low-level interface worden gebruikt; het kan dus veel geavanceerde plots maken die Matplotlib maakt, maar met minder regels code en een hogere resolutie.
Bijv, de cirkelplot van Matplotlib
kan ook worden gemaakt met een betere resolutie en meer nut met Bokeh
2. Koppeling tussen plots
Bokeh maakt het ook heel gemakkelijk om tussen plots te koppelen. De verandering die in een plot wordt toegepast, wordt toegepast in een andere plot met een vergelijkbare variabele.
Bij voorbeeld, als we 3 grafieken naast elkaar maken en hun relatie willen observeren, kunnen we gebruik maken van gekoppeld borstelen
ColumnDataSource
maakt het mogelijk om de gegevens te delen tussen plots. Wanneer we dus een wijziging in een plot aanbrengen, worden ook de andere plots dienovereenkomstig gewijzigd.
Cons
Omdat Bokeh een bibliotheek is die enigszins een middle-level interface heeft, kost het vaak minder code dan Matplotlib, maar kost het meer code om dezelfde plot te produceren als Seaborn, Altair, of Plotly.
Bijv. om dezelfde plot te maken met titanic data, moeten we niet alleen de data vooraf transformeren, moeten we ook de breedte van de balk en de kleur instellen als we willen dat de grafiek er mooi uitziet
Als we geen breedte voor de staafdiagram toevoegen, zou de grafiek er zo uitzien
Dus, moeten we de afmetingen handmatig aanpassen om de plot mooier te maken
Als u een mooie staafdiagram wilt maken in minder code, kan dit het nadeel zijn van Bokeh in vergelijking met andere bibliotheken
Takeaway: Bokeh is de enige bibliotheek waarvan de interface varieert van laag tot hoog, waardoor het gemakkelijk is om zowel veelzijdige als elegante grafieken te produceren. Dit komt echter met de kosten dat het over het algemeen meer code kost voor Bokeh om de plots te maken met een vergelijkbare kwaliteit als andere bibliotheken.
Folium
Folium maakt het gemakkelijk om gegevens te visualiseren op een interactieve folderkaart. De bibliotheek heeft een aantal ingebouwde tilesets van OpenStreetMap, Mapbox, en Stamen
Pros
Makkelijk om een kaart te maken met markers
Ook al maken Plotly, Altair, en Bokeh ons ook in staat stellen om kaarten te maken, gebruikt Folium een open stratenplan om u een dichter gevoel te geven van een Google Map met een minimum aan code
Weetje nog hoe we de kaart maakten om de locaties van Github-gebruikers te visualiseren met Plotly? We kunnen de kaart er nog mooier laten uitzien met Folium
De oorspronkelijke locatie in Brooklyn, NY. Zoom uit om andere locaties op de kaart te zien. Met een paar regels code hebben we een echte kaart gemaakt waarop de locaties van gebruikers te zien zijn.
2. Potentiële locatie toevoegen
Als we potentiële locaties van andere gebruikers willen toevoegen, maakt Folium dat gemakkelijk door gebruikers toe te staan markers toe te voegen
Klik op de kaart om een nieuwe locatie te zien die wordt gegenereerd op de plaats waar u klikt.
3. Plugins
Folium heeft een aantal plugins die u met uw kaart kunt gebruiken – waaronder een plugin voor Altair. Wat als we de heatmap van het totaal aantal sterren van Github gebruikers in de wereld willen zien om te identificeren waar er een hoog aantal top Github gebruikers is met een hoog aantal van het totaal aantal sterren? Met de heatmap in Folium plugins kunt u precies dat doen.
Zoom uit om het volledige beeld van de heatmap te zien.
Takeaway: Folium stelt u in staat om een interactieve kaart te maken met weinig regels code. Het geeft je dicht bij de ervaring van een Google Map.
Conclusie
Congratulation! Je hebt net geleerd over zes verschillende visualisatie tools voor uw visualisatie. Ik hoop dat dit artikel u een idee geeft van wat elke library doet en wanneer u wat moet gebruiken. Als u de belangrijkste kenmerken van elke library begrijpt, kunt u sneller de juiste library tevoorschijn halen als u die nodig heeft.
Als u nog steeds in de war bent over welke library u moet gebruiken voor uw data, kies er dan gewoon een die u goed genoeg vindt. Als de code te lang is of de grafiek niet zo goed uitpakt als je je had voorgesteld, probeer het dan gewoon met een andere bibliotheek.
Voel je vrij om de code voor dit artikel te forken en ermee te spelen in deze Github repo.
Ik schrijf graag over basisconcepten van data science en speel met verschillende algoritmen en data science-tools. Je kunt met mij in contact komen op LinkedIn en Twitter.
Star deze repo als je de codes wilt bekijken voor alle artikelen die ik heb geschreven. Volg me op Medium om op de hoogte te blijven van mijn nieuwste data science-artikelen zoals deze: