Skip to main content

Parse and analyse Samsung Health export data as pandas DataFrames

Project description

samsung-health-sdk

PyPI version Python CI License: MIT

A Python SDK for parsing and analysing Samsung Health export data.

Load any health metric from a Samsung Health export directory as a pandas DataFrame with a single function call. Compare data across multiple people or time windows. Derive higher-level health features from the raw data.

Installation

pip install samsung-health-sdk

Quick Start

from samsung_health_sdk import SamsungHealthParser, SamsungHealthComparator

# Point at your Samsung Health export directory
p = SamsungHealthParser("path/to/samsunghealth_export_dir")

# See all available metrics
print(p.list_metrics())

# Load heart rate (hourly summaries or minute-level)
hr     = p.get_heart_rate("2024-10-01", "2024-10-31")
hr_min = p.get_heart_rate("2024-10-01", "2024-10-31", granularity="minute")

# All supported metrics
sleep  = p.get_sleep("2024-10-01", "2024-10-31")
skin   = p.get_skin_temperature("2024-10-01", "2024-10-31", granularity="minute")
stress = p.get_stress("2024-10-01", "2024-10-31")
spo2   = p.get_spo2("2024-10-01", "2024-10-31")
steps  = p.get_steps("2024-10-01", "2024-10-31")
hrv    = p.get_hrv("2024-10-01", "2024-10-31")
rr     = p.get_respiratory_rate("2024-10-01", "2024-10-31", granularity="minute")
ex     = p.get_exercise("2024-10-01", "2024-10-31")
mv     = p.get_movement("2024-10-01", "2024-10-31")  # per-minute activity_level

# Generic accessor for any metric by its full name
df = p.get_metric("com.samsung.shealth.vitality_score", start="2024-10-01")

Feature Engineering

HealthFeatureEngine derives meaningful higher-level features from the raw data:

from samsung_health_sdk.features import HealthFeatureEngine

eng = HealthFeatureEngine(p, tz_offset_hours=5.5)  # tz_offset_hours: your UTC offset

# Per-night sleep quality: efficiency, deep/REM %, fragmentation, composite score
sleep_stats = eng.sleep_sessions("2025-01-01", "2025-03-31")

# Per-night HRV + respiratory rate + movement restlessness during sleep
physio = eng.nightly_physiology("2025-01-01", "2025-03-31")
# Columns: rmssd_mean, rmssd_min, rmssd_std, rr_mean, rr_std,
#          restlessness_score, restless_min, hrv_suppression_flag

# HRV readiness: today vs your rolling N-day personal baseline
readiness = eng.hrv_readiness("2025-01-01", "2025-03-31", baseline_days=14)
# Columns: rmssd_mean, baseline_14d, deviation_pct, readiness_score, low_readiness_flag

# Previous-day stress deviation vs that night's sleep quality
impact = eng.stress_impact_on_sleep("2025-01-01", "2025-03-31")
# Uses stress deviation from rolling baseline, not absolute score

# Per-day activity breakdown + HR context + stress
profile = eng.daily_activity_profile("2025-01-01", "2025-03-31")
# Columns: sedentary_min, light_min, low_mod_min, moderate_min, vigorous_min,
#          active_min, mean_hr_active, median_hr_day, mean_stress, stress_deviation_pct

# Walking cardiac load trend (HR / speed — lower = more aerobically efficient)
cardiac = eng.walking_cardiac_load("2024-11-01", "2025-06-30", source="auto")
# source='auto': pedometer (most accurate) > movement (accelerometer-based,
#                extends to Nov 2024) > exercise summaries (Jun 2022+)
# Columns: date, duration_min, distance_m, speed_mps, mean_hr, cardiac_load,
#          source, rolling_4w_cardiac_load, cardiac_load_trend

Multi-Person Comparison

p1 = SamsungHealthParser("path/to/person1_export")
p2 = SamsungHealthParser("path/to/person2_export")

comp = SamsungHealthComparator({"Alice": p1, "Bob": p2})

# Compare heart rate — absolute calendar window
df = comp.compare_heart_rate("2024-10-01", "2024-10-31")

# Align to relative Day 0 per person (time_shift=True)
df = comp.compare_heart_rate("2024-10-01", "2024-10-31", time_shift=True)

Export Format

Samsung Health exports a directory containing:

  • CSV files per health metric (some with a metadata row, some without — auto-detected)
  • jsons/ subdirectory with per-minute binning JSON files
  • files/ subdirectory with binary attachments (ECG waveforms, photos)

The SDK handles BOM encoding, namespaced column headers, UTC offset timestamps, trailing commas, and lazy JSON loading automatically.

Sleep Stage Codes

Code Label
40001 Awake
40002 Light
40003 Deep
40004 REM

Movement Activity Levels

Per-minute accelerometer intensity from get_movement():

Range Intensity
0–5 Sedentary
5–20 Light
20–50 Low-moderate
50–100 Moderate
100+ Vigorous

Requirements

  • Python 3.9+
  • pandas >= 2.0
  • numpy >= 1.24

Contributing

git clone https://github.com/Devasy/samsung-health-sdk
cd samsung-health-sdk
pip install -e ".[dev]"
pre-commit install
pytest

Run linting/format hooks on demand:

pre-commit run --all-files

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

samsung_health_sdk-0.2.6.tar.gz (88.4 kB view details)

Uploaded Source

Built Distribution

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

samsung_health_sdk-0.2.6-py3-none-any.whl (101.1 kB view details)

Uploaded Python 3

File details

Details for the file samsung_health_sdk-0.2.6.tar.gz.

File metadata

  • Download URL: samsung_health_sdk-0.2.6.tar.gz
  • Upload date:
  • Size: 88.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for samsung_health_sdk-0.2.6.tar.gz
Algorithm Hash digest
SHA256 44c84f83444e0058e33f9bc1a01e4da6e2375c5429eb3e1a874264c32447a696
MD5 dcc5fe78e5fd5026325fb05fb9e93874
BLAKE2b-256 8ab898fff370220f510bb81d5724ccf78ac201182512c6e8119b22aa01b410be

See more details on using hashes here.

Provenance

The following attestation bundles were made for samsung_health_sdk-0.2.6.tar.gz:

Publisher: release.yml on Devasy/samsung-health-sdk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file samsung_health_sdk-0.2.6-py3-none-any.whl.

File metadata

File hashes

Hashes for samsung_health_sdk-0.2.6-py3-none-any.whl
Algorithm Hash digest
SHA256 92dc7561b398d1c2cf9df645908a42e07701882334b991d9d472e681a624811f
MD5 982ca364d75edecb1fdf3b06879c0ae8
BLAKE2b-256 b27ab2c18c6025f99a80095c3d2be5ea14cebf8584a49795187a8a81a5a54e96

See more details on using hashes here.

Provenance

The following attestation bundles were made for samsung_health_sdk-0.2.6-py3-none-any.whl:

Publisher: release.yml on Devasy/samsung-health-sdk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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