Spaces:
Paused
Paused
|
Download CRASH_DATA_GUIDE.md from whassan/SensorflowStudio: direct link, hf CLI and curl.
- Browser
- Download file 10.6 kB
-
https://huggingface.co/spaces/whassan/SensorflowStudio/resolve/main/CRASH_DATA_GUIDE.md
- Command line
-
hf download hf://spaces/whassan/SensorflowStudio/CRASH_DATA_GUIDE.md
-
curl -L -o CRASH_DATA_GUIDE.md https://huggingface.co/spaces/whassan/SensorflowStudio/resolve/main/CRASH_DATA_GUIDE.md
10.6 kB
| # Crash Data Analysis Guide | |
| Complete guide to analyzing crash data with metadata, geospatial, and vehicle/traveler dimensions. | |
| ## Quick Start | |
| ```python | |
| from crash_analyzer import load_switrs_data | |
| # Load SWITRS CSV data | |
| analyzer = load_switrs_data('accidents.csv', 'vehicles.csv', 'parties.csv') | |
| # Generate full report | |
| report = analyzer.generate_summary_report() | |
| ``` | |
| ## Data Source: SWITRS | |
| **Reference**: https://tims.berkeley.edu/help/crashdata/switrs-geocoding.php | |
| SWITRS (Statewide Integrated Traffic Records System) provides comprehensive California highway crash data with three main record types: | |
| ### 1. Accidents Table (Core Records) | |
| Primary crash incident information. | |
| | Field | Type | Description | Example | | |
| |---|---|---|---| | |
| | `case_id` | int | Unique crash identifier | 123456 | | |
| | `accident_date` | date | Date of crash | 2024-01-15 | | |
| | `accident_time` | time | Time of crash (24-hr) | 14:30 | | |
| | `latitude` | float | Geocoded latitude | 37.7749 | | |
| | `longitude` | float | Geocoded longitude | -122.4194 | | |
| | `county` | string | County name | "San Francisco" | | |
| | `district` | string | CHP district | "SF" | | |
| | `severity` | string | Crash severity | F/I/P (Fatal/Injury/PropertyDamage) | | |
| | `collision_type` | string | Type of collision | "Rear End", "Broadside", etc. | | |
| | `weather_1` | string | Primary weather | "Clear", "Rain", "Fog" | | |
| | `weather_2` | string | Secondary weather | Optional | | |
| | `surface_condition` | string | Road surface | "Dry", "Wet", "Snow" | | |
| | `traffic_control_device` | string | Traffic control status | "Functioning", "Not Functioning" | | |
| | `fatality_count` | int | Number of fatalities | 0-5 | | |
| | `injury_count` | int | Number of injuries | 0-10 | | |
| ### 2. Vehicles Table (Vehicle Details) | |
| Vehicle information for each crash. | |
| | Field | Type | Description | | |
| |---|---|---| | |
| | `case_id` | int | Link to accidents table | | |
| | `vehicle_id` | int | Unique vehicle in crash | | |
| | `vehicle_type` | string | Car, Truck, Motorcycle, SUV, Van, etc. | | |
| | `vehicle_year` | int | Vehicle model year | | |
| | `vehicle_make` | string | Manufacturer (Toyota, Ford, etc.) | | |
| | `vehicle_model` | string | Model name | | |
| | `vehicle_color` | string | Color | | |
| | `damage_extent` | string | Severe, Moderate, Minor | | |
| | `direction_of_travel` | string | N, S, E, W, etc. | | |
| ### 3. Parties Table (Occupants & Pedestrians) | |
| Information about crash participants (drivers, passengers, pedestrians). | |
| | Field | Type | Description | | |
| |---|---|---| | |
| | `case_id` | int | Link to accidents table | | |
| | `party_number` | int | Sequence in crash | | |
| | `party_type` | string | Driver, Passenger, Pedestrian, Cyclist | | |
| | `age` | int | Age in years | | |
| | `gender` | string | M/F | | |
| | `sobriety` | int | 1=Sober, 2=Drinking, 3=Intoxicated, 4=Unknown | | |
| | `injury_level` | int | 0=None, 1=Possible, 2=Probable, 3=Severe, 4=Fatal | | |
| | `safety_equipment_used` | string | Seatbelt, Helmet, etc. | | |
| | `ejection` | string | Yes/No/Unknown | | |
| | `primary_collision_factor` | string | Cause (Speeding, DUI, etc.) | | |
| --- | |
| ## Analysis Dimensions | |
| ### 1. METADATA ANALYSIS | |
| **Time-Based Patterns** | |
| ```python | |
| # Identify dangerous times | |
| temporal = analyzer.analyze_temporal_patterns() | |
| # Returns: crashes by hour, day, month, year + deadliest times | |
| ``` | |
| **What to Look For**: | |
| - Rush hour peaks (7-9am, 4-6pm) | |
| - Weekend spikes | |
| - Holiday effect (New Year, July 4th) | |
| - Seasonal trends (winter weather, spring break) | |
| **Severity Analysis** | |
| ```python | |
| severity = analyzer.analyze_severity() | |
| # Returns: distribution of Fatal/Injury/Property Damage | |
| ``` | |
| **What to Report**: | |
| - Fatality rate (total deaths / total crashes) | |
| - Injury-to-crash ratio | |
| - Crash trend over time (increasing/decreasing) | |
| **Collision Types** | |
| ```python | |
| collisions = analyzer.analyze_collision_types() | |
| # Returns: most common collision types and deadliest types | |
| ``` | |
| **Key Metrics**: | |
| - Most common collision type | |
| - Deadliest collision type (by fatality rate) | |
| - Preventable vs. unpreventable patterns | |
| --- | |
| ### 2. GEOSPATIAL ANALYSIS | |
| **Geographic Summaries** | |
| ```python | |
| geo = analyzer.get_geographic_summary() | |
| # Returns: crashes by county/district with severity breakdown | |
| ``` | |
| **Geographic Hotspot Detection** | |
| ```python | |
| hotspots = analyzer.identify_hotspots() | |
| # Returns: grid-based clustering of high-crash areas | |
| ``` | |
| **Interpretation**: | |
| - Cluster size = grid cell crashes | |
| - Coordinates = center of high-risk area | |
| - Fatal count = number of fatal crashes in area | |
| - Focus enforcement/infrastructure improvements on hotspots | |
| **Use Cases**: | |
| - Identify intersections needing traffic signal upgrades | |
| - Plan emergency response deployments | |
| - Target enforcement activities | |
| - Prioritize road maintenance | |
| **Visualization Recommendations**: | |
| - Heatmap of crash density (Folium, Kepler.gl) | |
| - Cluster markers on interactive map | |
| - Severity overlay (color-coded pins) | |
| - Temporal animation (crashes by month) | |
| --- | |
| ### 3. VEHICLE/TRAVELER ANALYSIS | |
| **Vehicle Risk Analysis** | |
| ```python | |
| vehicles_analysis = analyzer.analyze_vehicle_types() | |
| # Returns: crashes per vehicle type + fatality rates | |
| ``` | |
| **Insights**: | |
| - Which vehicle types are overrepresented in crashes? | |
| - Which have highest fatality rates? | |
| - Older vs. newer vehicles | |
| - Motorcycle vs. car comparison | |
| **Traveler Demographics** | |
| ```python | |
| demographics = analyzer.analyze_demographics() | |
| # Returns: age distribution, gender, sobriety, injury levels | |
| ``` | |
| **Key Demographics**: | |
| - Age group risk (teenagers, elderly highest risk) | |
| - Gender patterns | |
| - Impairment prevalence | |
| - Safety equipment usage (seatbelt, helmet) | |
| **Injury Patterns** | |
| ```python | |
| injuries = analyzer.analyze_injury_patterns() | |
| # Returns: injury severity by age group, party type | |
| ``` | |
| **Focus Areas**: | |
| - Vulnerable road users (pedestrians, cyclists) | |
| - Age-specific injury severity | |
| - Occupant vs. pedestrian injury rates | |
| - Effectiveness of safety equipment | |
| --- | |
| ## Data Preparation | |
| ### Step 1: Obtain SWITRS Data | |
| Options: | |
| - **TIMS Website**: https://tims.berkeley.edu (public access, some limitations) | |
| - **California Highway Patrol**: Direct request | |
| - **Local Law Enforcement**: May have county-specific data | |
| ### Step 2: Data Format | |
| - Expected format: **CSV files** (one file per table type) | |
| - Delimiter: Comma (`,`) | |
| - Character encoding: UTF-8 | |
| - Missing values: Blank or `NULL` | |
| ### Step 3: Clean Data | |
| ```python | |
| import pandas as pd | |
| accidents = pd.read_csv('accidents.csv') | |
| # Remove duplicates | |
| accidents = accidents.drop_duplicates(subset=['case_id']) | |
| # Handle missing geolocation | |
| accidents = accidents.dropna(subset=['latitude', 'longitude']) | |
| # Validate date format | |
| accidents['accident_date'] = pd.to_datetime(accidents['accident_date'], errors='coerce') | |
| ``` | |
| ### Step 4: Load into Analyzer | |
| ```python | |
| from crash_analyzer import CrashDataAnalyzer | |
| analyzer = CrashDataAnalyzer(accidents, vehicles, parties) | |
| ``` | |
| --- | |
| ## Common Analyses | |
| ### Find Most Dangerous Intersections | |
| ```python | |
| hotspots = analyzer.identify_hotspots(grid_size=0.005) # ~500m cells | |
| # Focus on grid cells with >10 crashes | |
| ``` | |
| ### Compare Age Groups | |
| ```python | |
| demographics = analyzer.analyze_demographics() | |
| # Look for age groups with highest injury rates | |
| ``` | |
| ### Identify Impairment Patterns | |
| ```python | |
| # Filter parties where sobriety == 3 (intoxicated) | |
| impaired_crashes = analyzer.parties[analyzer.parties['sobriety'] == 3] | |
| # Analyze time of day, day of week, location | |
| ``` | |
| ### Seasonal Trends | |
| ```python | |
| temporal = analyzer.analyze_temporal_patterns() | |
| # Compare summer vs. winter crash counts | |
| ``` | |
| ### Vehicle Type Safety | |
| ```python | |
| vehicles = analyzer.analyze_vehicle_types() | |
| # Motorcycle fatality rate vs. car fatality rate | |
| ``` | |
| --- | |
| ## Visualization Examples | |
| ### 1. Time Series: Crashes by Hour | |
| ```python | |
| import matplotlib.pyplot as plt | |
| hourly = analyzer.accidents.groupby('hour').size() | |
| plt.bar(hourly.index, hourly.values) | |
| plt.xlabel('Hour of Day') | |
| plt.ylabel('Number of Crashes') | |
| plt.title('Crashes by Hour of Day') | |
| ``` | |
| ### 2. Geographic Hotmap (Folium) | |
| ```python | |
| import folium | |
| m = folium.Map(location=[37.0, -120.0], zoom_start=6) | |
| for hotspot in analyzer.identify_hotspots(): | |
| folium.CircleMarker( | |
| location=[hotspot['center_lat'], hotspot['center_lon']], | |
| radius=5 + hotspot['crash_count'] / 10, | |
| color='red' if hotspot['fatal_count'] > 0 else 'orange', | |
| popup=f"{hotspot['crash_count']} crashes" | |
| ).add_to(m) | |
| m.save('hotspots_map.html') | |
| ``` | |
| ### 3. Vehicle Risk Comparison (Plotly) | |
| ```python | |
| import plotly.express as px | |
| vehicle_risk = analyzer.analyze_vehicle_types()['vehicle_risk_analysis'] | |
| df = pd.DataFrame(vehicle_risk).T | |
| px.bar(df, y='fatality_rate', title='Fatality Rate by Vehicle Type').show() | |
| ``` | |
| ### 4. Age Demographics (Seaborn) | |
| ```python | |
| import seaborn as sns | |
| sns.histplot(analyzer.parties, x='age', hue='injury_level', kde=True) | |
| plt.title('Injury Severity by Age') | |
| ``` | |
| --- | |
| ## Key Metrics to Track | |
| | Metric | Formula | Interpretation | | |
| |---|---|---| | |
| | Fatality Rate | Fatal Crashes / Total Crashes | Higher = more dangerous | | |
| | Injury Rate | Injury Crashes / Total Crashes | Focus on prevention | | |
| | Fatality per Crash | Total Fatalities / Total Crashes | Severity measure | | |
| | Peak Hour | Hour with most crashes | Traffic management | | |
| | Hotspot Density | Crashes per sq km | Infrastructure need | | |
| | Demographics Risk | Deaths / Population Group | Target safety programs | | |
| --- | |
| ## API Reference | |
| ### CrashDataAnalyzer Methods | |
| ```python | |
| class CrashDataAnalyzer: | |
| # Metadata | |
| analyze_temporal_patterns() -> Dict | |
| analyze_severity() -> Dict | |
| analyze_collision_types() -> Dict | |
| # Geospatial | |
| get_geographic_summary() -> Dict | |
| identify_hotspots(lat_col, lon_col, grid_size) -> List[Dict] | |
| # Vehicle/Traveler | |
| analyze_vehicle_types() -> Dict | |
| analyze_demographics() -> Dict | |
| analyze_injury_patterns() -> Dict | |
| # Combined | |
| generate_summary_report() -> Dict | |
| ``` | |
| --- | |
| ## Tips for Analysis | |
| ✅ **Do**: | |
| - Start with summary statistics before deep dives | |
| - Validate data quality before conclusions | |
| - Cross-reference multiple data sources | |
| - Account for population denominators (risk per capita) | |
| - Visualize before presenting findings | |
| ❌ **Don't**: | |
| - Confuse correlation with causation | |
| - Ignore data quality issues | |
| - Over-interpret small sample sizes | |
| - Make policy recommendations without context | |
| - Ignore survivor bias in injury data | |
| --- | |
| ## Resources | |
| - **TIMS**: https://tims.berkeley.edu/ | |
| - **SWITRS Documentation**: https://tims.berkeley.edu/help/crashdata/switrs-geocoding.php | |
| - **Berkeley Safe Transportation Research & Education Center**: https://safetrec.berkeley.edu | |
| - **CHP Statewide Integrated Traffic Records System**: https://www.chp.ca.gov/ | |