Skip to main content

Loading Data

FastSPA provides multiple ways to load data from different sources.

From Arrays (Primary Interface)

The most direct approach:

import numpy as np
from fastspa import SPA

# Load your data
A = np.load("A_matrix.npy")
intensities = np.load("intensities.npy")
sectors = ["Agriculture", "Mining", "Manufacturing", ...]

spa = SPA(A, intensities, sectors)

From DataFrames

import pandas as pd
from fastspa import from_dataframe

# A-matrix as DataFrame (index and columns are sector names)
A_df = pd.read_csv("A_matrix.csv", index_col=0)

# Intensities with sector index
intensities_df = pd.read_csv("intensities.csv", index_col=0)

spa = from_dataframe(
A_df,
intensities_df,
intensity_columns=["CO2", "Water", "Energy"] # Optional: specify columns
)

From CSV Files

from fastspa import from_csv

spa = from_csv(
"A_matrix.csv", # A-matrix file
"intensities.csv", # Intensities file
intensity_columns=["ghg", "water"], # Which columns to use
sectors_path="sectors.txt", # Optional: sector names file
mode="sector_specific" # Analysis mode
)

From Pre-computed Leontief Inverse

If you already have the Leontief inverse:

from fastspa import from_leontief

# Skip L computation (saves time for large matrices)
spa = from_leontief(
L_matrix, # Pre-computed (I - A)^(-1)
intensities,
sectors,
mode="system_wide" # Default for Leontief-based analysis
)

From IO Tables (Experimental)

Parse IO tables from Excel files:

from fastspa import from_io_table

spa = from_io_table(
"io_table.xlsx",
sheet_name="Table 5",
intensities=emissions_vector # Optional: provide intensities
)

Working with Sparse Matrices

FastSPA supports scipy sparse matrices:

from scipy import sparse

# Load or create sparse A-matrix
A_sparse = sparse.load_npz("A_sparse.npz")

# Use directly
spa = SPA(A_sparse, intensities, sectors)

Data Format Requirements

A-Matrix (Technical Coefficients)

  • Square matrix (n × n)
  • Values typically between 0 and 1
  • Rows: inputs to sectors
  • Columns: sector production

Intensities

  • Vector of length n
  • Direct intensity per unit output
  • Units depend on your analysis (e.g., kg CO2-e / $)

Sector Names

  • List/tuple of n strings
  • Must match A-matrix dimensions
  • Used for readable output

Example: Complete Data Loading

import numpy as np
import pandas as pd
from fastspa import SPA

# Load A-matrix
A_df = pd.read_csv("A_matrix.csv", index_col=0)
A = A_df.values
sectors = list(A_df.index)

# Load multiple intensity vectors
emissions = pd.read_csv("emissions.csv", index_col=0)
intensities = {
"carbon": emissions["CO2"].values,
"water": emissions["Water"].values,
}

# Create SPA instance
spa = SPA(A, intensities, sectors, mode="sector_specific")

# Ready for analysis
paths = spa.analyze(sector="Manufacturing", depth=8)