SPlit up
This commit is contained in:
parent
cf39ad754e
commit
f59d01227b
91 changed files with 10370 additions and 7562 deletions
|
|
@ -275,6 +275,51 @@ def test_transform_crime_applies_lsoa_2011_to_2021_lookup(tmp_path):
|
|||
assert burglaries["E01000099"] == [{"year": 2024, "count": 12.0}]
|
||||
|
||||
|
||||
def test_transform_crime_sums_mixed_weights_within_a_target_lsoa(tmp_path):
|
||||
"""Irregular (M:N) recodes can land rows with DIFFERENT `_weight`s in the
|
||||
same (lsoa21, year, type) group: here E01000050 receives 0.5-weighted
|
||||
incidents from split E01000001 alongside a 1.0-weighted incident from
|
||||
E01000099. The aggregation must sum per-incident weights; the old
|
||||
`_weight.first() * len` applied one row's weight to all three
|
||||
(nondeterministically 1.5 or 3.0 instead of 2.0)."""
|
||||
crime_dir = tmp_path / "crime"
|
||||
month_dir = crime_dir / "2024-01"
|
||||
month_dir.mkdir(parents=True)
|
||||
|
||||
header = "Crime ID,Month,Reported by,Falls within,Longitude,Latitude,Location,LSOA code,LSOA name,Crime type,Last outcome category,Context"
|
||||
(month_dir / "2024-01-test-force-street.csv").write_text(
|
||||
"\n".join(
|
||||
[
|
||||
header,
|
||||
"1,2024-01,F,F,-0.1,51.5,X,E01000001,L,Burglary,U,",
|
||||
"2,2024-01,F,F,-0.1,51.5,X,E01000001,L,Burglary,U,",
|
||||
"3,2024-01,F,F,-0.1,51.5,X,E01000099,L,Burglary,U,",
|
||||
]
|
||||
)
|
||||
+ "\n"
|
||||
)
|
||||
|
||||
lookup_path = tmp_path / "lookup.parquet"
|
||||
pl.DataFrame(
|
||||
{
|
||||
"lsoa11": ["E01000001", "E01000001", "E01000099"],
|
||||
"lsoa21": ["E01000050", "E01000051", "E01000050"],
|
||||
}
|
||||
).write_parquet(lookup_path)
|
||||
|
||||
output = tmp_path / "crime.parquet"
|
||||
by_year_output = tmp_path / "by_year.parquet"
|
||||
transform_crime(crime_dir, output, by_year_output, lookup_path)
|
||||
|
||||
# E01000050: 0.5 + 0.5 + 1.0 = 2.0 incidents -> 24/yr annualised.
|
||||
# E01000051: 0.5 + 0.5 = 1.0 incident -> 12/yr.
|
||||
avg = pl.read_parquet(output).sort("LSOA code").to_dicts()
|
||||
assert avg == [
|
||||
{"LSOA code": "E01000050", "Burglary (avg/yr)": 24.0},
|
||||
{"LSOA code": "E01000051", "Burglary (avg/yr)": 12.0},
|
||||
]
|
||||
|
||||
|
||||
def test_transform_crime_maps_legacy_crime_types(tmp_path):
|
||||
"""Pre-2014 police.uk type names are aliased to current equivalents instead
|
||||
of being dropped."""
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue