bolster.data_sources.nisra.tourism.visitor_statistics

NISRA Quarterly Tourism Visitor Statistics Data Source.

Provides access to quarterly visitor statistics for Northern Ireland covering overnight trips, nights spent, and expenditure across geographic markets.

Data includes: - Overnight trips by visitor origin (GB, Europe, N.America, ROI, NI residents) - Nights spent (bednights) by market - Visitor expenditure by market (£ millions) - Reason for visit breakdowns (holiday, business, visiting friends/relatives) - Historical trends from 2015 onwards

Data is compiled from multiple sources: - Northern Ireland Passenger Survey (NIPS) - Central Statistics Office Inbound Tourism data - Continuous Household Survey - Household Travel Survey

Data Source:

Mother Page: https://www.nisra.gov.uk/publications/quarterly-tourism-statistics-publications

This page lists quarterly tourism statistics publications. The module automatically scrapes to find the latest quarterly report Excel file.

Update Frequency: Quarterly (published ~6 weeks after quarter end) Geographic Coverage: Northern Ireland (by visitor origin market) Reference Period: Rolling 12-month and year-to-date

Example

>>> from bolster.data_sources.nisra.tourism import visitor_statistics
>>> df = visitor_statistics.get_latest_visitor_statistics()
>>> 'market' in df.columns
True
>>> 'expenditure' in df.columns
True

Attributes

logger

TOURISM_PUBLICATIONS_URL

MARKET_NAMES

Functions

get_latest_visitor_statistics_publication_url()

Scrape NISRA tourism publications page to find the latest quarterly file.

get_latest_visitor_statistics([force_refresh])

Get the latest quarterly visitor statistics by market.

validate_visitor_statistics(df)

Validate visitor statistics data integrity.

get_visitor_statistics_by_market(df, market)

Get visitor statistics for a specific market.

get_total_visitor_statistics(df)

Get total visitor statistics across all markets.

get_domestic_vs_external(df)

Compare domestic (NI residents) vs external visitor statistics.

get_expenditure_per_trip(df)

Calculate average expenditure per trip by market.

get_nights_per_trip(df)

Calculate average nights per trip by market.

get_market_summary(df)

Get summary of all markets with derived metrics.

Module Contents

bolster.data_sources.nisra.tourism.visitor_statistics.logger[source]
bolster.data_sources.nisra.tourism.visitor_statistics.TOURISM_PUBLICATIONS_URL = 'https://www.nisra.gov.uk/publications/quarterly-tourism-statistics-publications'[source]
bolster.data_sources.nisra.tourism.visitor_statistics.MARKET_NAMES = ['Great Britain', 'Other Europe', 'North America', 'Other Overseas', 'Republic of Ireland', 'NI...[source]
bolster.data_sources.nisra.tourism.visitor_statistics.get_latest_visitor_statistics_publication_url()[source]

Scrape NISRA tourism publications page to find the latest quarterly file.

The publications page directly lists Excel files for each quarter in the format: “NI Tourism Q3 2025” linking to .xlsx files.

Returns:

//…”, “Q3 2025”)

Return type:

Tuple of (excel_file_url, publication_period) e.g. (“https

Raises:

NISRADataNotFoundError – If publication or file not found

bolster.data_sources.nisra.tourism.visitor_statistics.get_latest_visitor_statistics(force_refresh=False)[source]

Get the latest quarterly visitor statistics by market.

Retrieves comprehensive visitor statistics including trips, nights spent, and expenditure broken down by visitor origin market.

Parameters:

force_refresh (bool) – If True, bypass cache and download fresh data

Returns:

  • market: Visitor origin (Great Britain, Other Europe, etc.)

  • trips: Number of overnight trips

  • nights: Number of nights spent

  • expenditure: Visitor spending (£ millions)

  • period: Measurement period (12-month rolling, year-to-date)

  • year: Reference year

  • quarter: Reference quarter

Return type:

DataFrame with columns

Raises:
  • NISRADataNotFoundError – If publication not found

  • NISRAValidationError – If data parsing fails

Example

>>> df = get_latest_visitor_statistics()
>>> 'market' in df.columns
True
bolster.data_sources.nisra.tourism.visitor_statistics.validate_visitor_statistics(df)[source]

Validate visitor statistics data integrity.

Parameters:

df (pandas.DataFrame) – DataFrame to validate

Returns:

True if valid, False otherwise

Return type:

bool

bolster.data_sources.nisra.tourism.visitor_statistics.get_visitor_statistics_by_market(df, market)[source]

Get visitor statistics for a specific market.

Parameters:
  • df (pandas.DataFrame) – Visitor statistics DataFrame

  • market (str) – Market name (e.g., “Great Britain”, “Republic of Ireland”)

Returns:

Series with statistics for the market, or None if not found

Return type:

pandas.Series | None

Example

>>> df = get_latest_visitor_statistics()
>>> gb = get_visitor_statistics_by_market(df, "Great Britain")
>>> gb is not None
True
bolster.data_sources.nisra.tourism.visitor_statistics.get_total_visitor_statistics(df)[source]

Get total visitor statistics across all markets.

Parameters:

df (pandas.DataFrame) – Visitor statistics DataFrame

Returns:

Series with total statistics, or None if not found

Return type:

pandas.Series | None

bolster.data_sources.nisra.tourism.visitor_statistics.get_domestic_vs_external(df)[source]

Compare domestic (NI residents) vs external visitor statistics.

Parameters:

df (pandas.DataFrame) – Visitor statistics DataFrame

Returns:

DataFrame with domestic and external totals and percentages

Return type:

pandas.DataFrame

Example

>>> df = get_latest_visitor_statistics()
>>> comparison = get_domestic_vs_external(df)
>>> 'category' in comparison.columns
True
bolster.data_sources.nisra.tourism.visitor_statistics.get_expenditure_per_trip(df)[source]

Calculate average expenditure per trip by market.

Parameters:

df (pandas.DataFrame) – Visitor statistics DataFrame

Returns:

DataFrame with market and expenditure_per_trip columns

Return type:

pandas.DataFrame

Example

>>> df = get_latest_visitor_statistics()
>>> spend = get_expenditure_per_trip(df)
>>> 'expenditure_per_trip' in spend.columns
True
bolster.data_sources.nisra.tourism.visitor_statistics.get_nights_per_trip(df)[source]

Calculate average nights per trip by market.

Parameters:

df (pandas.DataFrame) – Visitor statistics DataFrame

Returns:

DataFrame with market and nights_per_trip columns

Return type:

pandas.DataFrame

Example

>>> df = get_latest_visitor_statistics()
>>> duration = get_nights_per_trip(df)
>>> 'nights_per_trip' in duration.columns
True
bolster.data_sources.nisra.tourism.visitor_statistics.get_market_summary(df)[source]

Get summary of all markets with derived metrics.

Parameters:

df (pandas.DataFrame) – Visitor statistics DataFrame

Returns:

DataFrame with market summary including percentages and per-trip metrics

Return type:

pandas.DataFrame

Example

>>> df = get_latest_visitor_statistics()
>>> summary = get_market_summary(df)
>>> 'market' in summary.columns
True