Analyzing traffic convergence#

On this example we show how to use analyze traffic convergence for different segments of the results

Imports#

from pathlib import Path

import geopandas as gpd
import matplotlib.pyplot as plt

from polaris.analyze.path_metrics import PathMetrics
from polaris.analyze.result_kpis import ResultKPIs
from polaris.utils.database.data_table_access import DataTableAccess
from polaris.runs.convergence.convergence_iteration import ConvergenceIteration
from polaris.runs.scenario_compression import ScenarioCompression
from polaris.runs.scenario_utils import get_last_iteration

Data Sources#

Open the demand database for analysis

project_dir = Path("/tmp/Bloomington")
iteration_folder = get_last_iteration(project_dir)
supply_db = ScenarioCompression.maybe_extract(Path(iteration_folder) / "Bloomington-Supply.sqlite")

zlayer = DataTableAccess(supply_db).get("Zone").to_crs(4326)
llayer = DataTableAccess(supply_db).get("Link").to_crs(4326)

Data retrieval#

last_iter = ConvergenceIteration.from_dir(iteration_folder)
kpis = ResultKPIs.from_iteration(last_iter)

Plotting aggregate results#

def chart_metric(df, metric: str, axis=None):
    df.plot.area(ax=axis)
    axis.set(title=metric)


df = kpis.m_etric_traffic_cumulative_gap()

fig, axis = plt.subplots(2, 2)
all_axis = [axis[0, 0], axis[0, 1], axis[1, 0], axis[1, 1]]
for metric, ax in zip(df.metric.unique(), all_axis):
    df_ = df[df.metric == metric]
    df_ = df_.dropna(axis=1, how="any").sort_values(by="Trip end minute")
    chart_metric(df_, metric, ax)

# Combine all the operations and display
plt.tight_layout()
plt.show()
By artificial trip, Traffic mode

Cummulative charts#

import seaborn as sns
import matplotlib.pyplot as plt

cumm_links = gap_per_link.sort_values(by=["absolute_gap"], ascending=False).reset_index(drop=True)
cumm_links = cumm_links.assign(cummulative_relative_gap=cumm_links.absolute_gap.cumsum())
cumm_links.cummulative_relative_gap /= cumm_links.cummulative_relative_gap.max()

sns.lineplot(data=cumm_links["cummulative_relative_gap"])
plt.xlabel("link count")
plot convergence analysis
Text(0.5, 23.52222222222222, 'link count')

Total running time of the script: (0 minutes 1.366 seconds)

Gallery generated by Sphinx-Gallery