Está en la página 1de 1

INFORME EVIDENCIA AA4-EV01.

Informe de resultados obtenidos del análisis de datos exploratorio realizado al caso de estudio.
Estudiante: Jose Daniel Minotta Saenz

Introducción
En el mundo actual, el análisis de datos se ha convertido en una herramienta fundamental para la toma de decisiones en cualquier organización. Es crucial entender cómo llevar a
cabo las validaciones de datos y valoraciones necesarias para aprobar o desaprobar las hipótesis planteadas en un caso de estudio. Además, aplicar la estadística de manera
adecuada nos permitirá determinar significancias, encontrando así respuestas a las preguntas que surgen al explorar los datos.

En esta actividad de aprendizaje, nuestro objetivo principal es comprender la importancia de aplicar técnicas estadísticas en la validación de modelos y en la toma de decisiones
asertivas que beneficien a una organización. Para alcanzar este propósito, hemos pasado por diferentes etapas, desde el análisis del negocio hasta la preparación, transformación y
visualización de los datos.

En este componente formativo, nos enfocaremos en cómo los resultados obtenidos a partir de diversas pruebas nos ayudarán a verificar las preguntas e hipótesis planteadas en el
caso de estudio que estamos desarrollando. Identificar los elementos clave para validar el modelo utilizado y alinearlos con los objetivos establecidos será esencial para tomar
decisiones informadas y efectivas.

De esta forma, aprenderemos a utilizar herramientas estadísticas para comprender y aprovechar al máximo la información obtenida durante la exploración de datos, y así poder
tomar decisiones fundamentadas y coherentes con los objetivos de la organización. ¡Comencemos este fascinante viaje hacia el análisis y la toma de decisiones basadas en datos!

Importar las bibliotecas necesarias


Para realizar la prueba de normalidad de Shapiro-Wilk y el gráfico QQ-Plot en Python, vamos a utilizar las bibliotecas scipy y statsmodels. Asegurandonos primero en tener estas
bibliotecas instaladas en nuestro entorno de Python.

In [34]: pip install scipy statsmodels

Requirement already satisfied: scipy in c:\users\daniel\anaconda3\lib\site-packages (1.10.1)


Requirement already satisfied: statsmodels in c:\users\daniel\anaconda3\lib\site-packages (0.13.5)
Requirement already satisfied: numpy<1.27.0,>=1.19.5 in c:\users\daniel\anaconda3\lib\site-packages (from scipy) (1.24.3)
Requirement already satisfied: pandas>=0.25 in c:\users\daniel\anaconda3\lib\site-packages (from statsmodels) (1.5.3)
Requirement already satisfied: patsy>=0.5.2 in c:\users\daniel\anaconda3\lib\site-packages (from statsmodels) (0.5.3)
Requirement already satisfied: packaging>=21.3 in c:\users\daniel\anaconda3\lib\site-packages (from statsmodels) (23.0)
Requirement already satisfied: python-dateutil>=2.8.1 in c:\users\daniel\anaconda3\lib\site-packages (from pandas>=0.25->statsmodels) (2.8.2)
Requirement already satisfied: pytz>=2020.1 in c:\users\daniel\anaconda3\lib\site-packages (from pandas>=0.25->statsmodels) (2022.7)
Requirement already satisfied: six in c:\users\daniel\anaconda3\lib\site-packages (from patsy>=0.5.2->statsmodels) (1.16.0)
Note: you may need to restart the kernel to use updated packages.

In [36]: import pandas as pd


import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import os
from scipy import stats
import statsmodels.api as sm

Aquí se importan las bibliotecas necesarias para realizar el análisis de datos. pandas se utiliza para la manipulación de datos en forma de DataFrames, numpy para operaciones
numéricas, matplotlib y seaborn para la visualización de datos, y os para operaciones con el sistema operativo.

Se carga el archivo CSV "Inmuebles_Disponibles_Para_La_Venta.csv" en un DataFrame llamado data.

In [37]: data = pd.read_csv("Inmuebles_Disponibles_Para_La_Venta.csv")

In [15]: data.head(5)

Out[15]: Area Area Detalle Tipo de


Codigo Ciudad Departamento Barrio Direccion Estrato Precio Datos Adicionales
Terreno Construida Disponibilidad Inmueble

CL 10 SUR # 34B-
SANTA 24 LT 2 MZ X-46 COMERCIALIZABLE LOTE
0 2330 BOGOTA CUNDINAMARCA 559804 0 TRES 134280960000000 NaN
MATILDE (SANTA CON RESTRICCION VIVIENDA
MATILDE...

KR 84 CON CL 10
ESTE INMUEBLE
LT # 8 DE SAN COMERCIALIZABLE LOTE
1 2363 BOGOTA CUNDINAMARCA TINTALA 302079 0 TRES 32857503970000 PRESENTA ZONA DE
JUAN DE CON RESTRICCION COMERCIAL
RESERVA VIAL, Q...
CASTILLA...

CRA. 10 #11- ESTE INMUEBLE SE


COMERCIALIZABLE
2 2575 SOGAMOSO BOYACÁ CENTRO 78/80 Ó CL 12 # 9 - 165508 726900 COMERCIAL 147133144000000 CLINICA COMERCIALIZARÁ A
CON RESTRICCION
77/85 Ó CALLE... TRAVÉS DE SU...

LOTE 3
PARCELACIÓN
LA COMERCIALIZABLE LOTE
3 2669 LA CALERA CUNDINAMARCA LOS CERROS 3000000 0 RURAL 5520000000000 NaN
CALERA CON RESTRICCION VIVIENDA
HACIENDA SAN
RAFAEL

DG 140 # 67 - 30
IN 6 (ZONA DE COMERCIALIZABLE LOTE
4 4408 BOGOTA CUNDINAMARCA SUBA 1774266 0 COMERCIAL 138038206000000 NaN
AFECTACIÓN CON RESTRICCION VIVIENDA
PLAN...

Muestra los primeros 30 registros del DataFrame data para tener una idea de los datos en el conjunto.

Plantear una pregunta objetivo


¿Cuál es la distribución de los precios de viviendas y locales para la venta?

Total de registros y total de columnas


Calcula y muestra la cantidad total de registros y columnas en el DataFrame data.

In [13]: total_registros = len(data)


total_columnas = len(data.columns)
print(f"Total de Registros: {total_registros}")
print(f"Total de Columnas: {total_columnas}")

Total de Registros: 448


Total de Columnas: 12

Detallado de cada columna


In [14]: detalles_columnas = data.dtypes
print(detalles_columnas)

Codigo int64
Ciudad object
Departamento object
Barrio object
Direccion object
Area Terreno int64
Area Construida int64
Detalle Disponibilidad object
Estrato object
Precio int64
Tipo de Inmueble object
Datos Adicionales object
dtype: object

Muestra los tipos de datos de cada columna en el DataFrame, lo que proporciona información sobre si las columnas son numéricas o categóricas.

Identificar cuáles de las columnas son categóricas y numéricas


In [30]: columnas_categoricas = data.select_dtypes(include=['object']).columns
columnas_numericas = data.select_dtypes(include=['int64', 'float64']).columns

print("Columnas Categóricas:")
print(columnas_categoricas)

print("Columnas Numéricas:")
print(columnas_numericas)

Columnas Categóricas:
Index(['Ciudad', 'Departamento', 'Barrio', 'Direccion',
'Detalle Disponibilidad', 'Estrato', 'Tipo de Inmueble',
'Datos Adicionales'],
dtype='object')
Columnas Numéricas:
Index(['Codigo', 'Area Terreno', 'Area Construida', 'Precio'], dtype='object')

Identifica y muestra las columnas categóricas (objetos) y numéricas (int64 y float64) en el DataFrame data.

Identificar en qué columnas existen valores nulos


In [31]: columnas_con_nulos = data.columns[data.isnull().any()]
print("Columnas con Valores Nulos:")
print(columnas_con_nulos)

Columnas con Valores Nulos:


Index(['Barrio', 'Datos Adicionales'], dtype='object')

Muestra las columnas que contienen valores nulos en el DataFrame data.

Identificar si existen registros duplicados


In [17]: registros_duplicados = data.duplicated().sum()
print(f"Total de Registros Duplicados: {registros_duplicados}")

Total de Registros Duplicados: 0

Calcula y muestra la cantidad total de registros duplicados en el DataFrame data.

Reporte estadístico de los datos numéricos


In [18]: reporte_estadistico = data.describe()
print(reporte_estadistico)

Codigo Area Terreno Area Construida Precio


count 448.000000 4.480000e+02 4.480000e+02 4.480000e+02
mean 17680.200893 1.619546e+06 1.155153e+04 9.372906e+12
std 2542.955951 1.858858e+07 1.285177e+05 3.817964e+13
min 2330.000000 0.000000e+00 0.000000e+00 0.000000e+00
25% 18128.750000 0.000000e+00 0.000000e+00 1.257250e+11
50% 18291.500000 0.000000e+00 0.000000e+00 1.652050e+11
75% 18472.000000 0.000000e+00 0.000000e+00 1.861440e+12
max 19353.000000 3.217197e+08 2.272400e+06 4.523379e+14

Identificación de columnas con valores erróneos


Para identificar columnas con valores erróneos en el DataFrame, podemos utilizar algunas técnicas y funciones de Pandas para realizar verificaciones y detección de datos
inconsistentes.

Este código mostrará información relevante sobre el DataFrame, incluyendo los tipos de datos de cada columna, la cantidad de valores nulos, la cantidad de valores únicos en cada
columna y una descripción básica de las columnas numéricas. También imprimirá los valores únicos encontrados en las columnas "Detalle Disponibilidad", "Estrato" y "Tipo de
Inmueble", lo que puede ayudarte a identificar posibles valores erróneos o atípicos en esas columnas.

In [43]: # Verificamos los tipos de datos de cada columna


print("Tipos de datos de cada columna:")
print(data.dtypes)

# Verificamos si hay valores nulos en cada columna


print("\nValores nulos en cada columna:")
print(data.isnull().sum())

# Verificamos valores únicos en cada columna


print("\nValores únicos en cada columna:")
print(data.nunique())

# Realizamos una descripción básica de las columnas numéricas


print("\nDescripción de columnas numéricas:")
print(data.describe())

# Verificamos los valores únicos de la columna 'Detalle Disponibilidad'


print("\nValores únicos en la columna 'Detalle Disponibilidad':")
print(data['Detalle Disponibilidad'].unique())

# Verificamos los valores únicos de la columna 'Estrato'


print("\nValores únicos en la columna 'Estrato':")
print(data['Estrato'].unique())

# Verificamos los valores únicos de la columna 'Tipo de Inmueble'


print("\nValores únicos en la columna 'Tipo de Inmueble':")
print(data['Tipo de Inmueble'].unique())

Tipos de datos de cada columna:


Codigo int64
Ciudad object
Departamento object
Barrio object
Direccion object
Area Terreno int64
Area Construida int64
Detalle Disponibilidad object
Estrato object
Precio int64
Tipo de Inmueble object
Datos Adicionales object
dtype: object

Valores nulos en cada columna:


Codigo 0
Ciudad 0
Departamento 0
Barrio 389
Direccion 0
Area Terreno 0
Area Construida 0
Detalle Disponibilidad 0
Estrato 0
Precio 0
Tipo de Inmueble 0
Datos Adicionales 371
dtype: int64

Valores únicos en cada columna:


Codigo 437
Ciudad 48
Departamento 15
Barrio 24
Direccion 435
Area Terreno 25
Area Construida 11
Detalle Disponibilidad 7
Estrato 9
Precio 205
Tipo de Inmueble 19
Datos Adicionales 52
dtype: int64

Descripción de columnas numéricas:


Codigo Area Terreno Area Construida Precio
count 448.000000 4.480000e+02 4.480000e+02 4.480000e+02
mean 17680.200893 1.619546e+06 1.155153e+04 9.372906e+12
std 2542.955951 1.858858e+07 1.285177e+05 3.817964e+13
min 2330.000000 0.000000e+00 0.000000e+00 0.000000e+00
25% 18128.750000 0.000000e+00 0.000000e+00 1.257250e+11
50% 18291.500000 0.000000e+00 0.000000e+00 1.652050e+11
75% 18472.000000 0.000000e+00 0.000000e+00 1.861440e+12
max 19353.000000 3.217197e+08 2.272400e+06 4.523379e+14

Valores únicos en la columna 'Detalle Disponibilidad':


['COMERCIALIZABLE CON RESTRICCION' 'COMERCIALIZABLE FIDUCIA'
'COMERCIALIZABLE' 'COMERCIALIZABLE CON RESTRICCION FIDUCIA' 'EN PUJA'
'COMERCIALIZABLE TERCEROS' 'COMERCIALIZABLE VENTA ANTICIPADA']

Valores únicos en la columna 'Estrato':


['TRES' 'COMERCIAL' 'RURAL' 'DOS' 'INDUSTRIAL' 'CUATRO' 'CINCO' 'UNO'
'SEIS']

Valores únicos en la columna 'Tipo de Inmueble':


['LOTE VIVIENDA' 'LOTE COMERCIAL' 'CLINICA' 'HOTEL' 'FINCA' 'BODEGA'
'LOCAL' 'LOTE MIXTO' 'LOTE INDUSTRIAL' 'EDIFICIO VIVIENDA' 'CASA'
'LOTE CON CONSTRUCCION' 'LOTE AGRICOLA' 'LOTE' 'EDIFICIO' 'OFICINA'
'APARTAMENTO' 'LOTE NO URBANIZABLE' 'GARAJE']

Gráficos para identificar valores atípicos


In [32]: plt.figure(figsize=(10, 6))
sns.boxplot(data=data[columnas_numericas])
plt.title("Diagrama de Caja para Identificar Valores Atípicos")
plt.xticks(rotation=45)
plt.show()

Visualiza un diagrama de caja (boxplot) para las columnas numéricas, lo que ayuda a identificar valores atípicos o datos extremos.

Histogramas de frecuencia
In [22]: data[columnas_numericas].hist(bins=30, figsize=(12, 8))
plt.suptitle("Histogramas de Frecuencia para Datos Numéricos", y=1.02)
plt.show()

Muestra histogramas de frecuencia para cada columna numérica en el DataFrame data. Esto permite visualizar la distribución de los datos y ver la concentración en diferentes
rangos.

Herramienta gráficas para determinar la correlación entre variables


In [23]: correlacion = data.corr()
plt.figure(figsize=(10, 8))
sns.heatmap(correlacion, annot=True, cmap='coolwarm', fmt=".2f", linewidths=0.5)
plt.title("Matriz de Correlación")
plt.show()

C:\Users\Daniel\AppData\Local\Temp\ipykernel_13028\1610654450.py:1: FutureWarning: The default value of numeric_only in DataFrame.corr is deprecate


d. In a future version, it will default to False. Select only valid columns or specify the value of numeric_only to silence this warning.
correlacion = data.corr()

Para determinar la correlación entre variables, podemos utilizar la herramienta de gráficos de Seaborn para visualizar la relación entre diferentes columnas numéricas del DataFrame.
Utilizaremos un mapa de calor (heatmap) para representar la matriz de correlación.

Este código generará un mapa de calor que muestra la correlación entre las variables numéricas del DataFrame. Los valores en el mapa de calor varían entre -1 y 1, donde 1 indica
una correlación positiva perfecta, -1 indica una correlación negativa perfecta y 0 indica que no hay correlación entre las variables.

Al analizar el mapa de calor, podemos identificar qué pares de variables están altamente correlacionados o inversamente correlacionados. Esto puede proporcionarnos información
valiosa sobre la relación entre las diferentes características de los inmuebles en el conjunto de datos.

Eliminación de datos nulos y duplicados


In [24]: data_limpia = data.drop_duplicates()
data_limpia = data_limpia.dropna()

# Comprobación
print(f"Registros originales: {len(data)}")
print(f"Registros limpios: {len(data_limpia)}")

Registros originales: 448


Registros limpios: 38

Crea un nuevo DataFrame llamado data_limpia que elimina registros duplicados y filas que contienen valores nulos. Luego muestra la cantidad de registros en el DataFrame original
y en el DataFrame limpio.

Agrupar columnas y crear nuevas columnas


En esta etapa, al observar el objetivo, podemos realizar la agrupación de datos y crear nuevas columnas a partir de las existentes.

Para agrupar columnas y obtener información importante, podemos realizar agregaciones y resúmenes estadísticos en función de categorías específicas. En este caso, considerando
el conjunto de datos de inmuebles, podríamos agrupar por ciudades, departamentos, barrios o estratos para obtener estadísticas relevantes sobre los inmuebles en cada grupo.

In [45]: # Agrupación por ciudad y estadísticas


grupo_ciudad = data.groupby('Ciudad')
estadisticas_ciudad = grupo_ciudad.agg({'Precio': ['mean', 'median', 'min', 'max', 'count']})

# Agrupación por departamento y estadísticas


grupo_departamento = data.groupby('Departamento')
estadisticas_departamento = grupo_departamento.agg({'Precio': ['mean', 'median', 'min', 'max', 'count']})

# Agrupación por barrio y estadísticas


grupo_barrio = data.groupby('Barrio')
estadisticas_barrio = grupo_barrio.agg({'Precio': ['mean', 'median', 'min', 'max', 'count']})

# Agrupación por estrato y estadísticas


grupo_estrato = data.groupby('Estrato')
estadisticas_estrato = grupo_estrato.agg({'Precio': ['mean', 'median', 'min', 'max', 'count']})

# Mostrar las estadísticas de cada grupo


print("Estadísticas por Ciudad:")
print(estadisticas_ciudad)

print("\nEstadísticas por Departamento:")


print(estadisticas_departamento)

print("\nEstadísticas por Barrio:")


print(estadisticas_barrio)

print("\nEstadísticas por Estrato:")


print(estadisticas_estrato)

Estadísticas por Ciudad:


Precio \
mean median min
Ciudad
AGUAZUL 1.393773e+13 8.834784e+12 4298641200000
ANGOSTURA 2.458146e+13 2.458146e+13 24581464440000
ARMERO 4.733173e+12 4.733173e+12 3533589780000
BARRANQUILLA 4.876485e+12 2.132058e+12 1590195200000
BITUIMA 4.806000e+12 4.806000e+12 4806000000000
BOGOTA 5.266377e+13 7.488734e+12 299400000000
BOLIVAR - CAUCA 7.378920e+12 7.378920e+12 7378920000000
BUGA 9.647077e+13 1.352597e+13 1482000000000
CALI 3.508178e+12 2.960534e+11 206080036800
CALIMA EL DARIEN 2.190472e+13 2.322155e+13 491680000000
CARMEN DE BOLIVAR 9.823680e+11 9.823680e+11 982368000000
CARTAGENA 4.077277e+13 4.572831e+13 0
CAUCASIA 5.821480e+12 5.821480e+12 5821480000000
CHIA 1.681354e+13 1.681354e+13 5771550000000
CUCUTA 2.477823e+12 1.798350e+12 1377450000000
CURITI 5.524860e+13 5.524860e+13 55248601890000
DAGUA 1.752779e+12 1.752779e+12 1752778880000
EL AGUILA 3.787283e+12 3.787283e+12 3787282600000
EL PLAYON 3.644256e+12 3.644256e+12 3644256000000
EL ROSAL 1.098399e+14 1.098399e+14 109839864000000
ENVIGADO 1.771210e+13 1.771210e+13 17712098400000
FUNZA 2.100891e+13 2.100891e+13 21008906000000
GIRARDOT 4.390119e+13 3.566111e+13 842625180000
IBAGUE 5.177907e+12 5.177907e+12 5177907200000
LA CALERA 5.520000e+12 5.520000e+12 5520000000000
LA DORADA 1.935606e+13 1.935606e+13 19356060000000
LA VIRGINIA 6.329541e+12 6.329541e+12 6329540900000
LOS PATIOS 1.785607e+12 1.785607e+12 1785606600000
MADRID 1.165653e+14 1.165653e+14 116565311500000
MANIZALES 6.216929e+12 3.355200e+11 335520000000
MARSELLA 2.400000e+11 2.400000e+11 240000000000
MEDELLIN 4.697335e+12 2.890525e+12 2685391200000
MONTERIA 6.648299e+12 5.351620e+12 673191500000
PEREIRA 6.326791e+12 6.930019e+11 65990400000
PIEDRAS 6.845111e+13 6.845111e+13 68451105930000
PUERTO LOPEZ 4.190155e+13 4.190155e+13 41901550210000
RICAURTE 1.040734e+14 1.040734e+14 104073361725000
SAN ANTONIO DEL TEQUENDAMA 1.833374e+13 1.833374e+13 18333741240000
SANTANDER DE QUILICHAO 7.251924e+12 7.251924e+12 341715000000
SOATA 6.829888e+12 6.829888e+12 6829888500000
SOGAMOSO 1.471331e+14 1.471331e+14 147133144000000
TARAZA 8.076210e+11 8.076210e+11 807621000000
TENJO 6.369860e+12 6.369860e+12 6369860000000
TIBU 5.805937e+12 5.805937e+12 5805937010000
TURBO 1.695740e+13 1.695740e+13 16957400000000
VILLA RICA 7.090341e+13 7.090341e+13 70903412109800
VILLAVICENCIO 1.761067e+11 1.257250e+11 69750000000
YUMBO 6.882840e+12 6.882840e+12 6882840000000

max count
Ciudad
AGUAZUL 28679755510000 3
ANGOSTURA 24581464440000 1
ARMERO 5932757000000 2
BARRANQUILLA 36673427000000 14
BITUIMA 4806000000000 1
BOGOTA 328393170351500 34
BOLIVAR - CAUCA 7378920000000 1
BUGA 452337898200000 5
CALI 16677840600000 7
CALIMA EL DARIEN 51713235000000 10
CARMEN DE BOLIVAR 982368000000 1
CARTAGENA 76590000000000 3
CAUCASIA 5821480000000 1
CHIA 27855540000000 2
CUCUTA 8980970000000 9
CURITI 55248601890000 1
DAGUA 1752778880000 1
EL AGUILA 3787282600000 1
EL PLAYON 3644256000000 1
EL ROSAL 109839864000000 1
ENVIGADO 17712098400000 1
FUNZA 21008906000000 1
GIRARDOT 103439900000000 4
IBAGUE 5177907200000 1
LA CALERA 5520000000000 1
LA DORADA 19356060000000 1
LA VIRGINIA 6329540900000 1
LOS PATIOS 1785606600000 1
MADRID 116565311500000 1
MANIZALES 66147000000000 13
MARSELLA 240000000000 1
MEDELLIN 12334844000000 5
MONTERIA 14356563410000 6
PEREIRA 43343535000000 12
PIEDRAS 68451105930000 1
PUERTO LOPEZ 41901550210000 1
RICAURTE 104073361725000 1
SAN ANTONIO DEL TEQUENDAMA 18333741240000 2
SANTANDER DE QUILICHAO 14162132860000 2
SOATA 6829888500000 1
SOGAMOSO 147133144000000 1
TARAZA 807621000000 1
TENJO 6369860000000 1
TIBU 5805937010000 1
TURBO 16957400000000 1
VILLA RICA 70903412109800 1
VILLAVICENCIO 10400137300000 285
YUMBO 6882840000000 1

Estadísticas por Departamento:


Precio \
mean median min
Departamento
ANTIOQUIA 8.936674e+12 4.356003e+12 807621000000
ATLÁNTICO 4.876485e+12 2.132058e+12 1590195200000
BOLÍVAR 3.082517e+13 2.335534e+13 0
BOYACÁ 7.698152e+13 7.698152e+13 6829888500000
CALDAS 7.155438e+12 3.657600e+11 335520000000
CASANARE 1.393773e+13 8.834784e+12 4298641200000
CAUCA 2.319654e+13 1.077053e+13 341715000000
CUNDINAMARCA 4.907451e+13 1.448242e+13 299400000000
CÓRDOBA 6.648299e+12 5.351620e+12 673191500000
META 3.219999e+11 1.257250e+11 69750000000
NORTE DE SANTANDER 2.717450e+12 1.798350e+12 1377450000000
RISARALDA 5.892216e+12 6.930019e+11 65990400000
SANTANDER 2.944643e+13 2.944643e+13 3644256000000
TOLIMA 2.077384e+13 5.555332e+12 3533589780000
VALLE DEL CAUCA 2.953525e+13 8.109750e+12 206080036800

max count
Departamento
ANTIOQUIA 24581464440000 10
ATLÁNTICO 36673427000000 14
BOLÍVAR 76590000000000 4
BOYACÁ 147133144000000 2
CALDAS 66147000000000 14
CASANARE 28679755510000 3
CAUCA 70903412109800 4
CUNDINAMARCA 328393170351500 49
CÓRDOBA 14356563410000 6
META 41901550210000 286
NORTE DE SANTANDER 8980970000000 11
RISARALDA 43343535000000 14
SANTANDER 55248601890000 2
TOLIMA 68451105930000 4
VALLE DEL CAUCA 452337898200000 25

Estadísticas por Barrio:


Precio \
mean median min
Barrio
AV 30 DE AGOSTO 5.596422e+11 4.373196e+11 65990400000
BELLAVISTA 1.785607e+12 1.785607e+12 1785606600000
CENTRO 5.417080e+13 8.000330e+12 7378920000000
CIUDADELA CHIPICHAPE 1.667784e+13 1.667784e+13 16677840600000
CONDOMINIO CAMPESTRE MONACO 1.040734e+14 1.040734e+14 104073361725000
CORREGIMIENTO EL CARMEN 1.752779e+12 1.752779e+12 1752778880000
EL CENTRO 9.094862e+12 9.094862e+12 9094862100000
EL HOYO 4.594622e+12 4.594622e+12 4594621970000
EL PRADO 3.667343e+13 3.667343e+13 36673427000000
GUACANDÁ 6.882840e+12 6.882840e+12 6882840000000
JOSE MARIA CABAL 7.503983e+12 7.503983e+12 1482000000000
LA CALERA 5.520000e+12 5.520000e+12 5520000000000
PARQUE IND CAUCADESA 1.416213e+13 1.416213e+13 14162132860000
PARQUE INDUSTRIAL CAUCADESA 7.090341e+13 7.090341e+13 70903412109800
PRADOS DEL NORTE 2.288067e+11 2.065467e+11 206080036800
SANTA MATILDE 1.342810e+14 1.342810e+14 134280960000000
SINAI 3.536640e+11 3.355200e+11 335520000000
SUBA 1.380382e+14 1.380382e+14 138038206000000
TINTALA 3.285750e+13 3.285750e+13 32857503970000
VEREDA CHAMBIMBAL 4.523379e+14 4.523379e+14 452337898200000
VEREDA DE CAMBULAR 4.806000e+12 4.806000e+12 4806000000000
VEREDA FONQUETA 2.785554e+13 2.785554e+13 27855540000000
VEREDA PALERMO 2.190472e+13 2.322155e+13 491680000000
VILLA DEL SUR 3.417150e+11 3.417150e+11 341715000000

max count
Barrio
AV 30 DE AGOSTO 1215089400000 10
BELLAVISTA 1785606600000 1
CENTRO 147133144000000 3
CIUDADELA CHIPICHAPE 16677840600000 1
CONDOMINIO CAMPESTRE MONACO 104073361725000 1
CORREGIMIENTO EL CARMEN 1752778880000 1
EL CENTRO 9094862100000 1
EL HOYO 4594621970000 1
EL PRADO 36673427000000 1
GUACANDÁ 6882840000000 1
JOSE MARIA CABAL 13525965504000 4
LA CALERA 5520000000000 1
PARQUE IND CAUCADESA 14162132860000 1
PARQUE INDUSTRIAL CAUCADESA 70903412109800 1
PRADOS DEL NORTE 296053386200 4
SANTA MATILDE 134280960000000 1
SINAI 396000000000 10
SUBA 138038206000000 1
TINTALA 32857503970000 1
VEREDA CHAMBIMBAL 452337898200000 1
VEREDA DE CAMBULAR 4806000000000 1
VEREDA FONQUETA 27855540000000 1
VEREDA PALERMO 51713235000000 10
VILLA DEL SUR 341715000000 1

Estadísticas por Estrato:


Precio
mean median min max count
Estrato
CINCO 1.597467e+13 9.591560e+12 162150000000 47473628000000 8
COMERCIAL 4.148109e+12 1.270700e+11 0 164605915000000 321
CUATRO 7.842248e+12 1.482000e+12 125725000000 36673427000000 13
DOS 1.301846e+13 3.960000e+11 65990400000 328393170351500 32
INDUSTRIAL 1.221250e+14 7.090341e+13 21008906000000 274462556400000 3
RURAL 3.075370e+13 1.541999e+13 491680000000 452337898200000 36
SEIS 7.057725e+12 2.132058e+12 299400000000 65794830000000 18
TRES 3.872825e+13 7.008470e+12 303688000000 295808119000000 16
UNO 9.823680e+11 9.823680e+11 982368000000 982368000000 1

En este código, hemos agrupado los datos por ciudad, departamento, barrio y estrato, y luego calculamos algunas estadísticas sobre el precio de los inmuebles en cada grupo, como
el promedio, la mediana, el valor mínimo, el valor máximo y la cantidad de inmuebles en cada grupo.

Esto nos permitirá obtener información importante sobre cómo varían los precios de los inmuebles según la ubicación o el estrato, lo que podría ser útil para tomar decisiones en el
mercado inmobiliario. Además, podemos adaptar las columnas de agrupación y las estadísticas según nuestras necesidades específicas para obtener más información relevante.

Crear nuevas columnas a partir de las existentes


Para crear nuevas columnas a partir de las existentes, podemos aplicar operaciones matemáticas, funciones o combinaciones de valores entre columnas existentes. A continuación,
te presento algunos ejemplos de cómo crear nuevas columnas basadas en las existentes en el conjunto de datos de inmuebles:

Supongamos que deseamos crear una columna que represente el precio del inmueble en dólares utilizando una tasa de cambio fija:

In [46]: # Cargamos el archivo CSV en un DataFrame


data = pd.read_csv("Inmuebles_Disponibles_Para_La_Venta.csv")

# Creamos una nueva columna 'Precio_Dolares' basada en 'Precio' y una tasa de cambio de 1 USD = 4000 COP
data['Tasa_Cambio'] = 4000
data['Precio_Dolares'] = data['Precio'] / data['Tasa_Cambio']

# Mostramos el DataFrame con la nueva columna


print(data.head())

Codigo Ciudad Departamento Barrio \


0 2330 BOGOTA CUNDINAMARCA SANTA MATILDE
1 2363 BOGOTA CUNDINAMARCA TINTALA
2 2575 SOGAMOSO BOYACÁ CENTRO
3 2669 LA CALERA CUNDINAMARCA LA CALERA
4 4408 BOGOTA CUNDINAMARCA SUBA

Direccion Area Terreno \


0 CL 10 SUR # 34B-24 LT 2 MZ X-46 (SANTA MATILDE... 559804
1 KR 84 CON CL 10 LT # 8 DE SAN JUAN DE CASTILLA... 302079
2 CRA. 10 #11- 78/80 Ó CL 12 # 9 - 77/85 Ó CALLE... 165508
3 LOTE 3 PARCELACIÓN LOS CERROS HACIENDA SAN RAFAEL 3000000
4 DG 140 # 67 - 30 IN 6 (ZONA DE AFECTACIÓN PLAN... 1774266

Area Construida Detalle Disponibilidad Estrato \


0 0 COMERCIALIZABLE CON RESTRICCION TRES
1 0 COMERCIALIZABLE CON RESTRICCION TRES
2 726900 COMERCIALIZABLE CON RESTRICCION COMERCIAL
3 0 COMERCIALIZABLE CON RESTRICCION RURAL
4 0 COMERCIALIZABLE CON RESTRICCION COMERCIAL

Precio Tipo de Inmueble \


0 134280960000000 LOTE VIVIENDA
1 32857503970000 LOTE COMERCIAL
2 147133144000000 CLINICA
3 5520000000000 LOTE VIVIENDA
4 138038206000000 LOTE VIVIENDA

Datos Adicionales Tasa_Cambio \


0 NaN 4000
1 ESTE INMUEBLE PRESENTA ZONA DE RESERVA VIAL, Q... 4000
2 ESTE INMUEBLE SE COMERCIALIZARÁ A TRAVÉS DE SU... 4000
3 NaN 4000
4 NaN 4000

Precio_Dolares
0 3.357024e+10
1 8.214376e+09
2 3.678329e+10
3 1.380000e+09
4 3.450955e+10

Si queremos crear una columna que indique si el inmueble es comercializable o no:

In [47]: # Cargamos el archivo CSV en un DataFrame


data = pd.read_csv("Inmuebles_Disponibles_Para_La_Venta.csv")

# Creamos una nueva columna 'Es_Comercializable' basada en 'Detalle Disponibilidad'


data['Es_Comercializable'] = data['Detalle Disponibilidad'].apply(lambda x: 'Sí' if 'COMERCIALIZABLE' in x else 'No')

# Mostramos el DataFrame con la nueva columna


print(data.head())

Codigo Ciudad Departamento Barrio \


0 2330 BOGOTA CUNDINAMARCA SANTA MATILDE
1 2363 BOGOTA CUNDINAMARCA TINTALA
2 2575 SOGAMOSO BOYACÁ CENTRO
3 2669 LA CALERA CUNDINAMARCA LA CALERA
4 4408 BOGOTA CUNDINAMARCA SUBA

Direccion Area Terreno \


0 CL 10 SUR # 34B-24 LT 2 MZ X-46 (SANTA MATILDE... 559804
1 KR 84 CON CL 10 LT # 8 DE SAN JUAN DE CASTILLA... 302079
2 CRA. 10 #11- 78/80 Ó CL 12 # 9 - 77/85 Ó CALLE... 165508
3 LOTE 3 PARCELACIÓN LOS CERROS HACIENDA SAN RAFAEL 3000000
4 DG 140 # 67 - 30 IN 6 (ZONA DE AFECTACIÓN PLAN... 1774266

Area Construida Detalle Disponibilidad Estrato \


0 0 COMERCIALIZABLE CON RESTRICCION TRES
1 0 COMERCIALIZABLE CON RESTRICCION TRES
2 726900 COMERCIALIZABLE CON RESTRICCION COMERCIAL
3 0 COMERCIALIZABLE CON RESTRICCION RURAL
4 0 COMERCIALIZABLE CON RESTRICCION COMERCIAL

Precio Tipo de Inmueble \


0 134280960000000 LOTE VIVIENDA
1 32857503970000 LOTE COMERCIAL
2 147133144000000 CLINICA
3 5520000000000 LOTE VIVIENDA
4 138038206000000 LOTE VIVIENDA

Datos Adicionales Es_Comercializable


0 NaN Sí
1 ESTE INMUEBLE PRESENTA ZONA DE RESERVA VIAL, Q... Sí
2 ESTE INMUEBLE SE COMERCIALIZARÁ A TRAVÉS DE SU... Sí
3 NaN Sí
4 NaN Sí

Se puede crear nuevas columnas según tus necesidades específicas y la lógica que desees aplicar a los datos existentes. Las operaciones que se puede aplicar son muy variadas,
desde cálculos matemáticos hasta funciones más complejas que involucren varias columnas. Con Pandas, se tiene muchas opciones para manipular y transformar los datos según
nuestros requerimientos.

Identifique columnas que no aportan de acuerdo con su pregunta objetivo


Para responder a la pregunta objetivo sobre la distribución de los precios de viviendas y locales para la venta, primero debemos filtrar los datos relevantes y luego visualizar la
distribución de los precios. En este caso, necesitamos agrupar los inmuebles por su tipo ("Tipo de Inmueble") y analizar la columna de precios ("Precio"). Aquí podemos ver el código
en Python para realizar esta tarea y visualizar las distribuciones:

In [29]: # Filtramos los datos para incluir solo viviendas y locales


inmuebles_vivienda = data[data['Tipo de Inmueble'] == 'LOTE VIVIENDA']
inmuebles_local = data[data['Tipo de Inmueble'] == 'LOTE COMERCIAL']

# Visualizamos las distribuciones de precios de viviendas y locales usando un histograma


plt.figure(figsize=(10, 6))
sns.histplot(inmuebles_vivienda['Precio'], bins=50, kde=True, color='blue', label='Viviendas')
sns.histplot(inmuebles_local['Precio'], bins=50, kde=True, color='orange', label='Locales')
plt.xlabel('Precio')
plt.ylabel('Frecuencia')
plt.title('Distribución de precios de viviendas y locales para la venta')
plt.legend()
plt.show()

Este código utiliza la biblioteca Seaborn para crear un histograma que muestra la distribución de los precios de viviendas y locales para la venta en el conjunto de datos. Los precios
se representarán en el eje x, y la frecuencia (número de inmuebles) se representará en el eje y. Los precios de viviendas se mostrarán en color azul y los precios de locales se
mostrarán en color naranja.

Al analizar el histograma resultante, podrás obtener una idea clara de cómo se distribuyen los precios de viviendas y locales en el conjunto de datos, lo que nos permitirá comprender
mejor el rango y la concentración de precios en cada categoría de inmueble.

Planteamiento de las hipótesis


La hipótesis nula (H0) y la hipótesis alternativa (H1 o HA) son afirmaciones que se hacen en el contexto de una prueba estadística para evaluar una pregunta de investigación o una
afirmación sobre los datos de una población. En el caso de la prueba de normalidad, estas hipótesis se formulan para evaluar si los datos siguen una distribución normal o no.

Hipótesis nula (H0): La hipótesis nula establece que los datos provienen de una población con una distribución normal. En términos más formales, significa que no hay diferencias
significativas entre la distribución de los datos observados y una distribución normal teórica.

Hipótesis alternativa (H1 o HA): La hipótesis alternativa es la afirmación opuesta a la hipótesis nula. En el caso de la prueba de normalidad, la hipótesis alternativa sugiere que los
datos no provienen de una distribución normal.

El planteamiento de la prueba formal de hipótesis es el siguiente:

H0: Los datos provienen de una distribución normal.

Vs.

H1: Los datos no provienen de una distribución normal.

Prueba de normalidad de Shapiro-Wilk


In [19]: # Cargar los datos desde el archivo CSV
df = pd.read_csv('Inmuebles_Disponibles_Para_La_Venta.csv')

## Realice conclusiones sobre las variables que considere tienen mayor # Supongamos que queremos realizar la prueba de normalidad para la columna 'P
columna_precio = 'Precio'

# Filtrar los datos para la columna seleccionada y eliminar los valores faltantes (NaN)
datos = df[columna_precio].dropna()

# Realizar la prueba de normalidad de Shapiro-Wilk


stat, p_valor = stats.shapiro(datos)

# Nivel de significancia para el test


nivel_significancia = 0.05

# Imprimir los resultados


print(f"Prueba de normalidad de Shapiro-Wilk para '{columna_precio}':")
print(f"Estadístico de prueba: {stat}")
print(f"P-valor: {p_valor}")
if p_valor > nivel_significancia:
print("Los datos parecen provenir de una distribución normal.")
else:
print("Los datos no parecen provenir de una distribución normal.")

# Generar el gráfico QQ-Plot


sm.qqplot(datos, line='s')
plt.title(f"QQ-Plot de '{columna_precio}'")
plt.show()

Prueba de normalidad de Shapiro-Wilk para 'Precio':


Estadístico de prueba: 0.252321720123291
P-valor: 7.449082632491829e-39
Los datos no parecen provenir de una distribución normal.

Basándonos en los resultados de la prueba de normalidad de Shapiro-Wilk para la columna 'Precio', podemos llegar a las siguientes conclusiones:

1. Estadístico de prueba: El valor del estadístico de prueba obtenido es de aproximadamente 0.2523. Este valor se utiliza para evaluar cuán cerca están los datos de una
distribución normal. Un valor cercano a 1 indica que los datos se ajustan bien a una distribución normal, mientras que un valor cercano a 0 indica una desviación significativa de
la normalidad.

2. P-valor: El p-valor calculado es extremadamente pequeño, aproximadamente 7.45e-39 (es decir, 0.0000000000000000000000000000000000000745). El p-valor es una medida
de la evidencia en contra de la hipótesis nula, que en este caso es la hipótesis de que los datos provienen de una distribución normal. Un p-valor tan pequeño indica que hay
evidencia suficiente para rechazar la hipótesis nula.

3. Conclusión: Dado que el p-valor es significativamente menor que el nivel de significancia (usualmente 0.05), rechazamos la hipótesis nula. Esto significa que los datos no
parecen provenir de una distribución normal. En otras palabras, la distribución de los precios de los inmuebles disponibles para la venta no sigue una forma de campana típica
que se encuentra en una distribución normal.

En resumen, los resultados sugieren que los precios de los inmuebles disponibles para la venta en la base de datos no se distribuyen normalmente. Esto es importante tenerlo en
cuenta al realizar análisis o modelos estadísticos que asuman una distribución normal de los datos. En este caso particular, podrías considerar otras pruebas o técnicas estadísticas
que sean más adecuadas para analizar la distribución de precios.

A continuación trataremos de solucionar el problema de normalidad aplicando diversos metodos de transformación con el objetivo de aproximar los datos a una distribución más
cercana a la normalidad. Al aplicar transformaciones a los datos, se busca encontrar una forma funcional que estabilice la varianza y acerque los datos a una distribución normal.

Transformación de raíz cuadrada:


In [21]: # Cargar los datos desde el archivo CSV
df = pd.read_csv('Inmuebles_Disponibles_Para_La_Venta.csv')

# Supongamos que queremos realizar la prueba de normalidad para la columna 'Precio'


columna_precio = 'Precio'

# Filtrar los datos para la columna seleccionada y eliminar los valores faltantes (NaN)
datos = df[columna_precio].dropna()

# Realizar transformación de raíz cuadrada a los datos


datos_transformados = np.sqrt(datos)

# Realizar la prueba de normalidad de Shapiro-Wilk para los datos transformados


stat, p_valor = stats.shapiro(datos_transformados)

# Nivel de significancia para el test


nivel_significancia = 0.05

# Imprimir los resultados de la prueba de Shapiro-Wilk


print(f"Prueba de normalidad de Shapiro-Wilk para '{columna_precio}' (datos transformados):")
print(f"Estadístico de prueba: {stat}")
print(f"P-valor: {p_valor}")
if p_valor > nivel_significancia:
print("Los datos transformados parecen provenir de una distribución normal.")
else:
print("Los datos transformados no parecen provenir de una distribución normal.")

# Generar el gráfico QQ-Plot para los datos transformados


sm.qqplot(datos_transformados, line='s')
plt.title(f"QQ-Plot de '{columna_precio}' (datos transformados)")
plt.show()

Prueba de normalidad de Shapiro-Wilk para 'Precio' (datos transformados):


Estadístico de prueba: 0.5023534297943115
P-valor: 1.5510818773122938e-33
Los datos transformados no parecen provenir de una distribución normal.

La interpretación de los resultados de la prueba de normalidad de Shapiro-Wilk utilizando la transforación de la raíz cuadrada es la siguiente:

Estadístico de prueba: 0.5023534297943115 El valor del estadístico de prueba de Shapiro-Wilk es un número que se utiliza para evaluar la normalidad de los datos transformados.
En este caso, el valor del estadístico es aproximadamente 0.502, lo cual no es cercano a 1. Un valor cercano a 1 indicaría que los datos se ajustan bien a una distribución normal. Sin
embargo, al ser 0.502, sugiere que los datos transformados tienen una distribución diferente a la normal.

P-valor: 1.5510818773122938e-33 El valor del p-valor es una medida de la evidencia en contra de la hipótesis nula, que en este caso es que los datos transformados provienen de
una distribución normal. Un valor de p-valor muy pequeño (cercano a cero) indica una fuerte evidencia en contra de la hipótesis nula. En este caso, el p-valor es aproximadamente
1.55e-33 (una notación científica para 1.55 multiplicado por 10 elevado a la potencia -33), lo cual es extremadamente pequeño. Esto significa que hay una fuerte evidencia en contra
de que los datos transformados provengan de una distribución normal.

Interpretación final: Dado que el p-valor es menor que el nivel de significancia (usualmente 0.05 o 5%), se rechaza la hipótesis nula. En otras palabras, hay suficiente evidencia para
afirmar que los datos transformados no provienen de una distribución normal.

Transformación de Box-Cox
In [28]: # Cargar los datos desde el archivo CSV
df = pd.read_csv('Inmuebles_Disponibles_Para_La_Venta.csv')

# Supongamos que queremos realizar la prueba de normalidad para la columna 'Precio'


columna_precio = 'Precio'

# Filtrar los datos para la columna seleccionada y eliminar los valores faltantes (NaN)
datos = df[columna_precio].dropna()

# Agregar una constante positiva para asegurarnos de que todos los datos sean positivos
constante_c = 0.001
datos_transformados, lambda_value = stats.boxcox(datos + constante_c)

# Realizar la prueba de normalidad de Shapiro-Wilk para los datos transformados


stat, p_valor = stats.shapiro(datos_transformados)

# Nivel de significancia para el test


nivel_significancia = 0.05

# Imprimir los resultados de la prueba de Shapiro-Wilk


print(f"Prueba de normalidad de Shapiro-Wilk para '{columna_precio}' (datos transformados):")
print(f"Estadístico de prueba: {stat}")
print(f"P-valor: {p_valor}")
if p_valor > nivel_significancia:
print("Los datos transformados parecen provenir de una distribución normal.")
else:
print("Los datos transformados no parecen provenir de una distribución normal.")

# Generar el gráfico QQ-Plot para los datos transformados


sm.qqplot(datos_transformados, line='s')
plt.title(f"QQ-Plot de '{columna_precio}' (datos transformados)")
plt.show()

Prueba de normalidad de Shapiro-Wilk para 'Precio' (datos transformados):


Estadístico de prueba: 0.760513424873352
P-valor: 5.236549407861177e-25
Los datos transformados no parecen provenir de una distribución normal.

La interpretación de los resultados de la prueba de normalidad de Shapiro-Wilk es la siguiente:

1. Estadístico de prueba: 0.760513424873352 El valor del estadístico de prueba de Shapiro-Wilk es un número que se utiliza para evaluar la normalidad de los datos
transformados. En este caso, el valor del estadístico es aproximadamente 0.761, lo cual no es cercano a 1. Un valor cercano a 1 indicaría que los datos se ajustan bien a una
distribución normal. Sin embargo, al ser 0.761, sugiere que los datos transformados tienen una distribución diferente a la normal.

2. P-valor: 5.236549407861177e-25 El valor del p-valor es una medida de la evidencia en contra de la hipótesis nula, que en este caso es que los datos transformados provienen
de una distribución normal. Un valor de p-valor muy pequeño (cercano a cero) indica una fuerte evidencia en contra de la hipótesis nula. En este caso, el p-valor es
aproximadamente 5.24e-25 (una notación científica para 5.24 multiplicado por 10 elevado a la potencia -25), lo cual es extremadamente pequeño. Esto significa que hay una
fuerte evidencia en contra de que los datos transformados provengan de una distribución normal.

3. Interpretación final: Dado que el p-valor es menor que el nivel de significancia (usualmente 0.05 o 5%), se rechaza la hipótesis nula. En otras palabras, hay suficiente evidencia
para afirmar que los datos transformados no provienen de una distribución normal.

En conclusión, según los resultados de la prueba de normalidad de Shapiro-Wilk, los datos transformados no se ajustan bien a una distribución normal.

Finalmente trataremos de solucionarlo utilizando el método de Mínimos Cuadrados Ponderados


In [25]: pip install statsmodels==0.12.2

Note: you may need to restart the kernel to use updated packages.
ERROR: Ignored the following versions that require a different python version: 1.6.2 Requires-Python >=3.7,<3.10; 1.6.3 Requires-Python >=3.7,<3.1
0; 1.7.0 Requires-Python >=3.7,<3.10; 1.7.1 Requires-Python >=3.7,<3.10; 1.7.2 Requires-Python >=3.7,<3.11; 1.7.3 Requires-Python >=3.7,<3.11; 1.8.
0 Requires-Python >=3.8,<3.11; 1.8.0rc1 Requires-Python >=3.8,<3.11; 1.8.0rc2 Requires-Python >=3.8,<3.11; 1.8.0rc3 Requires-Python >=3.8,<3.11; 1.
8.0rc4 Requires-Python >=3.8,<3.11; 1.8.1 Requires-Python >=3.8,<3.11
ERROR: Could not find a version that satisfies the requirement scipy==1.6.3 (from versions: 0.8.0, 0.9.0, 0.10.0, 0.10.1, 0.11.0, 0.12.0, 0.12.1,
0.13.0, 0.13.1, 0.13.2, 0.13.3, 0.14.0, 0.14.1, 0.15.0, 0.15.1, 0.16.0, 0.16.1, 0.17.0, 0.17.1, 0.18.0, 0.18.1, 0.19.0, 0.19.1, 1.0.0, 1.0.1, 1.1.
0, 1.2.0, 1.2.1, 1.2.2, 1.2.3, 1.3.0, 1.3.1, 1.3.2, 1.3.3, 1.4.0, 1.4.1, 1.5.0, 1.5.1, 1.5.2, 1.5.3, 1.5.4, 1.6.0, 1.6.1, 1.9.0rc1, 1.9.0rc2, 1.9.0
rc3, 1.9.0, 1.9.1, 1.9.2, 1.9.3, 1.10.0rc1, 1.10.0rc2, 1.10.0, 1.10.1, 1.11.0rc1, 1.11.0rc2, 1.11.0, 1.11.1)
ERROR: No matching distribution found for scipy==1.6.3

In [27]: # Cargar los datos desde el archivo CSV


df = pd.read_csv('Inmuebles_Disponibles_Para_La_Venta.csv')

# Supongamos que queremos realizar la prueba de normalidad para la columna 'Precio'


columna_precio = 'Precio'

# Filtrar los datos para la columna seleccionada y eliminar los valores faltantes (NaN)
datos = df[columna_precio].dropna()

# Ajustar el modelo de Mínimos Cuadrados Ponderados (WLS)


modelo_wls = sm.WLS(datos, sm.add_constant(range(len(datos))), weights=1/datos.var())

# Ajustar el modelo y obtener los resultados


resultados_wls = modelo_wls.fit()

# Obtener los residuos del modelo ajustado


residuos = resultados_wls.resid

# Realizar la prueba de normalidad de Shapiro-Wilk para los residuos


stat, p_valor = stats.shapiro(residuos)

# Nivel de significancia para el test


nivel_significancia = 0.05

# Imprimir los resultados de la prueba de Shapiro-Wilk


print(f"Prueba de normalidad de Shapiro-Wilk para los residuos del modelo WLS:")
print(f"Estadístico de prueba: {stat}")
print(f"P-valor: {p_valor}")
if p_valor > nivel_significancia:
print("Los residuos del modelo WLS parecen provenir de una distribución normal.")
else:
print("Los residuos del modelo WLS no parecen provenir de una distribución normal.")

# Generar el gráfico QQ-Plot para los residuos del modelo WLS


sm.qqplot(residuos, line='s')
plt.title("QQ-Plot de los residuos del modelo WLS")
plt.show()

Prueba de normalidad de Shapiro-Wilk para los residuos del modelo WLS:


Estadístico de prueba: 0.33506715297698975
P-valor: 2.79523103129788e-37
Los residuos del modelo WLS no parecen provenir de una distribución normal.

La interpretación de los resultados de la prueba de normalidad de Shapiro-Wilk para los residuos del modelo WLS es la siguiente:

1. Estadístico de prueba: 0.33506715297698975 El valor del estadístico de prueba de Shapiro-Wilk es un número que se utiliza para evaluar la normalidad de los residuos del
modelo WLS. En este caso, el valor del estadístico es aproximadamente 0.335, lo cual no es cercano a 1. Un valor cercano a 1 indicaría que los residuos se ajustan bien a una
distribución normal. Sin embargo, al ser 0.335, sugiere que los residuos tienen una distribución diferente a la normal.

2. P-valor: 2.79523103129788e-37 El valor del p-valor es una medida de la evidencia en contra de la hipótesis nula, que en este caso es que los residuos del modelo WLS
provienen de una distribución normal. Un valor de p-valor muy pequeño (cercano a cero) indica una fuerte evidencia en contra de la hipótesis nula. En este caso, el p-valor es
aproximadamente 2.80e-37 (una notación científica para 2.80 multiplicado por 10 elevado a la potencia -37), lo cual es extremadamente pequeño. Esto significa que hay una
fuerte evidencia en contra de que los residuos del modelo WLS provengan de una distribución normal.

3. Interpretación final: Dado que el p-valor es menor que el nivel de significancia (usualmente 0.05 o 5%), se rechaza la hipótesis nula. En otras palabras, hay suficiente evidencia
para afirmar que los residuos del modelo WLS no provienen de una distribución normal.

En conclusión, según los resultados de la prueba de normalidad de Shapiro-Wilk para los residuos del modelo WLS, estos no se ajustan bien a una distribución normal. Esto puede
tener implicaciones en el uso de ciertos métodos estadísticos o en la interpretación de los resultados del modelo WLS.

Conclusion de la prueba de hipótesis


Basándonos en el análisis realizado sobre los datos de inmuebles disponibles para la venta y considerando la pregunta objetivo de la distribución de precios de viviendas y locales,
podemos extraer algunas conclusiones sobre las variables que consideramos tener mayor relevancia:

Tipo de Inmueble: La variable "Tipo de Inmueble" es crucial para nuestro análisis, ya que nos permite distinguir entre viviendas y locales comerciales. Esto nos ayuda a separar los
datos y visualizar la distribución de precios para cada categoría de inmueble de manera individual.

Precio: La variable "Precio" es la más importante para nuestro análisis, ya que es la que nos proporciona información sobre los valores monetarios de los inmuebles. Al analizar la
distribución de precios, podemos obtener una comprensión clara de cómo están distribuidos los valores de venta tanto para viviendas como para locales comerciales.

Estrato: Aunque no se mencionó explícitamente en la pregunta objetivo, la variable "Estrato" también puede ser relevante, ya que puede influir en el precio de los inmuebles.
Podríamos realizar análisis adicionales para determinar cómo el estrato afecta la distribución de precios y si hay alguna correlación entre el estrato y los precios.

Detalle Disponibilidad / Es_Comercializable: La variable "Detalle Disponibilidad" no parece ser crucial para nuestro objetivo, pero se utilizó para crear una nueva columna llamada
"Es_Comercializable", que nos indica si un inmueble es comercializable o no. Esto puede ser relevante para futuros análisis o toma de decisiones sobre qué tipo de inmuebles están
disponibles para venta comercial.

En resumen, las variables más relevantes para el análisis de la distribución de precios de viviendas y locales para la venta son el "Tipo de Inmueble" y el "Precio". El estrato y la
disponibilidad comercial también pueden ser relevantes, pero su impacto dependerá de la pregunta específica que queramos responder o del análisis adicional que realicemos.
Siempre es importante adaptar el análisis a los objetivos específicos y utilizar las variables más relevantes para obtener información significativa.

Conclusiones sobre las variables que tienen mayor relevancia


A pesar de haber aplicado varios métodos de transformación en un intento por aproximar los datos a una distribución normal, los resultados de las pruebas de normalidad (como la
prueba de Shapiro-Wilk) siguen indicando que los datos transformados no cumplen con el supuesto de normalidad. Esto implica que no se ha logrado encontrar una transformación
adecuada que haga que los datos se ajusten bien a una distribución normal.

En base a los resultados obtenidos y considerando un nivel de significancia (alpha) de 0.05, se concluye que existe suficiente evidencia para rechazar la Hipótesis nula (H0), que
afirmaba que los datos provienen de una distribución normal. En cambio, se acepta la hipótesis alternativa (H1), que sugiere que los datos no provienen de una distribución normal.

Por otro lado el resultado obtenido por medio de la transformación de Box-Cox El tiene el valor más alto del estadístico de prueba de Shapiro-Wilk (0.7605), lo que indica una mayor
aproximación a la normalidad en comparación con los otros resultados.

Por lo tanto, el resultado número 3 (Prueba de normalidad de Shapiro-Wilk para 'Precio' (datos transformados)) es el que más se aproxima a la normalidad en comparación con los
otros resultados. Sin embargo, es importante tener en cuenta que, aunque este resultado muestra una mayor aproximación a la normalidad, sigue indicando que los datos
transformados no provienen de una distribución normal, lo que puede tener implicaciones en ciertos análisis estadísticos que asumen esta distribución.

También podría gustarte