PHPMem v2.0.1
Version
1.6.45
Uptime
17 days 23 hours 25 minutes 28 seconds
Memory
Total
512MB
Used
12,72MB (2.48%)
Free
499,28MB
Keys
Current
14 060
Total (since start)
40 994
Evictions
0
Reclaimed
760
Expired Unfetched
0
Evicted Unfetched
0
Connections
Current
3 / 1 024 max
Total
242 511
Rejected
0
llm:0af2ff05c800e7b569b7070f685382249b5d2338b40191f70c096f86cfa1a674
Edit
**Overall, the data is structurally clean. The one real integrity problem is that `sleep_debt_category` overlaps in `total_sleep_hours`.** I found no nulls, duplicates, impossible values, or mixed units in the checks I ran.
**Real issue: the category label doesn't follow from sleep hours**
- The card says `sleep_debt_category` is a function of `total_sleep_hours`, but two categories overlap (step 3/4/6).
- Severe Sleep Debt covers 3.2–5.38 h.
- Moderate Debt covers 3.2–6.74 h.
- 207 Moderate Debt rows sleep under 4 hours, and 440 Severe rows do too.
- So the same hours can carry either label, and Severe is not simply "fewer hours than Moderate." Some other input, such as latency or another score, seems to feed the label. The documented rule is incomplete or the labels are inconsistent.
- Mild Deficit (6.75–7.74 h) and Optimal Recovery (7.75–9.8 h) have clean, non-overlapping cut-offs.
- Don't re-derive the category from hours alone, and be careful using it as a clean outcome variable.
**Distribution oddities, not errors**
- **Sleep floor:** `total_sleep_hours` bottoms out at exactly 3.2 in two categories, which hints at clipping or a generator floor. I haven't confirmed that.
- **Latency tail:** `sleep_latency_min` runs 6.0–123.3, median 37.6. It is heavy-tailed within Severe Sleep Debt: 104 rows are over 90 minutes, versus 13 in Moderate and none in the other two categories. The values are plausible but extreme, so decide deliberately whether to winsorize.
- **Caffeine zeros:** `caffeine_post_5pm_mg` is 0 for 4,950 of 8,500 rows (about 58%), with a maximum of 250. This is a zero-inflated column, and it is unclear whether 0 means "none" or "not recorded."
- **Phone minutes:** `bedtime_phone_minutes` spans exactly 1–180, which may be a cap. Aggregate it only, since the card flags it as person-identifying.
**Checked and clean**
- **Completeness and keys:** All 8,500 rows are non-null on every measure and classifier, and `user_id` is unique (8,500 distinct).
- **Value ranges:** All fall in plausible bounds.
- Age 18–65.
- Brightness 10–100.
- Activity 0–112 min.
- Alarm snoozes 0–7.
- Fatigue 1.0–10.0.
- Deep sleep 8.1–28.0%.
- REM 9.6–27.0%.
- **Sleep stages:** No row has deep% + REM% over 100.
- **Flags and labels:** `blue_light_filter_active` is a clean 0/1 integer. Categorical labels show no case or spelling variants.
- **Units:** Percent columns are on a 0–100 scale, hours are in hours, and minutes are in minutes, with no sign of mixing.
**Minor structural notes**
- Some labels bundle several apps ("Instagram / Reddit", "TikTok / Reels", "Streaming (Netflix/Hulu)"), so app-level analysis is coarser than it looks.
- Non-Binary has only 248 rows, which is thin for subgroup comparisons.
- The data looks observational or possibly synthetic. The tidy bounds and the hard floor and cap fit that reading.