import seaborn as sns


import pandas as pd

# Cargar archivo desde carpeta sample_data
df = pd.read_excel("/content/sample_data/smoking_health_data.xlsx")

# Convertir columnas numéricas con coma a float
columnas = ['age', 'heart_rate', 'cigs_per_day', 'chol']
for col in columnas:
    df[col] = df[col].astype(str).str.replace(',', '.').astype(float)

# Confirmar estructura
df.dtypes
0
age float64
sex object
current_smoker object
heart_rate float64
blood_pressure object
cigs_per_day float64
chol float64


from scipy.stats import ttest_1samp

heart_rates = df['heart_rate'].dropna()
stat, p = ttest_1samp(heart_rates, 75)

print(f"1. Valor p: {p:.4f}")
if p < 0.05:
    print("→ Rechazamos H₀: La media no es igual a 75.")
else:
    print("→ No se rechaza H₀: La media podría ser 75.")
1. Valor p: 0.0003
→ Rechazamos H₀: La media no es igual a 75.
import seaborn as sns
import matplotlib.pyplot as plt

plt.figure(figsize=(8, 5))
sns.histplot(df['heart_rate'], kde=True, bins=20, color='skyblue')
plt.axvline(75, color='red', linestyle='--', label='Media de referencia = 75')
plt.title('Distribución de la frecuencia cardíaca')
plt.xlabel('Frecuencia cardíaca (lpm)')
plt.ylabel('Cantidad de personas')
plt.legend()
plt.grid(True)
plt.show()
png
png
cholesterol = df['chol'].dropna()
stat, p = ttest_1samp(cholesterol, 200)

print(f"2. Valor p (una cola): {p/2:.4f}")
if stat > 0 and p/2 < 0.05:
    print("→ Rechazamos H₀: El colesterol medio es mayor a 200.")
else:
    print("→ No se rechaza H₀.")
2. Valor p (una cola): 0.0000
→ Rechazamos H₀: El colesterol medio es mayor a 200.
plt.figure(figsize=(8, 5))
sns.histplot(df['chol'], kde=True, bins=20, color='orange')
plt.axvline(200, color='red', linestyle='--', label='Límite = 200 mg/dL')
plt.title('Distribución del colesterol')
plt.xlabel('Colesterol (mg/dL)')
plt.ylabel('Cantidad de personas')
plt.legend()
plt.grid(True)
plt.show()
png
png
from scipy.stats import binomtest

df['colesterol_alto'] = (df['chol'] > 240).astype(int)
exitos = df['colesterol_alto'].sum()
n = df['colesterol_alto'].count()

p_val = binomtest(exitos, n, p=0.20, alternative='greater').pvalue

print(f"3. Valor p: {p_val:.4f}")
if p_val < 0.05:
    print("→ Rechazamos H₀: Proporción mayor al 20%.")
else:
    print("→ No se rechaza H₀.")
3. Valor p: 0.0000
→ Rechazamos H₀: Proporción mayor al 20%.
import matplotlib.pyplot as plt
# 3. Conteo de personas con colesterol alto
sns.countplot(x='colesterol_alto', data=df, palette='Set2')
plt.xticks([0, 1], ['≤240 mg/dL', '>240 mg/dL'])
plt.title('Frecuencia de colesterol alto')
plt.xlabel('Colesterol alto')
plt.ylabel('Cantidad de personas')
plt.grid(True, axis='y')
plt.show()
<ipython-input-9-89ac87fbd4f6>:2: FutureWarning: 

Passing `palette` without assigning `hue` is deprecated and will be removed in v0.14.0. Assign the `x` variable to `hue` and set `legend=False` for the same effect.

  sns.countplot(x='colesterol_alto', data=df, palette='Set2')
png
png

col_counts = df['colesterol_alto'].value_counts(normalize=True)

plt.figure(figsize=(6, 4))
sns.barplot(x=col_counts.index, y=col_counts.values)
plt.xticks([0, 1], ['Normal', 'Colesterol Alto'])
plt.ylabel('Proporción')
plt.title('Proporción de Personas con Colesterol Alto')
plt.ylim(0, 1)
plt.axhline(0.20, color='red', linestyle='--', label='Límite del 20%')
plt.legend()
plt.show()
png
png
df['taquicardia'] = (df['heart_rate'] > 100).astype(int)
exitos = df['taquicardia'].sum()
n = df['taquicardia'].count()

p_val = binomtest(exitos, n, p=0.20, alternative='greater').pvalue
print(f"4. Valor p: {p_val:.4f}")
if p_val < 0.05:
    print("→ Rechazamos H₀: Proporción distinta al 5%.")
else:
    print("→ No se rechaza H₀.")
4. Valor p: 1.0000
→ No se rechaza H₀.
taqui_counts = df['taquicardia'].value_counts(normalize=True)

plt.figure(figsize=(6, 4))
sns.barplot(x=taqui_counts.index, y=taqui_counts.values)
plt.xticks([0, 1], ['Normal', 'Taquicardia'])
plt.ylabel('Proporción')
plt.title('Proporción de Personas con Taquicardia')
plt.ylim(0, 1)
plt.axhline(0.20, color='red', linestyle='--', label='Límite del 20%')
plt.legend()
plt.show()
png
png
import seaborn as sns
import matplotlib.pyplot as plt

# Conteo de personas con y sin taquicardia
taqui_counts = df['taquicardia'].value_counts(normalize=True)

plt.figure(figsize=(6, 4))
sns.barplot(x=taqui_counts.index, y=taqui_counts.values)
plt.xticks([0, 1], ['Sin Taquicardia', 'Con Taquicardia'])
plt.ylabel('Proporción')
plt.title('Proporción de Taquicardia en la Muestra')
plt.ylim(0, 1)
plt.axhline(0.20, color='red', linestyle='--', label='Límite del 20%')
plt.legend()
plt.show()
png
png
from scipy.stats import ttest_ind

fumadores = df[df['current_smoker'] == 'yes']['chol'].dropna()
no_fumadores = df[df['current_smoker'] == 'no']['chol'].dropna()

stat, p = ttest_ind(fumadores, no_fumadores, equal_var=False)
print(f"5. Valor p: {p:.4f}")
if p < 0.05:
    print("→ Rechazamos H₀: Hay diferencia significativa entre medias.")
else:
    print("→ No se rechaza H₀.")
5. Valor p: 0.0036
→ Rechazamos H₀: Hay diferencia significativa entre medias.
plt.figure(figsize=(8, 5))
sns.boxplot(data=df, x='current_smoker', y='chol')
plt.title('Colesterol por Estado de Fumador')
plt.xlabel('Fumador (1 = Sí, 0 = No)')
plt.ylabel('Colesterol')
plt.show()
png
png
fumadores = df[df['current_smoker'] == 'yes']['heart_rate'].dropna()
no_fumadores = df[df['current_smoker'] == 'no']['heart_rate'].dropna()

stat, p = ttest_ind(fumadores, no_fumadores, equal_var=False)
print(f"6. Valor p (una cola): {p/2:.4f}")
if stat > 0 and p/2 < 0.05:
    print("→ Rechazamos H₀: Fumadores tienen mayor frecuencia cardíaca.")
else:
    print("→ No se rechaza H₀.")
6. Valor p (una cola): 0.0002
→ Rechazamos H₀: Fumadores tienen mayor frecuencia cardíaca.
import seaborn as sns
import matplotlib.pyplot as plt

# Boxplot: frecuencia cardíaca por grupo de fumadores
plt.figure(figsize=(8, 5))
sns.boxplot(data=df, x='current_smoker', y='heart_rate')
plt.title('Frecuencia Cardíaca por Estado de Fumador')
plt.xlabel('Fumador (1 = Sí, 0 = No)')
plt.ylabel('Frecuencia Cardíaca')
plt.show()

# Histograma: distribución de frecuencia cardíaca por grupo
plt.figure(figsize=(8, 5))
sns.histplot(data=df, x='heart_rate', hue='current_smoker', kde=True, bins=20)
plt.title('Distribución de la Frecuencia Cardíaca')
plt.xlabel('Frecuencia Cardíaca')
plt.ylabel('Frecuencia')
plt.show()
png
png
png
png