%pylab inline
import pandas as pd
Az alábbiakban folytatjuk az érettségi statisztikák elemzését. Koncentrálva a statisztikai mennyiségek számítására és összefoglaló ábrák készítésére. Olvassuk be újra az adatokat:
df=pd.read_csv("data/erettsegi.csv.gz",sep=";",index_col=0)
A describe függvény segítségével kaphatunk egy összefoglalót a táblázatunkról.
df.describe()
df.describe().T
A corr függvénnyel lekérhetjük a Pearson/Speaman/Kendall korrelációs táblázatot.
df.corr(method="pearson")
Ki is rajzolhatjuk könnyen.
c=df.corr(method="pearson")
imshow(c,interpolation="none",cmap='BrBG')
xticks(range(len(c.index)),c.index,rotation=90)
yticks(range(len(c.index)),c.index)
colorbar();
A pandas
nagy erőssége, hogy a DataFrame-ekből nagyon rövid szintaxissal lehet egészen elfogadható ábrákat készíteni. Ehhez a pandas
a matplotlib
könyvtárat használja, melyet emiatt be is kell importálnunk.
Az ábra paramétereit (title, ylabel stb.) a matplotlib
-ben megszokott módon állíthatjuk be.
Elsőként növeljük meg alapértelmezetten a tengelyfeliratokat:
rcParams["font.size"]=12
Eloszlások
pontok=df[['írásbeli pontszám',
'III. összetett feladatok']]
pontok.head()
pontok.hist(figsize=(8,4));
pontok.plot.hist(figsize=(9,6),alpha=0.5);
pontok.plot.box(figsize=(9,6));
Kovarianciák
pontok.plot.scatter(x='írásbeli pontszám',y= 'III. összetett feladatok');
pontok.plot.hexbin(x='írásbeli pontszám',y= 'III. összetett feladatok',gridsize=20);
Nézzük meg egyben néhány pontszám hisztogramját, és kovarianciáját
pd.scatter_matrix(pontok,figsize=(9,9));
Nézzük meg ábrán is az emelt szintű és a középszintű érettségizők számának időbeli alakulását.
toplot=df.groupby(['szint','év'])[['szint']].count()
toplot
Használjuk az unstack függvényt hogy könnyen plottolhatóak legyenek az egyes csoportok.
toplot=toplot.unstack(level=0)
toplot
toplot.plot(kind="area", figsize=(9, 6))
ylabel("Érettségizok száma")
ylim(0,7000)
xticks(range(2011,2016),map(str,range(2011,2016)));
Megnézhetjük kördiagramon, hogy melyik iskolatípusból hányan érettségiztek közép- és emelt szinten 2011 és 2015 között. Ehhez két alábrát készítünk a múltkor tanultakhoz hasonlóan.
Vajon mit csinált az autopct
kulcsszó? Mi lehet a -?
t=df[(df["vizsgázó részvétele"]=="megjelent")].groupby(["szint","vizsgázó képzési típusa"])
t=t.size().unstack(level=1)
t.plot.pie(subplots=True,autopct="%.1f",figsize=(12,4));
import seaborn as sns
Ez egy olyan csomag, amivel esztétikus plotokat készíthetünk kevés vesződéssel, leginkább statisztikai elemzésre.
Hisztogram és eloszlássűrűség-becslés.
sns.distplot(df['írásbeli pontszám'].dropna());
Csak kde (kernel density estimate).
sns.kdeplot(df['írásbeli pontszám']);
Kumulatív eloszlásfüggvény. ( De a becsült, nem az igazi! )
sns.kdeplot(df['írásbeli pontszám'].dropna(),cumulative=True);
Lehet több eloszlást egyben
pontok=df.loc[df['szint']=='K',['írásbeli pontszám',
'szóbeli pontszám',
'vizsgázó képzési típusa']]
pontok.head()
Egyesével kirajzolhatjuk a pontokat.
sns.stripplot(x='vizsgázó képzési típusa', y='írásbeli pontszám',
data=pontok.dropna().iloc[:1000],jitter=True);
Dobozokat is rajzolhatunk.
sns.boxplot(x='vizsgázó képzési típusa', y='írásbeli pontszám',
data=pontok);
Vagy az eloszlássűrűségeket egymás mellé.
sns.violinplot(x='vizsgázó képzési típusa', y='írásbeli pontszám',
data=pontok);
Többdimenziós eloszlásokat is ábrázolhatunk.
x='írásbeli pontszám'
y='szóbeli pontszám'
Becsült eloszlássűrűséggel.
sns.jointplot(x=x, y=y, data=pontok, kind="kde");
Vagy hisztogramokkal is.
sns.jointplot(x=x, y=y, data=pontok,kind="hex", color="k");
A már látott párplot is megvan.
sns.pairplot(pontok.dropna());
Illeszhetünk és rajzolhatunk lineáris modellt.
sns.lmplot(x=y, y=x, data=pontok.dropna().iloc[:30,:]);
Kirajzolva még más dolgokat is.
sns.jointplot(x=y, y=x, data=pontok.dropna().iloc[:30,:],kind='reg');