bolster.data_sources.nisra.construction_output
NISRA Construction Output Statistics Module.
This module provides access to Northern Ireland’s quarterly construction output statistics: - All Work: Total construction output index - New Work: New construction projects - Repair and Maintenance: Repair and maintenance work
Data is published quarterly by NISRA’s Economic & Labour Market Statistics Branch.
Data Source: Northern Ireland Statistics and Research Agency provides quarterly construction output statistics through their Economic Output section at https://www.nisra.gov.uk/statistics/economic-output/construction-output-statistics. The data tracks construction activity across all sectors using a chained volume measure approach to provide comparable time series data for construction output analysis.
Update Frequency: Quarterly publications are released approximately 3 months after the end of each quarter. Construction output statistics are published as part of NISRA’s Economic Output series, providing the official measure of construction sector performance in Northern Ireland with data updated four times per year.
- Data Coverage:
All Work: Q1 2000 - Present (quarterly, non-seasonally adjusted)
New Work: Q1 2000 - Present (quarterly, non-seasonally adjusted)
Repair and Maintenance: Q1 2000 - Present (quarterly, seasonally adjusted)
Base year: 2022 = 100 (chained volume measure)
Examples
>>> from bolster.data_sources.nisra import construction_output
>>> df = construction_output.get_latest_construction_output()
>>> 'all_work_index' in df.columns
True
>>> df_2024 = construction_output.get_construction_by_year(df, 2024)
>>> len(df_2024) <= 4
True
>>> df_growth = construction_output.calculate_growth_rates(df)
>>> 'all_work_yoy_growth' in df_growth.columns
True
- Publication Details:
Frequency: Quarterly
Published by: NISRA Economic & Labour Market Statistics Branch
Contact: economicstats@nisra.gov.uk
Next release: Approximately 3 months after quarter end
Base year: 2022 (index = 100)
Attributes
Functions
Get the URL of the latest Construction Output publication. |
|
|
Parse NISRA Construction Output Excel file. |
|
Get the latest Construction Output data. |
|
Filter Construction Output data for a specific year. |
|
Get Construction Output data for a specific quarter. |
|
Calculate year-on-year growth rates for Construction Output indices. |
|
Calculate summary statistics for Construction Output. |
Validate construction output data integrity. |
Module Contents
- bolster.data_sources.nisra.construction_output.CONSTRUCTION_BASE_URL = 'https://www.nisra.gov.uk/statistics/economic-output/construction-output-statistics'[source]
- bolster.data_sources.nisra.construction_output.get_latest_construction_publication_url()[source]
Get the URL of the latest Construction Output publication.
Scrapes the NISRA Construction Output page to find the most recent publication.
- Returns:
Tuple of (excel_url, publication_date)
- Raises:
NISRADataNotFoundError – If unable to find the latest publication
- Return type:
Example
>>> url, pub_date = get_latest_construction_publication_url() >>> url.startswith('https://') True
- bolster.data_sources.nisra.construction_output.parse_construction_file(file_path)[source]
Parse NISRA Construction Output Excel file.
Extracts the main construction output time series (Table 1.1) from the Excel file.
- Parameters:
file_path (str | pathlib.Path) – Path to the Construction Output Excel file
- Returns:
date: datetime (first day of quarter)
quarter: str (e.g., ‘Q1’, ‘Q2’, ‘Q3’, ‘Q4’)
year: int
all_work_index: float (total construction output, NSA)
new_work_index: float (new construction work, NSA)
repair_maintenance_index: float (repair and maintenance, SA)
- Return type:
DataFrame with columns
Example
>>> url, _ = get_latest_construction_publication_url() >>> path = download_file(url, cache_ttl_hours=168) >>> df = parse_construction_file(path) >>> 'all_work_index' in df.columns True
- bolster.data_sources.nisra.construction_output.get_latest_construction_output(force_refresh=False)[source]
Get the latest Construction Output data.
Downloads and parses the most recent NISRA Construction Output publication. Results are cached for 7 days unless force_refresh=True.
- Parameters:
force_refresh (bool) – If True, bypass cache and download fresh data
- Returns:
DataFrame with quarterly Construction Output data
- Return type:
Example
>>> df = get_latest_construction_output() >>> 'all_work_index' in df.columns True
- bolster.data_sources.nisra.construction_output.get_construction_by_year(df, year)[source]
Filter Construction Output data for a specific year.
- Parameters:
df (pandas.DataFrame) – Construction Output DataFrame
year (int) – Year to filter for
- Returns:
DataFrame with only the specified year’s data
- Return type:
Example
>>> df = get_latest_construction_output() >>> df_2024 = get_construction_by_year(df, 2024) >>> len(df_2024) <= 4 True
- bolster.data_sources.nisra.construction_output.get_construction_by_quarter(df, quarter, year)[source]
Get Construction Output data for a specific quarter.
- Parameters:
df (pandas.DataFrame) – Construction Output DataFrame
quarter (str) – Quarter code (e.g., ‘Q1’, ‘Q2’, ‘Q3’, ‘Q4’)
year (int) – Year
- Returns:
DataFrame with single row for the specified quarter
- Return type:
Example
>>> df = get_latest_construction_output() >>> q2_2025 = get_construction_by_quarter(df, 'Q2', 2025) >>> len(q2_2025) <= 1 True
- bolster.data_sources.nisra.construction_output.calculate_growth_rates(df, periods=4)[source]
Calculate year-on-year growth rates for Construction Output indices.
- Parameters:
df (pandas.DataFrame) – Construction Output DataFrame
periods (int) – Number of quarters for comparison (default: 4 for YoY)
- Returns:
all_work_yoy_growth: All Work percentage change vs same quarter previous year
new_work_yoy_growth: New Work percentage change vs same quarter previous year
repair_maintenance_yoy_growth: R&M percentage change vs same quarter previous year
- Return type:
DataFrame with additional columns
Example
>>> df = get_latest_construction_output() >>> df_growth = calculate_growth_rates(df) >>> 'all_work_yoy_growth' in df_growth.columns True
- bolster.data_sources.nisra.construction_output.get_summary_statistics(df, start_year=None, end_year=None)[source]
Calculate summary statistics for Construction Output.
- Parameters:
df (pandas.DataFrame) – Construction Output DataFrame
start_year (int | None) – Optional start year for summary
end_year (int | None) – Optional end year for summary
- Returns:
period: Time period covered
all_work_mean: Mean All Work index value
all_work_min: Minimum All Work index value
all_work_max: Maximum All Work index value
new_work_mean: Mean New Work index value
repair_maintenance_mean: Mean Repair & Maintenance index value
quarters_count: Number of quarters included
- Return type:
Dictionary with summary statistics
Example
>>> df = get_latest_construction_output() >>> stats = get_summary_statistics(df, start_year=2020) >>> 'all_work_mean' in stats True
- bolster.data_sources.nisra.construction_output.validate_construction_data(df)[source]
Validate construction output data integrity.
- Parameters:
df (pandas.DataFrame) – DataFrame from construction output functions
- Returns:
True if validation passes, False otherwise
- Return type: