Examples
This page provides practical examples of using the memories-dev framework for various real-world applications. Each example includes complete code that you can adapt for your own projects.
Basic Examples
Historical Imagery Analysis
This example demonstrates how to retrieve and analyze historical satellite imagery for a specific location:
import asyncio
import memories
from memories.earth import SatelliteImagery
from memories.analysis import TemporalAnalyzer
from memories.visualization import MapVisualizer
async def analyze_historical_imagery():
# Initialize components
imagery = SatelliteImagery()
analyzer = TemporalAnalyzer()
visualizer = MapVisualizer()
# Define location and time range
location = (37.7749, -122.4194) # San Francisco
time_range = ("2000-01-01", "2025-03-11")
# Fetch historical imagery
images = await imagery.get_historical_imagery(
location=location,
time_range=time_range,
interval="yearly",
resolution="medium"
)
# Detect changes over time
changes = analyzer.detect_changes(
images=images,
method="difference",
threshold=0.15
)
# Get statistics about the changes
stats = changes.get_statistics()
print(f"Total area changed: {stats['area_changed']} square km")
print(f"Rate of change: {stats['change_rate']} square km per year")
# Visualize the changes
change_map = visualizer.create_change_map(
changes=changes,
base_map="satellite"
)
# Save the visualization
change_map.save("historical_changes.html")
print("Analysis complete! Map saved to historical_changes.html")
# Run the analysis
if __name__ == "__main__":
asyncio.run(analyze_historical_imagery())
Environmental Monitoring
This example shows how to monitor environmental changes such as deforestation:
import asyncio
import memories
from memories.earth import SatelliteImagery
from memories.analysis import EnvironmentalAnalyzer
from memories.visualization import MapVisualizer
async def monitor_deforestation():
# Initialize components
imagery = SatelliteImagery()
analyzer = EnvironmentalAnalyzer()
visualizer = MapVisualizer()
# Define region and time range
region = {
"name": "Amazon Rainforest",
"bbox": (-73.9872, -9.7889, -50.7929, 2.2869) # (min_lon, min_lat, max_lon, max_lat)
}
time_range = ("2010-01-01", "2025-03-11")
# Fetch imagery for the region
images = await imagery.get_regional_imagery(
bbox=region["bbox"],
time_range=time_range,
interval="yearly",
resolution="medium"
)
# Analyze deforestation
deforestation = analyzer.detect_deforestation(
images=images,
method="ndvi_threshold",
threshold=0.3
)
# Calculate statistics
stats = deforestation.get_statistics()
print(f"Region: {region['name']}")
print(f"Total deforested area: {stats['total_area']} square km")
print(f"Deforestation rate: {stats['annual_rate']} square km per year")
print(f"Hotspots detected: {len(stats['hotspots'])}")
# Visualize deforestation
deforestation_map = visualizer.create_environmental_map(
data=deforestation,
base_map="satellite",
title=f"Deforestation in {region['name']} (2010-2025)"
)
# Add time slider and legend
deforestation_map.add_time_slider()
deforestation_map.add_legend(
title="Deforestation Intensity",
colors=["#FFEDA0", "#FEB24C", "#FC4E2A", "#BD0026"]
)
# Save the visualization
deforestation_map.save("deforestation_analysis.html")
print("Analysis complete! Map saved to deforestation_analysis.html")
# Run the analysis
if __name__ == "__main__":
asyncio.run(monitor_deforestation())
Intermediate Examples
Real Estate Analysis
This example demonstrates how to analyze a property and its surroundings over time:
import asyncio
import memories
from memories.applications import RealEstateAgent
from memories.visualization import PropertyVisualizer
async def analyze_property():
# Initialize the real estate agent
agent = RealEstateAgent()
# Define the property to analyze
property_address = "123 Main St, San Francisco, CA"
# Analyze the property
analysis = await agent.analyze_property(
address=property_address,
time_range=("1990-01-01", "2025-03-11"),
include_environmental=True,
include_neighborhood=True,
include_projections=True
)
# Print property insights
print(f"Property: {property_address}")
print(f"Property Timeline:")
for event in analysis.timeline:
print(f" - {event['date']}: {event['description']}")
print("\nEnvironmental Factors:")
for factor, value in analysis.environmental_factors.items():
print(f" - {factor}: {value}")
print("\nNeighborhood Changes:")
for period, changes in analysis.neighborhood_changes.items():
print(f" - {period}:")
for change in changes:
print(f" - {change}")
print("\nFuture Projections:")
for year, projection in analysis.future_projections.items():
print(f" - {year}: {projection}")
# Visualize the property analysis
visualizer = PropertyVisualizer()
# Create property visualization
property_viz = visualizer.create_property_visualization(
analysis=analysis,
include_timeline=True,
include_3d=True,
include_neighborhood=True
)
# Save the visualization
property_viz.save("property_analysis.html")
print("Analysis complete! Visualization saved to property_analysis.html")
# Run the analysis
if __name__ == "__main__":
asyncio.run(analyze_property())
Urban Development Analysis
This example shows how to analyze urban development patterns over time:
import asyncio
import memories
from memories.applications import UrbanPlanner
from memories.visualization import UrbanVisualizer
async def analyze_urban_development():
# Initialize the urban planner
planner = UrbanPlanner()
# Define the city to analyze
city = "Boston, MA"
time_range = ("1950-01-01", "2025-03-11")
# Analyze urban development
development = await planner.analyze_development(
city=city,
time_range=time_range,
factors=["buildings", "roads", "green_space", "water_bodies"],
resolution="high"
)
# Print development insights
print(f"Urban Development Analysis: {city}")
print(f"Analysis period: {time_range[0]} to {time_range[1]}")
print("\nDevelopment Statistics:")
for factor, stats in development.statistics.items():
print(f" - {factor}:")
for stat, value in stats.items():
print(f" - {stat}: {value}")
# Generate recommendations
recommendations = planner.generate_recommendations(
development=development,
focus_areas=["sustainability", "public_transport", "housing", "green_space"]
)
print("\nUrban Planning Recommendations:")
for area, recs in recommendations.items():
print(f" - {area}:")
for rec in recs:
print(f" - {rec}")
# Visualize urban development
visualizer = UrbanVisualizer()
# Create urban development visualization
urban_viz = visualizer.create_urban_visualization(
development=development,
recommendations=recommendations,
include_3d=True,
include_timeline=True
)
# Save the visualization
urban_viz.save("urban_development.html")
print("Analysis complete! Visualization saved to urban_development.html")
# Run the analysis
if __name__ == "__main__":
asyncio.run(analyze_urban_development())
Advanced Examples
Multi-Location Comparative Analysis
This example demonstrates how to compare multiple locations over time:
import asyncio
import memories
from memories.earth import SatelliteImagery
from memories.analysis import ComparativeAnalyzer
from memories.visualization import ComparativeVisualizer
async def compare_locations():
# Initialize components
imagery = SatelliteImagery()
analyzer = ComparativeAnalyzer()
visualizer = ComparativeVisualizer()
# Define locations to compare
locations = [
{"name": "San Francisco", "coords": (37.7749, -122.4194)},
{"name": "New York", "coords": (40.7128, -74.0060)},
{"name": "Miami", "coords": (25.7617, -80.1918)},
{"name": "Seattle", "coords": (47.6062, -122.3321)}
]
time_range = ("2000-01-01", "2025-03-11")
# Fetch imagery for all locations concurrently
fetch_tasks = []
for location in locations:
task = imagery.get_historical_imagery(
location=location["coords"],
time_range=time_range,
interval="yearly",
resolution="medium"
)
fetch_tasks.append(task)
all_images = await asyncio.gather(*fetch_tasks)
# Create a dictionary mapping location names to their imagery
location_images = {
locations[i]["name"]: images for i, images in enumerate(all_images)
}
# Perform comparative analysis
comparison = analyzer.compare_locations(
location_images=location_images,
metrics=["urban_growth", "vegetation_change", "water_change"],
normalization="area"
)
# Print comparison results
print("Multi-Location Comparative Analysis")
print(f"Analysis period: {time_range[0]} to {time_range[1]}")
print("\nComparison Results:")
for metric, results in comparison.metrics.items():
print(f"\n{metric.replace('_', ' ').title()}:")
for location, value in results.items():
print(f" - {location}: {value}")
print("\nRankings:")
for metric, rankings in comparison.rankings.items():
print(f"\n{metric.replace('_', ' ').title()} Ranking:")
for i, (location, score) in enumerate(rankings):
print(f" {i+1}. {location}: {score}")
# Create visualization
comparison_viz = visualizer.create_comparison_visualization(
comparison=comparison,
include_charts=True,
include_maps=True,
include_rankings=True
)
# Save the visualization
comparison_viz.save("location_comparison.html")
print("Analysis complete! Visualization saved to location_comparison.html")
# Run the analysis
if __name__ == "__main__":
asyncio.run(compare_locations())
Custom Analysis Pipeline
This example shows how to create a custom analysis pipeline for specific needs:
import asyncio
import memories
from memories.earth import SatelliteImagery
from memories.pipeline import Pipeline
from memories.processors import (
CloudRemoval,
NDVICalculator,
UrbanDetector,
ChangeClassifier,
StatisticsCalculator
)
from memories.visualization import MapVisualizer
async def custom_pipeline_analysis():
# Initialize satellite imagery client
imagery = SatelliteImagery()
# Define location and time range
location = (34.0522, -118.2437) # Los Angeles
time_range = ("2000-01-01", "2025-03-11")
# Fetch historical imagery
images = await imagery.get_historical_imagery(
location=location,
time_range=time_range,
interval="yearly",
resolution="medium"
)
# Create a custom processing pipeline
pipeline = Pipeline([
# Step 1: Remove clouds from images
CloudRemoval(
method="deep_learning",
fallback="interpolation"
),
# Step 2: Calculate NDVI (Normalized Difference Vegetation Index)
NDVICalculator(
red_band="B04",
nir_band="B08",
output_name="ndvi"
),
# Step 3: Detect urban areas
UrbanDetector(
method="spectral_index",
threshold=0.4,
output_name="urban_areas"
),
# Step 4: Classify changes between time periods
ChangeClassifier(
reference_year="2000",
classes=["urban", "vegetation", "water", "barren"],
min_area=10000, # square meters
output_name="classified_changes"
),
# Step 5: Calculate statistics
StatisticsCalculator(
metrics=["area", "rate", "percentage"],
per_class=True,
output_name="statistics"
)
])
# Process the images through the pipeline
results = pipeline.process(images)
# Print the results
print("Custom Pipeline Analysis Results")
print(f"Location: Los Angeles")
print(f"Analysis period: {time_range[0]} to {time_range[1]}")
print("\nStatistics:")
for class_name, stats in results["statistics"].items():
print(f"\n{class_name.replace('_', ' ').title()}:")
for metric, value in stats.items():
print(f" - {metric}: {value}")
# Visualize the results
visualizer = MapVisualizer()
# Create visualization
pipeline_viz = visualizer.create_pipeline_visualization(
results=results,
base_map="satellite",
title="Los Angeles Urban and Vegetation Changes (2000-2025)"
)
# Add components to visualization
pipeline_viz.add_time_slider()
pipeline_viz.add_layer_controls()
pipeline_viz.add_statistics_panel()
# Save the visualization
pipeline_viz.save("custom_pipeline_analysis.html")
print("Analysis complete! Visualization saved to custom_pipeline_analysis.html")
# Run the analysis
if __name__ == "__main__":
asyncio.run(custom_pipeline_analysis())
Integration with External Data
This example demonstrates how to integrate external data sources with the framework:
import asyncio
import pandas as pd
import geopandas as gpd
import memories
from memories.earth import SatelliteImagery, GISProvider
from memories.analysis import IntegratedAnalyzer
from memories.visualization import IntegratedVisualizer
async def integrated_analysis():
# Initialize components
imagery = SatelliteImagery()
gis = GISProvider(provider="osm")
analyzer = IntegratedAnalyzer()
visualizer = IntegratedVisualizer()
# Define study area
city = "Chicago, IL"
time_range = ("2010-01-01", "2025-03-11")
# Get city boundary
boundary = await gis.get_boundary(city)
# Fetch satellite imagery for the city
images = await imagery.get_area_imagery(
boundary=boundary,
time_range=time_range,
interval="yearly",
resolution="medium"
)
# Load external census data
census_data = pd.read_csv("chicago_census_data.csv")
# Load external climate data
climate_data = pd.read_csv("chicago_climate_data.csv")
# Load external property value data as GeoDataFrame
property_values = gpd.read_file("chicago_property_values.geojson")
# Integrate all data sources
integrated_data = analyzer.integrate_data(
imagery=images,
boundary=boundary,
external_data={
"census": census_data,
"climate": climate_data,
"property_values": property_values
},
spatial_join_method="intersects",
temporal_alignment="yearly"
)
# Analyze relationships between data sources
relationships = analyzer.analyze_relationships(
integrated_data=integrated_data,
dependent_variable="property_values",
independent_variables=[
"urban_density",
"green_space",
"temperature",
"precipitation",
"income",
"population"
],
method="regression"
)
# Print relationship findings
print("Integrated Data Analysis Results")
print(f"City: {city}")
print(f"Analysis period: {time_range[0]} to {time_range[1]}")
print("\nRelationships with Property Values:")
for variable, stats in relationships.items():
print(f"\n{variable.replace('_', ' ').title()}:")
print(f" - Correlation: {stats['correlation']:.3f}")
print(f" - Significance: {stats['p_value']:.3f}")
print(f" - Direction: {stats['direction']}")
print(f" - Strength: {stats['strength']}")
# Create visualization
integrated_viz = visualizer.create_integrated_visualization(
integrated_data=integrated_data,
relationships=relationships,
base_map="light",
title=f"{city} Integrated Analysis ({time_range[0]} to {time_range[1]})"
)
# Add components to visualization
integrated_viz.add_time_slider()
integrated_viz.add_layer_controls()
integrated_viz.add_relationship_charts()
integrated_viz.add_data_explorer()
# Save the visualization
integrated_viz.save("integrated_analysis.html")
print("Analysis complete! Visualization saved to integrated_analysis.html")
# Run the analysis
if __name__ == "__main__":
asyncio.run(integrated_analysis())
Real-World Applications
Disaster Impact Assessment
This example shows how to assess the impact of natural disasters:
import asyncio
import memories
from memories.applications import DisasterAnalyzer
from memories.visualization import DisasterVisualizer
from datetime import datetime, timedelta
async def analyze_disaster_impact():
# Initialize the disaster analyzer
analyzer = DisasterAnalyzer()
# Define disaster parameters
disaster_info = {
"type": "hurricane",
"name": "Hurricane Ian",
"location": "Florida, USA",
"date": "2022-09-28",
"bbox": (-87.6348, 23.8063, -79.9742, 31.0035) # Florida bounding box
}
# Calculate time range (before and after disaster)
disaster_date = datetime.strptime(disaster_info["date"], "%Y-%m-%d")
before_date = (disaster_date - timedelta(days=30)).strftime("%Y-%m-%d")
after_date = (disaster_date + timedelta(days=90)).strftime("%Y-%m-%d")
# Analyze disaster impact
impact = await analyzer.analyze_disaster(
disaster_type=disaster_info["type"],
location=disaster_info["location"],
bbox=disaster_info["bbox"],
before_date=before_date,
disaster_date=disaster_info["date"],
after_date=after_date,
include_infrastructure=True,
include_environmental=True,
include_economic=True
)
# Print impact assessment
print(f"Disaster Impact Assessment: {disaster_info['name']}")
print(f"Location: {disaster_info['location']}")
print(f"Date: {disaster_info['date']}")
print("\nImpact Summary:")
print(f" - Affected Area: {impact.affected_area} square km")
print(f" - Severity Level: {impact.severity_level}")
print("\nInfrastructure Impact:")
for category, details in impact.infrastructure.items():
print(f" - {category}:")
for item, value in details.items():
print(f" - {item}: {value}")
print("\nEnvironmental Impact:")
for category, value in impact.environmental.items():
print(f" - {category}: {value}")
print("\nEconomic Impact:")
for category, value in impact.economic.items():
print(f" - {category}: ${value:,.2f}")
print("\nRecovery Timeline:")
for phase, details in impact.recovery_timeline.items():
print(f" - {phase}: {details['duration']} ({details['status']})")
# Visualize the disaster impact
visualizer = DisasterVisualizer()
# Create disaster impact visualization
disaster_viz = visualizer.create_disaster_visualization(
impact=impact,
disaster_info=disaster_info,
include_before_after=True,
include_recovery=True,
include_statistics=True
)
# Save the visualization
disaster_viz.save("disaster_impact.html")
print("Analysis complete! Visualization saved to disaster_impact.html")
# Run the analysis
if __name__ == "__main__":
asyncio.run(analyze_disaster_impact())
Historical Site Reconstruction
This example demonstrates how to reconstruct historical sites using multiple data sources:
import asyncio
import memories
from memories.applications import HistoricalReconstructor
from memories.visualization import HistoricalVisualizer
async def reconstruct_historical_site():
# Initialize the historical reconstructor
reconstructor = HistoricalReconstructor()
# Define historical site parameters
site_info = {
"name": "Ancient Rome",
"location": "Rome, Italy",
"coordinates": (41.9028, 12.4964),
"time_period": "100 CE",
"radius_km": 5
}
# Reconstruct the historical site
reconstruction = await reconstructor.reconstruct_site(
site_name=site_info["name"],
location=site_info["coordinates"],
time_period=site_info["time_period"],
radius_km=site_info["radius_km"],
data_sources=["historical_maps", "archaeological_data", "textual_descriptions", "artwork"],
reconstruction_detail="high",
include_uncertainty=True
)
# Print reconstruction details
print(f"Historical Site Reconstruction: {site_info['name']}")
print(f"Time Period: {site_info['time_period']}")
print(f"Location: {site_info['location']}")
print("\nReconstruction Summary:")
print(f" - Confidence Level: {reconstruction.confidence_level}")
print(f" - Data Sources Used: {len(reconstruction.data_sources)}")
print(f" - Structures Reconstructed: {len(reconstruction.structures)}")
print("\nKey Structures:")
for structure in reconstruction.key_structures:
print(f" - {structure.name}:")
print(f" - Type: {structure.type}")
print(f" - Confidence: {structure.confidence}")
print(f" - Data Sources: {', '.join(structure.sources)}")
print("\nLandscape Features:")
for feature in reconstruction.landscape_features:
print(f" - {feature.name}: {feature.description}")
# Visualize the historical reconstruction
visualizer = HistoricalVisualizer()
# Create historical site visualization
historical_viz = visualizer.create_historical_visualization(
reconstruction=reconstruction,
site_info=site_info,
include_3d=True,
include_uncertainty=True,
include_modern_comparison=True,
include_timeline=True
)
# Save the visualization
historical_viz.save("historical_reconstruction.html")
print("Reconstruction complete! Visualization saved to historical_reconstruction.html")
# Run the reconstruction
if __name__ == "__main__":
asyncio.run(reconstruct_historical_site())
Next Steps
After exploring these examples, you might want to:
Adapt them to your specific use cases
Combine multiple examples to create more complex applications
Explore the ‘api_reference’ for detailed information about each component
Learn about ‘advanced_features’ for more sophisticated analyses
Check out the ‘tutorials’ for step-by-step guides on specific tasks