Foto af oxana v på Unsplash

Denne guide er blevet opdateret med nogle mere dybdegående eksempler. Du kan finde den seneste version af bloggen her.

Hvis du starter med Python-visualisering, kan du måske blive overvældet af antallet af biblioteker og eksempler:

  • Matplotlib
  • Seaborn
  • Plotly
  • Bokeh
  • Altair
  • Folium

Hvis du har et DataFrame, der venter på at blive visualiseret, hvilken en skal du så vælge? Nogle biblioteker kan være bedre i specifikke tilfælde end de andre. Denne artikel vil vise fordele og ulemper ved hvert enkelt. Ved slutningen af denne artikel skulle du være i stand til at skelne de forskellige funktioner i hvert bibliotek og have lettere ved at vælge det optimale bibliotek.

Vi vil gøre dette ved at bruge et eksempeldatasæt og udforske det ved hjælp af hvert bibliotek med fokus på nogle få specifikke egenskaber:

Interaktivitet

Hvis du ønsker, at din visualisering skal være interaktiv?

Nogle biblioteker, såsom Matplotlib, gengiver visualiseringer som billeder; de er derfor gode til at forklare koncepter (i en artikel, et diasdæk eller en præsentation).

På den anden side giver biblioteker som Altair, Bokeh og Plotly dig mulighed for at oprette interaktive grafer, som dine brugere selv kan dykke ned i og udforske

Syntaks og fleksibilitet

Hvordan er syntaksen for hvert bibliotek forskellig? Biblioteker på lavere niveau som Matplotlib giver dig mulighed for at gøre alt, hvad du kan forestille dig – men på bekostning af et mere komplekst API. Nogle biblioteker som Altair er meget deklarative, hvilket gør det lettere at mappe til dine data.

Datatatype og visualisering

Arbejder du med et specialiseret brugsscenarie, f.eks. et geografisk plot, med store data eller bruger du en plot-type, som kun understøttes af et bestemt bibliotek?

Data

For at gøre det lettere at sammenligne vil jeg i denne artikel bruge de rigtige data, som jeg skraber fra Github:

Jeg vil indlejre visualiseringerne fra hvert bibliotek ved hjælp af Datapane, som er en Python-ramme og API til udgivelse og deling af Python-rapporter. Hvis du vil se flere eksempler fra den virkelige verden, kan du tjekke de rapporter, som brugerne har bidraget med, i Datapane-galleriet.

For at følge artiklen kan du enten downloade csv-filen herfra eller hente de direkte data fra Datapane Blob.

import datapane as dpdp.Blob.get(name='github_data', owner='khuyentran1401').download_df()

Husk at logge ind på Datapane med dit token på forhånd, hvis du vil bruge Blob’en. Dette bør tage mindre end 1 minut

Matplotlib

Matplotlib er nok det mest almindelige Python-bibliotek til visualisering af data. Alle, der interesserer sig for datalogi, har sandsynligvis brugt Matplotlib mindst én gang.

Pros

  1. Nemt at se dataenes egenskab

Når man analyserer data, kan det være ideelt at have et hurtigt kig på fordelingen.

For eksempel, hvis jeg vil have et hurtigt kig på fordelingen af de 100 bedste brugere med flest følgere, er det normalt nok at bruge Matplotlib.

Selv om x-aksen i Matplotlib ikke ser godt ud, får vi en bedre forståelse af fordelingen af dataene ved at se på grafen.

2. Kan plotte alt

Matplotlib er meget alsidig, hvilket betyder, at den kan plotte enhver form for graf, som du kan forestille dig. Matplotlibs hjemmeside indeholder meget omfattende dokumentation og forskellige grafer i galleriet, hvilket gør det nemt at finde vejledninger til ethvert skørt plot, du kan komme i tanke om.

Leg noget tekst som denne:

Kontra

Matplotlib kan plotte hvad som helst, men det kan være kompliceret at plotte ikke-basale plots eller at justere plots, så de ser pæne ud.

Selv om plottet er godt nok til at visualisere fordelingen, skal du, hvis du vil repræsentere dine data for andre, rette x-aksen, y-aksen, hvilket kræver en stor indsats. Det skyldes, at Matplotlib har en grænseflade på ekstremt lavt niveau.

Takeaway: Matplotlib kan plotte alt, men komplekse plot kan tage meget mere kode end andre biblioteker

Seaborn er et Python datavisualiseringsbibliotek baseret på Matplotlib. Det giver en wrapper på højere niveau på biblioteket, hvilket gør det lettere at bruge.

Pros

  1. Mindre kode

Det giver en grænseflade på højere niveau til lignende plots. Med andre ord giver seaborn generelt lignende plots som matplotlib, men med mindre kode og et pænere design.

Vi bruger de samme data som før til at tegne et lignende heatmap af grafen.

Vi får et bedre heatmap uden at indstille x- og y-etiketten!

Gør almindeligt anvendte plots pænere

Mange mennesker vælger seaborn, når det gælder populære plots som f.eks. bar plot, box plot, count plot, histogrammer osv. ikke kun fordi de kan oprettes med mindre kode, men også fordi de ser meget pænere ud. Som vi kan se i vores eksempel ovenfor, ser farverne også bedre ud end standardfarverne i Matplotlib.

Cons

Seaborn er mere begrænset og har ikke så bred en samling som matplotlib

Takeaway: Seaborn er en version på et højere niveau af Matplotlib. Selv om det ikke har en så bred samling som Matplotlib, får seaborn populære plots som f.eks. bar plot, box plot, heatmap osv. til at se pæne ud på mindre kode.

Plotly

Plotlys Python-grafbibliotek gør det nemt at oprette interaktive grafer i publikationskvalitet. Det kan også oprette lignende diagrammer som Matplotlib og seaborn såsom linjediagrammer, spredningsdiagrammer, arealdiagrammer, søjlediagrammer osv.

Pros

  1. Lignende R

Hvis du er fan af diagrammer i R og savner dets funktioner, når du skifter til Python, giver Plotly dig de samme kvalitetsdiagrammer ved hjælp af Python!

Min favorit er Plotly Express, fordi det gør det virkelig nemt, og det er endnu hurtigere at oprette gode plots fra en enkelt linje i Python.

Nemt at oprette interaktive plots

Plotly gør det også nemt at oprette interaktive plots. Interaktive plots er ikke kun smukke, men gør det også lettere for seerne at se nærmere på hvert datapunkt.

Huskede du det søjleplot, vi havde tidligere med matplotlib? Lad os se, hvordan det bliver med Plotly

Med ca. de samme linjer kode producerer vi et interaktivt plot, som vi kan føre musen hen over hver bjælke for at se, hvilken bruger og hvor mange følgere, som bjælken repræsenterer. Det betyder, at forbrugeren af din visualisering selv kan udforske den.

3. Komplekse plots gjort let

Med Plotly kan nogle plots, der normalt er udfordrende at skabe, nemt oprettes.

For eksempel, hvis vi ønsker at oprette et kort for at visualisere Github-brugernes placering, kan vi finde deres breddegrader og længdegrader som vist her, og derefter bruge disse data til at spotte brugernes placeringer på kortet som her

Med et par linjer kode er alle brugernes placeringer smukt repræsenteret på et kort. Farven på boblerne repræsenterer antallet af gafler, og størrelsen repræsenterer det samlede antal stjerner

Takeaway: Plotly er fantastisk til at skabe interaktive grafer i publikationskvalitet med få linjer kode.

Altair

Altair er et deklarativt statistisk visualiseringsbibliotek til Python baseret på vega-lite, hvilket gør det ideelt til plot, der kræver en masse statistisk transformation.

Pros

1. Enkel visualiseringsgrammatik

Den grammatik, der bruges til at skabe visualiseringen, er let at forstå. Det er kun nødvendigt at nævne forbindelserne mellem datakolonnerne til kodningskanalerne, og resten af plotningen håndteres automatisk. Dette lyder abstrakt, men er en stor ting, når man arbejder med data, og det gør visualiseringen af oplysninger virkelig hurtig og intuitiv.

For eksempel med titanic-dataene ovenfor, hvor vi gerne vil tælle antallet af personer i hver klasse, skal vi blot bruge count() i y_axen

2. Let at transformere data

Altair gør det også meget let at transformere dataene, mens du opretter diagrammet

For eksempel, hvis vi gerne vil finde gennemsnitsalderen for hvert køn i Titanic, kan vi i stedet for at foretage transformationen på forhånd som i Plotly, udføre transformationen i koden for at oprette diagrammet.

Vi kunne også sørge for, at klassen er et nominelt data (kategoriske data uden nogen orden) ved hjælp af :N eller sørge for, at mean_age er et kvantitativt data (mål for værdier som f.eks. tal) ved hjælp af :Q

Se en komplet liste over datatransformationer her

3. Let at sammenkæde plot

Altair giver dig også mulighed for at lave nogle imponerende sammenkædninger mellem plot, f.eks. ved at bruge et intervalvalg til at filtrere indholdet af et vedhæftet histogram.

For eksempel, hvis vi ønsker at visualisere antallet af personer i hver klasse inden for det interval, vi vælger et punktdiagram mellem alder og billetpris, kan vi gøre noget som dette.

Når vi trækker musen for at vælge intervallet inden for spredningsdiagrammet, kan vi se ændringen i søjlediagrammet nedenfor. Når dette kombineres med transformationerne og beregningerne fra tidligere, betyder det, at du kan oprette nogle ekstremt interaktive diagrammer, der foretager beregninger on-the-fly – uden at det overhovedet kræver en kørende Python-server!

Cons

Medmindre du angiver brugerdefineret styling, ser de enkle diagrammer som f.eks. søjlediagrammet ikke så stylet ud som seaborn eller Plotly. Altair anbefaler heller ikke datasæt med over 5000 prøver og anbefaler i stedet, at du aggregerer dine data før visualisering.

Takeaway: Altair er ideel til sofistikerede diagrammer til at vise statistik. Altair kan ikke håndtere data over 5000 prøver, og nogle enkle diagrammer ser ikke så stylet ud sammenlignet med Plotly eller Seaborn.

Bokeh

Bokeh er et fleksibelt interaktivt visualiseringsbibliotek, der er rettet mod webbrowsere til repræsentation.

Pros

  1. Interaktiv version af Matplotlib

Hvis vi skal rangordne blandt de interaktive visualiseringsbiblioteker ovenfor, vil Bokeh sandsynligvis rangere først i forhold til ligheden med Matplotlib.

Matplotlib kan skabe ethvert plot, fordi det er et visualiseringsbibliotek på lavt niveau. Bokeh kan både bruges som en grænseflade på højt niveau og på lavt niveau; det kan således skabe mange sofistikerede plots, som Matplotlib skaber, men med færre kodelinjer og højere opløsning.

For eksempel, cirkelplottet fra Matplotlib

Kan også oprettes med bedre opløsning og mere anvendelig ved hjælp af Bokeh

2. Link mellem parceller

Bokeh gør det også meget nemt at linke mellem parceller. Den ændring, der anvendes i et plot, vil blive anvendt på et andet plot med en lignende variabel.

For eksempel, hvis vi opretter 3 grafer side om side og ønsker at observere deres forhold, kan vi bruge forbundet børstning

ColumnDataSource gør det muligt at dele dataene mellem graferne. Når vi anvender ændringen på et plot, ændres de andre plots således også tilsvarende.

Konsekvenser

Da Bokeh er et bibliotek, der til en vis grad har en grænseflade på mellemniveau, kræver det ofte mindre kode end Matplotlib, men det kræver mere kode at producere det samme plot som Seaborn, Altair eller Plotly.

For eksempel, for at skabe det samme tælleplot ved hjælp af titanic data, udover behovet for at transformere dataene på forhånd, skal vi også indstille bredden på søjlen og farven, hvis vi ønsker, at grafen skal se pæn ud

Hvis vi ikke tilføjede bredde til søjlediagrammet, ville grafen se sådan ud

Sådan, skal vi manuelt justere dimensionerne for at gøre plottet pænere

Hvis du ønsker at skabe et flot søjleplot på mindre kode, kan dette være ulempen ved Bokeh sammenlignet med andre biblioteker

Takeaway: Bokeh er det eneste bibliotek, hvis grænseflade spænder fra lav til høj, hvilket gør det nemt at fremstille både alsidig og elegant grafik. Dette har dog den pris, at det generelt kræver mere kode for Bokeh at skabe graferne med samme kvalitet som andre biblioteker.

Folium

Folium gør det nemt at visualisere data på et interaktivt bladkort. Biblioteket har en række indbyggede tilesets fra OpenStreetMap, Mapbox og Stamen

Pros

  1. Nemt at oprette et kort med markører

Selv om Plotly, Altair, og Bokeh også gør det muligt for os at oprette kort, bruger Folium et åbent gadekort for at give dig en tættere følelse af et Google Map med et minimum af kode

Husk, hvordan vi oprettede kortet for at visualisere Github-brugernes placering ved hjælp af Plotly? Vi kunne få kortet til at se endnu flottere ud med Folium

Den oprindelige placering i Brooklyn, NY. Zoom ud for at se andre steder på kortet. Med nogle kodelinjer har vi skabt et rigtigt kort, der viser brugernes placering.

2. Tilføj potentiel placering

Hvis vi ønsker at tilføje andre brugeres potentielle placeringer, gør Folium det nemt ved at give brugerne mulighed for at tilføje markører

Klik på kortet for at se en ny placering genereret lige der, hvor du klikker.

3. Plugins

Folium har en række plugins, som du kan bruge sammen med dit kort – herunder et plugin til Altair. Hvad hvis vi ønsker at se et varmekort over de samlede stjerner for Github-brugere i verden for at identificere, hvor der er et højt antal top Github-brugere med et højt antal af de samlede stjerner? Heatmap i Folium plugins giver dig mulighed for at gøre netop dette.

Zoom ud for at se det komplette billede af heatmappet.

Takeaway: Folium giver dig mulighed for at oprette et interaktivt kort med få kodelinjer. Det giver dig tæt på oplevelsen af et Google Map.

Konklusion

Godt tillykke! Du har netop lært om seks forskellige visualiseringsværktøjer til din visualisering. Jeg håber, at denne artikel har givet dig en fornemmelse af, hvad hvert bibliotek gør, og hvornår du skal bruge hvad. Hvis du forstår de vigtigste funktioner i hvert bibliotek, vil det gøre det hurtigere for dig at trække det rigtige bibliotek frem, når du har brug for det.

Hvis du stadig er i tvivl om, hvilket bibliotek du skal bruge til dine data, skal du bare vælge et, som du finder godt nok. Hvis koden så er for lang, eller hvis grafen ikke bliver så god, som du forestiller dig, skal du bare prøve med et andet bibliotek!

Føl dig fri til at fork og lege med koden til denne artikel i denne Github-repo.

Jeg kan godt lide at skrive om grundlæggende datavidenskabsbegreber og lege med forskellige algoritmer og datavidenskabsværktøjer. Du kan få kontakt med mig på LinkedIn og Twitter.

Stjern dette repo, hvis du vil se koderne til alle de artikler, jeg har skrevet. Følg mig på Medium for at holde dig opdateret med mine seneste datavidenskabsartikler som disse:

admin

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.

lg