Source code for item.historical.diagnostic.A002
import pandas as pd
from item.util import convert_units
#: Input arguments
ARGS = ["T000", "T008"]
[docs]
def compute(activity: pd.DataFrame, stock: pd.DataFrame) -> pd.DataFrame:
"""Quality diagnostic for vehicle utilization.
Parameters
----------
activity : pandas.DataFrame
From :mod:`.T000`.
stock : pandas.DataFrame
From :mod:`.T008`.
"""
query = "SERVICE == 'P' and MODE == 'Road' and VEHICLE == 'LDV'"
# Columns to remove for alignment
# - ID, VARIABLE, UNIT—since these are different quantities.
# - FUEL: _Z for activity, _T for stock.
# - AUTOMATION, OPERATOR: _T for activity, _Z for stock.
remove_cols = ["ID", "VARIABLE", "UNIT", "FUEL", "AUTOMATION", "OPERATOR"]
# Remaining columns for index
index_cols = list(
filter(lambda c: c not in remove_cols + ["VALUE"], activity.columns)
)
# Select activity
activity = activity.query(query).drop(columns=remove_cols).set_index(index_cols)
# Select stock: this data contain both vehicles and vehicles per capita; use only
# the former
stock = (
stock.query(query + "and UNIT == 'vehicle'")
.drop(columns=remove_cols)
.set_index(index_cols)
)
# - Compute ratio.
# - Drop NA values.
# - Convert units.
# - Assign 'VARIABLE'.
return (
(activity / stock)
.dropna()
.reset_index()
.pipe(
convert_units,
"Gpassenger km / vehicle / year",
"kpassenger km / vehicle / year",
)
.assign(VARIABLE="Vehicle activity")
)