2022年中国高校数据驱动创新大赛-智慧交通方向

大赛介绍

一、赛事背景

目前,全世界已经步入数字经济时代,数字经济成为支撑当前和未来世界经济发展的重要动力。数据是数字经济时代重要的生产要素,是构建新发展格局的重要支撑。党中央、国务院高度重视培育数据要素市场,2020年以来,《关于构建更加完善的要素市场化配置体制机制的意见》《“十四五”数字经济发展规划》纷纷提出要加快培育发展数据要素市场,进一步明确数据作为新型生产要素的基础性和战略性地位。为深入贯彻落实党中央、国务院关于深入推进数字经济发展的决策部署,抢抓数据要素发展机遇,重庆市相继出台《重庆市数字产业发展“十四五”规划》《重庆市数据治理“十四五”规划》等顶层设计方案,推动全市数字经济高质量发展。

数字战略,人才先行。为进一步提升我国数字经济国际竞争力,应充分发挥高校作为人才培养的摇篮、科技创新的阵地作用,为数字经济发展构筑坚实高台。在国家信息中心指导下,重庆市渝北区政府、重庆市社会科学联合会作为主办单位,重庆市渝北区大数据应用发展管理局、重庆仙桃数据谷投资管理有限公司、重庆西部大数据前沿应用研究院、重庆科技服务大市场公司、重庆新发展生态修复与产业研究院、重庆邮电大学工业互联网现代产业学院等作为承办单位,联合发起“2022年中国高校数据驱动创新大赛”。

本次大赛将立足重庆、辐射西部、面向全国,旨在鼓励全国高校学生利用数据科学技术和方法,开展基于高质量开放数据的研究,促进数据价值的挖掘和创造,助力教育科研领域数据资源的汇集、管理、共享和开放,力争数字技术创新发展实现新突破、数字产业融合应用取得新成效、数字基础设施建设迈上新台阶。同时,让更多的科研机构、企业和个人在数据驱动创新的大舞台上,充分感受澎湃力量和时代脉搏,不断激发数据生产要素对经济社会的放大、叠加、倍增作用,更好地为国家科技创新、经济社会发展提供支撑。

赛题&数据

一、赛题描述

城市交通
随着重庆市私家车的数量逐渐增多,道路拥堵成了重庆市中不可避免的问题,重庆市民为了避免道路拥挤,车辆行驶速度较慢,交通路况复杂,会选择乘坐轨道交通出行。而早晚高峰期的大批量的市民涌入公共汽车、轨道交通、出租车,为城市地面和轨道的公共交通管理提出了新的挑战,赛题聚焦于分析城市道路拥挤程度,交通健康指数,车流均速等因素对地面和轨道的公共交通客运量的影响,参赛团队需充分利用大数据、车联网等先进技术,按照路面交通情况来智能化管理和分配公共交通流量,为之后的智慧交通,道路和轨道建设提供数据分析支持。

二、数据

数据内容:

  • 重庆中心城市客运总量.csv
  • 重庆交通拥堵数据.csv
  • 重庆城轨交通数据.csv

数据说明:
参赛团队或个人可完全基于大赛提供的数据展开分析和研究,也可使用大赛数据结合其他数据,完成竞赛作品。需注意:使用大赛数据以外的数据,选手应自行负责该数据的权属、合法性、正确性问题,任何因使用、引用外部数据导致的权属、合法性和正确性问题,均由选手承担。

数据使用:
本次比赛数据只可在线分析,不开放下载, 支持参赛团队结合外部数据进行分析。
【数据】使用路径:完成赛题报名→从本赛事页面右上角「modelwhale 工作台」前往对应组织→点击左侧列表中的「共享空间」→选取「共享数据」查看→「开始探索」新建 Notebook 进行具体数据分析工作

我们将会用部分智慧交通数据,演示如何去做简单的数据分析。

import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
import seaborn as sns
from pyecharts import options as opts
from pyecharts.charts import Line

df= pd.read_csv('/home/mw/input/zhjt7109/重庆城轨交通数据.csv')

# 统计描述
print(df.describe())
# 创建一个 Line 对象
line_chart = Line()

# 设置 x 轴数据(时间)
line_chart.add_xaxis(df['时间'].astype(str).tolist())

# 遍历每一列数据,除了时间列
for column in df.columns:
    if column != '时间':
        line_chart.add_yaxis(column, df[column].tolist(), markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="max"), opts.MarkPointItem(type_="min")]), is_smooth=True)

# 设置全局选项
line_chart.set_global_opts(
    title_opts=opts.TitleOpts(title="时间趋势图"),
    xaxis_opts=opts.AxisOpts(name="时间"),
    yaxis_opts=opts.AxisOpts(name="值"),
    tooltip_opts=opts.TooltipOpts(trigger="axis"),
)

# 渲染图表
line_chart.render_notebook()

 

数据的趋势和相关性分析
时间序列分析:观察各个变量随时间的变化趋势,了解是否存在明显的增长或下降趋势。例如,运营里程、配属列车数和开行列次等随时间的变化趋势可以反映轨道交通的发展状况。
相关性分析:计算各变量之间的相关系数,查看变量之间的相关性,尤其是与运营里程的相关性,可以揭示各个因素对运营里程的影响。 

import seaborn as sns

# 计算相关系数
corr = df.corr()

# 可视化相关矩阵
plt.figure(figsize=(10, 8))
sns.heatmap(corr, annot=True, cmap='coolwarm', fmt='.2f')
plt.title('Correlation Matrix')
plt.show()

 

使用随机森林或其他模型评估各特征对 运营里程 的重要性   

 

from sklearn.ensemble import RandomForestRegressor

# 定义特征和目标变量
X = df.drop(columns=['时间', '重庆_城轨交通_运营里程\n单位(万车公里)'])
y = df['重庆_城轨交通_运营里程\n单位(万车公里)']

# 训练随机森林模型
rf_model = RandomForestRegressor(random_state=42)
rf_model.fit(X, y)

# 获取特征重要性
importances = rf_model.feature_importances_
feature_importance_df = pd.DataFrame({
    'Feature': X.columns,
    'Importance': importances
}).sort_values(by='Importance', ascending=False)

# 可视化特征重要性
plt.figure(figsize=(10, 6))
sns.barplot(x='Importance', y='Feature', data=feature_importance_df)
plt.title('Feature Importance for Operating Mileage')
plt.show()

 

重庆交通拥堵数据分析  

 

import pandas as pd
data_path = '/home/mw/input/zhjt7109/重庆交通拥堵数据.csv'
jtyd_data = pd.read_csv(data_path)

jtyd_data.info()

jtyd_data.head()

# 删除第一行数据,令index=0,删除索引为0的第一行
jtyd_data = jtyd_data.drop(index=0).reset_index(drop=True)
jtyd_data.head()
# 查看数据的基本信息
print(jtyd_data.describe())

# 查看数据的相关性
print(jtyd_data.corr())

接下来,我们对于我们的数据进行可视化,看看数据间是否存在一些联系

from pyecharts import options as opts
from pyecharts.charts import Line
import pandas as pd


jtyd_data['时间'] = pd.to_datetime(jtyd_data['时间'])

# 创建折线图
line_chart = (
    Line()# # 创建一个 Line 对象,用于绘制折线图
    .add_xaxis(jtyd_data['时间'].dt.strftime('%Y-%m-%d %H:%M').tolist())  # 添加横坐标,时间格式化为 '年-月-日 时:分' 的字符串列表
    .add_yaxis('拥堵延时指数', jtyd_data['拥堵延时指数_重庆'].tolist(), is_smooth=True)# # 添加第一条纵坐标,表示拥堵延时指数,并设置为平滑曲线
    .add_yaxis('平均速度', jtyd_data['平均速度_重庆\n公里/小时'].tolist(), is_smooth=True)## 添加第二条纵坐标,表示平均速度,并设置为平滑曲线
    .set_global_opts(## 设置全局选项
        title_opts=opts.TitleOpts(title='拥堵延时指数与平均速度变化'),# 设置图表标题
        xaxis_opts=opts.AxisOpts(name='时间', type_='category'),# 设置横坐标名称为“时间”,类型为类别型
        yaxis_opts=opts.AxisOpts(name='指标值'),# 设置纵坐标名称为“指标值”
        legend_opts=opts.LegendOpts(pos_top='5%')
    )
)

# 渲染为 HTML 文件
line_chart.render_notebook()

 

# 创建折线图
line_chart = (
    Line()
    .add_xaxis(jtyd_data['时间'].dt.strftime('%Y-%m-%d %H:%M').tolist())  #从数据框 jtyd_data 中提取名为 时间 的列,该列包含时间数据。使用 Pandas 的日期时间格式化功能,将时间数据格式化为字符串,格式为“年-月-日 时:分”。这使得时间在图表中更易读。
    .add_yaxis('交通健康指数', jtyd_data['交通健康指数_重庆\n%'].tolist(), color='orange', is_smooth=True)  # 添加交通健康指数数据
    .set_global_opts(
        title_opts=opts.TitleOpts(title='交通健康指数变化'),  # 设置图表标题
        xaxis_opts=opts.AxisOpts(name='时间', type_='category'),  # 设置横坐标名称为“时间”
        yaxis_opts=opts.AxisOpts(name='交通健康指数 (%)'),  # 设置纵坐标名称为“交通健康指数 (%)”
        legend_opts=opts.LegendOpts(pos_top='5%')  # 设置图例的位置,在顶部5%
    )
)

# 渲染为 HTML 文件
line_chart.render_notebook()

 

 引入线性回归模型,对交通健康指数进行预测

import pandas as pd
from sklearn.model_selection import train_test_split

# 特征选择
X = jtyd_data[['拥堵延时指数_重庆', '平均速度_重庆\n公里/小时']]
# 目标变量
y = jtyd_data['交通健康指数_重庆\n%']

# 拆分数据集为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
from sklearn.linear_model import LinearRegression

# 创建线性回归模型
model = LinearRegression()

# 训练模型
model.fit(X_train, y_train)
# 进行预测
y_pred = model.predict(X_test)

# 评估模型性能
from sklearn.metrics import mean_squared_error, r2_score

mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)

print(f'Mean Squared Error: {mse}')
print(f'R² Score: {r2}')
plt.figure(figsize=(10, 6))
plt.scatter(y_test, y_pred)
plt.xlabel('true')
plt.ylabel('predict')
plt.title('true vs predict')
plt.plot([y.min(), y.max()], [y.min(), y.max()], 'r--')  # 参考线
plt.show()

jtyd_data.info()

对数据框 jtyd_data 中的 '交通健康指数_重庆\n%' 列进行移动平均计算,窗口大小为 3。计算结果将存储在新列 '移动平均' 中。这意味着每个数据点的值是其前两个数据点和当前数据点的平均值。

import pandas as pd

jtyd_data['移动平均'] = jtyd_data['交通健康指数_重庆\n%'].rolling(window=3).mean()

# 预测未来值
forecast_value = jtyd_data['交通健康指数_重庆\n%'].iloc[-1]
forecast_value 

 这样我们可以通过这种时间数据操作的方法,对数据进行短时预测。指数平滑法通过对过去观察值的加权平均来进行预测,最近的观察值权重更大

from statsmodels.tsa.holtwinters import ExponentialSmoothing

model = ExponentialSmoothing(jtyd_data['交通健康指数_重庆\n%'], trend='add', seasonal='add', seasonal_periods=12)
fit = model.fit()
forecast = fit.forecast(steps=5)
forecast
df= pd.read_csv('/home/mw/input/zhjt7109/重庆中心城市客运总量(万人次).csv')
df['时间\客运量'] = pd.to_datetime(df['时间\客运量'])

# 查看基本统计信息
print(df.describe())
print(df.columns)

构建综合指标  
可以根据各类客运方式的使用量构建综合指标,以评估整个交通系统的表现。例如:  

客运方式占比  
计算各类客运方式在总客运量中的占比,分析不同客运方式的相对重要性。

# 计算各客运方式占比
df['轮渡占比'] = df['中心城市客运轮渡量_当月值_重庆'] / df['中心城市客运总量_当月值_重庆'] * 100
df['出租汽车占比'] = df['中心城市出租汽车量_当月值_重庆'] / df['中心城市客运总量_当月值_重庆'] * 100
df['轨道交通占比'] = df['中心城市轨道交通量_当月值_重庆'] / df['中心城市客运总量_当月值_重庆'] * 100
df['公共汽电车占比'] = df['中心城市公共汽电车量_当月值_重庆'] / df['中心城市客运总量_当月值_重庆'] * 100

# 查看占比结果
print(df[['轮渡占比', '出租汽车占比', '轨道交通占比', '公共汽电车占比']])

 客运效率指数
构建一个“客运效率指数”,可以是某种客运量(如轨道交通量)与总客运量的比例,反映高效客运方式的使用率。

# 构建客运效率指数
df['客运效率指数'] = (df['中心城市轨道交通量_当月值_重庆'] + df['中心城市公共汽电车量_当月值_重庆']) / df['中心城市客运总量_当月值_重庆'] * 100

# 查看客运效率指数
print(df[['客运效率指数']])

 分析各类客运方式之间的相关性,了解它们之间是否存在替代或互补关系。

import seaborn as sns

# 计算相关矩阵
corr = df.corr()

# 可视化相关矩阵
plt.figure(figsize=(10, 8))
sns.heatmap(corr, annot=True, cmap='coolwarm', fmt='.2f')
plt.title('Correlation Matrix of Passenger Transportation Modes')
plt.show()

 

如果两种客运方式之间的相关系数为正且接近1,可能表明这两种方式具有协同作用。  
如果相关系数为负,可能表明这两种方式之间存在替代关系。 

 季节性和周期性分析  
通过季节性分解分析(Seasonal Decomposition)来观察时间序列中的季节性变化、趋势和残差。

from statsmodels.tsa.seasonal import seasonal_decompose

# 对总客运量进行季节性分解
result = seasonal_decompose(df['中心城市客运总量_当月值_重庆'], model='additive', freq=3)  # 使用3个月的周期作为季节性
#model='additive': 指定使用加法模型进行分解,这意味着时间序列的组成部分(趋势、季节性和残差)是相加的关系。
# 绘制分解结果
result.plot()
plt.show()

 

季节性:是否存在某种客运方式的月度或季度波动?  
趋势:长期趋势的变化方向。  
残差:分析剩余部分来发现异常或不可解释的变化 

from statsmodels.tsa.holtwinters import ExponentialSmoothing
df['时间\客运量'] = pd.to_datetime(df['时间\客运量'])  # 假设你有一个日期列
df.set_index('时间\客运量', inplace=True)  # 将日期列设置为索引
# 预测未来3个月的客运总量
model = ExponentialSmoothing(df['中心城市客运总量_当月值_重庆'], trend='add', seasonal=None).fit()
forecast = model.forecast(steps=3)
#df['中心城市客运总量_当月值_重庆']: 选择数据 df 中名为 '中心城市客运总量_当月值_重庆' 的列,作为进行预测的时间序列数据。
#trend='add': 指定趋势成分为加法模型,表示时间序列的趋势是通过加法方式来建模的。seasonal=None: 指定不考虑季节性成分,意味着在模型中不包含季节性波动。
# 可视化预测结果
plt.figure(figsize=(10, 6))
plt.plot(df.index, df['中心城市客运总量_当月值_重庆'], label='Actual Passenger Volume')
plt.plot(pd.date_range(start='2019-12-31', periods=3, freq='M'), forecast, marker='o', linestyle='--', label='Forecasted Passenger Volume')
plt.title('Passenger Volume Forecast')
plt.xlabel('Time')
plt.ylabel('Passenger Volume')
plt.legend()
plt.grid(True)
plt.show()

 

import matplotlib.pyplot as plt

# 绘制客运总量的时间序列图
plt.figure(figsize=(12, 6))
plt.plot(df['时间\客运量'], passenger_data['中心城市客运总量_当月值_重庆'], marker='o', label='Total Passenger Volume')
plt.title('Total Passenger Volume Over Time')
plt.xlabel('Time')
plt.ylabel('Passenger Volume')
plt.legend()
plt.show()

# 交通拥堵指数趋势
plt.figure(figsize=(12, 6))
plt.plot(congestion_data['时间'], congestion_data['拥堵指数'], marker='o', color='red', label='Congestion Index')
plt.title('Congestion Index Over Time')
plt.xlabel('Time')
plt.ylabel('Congestion Index')
plt.legend()
plt.show()

 文件下载地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

萌新待开发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值