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
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_retriesconfig - Timeout Control - 10-second default timeout (configurable)
๐ก๏ธ Graceful Degradation
- Permission-Safe Caching - Falls back to
/tmpif~/.geodatasimfails - Error Throttling - Prevents log spam (max 5 errors per 5 minutes)
- Configurable Logging - Set level via
logging_levelconfig - 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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d0f15bf79af792974bad0000abb8ee60d93e298ceaf7d8e960c6aeeaf212637f
|
|
| MD5 |
ad8192c0cbacd11964c257c99a1c65b8
|
|
| BLAKE2b-256 |
29b5e2e9db0cdea6863a8ff89ecb81deb3ac9a77549fa9c2ffafad67f5d54bdc
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
234efcfd216f37d402b75e6162ead25b610330b4b8890288def7aa30f85f119e
|
|
| MD5 |
141ac20ad73dd1a4199fb6bdaa8372e7
|
|
| BLAKE2b-256 |
0ec69d33ed793bb7ad64bd7b55e5defc31c45a26d7f883823262050189b07f0d
|