Pandas har hjulpet oss så langt i fasen av dataforbehandling. Selv om vi i ett tilfelle, mens vi opprettet histogrammer, også har brukt en annen modul fra Pandas – plotting
.
Vi har målrettet unngått er så langt, fordi å introdusere det tidligere ville reise flere spørsmål enn det svarte. Nemlig pandaer og Matplotlib var en så vanlig en allestedsnærværende duo at Pandas har begynt å integrere Matplotlibs funksjonalitet. Den tungt er avhengig av Matplotlib for å gjøre noen faktisk plotting, og du vil finne mange Matplotlib-funksjoner pakket inn i kildekoden. Alternativt kan du bruke andre backends for plotting, som f.eks Plottly og Bokeh.
Imidlertid introduserer Pandas oss også for et par plott som ikke er en del av Matplotlibs standard plotttyper, som f.eks KDE-er, Andrews Curves, Bootstrap-plotter og Scatter matriser.
De plot()
funksjonen til en panda DataFrame
bruker backend spesifisert av plotting.backend
, og avhengig av kind
argument – genererer et plott ved å bruke det gitte biblioteket. Siden mange av disse overlapper – er det ingen vits i å dekke plottyper som f.eks line
, bar
, hist
og scatter
. De vil produsere omtrent de samme plottene med samme kode som vi har gjort så langt med Matplotlib.
Vi skal bare kort ta en titt på plot()
funksjon siden den underliggende mekanismen har blitt utforsket så langt. La oss heller fokusere på noen av handlingene vi kan ikke allerede lett gjøre med Matplotlib.
Dette blir et veldig kort kapittel, ettersom Pandas' plotte- og visualiseringsevner blekner sammenlignet med Matplotlib – men det er fortsatt nyttig å vite om noen av disse, samt være klar over muligheten til å plotte fra DataFrame
s direkte.
De DataFrame.plot() Funksjon
De plot()
funksjon aksepterer x
og y
funksjoner, og en kind
argument. Alternativt, for å unngå kind
argument, kan du også ringe DataFrame.plot.kind()
i stedet, og pass i x
og y
funksjoner.
De aksepterte verdiene for kind
argument er: line
, bar
, barh
(horisontal bar), hist
, box
, kde
, density
(synonym for kde
), area
, pie
, scatter
og hexbin
(ligner på et varmekart).
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 å gi Series
forekomster som vi gjør for Matplotlib – det er nok å gi kolonnenavn, og siden du ringer til plot()
funksjon på DataFrame
du visualiserer, er det enkelt for Pandas å tilordne disse strengverdiene til de riktige kolonnenavnene.
Hver av disse samtalene gjør en ny Figure
forekomst og plotter de riktige verdiene på den:
Å plotte flere akser på den samme Figure
, kan du lage en Figure
og en eller flere Axes
av plt.subplots()
og tilordne passende Axes
til ax
argumentet til hver plot.plot_type()
anrop:
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()
Noen av standardargumentene, for eksempel rotation
argumentet er faktisk forskjellige i plot()
samtaler. For eksempel, rotation
er forkortet til rot
. Dette gjør det litt vanskelig å bare bytt mellom Matplotlib og Pandas, ettersom du mest sannsynlig vil ende opp på dokumentasjonssidene, bare sjekke hvilke argumenter som kan brukes og hvilke som ikke kan.
Nå, i stedet for å lage en ny Figure
or Axes
for eksempel vil hver av disse tomtene bli stasjonert i den aktuelle Axes
tilfeller vi har gitt dem:
Generelt er plotting med Pandas praktisk og raskt – men likevel, for å plotte barplott, linjeplott og boksplott, vil du sannsynligvis gå med Matplotlib. Det er både den underliggende motoren Pandas uunngåelig bruker, og har også flere tilpasningsmuligheter, og du trenger ikke å huske et nytt sett med argumenter som du kan bruke med Pandas-plott.
Når det er sagt, for noen tomter vil du kanskje foretrekke pandaer, siden de må lages manuelt i Matplotlib, og noen av dem er så vanskelige å lage at det ikke er verdt innsatsen, for eksempel KDE-linjer.
Pandaer planlegging Moduler
Hva DataFrame
s har å tilby når det gjelder visualisering er ikke for nytt for oss. Imidlertid, den underliggende modulen de kaller, pandas.plotting
gjør. De plotting
modul har flere funksjoner som vi kan bruke, som f.eks autocorrelation_plot()
, bootstrap_plot()
og scatter_matrix()
.
Hver av disse godtar enten en Series
eller en DataFrame
, avhengig av hvilken type visualisering de produserer, samt visse parametere for plotting av spesifikasjoner og stylingformål.
Bootstrap Plot
bootstrapping er prosessen med tilfeldig prøvetaking (med erstatning) et datasett, og beregning av nøyaktighetsmål som f.eks. Bias, varians og tillitsintervaller for stikkprøvene. "Med erstatning" betyr i praksis at hvert tilfeldig valgt element kan velges på nytt. Uten erstatning betyr at etter hvert tilfeldig valgt element, fjernes det fra bassenget for neste prøve.
A Bootstrap Plot, laget av Pandas bootstraps gjennomsnitts-, median- og mellomnivåstatistikken til et datasett, basert på prøven size
, hvoretter plottet i ettertid vises via plt.show()
. Standardargumentene for size
og samples
er 50
og 500
henholdsvis.
Dette betyr at for en funksjon prøver vi 50
verdier. Deretter genereres en delprøve på 50 elementer (syntetiske data) for disse 50 verdiene og en oppsummeringsstatistikk (gjennomsnitt/median/mellomområde) beregnes for dem. Denne prosessen gjentas 500
ganger, så til slutt har vi 500 sammendragsstatistikker:
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()
Autokorrelasjonsplott
Autokorrelasjonsplott brukes til å sjekke for datatilfeldighet, for tidsseriedata. Flere autokorrelasjoner beregnes for forskjellige tidsstempler, og hvis dataene er virkelig tilfeldige - vil korrelasjonen være nær null. Hvis ikke – vil korrelasjonen være større enn null.
La oss plotte to autokorrelasjonsplott – ett med vårt Verdi funksjon, og en med en Series
fylt med tilfeldige verdier:
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()
Autokorrelasjonsplottet for random_series
skal dreie seg om 0
, siden det er tilfeldige data, mens plottet for Value
funksjonen vil ikke:
Det er verdt å merke seg at autokorrelasjon måler en skjema av tilfeldighet, som ukorrelert, men ikke-tilfeldige data eksisterer. Hvis det er ikke-tilfeldig, men ikke har noen signifikante korrelasjoner - autokorrelasjonsplotten vil indikere at dataene er tilfeldige.
Scatter matriser
Scatter matriser plott a rutenett av spredningsplott for alle funksjoner mot alle funksjoner. Siden dette uunngåelig sammenligner hver funksjon med seg selv, også - diagonal hvor dette skjer erstattes vanligvis med en histogram av den funksjonen, i stedet for et scatterplot. Scatter matriser er også kjent som Par tomter, og Seaborn tilbyr en pairplot()
funksjon kun for dette.
De scatter_matrix()
funksjon aksepterer en DataFrame
og produserer en Scatter Matrix for alle dens numeriske funksjoner, og returnerer en 2D-matrise med Axes
forekomster som omfatter Scatter-matrisen. For å justere noe om dem, vil du gjerne gjenta 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 ganske stor scatter-matrise av alle funksjonene mot alle andre funksjoner:
Du kan også passere i diagonal
argument, som godtar 'hist'
or 'kde'
for å spesifisere hvilken type distribusjonsplott du vil plotte på diagonalen, samt alpha
, som spesifiserer gjennomsiktigheten til markørene i spredningsplottene.
- 100
- Om oss
- Alle
- allerede
- En annen
- argumenter
- rundt
- være
- Bit
- Eske
- ring
- evner
- Kapittel
- kontroll
- kode
- Kolonne
- Felles
- land
- Par
- Opprette
- dato
- forskjellig
- distribusjon
- europeisk
- Den Europeiske Union
- eksempel
- Trekk
- Egenskaper
- Fokus
- funksjon
- funksjonalitet
- general
- generere
- HTTPS
- IT
- kjent
- stor
- større
- Bibliotek
- linje
- kart
- Matrix
- mest
- nemlig
- navn
- Nær
- tilby
- Tilbud
- alternativer
- Annen
- fase
- basseng
- prosess
- produsere
- gi
- formål
- heve
- RE
- erstattet
- Resultater
- avkastning
- Sa
- valgt
- sett
- Kort
- signifikant
- lignende
- So
- kildekoden
- spesifikasjon
- startet
- statistikk
- Kilden
- Gjennom
- union
- us
- verdi
- visualisering
- Hva
- Wikipedia
- verdt
- X
- år
- null