saturn·

parking parking violations sample 20260119

saturn notebook · generated 2026-05-01 Report Notebook

Overview

Source: /home/coolhand/html/datavis/data_trove/cache/parking/parking_violations_sample_20260119.json

Saturn profiled 10,000 rows across 40 columns. The stats below are deterministic and machine-readable; the prose is a language-model interpretation of those stats (opt-in, added after the fact, never sees raw rows).

[2]:
!pip install saturn-dissect
import subprocess
subprocess.run([
    "saturn", "analyze", "/home/coolhand/html/datavis/data_trove/cache/parking/parking_violations_sample_20260119.json",
    "--findings", "parking-parking_violations_sample_20260119.json",
    "--llm", "anthropic:claude-opus-4-7",
])

Summary confidence: high

This is a 10,000-row sample of NYC parking violations with 40 fields covering ticket metadata, vehicle attributes, and location/precinct codes. The violation mix is dominated by one category — 'PHTO SCHOOL ZN SPEED VIOLATION' accounts for 4,416 of the issued tickets (about 52% of non-null descriptions) — which also drives the issuing_agency skew toward 'V' and law_section '408'. Geographically, registration_state is heavily NY (6,935) with NJ and PA trailing, and violation_county splits across Queens, Manhattan, Brooklyn, and the Bronx but with inconsistent codes (e.g., 'QN' vs 'Qns', 'BK' vs 'Kings'). Watch out for heavy nulls and placeholder zeros: meter_number, unregistered_vehicle, time_first_observed, and violation_post_code are >70% null, while issuer_precinct, feet_from_curb, and street_code* are dominated by '0' sentinel values. Vehicle_color also has unnormalized variants ('BK'/'BLK'/'BLACK', 'GY'/'GREY'/'GRY') that will need cleanup before any analysis.

citing: violation_description · issuing_agency · registration_state · violation_county · vehicle_make · vehicle_body_type · vehicle_color · plate_type · law_section · meter_number · unregistered_vehicle · violation_post_code · feet_from_curb · issuer_precinct

Out[4]:

saturn.schema() · 40 columns

column kind n null% unique alerts
summons_number text 10,000 0.0% 10,000 near_unique one_word allcaps short_text
plate_id text 10,000 0.0% 9,519 near_unique one_word allcaps short_text
registration_state categorical 10,000 0.0% 50
plate_type categorical 10,000 0.0% 27
issue_date categorical 10,000 0.0% 687 long_tail
violation_code categorical 10,000 0.0% 62
vehicle_body_type categorical 10,000 1.3% 81
vehicle_make categorical 10,000 0.8% 126
issuing_agency categorical 10,000 0.0% 20
street_code1 text 10,000 0.0% 1,420 one_word allcaps short_text duplicates
street_code2 text 10,000 0.0% 1,349 one_word allcaps short_text duplicates
street_code3 text 10,000 0.0% 1,317 one_word allcaps short_text duplicates
vehicle_expiration_date text 10,000 0.0% 1,040 one_word allcaps short_text duplicates
violation_location categorical 10,000 44.9% 87 null_rate
violation_precinct categorical 10,000 0.0% 88
issuer_precinct categorical 10,000 0.0% 121
issuer_code text 10,000 0.0% 1,420 one_word allcaps short_text duplicates
issuer_command categorical 10,000 44.2% 228 null_rate
issuer_squad categorical 10,000 63.6% 23 null_rate
violation_time text 10,000 0.0% 1,432 one_word allcaps short_text duplicates
violation_county categorical 10,000 2.7% 13
violation_in_front_of_or_opposite categorical 10,000 46.9% 4 null_rate
street_name text 10,000 0.0% 3,115 multilingual allcaps duplicates
intersecting_street text 10,000 48.1% 1,413 allcaps null_rate short_text duplicates
date_first_observed categorical 10,000 0.0% 147 long_tail imbalance
law_section categorical 10,000 0.0% 2
sub_division categorical 10,000 0.0% 76
days_parking_in_effect categorical 10,000 50.6% 21 null_rate
from_hours_in_effect categorical 10,000 68.3% 26 null_rate
to_hours_in_effect categorical 10,000 68.3% 31 null_rate
vehicle_color categorical 10,000 9.4% 99
unregistered_vehicle categorical 10,000 84.9% 1 null_rate imbalance
vehicle_year categorical 10,000 0.0% 39
meter_number categorical 10,000 84.8% 7 long_tail null_rate imbalance
feet_from_curb categorical 10,000 0.0% 11 imbalance
house_number text 10,000 47.7% 2,350 one_word allcaps null_rate short_text duplicates
time_first_observed categorical 10,000 78.5% 207 long_tail null_rate
violation_description categorical 10,000 15.1% 74
violation_post_code categorical 10,000 78.7% 53 null_rate
violation_legal_code categorical 10,000 55.8% 1 null_rate imbalance
Fig 1.
violation_description · Shows how heavily school-zone speed violations dominate the ticket mix versus traditional parking offenses.
Show data table
Top values for violation_description (20 unique shown, of 74 total).
valuecountshare
PHTO SCHOOL ZN SPEED VIOLATION441644.2%
No Parking Street Cleaning142814.3%
14-No Standing5986.0%
40-Fire Hydrant4634.6%
20A-No Parking (Non-COM)1311.3%
19-No Stand (bus stop)1231.2%
16A-No Std (Com Veh) Non-COM1171.2%
46A-Double Parking (Non-COM)1061.1%
Detached Trailer1051.1%
Fire Hydrant940.9%
71A-Insp Sticker Expired (NYS)770.8%
70A-Reg. Sticker Expired (NYS)660.7%
No Standing610.6%
Missing Equipment560.6%
50-Crosswalk530.5%
74-Missing Display Plate390.4%
13-No Stand (taxi stand)380.4%
17-No Stand (exc auth veh)380.4%
Double Parking320.3%
98-Obstructing Driveway310.3%
Fig 2.
registration_state · Confirms NY plates make up the bulk, with NJ and PA as the main out-of-state contributors.
Show data table
Top values for registration_state (20 unique shown, of 50 total).
valuecountshare
NY693569.3%
NJ9179.2%
PA4704.7%
CT2472.5%
FL2352.4%
VA2202.2%
ME1251.2%
MA1241.2%
99880.9%
GA650.7%
NC640.6%
TN560.6%
MD530.5%
TX360.4%
OH310.3%
IN300.3%
IL280.3%
CA270.3%
SC260.3%
MI240.2%
Fig 3.
vehicle_make · Highlights the most-ticketed manufacturers, led by Honda and Toyota.
Show data table
Top values for vehicle_make (20 unique shown, of 126 total).
valuecountshare
HONDA133113.3%
TOYOT130213.0%
NISSA7707.7%
FORD6036.0%
BMW5595.6%
ME/BE5215.2%
JEEP4504.5%
CHEVR4494.5%
HYUND3653.6%
SUBAR2732.7%
KIA2682.7%
LEXUS2682.7%
MAZDA2572.6%
AUDI2422.4%
ACURA2212.2%
VOLKS1992.0%
DODGE1751.8%
TESLA1521.5%
INFIN1511.5%
GMC1341.3%
Fig 4.
violation_county · Useful for spotting both the borough distribution and the inconsistent county code spellings that need normalizing.
Show data table
Top values for violation_county (13 unique shown, of 13 total).
valuecountshare
QN177317.7%
NY147214.7%
BK123312.3%
BX102710.3%
K9369.4%
Q9029.0%
Kings7377.4%
Qns4144.1%
ST4034.0%
Bronx3954.0%
MN3143.1%
R1161.2%
Rich70.1%
Fig 5.
vehicle_color · Reveals the long tail of color codes and duplicate labels (BK/BLK/BLACK) that should be consolidated.
Show data table
Top values for vehicle_color (20 unique shown, of 99 total).
valuecountshare
GY207920.8%
BK178417.8%
WH157915.8%
BL6316.3%
RD3483.5%
WHITE3473.5%
BLK2752.8%
BLACK2732.7%
GREY2392.4%
GRY1671.7%
GR1481.5%
BLUE1311.3%
RED1241.2%
GRAY1131.1%
SILVE991.0%
WHT650.7%
YW620.6%
BR600.6%
WHI570.6%
BLU460.5%
Fig 6.
Per-column null rate across the corpus. Columns are ordered by input position.
Show data table
Per-column null rate across the corpus.
columnkindnull %
summons_numbertext0.0%
plate_idtext0.0%
registration_statecategorical0.0%
plate_typecategorical0.0%
issue_datecategorical0.0%
violation_codecategorical0.0%
vehicle_body_typecategorical1.3%
vehicle_makecategorical0.8%
issuing_agencycategorical0.0%
street_code1text0.0%
street_code2text0.0%
street_code3text0.0%
vehicle_expiration_datetext0.0%
violation_locationcategorical44.9%
violation_precinctcategorical0.0%
issuer_precinctcategorical0.0%
issuer_codetext0.0%
issuer_commandcategorical44.2%
issuer_squadcategorical63.6%
violation_timetext0.0%
violation_countycategorical2.7%
violation_in_front_of_or_oppositecategorical46.9%
street_nametext0.0%
intersecting_streettext48.1%
date_first_observedcategorical0.0%
law_sectioncategorical0.0%
sub_divisioncategorical0.0%
days_parking_in_effectcategorical50.6%
from_hours_in_effectcategorical68.3%
to_hours_in_effectcategorical68.3%
vehicle_colorcategorical9.4%
unregistered_vehiclecategorical84.9%
vehicle_yearcategorical0.0%
meter_numbercategorical84.8%
feet_from_curbcategorical0.0%
house_numbertext47.7%
time_first_observedcategorical78.5%
violation_descriptioncategorical15.1%
violation_post_codecategorical78.7%
violation_legal_codecategorical55.8%
Fig 7.
Language mix across all text columns (per-string detection, sampled).
Show data table
Per-language counts (total 4,612 detected strings).
langcountshare
en359678.0%
ja61413.3%
es861.9%
zh591.3%
de561.2%
fr390.8%
nl250.5%
it210.5%
pt150.3%
ko140.3%
ca140.3%
ar140.3%
ru120.3%
cs100.2%
no90.2%
uk80.2%
eu50.1%
id40.1%
pl30.1%
gl10.0%
da10.0%
ms10.0%
te10.0%
ro10.0%
lt10.0%
sv10.0%
mk10.0%

summons_number text identifier

This is a unique 10-digit numeric identifier per row (likely a parking/traffic summons number), with all 10,000 values distinct and uniformly 10 characters long. There are no nulls, no duplicates, and every value is a single token, consistent with a primary key rather than a feature. The allcaps flag is a quirk of the detector treating digit-only strings as uppercase.

Treatment: Drop from modelling; retain as a join key.

anthropic:claude-opus-4-7 · confidence high
Out[13]:

saturn.columns["summons_number"].stats

statvalue
n10,000
nulls0 (0.0%)
unique10,000
len_min 10
len_max 10
len_mean 10
len_median 10
len_p95 10
word_mean 1
word_median 1
n_empty 0
n_duplicates 0
duplicate_rate 0
vocab_size 10,000
readability_flesch_mean 121.2
emoji_rate 0
url_rate 0
one_word_rate 1
allcaps_rate 1
boilerplate_rate 0
alert: near_unique100.0% of rows are unique strings
alert: one_word100.0% rows are a single word
alert: allcaps100.0% rows are all-caps
alert: short_text95th-percentile length under 20 chars
Fig 8.
Character-length distribution for summons_number.
Show data table
Character-length distribution for summons_number (mean: 10.0).
charscount
10 – 100
10 – 100
10 – 100
10 – 100
10 – 100
10 – 100
10 – 100
10 – 100
10 – 100
10 – 100
10 – 100
10 – 100
10 – 100
10 – 100
10 – 100
10 – 100
10 – 100
10 – 100
10 – 100
10 – 100
10 – 1010000
10 – 100
10 – 100
10 – 100
10 – 100
10 – 100
10 – 100
10 – 100
10 – 100
10 – 100
10 – 100
10 – 100
10 – 100
10 – 100
10 – 100
10 – 100
10 – 100
10 – 100
10 – 100
10 – 100

plate_id text identifier

This is almost certainly a license/plate identifier: 9,519 unique values across 10,000 rows, all single-token, 99.99% uppercase, with lengths between 2 and 10 characters (mean 6.88). Notably, 'blankplate' appears 34 times and the duplicate rate is 4.81% (481 records), suggesting placeholder values and a small amount of legitimate plate reuse. No nulls or empties, but the placeholder token will pollute any join or uniqueness assumption.

Treatment: Treat as an identifier key; normalize case, map 'BLANKPLATE' to null, then left-join on this id.

anthropic:claude-opus-4-7 · confidence high
Out[16]:

saturn.columns["plate_id"].stats

statvalue
n10,000
nulls0 (0.0%)
unique9,519
len_min 2
len_max 10
len_mean 6.879
len_median 7
len_p95 7
word_mean 1
word_median 1
n_empty 0
n_duplicates 481
duplicate_rate 0.0481
vocab_size 9,519
readability_flesch_mean 100.5
emoji_rate 0
url_rate 0
one_word_rate 1
allcaps_rate 0.9999
boilerplate_rate 0
alert: near_unique95.2% of rows are unique strings
alert: one_word100.0% rows are a single word
alert: allcaps100.0% rows are all-caps
alert: short_text95th-percentile length under 20 chars
Fig 9.
Character-length distribution for plate_id.
Show data table
Character-length distribution for plate_id (mean: 6.8788).
charscount
2 – 21
2 – 20
2 – 30
3 – 30
3 – 30
3 – 35
3 – 30
3 – 40
4 – 40
4 – 40
4 – 412
4 – 40
4 – 50
5 – 50
5 – 50
5 – 558
5 – 50
5 – 60
6 – 60
6 – 60
6 – 61578
6 – 60
6 – 70
7 – 70
7 – 70
7 – 77876
7 – 70
7 – 80
8 – 80
8 – 80
8 – 8432
8 – 80
8 – 90
9 – 90
9 – 90
9 – 93
9 – 90
9 – 100
10 – 100
10 – 1035

registration_state categorical feature

Two-letter US state codes identifying where a vehicle is registered, dominated by NY at 69.35% of 10,000 rows with NJ, PA, CT, and FL trailing — consistent with an NYC-area enforcement dataset. Cardinality is 50 with entropy ratio 0.36, and one suspicious non-state token "99" appears 88 times, likely a sentinel for unknown/out-of-country plates.

Treatment: One-hot encode top states, bucket the long tail into 'OTHER', and recode '99' as missing.

anthropic:claude-opus-4-7 · confidence high
Out[19]:

saturn.columns["registration_state"].stats

statvalue
n10,000
nulls0 (0.0%)
unique50
top_value NY
top_rate 0.6935
cardinality 50
entropy 2.034
entropy_ratio 0.3603
Fig 10.
Top values for registration_state.
Show data table
Top values for registration_state (20 unique shown, of 50 total).
valuecountshare
NY693569.3%
NJ9179.2%
PA4704.7%
CT2472.5%
FL2352.4%
VA2202.2%
ME1251.2%
MA1241.2%
99880.9%
GA650.7%
NC640.6%
TN560.6%
MD530.5%
TX360.4%
OH310.3%
IN300.3%
IL280.3%
CA270.3%
SC260.3%
MI240.2%

plate_type categorical feature

This column encodes vehicle plate type codes (e.g., PAS, OMT, COM), almost certainly from a parking or traffic dataset. The distribution is heavily dominated by passenger plates, with PAS accounting for 9072 of 10000 rows (top_rate 0.9072) and entropy_ratio of just 0.146 across 27 categories. A small but notable 77 rows carry the placeholder code '999', which likely represents missing or unknown plate types despite null_rate being 0.

Treatment: Collapse rare codes into 'other' and treat '999' as missing before one-hot encoding.

anthropic:claude-opus-4-7 · confidence high
Out[22]:

saturn.columns["plate_type"].stats

statvalue
n10,000
nulls0 (0.0%)
unique27
top_value PAS
top_rate 0.9072
cardinality 27
entropy 0.6958
entropy_ratio 0.1463
Fig 11.
Top values for plate_type.
Show data table
Top values for plate_type (20 unique shown, of 27 total).
valuecountshare
PAS907290.7%
OMT3303.3%
COM2452.5%
SRF1031.0%
OMS840.8%
999770.8%
ORG170.2%
TRL110.1%
MED80.1%
RGL80.1%
MOT70.1%
NYS60.1%
PSD60.1%
SPO40.0%
VAS30.0%
ITP30.0%
OMR20.0%
TRC20.0%
TOW20.0%
APP20.0%

issue_date categorical timestamp

This is an issue_date column stored as ISO-8601 timestamps but profiled as categorical, with 687 distinct dates across 10,000 rows and no nulls. The distribution is severely concentrated: 65.42% of rows fall on 2025-12-28, with 2025-12-30 (1,594) and 2025-12-29 (356) accounting for most of the rest, leaving a long tail of 2026 dates with single- or low-double-digit counts. The clustering at end-of-2025 suggests a bulk-issue or backfill event rather than organic daily issuance.

Treatment: Parse as datetime and derive features (day, month, days-since-epoch); investigate the 2025-12-28 spike before using as a model feature.

anthropic:claude-opus-4-7 · confidence high
Out[25]:

saturn.columns["issue_date"].stats

statvalue
n10,000
nulls0 (0.0%)
unique687
top_value 2025-12-28T00:00:00.000
top_rate 0.6542
cardinality 687
entropy 2.765
entropy_ratio 0.2934
alert: long_tail368 singleton categories
Fig 12.
Top values for issue_date.
Show data table
Top values for issue_date (20 unique shown, of 687 total).
valuecountshare
2025-12-28T00:00:00.000654265.4%
2025-12-30T00:00:00.000159415.9%
2025-12-29T00:00:00.0003563.6%
2026-06-26T00:00:00.000140.1%
2026-09-27T00:00:00.000130.1%
2026-09-25T00:00:00.000120.1%
2025-12-31T00:00:00.000120.1%
2026-06-27T00:00:00.000110.1%
2026-10-25T00:00:00.000100.1%
2026-08-31T00:00:00.000100.1%
2026-08-27T00:00:00.000100.1%
2026-07-26T00:00:00.000100.1%
2026-06-30T00:00:00.000100.1%
2026-08-25T00:00:00.00090.1%
2026-10-29T00:00:00.00080.1%
2026-10-17T00:00:00.00080.1%
2026-10-05T00:00:00.00080.1%
2026-09-23T00:00:00.00080.1%
2026-07-27T00:00:00.00080.1%
2026-07-24T00:00:00.00080.1%

violation_code categorical feature

Categorical violation_code with 62 distinct codes stored as strings and zero nulls across 10,000 rows. Distribution is heavily concentrated: code '36' alone accounts for 44.16% of records, followed by '21' at 14.63%, giving an entropy ratio of 0.52 — roughly half the maximum for this cardinality. The top 10 codes cover the bulk of traffic, leaving a long tail of rare codes.

Treatment: Group rare codes into an 'other' bucket, then one-hot or target-encode before modelling.

anthropic:claude-opus-4-7 · confidence high
Out[28]:

saturn.columns["violation_code"].stats

statvalue
n10,000
nulls0 (0.0%)
unique62
top_value 36
top_rate 0.4416
cardinality 62
entropy 3.1
entropy_ratio 0.5206
Fig 13.
Top values for violation_code.
Show data table
Top values for violation_code (20 unique shown, of 62 total).
valuecountshare
36441644.2%
21146314.6%
408628.6%
148588.6%
463603.6%
202442.4%
982422.4%
191681.7%
161331.3%
661311.3%
711161.2%
741141.1%
701041.0%
50961.0%
17790.8%
78750.8%
51660.7%
80560.6%
67470.5%
13380.4%

vehicle_body_type categorical feature

Column holds short vehicle body-type codes (SUBN, 4DSD, SDN, VAN, PICK...) typical of DMV/parking-violation feeds. Distribution is heavily concentrated: SUBN alone covers 51.9% of rows and the top two codes account for roughly 72%, yet there are 81 distinct codes producing a long tail. Entropy ratio of 0.41 confirms the lopsided spread, and nulls are minor at 1.31%.

Treatment: Group rare codes into an 'other' bucket and one-hot encode the top categories.

anthropic:claude-opus-4-7 · confidence high
Out[31]:

saturn.columns["vehicle_body_type"].stats

statvalue
n10,000
nulls131 (1.3%)
unique81
top_value SUBN
top_rate 0.5188
cardinality 81
entropy 2.599
entropy_ratio 0.41
Fig 14.
Top values for vehicle_body_type.
Show data table
Top values for vehicle_body_type (20 unique shown, of 81 total).
valuecountshare
SUBN512051.2%
4DSD206720.7%
SDN6706.7%
VAN2752.8%
SPOR2332.3%
PICK1941.9%
TRLR1751.8%
SEDA1151.1%
UT1111.1%
SW1101.1%
2DSD940.9%
4D820.8%
DELV770.8%
SEMI530.5%
TAXI520.5%
SU520.5%
SD510.5%
P-U460.5%
TRAC410.4%
CONV260.3%

vehicle_make categorical feature

This is a categorical vehicle make field with 126 distinct values across 10,000 rows and a low 0.78% null rate. Values appear truncated to 5 characters (TOYOT, NISSA, ME/BE, CHEVR, HYUND, SUBAR), which will collide brands and complicate joins. HONDA leads at 13.4% followed closely by TOYOT at 13.0%, and entropy ratio of 0.67 indicates a long tail beyond the top 10.

Treatment: Normalize truncated codes to canonical make names, then group rare levels before encoding.

anthropic:claude-opus-4-7 · confidence high
Out[34]:

saturn.columns["vehicle_make"].stats

statvalue
n10,000
nulls78 (0.8%)
unique126
top_value HONDA
top_rate 0.1341
cardinality 126
entropy 4.661
entropy_ratio 0.668
Fig 15.
Top values for vehicle_make.
Show data table
Top values for vehicle_make (20 unique shown, of 126 total).
valuecountshare
HONDA133113.3%
TOYOT130213.0%
NISSA7707.7%
FORD6036.0%
BMW5595.6%
ME/BE5215.2%
JEEP4504.5%
CHEVR4494.5%
HYUND3653.6%
SUBAR2732.7%
KIA2682.7%
LEXUS2682.7%
MAZDA2572.6%
AUDI2422.4%
ACURA2212.2%
VOLKS1992.0%
DODGE1751.8%
TESLA1521.5%
INFIN1511.5%
GMC1341.3%

issuing_agency categorical feature

Single-letter codes for the agency that issued each record, with 20 distinct values and no nulls across 10,000 rows. Distribution is heavily concentrated: 'V' alone accounts for 44.16% and the top four codes (V, T, S, P) cover the vast majority, while codes like M, O fall to single or low double digits. Entropy ratio of 0.46 confirms the imbalance.

Treatment: One-hot encode the top categories and bucket the long tail into 'other'.

anthropic:claude-opus-4-7 · confidence high
Out[37]:

saturn.columns["issuing_agency"].stats

statvalue
n10,000
nulls0 (0.0%)
unique20
top_value V
top_rate 0.4416
cardinality 20
entropy 2.007
entropy_ratio 0.4644
Fig 16.
Top values for issuing_agency.
Show data table
Top values for issuing_agency (20 unique shown, of 20 total).
valuecountshare
V441644.2%
T213121.3%
S194619.5%
P132513.2%
K410.4%
N380.4%
A230.2%
Y170.2%
M130.1%
O90.1%
C90.1%
880.1%
360.1%
X50.1%
930.0%
W30.0%
L20.0%
R20.0%
F20.0%
U10.0%

street_code1 text foreign_key

This is `street_code1`, a short numeric street identifier stored as text (len_max 5, one_word_rate 1.0, 1420 distinct codes across 10000 rows). The dominant surprise is that 4817 rows — nearly half — carry the placeholder value "0", driving the 0.858 duplicate_rate; the next most frequent code ("13610") only appears 52 times. No nulls, but the "0" sentinel effectively functions as a missing/unknown marker.

Treatment: Treat as a categorical code, recode "0" to missing, then left-join to a street reference table.

anthropic:claude-opus-4-7 · confidence high
Out[40]:

saturn.columns["street_code1"].stats

statvalue
n10,000
nulls0 (0.0%)
unique1,420
len_min 1
len_max 5
len_mean 3.026
len_median 4
len_p95 5
word_mean 1
word_median 1
n_empty 0
n_duplicates 8,580
duplicate_rate 0.858
vocab_size 1,420
readability_flesch_mean 121.2
emoji_rate 0
url_rate 0
one_word_rate 1
allcaps_rate 0.5168
boilerplate_rate 0
alert: one_word100.0% rows are a single word
alert: allcaps51.7% rows are all-caps
alert: short_text95th-percentile length under 20 chars
alert: duplicates85.8% duplicate strings
Fig 17.
Character-length distribution for street_code1.
Show data table
Character-length distribution for street_code1 (mean: 3.0255).
charscount
1 – 14817
1 – 10
1 – 10
1 – 10
1 – 20
2 – 20
2 – 20
2 – 20
2 – 20
2 – 20
2 – 215
2 – 20
2 – 20
2 – 20
2 – 20
2 – 30
3 – 30
3 – 30
3 – 30
3 – 30
3 – 33
3 – 30
3 – 30
3 – 30
3 – 40
4 – 40
4 – 40
4 – 40
4 – 40
4 – 40
4 – 4426
4 – 40
4 – 40
4 – 40
4 – 40
4 – 50
5 – 50
5 – 50
5 – 50
5 – 54739

street_code2 text feature

This looks like a secondary street code stored as text, with 1349 unique short tokens (max length 5, mean 2.94 chars) and every value a single word. The column is dominated by '0', which accounts for 5005 of 10000 rows, with another 359 rows holding '40404'; combined with an 86.51% duplicate rate this leaves very little discriminating signal. No nulls, but the heavy '0' mass likely encodes a missing/sentinel state rather than a real code.

Treatment: Treat '0' as a missing sentinel and use as a low-cardinality categorical, or drop given the extreme mode dominance.

anthropic:claude-opus-4-7 · confidence high
Out[43]:

saturn.columns["street_code2"].stats

statvalue
n10,000
nulls0 (0.0%)
unique1,349
len_min 1
len_max 5
len_mean 2.938
len_median 1
len_p95 5
word_mean 1
word_median 1
n_empty 0
n_duplicates 8,651
duplicate_rate 0.8651
vocab_size 1,349
readability_flesch_mean 121.2
emoji_rate 0
url_rate 0
one_word_rate 1
allcaps_rate 0.496
boilerplate_rate 0
alert: one_word100.0% rows are a single word
alert: allcaps49.6% rows are all-caps
alert: short_text95th-percentile length under 20 chars
alert: duplicates86.5% duplicate strings
Fig 18.
Character-length distribution for street_code2.
Show data table
Character-length distribution for street_code2 (mean: 2.9379).
charscount
1 – 15005
1 – 10
1 – 10
1 – 10
1 – 20
2 – 20
2 – 20
2 – 20
2 – 20
2 – 20
2 – 235
2 – 20
2 – 20
2 – 20
2 – 20
2 – 30
3 – 30
3 – 30
3 – 30
3 – 30
3 – 33
3 – 30
3 – 30
3 – 30
3 – 40
4 – 40
4 – 40
4 – 40
4 – 40
4 – 40
4 – 4490
4 – 40
4 – 40
4 – 40
4 – 40
4 – 50
5 – 50
5 – 50
5 – 50
5 – 54467

street_code3 text feature

Stored as text but the values are short numeric codes (len_max 5, one_word_rate 1.0, 1317 unique tokens), consistent with a street or address code lookup. The distribution is dominated by '0' (5235/10000) with '40404' a distant second at 359, driving an 86.83% duplicate_rate. The allcaps_rate of 0.4753 is an artifact of digit-only strings being counted as uppercase.

Treatment: Treat as a categorical code: keep as string, collapse rare levels, and consider a binary flag for the dominant '0' value.

anthropic:claude-opus-4-7 · confidence high
Out[46]:

saturn.columns["street_code3"].stats

statvalue
n10,000
nulls0 (0.0%)
unique1,317
len_min 1
len_max 5
len_mean 2.85
len_median 1
len_p95 5
word_mean 1
word_median 1
n_empty 0
n_duplicates 8,683
duplicate_rate 0.8683
vocab_size 1,317
readability_flesch_mean 121.2
emoji_rate 0
url_rate 0
one_word_rate 1
allcaps_rate 0.4753
boilerplate_rate 0
alert: one_word100.0% rows are a single word
alert: allcaps47.5% rows are all-caps
alert: short_text95th-percentile length under 20 chars
alert: duplicates86.8% duplicate strings
Fig 19.
Character-length distribution for street_code3.
Show data table
Character-length distribution for street_code3 (mean: 2.8496).
charscount
1 – 15235
1 – 10
1 – 10
1 – 10
1 – 20
2 – 20
2 – 20
2 – 20
2 – 20
2 – 20
2 – 212
2 – 20
2 – 20
2 – 20
2 – 20
2 – 30
3 – 30
3 – 30
3 – 30
3 – 30
3 – 33
3 – 30
3 – 30
3 – 30
3 – 40
4 – 40
4 – 40
4 – 40
4 – 40
4 – 40
4 – 4522
4 – 40
4 – 40
4 – 40
4 – 40
4 – 50
5 – 50
5 – 50
5 – 50
5 – 54228

vehicle_expiration_date text timestamp

Stored as text but functionally a YYYYMMDD vehicle expiration date, with lengths clustered at 8-10 characters and one token per row. Over half the rows (5,492) are the sentinel '0.00000000' and another 556 are '88888888', plus 126 entries like '20258888' that mix a real year with a placeholder month/day — so roughly 61% of values are not real dates. Genuine dates such as 20260930 and 20260228 appear only in the dozens, and the column is 89.6% duplicates across just 1,040 unique values.

Treatment: Parse as YYYYMMDD after mapping '0.00000000', '88888888', and any *8888 tails to null.

anthropic:claude-opus-4-7 · confidence high
Out[49]:

saturn.columns["vehicle_expiration_date"].stats

statvalue
n10,000
nulls0 (0.0%)
unique1,040
len_min 8
len_max 10
len_mean 9.098
len_median 10
len_p95 10
word_mean 1
word_median 1
n_empty 0
n_duplicates 8,960
duplicate_rate 0.896
vocab_size 1,040
readability_flesch_mean 121.2
emoji_rate 0
url_rate 0
one_word_rate 1
allcaps_rate 1
boilerplate_rate 0
alert: one_word100.0% rows are a single word
alert: allcaps100.0% rows are all-caps
alert: short_text95th-percentile length under 20 chars
alert: duplicates89.6% duplicate strings
Fig 20.
Character-length distribution for vehicle_expiration_date.
Show data table
Character-length distribution for vehicle_expiration_date (mean: 9.0984).
charscount
8 – 84508
8 – 80
8 – 80
8 – 80
8 – 80
8 – 80
8 – 80
8 – 80
8 – 80
8 – 80
8 – 90
9 – 90
9 – 90
9 – 90
9 – 90
9 – 90
9 – 90
9 – 90
9 – 90
9 – 90
9 – 90
9 – 90
9 – 90
9 – 90
9 – 90
9 – 90
9 – 90
9 – 90
9 – 90
9 – 100
10 – 100
10 – 100
10 – 100
10 – 100
10 – 100
10 – 100
10 – 100
10 – 100
10 – 100
10 – 105492

violation_location categorical feature

This appears to be a violation_location code, likely a precinct or zone identifier stored as a zero-padded string (e.g., '0018', '0047') mixed with non-padded variants ('115', '114'), suggesting inconsistent formatting across sources. Cardinality is 87 with very high entropy ratio (0.929), so values are spread evenly with no dominant location — the top code only accounts for 5.1% of rows. Most striking: 44.85% of rows are null, which is flagged as an alert and severely limits usability.

Treatment: Normalize the zero-padding inconsistency and treat nulls as a separate category before one-hot or target encoding.

anthropic:claude-opus-4-7 · confidence high
Out[52]:

saturn.columns["violation_location"].stats

statvalue
n10,000
nulls4,485 (44.9%)
unique87
top_value 0018
top_rate 0.0515
cardinality 87
entropy 5.988
entropy_ratio 0.9294
alert: null_rate44.9% null
Fig 21.
Top values for violation_location.
Show data table
Top values for violation_location (20 unique shown, of 87 total).
valuecountshare
00182842.8%
1152202.2%
1141781.8%
1031621.6%
00471401.4%
00751391.4%
00771351.4%
00621301.3%
00721291.3%
1101271.3%
00011251.2%
1121241.2%
00611201.2%
00841061.1%
00341051.1%
00201041.0%
1091021.0%
0067961.0%
0073961.0%
108930.9%

violation_precinct categorical feature

This column encodes the NYPD precinct where the violation occurred, stored as a string with 88 distinct codes. The dominant surprise is that 44.85% of rows carry the value '0', which is almost certainly a sentinel for missing/non-applicable precinct rather than a real precinct number; legitimate precincts like 18, 115, and 114 follow far behind. Entropy ratio of 0.66 reflects this heavy concentration on the sentinel.

Treatment: Recode '0' as missing before using as a categorical feature.

anthropic:claude-opus-4-7 · confidence high
Out[55]:

saturn.columns["violation_precinct"].stats

statvalue
n10,000
nulls0 (0.0%)
unique88
top_value 0
top_rate 0.4485
cardinality 88
entropy 4.295
entropy_ratio 0.6649
Fig 22.
Top values for violation_precinct.
Show data table
Top values for violation_precinct (20 unique shown, of 88 total).
valuecountshare
0448544.9%
182842.8%
1152202.2%
1141781.8%
1031621.6%
471401.4%
751391.4%
771351.4%
621301.3%
721291.3%
1101271.3%
11251.2%
1121241.2%
611201.2%
841061.1%
341051.1%
201041.0%
1091021.0%
67961.0%
73961.0%

issuer_precinct categorical feature

This is the precinct number of the issuing officer, with 121 distinct codes across 10,000 rows and no nulls. The distribution is dominated by the value "0" at 64.18% of rows, which is almost certainly a sentinel/placeholder rather than a real precinct, leaving genuine precincts (e.g., 18, 115, 103) as long-tail minorities. Entropy ratio of 0.446 confirms the heavy concentration on that single code.

Treatment: Treat "0" as missing/sentinel and group rare precincts before one-hot or target encoding.

anthropic:claude-opus-4-7 · confidence high
Out[58]:

saturn.columns["issuer_precinct"].stats

statvalue
n10,000
nulls0 (0.0%)
unique121
top_value 0
top_rate 0.6418
cardinality 121
entropy 3.088
entropy_ratio 0.4463
Fig 23.
Top values for issuer_precinct.
Show data table
Top values for issuer_precinct (20 unique shown, of 121 total).
valuecountshare
0641864.2%
182822.8%
1151611.6%
1031391.4%
611151.1%
621131.1%
11041.0%
109900.9%
70870.9%
114810.8%
19800.8%
14800.8%
20780.8%
110750.8%
63730.7%
102680.7%
6650.7%
60590.6%
75570.6%
10570.6%

issuer_code text foreign_key

This is a categorical issuer identifier stored as text, with 1,420 distinct codes across 10,000 rows and an 85.8% duplicate rate. The dominant value '0' accounts for 5,314 rows (over half the column), suggesting it is a sentinel or 'unknown issuer' placeholder rather than a real code. Remaining values look like 6-digit numeric IDs (len_max 6, len_p95 6), but the median length of 1 confirms how heavily the '0' bucket skews the distribution.

Treatment: Treat '0' as missing and join the remaining codes to an issuer reference table.

anthropic:claude-opus-4-7 · confidence high
Out[61]:

saturn.columns["issuer_code"].stats

statvalue
n10,000
nulls0 (0.0%)
unique1,420
len_min 1
len_max 6
len_mean 3.338
len_median 1
len_p95 6
word_mean 1
word_median 1
n_empty 0
n_duplicates 8,580
duplicate_rate 0.858
vocab_size 1,420
readability_flesch_mean 121.2
emoji_rate 0
url_rate 0
one_word_rate 1
allcaps_rate 0.4686
boilerplate_rate 0
alert: one_word100.0% rows are a single word
alert: allcaps46.9% rows are all-caps
alert: short_text95th-percentile length under 20 chars
alert: duplicates85.8% duplicate strings
Fig 24.
Character-length distribution for issuer_code.
Show data table
Character-length distribution for issuer_code (mean: 3.3383).
charscount
1 – 15314
1 – 10
1 – 10
1 – 20
2 – 20
2 – 20
2 – 20
2 – 20
2 – 20
2 – 20
2 – 20
2 – 20
2 – 30
3 – 30
3 – 30
3 – 30
3 – 37
3 – 30
3 – 30
3 – 40
4 – 40
4 – 40
4 – 40
4 – 40
4 – 41
4 – 40
4 – 40
4 – 40
4 – 50
5 – 50
5 – 50
5 – 50
5 – 524
5 – 50
5 – 50
5 – 60
6 – 60
6 – 60
6 – 60
6 – 64654

issuer_command categorical feature

This column holds short alphanumeric codes (e.g., T302, T401, EPIU, MTTF) that look like issuer-side command or instruction tokens, with 228 distinct values across 10,000 rows. It is sparsely populated — 44.16% null — yet entropy_ratio of 0.83 over the non-null portion shows the codes spread fairly evenly, with the most common value T302 covering only 6.7%. No single code dominates, so the missingness is the more striking signal than concentration.

Treatment: Treat as a categorical feature with an explicit 'missing' level, then target- or frequency-encode before modelling.

anthropic:claude-opus-4-7 · confidence high
Out[64]:

saturn.columns["issuer_command"].stats

statvalue
n10,000
nulls4,416 (44.2%)
unique228
top_value T302
top_rate 0.06698
cardinality 228
entropy 6.523
entropy_ratio 0.8327
alert: null_rate44.2% null
Fig 25.
Top values for issuer_command.
Show data table
Top values for issuer_command (20 unique shown, of 228 total).
valuecountshare
T3023743.7%
T4013013.0%
T1032302.3%
T4022232.2%
T1061871.9%
T3011691.7%
T1021451.5%
EPIU1421.4%
MTTF1331.3%
KN021051.1%
T1051041.0%
KN08950.9%
QW01950.9%
MN12880.9%
BX12860.9%
T303850.9%
T201840.8%
MN07830.8%
QW02630.6%
KN04630.6%

issuer_squad categorical feature

A categorical code labelled issuer_squad with 23 distinct values, dominated by the placeholder-looking '0000' which accounts for 41.6% of non-nulls (1513 rows) while the rest are single-letter tags like F, N, A, L. Most striking: 63.6% of rows are null, and entropy_ratio of 0.73 suggests the remaining values are reasonably spread but anchored by that '0000' bucket which may represent unassigned issuers. The mix of a numeric-looking code with letter codes hints at inconsistent encoding conventions.

Treatment: Treat '0000' as a missing sentinel, impute or bucket rare letters, then one-hot encode.

anthropic:claude-opus-4-7 · confidence medium
Out[67]:

saturn.columns["issuer_squad"].stats

statvalue
n10,000
nulls6,361 (63.6%)
unique23
top_value 0000
top_rate 0.4158
cardinality 23
entropy 3.309
entropy_ratio 0.7315
alert: null_rate63.6% null
Fig 26.
Top values for issuer_squad.
Show data table
Top values for issuer_squad (20 unique shown, of 23 total).
valuecountshare
0000151315.1%
F3313.3%
N2452.5%
A2142.1%
L1801.8%
J1221.2%
M1201.2%
Q1101.1%
R1001.0%
H991.0%
E991.0%
X950.9%
Y850.9%
S710.7%
B700.7%
P440.4%
U290.3%
D280.3%
C250.2%
G220.2%

violation_time text timestamp

This column encodes the time of a violation as a fixed 5-character token like '0839A' or '1200P' (HHMM plus A/P meridiem indicator), with every value uppercase and exactly one word. Across 10,000 rows there are only 1,432 distinct values and an 85.7% duplicate rate, which is expected for clock times rather than a data quality issue. Null rate is negligible (0.0004) and the format is strikingly uniform — len_min, len_median, and len_max all equal 5.

Treatment: Parse the HHMM+A/P token into a proper time-of-day feature (e.g., minutes since midnight) before modelling.

anthropic:claude-opus-4-7 · confidence high
Out[70]:

saturn.columns["violation_time"].stats

statvalue
n10,000
nulls4 (0.0%)
unique1,432
len_min 5
len_max 5
len_mean 5
len_median 5
len_p95 5
word_mean 1
word_median 1
n_empty 0
n_duplicates 8,564
duplicate_rate 0.8567
vocab_size 1,433
readability_flesch_mean 121.2
emoji_rate 0
url_rate 0
one_word_rate 0.9999
allcaps_rate 1
boilerplate_rate 0
alert: one_word100.0% rows are a single word
alert: allcaps100.0% rows are all-caps
alert: short_text95th-percentile length under 20 chars
alert: duplicates85.7% duplicate strings
Fig 27.
Character-length distribution for violation_time.
Show data table
Character-length distribution for violation_time (mean: 5.0).
charscount
4 – 50
5 – 50
5 – 50
5 – 50
5 – 50
5 – 50
5 – 50
5 – 50
5 – 50
5 – 50
5 – 50
5 – 50
5 – 50
5 – 50
5 – 50
5 – 50
5 – 50
5 – 50
5 – 50
5 – 50
5 – 59996
5 – 50
5 – 50
5 – 50
5 – 50
5 – 50
5 – 50
5 – 50
5 – 50
5 – 50
5 – 50
5 – 50
5 – 50
5 – 50
5 – 50
5 – 50
5 – 50
5 – 50
5 – 50
5 – 60

violation_county categorical feature

This is a categorical county/borough code for NYC violations, with 13 distinct values across 10,000 rows and a 2.71% null rate. The top value 'QN' (Queens) covers 18.2% of rows, but the codes are inconsistent: Queens appears as both 'QN' and 'Q' (and 'Qns'), Brooklyn as 'BK', 'K', and 'Kings', and Bronx as 'BX' and 'Bronx'—so the true cardinality is lower than 13. Entropy ratio of 0.897 reflects this fragmentation rather than genuine diversity.

Treatment: Normalize aliases (QN/Q/Qns→Queens, BK/K/Kings→Brooklyn, BX/Bronx→Bronx) before encoding.

anthropic:claude-opus-4-7 · confidence high
Out[73]:

saturn.columns["violation_county"].stats

statvalue
n10,000
nulls271 (2.7%)
unique13
top_value QN
top_rate 0.1822
cardinality 13
entropy 3.32
entropy_ratio 0.8973
Fig 28.
Top values for violation_county.
Show data table
Top values for violation_county (13 unique shown, of 13 total).
valuecountshare
QN177317.7%
NY147214.7%
BK123312.3%
BX102710.3%
K9369.4%
Q9029.0%
Kings7377.4%
Qns4144.1%
ST4034.0%
Bronx3954.0%
MN3143.1%
R1161.2%
Rich70.1%

violation_in_front_of_or_opposite categorical feature

A categorical position code indicating where a violation occurred relative to a reference point — almost certainly 'F' (front), 'O' (opposite), 'I' (inside?), and a single 'R'. Nearly half the rows (46.85%) are null, and among the populated rows 'F' dominates at 66.85%. The 'R' code appears just once out of 10000, suggesting either a data-entry error or a rare legitimate category worth investigating.

Treatment: Impute or add an explicit 'missing' level, collapse the singleton 'R', then one-hot encode.

anthropic:claude-opus-4-7 · confidence high
Out[76]:

saturn.columns["violation_in_front_of_or_opposite"].stats

statvalue
n10,000
nulls4,685 (46.9%)
unique4
top_value F
top_rate 0.6685
cardinality 4
entropy 1.229
entropy_ratio 0.6145
alert: null_rate46.9% null
Fig 29.
Top values for violation_in_front_of_or_opposite.
Show data table
Top values for violation_in_front_of_or_opposite (4 unique shown, of 4 total).
valuecountshare
F355335.5%
O114011.4%
I6216.2%
R10.0%

street_name text feature

Street/intersection labels, mostly directional roadway descriptors like 'SB CROSS BAY BLVD @' with cardinal prefixes (sb/wb/nb/eb) and '@' separators indicating cross-streets — consistent with NYC traffic or transit data. Values are heavily duplicated (6881 of 10000, 3115 unique) and 77% all-caps, with strings capped at 20 chars suggesting upstream truncation. Language detection flags Japanese (614) and Chinese (59), but these are almost certainly false positives from short uppercase abbreviations rather than true multilingual content.

Treatment: Normalize case and parse into direction/street/cross-street components before using as a categorical feature.

anthropic:claude-opus-4-7 · confidence high
Out[79]:

saturn.columns["street_name"].stats

statvalue
n10,000
nulls4 (0.0%)
unique3,115
len_min 2
len_max 20
len_mean 14.87
len_median 16
len_p95 20
word_mean 3.513
word_median 3
n_empty 0
n_duplicates 6,881
duplicate_rate 0.6884
vocab_size 1,760
readability_flesch_mean 62.55
emoji_rate 0
url_rate 0
one_word_rate 0.01371
allcaps_rate 0.7732
boilerplate_rate 0
alert: multilingual28 languages detected in sample
alert: allcaps77.3% rows are all-caps
alert: duplicates68.8% duplicate strings
Fig 30.
Character-length distribution for street_name.
Show data table
Character-length distribution for street_name (mean: 14.871748699479792).
charscount
2 – 21
2 – 30
3 – 39
3 – 40
4 – 415
4 – 50
5 – 5150
5 – 60
6 – 6105
6 – 60
6 – 70
7 – 7533
7 – 80
8 – 8727
8 – 90
9 – 91009
9 – 100
10 – 10396
10 – 110
11 – 110
11 – 11415
11 – 120
12 – 12374
12 – 130
13 – 13489
13 – 140
14 – 14404
14 – 150
15 – 15344
15 – 160
16 – 160
16 – 16155
16 – 170
17 – 1790
17 – 180
18 – 18111
18 – 190
19 – 191013
19 – 200
20 – 203656

intersecting_street text metadata

This column holds short uppercase street-name fragments (mean length 9.3 chars, ~2.4 words) describing an intersecting street, likely paired with a primary address elsewhere. Nearly half the rows are null (48.1%) and 72.8% of the non-null values are duplicates, with common tokens like 'ST' (189), 'AVE' (84), and 'RD' dominating — many top values are bare suffixes ('ST', 'AVE', 'T', 'E') suggesting truncation or partial captures. Vocabulary is small (1,053 words across 1,413 unique values) and 80.9% of entries are all-caps, consistent with a municipal data-entry convention.

Treatment: Normalize case and standardize street-suffix abbreviations, then use as a categorical join key with the primary street column.

anthropic:claude-opus-4-7 · confidence high
Out[82]:

saturn.columns["intersecting_street"].stats

statvalue
n10,000
nulls4,813 (48.1%)
unique1,413
len_min 1
len_max 20
len_mean 9.271
len_median 8
len_p95 19
word_mean 2.423
word_median 2
n_empty 0
n_duplicates 3,774
duplicate_rate 0.7276
vocab_size 1,053
readability_flesch_mean 83.04
emoji_rate 0
url_rate 0
one_word_rate 0.1139
allcaps_rate 0.8091
boilerplate_rate 0
alert: allcaps80.9% rows are all-caps
alert: null_rate48.1% null
alert: short_text95th-percentile length under 20 chars
alert: duplicates72.8% duplicate strings
Fig 31.
Character-length distribution for intersecting_street.
Show data table
Character-length distribution for intersecting_street (mean: 9.271062271062272).
charscount
1 – 1192
1 – 20
2 – 2253
2 – 30
3 – 3130
3 – 40
4 – 4407
4 – 50
5 – 5308
5 – 60
6 – 6455
6 – 70
7 – 7646
7 – 80
8 – 8241
8 – 90
9 – 9357
9 – 100
10 – 10508
10 – 100
10 – 110
11 – 11210
11 – 120
12 – 12164
12 – 130
13 – 13265
13 – 140
14 – 14125
14 – 150
15 – 1588
15 – 160
16 – 1678
16 – 170
17 – 17110
17 – 180
18 – 18149
18 – 190
19 – 19253
19 – 200
20 – 20248

date_first_observed categorical metadata

Stored as a categorical YYYYMMDD string capturing the date a record was first observed, with 147 distinct values across 10,000 rows. The column is overwhelmingly dominated by the sentinel '0' (98.27%), leaving only ~173 rows with real dates clustered in late 2025 through 2026. Entropy ratio of 0.035 confirms almost no information content as-is.

Treatment: Replace '0' with null, parse remainder as date, and consider dropping unless the rare observed dates matter.

anthropic:claude-opus-4-7 · confidence high
Out[85]:

saturn.columns["date_first_observed"].stats

statvalue
n10,000
nulls0 (0.0%)
unique147
top_value 0
top_rate 0.9827
cardinality 147
entropy 0.2485
entropy_ratio 0.03452
alert: long_tail125 singleton categories
alert: imbalancetop value is 98.3% of rows
Fig 32.
Top values for date_first_observed.
Show data table
Top values for date_first_observed (20 unique shown, of 147 total).
valuecountshare
0982798.3%
2025122960.1%
2026100630.0%
2026090130.0%
2026110620.0%
2026110120.0%
2026092720.0%
2026092520.0%
2026091920.0%
2026091120.0%
2026090720.0%
2026082920.0%
2025082820.0%
2026062920.0%
2024060120.0%
2026052020.0%
2026042620.0%
2026032820.0%
2026032720.0%
2026031420.0%

law_section categorical feature

This is a binary categorical field encoding a law/statute section, taking only two codes ('408' and '1180') across all 10,000 rows with no nulls. The split is fairly balanced at 55.84%/44.16%, yielding near-maximal entropy (0.99 of the possible 1.0). Despite the numeric-looking values, with only 2 distinct levels it behaves as a flag rather than a continuous code.

Treatment: One-hot or treat as a binary indicator before modelling.

anthropic:claude-opus-4-7 · confidence high
Out[88]:

saturn.columns["law_section"].stats

statvalue
n10,000
nulls0 (0.0%)
unique2
top_value 408
top_rate 0.5584
cardinality 2
entropy 0.9901
entropy_ratio 0.9901
Fig 33.
Top values for law_section.
Show data table
Top values for law_section (2 unique shown, of 2 total).
valuecountshare
408558455.8%
1180441644.2%

sub_division categorical feature

Categorical sub-division code with 76 distinct values across 10,000 rows and almost no nulls (0.02%). The distribution is heavily concentrated: 'B' alone covers 44.4% of rows and the top two values ('B' and 'd1') together exceed 58%, giving an entropy ratio of just 0.52. The mix of single-letter codes ('B','C','D') with letter-digit codes ('d1','E2','C3') — including a lowercase 'd1' alongside uppercase letters — suggests inconsistent coding conventions worth normalising.

Treatment: Normalise case and group rare levels before one-hot or target encoding.

anthropic:claude-opus-4-7 · confidence high
Out[91]:

saturn.columns["sub_division"].stats

statvalue
n10,000
nulls2 (0.0%)
unique76
top_value B
top_rate 0.4445
cardinality 76
entropy 3.227
entropy_ratio 0.5166
Fig 34.
Top values for sub_division.
Show data table
Top values for sub_division (20 unique shown, of 76 total).
valuecountshare
B444444.4%
d1142814.3%
C7817.8%
E27797.8%
F13143.1%
F22402.4%
D2222.2%
C31831.8%
K21241.2%
J21231.2%
J61221.2%
k41201.2%
J31091.1%
e2940.9%
C4840.8%
E5810.8%
E3610.6%
c610.6%
K6570.6%
n8560.6%

days_parking_in_effect categorical feature

This is a 7-character day-of-week mask indicating which days parking rules are in effect, with each position likely corresponding to Sun-Sat (Y=in effect, B=likely a holiday/exempt marker, space=off). Over half the rows are null (50.59%) and among the populated values 'YYYYYYY' (every day) dominates at 42.38% followed by 'BBBBBBB' at 1449 occurrences, giving low entropy ratio of 0.46 across 21 distinct patterns. The mix of Y, B, and spaces in the same field is unusual and suggests an encoded multi-flag rather than a clean categorical.

Treatment: Split into seven per-day indicator columns and add a missingness flag before modelling.

anthropic:claude-opus-4-7 · confidence high
Out[94]:

saturn.columns["days_parking_in_effect"].stats

statvalue
n10,000
nulls5,059 (50.6%)
unique21
top_value YYYYYYY
top_rate 0.4238
cardinality 21
entropy 2.025
entropy_ratio 0.461
alert: null_rate50.6% null
Fig 35.
Top values for days_parking_in_effect.
Show data table
Top values for days_parking_in_effect (20 unique shown, of 21 total).
valuecountshare
YYYYYYY209420.9%
BBBBBBB144914.5%
Y Y7717.7%
Y4955.0%
Y Y Y250.2%
YYYYY230.2%
YYYYYY210.2%
YYYYYBB190.2%
YYYYYYB80.1%
Y Y70.1%
YY YY60.1%
BYBBYBB40.0%
BBBBBYB30.0%
YBBYBBB30.0%
Y Y30.0%
BYBBBBB20.0%
BBYBBBB20.0%
YBBBBBB20.0%
BBBYBBB20.0%
BYBYBYB10.0%

from_hours_in_effect categorical feature

Start time of a parking/traffic regulation's effective window, encoded as a clock string like '0830A' with a sentinel 'ALL' meaning 24-hour applicability. The column is null 68.3% of the time, and among the 3,170 populated rows 'ALL' alone accounts for 45.6% (1,445), so actual start times are a minority signal. Cardinality is just 26 with entropy ratio 0.63, and the populated values cluster heavily in morning hours (0700A–1130A).

Treatment: Parse to minutes-since-midnight with a separate 'ALL'/missing flag before modelling.

anthropic:claude-opus-4-7 · confidence high
Out[97]:

saturn.columns["from_hours_in_effect"].stats

statvalue
n10,000
nulls6,830 (68.3%)
unique26
top_value ALL
top_rate 0.4558
cardinality 26
entropy 2.956
entropy_ratio 0.6289
alert: null_rate68.3% null
Fig 36.
Top values for from_hours_in_effect.
Show data table
Top values for from_hours_in_effect (20 unique shown, of 26 total).
valuecountshare
ALL144514.4%
1130A3033.0%
0830A2422.4%
0930A2202.2%
0900A1611.6%
0800A1561.6%
0730A1191.2%
0700A1161.2%
1200A1021.0%
1100A830.8%
0300A610.6%
0200P510.5%
0900P310.3%
1000A170.2%
1200P140.1%
0600A130.1%
0400P80.1%
1130P80.1%
0200A80.1%
0100P50.1%

to_hours_in_effect categorical feature

This appears to be the end-time of a parking or traffic regulation's effective window, encoded as a clock string (e.g., '0100P', '1100A') with 'ALL' meaning the rule applies all day. Two-thirds of rows are null (null_rate 0.683), and among the 3,170 populated values 'ALL' dominates at 45.6%, leaving the 30 actual time codes thinly spread (entropy_ratio 0.62). The mix of sentinel ('ALL') and time-of-day strings in the same field is the main gotcha.

Treatment: Split into a boolean 'all_day' flag and a parsed time-of-day, and impute or mask the 68% nulls before modelling.

anthropic:claude-opus-4-7 · confidence high
Out[100]:

saturn.columns["to_hours_in_effect"].stats

statvalue
n10,000
nulls6,830 (68.3%)
unique31
top_value ALL
top_rate 0.4558
cardinality 31
entropy 3.079
entropy_ratio 0.6215
alert: null_rate68.3% null
Fig 37.
Top values for to_hours_in_effect.
Show data table
Top values for to_hours_in_effect (20 unique shown, of 31 total).
valuecountshare
ALL144514.4%
0100P2993.0%
1100A2192.2%
1000A2122.1%
1030A1541.5%
0800A1181.2%
0600A1171.2%
0300A971.0%
0930A950.9%
0700P850.9%
1230P850.9%
0830A450.4%
0500A350.4%
0900A270.3%
1200A230.2%
0600P220.2%
0130P190.2%
0400P150.1%
0500P110.1%
1000P110.1%

vehicle_color categorical feature

This is a vehicle color code field, almost certainly from a parking or traffic citation feed. The encoding is inconsistent: short codes (GY, BK, WH) dominate but overlapping long forms (WHITE, BLACK, GREY) and alternate abbreviations (BLK, GRY) appear as separate categories, inflating cardinality to 99 across only 10000 rows. About 9.4% of values are null and the top code GY covers 22.95% of rows.

Treatment: Normalize synonyms (e.g. map BK/BLK/BLACK to one code) before encoding.

anthropic:claude-opus-4-7 · confidence high
Out[103]:

saturn.columns["vehicle_color"].stats

statvalue
n10,000
nulls943 (9.4%)
unique99
top_value GY
top_rate 0.2295
cardinality 99
entropy 3.676
entropy_ratio 0.5545
Fig 38.
Top values for vehicle_color.
Show data table
Top values for vehicle_color (20 unique shown, of 99 total).
valuecountshare
GY207920.8%
BK178417.8%
WH157915.8%
BL6316.3%
RD3483.5%
WHITE3473.5%
BLK2752.8%
BLACK2732.7%
GREY2392.4%
GRY1671.7%
GR1481.5%
BLUE1311.3%
RED1241.2%
GRAY1131.1%
SILVE991.0%
WHT650.7%
YW620.6%
BR600.6%
WHI570.6%
BLU460.5%

unregistered_vehicle categorical feature

This column appears to be a binary flag for whether a vehicle was unregistered, but it carries no information: 84.87% of rows are null and the remaining 1513 rows all hold the single value "0". Cardinality is 1 and entropy is 0, so the field is effectively constant where populated.

Treatment: Drop; constant value with majority nulls offers no modelling signal.

anthropic:claude-opus-4-7 · confidence high
Out[106]:

saturn.columns["unregistered_vehicle"].stats

statvalue
n10,000
nulls8,487 (84.9%)
unique1
top_value 0
top_rate 1
cardinality 1
entropy 0
entropy_ratio 0
alert: null_rate84.9% null
alert: imbalancetop value is 100.0% of rows
Fig 39.
Top values for unregistered_vehicle.
Show data table
Top values for unregistered_vehicle (1 unique shown, of 1 total).
valuecountshare
0151315.1%

vehicle_year categorical feature

Vehicle model year stored as a categorical string with 39 distinct values across 10000 rows and no nulls. The dominant value is "0" at 23.29% of rows, which almost certainly encodes missing/unknown rather than a real year; legitimate years span recent ones with 2024 (759) and 2025 (696) leading. Entropy ratio of 0.78 reflects a fairly even spread across the remaining year codes.

Treatment: Recode "0" as missing, cast to integer year, and optionally bucket into age bands before modelling.

anthropic:claude-opus-4-7 · confidence high
Out[109]:

saturn.columns["vehicle_year"].stats

statvalue
n10,000
nulls0 (0.0%)
unique39
top_value 0
top_rate 0.2329
cardinality 39
entropy 4.134
entropy_ratio 0.7822
Fig 40.
Top values for vehicle_year.
Show data table
Top values for vehicle_year (20 unique shown, of 39 total).
valuecountshare
0232923.3%
20247597.6%
20256967.0%
20235695.7%
20195125.1%
20224894.9%
20214724.7%
20184484.5%
20204424.4%
20174314.3%
20163723.7%
20153583.6%
20142852.9%
20132832.8%
20122502.5%
20111992.0%
20101781.8%
20081681.7%
20261361.4%
20071191.2%

meter_number categorical identifier

Likely a utility meter identifier, but it is effectively empty: 84.79% of rows are null and 99.47% of the non-null values are the placeholder "-". Only 7 distinct values exist across 10,000 rows, with the genuine-looking numeric IDs (e.g. 309485, 103553) appearing at most twice. Entropy ratio of 0.022 confirms there is almost no information here.

Treatment: Drop; column is near-constant placeholder with overwhelming nulls.

anthropic:claude-opus-4-7 · confidence high
Out[112]:

saturn.columns["meter_number"].stats

statvalue
n10,000
nulls8,479 (84.8%)
unique7
top_value -
top_rate 0.9947
cardinality 7
entropy 0.06054
entropy_ratio 0.02156
alert: long_tail4 singleton categories
alert: null_rate84.8% null
alert: imbalancetop value is 99.5% of rows
Fig 41.
Top values for meter_number.
Show data table
Top values for meter_number (7 unique shown, of 7 total).
valuecountshare
-151315.1%
30948520.0%
10355320.0%
10972010.0%
42447510.0%
10650610.0%
10133910.0%

feet_from_curb categorical

Out[115]:

saturn.columns["feet_from_curb"].stats

statvalue
n10,000
nulls0 (0.0%)
unique11
top_value 0
top_rate 0.9783
cardinality 11
entropy 0.2169
entropy_ratio 0.06271
alert: imbalancetop value is 97.8% of rows
Fig 42.
Top values for feet_from_curb.
Show data table
Top values for feet_from_curb (11 unique shown, of 11 total).
valuecountshare
0978397.8%
1420.4%
2400.4%
3350.4%
5300.3%
4180.2%
6150.1%
10120.1%
8120.1%
7100.1%
930.0%

house_number text feature

Almost certainly a street address house-number fragment, with values that are short single tokens (word_mean 1.00, len_mean 3.36, max length 7) and a vocabulary of 2,345 over 10,000 rows. Surprisingly, the most frequent values are cardinal-direction letters N/E/W/S (161/136/122/120) rather than digits — these likely belong in a separate directional prefix field. Nearly half the column is null (47.7%) and 55.1% of non-nulls duplicate, so it's sparse and low-cardinality.

Treatment: Split into numeric house-number and directional-prefix fields, then impute or flag the 47.7% nulls before joining to address data.

anthropic:claude-opus-4-7 · confidence high
Out[118]:

saturn.columns["house_number"].stats

statvalue
n10,000
nulls4,771 (47.7%)
unique2,350
len_min 1
len_max 7
len_mean 3.36
len_median 3
len_p95 5
word_mean 1.002
word_median 1
n_empty 0
n_duplicates 2,879
duplicate_rate 0.5506
vocab_size 2,345
readability_flesch_mean 116.1
emoji_rate 0
url_rate 0
one_word_rate 0.9977
allcaps_rate 0.7887
boilerplate_rate 0
alert: one_word99.8% rows are a single word
alert: allcaps78.9% rows are all-caps
alert: null_rate47.7% null
alert: short_text95th-percentile length under 20 chars
alert: duplicates55.1% duplicate strings
Fig 43.
Character-length distribution for house_number.
Show data table
Character-length distribution for house_number (mean: 3.3595333715815645).
charscount
1 – 1626
1 – 10
1 – 10
1 – 20
2 – 20
2 – 20
2 – 2479
2 – 20
2 – 20
2 – 20
2 – 30
3 – 30
3 – 30
3 – 31797
3 – 30
3 – 30
3 – 40
4 – 40
4 – 40
4 – 40
4 – 41299
4 – 40
4 – 40
4 – 50
5 – 50
5 – 50
5 – 5777
5 – 50
5 – 50
5 – 60
6 – 60
6 – 60
6 – 60
6 – 6246
6 – 60
6 – 60
6 – 70
7 – 70
7 – 70
7 – 75

time_first_observed categorical timestamp

Looks like a time-of-first-observation field encoded as HHMMx where x is A/P (e.g., '0230A', '0930P'). It is 78.45% null and, among the 2,155 non-null rows, the sentinel '00000' dominates at 1,926 occurrences (top_rate 0.8937), leaving only ~229 rows with real timestamps spread across 206 distinct values. Entropy ratio of 0.169 confirms almost no information content once nulls and the placeholder are removed.

Treatment: Treat '00000' as null, then drop or collapse to a binary 'has_observed_time' flag — too sparse to use as a real timestamp.

anthropic:claude-opus-4-7 · confidence high
Out[121]:

saturn.columns["time_first_observed"].stats

statvalue
n10,000
nulls7,845 (78.5%)
unique207
top_value 00000
top_rate 0.8937
cardinality 207
entropy 1.299
entropy_ratio 0.1688
alert: long_tail187 singleton categories
alert: null_rate78.5% null
Fig 44.
Top values for time_first_observed.
Show data table
Top values for time_first_observed (20 unique shown, of 207 total).
valuecountshare
00000192619.3%
0230A30.0%
0930P30.0%
0505P30.0%
1115P30.0%
0900P20.0%
1150P20.0%
0920A20.0%
1000A20.0%
0235A20.0%
0645P20.0%
0252A20.0%
0110A20.0%
0955A20.0%
0905P20.0%
0456P20.0%
1149A20.0%
1251A20.0%
1030P20.0%
0119A20.0%

violation_description categorical feature

This column records the parking/traffic violation type as a short text code, with 74 distinct values across 10,000 rows. It's heavily concentrated: 'PHTO SCHOOL ZN SPEED VIOLATION' alone covers 52% of non-null rows, and 15.13% of values are null. The label formatting is inconsistent — some entries are numbered codes like '14-No Standing' while others are free-form like 'Fire Hydrant' or 'Detached Trailer', suggesting multiple source systems or schema versions merged together.

Treatment: Normalise label formatting (strip numeric prefixes) and group rare categories before one-hot encoding.

anthropic:claude-opus-4-7 · confidence high
Out[124]:

saturn.columns["violation_description"].stats

statvalue
n10,000
nulls1,513 (15.1%)
unique74
top_value PHTO SCHOOL ZN SPEED VIOLATION
top_rate 0.5203
cardinality 74
entropy 2.808
entropy_ratio 0.4522
Fig 45.
Top values for violation_description.
Show data table
Top values for violation_description (20 unique shown, of 74 total).
valuecountshare
PHTO SCHOOL ZN SPEED VIOLATION441644.2%
No Parking Street Cleaning142814.3%
14-No Standing5986.0%
40-Fire Hydrant4634.6%
20A-No Parking (Non-COM)1311.3%
19-No Stand (bus stop)1231.2%
16A-No Std (Com Veh) Non-COM1171.2%
46A-Double Parking (Non-COM)1061.1%
Detached Trailer1051.1%
Fire Hydrant940.9%
71A-Insp Sticker Expired (NYS)770.8%
70A-Reg. Sticker Expired (NYS)660.7%
No Standing610.6%
Missing Equipment560.6%
50-Crosswalk530.5%
74-Missing Display Plate390.4%
13-No Stand (taxi stand)380.4%
17-No Stand (exc auth veh)380.4%
Double Parking320.3%
98-Obstructing Driveway310.3%

violation_post_code categorical feature

This appears to be a violation post code categorical field, likely a sub-classifier within a citation or inspection record. It has 53 unique codes with high entropy (ratio 0.89), and the top code "99" only covers 14.5% of non-null rows. Two notable surprises: 78.74% of rows are null, and the code values are heterogeneous in format—numeric ("99", "01", "311"), single letters ("B", "U"), and tokens like "SPCL"—suggesting multiple coding schemes coexist.

Treatment: Treat missingness as its own category and standardize/group the mixed-format codes before one-hot encoding.

anthropic:claude-opus-4-7 · confidence high
Out[127]:

saturn.columns["violation_post_code"].stats

statvalue
n10,000
nulls7,874 (78.7%)
unique53
top_value 99
top_rate 0.1453
cardinality 53
entropy 5.089
entropy_ratio 0.8885
alert: null_rate78.7% null
Fig 46.
Top values for violation_post_code.
Show data table
Top values for violation_post_code (20 unique shown, of 53 total).
valuecountshare
993093.1%
012072.1%
3111351.4%
SPCL850.9%
06710.7%
10660.7%
B570.6%
17560.6%
U530.5%
15490.5%
04480.5%
05480.5%
16450.4%
11420.4%
A400.4%
I350.4%
10-P350.4%
38340.3%
03-A340.3%
12330.3%
Out[130]:

saturn.columns["violation_legal_code"].stats

statvalue
n10,000
nulls5,584 (55.8%)
unique1
top_value T
top_rate 1
cardinality 1
entropy 0
entropy_ratio 0
alert: null_rate55.8% null
alert: imbalancetop value is 100.0% of rows
Fig 47.
Top values for violation_legal_code.
Show data table
Top values for violation_legal_code (1 unique shown, of 1 total).
valuecountshare
T441644.2%

How to cite

click to copy

BibTeX
@misc{saturn-parking-parking-violations-sample-20260119-2026,
  author       = {Steuber, Luke},
  title        = {Saturn reading: parking parking violations sample 20260119},
  year         ={2026},
  howpublished = {\url{https://dr.eamer.dev/saturn/view/parking-parking_violations_sample_20260119}},
  note         = {Profiled with saturn-dissect v0.2.0, prompt saturn-insight-v2, model anthropic:claude-opus-4-7},
}
APA
Steuber, L. (2026). Saturn reading: parking parking violations sample 20260119. Source: /home/coolhand/html/datavis/data_trove/cache/parking/parking_violations_sample_20260119.json. Profiled with saturn-dissect v0.2.0 (saturn-insight-v2, anthropic:claude-opus-4-7). Retrieved from https://dr.eamer.dev/saturn/view/parking-parking_violations_sample_20260119