Mathematical functions for verification, evaluation and optimization of forecasts, predictions or models
Specialized functions for working with pandas Series and DataFrame objects, providing simplified APIs for basic continuous metrics without dimensional operations.
Simplified versions of continuous metrics optimized for pandas data structures. These functions provide basic error metrics without the dimensional reduction capabilities available in the full xarray-based API.
from scores.pandas.continuous import mse, rmse, mae
from scores.pandas.typing import PandasTypeCalculates MSE for pandas Series data with angular data support.
def mse(
fcst: PandasType,
obs: PandasType,
*,
is_angular: bool = False,
) -> PandasType:
"""
Calculate Mean Squared Error for pandas data.
Args:
fcst: Forecast data in pandas Series
obs: Observation data in pandas Series
is_angular: Handle circular/angular data (e.g. wind direction)
Returns:
pandas.Series with single MSE value
Notes:
- Dimensional reduction not supported for pandas
- Use xarray API (scores.continuous.mse) for advanced operations
- Angular data should be in degrees, not radians
"""Calculates RMSE for pandas Series data.
def rmse(
fcst: PandasType,
obs: PandasType,
*,
is_angular: bool = False,
) -> PandasType:
"""
Calculate Root Mean Squared Error for pandas data.
Args:
fcst: Forecast data in pandas Series
obs: Observation data in pandas Series
is_angular: Handle circular/angular data
Returns:
pandas.Series with single RMSE value
"""Calculates MAE for pandas Series data.
def mae(
fcst: PandasType,
obs: PandasType,
*,
is_angular: bool = False,
) -> PandasType:
"""
Calculate Mean Absolute Error for pandas data.
Args:
fcst: Forecast data in pandas Series
obs: Observation data in pandas Series
is_angular: Handle circular/angular data
Returns:
pandas.Series with single MAE value
"""from typing import Type
import pandas as pd
PandasType = Type[pd.Series]import pandas as pd
from scores.pandas.continuous import mse, rmse, mae
# Create sample pandas data
forecast_series = pd.Series([1.0, 2.0, 3.0, 4.0, 5.0])
observed_series = pd.Series([1.1, 1.9, 3.1, 3.9, 5.1])
# Calculate basic metrics
mse_result = mse(forecast_series, observed_series)
rmse_result = rmse(forecast_series, observed_series)
mae_result = mae(forecast_series, observed_series)
print(f"MSE: {mse_result.values[0]}")
print(f"RMSE: {rmse_result.values[0]}")
print(f"MAE: {mae_result.values[0]}")
# For angular data (e.g. wind direction in degrees)
wind_forecast = pd.Series([10, 350, 5, 180])
wind_observed = pd.Series([15, 355, 0, 175])
angular_mse = mse(wind_forecast, wind_observed, is_angular=True)
print(f"Angular MSE: {angular_mse.values[0]}")The pandas API provides simplified functionality compared to the full xarray-based scores API:
reduce_dims or preserve_dims parametersweights parameter supportFor advanced functionality including dimensional operations, weighting, and the full range of metrics, convert pandas data to xarray and use the main scores API:
import xarray as xr
import pandas as pd
from scores.continuous import mse as xarray_mse
# Convert pandas to xarray for advanced operations
forecast_da = xr.DataArray(forecast_series)
observed_da = xr.DataArray(observed_series)
# Now can use full xarray functionality
advanced_mse = xarray_mse(forecast_da, observed_da, weights=weights)Install with Tessl CLI
npx tessl i tessl/pypi-scores