Pandas har hidtil hjulpet os i fasen med dataforbehandling. Selvom vi i et tilfælde, mens vi oprettede histogrammer, også har brugt et andet modul fra Pandas – plotting
.
Vi har målrettet undgået er indtil videre, fordi at indføre det tidligere ville rejse flere spørgsmål, end det besvarede. Nemlig pandaer , Matplotlib var så almindelig en allestedsnærværende duo, at Pandas er begyndt at integrere Matplotlibs funktionalitet. Det stærkt er afhængig af Matplotlib til at lave en egentlig plotning, og du vil finde mange Matplotlib-funktioner pakket ind i kildekoden. Alternativt kan du bruge andre backends til plotning, som f.eks Komplott , bokeh.
Pandas introducerer os dog også for et par plot, der er ikke en del af Matplotlibs standard plottyper, som f.eks KDE'er, Andrews Curves, Bootstrap plots , Scatter matricer.
plot()
funktion af en panda DataFrame
bruger den backend, der er angivet af plotting.backend
og afhængigt af kind
argument – genererer et plot ved hjælp af det givne bibliotek. Da mange af disse overlapper – nytter det ikke noget at dække plottyper som f.eks line
, bar
, hist
, scatter
. De vil producere stort set de samme plots med den samme kode, som vi hidtil har gjort med Matplotlib.
Vi vil kun kort tage et kig på plot()
funktion, da den underliggende mekanisme er blevet undersøgt indtil videre. Lad os i stedet fokusere på nogle af de plots, som vi kan ikke allerede let gøre med Matplotlib.
Dette bliver et meget kort kapitel, da Pandas' plot- og visualiseringsevner blegner i forhold til Matplotlib – men det er stadig nyttigt at kende til nogle af disse, samt være opmærksom på evnen til at plotte fra DataFrame
s direkte.
DataFrame.plot() Funktion
plot()
funktion accepterer x
, y
funktioner og en kind
argument. Alternativt for at undgå kind
argument, kan du også ringe DataFrame.plot.kind()
i stedet, og bestå i x
, y
funktioner.
De accepterede værdier for kind
argument er: line
, bar
, barh
(vandret bjælke), hist
, box
, kde
, density
(synonym for kde
), area
, pie
, scatter
, hexbin
(svarende til et varmekort).
import pandas as pd
from matplotlib import pyplot as plt df = pd.read_csv('gdp_csv.csv')
df_eu = df.loc[df['Country Name'] == 'European Union'] df_eu.plot.bar(x = 'Year', y = 'Value')
df_eu.plot.line(x = 'Year', y = 'Value')
df_eu.plot.box(x='Value') plt.show()
I stedet for at give Series
tilfælde, som vi gør for Matplotlib – det er nok at give kolonnenavne, og siden du ringer til plot()
funktion på DataFrame
du visualiserer, er det nemt for Pandas at knytte disse strengværdier til de relevante kolonnenavne.
Hvert af disse opkald foretager et nyt Figure
instans og plotter de relevante værdier på den:
At plotte flere akser på den samme Figure
, kan du lave en Figure
og en eller flere Axes
via plt.subplots()
og tildel det relevante Axes
til ax
hvert argument plot.plot_type()
opkald:
import pandas as pd
from matplotlib import pyplot as plt df = pd.read_csv('gdp_csv.csv')
df_eu = df.loc[df['Country Name'] == 'European Union'] fig, ax = plt.subplots(3, 1) df_eu.plot.box(x='Value', ax = ax[0])
df_eu.plot.line(x = 'Year', y = 'Value', ax = ax[1])
df_eu.plot.bar(x = 'Year', y = 'Value', rot = 45, ax = ax[2]) plt.show()
Nogle af standardargumenterne, som f.eks rotation
argument er faktisk forskellige i plot()
opkald. For eksempel, rotation
er forkortet til rot
. Dette gør det lidt svært at bare skift mellem Matplotlib og Pandas, da du højst sandsynligt ender på dokumentationssiderne, bare tjekker hvilke argumenter der kan anvendes og hvilke der ikke kan.
Nu, i stedet for at skabe en ny Figure
or Axes
for eksempel vil hver af disse grunde blive stationeret i det relevante Axes
tilfælde, vi har forsynet dem med:
Generelt er det praktisk og hurtigt at plotte med Pandas – men alligevel vil du sandsynligvis gå med Matplotlib til at plotte barplot, linjeplot og boxplot. Det er både den underliggende motor Pandas uundgåeligt bruger, og den har også flere tilpasningsmuligheder, og du behøver ikke at huske et nyt sæt argumenter, som du kan bruge med Pandas plots.
Når det er sagt, for nogle plots, vil du måske foretrække pandas, da de skulle laves manuelt i Matplotlib, og nogle af dem er så besværlige at lave, at det ikke er besværet værd, såsom KDE-linjer.
pandaer' plotte Moduler
Hvad DataFrame
s har at tilbyde med hensyn til visualisering er ikke for nyt for os. Men det underliggende modul, de kalder, pandas.plotting
gør. Det plotting
modul har flere funktioner, som vi kan bruge, som f.eks autocorrelation_plot()
, bootstrap_plot()
og scatter_matrix()
.
Hver af disse accepterer enten en Series
eller DataFrame
, afhængigt af den type visualisering, de producerer, samt visse parametre til plotning af specifikationer og stylingformål.
Bootstrap plot
bootstrapping er processen med tilfældig stikprøve (med udskiftning) af et datasæt, og beregning af mål for nøjagtighed som f.eks. skævhed, varians , konfidensintervaller for de tilfældige prøver. "Med udskiftning" betyder i praksis, at hvert tilfældigt udvalgt element kan vælges igen. Uden udskiftning betyder, at efter hvert tilfældigt udvalgt element fjernes det fra puljen til den næste prøve.
A Bootstrap plot, skabt af Pandas bootstraps gennemsnits-, median- og mid-range-statistikken for et datasæt, baseret på prøven size
, hvorefter plottet efterfølgende vises via plt.show()
. Standardargumenterne for size
, samples
er 50
, 500
henholdsvis.
Det betyder, at for en funktion prøver vi 50
værdier. Derefter genereres en delprøve på 50 elementer (syntetiske data) for disse 50 værdier, og en opsummerende statistik (middel/median/mellemområde) beregnes for dem. Denne proces gentages 500
gange, så i sidste ende har vi 500 oversigtsstatistikker:
import pandas as pd
from matplotlib import pyplot as plt df = pd.read_csv('./datasets/gdp_csv.csv')
df_eu = df.loc[df['Country Name'] == 'European Union'] pd.plotting.bootstrap_plot(df_eu['Value']) plt.show()
Autokorrelationsplot
Autokorrelationsplot bruges til at kontrollere for datatilfældighed, for tidsseriedata. Mange autokorrelationer beregnes for forskellige tidsstempler, og hvis dataene virkelig er tilfældige - vil korrelationen være tæt på nul. Hvis ikke – vil korrelationen være større end nul.
Lad os plotte to autokorrelationsplot – et med vores Værdi funktion, og en med en Series
fyldt med tilfældige værdier:
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt df = pd.read_csv('gdp_csv.csv')
# Filter DataFrame for the EU
df_eu = df.loc[df['Country Name'] == 'European Union']
# Generate 50 random integers between 0 and 100, and turn into a Series
random_series = pd.Series(np.random.randint(0, 100, size=50)) # Plot Autocorrelation Plot for the *Value* feature
pd.plotting.autocorrelation_plot(df_eu['Value'])
# Plot Autocorrelation Plot for the *random_series*
pd.plotting.autocorrelation_plot(random_series) plt.show()
Autokorrelationsplottet for random_series
skal dreje sig om 0
, da det er tilfældige data, mens plottet for Value
funktion vil ikke:
Det er værd at bemærke, at autokorrelation måler én formular tilfældighed, som ukorreleret, men ikke-tilfældige data eksisterer. Hvis det er ikke-tilfældigt, men ikke har nogen signifikante korrelationer – ville autokorrelationsplottet indikere, at dataene er tilfældige.
Scatter matricer
Scatter matricer plot a gitter af scatter-plot for alle funktioner mod alle funktioner. Da dette uundgåeligt også sammenligner hver funktion med sig selv - den diagonal hvor dette sker, erstattes typisk med en Histogram af denne funktion, snarere end et scatter-plot. Scatter matricer er også kendt som Par plots, og Seaborn tilbyder en pairplot()
fungerer kun til dette.
scatter_matrix()
funktion accepterer en DataFrame
og producerer en Scatter Matrix for alle dens numeriske funktioner og returnerer en 2D-array af Axes
instanser, der omfatter Scatter Matrix. For at justere noget ved dem, vil du gerne gentage dem:
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt df = pd.read_csv('worldHappiness2019.csv') axes = pd.plotting.scatter_matrix(df, diagonal='hist') for ax in axes.flatten(): # Rotate back to 0 degrees since they're automatically rotated by 90 ax.yaxis.label.set_rotation(0) # As to not overlap with the Axes instances, set the ticklabel # alignment to 'right' ax.yaxis.label.set_ha('right') plt.show()
Dette resulterer i en ret stor Scatter Matrix af alle funktionerne mod alle andre funktioner:
Du kan også bestå i diagonal
argument, som accepterer 'hist'
or 'kde'
for at angive, hvilken type distributionsplot du gerne vil plotte på diagonalen, samt alpha
, der specificerer gennemskinneligheden af markørerne i scatter-plottene.
- 100
- Om
- Alle
- allerede
- En anden
- argumenter
- omkring
- være
- Bit
- Boks
- ringe
- kapaciteter
- Kapitel
- kontrol
- kode
- Kolonne
- Fælles
- land
- Par
- Oprettelse af
- data
- forskellige
- fordeling
- europæisk
- europæiske Union
- eksempel
- Feature
- Funktionalitet
- Fokus
- funktion
- funktionalitet
- Generelt
- generere
- HTTPS
- IT
- kendt
- stor
- større
- Bibliotek
- Line (linje)
- kort
- Matrix
- mest
- nemlig
- navne
- I nærheden af
- tilbyde
- Tilbud
- Indstillinger
- Andet
- fase
- pool
- behandle
- producere
- give
- formål
- rejse
- RE
- udskiftes
- Resultater
- afkast
- Said
- valgt
- sæt
- Kort
- signifikant
- lignende
- So
- kildekode
- specifikation
- påbegyndt
- statistik
- The Source
- Gennem
- union
- us
- værdi
- visualisering
- Hvad
- Wikipedia
- værd
- X
- år
- nul