parking parking violations sample 20260119
Reading
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
Charts the summary said to look at first
Show data table
| value | count | share |
|---|---|---|
| PHTO SCHOOL ZN SPEED VIOLATION | 4416 | 44.2% |
| No Parking Street Cleaning | 1428 | 14.3% |
| 14-No Standing | 598 | 6.0% |
| 40-Fire Hydrant | 463 | 4.6% |
| 20A-No Parking (Non-COM) | 131 | 1.3% |
| 19-No Stand (bus stop) | 123 | 1.2% |
| 16A-No Std (Com Veh) Non-COM | 117 | 1.2% |
| 46A-Double Parking (Non-COM) | 106 | 1.1% |
| Detached Trailer | 105 | 1.1% |
| Fire Hydrant | 94 | 0.9% |
| 71A-Insp Sticker Expired (NYS) | 77 | 0.8% |
| 70A-Reg. Sticker Expired (NYS) | 66 | 0.7% |
| No Standing | 61 | 0.6% |
| Missing Equipment | 56 | 0.6% |
| 50-Crosswalk | 53 | 0.5% |
| 74-Missing Display Plate | 39 | 0.4% |
| 13-No Stand (taxi stand) | 38 | 0.4% |
| 17-No Stand (exc auth veh) | 38 | 0.4% |
| Double Parking | 32 | 0.3% |
| 98-Obstructing Driveway | 31 | 0.3% |
Show data table
| value | count | share |
|---|---|---|
| NY | 6935 | 69.3% |
| NJ | 917 | 9.2% |
| PA | 470 | 4.7% |
| CT | 247 | 2.5% |
| FL | 235 | 2.4% |
| VA | 220 | 2.2% |
| ME | 125 | 1.2% |
| MA | 124 | 1.2% |
| 99 | 88 | 0.9% |
| GA | 65 | 0.7% |
| NC | 64 | 0.6% |
| TN | 56 | 0.6% |
| MD | 53 | 0.5% |
| TX | 36 | 0.4% |
| OH | 31 | 0.3% |
| IN | 30 | 0.3% |
| IL | 28 | 0.3% |
| CA | 27 | 0.3% |
| SC | 26 | 0.3% |
| MI | 24 | 0.2% |
Show data table
| value | count | share |
|---|---|---|
| HONDA | 1331 | 13.3% |
| TOYOT | 1302 | 13.0% |
| NISSA | 770 | 7.7% |
| FORD | 603 | 6.0% |
| BMW | 559 | 5.6% |
| ME/BE | 521 | 5.2% |
| JEEP | 450 | 4.5% |
| CHEVR | 449 | 4.5% |
| HYUND | 365 | 3.6% |
| SUBAR | 273 | 2.7% |
| KIA | 268 | 2.7% |
| LEXUS | 268 | 2.7% |
| MAZDA | 257 | 2.6% |
| AUDI | 242 | 2.4% |
| ACURA | 221 | 2.2% |
| VOLKS | 199 | 2.0% |
| DODGE | 175 | 1.8% |
| TESLA | 152 | 1.5% |
| INFIN | 151 | 1.5% |
| GMC | 134 | 1.3% |
Show data table
| value | count | share |
|---|---|---|
| QN | 1773 | 17.7% |
| NY | 1472 | 14.7% |
| BK | 1233 | 12.3% |
| BX | 1027 | 10.3% |
| K | 936 | 9.4% |
| Q | 902 | 9.0% |
| Kings | 737 | 7.4% |
| Qns | 414 | 4.1% |
| ST | 403 | 4.0% |
| Bronx | 395 | 4.0% |
| MN | 314 | 3.1% |
| R | 116 | 1.2% |
| Rich | 7 | 0.1% |
Show data table
| value | count | share |
|---|---|---|
| GY | 2079 | 20.8% |
| BK | 1784 | 17.8% |
| WH | 1579 | 15.8% |
| BL | 631 | 6.3% |
| RD | 348 | 3.5% |
| WHITE | 347 | 3.5% |
| BLK | 275 | 2.8% |
| BLACK | 273 | 2.7% |
| GREY | 239 | 2.4% |
| GRY | 167 | 1.7% |
| GR | 148 | 1.5% |
| BLUE | 131 | 1.3% |
| RED | 124 | 1.2% |
| GRAY | 113 | 1.1% |
| SILVE | 99 | 1.0% |
| WHT | 65 | 0.7% |
| YW | 62 | 0.6% |
| BR | 60 | 0.6% |
| WHI | 57 | 0.6% |
| BLU | 46 | 0.5% |
Schema
40 columns| Alerts | ||||
|---|---|---|---|---|
| summons_number | text | 0.0% | 10,000 |
near_unique
one_word
allcaps
short_text
|
| plate_id | text | 0.0% | 9,519 |
near_unique
one_word
allcaps
short_text
|
| registration_state | categorical | 0.0% | 50 |
|
| plate_type | categorical | 0.0% | 27 |
|
| issue_date | categorical | 0.0% | 687 |
long_tail
|
| violation_code | categorical | 0.0% | 62 |
|
| vehicle_body_type | categorical | 1.3% | 81 |
|
| vehicle_make | categorical | 0.8% | 126 |
|
| issuing_agency | categorical | 0.0% | 20 |
|
| street_code1 | text | 0.0% | 1,420 |
one_word
allcaps
short_text
duplicates
|
| street_code2 | text | 0.0% | 1,349 |
one_word
allcaps
short_text
duplicates
|
| street_code3 | text | 0.0% | 1,317 |
one_word
allcaps
short_text
duplicates
|
| vehicle_expiration_date | text | 0.0% | 1,040 |
one_word
allcaps
short_text
duplicates
|
| violation_location | categorical | 44.9% | 87 |
null_rate
|
| violation_precinct | categorical | 0.0% | 88 |
|
| issuer_precinct | categorical | 0.0% | 121 |
|
| issuer_code | text | 0.0% | 1,420 |
one_word
allcaps
short_text
duplicates
|
| issuer_command | categorical | 44.2% | 228 |
null_rate
|
| issuer_squad | categorical | 63.6% | 23 |
null_rate
|
| violation_time | text | 0.0% | 1,432 |
one_word
allcaps
short_text
duplicates
|
| violation_county | categorical | 2.7% | 13 |
|
| violation_in_front_of_or_opposite | categorical | 46.9% | 4 |
null_rate
|
| street_name | text | 0.0% | 3,115 |
multilingual
allcaps
duplicates
|
| intersecting_street | text | 48.1% | 1,413 |
allcaps
null_rate
short_text
duplicates
|
| date_first_observed | categorical | 0.0% | 147 |
long_tail
imbalance
|
| law_section | categorical | 0.0% | 2 |
|
| sub_division | categorical | 0.0% | 76 |
|
| days_parking_in_effect | categorical | 50.6% | 21 |
null_rate
|
| from_hours_in_effect | categorical | 68.3% | 26 |
null_rate
|
| to_hours_in_effect | categorical | 68.3% | 31 |
null_rate
|
| vehicle_color | categorical | 9.4% | 99 |
|
| unregistered_vehicle | categorical | 84.9% | 1 |
null_rate
imbalance
|
| vehicle_year | categorical | 0.0% | 39 |
|
| meter_number | categorical | 84.8% | 7 |
long_tail
null_rate
imbalance
|
| feet_from_curb | categorical | 0.0% | 11 |
imbalance
|
| house_number | text | 47.7% | 2,350 |
one_word
allcaps
null_rate
short_text
duplicates
|
| time_first_observed | categorical | 78.5% | 207 |
long_tail
null_rate
|
| violation_description | categorical | 15.1% | 74 |
|
| violation_post_code | categorical | 78.7% | 53 |
null_rate
|
| violation_legal_code | categorical | 55.8% | 1 |
null_rate
imbalance
|
summons_number
text identifier near_unique one_word allcaps short_textThis 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.
- n
- 10,000
- nulls
- 0 (0.0%)
- unique
- 10,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
plate_id
text identifier near_unique one_word allcaps short_textThis 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.
- n
- 10,000
- nulls
- 0 (0.0%)
- unique
- 9,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
registration_state
categorical featureTwo-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.
- n
- 10,000
- nulls
- 0 (0.0%)
- unique
- 50
- top_value
- NY
- top_rate
- 0.6935
- cardinality
- 50
- entropy
- 2.034
- entropy_ratio
- 0.3603
plate_type
categorical featureThis 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.
- n
- 10,000
- nulls
- 0 (0.0%)
- unique
- 27
- top_value
- PAS
- top_rate
- 0.9072
- cardinality
- 27
- entropy
- 0.6958
- entropy_ratio
- 0.1463
issue_date
categorical timestamp long_tailThis 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.
- n
- 10,000
- nulls
- 0 (0.0%)
- unique
- 687
- top_value
- 2025-12-28T00:00:00.000
- top_rate
- 0.6542
- cardinality
- 687
- entropy
- 2.765
- entropy_ratio
- 0.2934
violation_code
categorical featureCategorical 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.
- n
- 10,000
- nulls
- 0 (0.0%)
- unique
- 62
- top_value
- 36
- top_rate
- 0.4416
- cardinality
- 62
- entropy
- 3.1
- entropy_ratio
- 0.5206
vehicle_body_type
categorical featureColumn 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.
- n
- 10,000
- nulls
- 131 (1.3%)
- unique
- 81
- top_value
- SUBN
- top_rate
- 0.5188
- cardinality
- 81
- entropy
- 2.599
- entropy_ratio
- 0.41
vehicle_make
categorical featureThis 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.
- n
- 10,000
- nulls
- 78 (0.8%)
- unique
- 126
- top_value
- HONDA
- top_rate
- 0.1341
- cardinality
- 126
- entropy
- 4.661
- entropy_ratio
- 0.668
issuing_agency
categorical featureSingle-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'.
- n
- 10,000
- nulls
- 0 (0.0%)
- unique
- 20
- top_value
- V
- top_rate
- 0.4416
- cardinality
- 20
- entropy
- 2.007
- entropy_ratio
- 0.4644
street_code1
text foreign_key one_word allcaps short_text duplicatesThis 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.
- n
- 10,000
- nulls
- 0 (0.0%)
- unique
- 1,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
street_code2
text feature one_word allcaps short_text duplicatesThis 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.
- n
- 10,000
- nulls
- 0 (0.0%)
- unique
- 1,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
street_code3
text feature one_word allcaps short_text duplicatesStored 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.
- n
- 10,000
- nulls
- 0 (0.0%)
- unique
- 1,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
vehicle_expiration_date
text timestamp one_word allcaps short_text duplicatesStored 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.
- n
- 10,000
- nulls
- 0 (0.0%)
- unique
- 1,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
violation_location
categorical feature null_rateThis 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.
- n
- 10,000
- nulls
- 4,485 (44.9%)
- unique
- 87
- top_value
- 0018
- top_rate
- 0.0515
- cardinality
- 87
- entropy
- 5.988
- entropy_ratio
- 0.9294
violation_precinct
categorical featureThis 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.
- n
- 10,000
- nulls
- 0 (0.0%)
- unique
- 88
- top_value
- 0
- top_rate
- 0.4485
- cardinality
- 88
- entropy
- 4.295
- entropy_ratio
- 0.6649
issuer_precinct
categorical featureThis 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.
- n
- 10,000
- nulls
- 0 (0.0%)
- unique
- 121
- top_value
- 0
- top_rate
- 0.6418
- cardinality
- 121
- entropy
- 3.088
- entropy_ratio
- 0.4463
issuer_code
text foreign_key one_word allcaps short_text duplicatesThis 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.
- n
- 10,000
- nulls
- 0 (0.0%)
- unique
- 1,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
issuer_command
categorical feature null_rateThis 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.
- n
- 10,000
- nulls
- 4,416 (44.2%)
- unique
- 228
- top_value
- T302
- top_rate
- 0.06698
- cardinality
- 228
- entropy
- 6.523
- entropy_ratio
- 0.8327
issuer_squad
categorical feature null_rateA 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.
- n
- 10,000
- nulls
- 6,361 (63.6%)
- unique
- 23
- top_value
- 0000
- top_rate
- 0.4158
- cardinality
- 23
- entropy
- 3.309
- entropy_ratio
- 0.7315
violation_time
text timestamp one_word allcaps short_text duplicatesThis 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.
- n
- 10,000
- nulls
- 4 (0.0%)
- unique
- 1,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
violation_county
categorical featureThis 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.
- n
- 10,000
- nulls
- 271 (2.7%)
- unique
- 13
- top_value
- QN
- top_rate
- 0.1822
- cardinality
- 13
- entropy
- 3.32
- entropy_ratio
- 0.8973
violation_in_front_of_or_opposite
categorical feature null_rateA 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.
- n
- 10,000
- nulls
- 4,685 (46.9%)
- unique
- 4
- top_value
- F
- top_rate
- 0.6685
- cardinality
- 4
- entropy
- 1.229
- entropy_ratio
- 0.6145
street_name
text feature multilingual allcaps duplicatesStreet/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.
- n
- 10,000
- nulls
- 4 (0.0%)
- unique
- 3,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
intersecting_street
text metadata allcaps null_rate short_text duplicatesThis 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.
- n
- 10,000
- nulls
- 4,813 (48.1%)
- unique
- 1,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
date_first_observed
categorical metadata long_tail imbalanceStored 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.
- n
- 10,000
- nulls
- 0 (0.0%)
- unique
- 147
- top_value
- 0
- top_rate
- 0.9827
- cardinality
- 147
- entropy
- 0.2485
- entropy_ratio
- 0.03452
law_section
categorical featureThis 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.
- n
- 10,000
- nulls
- 0 (0.0%)
- unique
- 2
- top_value
- 408
- top_rate
- 0.5584
- cardinality
- 2
- entropy
- 0.9901
- entropy_ratio
- 0.9901
sub_division
categorical featureCategorical 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.
- n
- 10,000
- nulls
- 2 (0.0%)
- unique
- 76
- top_value
- B
- top_rate
- 0.4445
- cardinality
- 76
- entropy
- 3.227
- entropy_ratio
- 0.5166
days_parking_in_effect
categorical feature null_rateThis 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.
- n
- 10,000
- nulls
- 5,059 (50.6%)
- unique
- 21
- top_value
- YYYYYYY
- top_rate
- 0.4238
- cardinality
- 21
- entropy
- 2.025
- entropy_ratio
- 0.461
from_hours_in_effect
categorical feature null_rateStart 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.
- n
- 10,000
- nulls
- 6,830 (68.3%)
- unique
- 26
- top_value
- ALL
- top_rate
- 0.4558
- cardinality
- 26
- entropy
- 2.956
- entropy_ratio
- 0.6289
to_hours_in_effect
categorical feature null_rateThis 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.
- n
- 10,000
- nulls
- 6,830 (68.3%)
- unique
- 31
- top_value
- ALL
- top_rate
- 0.4558
- cardinality
- 31
- entropy
- 3.079
- entropy_ratio
- 0.6215
vehicle_color
categorical featureThis 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.
- n
- 10,000
- nulls
- 943 (9.4%)
- unique
- 99
- top_value
- GY
- top_rate
- 0.2295
- cardinality
- 99
- entropy
- 3.676
- entropy_ratio
- 0.5545
unregistered_vehicle
categorical feature null_rate imbalanceThis 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.
- n
- 10,000
- nulls
- 8,487 (84.9%)
- unique
- 1
- top_value
- 0
- top_rate
- 1
- cardinality
- 1
- entropy
- 0
- entropy_ratio
- 0
vehicle_year
categorical featureVehicle 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.
- n
- 10,000
- nulls
- 0 (0.0%)
- unique
- 39
- top_value
- 0
- top_rate
- 0.2329
- cardinality
- 39
- entropy
- 4.134
- entropy_ratio
- 0.7822
meter_number
categorical identifier long_tail null_rate imbalanceLikely 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.
- n
- 10,000
- nulls
- 8,479 (84.8%)
- unique
- 7
- top_value
- -
- top_rate
- 0.9947
- cardinality
- 7
- entropy
- 0.06054
- entropy_ratio
- 0.02156
feet_from_curb
categorical imbalance- n
- 10,000
- nulls
- 0 (0.0%)
- unique
- 11
- top_value
- 0
- top_rate
- 0.9783
- cardinality
- 11
- entropy
- 0.2169
- entropy_ratio
- 0.06271
house_number
text feature one_word allcaps null_rate short_text duplicatesAlmost 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.
- n
- 10,000
- nulls
- 4,771 (47.7%)
- unique
- 2,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
time_first_observed
categorical timestamp long_tail null_rateLooks 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.
- n
- 10,000
- nulls
- 7,845 (78.5%)
- unique
- 207
- top_value
- 00000
- top_rate
- 0.8937
- cardinality
- 207
- entropy
- 1.299
- entropy_ratio
- 0.1688
violation_description
categorical featureThis 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.
- n
- 10,000
- nulls
- 1,513 (15.1%)
- unique
- 74
- top_value
- PHTO SCHOOL ZN SPEED VIOLATION
- top_rate
- 0.5203
- cardinality
- 74
- entropy
- 2.808
- entropy_ratio
- 0.4522
violation_post_code
categorical feature null_rateThis 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.
- n
- 10,000
- nulls
- 7,874 (78.7%)
- unique
- 53
- top_value
- 99
- top_rate
- 0.1453
- cardinality
- 53
- entropy
- 5.089
- entropy_ratio
- 0.8885
violation_legal_code
categorical feature null_rate imbalanceThis column appears to be a violation legal code indicator, but it carries no information: every one of the 4,416 non-null rows contains the single value "T" (top_rate 1.0, cardinality 1, entropy 0.0). On top of that, 55.84% of rows are null. There is nothing here to discriminate records. Treatment: Drop; constant column with majority nulls offers no signal.
- n
- 10,000
- nulls
- 5,584 (55.8%)
- unique
- 1
- top_value
- T
- top_rate
- 1
- cardinality
- 1
- entropy
- 0
- entropy_ratio
- 0