Skip to content

fix(data): merge 651 confirmed monitor near-duplicate records - #333

Merged
Seungpyo1007 merged 2 commits into
developfrom
Seungpyo1007/monitor-dedup-scan
Sep 29, 2026
Merged

Seungpyo1007 merged 2 commits into
developfrom
Seungpyo1007/monitor-dedup-scan

Conversation

@Seungpyo1007

@Seungpyo1007 Seungpyo1007 commented Sep 29, 2026 •

Copy link
Copy Markdown
Member

Continuing the "near-duplicates in other categories not yet scanned" item after the tablet/watch (#324), smartphone (#329) and laptop (#332) passes, I scanned the monitor category. Scope: 882 data/monitor/<brand>/<year>/<base_model_slug>/<slug>.json records, all sourced from one Kaggle Amazon monitor dataset (amazon-monitor-durjoychandrapaul).

Result: 651 confirmed near-duplicate records merged. 882 → 231.

Method

Same approach as the prior passes: normalize slugs/names (punctuation- and brand-prefix-agnostic) and cross-check the specs that must be identical for the same physical panel — release_date, size_inch, resolution, aspect_ratio, refresh_hz, panel_type, ppi, plus the model number embedded in name. The deterministic merge rule: group by base_model_slug + a full spec fingerprint (every field except variant, slug, source_urls); for each cluster keep the lowest source_row as canonical, union source_urls, and delete the rest.

Per-pattern results

  • Pattern 1 (same scrape imported twice under different row-id slugs): 650 files merged across 14 base models. Each cluster is byte-identical except slug and variant.source_row. Kept the lowest source_row, deleted the redundant files; source_urls were identical so the union was a no-op and no values changed. Breakdown:
    • asus-va329he 84→1 (−83)
    • aopen-aopen-by-acer (32SA2QK 4K) 69→1 (−68)
    • acer-cb272 63→1 (−62)
    • acer-sh242y 60→1 (−59)
    • acer-xb273k 60→1 (−59)
    • acer-xz342cu 47→1 (−46)
    • acer-kb252q 45→1 (−44)
    • acer-sb240y (G0bi) 44→1 (−43)
    • acer-sb272 (EBI) 39→1 (−38)
    • acer-xz320qu 31→1 (−30)
    • acer-hdr10 (31.5" Nitro 240Hz, two byte-identical price clusters) 74→2 (−72)
    • acer-sb270 27→1 (−26)
    • acer-kc242y 14→1 (−13)
    • acer-xb273u 7→1 (−6)
  • Pattern 2 (brand-prefix path variance, e.g. dell-u2723qe vs u2723qe): none. Every record already lives under a consistent brand-prefixed base dir.
  • Pattern 3 (cross-source dup under a different title convention): 1 merged. asus-va24ehe rows 60 and 404 are the same ASUS VA24EHE (23.8", 1920×1080, 75 Hz, IPS, $99) imported with two different Amazon title strings. Kept row 60 (cleaner, untruncated title) and adopted the more complete features.adaptive_sync = "FreeSync" from row 404 — a real, documented VA24EHE spec (ASUS product page). No other field differed.

Left unmerged (genuine distinct SKUs / ambiguous — documented, not guessed)

These share a coarse base_model_slug but are different real products, so they were intentionally kept:

  • acer-eda343cur — 100 Hz/$200 vs 180 Hz/$280 (different refresh SKUs)
  • acer-sb240y — G0bi (black, $95) vs G0wi (white, $110)
  • acer-sb242y — EBI (IPS) vs Hbi ($128)
  • acer-sb272 — EBI (new) vs "E … (Renewed)" listing
  • aopen-aopen-by-acer — 32SA2QK (31.5" 4K) vs 27E1 (27" FHD)
  • gigabyte-m27q — M27Q vs M27Q PRO
  • hp-hp-series-monitor — Series 5 24" vs 524sa bundle
  • lenovo-lenovo-thinkvision-full — ThinkVision M15 (15.6") vs T22i-30 (21.5")
  • lg-lg-digital-signage — 49UH5F-H (49") vs 86UH5E-B (86")
  • lg-lg-ultragear-gaming — 27" QHD 240 Hz vs 27" 5120×1440 165 Hz
  • lilliput-fa1014-np — 1280×800 non-touch vs 1920×1080 touch
  • samsung-hdr2000 — Odyssey Neo G7 vs Neo G8
  • acer-hdr10 residual — the hdr10 slug is an importer fallback shared by a few genuinely different Nitros (27" WQHD 170 Hz, 27" FHD 240 Hz, and the 31.5" 240 Hz at two prices); left as-is rather than guess.

Placeholder / fabricated-defaults check: clean (no bug)

No equivalent of the phone-batch battery_mah/weight_g stamping. Spec value distributions across distinct base models are organic (27" popular; 1920×1080 common; 100/165/75 Hz common), each spread over many unrelated models — not one value stamped onto unrelated devices. The one systematic artifact is release_date = "2023-01-01" on all 882 records, but that is a uniform dataset-wide import placeholder that affects every record equally, so it is not a dedup signal and is out of scope for this merge. Noting it here for the "placeholder dates" tracker item.

Verification

  • python -m app.validate → Data validation passed (monitor required-field / slug-convention / filename-match / base-dir checks included).
  • python integrity_check.py <data> --strict → no hard anomalies (structural section clean: no duplicate monitor slugs, no slug/filename mismatches, no verified-without-source); only the pre-existing advisory CPU/GPU ratio outliers print, which the gate treats as review-only.
  • Dump refreshed as the PR's last commit (python -m app.dump), scoped to the monitor collection: the 651 orphaned detail pages were pruned, v1/monitors/index.json rebuilt (231), the asus-va24ehe detail page picked up the merged adaptive_sync, and the v1 manifest monitor count updated 882 → 231. Unrelated pre-existing serialization drift in other collections was deliberately kept out to keep this diff monitor-scoped and reviewable.

Closes #296

Collapse identical re-imports from the amazon-monitor Kaggle dataset where the same physical monitor was ingested many times under different amazonmon-<row> slugs with byte-identical specs. For each (base_model_slug + full spec fingerprint) cluster, keep the lowest source_row as canonical, union source_urls, and delete the redundant files. Also merge one cross-source duplicate (asus-va24ehe rows 60 & 404: same VA24EHE, two title strings) keeping the cleaner title and adopting the more complete adaptive_sync=FreeSync attribute. 882 -> 231 monitor records. Genuine SKU/config variants left unmerged. Refs #296
Regenerate site/public/v1/monitors from the deduplicated data (python -m app.dump): drop the 651 orphaned detail pages for the merged-away records, rebuild the monitors list (882 -> 231), refresh the asus-va24ehe detail page with the merged adaptive_sync attribute, and update the monitor count in the v1 manifest. Scoped to monitor-attributable dump output only. Refs #296
@github-actions github-actions Bot added bug Something isn't working data Dataset changes enhancement New feature or request labels Sep 29, 2026
@Seungpyo1007
Seungpyo1007 merged commit cddc52e into develop Sep 29, 2026
5 checks passed
@Seungpyo1007
Seungpyo1007 deleted the Seungpyo1007/monitor-dedup-scan branch September 29, 2026 12:47
@Seungpyo1007 Seungpyo1007 removed the enhancement New feature or request label Sep 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working data Dataset changes

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

Data accuracy: corrections, duplicates and dates (workstream)

1 participant