Análisis de datos#

Se importan las librerías

import pandas as pd

a) se leen los datos al dataframe

res = pd.read_csv('DatosSeguros.csv')
res.head(3)
edad sexo imc hijos fumador region valor_seguro
0 19 F 27.9 0 yes Caribe 16884.924
1 19 F 27.9 0 yes Caribe 16884.924
2 19 F 27.9 0 yes Caribe 16884.924

Descripción de los datos

res.describe()
edad imc hijos valor_seguro
count 1349.000000 1347.000000 1349.000000 1349.000000
mean 39.109711 30.618682 1.092661 13311.523280
std 14.071136 6.120026 1.205027 12135.346316
min 18.000000 15.960000 0.000000 1121.873900
25% 26.000000 26.220000 0.000000 4751.070000
50% 39.000000 30.300000 1.000000 9411.005000
75% 51.000000 34.600000 2.000000 16884.924000
max 64.000000 53.130000 5.000000 63770.428010
res.count()
edad            1349
sexo            1349
imc             1347
hijos           1349
fumador         1347
region          1349
valor_seguro    1349
dtype: int64

importar librebrias para graficar#

import matplotlib.pyplot as plt

a) comparación entre el total de fumadores contra los que pagan mas por el valor del seguro

# personas que fuman
cuenta_fumadores = res[res['fumador'] == 'yes'];
fuma = cuenta_fumadores['fumador'].count();
# cantidad de personas que no fuman
nofuma = res[res['fumador'] != 'yes']['fumador'].count();
print(f'fumadores: {fuma}, No fumadores: {nofuma}')
fumadores: 281, No fumadores: 1066
plt.pie(x=[fuma, nofuma], labels=['Fumadores','No fumadores'],  autopct='%1.1f%%',\
        explode=[0.1, 0], shadow=True);
plt.title('Figura 6 distribución porcentual de fumadores');
_images/actividad3_13_0.png

Gaficar un bloxplot donde se muestre el valor del seguro agrupado por fumadores

fig = res.boxplot("valor_seguro", by="fumador");
plt.ylabel('Valor_seguro');
plt.suptitle('');
plt.title('Boxplot valor por condición');
_images/actividad3_15_0.png

Generando el heatmap#

import seaborn as sns
dt = res[['valor_seguro','imc','hijos','edad']]

Compute pairwise correlation of columns

corr = dt.corr()
sns.heatmap(corr, linewidths=0.5, annot=True);
_images/actividad3_21_0.png

Se busca agrupar los datos por rango de edades#

Hay que crear una columna nueva calculada#

dt2 = res
dt2['Rango_edad'] = dt2.apply(lambda row: [[[['E','D'][row.edad < 50], 'C'][row.edad < 40], 'B'][row.edad < 30], 'A'][row.edad < 20], axis = 1)
fig = sns.relplot(x='Rango_edad' ,y='valor_seguro',hue='imc',data=dt2)
# fig.set_titles('Figura 11. Relación tres variables: valor seguro, rango de edad y el índice de masa corporal')
_images/actividad3_25_0.png
sns.barplot(data=dt2,x='Rango_edad',y='valor_seguro', hue='fumador');
_images/actividad3_26_0.png