diff --git a/features-NLTK.ipynb b/featuresNLTK.ipynb similarity index 55% rename from features-NLTK.ipynb rename to featuresNLTK.ipynb index 09b75af..7d15fdf 100644 --- a/features-NLTK.ipynb +++ b/featuresNLTK.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "metadata": {}, "outputs": [ { @@ -28,7 +28,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -40,7 +40,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -61,7 +61,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -87,7 +87,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -120,7 +120,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -130,99 +130,18 @@ "La cantidad de publicaciones con titulo no nulo es: 234613\n", "La cantidad total de publicaciones es: 240000\n" ] - }, - { - "data": { - "text/html": [ - "
| \n", - " | id | \n", - "titulo | \n", - "cant_palabras_mas_frecuentes_titulo | \n", - "
|---|---|---|---|
| 0 | \n", - "254099 | \n", - "depto. tipo a-402 | \n", - "1.0 | \n", - "
| 1 | \n", - "53461 | \n", - "condominio horizontal en venta | \n", - "3.0 | \n", - "
| 2 | \n", - "247984 | \n", - "casa en venta urbi 3 recamaras tonala | \n", - "3.0 | \n", - "
| 3 | \n", - "209067 | \n", - "casa sola en toluca zinacantepec con credito i... | \n", - "4.0 | \n", - "
| 4 | \n", - "185997 | \n", - "paseos del sol | \n", - "2.0 | \n", - "
| \n", - " | id | \n", - "titulo | \n", - "cant_palabras_menos_frecuentes_titulo | \n", - "
|---|---|---|---|
| 0 | \n", - "254099 | \n", - "depto. tipo a-402 | \n", - "0.0 | \n", - "
| 1 | \n", - "53461 | \n", - "condominio horizontal en venta | \n", - "0.0 | \n", - "
| 2 | \n", - "247984 | \n", - "casa en venta urbi 3 recamaras tonala | \n", - "0.0 | \n", - "
| 3 | \n", - "209067 | \n", - "casa sola en toluca zinacantepec con credito i... | \n", - "0.0 | \n", - "
| 4 | \n", - "185997 | \n", - "paseos del sol | \n", - "0.0 | \n", - "
| \n", + " | id | \n", + "titulo | \n", + "descripcion | \n", + "tipodepropiedad | \n", + "direccion | \n", + "ciudad | \n", + "provincia | \n", + "antiguedad | \n", + "habitaciones | \n", + "garages | \n", + "... | \n", + "cantidad_ciudad_banos | \n", + "cantidad_ciudad_gimnasio | \n", + "cantidad_ciudad_usosmultiples | \n", + "cantidad_provincia_antiguedad | \n", + "cantidad_provincia_habitaciones | \n", + "cantidad_provincia_garages | \n", + "cantidad_provincia_banos | \n", + "cantidad_provincia_gimnasio | \n", + "cantidad_provincia_usosmultiples | \n", + "cantidad_provincia_piscina | \n", + "
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | \n", + "254099 | \n", + "depto. tipo a-402 | \n", + "depto. interior de 80.15m2, consta de sala com... | \n", + "Apartamento | \n", + "Avenida Division del Norte 2005 | \n", + "Benito_Juárez | \n", + "Distrito_Federal | \n", + "NaN | \n", + "2.0 | \n", + "1.0 | \n", + "... | \n", + "6127 | \n", + "10391 | \n", + "10392 | \n", + "7041 | \n", + "21062 | \n", + "19214 | \n", + "23514 | \n", + "54380 | \n", + "54746 | \n", + "56163 | \n", + "
| 1 | \n", + "53461 | \n", + "condominio horizontal en venta | \n", + "<p>entre sonora y guerrero, atrás del h... | \n", + "Casa_en_condominio | \n", + "AV. MEXICO | \n", + "La_Magdalena_Contreras | \n", + "Distrito_Federal | \n", + "10.0 | \n", + "3.0 | \n", + "2.0 | \n", + "... | \n", + "607 | \n", + "1842 | \n", + "1812 | \n", + "8904 | \n", + "23479 | \n", + "18587 | \n", + "23514 | \n", + "54380 | \n", + "54746 | \n", + "56163 | \n", + "
| 2 | \n", + "247984 | \n", + "casa en venta urbi 3 recamaras tonala | \n", + "descripcion \\nla mejor ubicacion residencial e... | \n", + "Casa | \n", + "Urbi Tonala | \n", + "Tonalá | \n", + "Jalisco | \n", + "5.0 | \n", + "3.0 | \n", + "2.0 | \n", + "... | \n", + "257 | \n", + "783 | \n", + "778 | \n", + "4256 | \n", + "10492 | \n", + "9180 | \n", + "7527 | \n", + "19894 | \n", + "19431 | \n", + "18756 | \n", + "
| 3 | \n", + "209067 | \n", + "casa sola en toluca zinacantepec con credito i... | \n", + "casa en privada con caseta de vigilancia casas... | \n", + "Casa | \n", + "IGNACIO MANUEL ALTAMIRANO 128 | \n", + "Zinacantepec | \n", + "Edo._de_México | \n", + "1.0 | \n", + "2.0 | \n", + "1.0 | \n", + "... | \n", + "46 | \n", + "149 | \n", + "148 | \n", + "1449 | \n", + "9406 | \n", + "11689 | \n", + "12013 | \n", + "38541 | \n", + "38547 | \n", + "39277 | \n", + "
| 4 | \n", + "185997 | \n", + "paseos del sol | \n", + "bonito departamento en excelentes condiciones ... | \n", + "Apartamento | \n", + "PASEOS DEL SOL | \n", + "Zapopan | \n", + "Jalisco | \n", + "10.0 | \n", + "2.0 | \n", + "1.0 | \n", + "... | \n", + "1704 | \n", + "9634 | \n", + "9306 | \n", + "2749 | \n", + "4188 | \n", + "5123 | \n", + "4434 | \n", + "19894 | \n", + "19431 | \n", + "18756 | \n", + "
| ... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "
| 239995 | \n", + "119879 | \n", + "bonita casas de 2 recamaras a 10 minutos del c... | \n", + "vendo casa en bosques de ica residencial a 10 ... | \n", + "Casa | \n", + "BOSQUES | \n", + "Zinacantepec | \n", + "Edo._de_México | \n", + "0.0 | \n", + "2.0 | \n", + "2.0 | \n", + "... | \n", + "46 | \n", + "149 | \n", + "148 | \n", + "5649 | \n", + "9406 | \n", + "14322 | \n", + "12013 | \n", + "38541 | \n", + "38547 | \n", + "39277 | \n", + "
| 239996 | \n", + "259178 | \n", + "casa en condominio a 10 min. del centro de toluca | \n", + "casa con un jardin amplio, un cuarto de servic... | \n", + "Casa | \n", + "Filiberto Navas 325 | \n", + "Toluca | \n", + "Edo._de_México | \n", + "0.0 | \n", + "3.0 | \n", + "3.0 | \n", + "... | \n", + "227 | \n", + "1932 | \n", + "1947 | \n", + "5649 | \n", + "22200 | \n", + "5976 | \n", + "9335 | \n", + "38541 | \n", + "38547 | \n", + "39277 | \n", + "
| 239997 | \n", + "131932 | \n", + "nicolas san juan | \n", + "departamento con excelente ubicación, muy cerc... | \n", + "Apartamento | \n", + "Nicolas San Juan | \n", + "Benito_Juárez | \n", + "Distrito_Federal | \n", + "20.0 | \n", + "2.0 | \n", + "1.0 | \n", + "... | \n", + "6127 | \n", + "10391 | \n", + "10392 | \n", + "9323 | \n", + "21062 | \n", + "19214 | \n", + "23514 | \n", + "54380 | \n", + "54746 | \n", + "56163 | \n", + "
| 239998 | \n", + "146867 | \n", + "casa sola. javier rojo gomez. | \n", + "casa sola, dividida en cuatro departamentos de... | \n", + "Casa | \n", + "Javier Rojo Gomez 120 | \n", + "Iztapalapa | \n", + "Distrito_Federal | \n", + "20.0 | \n", + "4.0 | \n", + "0.0 | \n", + "... | \n", + "99 | \n", + "50 | \n", + "3028 | \n", + "9323 | \n", + "5065 | \n", + "8472 | \n", + "2926 | \n", + "4410 | \n", + "54746 | \n", + "56163 | \n", + "
| 239999 | \n", + "121958 | \n", + "departamento en bosques de las lomas / av. st... | \n", + "id:19816, muy bonito e iluminado departamento,... | \n", + "Apartamento | \n", + "AVE. STIM | \n", + "Cuajimalpa_de_Morelos | \n", + "Distrito_Federal | \n", + "1.0 | \n", + "3.0 | \n", + "2.0 | \n", + "... | \n", + "1244 | \n", + "2309 | \n", + "2490 | \n", + "2411 | \n", + "23479 | \n", + "18587 | \n", + "23514 | \n", + "54380 | \n", + "54746 | \n", + "56163 | \n", + "
240000 rows × 69 columns
\n", + "entre sonora y guerrero, atrás del h... Casa_en_condominio \n", + "2 descripcion \\nla mejor ubicacion residencial e... Casa \n", + "3 casa en privada con caseta de vigilancia casas... Casa \n", + "4 bonito departamento en excelentes condiciones ... Apartamento \n", + "... ... ... \n", + "239995 vendo casa en bosques de ica residencial a 10 ... Casa \n", + "239996 casa con un jardin amplio, un cuarto de servic... Casa \n", + "239997 departamento con excelente ubicación, muy cerc... Apartamento \n", + "239998 casa sola, dividida en cuatro departamentos de... Casa \n", + "239999 id:19816, muy bonito e iluminado departamento,... Apartamento \n", + "\n", + " direccion ciudad \\\n", + "0 Avenida Division del Norte 2005 Benito_Juárez \n", + "1 AV. MEXICO La_Magdalena_Contreras \n", + "2 Urbi Tonala Tonalá \n", + "3 IGNACIO MANUEL ALTAMIRANO 128 Zinacantepec \n", + "4 PASEOS DEL SOL Zapopan \n", + "... ... ... \n", + "239995 BOSQUES Zinacantepec \n", + "239996 Filiberto Navas 325 Toluca \n", + "239997 Nicolas San Juan Benito_Juárez \n", + "239998 Javier Rojo Gomez 120 Iztapalapa \n", + "239999 AVE. STIM Cuajimalpa_de_Morelos \n", + "\n", + " provincia antiguedad habitaciones garages ... \\\n", + "0 Distrito_Federal NaN 2.0 1.0 ... \n", + "1 Distrito_Federal 10.0 3.0 2.0 ... \n", + "2 Jalisco 5.0 3.0 2.0 ... \n", + "3 Edo._de_México 1.0 2.0 1.0 ... \n", + "4 Jalisco 10.0 2.0 1.0 ... \n", + "... ... ... ... ... ... \n", + "239995 Edo._de_México 0.0 2.0 2.0 ... \n", + "239996 Edo._de_México 0.0 3.0 3.0 ... \n", + "239997 Distrito_Federal 20.0 2.0 1.0 ... \n", + "239998 Distrito_Federal 20.0 4.0 0.0 ... \n", + "239999 Distrito_Federal 1.0 3.0 2.0 ... \n", + "\n", + " cantidad_ciudad_banos cantidad_ciudad_gimnasio \\\n", + "0 6127 10391 \n", + "1 607 1842 \n", + "2 257 783 \n", + "3 46 149 \n", + "4 1704 9634 \n", + "... ... ... \n", + "239995 46 149 \n", + "239996 227 1932 \n", + "239997 6127 10391 \n", + "239998 99 50 \n", + "239999 1244 2309 \n", + "\n", + " cantidad_ciudad_usosmultiples cantidad_provincia_antiguedad \\\n", + "0 10392 7041 \n", + "1 1812 8904 \n", + "2 778 4256 \n", + "3 148 1449 \n", + "4 9306 2749 \n", + "... ... ... \n", + "239995 148 5649 \n", + "239996 1947 5649 \n", + "239997 10392 9323 \n", + "239998 3028 9323 \n", + "239999 2490 2411 \n", + "\n", + " cantidad_provincia_habitaciones cantidad_provincia_garages \\\n", + "0 21062 19214 \n", + "1 23479 18587 \n", + "2 10492 9180 \n", + "3 9406 11689 \n", + "4 4188 5123 \n", + "... ... ... \n", + "239995 9406 14322 \n", + "239996 22200 5976 \n", + "239997 21062 19214 \n", + "239998 5065 8472 \n", + "239999 23479 18587 \n", + "\n", + " cantidad_provincia_banos cantidad_provincia_gimnasio \\\n", + "0 23514 54380 \n", + "1 23514 54380 \n", + "2 7527 19894 \n", + "3 12013 38541 \n", + "4 4434 19894 \n", + "... ... ... \n", + "239995 12013 38541 \n", + "239996 9335 38541 \n", + "239997 23514 54380 \n", + "239998 2926 4410 \n", + "239999 23514 54380 \n", + "\n", + " cantidad_provincia_usosmultiples cantidad_provincia_piscina \n", + "0 54746 56163 \n", + "1 54746 56163 \n", + "2 19431 18756 \n", + "3 38547 39277 \n", + "4 19431 18756 \n", + "... ... ... \n", + "239995 38547 39277 \n", + "239996 38547 39277 \n", + "239997 54746 56163 \n", + "239998 54746 56163 \n", + "239999 54746 56163 \n", + "\n", + "[240000 rows x 69 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df_train = pd.read_csv('./data/train.csv')\n", + "df1, features1 = concatenar_categoricos(df_train, 'tipodepropiedad', 'provincia', 0, None, True)\n", + "df2, features2 = concatenar_categoricos(df_train, 'provincia', 'ciudad', 0, None, True)\n", + "\n", + "features_borarr = features1 + features2\n", + "df_features_sin_ohe = pd.read_csv('./masfeatures_train_f.csv')\n", + "df_features_sin_ohe = df_features_sin_ohe.drop(features_borarr, axis=1)\n", + "\n", + "display(len(df_features_sin_ohe.columns))\n", + "display(df_features_sin_ohe.columns)\n", + "display(df_features_sin_ohe)\n", + "\n", + "df_features_sin_ohe.to_csv('masfeatures_train_f_no_ohe.csv', index=False)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Las mismas features anteriores, sin ohe - train" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "68" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "Index(['id', 'titulo', 'descripcion', 'tipodepropiedad', 'direccion', 'ciudad',\n", + " 'provincia', 'antiguedad', 'habitaciones', 'garages', 'banos',\n", + " 'metroscubiertos', 'metrostotales', 'idzona', 'lat', 'lng', 'fecha',\n", + " 'gimnasio', 'usosmultiples', 'piscina', 'escuelascercanas',\n", + " 'centroscomercialescercanos', 'tipodepropiedad_provincia',\n", + " 'provincia_ciudad', 'cantidad_propiedades_en_provincia',\n", + " 'cantidad_propiedades_en_ciudad', 'cantidad_propiedades_en_antiguedad',\n", + " 'cantidad_propiedades_en_habitaciones',\n", + " 'cantidad_propiedades_en_garages', 'cantidad_propiedades_en_banos',\n", + " 'cantidad_propiedades_en_gimnasio',\n", + " 'cantidad_propiedades_en_usosmultiples',\n", + " 'cantidad_propiedades_en_escuelascercanas',\n", + " 'cantidad_propiedades_en_centroscomercialescercanos',\n", + " 'cantidad_propiedades_en_piscina', 'ranking_en_provincia',\n", + " 'ranking_en_tipodepropiedad', 'ranking_en_ciudad',\n", + " 'ranking_en_antiguedad', 'ranking_en_habitaciones',\n", + " 'ranking_en_garages', 'ranking_en_banos', 'ranking_en_gimnasio',\n", + " 'ranking_en_usosmultiples', 'ranking_en_escuelascercanas',\n", + " 'ranking_en_centroscomercialescercanos',\n", + " 'cantidad_tipodepropiedad_provincia', 'cantidad_tipodepropiedad_ciudad',\n", + " 'cantidad_tipodepropiedad_antiguedad',\n", + " 'cantidad_tipodepropiedad_habitaciones',\n", + " 'cantidad_tipodepropiedad_garages', 'cantidad_tipodepropiedad_banos',\n", + " 'cantidad_tipodepropiedad_gimnasio',\n", + " 'cantidad_tipodepropiedad_usosmultiples',\n", + " 'cantidad_tipodepropiedad_piscina', 'cantidad_ciudad_antiguedad',\n", + " 'cantidad_ciudad_habitaciones', 'cantidad_ciudad_garages',\n", + " 'cantidad_ciudad_banos', 'cantidad_ciudad_gimnasio',\n", + " 'cantidad_ciudad_usosmultiples', 'cantidad_provincia_antiguedad',\n", + " 'cantidad_provincia_habitaciones', 'cantidad_provincia_garages',\n", + " 'cantidad_provincia_banos', 'cantidad_provincia_gimnasio',\n", + " 'cantidad_provincia_usosmultiples', 'cantidad_provincia_piscina'],\n", + " dtype='object')" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
| \n", + " | id | \n", + "titulo | \n", + "descripcion | \n", + "tipodepropiedad | \n", + "direccion | \n", + "ciudad | \n", + "provincia | \n", + "antiguedad | \n", + "habitaciones | \n", + "garages | \n", + "... | \n", + "cantidad_ciudad_banos | \n", + "cantidad_ciudad_gimnasio | \n", + "cantidad_ciudad_usosmultiples | \n", + "cantidad_provincia_antiguedad | \n", + "cantidad_provincia_habitaciones | \n", + "cantidad_provincia_garages | \n", + "cantidad_provincia_banos | \n", + "cantidad_provincia_gimnasio | \n", + "cantidad_provincia_usosmultiples | \n", + "cantidad_provincia_piscina | \n", + "
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | \n", + "4941 | \n", + "casa en venta en miguel hidalgo, distrito federal | \n", + "<p>excelente casa estilo moderno.</p> | \n", + "Casa | \n", + "Bosque de Cedros | \n", + "Miguel_Hidalgo | \n", + "Distrito_Federal | \n", + "29.0 | \n", + "3.0 | \n", + "NaN | \n", + "... | \n", + "54 | \n", + "1213 | \n", + "1255 | \n", + "31 | \n", + "5828 | \n", + "1643 | \n", + "710 | \n", + "13668 | \n", + "13749 | \n", + "14136 | \n", + "
| 1 | \n", + "51775 | \n", + "departamentos en venta en montebello | \n", + "<p>departamento una recamara:\\n</p><p>departam... | \n", + "Apartamento | \n", + "NaN | \n", + "Mérida | \n", + "Yucatán | \n", + "NaN | \n", + "1.0 | \n", + "1.0 | \n", + "... | \n", + "252 | \n", + "1677 | \n", + "1798 | \n", + "670 | \n", + "47 | \n", + "123 | \n", + "278 | \n", + "1854 | \n", + "1980 | \n", + "1575 | \n", + "
| 2 | \n", + "115253 | \n", + "departamento nuevo delegación coyoacán de 87 m... | \n", + "departamento nuevo de 87.06 m2, 1 cajón de est... | \n", + "Apartamento | \n", + "Pueblo de los Reyes, Coyoacán, Mexico D.F. | \n", + "Coyoacán | \n", + "Distrito_Federal | \n", + "0.0 | \n", + "2.0 | \n", + "1.0 | \n", + "... | \n", + "503 | \n", + "1249 | \n", + "1249 | \n", + "1999 | \n", + "5263 | \n", + "4724 | \n", + "5881 | \n", + "13668 | \n", + "13749 | \n", + "14136 | \n", + "
| 3 | \n", + "299321 | \n", + "departamento en venta en acapulco | \n", + "<p> raíces dv001 precioso departamento tipo k... | \n", + "Apartamento | \n", + "NaN | \n", + "Acapulco_de_Juárez | \n", + "Guerrero | \n", + "2.0 | \n", + "2.0 | \n", + "2.0 | \n", + "... | \n", + "230 | \n", + "561 | \n", + "572 | \n", + "26 | \n", + "234 | \n", + "235 | \n", + "251 | \n", + "604 | \n", + "622 | \n", + "310 | \n", + "
| 4 | \n", + "173570 | \n", + "bonita casa sola equipada de dos niveles en lo... | \n", + "<p>casa sola, bonita de dos recámaras u... | \n", + "Casa | \n", + "CEDROS | \n", + "Tultitlán | \n", + "Edo._de_México | \n", + "10.0 | \n", + "2.0 | \n", + "1.0 | \n", + "... | \n", + "153 | \n", + "231 | \n", + "232 | \n", + "1958 | \n", + "2219 | \n", + "2887 | \n", + "2894 | \n", + "9454 | \n", + "9435 | \n", + "9632 | \n", + "
| ... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "
| 59995 | \n", + "75094 | \n", + "oportunidad!! se vende amplia casa en col. moc... | \n", + "oportunidad!! ideal para oficina o casa habita... | \n", + "Casa | \n", + "Oriente 172 # 265 | \n", + "Venustiano_Carranza | \n", + "Distrito_Federal | \n", + "20.0 | \n", + "4.0 | \n", + "3.0 | \n", + "... | \n", + "30 | \n", + "393 | \n", + "395 | \n", + "2287 | \n", + "1273 | \n", + "1500 | \n", + "2516 | \n", + "13668 | \n", + "13749 | \n", + "14136 | \n", + "
| 59996 | \n", + "171847 | \n", + "colinas de ecatepec | \n", + "casa, sala comedor, patio de servicio, buenas ... | \n", + "Casa | \n", + "colinas | \n", + "Ecatepec_de_Morelos | \n", + "Edo._de_México | \n", + "10.0 | \n", + "3.0 | \n", + "1.0 | \n", + "... | \n", + "172 | \n", + "551 | \n", + "551 | \n", + "1958 | \n", + "5458 | \n", + "2887 | \n", + "3466 | \n", + "9454 | \n", + "9435 | \n", + "9632 | \n", + "
| 59997 | \n", + "138313 | \n", + "estrene hermosa casa en sierra morena | \n", + "hermosa casa lista para habitarse ubicada en f... | \n", + "Casa | \n", + "s/calle | \n", + "Guadalupe | \n", + "Nuevo_León | \n", + "5.0 | \n", + "3.0 | \n", + "2.0 | \n", + "... | \n", + "180 | \n", + "459 | \n", + "487 | \n", + "585 | \n", + "2136 | \n", + "1546 | \n", + "1212 | \n", + "3698 | \n", + "3869 | \n", + "3772 | \n", + "
| 59998 | \n", + "271268 | \n", + "zen house i venta de linda casa con acabados ... | \n", + "hermosa casa con acabados de lujo en fracciona... | \n", + "Casa | \n", + "Zen House l | \n", + "Querétaro | \n", + "Querétaro | \n", + "0.0 | \n", + "2.0 | \n", + "1.0 | \n", + "... | \n", + "1219 | \n", + "3032 | \n", + "3011 | \n", + "1452 | \n", + "568 | \n", + "509 | \n", + "1733 | \n", + "4061 | \n", + "4015 | \n", + "3766 | \n", + "
| 59999 | \n", + "72612 | \n", + "casa en chapalita las fuentes/ cercano al club... | \n", + "<p>hermosa casa bien ubicada. cuenta con:</p>\\... | \n", + "Casa | \n", + "Fuentes de San Agustín 5051 | \n", + "Zapopan | \n", + "Jalisco | \n", + "0.0 | \n", + "3.0 | \n", + "2.0 | \n", + "... | \n", + "828 | \n", + "2396 | \n", + "2315 | \n", + "1201 | \n", + "2660 | \n", + "2294 | \n", + "1835 | \n", + "4979 | \n", + "4865 | \n", + "4690 | \n", + "
60000 rows × 68 columns
\n", + "excelente casa estilo moderno.
Casa \n", + "1departamento una recamara:\\n
departam... Apartamento \n", + "2 departamento nuevo de 87.06 m2, 1 cajón de est... Apartamento \n", + "3
raíces dv001 precioso departamento tipo k... Apartamento \n", + "4
casa sola, bonita de dos recámaras u... Casa \n", + "... ... ... \n", + "59995 oportunidad!! ideal para oficina o casa habita... Casa \n", + "59996 casa, sala comedor, patio de servicio, buenas ... Casa \n", + "59997 hermosa casa lista para habitarse ubicada en f... Casa \n", + "59998 hermosa casa con acabados de lujo en fracciona... Casa \n", + "59999
hermosa casa bien ubicada. cuenta con:
\\... Casa \n", + "\n", + " direccion ciudad \\\n", + "0 Bosque de Cedros Miguel_Hidalgo \n", + "1 NaN Mérida \n", + "2 Pueblo de los Reyes, Coyoacán, Mexico D.F. Coyoacán \n", + "3 NaN Acapulco_de_Juárez \n", + "4 CEDROS Tultitlán \n", + "... ... ... \n", + "59995 Oriente 172 # 265 Venustiano_Carranza \n", + "59996 colinas Ecatepec_de_Morelos \n", + "59997 s/calle Guadalupe \n", + "59998 Zen House l Querétaro \n", + "59999 Fuentes de San Agustín 5051 Zapopan \n", + "\n", + " provincia antiguedad habitaciones garages ... \\\n", + "0 Distrito_Federal 29.0 3.0 NaN ... \n", + "1 Yucatán NaN 1.0 1.0 ... \n", + "2 Distrito_Federal 0.0 2.0 1.0 ... \n", + "3 Guerrero 2.0 2.0 2.0 ... \n", + "4 Edo._de_México 10.0 2.0 1.0 ... \n", + "... ... ... ... ... ... \n", + "59995 Distrito_Federal 20.0 4.0 3.0 ... \n", + "59996 Edo._de_México 10.0 3.0 1.0 ... \n", + "59997 Nuevo_León 5.0 3.0 2.0 ... \n", + "59998 Querétaro 0.0 2.0 1.0 ... \n", + "59999 Jalisco 0.0 3.0 2.0 ... \n", + "\n", + " cantidad_ciudad_banos cantidad_ciudad_gimnasio \\\n", + "0 54 1213 \n", + "1 252 1677 \n", + "2 503 1249 \n", + "3 230 561 \n", + "4 153 231 \n", + "... ... ... \n", + "59995 30 393 \n", + "59996 172 551 \n", + "59997 180 459 \n", + "59998 1219 3032 \n", + "59999 828 2396 \n", + "\n", + " cantidad_ciudad_usosmultiples cantidad_provincia_antiguedad \\\n", + "0 1255 31 \n", + "1 1798 670 \n", + "2 1249 1999 \n", + "3 572 26 \n", + "4 232 1958 \n", + "... ... ... \n", + "59995 395 2287 \n", + "59996 551 1958 \n", + "59997 487 585 \n", + "59998 3011 1452 \n", + "59999 2315 1201 \n", + "\n", + " cantidad_provincia_habitaciones cantidad_provincia_garages \\\n", + "0 5828 1643 \n", + "1 47 123 \n", + "2 5263 4724 \n", + "3 234 235 \n", + "4 2219 2887 \n", + "... ... ... \n", + "59995 1273 1500 \n", + "59996 5458 2887 \n", + "59997 2136 1546 \n", + "59998 568 509 \n", + "59999 2660 2294 \n", + "\n", + " cantidad_provincia_banos cantidad_provincia_gimnasio \\\n", + "0 710 13668 \n", + "1 278 1854 \n", + "2 5881 13668 \n", + "3 251 604 \n", + "4 2894 9454 \n", + "... ... ... \n", + "59995 2516 13668 \n", + "59996 3466 9454 \n", + "59997 1212 3698 \n", + "59998 1733 4061 \n", + "59999 1835 4979 \n", + "\n", + " cantidad_provincia_usosmultiples cantidad_provincia_piscina \n", + "0 13749 14136 \n", + "1 1980 1575 \n", + "2 13749 14136 \n", + "3 622 310 \n", + "4 9435 9632 \n", + "... ... ... \n", + "59995 13749 14136 \n", + "59996 9435 9632 \n", + "59997 3869 3772 \n", + "59998 4015 3766 \n", + "59999 4865 4690 \n", + "\n", + "[60000 rows x 68 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df_test = pd.read_csv('./data/test.csv')\n", + "df1, features1 = concatenar_categoricos(df_test, 'tipodepropiedad', 'provincia', 0, None, True)\n", + "df2, features2 = concatenar_categoricos(df_test, 'provincia', 'ciudad', 0, None, True)\n", + "\n", + "features_borarr = features1 + features2\n", + "df_features_sin_ohe = pd.read_csv('./masfeatures_test_f.csv')\n", + "df_features_sin_ohe = df_features_sin_ohe.drop(features_borarr, axis=1)\n", + "\n", + "display(len(df_features_sin_ohe.columns))\n", + "display(df_features_sin_ohe.columns)\n", + "display(df_features_sin_ohe)\n", + "\n", + "df_features_sin_ohe.to_csv('masfeatures_test_f_no_ohe.csv', index=False)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.8" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/html/features-NLTK.html b/html/featuresNLTK.html similarity index 98% rename from html/features-NLTK.html rename to html/featuresNLTK.html index d9ee715..52d3f54 100644 --- a/html/features-NLTK.html +++ b/html/featuresNLTK.html @@ -2,7 +2,7 @@ -import pandas as pd
@@ -13116,7 +13116,7 @@
def ver_info_a_filtrar(df, col):
@@ -13132,7 +13132,7 @@
def generar_palabras_no_queridas(arr=None):
@@ -13157,7 +13157,7 @@
def generar_palabras_mas_frecuentes(df, col, n):
@@ -13187,7 +13187,7 @@
def feature_cantidad_mas_frecuentes(df, col, n):
@@ -13224,13 +13224,13 @@
# Ejemplo de uso de las palabras mas frecuentes
-
-df_palabras = feature_cantidad_mas_frecuentes(df_train, 'titulo', 200)
-df_palabras[['id', 'titulo', 'cant_palabras_mas_frecuentes_titulo']].head()
+def ejemplo():
+ # Ejemplo de uso de las palabras mas frecuentes
+ df_palabras = feature_cantidad_mas_frecuentes(df_train, 'titulo', 200)
+ df_palabras[['id', 'titulo', 'cant_palabras_mas_frecuentes_titulo']].head()
def generar_palabras_menos_frecuentes(df, col, n):
@@ -13357,7 +13289,7 @@
def feature_cantidad_menos_frecuentes(df, col, n):
@@ -13394,106 +13326,19 @@
# Ejemplo de uso de las palabras menos frecuentes
-
-df_palabras = feature_cantidad_menos_frecuentes(df_train, 'titulo', 200)
-df_palabras[['id', 'titulo', 'cant_palabras_menos_frecuentes_titulo']].head()
+def ejemplo():
+ # Ejemplo de uso de las palabras menos frecuentes
+ df_palabras = feature_cantidad_menos_frecuentes(df_train, 'titulo', 200)
+ df_palabras[['id', 'titulo', 'cant_palabras_menos_frecuentes_titulo']].head()
import pandas as pd
+import ipynb.fs.full.features as features_nltk
+
+# df_train = pd.read_csv('./data/train.csv')
+# df_test = pd.read_csv('./data/test.csv')
+def concatenar_categoricos(df, columna1, columna2, N=0, df_aux=None, devolver_cols=False):
+ '''Concatena dos columnas categoricas y hace one hot'''
+ '''Ver referencia columna_a_ohe para los ultimos 3 parametros'''
+
+ def limpiar_espacios_blanco(texto):
+ try:
+ return texto.replace(' ', '_')
+ except:
+ pass
+
+ df = df.copy()
+ df[columna1] = df[columna1].apply(limpiar_espacios_blanco)
+ df[columna2] = df[columna2].apply(limpiar_espacios_blanco)
+ df[columna1 + '_' + columna2] = df[columna1] + '_' +df[columna2]
+
+ features_nltk
+ return features_nltk.columna_a_ohe(df, columna1 + '_' + columna2, N, df_aux, devolver_cols)
+def cantidad_propiedad_misma_cantidad(df, agrupar_col, misma_cantidad_col):
+ '''Cantidad de casas con la misma cantidad de banos que la actual'''
+ '''Por ejemplo, retorna para cada propiedad, cuantas hay mas de su tipo con x banos ej.'''
+ '''cantidad_propiedad_misma_cantidad(df, 'banos', 'tipodepropiedad'), para cada propiedad, se fija
+ cuantas mas de su tipo con tantos banos hay'''
+ '''Retorna el df con la columna agregada'''
+ df_aux = df.copy()
+ df_aux = df_aux.groupby([agrupar_col, misma_cantidad_col]).agg({'id': 'count'})
+ df_aux = df_aux.rename(columns={'id':'cantidad'})
+ df_aux = df_aux.reset_index()
+
+ def get_cantidad(col1, col2):
+ cantidad = df_aux[(df_aux[agrupar_col] == col1) & (df_aux[misma_cantidad_col] == col2)]['cantidad']
+ return cantidad.values[0] if len(cantidad.values > 0) else 0
+
+ df['cantidad_' + agrupar_col + '_' + misma_cantidad_col] = df.apply(lambda x: get_cantidad(x[agrupar_col], x[misma_cantidad_col]), axis=1)
+ return df
+def cantidad_atributo(df, col, df_test):
+ '''Simil a value_counts. Dada una columna, agrega al df, cuantas propiedades existen con esa misma propiedad'''
+ '''Se rellena en df_test, con los counts que se hicieron en df'''
+ df_aux = df.copy()
+ df_aux = df_aux.groupby([col]).agg({'id': 'count'})
+ df_aux = df_aux.rename(columns={'id':'cantidad'})
+ df_aux = df_aux.reset_index()
+
+ prop_cantidad = {}
+
+ def get_cantidad(col1):
+ cantidad = df_aux[df_aux[col] == col1]['cantidad']
+ if col1 in prop_cantidad:
+ return prop_cantidad[col1]
+ cantidad_retornar = cantidad.values[0] if len(cantidad.values > 0) else 0
+ prop_cantidad[col1] = cantidad_retornar
+ return cantidad_retornar
+
+ df['cantidad_propiedades_en_' + col] = df.apply(lambda x: get_cantidad(x[col]), axis=1)
+
+ df_test['cantidad_propiedades_en_' + col] = df_test.apply(
+ lambda x: prop_cantidad[x[col]] if x[col] in prop_cantidad else 0, axis=1)
+
+ return df, df_test
+def ranking_atributo(df, col):
+ '''Cuenta cuantas propiedades hay con los atributos de la columna recibida. Y para cada propiedad,
+ se fija en que posicion esta del ranking. Por ejemplo, si hay dos propuedades, una con dos banos y otra
+ con uno solo, el rankin de las que tengan dos banos en 1, y de las propiedades que tengan un solo bano es
+ dos'''
+
+ '''Rellena los nulos con "otros" '''
+ df[col] = df[col].fillna('otros')
+
+ df_aux = df.copy()
+ df_aux = df_aux.groupby([col]).agg({'id': 'count'})
+ df_aux = df_aux.rename(columns={'id':'cantidad'})
+ df_aux = df_aux.reset_index()
+
+ df_aux = df_aux.nlargest(df_aux.shape[0], 'cantidad')
+ lista_ranking = df_aux[col].tolist()
+ rank = {}
+ contador = 1
+
+ for item in lista_ranking:
+ rank[item] = contador
+ contador = contador + 1
+
+ def get_ranking(col1):
+ item = df_aux[df_aux[col] == col1][col].values[0]
+ return rank[item]
+
+ df['ranking_en_' + col] = df.apply(lambda x: get_ranking(x[col]), axis=1)
+ return df
+def aplicar_features(df_recibido):
+ df = df_recibido.copy()
+ # --
+ df = concatenar_categoricos(df, 'tipodepropiedad', 'provincia')
+ df = concatenar_categoricos(df, 'provincia', 'ciudad')
+ # --
+ display('Check-1.0')
+ df = cantidad_atributo(df, 'provincia')
+ display('Check-1.1')
+ df = cantidad_atributo(df, 'ciudad')
+ display('Check-1.2')
+ df = cantidad_atributo(df, 'antiguedad')
+ display('Check-1.3')
+ df = cantidad_atributo(df, 'habitaciones')
+ display('Check-1.4')
+ df = cantidad_atributo(df, 'garages')
+ display('Check-1.5')
+ df = cantidad_atributo(df, 'banos')
+ display('Check-1.6')
+ df = cantidad_atributo(df, 'gimnasio')
+ display('Check-1.7')
+ df = cantidad_atributo(df, 'usosmultiples')
+ display('Check-1.8')
+ df = cantidad_atributo(df, 'escuelascercanas')
+ display('Check-1.9')
+ df = cantidad_atributo(df, 'centroscomercialescercanos')
+ display('Check-1.10')
+ df = cantidad_atributo(df, 'piscina')
+ # --
+ display('Check-2.0')
+ df = ranking_atributo(df, 'provincia')
+ display('Check-2.1')
+ df = ranking_atributo(df, 'tipodepropiedad')
+ display('Check-2.2')
+ df = ranking_atributo(df, 'ciudad')
+ display('Check-2.3')
+ df = ranking_atributo(df, 'antiguedad')
+ display('Check-2.4')
+ df = ranking_atributo(df, 'habitaciones')
+ display('Check-2.5')
+ df = ranking_atributo(df, 'garages')
+ display('Check-2.6')
+ df = ranking_atributo(df, 'banos')
+ display('Check-2.7')
+ df = ranking_atributo(df, 'gimnasio')
+ display('Check-2.8')
+ df = ranking_atributo(df, 'usosmultiples')
+ display('Check-2.9')
+ df = ranking_atributo(df, 'escuelascercanas')
+ display('Check-2.10')
+ df = ranking_atributo(df, 'centroscomercialescercanos')
+ # --
+ display('Check-3.0')
+ df = cantidad_propiedad_misma_cantidad(df, 'tipodepropiedad', 'provincia')
+ display('Check-3.1')
+ df = cantidad_propiedad_misma_cantidad(df, 'tipodepropiedad', 'ciudad')
+ display('Check-3.2')
+ df = cantidad_propiedad_misma_cantidad(df, 'tipodepropiedad', 'antiguedad')
+ display('Check-3.3')
+ df = cantidad_propiedad_misma_cantidad(df, 'tipodepropiedad', 'habitaciones')
+ display('Check-3.4')
+ df = cantidad_propiedad_misma_cantidad(df, 'tipodepropiedad', 'garages')
+ display('Check-3.5')
+ df = cantidad_propiedad_misma_cantidad(df, 'tipodepropiedad', 'banos')
+ display('Check-3.6')
+ df = cantidad_propiedad_misma_cantidad(df, 'tipodepropiedad', 'gimnasio')
+ display('Check-3.7')
+ df = cantidad_propiedad_misma_cantidad(df, 'tipodepropiedad', 'usosmultiples')
+ display('Check-3.8')
+ df = cantidad_propiedad_misma_cantidad(df, 'tipodepropiedad', 'piscina')
+ display('Check-4.0')
+ df = cantidad_propiedad_misma_cantidad(df, 'ciudad', 'antiguedad')
+ display('Check-4.1')
+ df = cantidad_propiedad_misma_cantidad(df, 'ciudad', 'habitaciones')
+ display('Check-4.2')
+ df = cantidad_propiedad_misma_cantidad(df, 'ciudad', 'garages')
+ display('Check-4.3')
+ df = cantidad_propiedad_misma_cantidad(df, 'ciudad', 'banos')
+ display('Check-4.4')
+ df = cantidad_propiedad_misma_cantidad(df, 'ciudad', 'gimnasio')
+ display('Check-4.5')
+ df = cantidad_propiedad_misma_cantidad(df, 'ciudad', 'usosmultiples')
+ display('Check-5.6')
+ df = cantidad_propiedad_misma_cantidad(df, 'provincia', 'antiguedad')
+ display('Check-5.7')
+ df = cantidad_propiedad_misma_cantidad(df, 'provincia', 'habitaciones')
+ display('Check-5.8')
+ df = cantidad_propiedad_misma_cantidad(df, 'provincia', 'garages')
+ display('Check-5.9')
+ df = cantidad_propiedad_misma_cantidad(df, 'provincia', 'banos')
+ display('Check-5.10')
+ df = cantidad_propiedad_misma_cantidad(df, 'provincia', 'gimnasio')
+ display('Check-5.11')
+ df = cantidad_propiedad_misma_cantidad(df, 'provincia', 'usosmultiples')
+ display('Check-5.12')
+ df = cantidad_propiedad_misma_cantidad(df, 'provincia', 'piscina')
+ display('Check-6.0')
+ return df
+df = df_train
+# df = df_test
+
+display(df.columns)
+display(df.shape)
+
+#Ejs:
+# concatenar_categoricos(df, 'tipodepropiedad', 'provincia')
+# cantidad_propiedad_misma_cantidad(df, 'tipodepropiedad', 'provincia')
+# cantidad_atributo(df, 'provincia')
+# ranking_atributo(df, 'provincia')
+
+df = aplicar_features(df)
+# df.to_csv('masfeatures_train.csv', index=False)
+# df.to_csv('masfeatures_test.csv', index=False)
+df_train = pd.read_csv('./masfeatures_train.csv')
+df_eval = pd.read_csv('./masfeatures_test.csv')
+
+
+# Correccion csv - strings que deberian ser floats
+df_train['antiguedad'] = df_train['antiguedad'].apply(lambda antiguedad: None if antiguedad == 'otros' else antiguedad)
+df_eval['antiguedad'] = df_eval['antiguedad'].apply(lambda antiguedad: None if antiguedad == 'otros' else antiguedad)
+df_eval['antiguedad'] = df_eval['antiguedad'].astype(float)
+df_train['antiguedad'] = df_train['antiguedad'].astype(float)
+
+df_train['habitaciones'] = df_train['habitaciones'].apply(lambda x: None if x == 'otros' else x)
+df_eval['habitaciones'] = df_eval['habitaciones'].apply(lambda x: None if x == 'otros' else x)
+df_eval['habitaciones'] = df_eval['habitaciones'].astype(float)
+df_train['habitaciones'] = df_train['habitaciones'].astype(float)
+
+df_train['garages'] = df_train['garages'].apply(lambda x: None if x == 'otros' else x)
+df_eval['garages'] = df_eval['garages'].apply(lambda x: None if x == 'otros' else x)
+df_eval['garages'] = df_eval['garages'].astype(float)
+df_train['garages'] = df_train['garages'].astype(float)
+
+df_train['banos'] = df_train['banos'].apply(lambda x: None if x == 'otros' else x)
+df_eval['banos'] = df_eval['banos'].apply(lambda x: None if x == 'otros' else x)
+df_eval['banos'] = df_eval['banos'].astype(float)
+df_train['banos'] = df_train['banos'].astype(float)
+
+# Las columnas de tipo object
+x = df_train.columns.to_series().groupby(df_train.dtypes).groups
+display("Las columnas de tipo Object:")
+display(list(x[list(x.keys())[len(list(x.keys()))-1]]))
+
+df_eval.to_csv('masfeatures_train_f.csv', index=False)
+df_train.to_csv('masfeatures_test_f.csv', index=False)
+df_train = pd.read_csv('./data/train.csv')
+df1, features1 = concatenar_categoricos(df_train, 'tipodepropiedad', 'provincia', 0, None, True)
+df2, features2 = concatenar_categoricos(df_train, 'provincia', 'ciudad', 0, None, True)
+
+features_borarr = features1 + features2
+df_features_sin_ohe = pd.read_csv('./masfeatures_train_f.csv')
+df_features_sin_ohe = df_features_sin_ohe.drop(features_borarr, axis=1)
+
+display(len(df_features_sin_ohe.columns))
+display(df_features_sin_ohe.columns)
+display(df_features_sin_ohe)
+
+df_features_sin_ohe.to_csv('masfeatures_train_f_no_ohe.csv', index=False)
+df_test = pd.read_csv('./data/test.csv')
+df1, features1 = concatenar_categoricos(df_test, 'tipodepropiedad', 'provincia', 0, None, True)
+df2, features2 = concatenar_categoricos(df_test, 'provincia', 'ciudad', 0, None, True)
+
+features_borarr = features1 + features2
+df_features_sin_ohe = pd.read_csv('./masfeatures_test_f.csv')
+df_features_sin_ohe = df_features_sin_ohe.drop(features_borarr, axis=1)
+
+display(len(df_features_sin_ohe.columns))
+display(df_features_sin_ohe.columns)
+display(df_features_sin_ohe)
+
+df_features_sin_ohe.to_csv('masfeatures_test_f_no_ohe.csv', index=False)
+