一、个人简介
💖💖作者:计算机编程果茶熊 💙💙个人简介:曾长期从事计算机专业培训教学,担任过编程老师,同时本人也热爱上课教学,擅长Java、微信小程序、Python、Golang、安卓Android等多个IT方向。会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 计算机毕业设计选题 💕💕文末获取源码联系计算机编程果茶熊
二、系统介绍
大数据框架:Hadoop+Spark(Hive需要定制修改) 开发语言:Java+Python(两个版本都支持) 数据库:MySQL 后端框架:SpringBoot(Spring+SpringMVC+Mybatis)+Django(两个版本都支持) 前端:Vue+Echarts+HTML+CSS+JavaScript+jQuery
智能出行交通数据可视化分析系统是一套基于大数据技术构建的现代化交通数据分析平台。该系统采用Hadoop+Spark大数据框架作为核心数据处理引擎,通过Python语言开发,后端使用Django框架提供稳定的API服务,前端基于Vue+ElementUI+Echarts技术栈构建直观的用户交互界面。系统充分利用HDFS分布式存储和Spark SQL快速查询能力,结合Pandas、NumPy等数据科学库进行深度数据挖掘和分析。平台主要围绕城市交通出行场景,提供交通流量分析、停车共享分析、绿色出行分析、交通安全分析四大核心功能模块,并通过可视化大屏实时展示分析结果。系统能够处理海量交通数据,为交通管理部门和出行服务提供商提供数据决策支持,帮助优化交通资源配置,提升城市交通运行效率。
三、视频解说
四、部分功能展示
五、部分代码展示
from pyspark.sql import SparkSession
from pyspark.sql.functions import *
from pyspark.sql.types import *
import pandas as pd
import numpy as np
from datetime import datetime, timedelta
spark = SparkSession.builder.appName("TrafficDataAnalysis").config("spark.sql.adaptive.enabled", "true").config("spark.sql.adaptive.coalescePartitions.enabled", "true").getOrCreate()
def analyze_traffic_flow(road_id, start_date, end_date):
traffic_schema = StructType([
StructField("road_id", StringType(), True),
StructField("timestamp", TimestampType(), True),
StructField("vehicle_count", IntegerType(), True),
StructField("avg_speed", DoubleType(), True),
StructField("vehicle_type", StringType(), True)
])
traffic_df = spark.read.format("json").schema(traffic_schema).load("hdfs://traffic_data/")
filtered_df = traffic_df.filter((col("road_id") == road_id) & (col("timestamp").between(start_date, end_date)))
hourly_stats = filtered_df.withColumn("hour", hour(col("timestamp"))).groupBy("hour").agg(
avg("vehicle_count").alias("avg_vehicle_count"),
max("vehicle_count").alias("peak_vehicle_count"),
avg("avg_speed").alias("avg_speed"),
min("avg_speed").alias("min_speed")
).orderBy("hour")
congestion_df = filtered_df.withColumn("congestion_level",
when(col("avg_speed") < 20, "严重拥堵")
.when(col("avg_speed") < 40, "轻度拥堵")
.otherwise("畅通")
)
congestion_stats = congestion_df.groupBy("congestion_level").agg(
count("*").alias("occurrence_count"),
avg("vehicle_count").alias("avg_vehicles_in_congestion")
)
vehicle_type_stats = filtered_df.groupBy("vehicle_type").agg(
count("*").alias("count"),
avg("avg_speed").alias("avg_speed_by_type")
).orderBy(desc("count"))
daily_trend = filtered_df.withColumn("date", date_format(col("timestamp"), "yyyy-MM-dd")).groupBy("date").agg(
sum("vehicle_count").alias("daily_total_vehicles"),
avg("avg_speed").alias("daily_avg_speed"),
max("vehicle_count").alias("daily_peak_flow")
).orderBy("date")
flow_variance = filtered_df.withColumn("hour", hour(col("timestamp"))).groupBy("hour").agg(
stddev("vehicle_count").alias("flow_variance"),
(max("vehicle_count") - min("vehicle_count")).alias("flow_range")
)
result_dict = {
"hourly_stats": hourly_stats.toPandas().to_dict('records'),
"congestion_analysis": congestion_stats.toPandas().to_dict('records'),
"vehicle_composition": vehicle_type_stats.toPandas().to_dict('records'),
"daily_trends": daily_trend.toPandas().to_dict('records'),
"flow_stability": flow_variance.toPandas().to_dict('records')
}
return result_dict
def analyze_parking_sharing(region_id, analysis_date):
parking_schema = StructType([
StructField("parking_id", StringType(), True),
StructField("region_id", StringType(), True),
StructField("timestamp", TimestampType(), True),
StructField("total_spaces", IntegerType(), True),
StructField("occupied_spaces", IntegerType(), True),
StructField("parking_fee", DoubleType(), True),
StructField("sharing_enabled", BooleanType(), True)
])
parking_df = spark.read.format("json").schema(parking_schema).load("hdfs://parking_data/")
region_data = parking_df.filter((col("region_id") == region_id) & (date_format(col("timestamp"), "yyyy-MM-dd") == analysis_date))
utilization_df = region_data.withColumn("utilization_rate", col("occupied_spaces") / col("total_spaces") * 100)
hourly_utilization = utilization_df.withColumn("hour", hour(col("timestamp"))).groupBy("hour").agg(
avg("utilization_rate").alias("avg_utilization"),
max("utilization_rate").alias("peak_utilization"),
sum("total_spaces").alias("total_capacity"),
sum("occupied_spaces").alias("total_occupied")
).orderBy("hour")
sharing_analysis = region_data.filter(col("sharing_enabled") == True).groupBy("parking_id").agg(
avg("utilization_rate").alias("sharing_utilization"),
avg("parking_fee").alias("avg_sharing_fee"),
count("*").alias("sharing_records")
)
non_sharing_analysis = region_data.filter(col("sharing_enabled") == False).groupBy("parking_id").agg(
avg("utilization_rate").alias("regular_utilization"),
avg("parking_fee").alias("avg_regular_fee"),
count("*").alias("regular_records")
)
efficiency_comparison = sharing_analysis.join(non_sharing_analysis, "parking_id", "outer").fillna(0)
peak_demand_hours = utilization_df.withColumn("hour", hour(col("timestamp"))).filter(col("utilization_rate") > 80).groupBy("hour").agg(
count("*").alias("high_demand_occurrences"),
avg("utilization_rate").alias("avg_peak_utilization")
).orderBy(desc("high_demand_occurrences"))
revenue_analysis = region_data.withColumn("revenue", col("occupied_spaces") * col("parking_fee")).groupBy("parking_id").agg(
sum("revenue").alias("total_revenue"),
avg("revenue").alias("avg_hourly_revenue"),
max("revenue").alias("peak_revenue")
).orderBy(desc("total_revenue"))
sharing_impact = region_data.groupBy("sharing_enabled").agg(
avg("utilization_rate").alias("avg_utilization"),
sum("occupied_spaces").alias("total_usage"),
avg("parking_fee").alias("avg_fee")
)
result_dict = {
"hourly_utilization": hourly_utilization.toPandas().to_dict('records'),
"sharing_efficiency": efficiency_comparison.toPandas().to_dict('records'),
"peak_demand_analysis": peak_demand_hours.toPandas().to_dict('records'),
"revenue_statistics": revenue_analysis.toPandas().to_dict('records'),
"sharing_impact_comparison": sharing_impact.toPandas().to_dict('records')
}
return result_dict
def analyze_green_travel(city_id, start_date, end_date):
travel_schema = StructType([
StructField("user_id", StringType(), True),
StructField("city_id", StringType(), True),
StructField("travel_date", DateType(), True),
StructField("travel_mode", StringType(), True),
StructField("distance_km", DoubleType(), True),
StructField("duration_minutes", IntegerType(), True),
StructField("carbon_emission", DoubleType(), True),
StructField("cost", DoubleType(), True)
])
travel_df = spark.read.format("json").schema(travel_schema).load("hdfs://travel_data/")
city_travel = travel_df.filter((col("city_id") == city_id) & (col("travel_date").between(start_date, end_date)))
green_modes = ["公交", "地铁", "骑行", "步行", "电动车"]
green_travel_df = city_travel.filter(col("travel_mode").isin(green_modes))
private_travel_df = city_travel.filter(~col("travel_mode").isin(green_modes))
mode_statistics = city_travel.groupBy("travel_mode").agg(
count("*").alias("trip_count"),
sum("distance_km").alias("total_distance"),
avg("distance_km").alias("avg_distance"),
sum("carbon_emission").alias("total_emission"),
avg("carbon_emission").alias("avg_emission_per_trip")
).orderBy(desc("trip_count"))
green_ratio_daily = city_travel.withColumn("is_green", when(col("travel_mode").isin(green_modes), 1).otherwise(0)).groupBy("travel_date").agg(
sum("is_green").alias("green_trips"),
count("*").alias("total_trips"),
(sum("is_green") / count("*") * 100).alias("green_ratio")
).orderBy("travel_date")
carbon_savings = green_travel_df.agg(
sum("carbon_emission").alias("green_total_emission")
).collect()[0]["green_total_emission"]
private_emission = private_travel_df.agg(
sum("carbon_emission").alias("private_total_emission")
).collect()[0]["private_total_emission"]
emission_reduction = private_emission - carbon_savings if private_emission and carbon_savings else 0
efficiency_analysis = city_travel.groupBy("travel_mode").agg(
avg("duration_minutes").alias("avg_duration"),
avg("distance_km").alias("avg_distance"),
(avg("distance_km") / avg("duration_minutes") * 60).alias("avg_speed_kmh"),
avg("cost").alias("avg_cost_per_trip"),
(avg("cost") / avg("distance_km")).alias("cost_per_km")
).orderBy("cost_per_km")
user_behavior = city_travel.groupBy("user_id").agg(
count("*").alias("total_trips"),
sum(when(col("travel_mode").isin(green_modes), 1).otherwise(0)).alias("green_trips"),
(sum(when(col("travel_mode").isin(green_modes), 1).otherwise(0)) / count("*") * 100).alias("user_green_ratio")
).filter(col("total_trips") >= 5)
high_green_users = user_behavior.filter(col("user_green_ratio") > 70).count()
low_green_users = user_behavior.filter(col("user_green_ratio") < 30).count()
distance_preference = city_travel.withColumn("distance_category",
when(col("distance_km") < 2, "短途(<2km)")
.when(col("distance_km") < 10, "中途(2-10km)")
.otherwise("长途(>10km)")
).groupBy("distance_category", "travel_mode").agg(count("*").alias("trip_count")).orderBy("distance_category", desc("trip_count"))
result_dict = {
"travel_mode_statistics": mode_statistics.toPandas().to_dict('records'),
"daily_green_ratio": green_ratio_daily.toPandas().to_dict('records'),
"carbon_reduction_total": emission_reduction,
"mode_efficiency": efficiency_analysis.toPandas().to_dict('records'),
"user_green_behavior": {"high_green_users": high_green_users, "low_green_users": low_green_users},
"distance_mode_preference": distance_preference.toPandas().to_dict('records')
}
return result_dict
六、部分文档展示
七、END
💕💕文末获取源码联系计算机编程果茶熊