2024年华中杯B题论文发布+数据预处理问题一代码免费分享

2024-04-19 10:20

本文主要是介绍2024年华中杯B题论文发布+数据预处理问题一代码免费分享,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【腾讯文档】2024年华中杯B题资料汇总

https://docs.qq.com/doc/DSExMdnNsamxCVUJt

行车轨迹估计交通信号灯周期问题

摘要

在城市化迅速发展的今天,交通管理和优化已成为关键的城市运营问题之一。本文将基于题目给出的数据,对行车轨迹估计交通信号灯周期问题进行研究。

针对问题一,固定周期信号灯周期估计。首先,对于给出的数据进行数据清洗,先进行异常值与缺失值的判定,结合实际情况进行人为判定,结果发现基本不存在这方面的数据问题。因此,基于数据本身对X轴数据、Y轴数据进行综合分析。得出不同的道路类型可能存在同向或异向的道路。因此,对Y轴数据进行肘部法则的聚类分析进行道路分类,对X轴数据位移变化判定方向。基于判定的结果,利用欧氏距离计算每一点的速度,速度为0,标记该时间点车辆为停止状态。提取停止和启动时间,计算持续时间。利用峰值分析,反映红灯时长;计算两个连续停止事件之间的时间差,估算绿灯时长,通过剔除策略排除极端值,保留正常范围内的数据,以确保评估的准确性。

针对问题二,影响因素分析与误差建模。采用问题一想用的数据处理方式,使用肘部法则进行聚类分析,对处理后的数据,引入问题一模型进行评估。对于误差分析,不同的样本车辆比例,选择不同的样本率导入模型进行评估,得出随着样本车辆比例的增加,平均红灯持续时间也呈现增长的趋势等结论。对于不同定位分析,设置偏移量是基于原始坐标的标准差的一定百分比(5%),结果发现并没有引起变化,这也验证的模型能够很好的应对定位不准确问题。

针对问题三,动态周期变化检测。利用问题一二思路计算有效的停车持续时间数据,使用峰值分析确定停车持续时间中的主要峰值,将停车持续时间大于平均值的数据视为有效数据,低于平均值的视为异常值并剔除。使用CUSUM方法判定周期变化点。针对问题四,对新的数据集进行评估。首先,利用给出的数据绘制车辆轨迹图,发现车辆大致为八个方向,因此使用python进行对数据进行分类。对分类后的数据集,采用问题一二三构建模周期模型。

关键词:数据清洗,聚类分析,肘部法则,动态周期变化检测,CUSUM方法

26页 1.2万字(无附录)

无水印照片17页

利用matlab的find函数,对给出的附件一A1、A2、A3、A4、A5数据进行判定,得出并无缺失值。在利用K-S检验判定分布方式,对正态分布数据使用3西格玛原则判定异常值;对非正态分布数据使用箱型图判定异常值。

X轴位置分析

为了更加直观的展示运动轨迹,以ID313、ID150、ID364为例,绘制了其X轴的运动轨迹

图1:轨迹图

Y轴位置分析

对于Y轴的数据,表示横向位置。即道路位置,表示了具体存在几个车道。对于A1数据,可以认为A1为双向车道。

表1:Y值计数

y计数
1.62324
4.89328

对于A2等数据文件,发现一共存在4618种y值位置。因此,不可能存在4618条道路。需要基于题目数据进行分类分析。

表1:Y值计数

y计数
-54.761
-54.711
-54.671
-54.631

为了直观的展示Y的具体数值,绘制了概率密度图如下所示

根据y的分布图可以看出,数据集中在特定的几个值上,这可能表示不同的车道位置。使用K-Means聚类算法来尝试确定车道数目。因此,对于这种的聚类方式,我选择与其高度相似的层次聚类算法。层次聚类算法即为开始就将每个数据点视为一个单一的聚类,然后依次合并(或聚集)类,直到所有类合并成一个包含所有数据点的单一聚类。

下面为了更好的解释这一概念,将利用matlab绘制示意图详细的解释这一

通过该图个图,可以看出k=5进行聚类,以识别五个可能的车道位置,并对数据进行聚类。

同时,利用x坐标(位移)随时间的变化判定是否为同一方向,问题一五个附件结果如下所示

图1:绿灯分布图

表 1:路口A1-A5 各自一个方向信号灯周期识别结果

路口A1A2A3A4A5
红灯时长(秒)55.9644.6957.0846.5551.63

5.4 模型的应用

5.4.1 路口方向划分

利用给出的数据进行路口的划分,需要根据车辆在路口的运动模式或方向来分类数据。这种分类可能需要根据车辆的位置变化(即坐标变化)来确定其可能的方向。

观察车辆轨迹:通过观察车辆坐标随时间的变化,可以推测车辆的大致行驶方向

计算方向:通过计算连续坐标点之间的变化,可以估计车辆的行驶方向。例如,如果x坐标随时间增加而y坐标减少,车辆可能是向东北方向行驶。

首先展示几个车辆的轨迹图,如下图所示

import pandas as pd# Load the data from the uploaded CSV file
file_path = 'A5.csv'
data = pd.read_csv(file_path)# Display the first few rows of the dataframe
data.head(), data.describe()
import matplotlib.pyplot as plt
import seaborn as sns# Plotting the distribution of y values to estimate lanes
plt.figure(figsize=(10, 6))
sns.histplot(data['y'], bins=50, kde=True)
plt.title('Distribution of Lateral Position (y)')
plt.xlabel('Lateral Position (y)')
plt.ylabel('Frequency')
plt.grid(True)
plt.show()
from sklearn.cluster import KMeans
import numpy as np# Determining the optimal number of clusters (lanes)
y_data = data['y'].values.reshape(-1, 1)
sse = []
for k in range(1, 11):kmeans = KMeans(n_clusters=k, random_state=0).fit(y_data)sse.append(kmeans.inertia_)# Plotting the SSE to find the elbow, which might indicate the optimal k (number of lanes)
plt.figure(figsize=(10, 6))
plt.plot(range(1, 11), sse, marker='o')
plt.title('Elbow Method For Optimal k')
plt.xlabel('Number of clusters (k)')
plt.ylabel('Sum of squared errors (SSE)')
plt.grid(True)
plt.show()# Applying K-Means with k=5
kmeans = KMeans(n_clusters=5, random_state=0).fit(y_data)
centers = kmeans.cluster_centers_# Plotting the clusters
plt.figure(figsize=(10, 6))
sns.scatterplot(x=data['x'], y=data['y'], hue=kmeans.labels_, palette='viridis', s=30)
plt.scatter(centers[:, 0], centers[:, 0], c='red', s=200, alpha=0.75, marker='X')  # Mark cluster centers
plt.title('Vehicle Positions with Lateral Position Clusters')
plt.xlabel('Displacement (x)')
plt.ylabel('Lateral Position (y)')
plt.legend(title='Cluster')
plt.grid(True)
plt.show()centers.flatten()import pandas as pd
from sklearn.cluster import KMeans
from sklearn.linear_model import LinearRegression
import numpy as np
import matplotlib.pyplot as plt# 使用肘部法则确定最佳聚类数
sse = {}
for k in range(1, 11):kmeans = KMeans(n_clusters=k, random_state=42)kmeans.fit(data[['y']])sse[k] = kmeans.inertia_# 假设根据图形分析选择了最佳的聚类数
optimal_k = 6
kmeans = KMeans(n_clusters=optimal_k, random_state=42)
data['lane'] = kmeans.fit_predict(data[['y']])# 对每个聚类分析x坐标的变化
directions = {}
for lane in range(optimal_k):lane_data = data[data['lane'] == lane]model = LinearRegression()model.fit(lane_data[['time']], lane_data['x'])slope = model.coef_[0]direction = 'Increasing' if slope > 0 else 'Decreasing'directions[lane] = direction# 绘制轨迹plt.scatter(lane_data['time'], lane_data['x'], label=f'Lane {lane} - {direction}')plt.xlabel('Time')
plt.ylabel('X Coordinate')
plt.title('Vehicle Trajectories by Lane')
plt.legend()
plt.show()# 输出结果表格
results = pd.DataFrame.from_dict(directions, orient='index', columns=['Direction'])
print(results)

% 加载数据
data = readtable('A5.csv');% 显示数据的前几行和描述性统计
head(data)
summary(data)% 使用histogram绘制y值的分布,估计车道
figure;
histogram(data.y, 'BinWidth', 0.1, 'Normalization', 'probability');
title('Distribution of Lateral Position (y)');
xlabel('Lateral Position (y)');
ylabel('Frequency');
grid on;% 使用K-means聚类确定车道数量的最佳值(肘部法则)
y_data = data.y;
sse = zeros(10,1);
for k = 1:10
[idx, C, sumd] = kmeans(y_data, k);
sse(k) = sum(sumd);
end% 绘制肘部图形
figure;
plot(1:10, sse, '-o');
title('Elbow Method For Optimal k');
xlabel('Number of clusters (k)');
ylabel('Sum of squared errors (SSE)');
grid on;% 应用K-means聚类,假设最佳k为5
k = 5;
[idx, C] = kmeans(y_data, k);% 假设最佳聚类数为6,再次运行K-means
k = 6;
[idx, C] = kmeans(data.y, k);data.lane = idx;% 对每个车道的x坐标随时间的变化进行线性回归分析
figure;
hold on;
colors = lines(k);
directions = cell(k, 1);
for i = 1:k
laneData = data(data.lane == i, :);
mdl = fitlm(laneData.time, laneData.x);
slope = mdl.Coefficients.Estimate(2);
direction = 'Increasing';
if slope < 0
direction = 'Decreasing';
end
directions{i} = direction;scatter(laneData.time, laneData.x, 36, colors(i,:), 'DisplayName', sprintf('Lane %d - %s', i, direction));
endxlabel('Time');
ylabel('X Coordinate');
title('Vehicle Trajectories by Lane');
legend('show');
grid on;% 输出方向结果
directions_table = table((1:k)', directions, 'VariableNames', {'Lane', 'Direction'});
disp(directions_table);

这篇关于2024年华中杯B题论文发布+数据预处理问题一代码免费分享的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/917270

相关文章

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.

Java 线程安全与 volatile与单例模式问题及解决方案

《Java线程安全与volatile与单例模式问题及解决方案》文章主要讲解线程安全问题的五个成因(调度随机、变量修改、非原子操作、内存可见性、指令重排序)及解决方案,强调使用volatile关键字... 目录什么是线程安全线程安全问题的产生与解决方案线程的调度是随机的多个线程对同一个变量进行修改线程的修改操

Redis出现中文乱码的问题及解决

《Redis出现中文乱码的问题及解决》:本文主要介绍Redis出现中文乱码的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 问题的产生2China编程. 问题的解决redihttp://www.chinasem.cns数据进制问题的解决中文乱码问题解决总结

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

Visual Studio 2022 编译C++20代码的图文步骤

《VisualStudio2022编译C++20代码的图文步骤》在VisualStudio中启用C++20import功能,需设置语言标准为ISOC++20,开启扫描源查找模块依赖及实验性标... 默认创建Visual Studio桌面控制台项目代码包含C++20的import方法。右键项目的属性:

MyBatisPlus如何优化千万级数据的CRUD

《MyBatisPlus如何优化千万级数据的CRUD》最近负责的一个项目,数据库表量级破千万,每次执行CRUD都像走钢丝,稍有不慎就引起数据库报警,本文就结合这个项目的实战经验,聊聊MyBatisPl... 目录背景一、MyBATis Plus 简介二、千万级数据的挑战三、优化 CRUD 的关键策略1. 查

python实现对数据公钥加密与私钥解密

《python实现对数据公钥加密与私钥解密》这篇文章主要为大家详细介绍了如何使用python实现对数据公钥加密与私钥解密,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录公钥私钥的生成使用公钥加密使用私钥解密公钥私钥的生成这一部分,使用python生成公钥与私钥,然后保存在两个文

mysql中的数据目录用法及说明

《mysql中的数据目录用法及说明》:本文主要介绍mysql中的数据目录用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、版本3、数据目录4、总结1、背景安装mysql之后,在安装目录下会有一个data目录,我们创建的数据库、创建的表、插入的

全面解析MySQL索引长度限制问题与解决方案

《全面解析MySQL索引长度限制问题与解决方案》MySQL对索引长度设限是为了保持高效的数据检索性能,这个限制不是MySQL的缺陷,而是数据库设计中的权衡结果,下面我们就来看看如何解决这一问题吧... 目录引言:为什么会有索引键长度问题?一、问题根源深度解析mysql索引长度限制原理实际场景示例二、五大解决

Springboot如何正确使用AOP问题

《Springboot如何正确使用AOP问题》:本文主要介绍Springboot如何正确使用AOP问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录​一、AOP概念二、切点表达式​execution表达式案例三、AOP通知四、springboot中使用AOP导出