bolster.data_sources.nisra.tourism.visitor_statistics ===================================================== .. py:module:: bolster.data_sources.nisra.tourism.visitor_statistics .. autoapi-nested-parse:: 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 .. rubric:: 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 ---------- .. autoapisummary:: bolster.data_sources.nisra.tourism.visitor_statistics.logger bolster.data_sources.nisra.tourism.visitor_statistics.TOURISM_PUBLICATIONS_URL bolster.data_sources.nisra.tourism.visitor_statistics.MARKET_NAMES Functions --------- .. autoapisummary:: bolster.data_sources.nisra.tourism.visitor_statistics.get_latest_visitor_statistics_publication_url bolster.data_sources.nisra.tourism.visitor_statistics.get_latest_visitor_statistics bolster.data_sources.nisra.tourism.visitor_statistics.validate_visitor_statistics bolster.data_sources.nisra.tourism.visitor_statistics.get_visitor_statistics_by_market bolster.data_sources.nisra.tourism.visitor_statistics.get_total_visitor_statistics bolster.data_sources.nisra.tourism.visitor_statistics.get_domestic_vs_external bolster.data_sources.nisra.tourism.visitor_statistics.get_expenditure_per_trip bolster.data_sources.nisra.tourism.visitor_statistics.get_nights_per_trip bolster.data_sources.nisra.tourism.visitor_statistics.get_market_summary Module Contents --------------- .. py:data:: logger .. py:data:: TOURISM_PUBLICATIONS_URL :value: 'https://www.nisra.gov.uk/publications/quarterly-tourism-statistics-publications' .. py:data:: MARKET_NAMES :value: ['Great Britain', 'Other Europe', 'North America', 'Other Overseas', 'Republic of Ireland', 'NI... .. py:function:: get_latest_visitor_statistics_publication_url() 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") :rtype: Tuple of (excel_file_url, publication_period) e.g. ("https :raises NISRADataNotFoundError: If publication or file not found .. py:function:: get_latest_visitor_statistics(force_refresh = False) Get the latest quarterly visitor statistics by market. Retrieves comprehensive visitor statistics including trips, nights spent, and expenditure broken down by visitor origin market. :param force_refresh: 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 :rtype: DataFrame with columns :raises NISRADataNotFoundError: If publication not found :raises NISRAValidationError: If data parsing fails .. rubric:: Example >>> df = get_latest_visitor_statistics() >>> 'market' in df.columns True .. py:function:: validate_visitor_statistics(df) Validate visitor statistics data integrity. :param df: DataFrame to validate :returns: True if valid, False otherwise .. py:function:: get_visitor_statistics_by_market(df, market) Get visitor statistics for a specific market. :param df: Visitor statistics DataFrame :param market: Market name (e.g., "Great Britain", "Republic of Ireland") :returns: Series with statistics for the market, or None if not found .. rubric:: Example >>> df = get_latest_visitor_statistics() >>> gb = get_visitor_statistics_by_market(df, "Great Britain") >>> gb is not None True .. py:function:: get_total_visitor_statistics(df) Get total visitor statistics across all markets. :param df: Visitor statistics DataFrame :returns: Series with total statistics, or None if not found .. py:function:: get_domestic_vs_external(df) Compare domestic (NI residents) vs external visitor statistics. :param df: Visitor statistics DataFrame :returns: DataFrame with domestic and external totals and percentages .. rubric:: Example >>> df = get_latest_visitor_statistics() >>> comparison = get_domestic_vs_external(df) >>> 'category' in comparison.columns True .. py:function:: get_expenditure_per_trip(df) Calculate average expenditure per trip by market. :param df: Visitor statistics DataFrame :returns: DataFrame with market and expenditure_per_trip columns .. rubric:: Example >>> df = get_latest_visitor_statistics() >>> spend = get_expenditure_per_trip(df) >>> 'expenditure_per_trip' in spend.columns True .. py:function:: get_nights_per_trip(df) Calculate average nights per trip by market. :param df: Visitor statistics DataFrame :returns: DataFrame with market and nights_per_trip columns .. rubric:: Example >>> df = get_latest_visitor_statistics() >>> duration = get_nights_per_trip(df) >>> 'nights_per_trip' in duration.columns True .. py:function:: get_market_summary(df) Get summary of all markets with derived metrics. :param df: Visitor statistics DataFrame :returns: DataFrame with market summary including percentages and per-trip metrics .. rubric:: Example >>> df = get_latest_visitor_statistics() >>> summary = get_market_summary(df) >>> 'market' in summary.columns True