USGS Earthquake Data Analysis
SkillDev toolsLoad, parse, and process USGS earthquake data in GeoJSON or JSON formats.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the USGS Earthquake Data Analysis skill
What this skill tells your AI
The instructions your AI receives, as published by cxcscmu/skilllearnbench in skills/b1-one-shot-claude-haiku-4-5/earthquake-plate-calculation/usgs-earthquake-analysis/SKILL.md and read by ahel’s review.
Overview
USGS earthquake data is typically provided in GeoJSON format or as JSON with earthquake features. Understanding the data structure is essential for filtering, processing, and analysis.
Standard USGS Data Format
GeoJSON Structure
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"id": "us1000abc1",
"geometry": {
"type": "Point",
"coordinates": [longitude, latitude, depth]
},
"properties": {
"mag": 4.5,
"place": "12 km E of somewhere",
"time": 1632000000000,
"updated": 1632100000000,
"url": "https://...",
"detail": "https://...",
"felt": null,
"cdi": null,
"mmi": null,
"alert": null,
"status": "reviewed",
"tsunami": 0,
"sig": 350,
"net": "us",
"code": "1000abc1",
"ids": ",us1000abc1,",
"sources": ",us,",
"types": ",origin,phase-data,"
}
}
]
}
Key Fields
geometry.coordinates: [longitude, latitude, depth]properties.mag: Magnitudeproperties.place: Location descriptionproperties.time: Unix timestamp in millisecondsproperties.id: Unique earthquake identifier
Loading and Processing
From GeoJSON
import json
import geopandas as gpd
from datetime import datetime
with open('/root/earthquakes_2024.json', 'r') as f:
data = json.load(f)
# Convert to GeoDataFrame
gdf = gpd.GeoDataFrame.from_features(data['features'], crs='EPSG:4326')
# Convert timestamp (milliseconds to seconds, then to ISO format)
gdf['time'] = pd.to_datetime(gdf['time'], unit='ms').dt.strftime('%Y-%m-%dT%H:%M:%SZ')
gdf['magnitude'] = gdf['mag']
From Custom JSON Structure
import pandas as pd
# If data is a simple list of earthquakes
earthquakes_list = json.load(open('/root/earthquakes_2024.json'))
df = pd.DataFrame(earthquakes_list)
# Ensure required fields
df['longitude'] = df['lon']
df['latitude'] = df['lat']
df['magnitude'] = df['mag']
Data Validation
Common Issues
- Null magnitudes: Some events may not have reliable magnitude estimates
- Depth as third coordinate: USGS includes depth in coordinates [lon, lat, depth]
- Timestamp format: Always in milliseconds since Unix epoch for USGS data
Validation Checks
# Check for required fields
required_fields = ['id', 'magnitude', 'latitude', 'longitude', 'place', 'time']
for field in required_fields:
assert field in gdf.columns, f"Missing field: {field}"
# Verify coordinates are in valid range
assert gdf['longitude'].between(-180, 180).all()
assert gdf['latitude'].between(-90, 90).all()
# Check for null values in critical fields
assert not gdf[['id', 'magnitude', 'latitude', 'longitude']].isnull().any().any()
Common Operations
Filter by Region
# Earthquakes within lat/lon bounds
pacific = gdf[(gdf['latitude'] > -60) & (gdf['latitude'] < 70) &
(gdf['longitude'] > 100) | (gdf['longitude'] < -80)]
Filter by Magnitude
significant = gdf[gdf['magnitude'] >= 4.0]
Convert Time to ISO Format
def unix_ms_to_iso(timestamp_ms):
return pd.to_datetime(timestamp_ms, unit='ms').strftime('%Y-%m-%dT%H:%M:%SZ')
gdf['iso_time'] = gdf['time'].apply(unix_ms_to_iso)
Signals
- GitHub stars
- 83
- Forks
- 5
- Last commit
- Jul 2026
Advanced
- Catalog kind
- skill
- Gateway key
usgs-earthquake-analysis- Source
- github.com/cxcscmu/skilllearnbench