title: “Visualización de Datos”

output: html_document

import seaborn as sns
import pandas as pd

# Cargar archivo desde carpeta sample_data
df = pd.read_excel("C:/Users/HP/Documents/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
## age               float64
## sex                object
## current_smoker     object
## heart_rate        float64
## blood_pressure     object
## cigs_per_day      float64
## chol              float64
## dtype: object
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}")
## 1. Valor p: 0.0003
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.")
## → 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()

cholesterol = df['chol'].dropna()
stat, p = ttest_1samp(cholesterol, 200)

print(f"2. Valor p (una cola): {p/2:.4f}")
## 2. Valor p (una cola): 0.0000
if stat > 0 and p/2 < 0.05:
    print("→ Rechazamos H₀: El colesterol medio es mayor a 200.")
else:
    print("→ No se rechaza H₀.")
## → 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()

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}")
## 3. Valor p: 0.0000
if p_val < 0.05:
    print("→ Rechazamos H₀: Proporción mayor al 20%.")
else:
    print("→ No se rechaza H₀.")
## → 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'])
## ([<matplotlib.axis.XTick object at 0x0000028CA1AF6110>, <matplotlib.axis.XTick object at 0x0000028CA1993C50>], [Text(0, 0, '≤240 mg/dL'), Text(1, 0, '>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()

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'])
## ([<matplotlib.axis.XTick object at 0x0000028CA191BF10>, <matplotlib.axis.XTick object at 0x0000028CA194DB90>], [Text(0, 0, 'Normal'), Text(1, 0, 'Colesterol Alto')])
plt.ylabel('Proporción')
plt.title('Proporción de Personas con Colesterol Alto')
plt.ylim(0, 1)
## (0.0, 1.0)
plt.axhline(0.20, color='red', linestyle='--', label='Límite del 20%')
plt.legend()
plt.show()

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}")
## 4. Valor p: 1.0000
if p_val < 0.05:
    print("→ Rechazamos H₀: Proporción distinta al 5%.")
else:
    print("→ No se rechaza H₀.")
## → 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'])
## ([<matplotlib.axis.XTick object at 0x0000028CA1BD97D0>, <matplotlib.axis.XTick object at 0x0000028CA1454DD0>], [Text(0, 0, 'Normal'), Text(1, 0, 'Taquicardia')])
plt.ylabel('Proporción')
plt.title('Proporción de Personas con Taquicardia')
plt.ylim(0, 1)
## (0.0, 1.0)
plt.axhline(0.20, color='red', linestyle='--', label='Límite del 20%')
plt.legend()
plt.show()

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'])
## ([<matplotlib.axis.XTick object at 0x0000028CA7C0C3D0>, <matplotlib.axis.XTick object at 0x0000028CA1BF5710>], [Text(0, 0, 'Sin Taquicardia'), Text(1, 0, 'Con Taquicardia')])
plt.ylabel('Proporción')
plt.title('Proporción de Taquicardia en la Muestra')
plt.ylim(0, 1)
## (0.0, 1.0)
plt.axhline(0.20, color='red', linestyle='--', label='Límite del 20%')
plt.legend()
plt.show()

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}")
## 5. Valor p: 0.0036
if p < 0.05:
    print("→ Rechazamos H₀: Hay diferencia significativa entre medias.")
else:
    print("→ No se rechaza H₀.")
## → 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()

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}")
## 6. Valor p (una cola): 0.0002
if stat > 0 and p/2 < 0.05:
    print("→ Rechazamos H₀: Fumadores tienen mayor frecuencia cardíaca.")
else:
    print("→ No se rechaza H₀.")
## → 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()