Está en la página 1de 7

Lab_2

September 23, 2019

Laboratorio 2
Estadística Descriptiva
Objetivos:

1. Calcular frecuencias absolutas, relativas, acumuladas y cruzadas para variables discretas


2. Frecuencias de una variable continua agrupada en intervalos

Importación de liberías:
[1]: import pandas as pd
import matplotlib.pyplot as plt
Generamos el dataframe que teníamos en el laboratorio anterior:
[2]: df = pd.DataFrame({'edad': [18, 19, None, 18, 24, 17, 22, 15, 22, 25],
'sexo': [0, 1, 0, 0, 1, 0, 0, 1, 1, 0],
'estudios': [1, 2, 0, 1, 3, 2, 3, 1, 2, 3]})

df = df.replace({'sexo': {0: 'Hombre', 1: 'Mujer'},


'estudios': {0: 'Sin estudios', 1: 'Estudios Primarios',
2: 'Estudios Secundarios', 3: 'Estudios␣
,→Superiores'}})

df
[2]: edad sexo estudios
0 18.0 Hombre Estudios Primarios
1 19.0 Mujer Estudios Secundarios
2 NaN Hombre Sin estudios
3 18.0 Hombre Estudios Primarios
4 24.0 Mujer Estudios Superiores
5 17.0 Hombre Estudios Secundarios
6 22.0 Hombre Estudios Superiores
7 15.0 Mujer Estudios Primarios
8 22.0 Mujer Estudios Secundarios
9 25.0 Hombre Estudios Superiores
Frecuencias Absolutas:
[3]: df['edad'].value_counts(dropna=False)

1
[3]: 22.0 2
18.0 2
25.0 1
15.0 1
17.0 1
24.0 1
NaN 1
19.0 1
Name: edad, dtype: int64
[4]: df['sexo'].value_counts()
[4]: Hombre 6
Mujer 4
Name: sexo, dtype: int64
[5]: df['estudios'].value_counts()
[5]: Estudios Secundarios 3
Estudios Primarios 3
Estudios Superiores 3
Sin estudios 1
Name: estudios, dtype: int64
Frecuencias Relativas:
[6]: df['edad'].value_counts(dropna=False, normalize=True)
[6]: 22.0 0.2
18.0 0.2
25.0 0.1
15.0 0.1
17.0 0.1
24.0 0.1
NaN 0.1
19.0 0.1
Name: edad, dtype: float64
[7]: df['sexo'].value_counts(normalize=True)
[7]: Hombre 0.6
Mujer 0.4
Name: sexo, dtype: float64
[8]: df['estudios'].value_counts(normalize=True)
[8]: Estudios Secundarios 0.3
Estudios Primarios 0.3
Estudios Superiores 0.3
Sin estudios 0.1
Name: estudios, dtype: float64
Frecuencias Absolutas Acumuladas:
[9]: df['edad'].value_counts(dropna=False).cumsum()

2
[9]: 22.0 2
18.0 4
25.0 5
15.0 6
17.0 7
24.0 8
NaN 9
19.0 10
Name: edad, dtype: int64
[10]: df['sexo'].value_counts().cumsum()
[10]: Hombre 6
Mujer 10
Name: sexo, dtype: int64
[11]: df['estudios'].value_counts().cumsum()
[11]: Estudios Secundarios 3
Estudios Primarios 6
Estudios Superiores 9
Sin estudios 10
Name: estudios, dtype: int64
Frecuencias Relativas Acumuladas:
[12]: df['edad'].value_counts(dropna=False, normalize=True).cumsum()
[12]: 22.0 0.2
18.0 0.4
25.0 0.5
15.0 0.6
17.0 0.7
24.0 0.8
NaN 0.9
19.0 1.0
Name: edad, dtype: float64
[13]: df['sexo'].value_counts(normalize=True).cumsum()
[13]: Hombre 0.6
Mujer 1.0
Name: sexo, dtype: float64
[14]: df['estudios'].value_counts(normalize=True).cumsum()
[14]: Estudios Secundarios 0.3
Estudios Primarios 0.6
Estudios Superiores 0.9
Sin estudios 1.0
Name: estudios, dtype: float64
Dejaremos todo en una tabla:

3
[15]: fa = df['edad'].value_counts(dropna=False).rename_axis('edad').
,→reset_index(name='fa')

fr = df['edad'].value_counts(dropna=False, normalize=True).rename_axis('edad').
,→reset_index(name='fr').drop(columns=['edad'])

faa = df['edad'].value_counts(dropna=False).cumsum().rename_axis('edad').
,→reset_index(name='faa').drop(columns=['edad'])

fra = df['edad'].value_counts(dropna=False, normalize=True).cumsum().


,→rename_axis('edad').reset_index(name='fra').drop(columns=['edad'])

fa.join(fr.join(faa.join(fra)))
[15]: edad fa fr faa fra
0 22.0 2 0.2 2 0.2
1 18.0 2 0.2 4 0.4
2 25.0 1 0.1 5 0.5
3 15.0 1 0.1 6 0.6
4 17.0 1 0.1 7 0.7
5 24.0 1 0.1 8 0.8
6 NaN 1 0.1 9 0.9
7 19.0 1 0.1 10 1.0
Frecuencias Cruzadas:
[16]: pd.crosstab(df['edad'], df['sexo'])
[16]: sexo Hombre Mujer
edad
15.0 0 1
17.0 1 0
18.0 2 0
19.0 0 1
22.0 1 1
24.0 0 1
25.0 1 0
[17]: pd.crosstab(df['edad'], df['estudios'])
[17]: estudios Estudios Primarios Estudios Secundarios Estudios Superiores
edad
15.0 1 0 0
17.0 0 1 0
18.0 2 0 0
19.0 0 1 0
22.0 0 1 1
24.0 0 0 1
25.0 0 0 1
[18]: pd.crosstab(df['estudios'], df['sexo'])
[18]: sexo Hombre Mujer
estudios

4
Estudios Primarios 2 1
Estudios Secundarios 1 2
Estudios Superiores 2 1
Sin estudios 1 0
[19]: pd.crosstab(df['edad'], [df['sexo'], df['estudios']])
[19]: sexo Hombre \
estudios Estudios Primarios Estudios Secundarios Estudios Superiores
edad
15.0 0 0 0
17.0 0 1 0
18.0 2 0 0
19.0 0 0 0
22.0 0 0 1
24.0 0 0 0
25.0 0 0 1

sexo Mujer
estudios Estudios Primarios Estudios Secundarios Estudios Superiores
edad
15.0 1 0 0
17.0 0 0 0
18.0 0 0 0
19.0 0 1 0
22.0 0 1 0
24.0 0 0 1
25.0 0 0 0
Tabla de frecuencias de una variable continua agrupada en intervalos:
Reportando los datos de forma tabular:
[20]: df['edad'].value_counts(bins=10)
[20]: (21.0, 22.0] 2
(17.0, 18.0] 2
(24.0, 25.0] 1
(23.0, 24.0] 1
(18.0, 19.0] 1
(16.0, 17.0] 1
(14.989, 16.0] 1
(22.0, 23.0] 0
(20.0, 21.0] 0
(19.0, 20.0] 0
Name: edad, dtype: int64
De forma gráfica:
[21]: plt.hist(df['edad'].dropna())
plt.title('Histograma Edad')
plt.xlabel('Edad')

5
plt.ylabel('Frecuencia')
plt.show()

Haciento uso del método cut:


[22]: rangos = [14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]
etiquetas =[1,2,3,4,5,6,7,8,9,10,11]
df['contenedor'] = pd.cut(df['edad'], bins=rangos, labels=etiquetas)
df
[22]: edad sexo estudios contenedor
0 18.0 Hombre Estudios Primarios 4
1 19.0 Mujer Estudios Secundarios 5
2 NaN Hombre Sin estudios NaN
3 18.0 Hombre Estudios Primarios 4
4 24.0 Mujer Estudios Superiores 10
5 17.0 Hombre Estudios Secundarios 3
6 22.0 Hombre Estudios Superiores 8
7 15.0 Mujer Estudios Primarios 1
8 22.0 Mujer Estudios Secundarios 8
9 25.0 Hombre Estudios Superiores 11
[23]: df['contenedor'].value_counts()
[23]: 8 2
4 2

6
11 1
10 1
5 1
3 1
1 1
9 0
7 0
6 0
2 0
Name: contenedor, dtype: int64

También podría gustarte