Data audit (P1)
| file | sha256 | notes |
|---|---|---|
| data/sales.csv | 0a53f5e851e31130083cfc70aafd2e2a644eadbc734d6928782d6d6cb60caf53 | 1201 lines = header + 1200 data lines; 5 intended columns |
| data/metadata.json | 2aefdcfaf936c7a301d4fa32aa05cb04bff46ad2fd34c423a358e423ec47ac8f | n_records=1200, sum_price_cad=471287000, n_by_municipality (5 municipalities) |
Findings for sales.csv (CSV-parsed with Python csv module):
- 1164 lines parse to exactly 5 fields with a valid
S\d{5}id, valid ISO date, integer price, positive numeric area. - 36 lines (file lines 701-736) are garbage (random characters, wrong field counts, ids not matching S+5 digits). Their content cannot be read. The id sequence of valid rows has a gap S00700–S00735 (36 ids), consistent with these lines, but ids are not reconstructed.
- 25 valid rows have price written as a quoted string with thousands separator (e.g. "280,000"); CSV quoting makes these unambiguous; parsed as integers.
- No duplicate sale_id among valid rows; dates 2021-01-01..2022-12-31; price 92,000..1,363,000 CAD; area 39.8..335.9 m²; no missing values among valid rows.
- Valid counts by municipality: Gatineau 335, Laval 274, Sherbrooke 209, Longueuil 187, Levis 159 (control 346/282/216/194/162; deficits sum to 36).
- No input violates information-availability rules. Units per metadata: CAD, m².