Educación en Córdoba 1998-2010

Evolución en la cantidad de escuelas, docentes y alumnos

El sitio de estadísticas de la provincia de Córdoba en su seccion educación publica datos desagregados por nivel en cuanto a la cantidad de matrículas (alumnos), docentes y escuelas.

En base a esto hacemos a continuación un breve análisis de las variaciones en este período. Los niveles incluidos en los datos que libera el estado provincial son:

Datos relevantes

In [2]:
import pandas as pd # Cargar la librería "pandas" para leer archivos CSV
pd.display_max_columns=15 # que no recorte datos tan facil al mostrar datos
# no mostrar los gráficos en ventanas emergentes
%pylab inline 
import matplotlib.pyplot as plt # importar librería gráfica
import numpy as np # importar numpy para manejo de matrices y otros calculos 
debug = False # imprimir todos los datos o no
prefix = "https://andresvazquez.com.ar/data/cordoba-educacion-1998-2010/"
prefix = "./data/"
# leer el archivo con los datos de las escuelas en todos los niveles
escuelas = pd.read_csv("%seducacion-escuelas-en-cordoba-todos-los-niveles-1998-2010.csv" % prefix, index_col=0, header=0)
niveles = escuelas.T # 
if debug:
    print niveles
Populating the interactive namespace from numpy and matplotlib

Ver los datos crudos

Cantidad de escuelas por nivel educativo. Período 1998-2010

In [3]:
niveles.plot(figsize=(16, 6))
Out[3]:
<matplotlib.axes.AxesSubplot at 0x35ccf10>

Ver los datos tomando 1998 = 1 para cada serie

No se puede apreciar el crecimiento o caida de cada uno con valores tan discimiles. Se necesita ponderar los valores para llevarlos a alguna escala similar.
Se pondera entonces cada serie tomando como "1" a su valor de 1998 y conocer asi el crecimiento de cada serie.

In [53]:
#ignoro la ultima serie (escuela artistica) que tiene valores nulos y no es relevante para este estudio
esc = np.array(escuelas)[0:7] 
if debug:
    print esc
a1998 = esc[0:,0] # tomo los valores de cada serie para 1998
coefs = a1998.reshape(7,1) # invierto la matriz para poderla divivir por la matriz completa
mtx_ponderada = esc / coefs # valores ponderados con 1998 = 1 para cada serie
if debug:
    print '------Just 1998-----------------------'
    print a1998
    print "------Coefs for each serie------------"
    print coefs
    print "------Matriz ponderada----------------"
    print mtx_ponderada
# la matriz no tiene los nombres de las series, los saco de la lectura inicial
nivs = np.array(niveles[:0].columns) # titulos de cada serie en array de numpy
nivs = nivs[:-1] # ignoro a las escuelas artisticas
if debug:
    print nivs
m = mtx_ponderada.transpose() # necesito invertir la matriz para poder dibujarla como busco
from pandas import DataFrame # el objeto dataframe me permite nombrar las series de datos
df = DataFrame(m, index=arange(1998,2011), columns=nivs)
df.plot(figsize=(16, 4), kind='bar')
Out[53]:
<matplotlib.axes.AxesSubplot at 0x1dff2fd0>

Se detaca claramente el crecimiento de la escuela media para adultos. La cantidad escuelas se triplico.
Veamos como fue en la cantidad de matrículas (alumnos) y la cantida de docentes en el mismo período.

Evolución de las matriculas por nivel

In [5]:
matriculas = pd.read_csv("%seducacion-matriculas-por-niveles-cordoba-1998-2010.csv" % prefix, index_col=0, header=0)
niveles = matriculas.T # tiene una ultima columna con porcentajes, necesito eliminarla
if debug:
    print "----MATRICULAS----"
    print matriculas
    print "----NIVELES----"
    print niveles
niveles.plot(figsize=(16, 6))
Out[5]:
<matplotlib.axes.AxesSubplot at 0x402d110>

Igual que antes no podemos apreciar el crecimiento de cada uno comparativamente.
Desarrollamos el mismo proceso.

Crecimiento de la matricula segun nivel educativo (1998=1)

In [46]:
#ignoro la ultima serie (escuela artistica) que tiene valores nulos y no es relevante para etse estudio
esc = np.array(matriculas)[0:7]
if debug:
    print esc
a1998 = esc[0:,0] # tomo los valores de cada serie para 1998
coefs = a1998.reshape(7,1) # invierto la matriz para poderla divivir por la matriz completa
mtx_ponderada = esc / coefs # valores ponderados con 1998 = 1 para cada serie
if debug:
    print '------Just 1998-----------------------'
    print a1998
    print "------Coefs for each serie------------"
    print coefs
    print "------Matriz ponderada----------------"
    print mtx_ponderada

m = mtx_ponderada.transpose() # necesito invertir la matriz para poder dibujarla
from pandas import DataFrame # el objeto dataframe me permite nombrar las series de datos
df = DataFrame(m, index=arange(1998,2011), columns=nivs)
df.plot(figsize=(16, 4), kind='bar')
Out[46]:
<matplotlib.axes.AxesSubplot at 0x1cddd5d0>

Notable nuevamente el crecimiento de la matríclula de educación media para adultos.
La educación superior no universitaria se duplicó, su crecimiento es un poco mas fuerte que el de la cantidad de escuelas en el mismo nivel educativo.

Evolución de la cantidad de docentes

In [52]:
docentes = pd.read_csv("%sdocentes-cordoba-1998-2010.csv" % prefix, index_col=0, header=0)
niveles = docentes[:-1].T # tiene una ultima columna con porcentajes, necesito eliminarla
if debug:
    print "----MATRICULAS----"
    print matriculas
    print "----NIVELES----"
    print niveles
niveles.plot(figsize=(16, 6))
Out[52]:
<matplotlib.axes.AxesSubplot at 0x1e3335d0>

Ahora estos mismas evoluciones pero comparativas cada una con su mismo valor en 1998 (al igual que datos anteriores)

In [8]:
#ignoro la ultima serie (escuela artistica) que tiene valores nulos y no es relevante para etse estudio
esc = np.array(docentes)[0:7]
if debug:
    print esc
a1998 = esc[0:,0] # tomo los valores de cada serie para 1998
coefs = a1998.reshape(7,1) # invierto la matriz para poderla divivir por la matriz completa
mtx_ponderada = esc / coefs # valores ponderados con 1998 = 1 para cada serie
if debug:
    print '------Just 1998-----------------------'
    print a1998
    print "------Coefs for each serie------------"
    print coefs
    print "------Matriz ponderada----------------"
    print mtx_ponderada

m = mtx_ponderada.transpose() # necesito invertir la matriz para poder dibujarla

df = DataFrame(m, index=arange(1998,2011), columns=nivs)
df.plot(figsize=(16, 4), kind='bar')
Out[8]:
<matplotlib.axes.AxesSubplot at 0x4c0d450>

Nuevamente el nivel educativo medio para adultos muy sobre la media. Su nivel de docentes acompaño el crecimiento de escuelas y matrículas.
El nivel inicial y superior no universitario nuevamente alto en linea con las otras series.

Correlación entre las series

Como se ve los crecimientos en de escuelas y docentes parecen acompañar el crecimiento de la matriculación. Para esto son importantes los coeficientes de alumnos por docente, alumnos por escuela y docentes por escuela en cada nivel.
Esto puede indicar si la provincia de Córdoba mantuvo la calidad educativa en cuanto a atención de la demanda creciente.

In [31]:
if debug:
    print escuelas
    print docentes
    print matriculas

e = np.array(escuelas)[0:7]
d = np.array(docentes)[0:7]
m = np.array(matriculas)

Docentes por escuela en cada nivel (1998 - 2010)

In [43]:
dxe = (d / e)
if debug:
    print "--- DOCENTES POR ESCUELA -----"
    print dxe
    
df = DataFrame(dxe.transpose(), index=arange(1998,2011), columns=nivs)
df.plot(subplots=True, title='Docentes por escuela', fontsize=20, figsize=(6,29))
Out[43]:
array([<matplotlib.axes.AxesSubplot object at 0x19075e10>,
       <matplotlib.axes.AxesSubplot object at 0x1a987850>,
       <matplotlib.axes.AxesSubplot object at 0x1a49a390>,
       <matplotlib.axes.AxesSubplot object at 0x1a4b6c50>,
       <matplotlib.axes.AxesSubplot object at 0x1a626210>,
       <matplotlib.axes.AxesSubplot object at 0x1ad7ad50>,
       <matplotlib.axes.AxesSubplot object at 0x1ad99cd0>], dtype=object)

Alumnos por docente (1998 - 2010)

En general se ve la tendencia a bajar (es lo esperado)

In [45]:
axd = (m[:-1] / d)
if debug:
    print "--- ALUMNOS POR DOCENTE -----"
    print dxe
    
df = DataFrame(axd.transpose(), index=arange(1998,2011), columns=nivs)
df.plot(subplots=True, title='Alumnos por docentes', fontsize=20, figsize=(6,19))
Out[45]:
array([<matplotlib.axes.AxesSubplot object at 0x1696add0>,
       <matplotlib.axes.AxesSubplot object at 0x1c35fed0>,
       <matplotlib.axes.AxesSubplot object at 0x1beeca10>,
       <matplotlib.axes.AxesSubplot object at 0x1bf0e310>,
       <matplotlib.axes.AxesSubplot object at 0x1c60c890>,
       <matplotlib.axes.AxesSubplot object at 0x1c632410>,
       <matplotlib.axes.AxesSubplot object at 0x1c770390>], dtype=object)

Alumnos por escuela (1998 - 2010)

In [44]:
mxe = (m[:-1] / e)
if debug:
    print "--- ALUMNOS POR ESCUELA -----"
    print dxe
    
df = DataFrame(mxe.transpose(), index=arange(1998,2011), columns=nivs)
df.plot(subplots=True, title='Alumnos por escuela', fontsize=20, figsize=(6,19))
Out[44]:
array([<matplotlib.axes.AxesSubplot object at 0x19c96290>,
       <matplotlib.axes.AxesSubplot object at 0x1b7118d0>,
       <matplotlib.axes.AxesSubplot object at 0x1b1f4450>,
       <matplotlib.axes.AxesSubplot object at 0x1b210a10>,
       <matplotlib.axes.AxesSubplot object at 0x1b363490>,
       <matplotlib.axes.AxesSubplot object at 0x1b388910>,
       <matplotlib.axes.AxesSubplot object at 0x1baa7cd0>], dtype=object)