Skip to main content

Production-Grade City Intelligence: Offline-first data platform with auto-retry, graceful degradation & configurable logging

Project description

๐ŸŒ GeoDataSim v0.4.1 - Production-Grade Offline Support

Production-ready city data platform with offline-first architecture, auto-retry, and zero-config operation

PyPI version Python 3.10+ License: MIT

Geographic + Socioeconomic + Climate intelligence library with ML clustering, offline-first design, automatic retry logic, and graceful degradation. All data from free public APIs (World Bank, REST Countries, Open-Meteo).


๐Ÿš€ What's NEW in v0.4.1 - Production-Grade Reliability

๐Ÿ”’ Offline-First Architecture

  • Automatic Network Detection - Detects connectivity and falls back gracefully
  • Force Offline Mode - set_config(offline_mode=True) for airplane mode
  • Cached Data Fallback - Uses cached data when APIs unavailable
  • Zero Configuration - Works out of the box, online or offline

โšก Intelligent API Retry

  • Exponential Backoff - 1.5x backoff between retries (configurable)
  • Smart Retry Logic - Only retries on network/server errors
  • Configurable Max Retries - Default 3, set via max_retries config
  • Timeout Control - 10-second default timeout (configurable)

๐Ÿ›ก๏ธ Graceful Degradation

  • Permission-Safe Caching - Falls back to /tmp if ~/.geodatasim fails
  • Error Throttling - Prevents log spam (max 5 errors per 5 minutes)
  • Configurable Logging - Set level via logging_level config
  • Non-Breaking Failures - API failures don't crash your app

๐Ÿ“Š New Configuration Options

from geodatasim import set_config

# Offline mode settings
set_config(offline_mode=True)  # Force offline
set_config(offline_fallback=True)  # Use cache when API fails
set_config(auto_detect_offline=True)  # Auto-detect network

# Logging control
set_config(logging_level='WARNING')  # DEBUG/INFO/WARNING/ERROR/CRITICAL
set_config(log_api_errors=True)
set_config(throttle_errors=True)

# Retry settings
set_config(max_retries=3)
set_config(timeout_seconds=10)

๐Ÿš€ What's NEW in v0.3.0 - Intelligence Boost

๐Ÿค– ML-Powered Intelligence

  • City Clustering (KMeans, DBSCAN, Agglomerative)
  • 10x Faster Similarity (numba JIT optimization)
  • Advanced Feature Engineering (sklearn integration)

๐Ÿ“Š Interactive Visualization

  • Plotly Charts (scatter, heatmap, radar, bar, geo)
  • Export to HTML (interactive, shareable)
  • Quick visualization APIs

๐Ÿ”„ Auto-Update Engine

  • Monthly data refresh from World Bank API
  • 30-day cache (avoids unnecessary API calls)
  • Update history tracking
  • No API key required (100% free sources)

โœ… Production-Ready Features

  • Pydantic validation (type-safe data models)
  • Progress bars (tqdm integration)
  • Enhanced geopy distance calculations
  • Comprehensive error handling

๐Ÿ“ฆ Installation

pip install geodatasim

Requirements: Python 3.10+


โšก Quick Start

Basic Usage

from geodatasim import City

# Create city with automatic data loading
istanbul = City("Istanbul")

print(f"Population: {istanbul.population:,}")
print(f"GDP per capita: ${istanbul.gdp_per_capita:,.2f}")
print(f"Climate: {istanbul.climate_zone} ({istanbul.avg_temperature}ยฐC)")
print(f"HDI: {istanbul.hdi}")

# Find similar cities
similar = istanbul.find_similar(n=5)
for city in similar:
    print(f"  - {city.name}, {city.country}")

๐Ÿ†• ML Clustering (v0.3.0)

from geodatasim.ml import CityClustering, cluster_cities
from geodatasim.analysis import BatchAnalyzer

# Get data
analyzer = BatchAnalyzer(["Istanbul", "Paris", "Tokyo", "New York"])
df = analyzer.to_dataframe()

# Cluster cities
clustering = CityClustering(n_clusters=3, method='kmeans')
clustering.fit(df)

print(f"Silhouette score: {clustering.silhouette_score_:.3f}")
summary = clustering.get_cluster_summary(df)
print(summary)

๐Ÿ†• Interactive Visualization (v0.3.0)

from geodatasim.viz import CityVisualizer

viz = CityVisualizer()

# Scatter plot
fig = viz.scatter(df, x='population', y='gdp_per_capita',
                  color='region', size='population')
fig.show()  # Interactive in browser
fig.write_html("cities.html")

# Correlation heatmap
viz.heatmap(df, columns=['population', 'gdp', 'hdi']).show()

# Radar chart comparison
viz.radar(df, metrics=['population', 'gdp', 'hdi'],
          cities=['Istanbul', 'Paris', 'Tokyo']).show()

๐Ÿ†• Auto-Update Engine (v0.3.0)

from geodatasim import City
from geodatasim.core.updater import UpdateEngine, update_city

engine = UpdateEngine()

# Method 1: Update City object (easiest)
istanbul = City("Istanbul")
updated_data = engine.update(istanbul)
if 'population' in updated_data:
    print(f"Population: {updated_data['population']:,}")
if 'gdp_per_capita' in updated_data:
    print(f"GDP: ${updated_data['gdp_per_capita']:,.2f}")

# Method 2: Update specific fields
pop_result = engine.update_population(istanbul)
if pop_result:
    population, metadata = pop_result
    print(f"Updated population: {population:,}")

gdp_result = engine.update_gdp(istanbul)
if gdp_result:
    gdp, metadata = gdp_result
    print(f"Updated GDP: ${gdp:,.2f}")

# Method 3: Update with city data dictionary
city_data = {
    'name': 'Istanbul',
    'country_code': 'TUR',
    'latitude': 41.0082,
    'longitude': 28.9784
}
updated = engine.update_city_all(city_data)

# Method 4: Convenience function
from geodatasim.core.updater import update_city
updated = update_city(istanbul)

# Check if update needed (30-day interval)
needs_update = engine.should_update('Istanbul', 'population')
if needs_update:
    print("Update available!")

๐Ÿ“Š Features

v0.3.0 - Intelligence Boost ๐Ÿ†•

  • ๐Ÿค– ML Clustering (KMeans, DBSCAN, Agglomerative)
  • โšก 10x Faster Similarity (numba optimization)
  • ๐Ÿ“Š Interactive Visualization (plotly)
  • ๐Ÿ”„ Auto-Update Engine (monthly refresh)
  • โœ… Pydantic Validation
  • ๐Ÿ“ˆ Progress Bars (tqdm)

v0.2.0 - Data Science Tools

  • โœ… Batch Analysis
  • โœ… Rankings & Filtering
  • โœ… Export (CSV, Excel, JSON, Markdown)
  • โœ… pandas Integration
  • โœ… Statistical Analysis

v0.1.0 - Core Features

  • โœ… 46 cities from 36 countries
  • โœ… 20+ data fields per city
  • โœ… World Bank API integration
  • โœ… Smart caching (90-day TTL)
  • โœ… City similarity algorithm
  • โœ… Distance calculations

๐Ÿ“ˆ Data Sources

All from free, public domain sources:

Source Data API Key Required
World Bank GDP, Population, HDI โŒ No
REST Countries Country metadata โŒ No
Open-Meteo Climate data โŒ No

โœ… Safe for commercial use - All sources are public domain


๐ŸŽฏ Use Cases

Data Science & ML

from geodatasim.ml import CityClustering
clustering = CityClustering(n_clusters=5)
clustering.fit(cities_df)

Urban Planning

istanbul = City("Istanbul")
similar = istanbul.find_similar(min_population=5_000_000)

Business Intelligence

from geodatasim.analysis import CityRankings
rankings = CityRankings()
wealthy_cities = rankings.filter_cities(min_gdp=40000)

Interactive Dashboards

from geodatasim.viz import CityVisualizer
viz = CityVisualizer()
viz.scatter(df, 'population', 'gdp').show()

๐Ÿ“– Examples

# Test basic features
python test_v0_3_0.py

# Run comprehensive examples
python examples/v0_3_0_intelligence_boost.py

๐Ÿ›ฃ๏ธ Roadmap

v0.4.0 - Performance (Polars, UMAP, PyArrow) v0.5.0 - Geo Intelligence (geopandas, folium) v1.0.0 - Complete Platform (100+ cities, predictions)


๐Ÿ“„ License

MIT License


๐Ÿ“ฌ Contact

PyPI: pypi.org/project/geodatasim GitHub: github.com/teyfikoz/GeoDataSim


GeoDataSim v0.3.0 ๐Ÿš€ ML ยท Visualization ยท Auto-Update ยท Intelligence

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

geodatasim-0.4.3.tar.gz (59.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

geodatasim-0.4.3-py3-none-any.whl (61.0 kB view details)

Uploaded Python 3

File details

Details for the file geodatasim-0.4.3.tar.gz.

File metadata

  • Download URL: geodatasim-0.4.3.tar.gz
  • Upload date:
  • Size: 59.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.0

File hashes

Hashes for geodatasim-0.4.3.tar.gz
Algorithm Hash digest
SHA256 d0f15bf79af792974bad0000abb8ee60d93e298ceaf7d8e960c6aeeaf212637f
MD5 ad8192c0cbacd11964c257c99a1c65b8
BLAKE2b-256 29b5e2e9db0cdea6863a8ff89ecb81deb3ac9a77549fa9c2ffafad67f5d54bdc

See more details on using hashes here.

File details

Details for the file geodatasim-0.4.3-py3-none-any.whl.

File metadata

  • Download URL: geodatasim-0.4.3-py3-none-any.whl
  • Upload date:
  • Size: 61.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.0

File hashes

Hashes for geodatasim-0.4.3-py3-none-any.whl
Algorithm Hash digest
SHA256 234efcfd216f37d402b75e6162ead25b610330b4b8890288def7aa30f85f119e
MD5 141ac20ad73dd1a4199fb6bdaa8372e7
BLAKE2b-256 0ec69d33ed793bb7ad64bd7b55e5defc31c45a26d7f883823262050189b07f0d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page