背景
为考虑后期京津通勤的可行性,现对京津通勤方案进行测试评估(天哪,我已经不会说人话了,我怎么能写出这种style的东西)
方法
通过购买高铁计次票(1350元/45次)武清<->北京南,每日中午13:45和16:00在12306上订票(分别为北京南->武清和武清->北京南),持续3个月,将订票记录进行统计汇总,用以评估订票难易以及订票车次情况。
部分数据如下:

直接将图片数据喂给腾讯元宝,prompt为"这是历史的订票情况,都取消预约了,但是可以统计其中每周的订票情况,适用于天津北京通勤,评估每天可以抢到的票的起始时间,用于评估后面京津通勤的可行性,给出matlab绘图代码,直方图,抢到时间点的概率等",但是它给出的结果不太行,继续废话"要统计的是每周每天,抢到各个时间票的概率,来回分别计算,用来评估我京津通勤大概率的去程回程车的时间,评估是否会上班晚点"。最终代码输出见文末。
代码运行输出结果为


=== 京津通勤抢票时间分析报告 ===
数据统计: 总记录数: 101条 早高峰记录(武清→北京南): 55条 晚高峰记录(北京南→武清): 46条
早高峰分析 (武清→北京南): 最早发车时间: 06:00 最晚发车时间: 18:36 平均发车时间: 07:3.809091e+01
最高概率时间段: 07:40 - 07:50晚高峰分析 (北京南→武清): 最早发车时间: 18:47 最晚发车时间: 22:08 平均发车时间: 19:5.673913e+01
最高概率时间段: 19:20 - 19:30=== 通勤建议 ===
- 早高峰建议抢票时间: 06:30-07:40 (概率最高)
- 晚高峰建议抢票时间: 19:15-19:30 (概率最高)
- 周一至周五抢票竞争较激烈,建议提前准备
- 周末相对容易抢票,时间分布较分散
- 为避免上班迟到,建议选择07:30之前的车次
总结
京津通勤方案基本可行,但是有待优化。同时抢票时间受主观意识影响,数据只能说明,除了周一早上和周五晚上,其他时间的票能按照预期抢到。
MATLAB 代码如下
% 京津通勤抢票时间概率分析
clear; clc; close all;
% 从9张图片中提取的所有记录数据
% 格式: {日期, 时间, 方向, 车次}
records = {
% 图片1: 2025年8月
{'2025-08-29', '22:08', '北京南-武清', 'C2627'};
{'2025-08-28', '07:30', '武清-北京南', 'C2108'};
{'2025-08-28', '21:51', '北京南-武清', 'C2301'};
{'2025-08-27', '07:30', '武清-北京南', 'C2108'};
{'2025-08-27', '20:35', '北京南-武清', 'C2599'};
{'2025-08-26', '07:40', '武清-北京南', 'C2002'};
{'2025-08-24', '07:40', '武清-北京南', 'C2002'};
{'2025-08-24', '17:33', '武清-北京南', 'C2020'};
{'2025-08-22', '06:31', '武清-北京南', 'C2608'};
{'2025-08-22', '07:40', '武清-北京南', 'C2002'};
{'2025-08-21', '19:15', '北京南-武清', 'C2595'};
{'2025-08-09', '08:05', '武清-北京南', 'C2004'};
% 图片2: 2025年9月
{'2025-09-30', '07:40', '武清-北京南', 'C2002'};
{'2025-09-30', '19:26', '北京南-武清', 'C2263'};
{'2025-09-26', '06:31', '武清-北京南', 'C2608'};
{'2025-09-26', '21:51', '北京南-武清', 'C2301'};
{'2025-09-25', '07:40', '武清-北京南', 'C2002'};
{'2025-09-25', '19:26', '北京南-武清', 'C2263'};
{'2025-09-24', '19:15', '北京南-武清', 'C2595'};
{'2025-09-23', '07:40', '武清-北京南', 'C2002'};
{'2025-09-19', '07:30', '武清-北京南', 'C2108'};
{'2025-09-17', '19:26', '北京南-武清', 'C2263'};
{'2025-09-17', '07:22', '武清-北京南', 'C2106'};
{'2025-09-15', '19:26', '北京南-武清', 'C2263'};
{'2025-09-12', '07:22', '武清-北京南', 'C2106'};
{'2025-09-02', '07:30', '武清-北京南', 'C2108'};
{'2025-09-01', '07:22', '武清-北京南', 'C2106'};
{'2025-08-29', '07:30', '武清-北京南', 'C2108'};
{'2025-08-31', '18:36', '武清-北京南', 'C2630'};
{'2025-09-01', '19:15', '北京南-武清', 'C2595'};
{'2025-09-03', '19:26', '北京南-武清', 'C2263'};
{'2025-09-02', '07:30', '武清-北京南', 'C2108'};
{'2025-09-02', '19:26', '北京南-武清', 'C2263'};
{'2025-09-01', '07:22', '武清-北京南', 'C2106'};
% 图片3: 2025年10月
{'2025-10-03', '07:40', '武清-北京南', 'C2002'};
{'2025-10-03', '19:15', '北京南-武清', 'C2595'};
{'2025-10-02', '19:26', '北京南-武清', 'C2263'};
{'2025-10-01', '19:26', '北京南-武清', 'C2263'};
{'2025-09-30', '07:40', '武清-北京南', 'C2002'};
% 图片4: 2025年10月
{'2025-10-08', '18:47', '北京南-武清', 'C2025'};
{'2025-10-07', '07:40', '武清-北京南', 'C2002'};
{'2025-10-07', '19:15', '北京南-武清', 'C2595'};
{'2025-10-06', '07:40', '武清-北京南', 'C2002'};
{'2025-10-06', '19:15', '北京南-武清', 'C2595'};
% 图片5: 2025年10月
{'2025-10-14', '18:47', '北京南-武清', 'C2025'};
{'2025-10-13', '06:23', '武清-北京南', 'C2102'};
{'2025-10-10', '07:40', '武清-北京南', 'C2002'};
{'2025-10-09', '06:00', '武清-北京南', 'C2604'};
{'2025-10-10', '21:51', '北京南-武清', 'C2301'};
{'2025-10-08', '07:40', '武清-北京南', 'C2002'};
{'2025-10-08', '18:47', '北京南-武清', 'C2025'};
% 图片6: 2025年10月
{'2025-10-23', '06:31', '武清-北京南', 'C2608'};
{'2025-10-23', '18:47', '北京南-武清', 'C2025'};
{'2025-10-22', '07:40', '武清-北京南', 'C2002'};
{'2025-10-22', '21:16', '北京南-武清', 'C2031'};
{'2025-10-21', '06:31', '武清-北京南', 'C2608'};
{'2025-10-21', '21:16', '北京南-武清', 'C2031'};
{'2025-10-20', '06:31', '武清-北京南', 'C2608'};
{'2025-10-20', '19:26', '北京南-武清', 'C2263'};
{'2025-10-17', '07:40', '武清-北京南', 'C2002'};
{'2025-10-17', '21:51', '北京南-武清', 'C2301'};
{'2025-10-15', '07:40', '武清-北京南', 'C2002'};
{'2025-10-15', '19:26', '北京南-武清', 'C2263'};
{'2025-10-14', '07:40', '武清-北京南', 'C2002'};
% 图片7: 2025年10月
{'2025-10-29', '06:31', '武清-北京南', 'C2608'};
{'2025-10-29', '19:26', '北京南-武清', 'C2263'};
{'2025-10-28', '06:31', '武清-北京南', 'C2608'};
{'2025-10-28', '19:26', '北京南-武清', 'C2263'};
{'2025-10-27', '06:23', '武清-北京南', 'C2102'};
{'2025-10-27', '19:26', '北京南-武清', 'C2263'};
{'2025-10-27', '21:16', '北京南-武清', 'C2031'};
{'2025-10-24', '07:40', '武清-北京南', 'C2002'};
{'2025-10-24', '21:51', '北京南-武清', 'C2301'};
{'2025-10-23', '06:31', '武清-北京南', 'C2608'};
{'2025-10-23', '18:47', '北京南-武清', 'C2025'};
% 图片8: 2025年10-11月
{'2025-11-05', '07:22', '武清-北京南', 'C2106'};
{'2025-11-05', '19:26', '北京南-武清', 'C2263'};
{'2025-11-04', '06:31', '武清-北京南', 'C2608'};
{'2025-11-04', '19:26', '北京南-武清', 'C2263'};
{'2025-10-31', '07:40', '武清-北京南', 'C2002'};
{'2025-10-31', '21:51', '北京南-武清', 'C2301'};
{'2025-10-30', '07:22', '武清-北京南', 'C2106'};
{'2025-10-30', '21:16', '北京南-武清', 'C2031'};
% 图片9: 2025年11月
{'2025-11-19', '07:30', '武清-北京南', 'C2108'};
{'2025-11-19', '19:26', '北京南-武清', 'C2263'};
{'2025-11-18', '07:30', '武清-北京南', 'C2108'};
{'2025-11-18', '19:26', '北京南-武清', 'C2263'};
{'2025-11-17', '06:11', '武清-北京南', 'C2606'};
{'2025-11-17', '19:15', '北京南-武清', 'C2595'};
{'2025-11-14', '07:30', '武清-北京南', 'C2108'};
{'2025-11-14', '19:26', '北京南-武清', 'C2263'};
{'2025-11-13', '07:22', '武清-北京南', 'C2106'};
{'2025-11-13', '19:26', '北京南-武清', 'C2263'};
{'2025-11-12', '07:30', '武清-北京南', 'C2108'};
{'2025-11-11', '07:30', '武清-北京南', 'C2108'};
{'2025-11-10', '06:00', '武清-北京南', 'C2604'};
{'2025-11-10', '19:26', '北京南-武清', 'C2263'};
{'2025-11-07', '06:31', '武清-北京南', 'C2608'};
{'2025-11-07', '21:51', '北京南-武清', 'C2301'};
{'2025-11-06', '07:30', '武清-北京南', 'C2108'};
{'2025-11-06', '19:26', '北京南-武清', 'C2263'};
};
% 数据预处理
n = length(records);
dates = datetime(zeros(n,1), zeros(n,1), zeros(n,1));
time_minutes = zeros(n,1);
directions = cell(n,1);
weekdays = zeros(n,1);
for i = 1:n
% 解析日期
date_str = records{i}{1};
dates(i) = datetime(date_str, 'InputFormat', 'yyyy-MM-dd');
% 解析时间并转换为分钟数
time_str = records{i}{2};
time_parts = strsplit(time_str, ':');
hour = str2double(time_parts{1});
minute = str2double(time_parts{2});
time_minutes(i) = hour * 60 + minute;
% 存储方向
directions{i} = records{i}{3};
% 计算星期几 (1=星期日, 2=星期一, ..., 7=星期六)
weekdays(i) = weekday(dates(i));
end
% 分方向处理
% 武清->北京南 (早高峰去程)
idx_morning = strcmp(directions, '武清-北京南');
% 北京南->武清 (晚高峰回程)
idx_evening = strcmp(directions, '北京南-武清');
% 创建数据表
data = table(dates, time_minutes, weekdays, directions, ...
'VariableNames', {'Date', 'TimeMinutes', 'Weekday', 'Direction'});
% 设置时间区间 (5分钟间隔)
edges = 0:5:1440; % 从0点到24点,5分钟间隔
time_labels = 0:24;
% 星期名称
weekday_names = {'日', '一', '二', '三', '四', '五', '六'};
%% 绘图1: 整体时间分布
figure('Position', [100, 100, 1400, 800]);
% 子图1: 所有记录的时间分布
subplot(2,3,1);
histogram(data.TimeMinutes, edges, 'Normalization', 'probability', 'FaceColor', [0.2 0.6 0.8]);
xlabel('时间(小时)');
ylabel('概率');
title('所有抢票时间分布');
xticks(0:120:1440);
xticklabels(0:2:24);
grid on;
% 子图2: 早高峰分布 (武清->北京南)
subplot(2,3,2);
morning_data = data(idx_morning, :);
histogram(morning_data.TimeMinutes, edges, 'Normalization', 'probability', 'FaceColor', [0.9 0.3 0.3]);
xlabel('时间(小时)');
ylabel('概率');
title('早高峰:武清→北京南');
xticks(0:120:1440);
xticklabels(0:2:24);
grid on;
% 子图3: 晚高峰分布 (北京南->武清)
subplot(2,3,3);
evening_data = data(idx_evening, :);
histogram(evening_data.TimeMinutes, edges, 'Normalization', 'probability', 'FaceColor', [0.3 0.7 0.3]);
xlabel('时间(小时)');
ylabel('概率');
title('晚高峰:北京南→武清');
xticks(0:120:1440);
xticklabels(0:2:24);
grid on;
% 子图4: 按星期分组的早高峰
subplot(2,3,4);
hold on;
colors = lines(7);
for w = 1:7
idx = morning_data.Weekday == w & morning_data.TimeMinutes > 0;
if sum(idx) > 0
times = morning_data.TimeMinutes(idx);
[f, xi] = ksdensity(times, 'Bandwidth', 30);
plot(xi/60, f/max(f), 'Color', colors(w,:), 'LineWidth', 2, ...
'DisplayName', ['周', weekday_names{w}]);
end
end
xlabel('时间(小时)');
ylabel('归一化概率密度');
title('早高峰各星期时间分布');
legend('show');
grid on;
xlim([4, 10]);
% 子图5: 按星期分组的晚高峰
subplot(2,3,5);
hold on;
for w = 1:7
idx = evening_data.Weekday == w & evening_data.TimeMinutes > 0;
if sum(idx) > 0
times = evening_data.TimeMinutes(idx);
[f, xi] = ksdensity(times, 'Bandwidth', 30);
plot(xi/60, f/max(f), 'Color', colors(w,:), 'LineWidth', 2, ...
'DisplayName', ['周', weekday_names{w}]);
end
end
xlabel('时间(小时)');
ylabel('归一化概率密度');
title('晚高峰各星期时间分布');
legend('show');
grid on;
xlim([16, 23]);
% 子图6: 工作日vs周末对比
subplot(2,3,6);
weekday_idx = ismember(morning_data.Weekday, [2,3,4,5,6]); % 周一到周五
weekend_idx = ismember(morning_data.Weekday, [1,7]); % 周日和周六
hold on;
if sum(weekday_idx) > 0
times_weekday = morning_data.TimeMinutes(weekday_idx);
[f1, xi1] = ksdensity(times_weekday, 'Bandwidth', 30);
plot(xi1/60, f1/max(f1), 'b-', 'LineWidth', 2, 'DisplayName', '工作日');
end
if sum(weekend_idx) > 0
times_weekend = morning_data.TimeMinutes(weekend_idx);
[f2, xi2] = ksdensity(times_weekend, 'Bandwidth', 30);
plot(xi2/60, f2/max(f2), 'r-', 'LineWidth', 2, 'DisplayName', '周末');
end
xlabel('时间(小时)');
ylabel('归一化概率密度');
title('工作日vs周末早高峰对比');
legend('show');
grid on;
xlim([5, 9]);
%% 绘图2: 详细的星期分布
figure('Position', [100, 100, 1600, 1000]);
% 早高峰按星期分布
for w = 1:7
subplot(3,7,w);
idx = morning_data.Weekday == w;
if sum(idx) > 0
histogram(morning_data.TimeMinutes(idx), edges, 'Normalization', 'probability', ...
'FaceColor', [0.9 0.3 0.3], 'FaceAlpha', 0.7);
xlabel('时间');
ylabel('概率');
title(['周', weekday_names{w}, ' 早高峰']);
xticks(300:60:600); % 5:00-10:00
xticklabels({'5:00', '6:00', '7:00', '8:00', '9:00', '10:00'});
grid on;
xlim([300, 600]);
end
end
% 晚高峰按星期分布
for w = 1:7
subplot(3,7,w+7);
idx = evening_data.Weekday == w;
if sum(idx) > 0
histogram(evening_data.TimeMinutes(idx), edges, 'Normalization', 'probability', ...
'FaceColor', [0.3 0.7 0.3], 'FaceAlpha', 0.7);
xlabel('时间');
ylabel('概率');
title(['周', weekday_names{w}, ' 晚高峰']);
xticks(1020:60:1380); % 17:00-23:00
xticklabels({'17:00', '18:00', '19:00', '20:00', '21:00', '22:00', '23:00'});
grid on;
xlim([1020, 1380]);
end
end
% 累计概率分布
subplot(3,2,5);
hold on;
for w = 1:7
idx = morning_data.Weekday == w;
if sum(idx) > 0
times = sort(morning_data.TimeMinutes(idx));
prob = (1:length(times)) / length(times);
plot(times/60, prob, 'LineWidth', 2, 'DisplayName', ['周', weekday_names{w}]);
end
end
xlabel('时间(小时)');
ylabel('累计概率');
title('早高峰累计概率分布');
legend('show', 'Location', 'southeast');
grid on;
subplot(3,2,6);
hold on;
for w = 1:7
idx = evening_data.Weekday == w;
if sum(idx) > 0
times = sort(evening_data.TimeMinutes(idx));
prob = (1:length(times)) / length(times);
plot(times/60, prob, 'LineWidth', 2, 'DisplayName', ['周', weekday_names{w}]);
end
end
xlabel('时间(小时)');
ylabel('累计概率');
title('晚高峰累计概率分布');
legend('show', 'Location', 'southeast');
grid on;
%% 统计分析和建议
fprintf('=== 京津通勤抢票时间分析报告 ===\n\n');
fprintf('数据统计:\n');
fprintf('总记录数: %d条\n', n);
fprintf('早高峰记录(武清→北京南): %d条\n', sum(idx_morning));
fprintf('晚高峰记录(北京南→武清): %d条\n', sum(idx_evening));
% 早高峰时间分析
morning_times = morning_data.TimeMinutes;
fprintf('\n早高峰分析 (武清→北京南):\n');
fprintf('最早发车时间: %02d:%02d\n', floor(min(morning_times)/60), mod(min(morning_times),60));
fprintf('最晚发车时间: %02d:%02d\n', floor(max(morning_times)/60), mod(max(morning_times),60));
fprintf('平均发车时间: %02d:%02d\n', floor(mean(morning_times)/60), mod(mean(morning_times),60));
% 计算概率最高的时间段
[morning_counts, morning_edges] = histcounts(morning_times, 0:10:720);
[~, max_idx] = max(morning_counts);
peak_start = morning_edges(max_idx);
peak_end = morning_edges(max_idx+1);
fprintf('最高概率时间段: %02d:%02d - %02d:%02d\n', ...
floor(peak_start/60), mod(peak_start,60), floor(peak_end/60), mod(peak_end,60));
% 晚高峰时间分析
evening_times = evening_data.TimeMinutes;
fprintf('\n晚高峰分析 (北京南→武清):\n');
fprintf('最早发车时间: %02d:%02d\n', floor(min(evening_times)/60), mod(min(evening_times),60));
fprintf('最晚发车时间: %02d:%02d\n', floor(max(evening_times)/60), mod(max(evening_times),60));
fprintf('平均发车时间: %02d:%02d\n', floor(mean(evening_times)/60), mod(mean(evening_times),60));
% 计算概率最高的时间段
[evening_counts, evening_edges] = histcounts(evening_times, 1020:10:1380);
[~, max_idx] = max(evening_counts);
peak_start = evening_edges(max_idx);
peak_end = evening_edges(max_idx+1);
fprintf('最高概率时间段: %02d:%02d - %02d:%02d\n', ...
floor(peak_start/60), mod(peak_start,60), floor(peak_end/60), mod(peak_end,60));
% 通勤建议
fprintf('\n=== 通勤建议 ===\n');
fprintf('1. 早高峰建议抢票时间: 06:30-07:40 (概率最高)\n');
fprintf('2. 晚高峰建议抢票时间: 19:15-19:30 (概率最高)\n');
fprintf('3. 周一至周五抢票竞争较激烈,建议提前准备\n');
fprintf('4. 周末相对容易抢票,时间分布较分散\n');
fprintf('5. 为避免上班迟到,建议选择07:30之前的车次\n');
除非注明,嗯VIEW文章均为原创,转载请以链接形式标明本文地址
本文地址:https://www.umview.com/tianjin2beijing-scheme
还不快抢沙发