Mapping and Reporting Systemο
Overviewο
The siege_utilities mapping and reporting system provides enterprise-grade capabilities for geographic data visualization and professional document generation. This system goes far beyond basic mapping to offer multiple visualization types, sophisticated document structures, and professional output formats.
Key Featuresο
7+ Map Types: Choropleth, marker, 3D, heatmap, cluster, and flow maps
Professional Reports: PDF generation with TOC, sections, and appendices
PowerPoint Integration: Automated presentation creation with various slide types
Client Branding: Custom styling and professional appearance
Multiple Data Sources: Integration with external APIs and databases
Installationο
Install the required dependencies:
pip install -r siege_utilities/reporting/requirements_bivariate_choropleth.txt
Required packages include: - geopandas - shapely - folium - matplotlib - seaborn - pandas - numpy - scipy
Quick Startο
Basic Bivariate Choropleth Mapο
from siege_utilities.reporting.chart_generator import ChartGenerator
import pandas as pd
# Initialize chart generator
chart_gen = ChartGenerator()
# Sample data
data = {
'state': ['California', 'Texas', 'New York', 'Florida'],
'population': [39512223, 28995881, 19453561, 21477737],
'income': [75235, 64034, 72741, 59227]
}
df = pd.DataFrame(data)
# Create bivariate choropleth
chart = chart_gen.create_bivariate_choropleth_matplotlib(
data=df,
location_column='state',
value_column1='population',
value_column2='income',
title="Population vs Income by State"
)
Marker Map with Geographic Dataο
# Create marker map
marker_map = chart_gen.create_marker_map(
data=cities_df,
latitude_column='latitude',
longitude_column='longitude',
value_column='population',
label_column='city',
title="US Cities Population Map"
)
3D Elevation Visualizationο
# Create 3D elevation map
elevation_map = chart_gen.create_3d_map(
data=cities_df,
latitude_column='latitude',
longitude_column='longitude',
elevation_column='elevation',
title="City Elevation 3D Visualization"
)
Comprehensive Report Generationο
Creating Professional PDF Reportsο
from siege_utilities.reporting.report_generator import ReportGenerator
# Initialize report generator
report_gen = ReportGenerator()
# Create comprehensive report
report_content = report_gen.create_comprehensive_report(
title="Geographic Analysis Report",
author="Analytics Team",
client="Research Institute",
table_of_contents=True,
page_numbers=True
)
# Add sections
report_content = report_gen.add_map_section(
report_content,
"Regional Analysis",
[bivariate_map],
map_type="bivariate_choropleth"
)
# Generate PDF
report_gen.generate_pdf_report(report_content, "report.pdf")
PowerPoint Presentation Creationο
from siege_utilities.reporting.powerpoint_generator import PowerPointGenerator
# Initialize PowerPoint generator
ppt_gen = PowerPointGenerator()
# Create presentation
presentation = ppt_gen.create_comprehensive_presentation(
title="Geographic Analysis",
include_toc=True,
include_agenda=True
)
# Add slides
presentation = ppt_gen.add_map_slide(
presentation,
"Regional Overview",
[bivariate_map]
)
# Generate PowerPoint
ppt_gen.generate_powerpoint_presentation(presentation, "presentation.pptx")
Map Types Referenceο
Bivariate Choropleth Mapsο
chart_gen.create_bivariate_choropleth_matplotlib(
data=dataframe,
geodata=geodataframe,
location_column='region',
value_column1='metric1',
value_column2='metric2',
title="Bivariate Analysis",
width=12.0,
height=10.0,
color_scheme='custom'
)
Parameters:
- data: DataFrame with location and value data
- geodata: GeoDataFrame or path to geographic file
- location_column: Column name for geographic locations
- value_column1: First variable for analysis
- value_column2: Second variable for analysis
- title: Map title
- width/height: Dimensions in inches
- color_scheme: Color palette selection
Marker Mapsο
chart_gen.create_marker_map(
data=dataframe,
latitude_column='lat',
longitude_column='lon',
value_column='population',
label_column='city',
title="Location Map",
map_style='open-street-map',
zoom_level=10
)
Parameters:
- latitude_column: Column containing latitude values
- longitude_column: Column containing longitude values
- value_column: Column for marker size encoding
- label_column: Column for popup labels
- map_style: Map tile style selection
- zoom_level: Initial zoom level
3D Mapsο
chart_gen.create_3d_map(
data=dataframe,
latitude_column='lat',
longitude_column='lon',
elevation_column='elevation',
title="3D Visualization",
view_angle=45,
elevation_scale=1.0
)
Parameters:
- elevation_column: Column containing elevation/height data
- view_angle: 3D viewing angle in degrees
- elevation_scale: Scale factor for elevation values
Heatmap Mapsο
chart_gen.create_heatmap_map(
data=dataframe,
latitude_column='lat',
longitude_column='lon',
value_column='intensity',
title="Density Heatmap",
grid_size=50,
blur_radius=0.5
)
Parameters:
- grid_size: Number of grid cells for heatmap
- blur_radius: Blur radius for smoothing
Cluster Mapsο
chart_gen.create_cluster_map(
data=dataframe,
latitude_column='lat',
longitude_column='lon',
cluster_column='region',
label_column='city',
title="Clustered Locations",
max_cluster_radius=80
)
Parameters:
- cluster_column: Column for clustering values
- max_cluster_radius: Maximum radius for clustering
Flow Mapsο
chart_gen.create_flow_map(
data=dataframe,
origin_lat_column='origin_lat',
origin_lon_column='origin_lon',
dest_lat_column='dest_lat',
dest_lon_column='dest_lon',
flow_value_column='volume',
title="Flow Patterns"
)
Parameters:
- origin_lat_column: Origin latitude column
- origin_lon_column: Origin longitude column
- dest_lat_column: Destination latitude column
- dest_lon_column: Destination longitude column
- flow_value_column: Flow intensity values
Advanced Choropleth Mapsο
chart_gen.create_advanced_choropleth(
data=dataframe,
geodata=geodataframe,
location_column='region',
value_column='metric',
title="Advanced Analysis",
classification='natural_breaks',
bins=5,
color_scheme='YlOrRd'
)
Classification Methods:
- quantiles: Equal number of observations per bin
- equal_interval: Equal width bins
- natural_breaks: Natural grouping of data
Report Structureο
PDF Report Componentsο
Title Page: Cover with metadata and branding
Table of Contents: Automated with page numbers
Executive Summary: High-level overview
Methodology: Technical approach
Content Sections: Maps, charts, tables, text
Appendices: Supporting materials
Professional Features: Page numbering, headers, footers
PowerPoint Structureο
Title Slide: Presentation header
Table of Contents: Navigation overview
Agenda: Meeting structure
Content Slides: Various types and layouts
Summary: Key points and next steps
Section Typesο
Text Sections: Rich text with formatting
Chart Sections: Multiple chart layouts
Map Sections: Geographic visualizations
Table Sections: Data tables with styling
Appendix Sections: Supporting materials
Integration Examplesο
Google Analytics Integrationο
from siege_utilities.analytics.google_analytics import GoogleAnalyticsConnector
# Initialize connector
ga_connector = GoogleAnalyticsConnector(
credentials_path='credentials.json',
property_id='your_property_id'
)
# Retrieve geographic data
ga_data = ga_connector.batch_retrieve_ga_data(
metrics=['sessions', 'bounce_rate'],
dimensions=['country', 'region'],
date_range=['2023-01-01', '2023-12-31']
)
# Create geographic visualization
chart = chart_gen.create_bivariate_choropleth_matplotlib(
data=ga_data,
location_column='region',
value_column1='sessions',
value_column2='bounce_rate'
)
Database Integrationο
from siege_utilities.config.databases import DatabaseConnector
# Initialize database connector
db_connector = DatabaseConnector(
connection_string='postgresql://user:password@localhost/dbname'
)
# Query customer data
customer_data = db_connector.execute_query("""
SELECT state, COUNT(*) as customers, AVG(revenue) as avg_revenue
FROM customers GROUP BY state
""")
# Create customer analysis map
chart = chart_gen.create_bivariate_choropleth_matplotlib(
data=customer_data,
location_column='state',
value_column1='customers',
value_column2='avg_revenue'
)
Custom API Integrationο
import requests
def fetch_api_data(endpoint, api_key):
response = requests.get(endpoint, headers={'Authorization': f'Bearer {api_key}'})
return response.json()
# Fetch custom data
custom_data = fetch_api_data(
'https://api.example.com/geographic-metrics',
'your_api_key'
)
# Process and visualize
df = pd.DataFrame(custom_data)
chart = chart_gen.create_marker_map(
data=df,
latitude_column='lat',
longitude_column='lon',
value_column='metric'
)
Best Practicesο
Data Preparationο
Clean Data: Remove duplicates and handle missing values
Coordinate Systems: Ensure consistent geographic projections
Data Types: Use appropriate numeric and string types
Validation: Verify geographic identifier matches
Map Designο
Color Schemes: Choose appropriate palettes for data characteristics
Legend Design: Clear and informative legends
Title and Labels: Descriptive and concise
Scale and Projection: Appropriate for geographic scope
Report Organizationο
Logical Flow: Organize content in logical sequence
Consistent Formatting: Maintain professional appearance
Clear Sections: Well-defined section boundaries
Appropriate Detail: Match detail level to audience
Performance Optimizationο
Data Sampling: Use sampling for large datasets
Caching: Cache frequently used geographic data
Parallel Processing: Use multi-core processing when available
Memory Management: Optimize data structures
Troubleshootingο
Common Issuesο
βGeoPandas not availableβ: Install required dependencies
βLocation column not foundβ: Check column names in data
βNo numeric data foundβ: Ensure value columns contain numbers
Memory issues: Use data sampling or optimization
Performance Issuesο
Large Datasets: Implement data aggregation
Complex Geometries: Simplify geographic boundaries
Multiple Maps: Use batch processing
Rendering Quality: Adjust DPI and figure sizes
Error Handlingο
API Failures: Implement retry logic
Data Mismatches: Validate geographic identifiers
File Errors: Check file paths and permissions
Memory Errors: Monitor resource usage
Examples and Recipesο
For comprehensive examples, see:
- siege_utilities/reporting/examples/comprehensive_mapping_example.py - Full demonstration
- siege_utilities/reporting/examples/bivariate_choropleth_example.py - Basic choropleth usage
- docs/EXAMPLES.md - canonical maintained examples index
Additional Resourcesο
API Reference: Complete method documentation
Recipe Guides: Step-by-step implementation
Best Practices: Professional usage recommendations
Troubleshooting: Common issues and solutions
Community Support: GitHub issues and discussions
The mapping and reporting system provides enterprise-grade capabilities for geographic data visualization and professional document generation, making it easy to create publication-quality outputs for business intelligence and client reporting needs.