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]"
pytest

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.4.tar.gz (66.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.4-py3-none-any.whl (78.2 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for samsung_health_sdk-0.2.4.tar.gz
Algorithm Hash digest
SHA256 4d8a8c0dff6eb15ac14b830065e0588345fc126b9f15d45701e66c8e40f0c40e
MD5 28820844002f5d88a57ca85d078fd73e
BLAKE2b-256 f1fbad0627ab9310878a2ee906f0ef7619676d6ce52764a1a1a8a35edaae06aa

See more details on using hashes here.

Provenance

The following attestation bundles were made for samsung_health_sdk-0.2.4.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.4-py3-none-any.whl.

File metadata

File hashes

Hashes for samsung_health_sdk-0.2.4-py3-none-any.whl
Algorithm Hash digest
SHA256 80b59b76ffe247939a049175dad09ef32a9ab8542c8fcd750a268912ce900ea3
MD5 e78a888ceef596c09bb3a495f22fbb86
BLAKE2b-256 e59f9f449af82b84ac7b99bee56934dbf4434cbe535b5dcc91a7e8f3467e0982

See more details on using hashes here.

Provenance

The following attestation bundles were made for samsung_health_sdk-0.2.4-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