-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Browse the repository at this point in the history
- Loading branch information
Showing
9 changed files
with
1,559 additions
and
314 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,136 @@ | ||
{ | ||
"cells": [ | ||
{ | ||
"cell_type": "code", | ||
"execution_count": 1, | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"import os\n", | ||
"import pandas as pd\n", | ||
"from urbantrips.utils import utils\n", | ||
"from urbantrips.kpi.kpi import compute_route_section_load\n", | ||
"from urbantrips.viz.viz import visualize_route_section_load\n", | ||
"from urbantrips.kpi.line_od_matrix import compute_lines_od_matrix\n", | ||
"from urbantrips.viz.line_od_matrix import visualize_lines_od_matrix\n", | ||
"\n", | ||
"# Completar con el directorio donde se encuentra clonado e instalado el repositorio de UrbanTrips\n", | ||
"URBANTRIPS_PATH = \"RUTA/DE/URBANTRIPS\"\n", | ||
"os.chdir(URBANTRIPS_PATH)\n", | ||
"\n", | ||
"# Leer archivos de configuración y conexiones a las db\n", | ||
"configs = utils.leer_configs_generales()\n", | ||
"conn_insumos = utils.iniciar_conexion_db(tipo='insumos')" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": null, | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"# Se leen los datos de las lineas\n", | ||
"metadata_lineas = pd.read_sql(\"select id_linea,nombre_linea, modo from metadata_lineas;\", conn_insumos)\n", | ||
"# Se puede buscar por nombre de linea que contenga alguna palabra o numero\n", | ||
"metadata_lineas[metadata_lineas.nombre_linea.str.contains(\"50\") #reemplazar 50 por lo que se desee\n", | ||
" ]" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": 3, | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"rango = [7,10] # Se establece un rango horario, en este caso de 7 a 10 \n", | ||
"line_ids = [1,2] # Se establecen los ids de las lineas a analizar\n", | ||
"day_type = 'weekday' # Se establece el tipo de día a analizar puede ser weekday, weekend o una fecha 1/2/2024\n", | ||
"section_meters = 500 # Se establece el parámetro de metros de sección\n", | ||
"n_sections = None # Se establece el número de secciones a analizar, si se usan metro no se necesita" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": null, | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"# Se calculan los estadisticos de carga de las secciones de las lineas\n", | ||
"compute_route_section_load(\n", | ||
" line_ids=line_ids, hour_range=rango,\n", | ||
" section_meters = section_meters,day_type=day_type)" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": null, | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"# Se visualizan los estadisticos de carga de las secciones de las lineas\n", | ||
"visualize_route_section_load(\n", | ||
" line_ids=line_ids, hour_range=rango,\n", | ||
" day_type=day_type, section_meters=section_meters,\n", | ||
" save_gdf=True, stat='totals', \n", | ||
" factor=500, factor_min=10)\n" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": null, | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"# Se computa la matriz OD de las lineas\n", | ||
"compute_lines_od_matrix(\n", | ||
" line_ids=line_ids, hour_range=rango,n_sections=n_sections,\n", | ||
" section_meters=section_meters, day_type=day_type, save_csv=True\n", | ||
")" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": null, | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"# Se visualiza la matriz OD de las lineas\n", | ||
"visualize_lines_od_matrix(\n", | ||
" line_ids=line_ids, hour_range=rango,\n", | ||
" day_type=day_type, n_sections=n_sections,section_meters=section_meters,\n", | ||
" stat='totals')" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": null, | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"# con este codigo se puede consultar la ayuda de las funciones\n", | ||
"visualize_lines_od_matrix?" | ||
] | ||
} | ||
], | ||
"metadata": { | ||
"kernelspec": { | ||
"display_name": "venv", | ||
"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.10.15" | ||
} | ||
}, | ||
"nbformat": 4, | ||
"nbformat_minor": 2 | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,217 @@ | ||
{ | ||
"cells": [ | ||
{ | ||
"cell_type": "code", | ||
"execution_count": 1, | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"import os\n", | ||
"import pandas as pd\n", | ||
"import geopandas as gpd\n", | ||
"import folium\n", | ||
"import itertools\n", | ||
"\n", | ||
"from urbantrips.utils import utils\n", | ||
"from urbantrips.kpi import overlapping as ovl\n", | ||
"from urbantrips.viz import overlapping as ovl_viz\n", | ||
"\n", | ||
"# Completar con el directorio donde se encuentra clonado e instalado el repositorio de UrbanTrips\n", | ||
"URBANTRIPS_PATH = \"RUTA/DE/URBANTRIPS\"\n", | ||
"os.chdir(URBANTRIPS_PATH)\n", | ||
"\n", | ||
"# Leer archivos de configuración y conexiones a las db\n", | ||
"configs = utils.leer_configs_generales()\n", | ||
"alias = configs['alias_db_data']\n", | ||
"conn_data = utils.iniciar_conexion_db(tipo='data')\n", | ||
"conn_insumos = utils.iniciar_conexion_db(tipo='insumos')" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": null, | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"# Se leen los datos de las lineas\n", | ||
"metadata_lineas = pd.read_sql(\"select id_linea,nombre_linea, modo from metadata_lineas;\", conn_insumos)\n", | ||
"# Se puede buscar por nombre de linea que contenga alguna palabra o numero\n", | ||
"metadata_lineas[metadata_lineas.nombre_linea.str.contains(\"50\") #reemplazar 50 por lo que se desee buscar en el nombre de la linea\n", | ||
" ]" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": 3, | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"# Configurar el día a procesar \n", | ||
"day = \"weekday\"\n", | ||
"\n", | ||
"# La resolucion h3 (no puede ser mayor a la que aparece en las configuraciones)\n", | ||
"h3_res_comp = 8\n", | ||
"\n", | ||
"# Los id de las lineas a comparar\n", | ||
"comp_line_id = 1\n", | ||
"base_line_id = 2" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": 4, | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"# Obtiene del archivo de configuración si se deben usar ramales o lineas\n", | ||
"use_branches = configs['lineas_contienen_ramales']\n", | ||
"if use_branches:\n", | ||
" # Lee los datos de los ramales\n", | ||
" metadata = pd.read_sql(f\"select id_linea,id_ramal from metadata_ramales where id_linea in ({base_line_id},{comp_line_id})\",\n", | ||
" conn_insumos,dtype={'id_linea': int, 'id_ramal': int})\n", | ||
" route_type = 'branches'\n", | ||
"\n", | ||
" # Computa todas las posibles combinaciones de ramales entre esas dos lineas\n", | ||
" route_id_combinations = list(itertools.combinations(metadata['id_ramal'], 2))\n", | ||
" base_route_id_combinations = list(itertools.combinations(metadata.loc[metadata.id_linea == base_line_id,'id_ramal'], 2))\n", | ||
" comp_line_id_combinations = list(itertools.combinations(metadata.loc[metadata.id_linea == comp_line_id,'id_ramal'], 2))\n", | ||
" route_id_combinations = [combination for combination in route_id_combinations if ((combination not in base_route_id_combinations) and (combination not in comp_line_id_combinations))]\n", | ||
" \n", | ||
" metadata_branches = pd.read_sql(f\"select * from metadata_ramales where id_linea in ({base_line_id},{comp_line_id})\",\n", | ||
" conn_insumos,dtype={'id_linea': int, 'id_ramal': int})\n", | ||
"\n", | ||
"else:\n", | ||
" route_type = 'lines'\n", | ||
" route_id_combinations = [(base_line_id, comp_line_id)]\n", | ||
"\n" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": null, | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"# Aca se pueden ver todos los ramales de las lineas a comparar\n", | ||
"metadata_branches " | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": null, | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"# Selecciona un par de las posibles combinaciones de ramales\n", | ||
"route_id_combination = route_id_combinations[0] \n", | ||
"route_id_combination" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": null, | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"# crea un id de ruta unico de ramal o linea en funcion de si esta configurado para usar ramales o lineas\n", | ||
"if use_branches:\n", | ||
" if route_id_combination[0] in metadata.loc[metadata.id_linea == base_line_id,'id_ramal'].values:\n", | ||
" base_route_id = route_id_combination[0]\n", | ||
" comp_route_id = route_id_combination[1]\n", | ||
"\n", | ||
" else:\n", | ||
" base_route_id = route_id_combination[1]\n", | ||
" comp_route_id = route_id_combination[0]\n", | ||
" \n", | ||
" nombre_ramal_base = metadata_branches.loc[metadata_branches.id_ramal == base_route_id,'nombre_ramal'].item()\n", | ||
" nombre_ramal_comp = metadata_branches.loc[metadata_branches.id_ramal == comp_route_id,'nombre_ramal'].item()\n", | ||
"\n", | ||
" base_route_str = f\"ramal {nombre_ramal_base} (id {base_route_id})\"\n", | ||
" comp_route_str = f\"ramal {nombre_ramal_comp} (id {comp_route_id})\"\n", | ||
"\n", | ||
"else:\n", | ||
" base_route_id,comp_route_id = route_id_combination\n", | ||
" base_route_str = \"\"\n", | ||
" comp_route_str = \"\"\n", | ||
"\n", | ||
"nombre_linea_base = metadata_lineas.loc[metadata_lineas.id_linea == base_line_id,'nombre_linea'].item()\n", | ||
"nombre_linea_comp = metadata_lineas.loc[metadata_lineas.id_linea == comp_line_id,'nombre_linea'].item()\n", | ||
"\n", | ||
"print(f\"Tomando como linea base la linea {nombre_linea_base} (id {base_line_id}) \" + base_route_str)\n", | ||
"print(f\"Tomando como linea comparacion la linea {nombre_linea_comp} (id {comp_line_id}) \" + comp_route_str)\n", | ||
"\n" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": null, | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"# Calcula la superposicion de la oferta de la linea base con la de la linea de comparacion\n", | ||
"overlapping_dict = ovl.compute_supply_overlapping(day, base_route_id,comp_route_id,route_type,h3_res_comp) \n", | ||
"base_gdf = overlapping_dict[\"base\"][\"h3\"]\n", | ||
"base_route_gdf = overlapping_dict[\"base\"][\"line\"]\n", | ||
"comp_gdf = overlapping_dict[\"comp\"][\"h3\"]\n", | ||
"comp_route_gdf = overlapping_dict[\"comp\"][\"line\"]\n" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": null, | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"# Se visualiza la superposicion de la oferta de la linea base con la de la linea de comparacion\n", | ||
"f = ovl_viz.plot_interactive_supply_overlapping(overlapping_dict)\n", | ||
"f.save(f\"resultados/html/{alias}_supply_overlapping_base_{base_route_id}_comp_{comp_route_id}_h3_{h3_res_comp}.html\")\n", | ||
"f" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": null, | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"# Calcula la demanda de la linea base y la de comparacion\n", | ||
"base_demand,comp_demand = ovl.compute_demand_overlapping(base_line_id,comp_line_id,day,\n", | ||
" base_route_id,comp_route_id,\n", | ||
" base_gdf,comp_gdf)" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": null, | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"# Se visualiza la superposicion de la demanda de la linea base con la de la linea de comparacion\n", | ||
"fig = ovl_viz.plot_interactive_demand_overlapping(base_demand, comp_demand, overlapping_dict)\n", | ||
"fig.save(f\"resultados/html/{alias}_demand_overlapping_base_{base_route_id}_comp_{comp_route_id}_h3_{h3_res_comp}.html\")\n", | ||
"fig" | ||
] | ||
} | ||
], | ||
"metadata": { | ||
"kernelspec": { | ||
"display_name": "venv", | ||
"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.10.15" | ||
} | ||
}, | ||
"nbformat": 4, | ||
"nbformat_minor": 2 | ||
} |
Oops, something went wrong.