Skip to main content

Get historical weather data for US ZIP codes from NOAA stations

Project description

Get Weather Data

PyPI Version Downloads License Python 3.11+ Docs

Get historical weather data for US ZIP codes. Uses NOAA weather station data (GHCN Daily and GSOD) with automatic station selection based on proximity.

Installation

pip install get-weather-data

Or with uv:

uv pip install get-weather-data

Quick Start

Python API

from get_weather_data import Weather

# Initialize and set up database (downloads ~50MB first time)
weather = Weather()
weather.setup()

# Get weather for a ZIP code and date
result = weather.get("10001", "2024-01-15")

print(f"Max temp: {result.tmax / 10:.1f} °C")
print(f"Min temp: {result.tmin / 10:.1f} °C")
print(f"Station: {result.station_name}")

Command Line

# Set up database (first time only)
get-weather setup

# Get weather for a location and date
get-weather get 10001 2024-01-15

# Process a CSV file
get-weather process input.csv output.csv

Features

  • Simple API: One class, three methods: setup(), get(), process_csv()
  • Automatic station selection: Finds nearest weather stations for each ZIP code
  • Two data sources: GHCN Daily (~100K US stations) and GSOD (~3K stations)
  • Batch processing: Process CSV files with ZIP codes and dates
  • Local database: SQLite database for fast repeated queries
  • CLI tool: Command-line interface for quick lookups

Usage Examples

Get Weather for a Date Range

from datetime import date
from get_weather_data import Weather

weather = Weather()

results = weather.get_range(
    zipcode="90210",
    start_date=date(2024, 7, 1),
    end_date=date(2024, 7, 7),
)

for r in results:
    print(f"{r.date}: High {r.tmax/10:.0f}°C, Low {r.tmin/10:.0f}°C")

Process a CSV File

from get_weather_data import Weather

weather = Weather()

# Input CSV should have zip, year, month, day columns
weather.process_csv(
    input_path="locations.csv",
    output_path="locations_with_weather.csv",
    zipcode_column="zip",
    year_column="year",
    month_column="month",
    day_column="day",
)

More examples in the examples/ directory.

Data Sources

This package uses data from NOAA's National Centers for Environmental Information:

  • GHCN Daily: Global Historical Climatology Network daily summaries
  • GSOD: Global Summary of the Day from USAF/WBAN stations
  • GeoNames: ZIP code to coordinates mapping

Weather Variables

Variable Description Unit
tmax Maximum temperature tenths of °C
tmin Minimum temperature tenths of °C
tavg Average temperature tenths of °C
prcp Precipitation tenths of mm
snow Snowfall mm
snwd Snow depth mm
awnd Average wind speed tenths of m/s

Database Setup

The first time you run setup(), the package downloads:

  • GHCN station list (~20K US stations)
  • ISD station list (~3K US stations)
  • US ZIP code coordinates from GeoNames

Then it builds an index mapping each ZIP code to nearby weather stations. This takes a few minutes but only needs to be done once.

weather = Weather()
weather.setup()  # Downloads data, builds index

# Check what was imported
info = weather.info()
print(f"GHCN stations: {info['ghcn_stations']:,}")
print(f"USAF stations: {info['usaf_stations']:,}")
print(f"ZIP codes: {info['zipcodes']:,}")

Configuration

Custom database location:

weather = Weather(database_path="/path/to/my.db")

Or via CLI:

get-weather --database /path/to/my.db setup

License

MIT License. See LICENSE for details.

Authors

  • Suriyan Laohaprapanon
  • Gaurav Sood

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

get_weather_data-3.0.0.tar.gz (24.5 kB view details)

Uploaded Source

Built Distribution

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

get_weather_data-3.0.0-py3-none-any.whl (32.1 kB view details)

Uploaded Python 3

File details

Details for the file get_weather_data-3.0.0.tar.gz.

File metadata

  • Download URL: get_weather_data-3.0.0.tar.gz
  • Upload date:
  • Size: 24.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.14

File hashes

Hashes for get_weather_data-3.0.0.tar.gz
Algorithm Hash digest
SHA256 da49fd07b2ac207e03be8a7cf4b078de6d75244df6dce9a02a46f8f2c2645620
MD5 991847b0d60b59e97985cd71ab9233a6
BLAKE2b-256 e747d562c4a8e1ba5a6441febdbcd54a9fe55efc678ca5c849db3d80ba46ad67

See more details on using hashes here.

File details

Details for the file get_weather_data-3.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for get_weather_data-3.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a64590c2c551bfefb54838afe158b32990a4a3d3b5ef5e49c56972e5859aa37e
MD5 f4916d5219eeddeb69cfeec5ebbddf24
BLAKE2b-256 127c3d82140485c8897bbb691f2b0146b6d92f77f41cebdeefd3c79283db0286

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