Pandas har hjälpt oss hittills i fasen av dataförbehandling. Även om vi i ett fall, när vi skapade histogram, också har använt en annan modul från Pandas – plotting
.
Vi har medvetet undvikit är så långt, eftersom att införa det tidigare skulle väcka fler frågor än det besvarade. Nämligen pandor och Matplotlib var en så vanligt förekommande duo att Pandas har börjat integrera Matplotlibs funktionalitet. Det kraftigt förlitar sig på Matplotlib för att göra någon faktisk plottning, och du hittar många Matplotlib-funktioner insvepta i källkoden. Alternativt kan du använda andra backends för plottning, som t.ex Plotly och Bokeh.
Men Pandas introducerar oss också för ett par intriger som inte en del av Matplotlibs standard plottyper, som t.ex KDE:er, Andrews Curves, Bootstrap plots och Scatter matriser.
Smakämnen plot()
funktion hos en panda DataFrame
använder backend som anges av plotting.backend
, och beroende på kind
argument – genererar en plot med hjälp av det givna biblioteket. Eftersom många av dessa överlappar – är det ingen idé att täcka in plottyper som t.ex line
, bar
, hist
och scatter
. De kommer att producera ungefär samma plotter med samma kod som vi hittills har gjort med Matplotlib.
Vi ska bara kort ta en titt på plot()
funktion eftersom den underliggande mekanismen hittills har utforskats. Låt oss istället fokusera på några av handlingarna som vi kan inte redan lätt göra med Matplotlib.
Detta kommer att bli ett mycket kort kapitel, eftersom Pandas plottnings- och visualiseringsförmåga bleknar i jämförelse med Matplotlib – men det är fortfarande användbart att känna till några av dessa, samt vara medveten om förmågan att plotta från DataFrame
s direkt.
Smakämnen DataFrame.plot() Funktion
Smakämnen plot()
funktion accepterar x
och y
funktioner och en kind
argument. Alternativt, för att undvika kind
argument kan du också ringa DataFrame.plot.kind()
istället, och passera in x
och y
funktioner.
De accepterade värdena för kind
argument är: line
, bar
, barh
(horisontell stapel), hist
, box
, kde
, density
(synonym till kde
), area
, pie
, scatter
och hexbin
(liknar en Heatmap).
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()
Istället för att tillhandahålla Series
instanser som vi gör för Matplotlib – det räcker att tillhandahålla kolumnnamn, och eftersom du ringer till plot()
funktion på DataFrame
du visualiserar är det lätt för Pandas att mappa dessa strängvärden till lämpliga kolumnnamn.
Vart och ett av dessa samtal gör ett nytt Figure
instans och plottar lämpliga värden på den:
Att plotta flera axlar på samma Figure
, kan du göra en Figure
och en eller flera Axes
via plt.subplots()
och tilldela lämpligt Axes
till ax
varje argument plot.plot_type()
ringa upp:
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()
Några av standardargumenten, såsom rotation
argument är faktiskt olika i plot()
samtal. Till exempel, rotation
förkortas till rot
. Detta gör det lite knepigt att bara byta mellan Matplotlib och Pandas, eftersom du med största sannolikhet kommer att hamna på dokumentationssidorna, bara kolla vilka argument som kan tillämpas och vilka som inte kan.
Nu istället för att skapa en ny Figure
or Axes
t.ex. kommer var och en av dessa tomter att placeras i lämplig Axes
fall vi har försett dem med:
I allmänhet är det bekvämt och snabbt att plotta med Pandas – men ändå, för att plotta barplots, linjeplots och boxplots, kommer du förmodligen att vilja gå med Matplotlib. Det är både den underliggande motorn som Pandas oundvikligen använder, och den har också fler anpassningsalternativ, och du behöver inte komma ihåg en ny uppsättning argument som du kan använda med Pandas plots.
Som sagt, för vissa tomter kanske du vill föredra pandas, eftersom de måste göras manuellt i Matplotlib, och vissa av dem är så besvärliga att göra att det inte är värt ansträngningen, såsom KDE-linjer.
pandor plottning Modulerna
Vad DataFrame
s har att erbjuda när det gäller visualisering är inte alltför nytt för oss. Men den underliggande modulen de kallar, pandas.plotting
gör. De plotting
modulen har flera funktioner som vi kan använda, som t.ex autocorrelation_plot()
, bootstrap_plot()
och scatter_matrix()
.
Var och en av dessa accepterar antingen a Series
eller ett DataFrame
, beroende på vilken typ av visualisering de producerar, samt vissa parametrar för plottning av specifikationer och stylingändamål.
Bootstrap plot
Bootstrapping är processen att slumpmässigt ta (med ersättning) en datauppsättning, och beräkna mått på noggrannhet som t.ex. förspänning, variation och konfidensintervaller för stickproven. "Med utbyte" innebär i praktiken att varje slumpmässigt valt element kan väljas igen. Utan ersättning betyder att efter varje slumpmässigt valt element tas det bort från poolen för nästa prov.
A Bootstrap plot, skapad av Pandas bootstraps medel-, median- och mellanregisterstatistiken för en datauppsättning, baserat på provet size
, varefter handlingen i efterhand visas via plt.show()
. Standardargumenten för size
och samples
är 50
och 500
respektive.
Det betyder att vi samplar för en funktion 50
värden. Sedan genereras ett delsampling med 50 element (syntetisk data) för dessa 50 värden och en sammanfattande statistik (medelvärde/median/mellanområde) beräknas för dem. Denna process upprepas 500
gånger, så i slutändan har vi 500 sammanfattande statistik:
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
Autokorrelationsplots används för att kontrollera dataslumpmässighet, för tidsseriedata. Flera olika autokorrelationer beräknas för olika tidsstämplar, och om uppgifterna verkligen är slumpmässiga – kommer korrelationen att vara nära noll. Om inte – kommer korrelationen att vara större än noll.
Låt oss rita två autokorrelationsplottar – en med vår Värde funktion och en med en Series
fylld med slumpmässiga värden:
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()
Autokorrelationsplotten för random_series
borde kretsa kring 0
, eftersom det är slumpmässiga data, medan plotten för Value
funktionen kommer inte:
Det är värt att notera att autokorrelation mäter en formen av slumpmässighet, som okorrelerade, men icke-slumpmässiga data existerar. Om det är icke-slumpmässigt, men inte har några signifikanta korrelationer – skulle autokorrelationsplotten indikera att data är slumpmässig.
Scatter matriser
Scatter matriser tomt a rutnät av Scatter Plots för alla funktioner mot alla funktioner. Eftersom detta oundvikligen också jämför varje funktion med sig själv – den diagonal där detta händer ersätts vanligtvis med en Histogram av den funktionen, snarare än en Scatter Plot. Scatter matriser är också kända som Par tomter, och Seaborn erbjuder en pairplot()
fungerar bara för detta.
Smakämnen scatter_matrix()
funktion accepterar en DataFrame
och producerar en scatter-matris för alla dess numeriska funktioner, och returnerar en 2D-array av Axes
instanser som utgör Scatter-matrisen. För att justera något om dem, vill du iterera igenom 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()
Detta resulterar i en ganska stor scatter-matris av alla funktioner mot alla andra funktioner:
Du kan också passera i diagonal
argument, som accepterar 'hist'
or 'kde'
för att ange vilken typ av distributionsdiagram du vill plotta på diagonalen, samt alpha
, som anger genomskinligheten för markörerna i spridningsdiagrammen.
- 100
- Om oss
- Alla
- redan
- Annan
- argument
- runt
- Där vi får lov att vara utan att konstant prestera,
- Bit
- Box
- Ring
- kapacitet
- Kapitel
- kontroll
- koda
- Kolumn
- Gemensam
- land
- Par
- Skapa
- datum
- olika
- fördelning
- Giltigt körkort
- europeisk union
- exempel
- Leverans
- Funktioner
- Fokus
- fungera
- funktionalitet
- Allmänt
- generera
- HTTPS
- IT
- känd
- Large
- större
- Bibliotek
- linje
- karta
- Matris
- mest
- nämligen
- namn
- Nära
- erbjudanden
- Erbjudanden
- Tillbehör
- Övriga
- fas
- poolen
- process
- producera
- ge
- syfte
- höja
- RE
- ersättas
- Resultat
- återgår
- Nämnda
- vald
- in
- Kort
- signifikant
- liknande
- So
- källkod
- specifikation
- igång
- statistik
- källan
- Genom
- fackliga
- us
- värde
- visualisering
- Vad
- wikipedia
- värt
- X
- år
- noll-