【2023 年第二届钉钉杯大学生大数据挑战赛】 初赛 B:美国纽约公共自行车使用量预测分析 问题一Python代码分析

news2024/11/27 6:20:48

2023 年第二届钉钉杯大学生大数据挑战赛 初赛 B:美国纽约公共自行车使用量预测分析 问题一

在这里插入图片描述

1 题目

Citi Bike是纽约市在2013年启动的一项自行车共享出行计划,由“花旗银行”(Citi Bank)赞助并取名为“花旗单车”(Citi Bike)。在曼哈顿,布鲁克林,皇后区和泽西市有8,000辆自行车和500个车站。为纽约的居民和游客提供一种 方便快捷,并且省钱的自行车出行方式。人们随处都能借到Citi Bank,并在他们的目的地归还。本案例的数据有两部分:第一部分是纽约市公共自行车的借还交易流水表。Citi Bik自行车与共享单车不同,不能使用手机扫码在任意地点借还车,而需要使用固定的自行车桩借还车,数据集包含2013年7月1日至2016年8 月31日共38个月(1158天)的数据,每个月一个文件。其中2013年7月到2014年8 月的数据格式与其它年月的数据格式有所差别,具体体现在变量starttime和stoptime的存储格式不同。

第二部分是纽约市那段时间的天气数据,并存储在weather_data_NYC.csv文 件中,该文件包含2010年至2016年的小时级别的天气数据。

公共自行车数据字段表

变量编号变量名变量含义变量取值及说明
1trip duration旅行时长骑行时间,数值型,秒
2start time出发时间借车时间,字符串,m/d/YYY HH:MM:SS
3stop time结束时间还车时间,字符串,m/d/YYY HH:MM:SS
4start station id借车站点编号定性变量,站点唯一编号
5start station name借车站点名称字符串
6start station latitude借车站点维度数值型
7start station longtude借车站点经度数值型
8end station id还车站点编号定性变量,站点唯一编号
9end station name还车站点名称字符串
10end station latitude还车站点纬度数值型
11end station longitude还车站点经度数值型
12bile id自行车编号定性变量,自行车唯一编号
13Use type用户类型Subscriber:年度用户; Customer:24小时或者7天的临时用户
14birth year出生年份仅此列存在缺失值
15gender性别0:未知 1:男性 2:女性

天气数据字段简介表

变量编号变量名变量含义变量取值及说明
1date日期字符串
2time时间EDT(Eastern Daylight Timing)指美国东部夏令单位
3temperature气温单位:℃
4dew_poit露点单位:℃
5humidity湿度百分数
6pressure海平面气压单位:百帕
7visibility能见度单位:千米
8wind_direction风向离散型,类别包括west,calm等
9wind_speed风速单位:千米每小时
10moment_wind_speed瞬间风速单位:千米每小时
11precipitation降水量单位:毫米,存在缺失值
12activity活动离散型,类别包括snow等
13conditions状态离散型,类别包括overcast,light snow等
14WindDirDegrees风向角连续型,取值为0~359
15DateUTC格林尼治时间YYY/m/d HH:MM

二、解决问题

  1. 自行车借还情况功能实现:

实现各个站点在一天的自行车借还情况网络图,该网络图是有向图,箭头从借车站点指向还车站点(很多站点之间同时有借还记录,所以大部分站点两两之间是双向连接)。

(一)以2014年8月3日为例进行网络分析,实现自行车借还网络图,计算网络图的节点数,边数,网络密度(表示边的个数占所有可能的连接比例数),给出计算过程和画图结果。

(二)使用上述的网络分析图,对经度位于40.695~40.72,纬度位于- 74.023~-73.973之间的局域网区域进行分析,计算出平均最短路径长度(所有点 两两之间的最短路径长度进行算数平均)和网络直径(被定义网络中最短路径的 最大值)。

  1. 聚类分析

对于2013年7月1日至2015年8月31日数据集的自行车数据进行聚类分析,选 择合适的聚类数量K值,至少选择两种聚类算法进行聚类,并且比较不同的聚类 方法以及分析聚类结果。

  1. 站点借车量的预测分析:

对所有站点公共自行车的借车量预测,预测出未来的单日借车量。将2013年 7月-2015年7月数据作为训练集,2015年8月1-31日的数据作为测试集,预测2015 年8月1-31日每天的自行车单日借车量。给出每个站点预测结果的MAPE,并且给 出模型的参数数量,最后算出所有站点的MAPE的均值(注:测试集不能参与到训 练和验证中,否则作违规处理)。
M A P E = 1 n ∑ ∣ y i − y i ^ y i ∣ × 100 % MAPE = \frac{1}{n} \sum{|\frac{y_i-\hat{y_i}}{y_i}|} \times 100\% MAPE=n1yiyiyi^×100%

2 问题分析

2.1 问题一

  1. 绘制有向图

a. 读入数据并分别提取“起始站点编号”和“结束站点编号”两列数据,构建自行车借还网络图。

b. 对于第一步构建的网络图,我们需要计算网络图的节点数,边数,网络密度。节点数即为站点数,边数为借还次数。网络密度为边的数量占所有可能的连接比例。

c. 画出自行车借还网络图。

e. 计算平均最短路径长度和网络直径

首先选出符合条件(经度位于40.695~40.72,纬度位于- 74.023~-73.973之间)的借车站点和还车站点,并以它们为节点构建一个子图进行分析。然后可以直接使用networkx库中的函数来计算平均最短路径长度和网络直径。

2.2 问题二

  1. 数据预处理:对进行数据清洗和特征提取。可以使用PCA、LDA算法进行降维,减小计算复杂度。

  2. 聚类算法:
    a. K-means: 进行数据聚类时,选择不同的K值进行多次试验,选取最优的聚类结果。可以使用轮廓系数、Calinski-Harabaz指数等评价指标进行比较和选择。
    b. DBSCAN: 利用密度对数据点进行聚类,不需要预先指定聚类的数量。使用基于密度的聚类算法时,可以通过调整半径参数和密度参数来得到不同聚类效果。
    c. 层次聚类:可分为自顶向下和自底向上两种方式。通过迭代计算每个数据点之间的相似度,将数据点逐渐合并,最后得到聚类结果。

    d.改进的聚类算法

    e. 深度聚类算法

  3. 聚类结果分析:选择最优的聚类结果后,对不同类别骑车的用户进行画像。分析每个类别的用户行为特征。

2.3 问题三

  1. 导入数据并进行数据预处理,整合以站点为单位的借车数据。
  2. 对数据进行时间序列分析,使用ARIMA模型进行单日借车量预测。
  3. 使用时间序列交叉验证方法进行模型评估,计算每个站点预测结果的MAPE。
  4. 计算所有站点的MAPE的均值,给出模型的参数数量。

3 Python代码实现

3.1 问题一

以1000条数据为例

import pandas as pd
import networkx as nx
import matplotlib.pyplot as plt
# 导入数据
data = pd.read_csv('初赛数据集/2013-08 - Citi Bike trip data.csv')
df = data[0:1000]

。。。略

# 添加边
# 添加自行车借还关系作为网络图的边
for idx, row in df.iterrows():
    G.add_edge(row['start station id'], row['end station id'])

# 获取节点数和边数
node_num = G.number_of_nodes()
edge_num = G.number_of_edges()

# 计算网络密度
density = nx.density(G)
plt.figure(figsize=(15,10))
# 绘制网络图
pos = nx.spring_layout(G, k=0.1) # 用Spring算法布局网络图
nx.draw_networkx(G, pos=pos, node_size=20, edge_color='gray', alpha=0.5)
plt.savefig('img/有向图.png',dpi=300)
plt.show()

# 输出结果
print('节点数:', node_num)
print('边数:', edge_num)
print('网络密度:', density)

在这里插入图片描述


import pandas as pd
import networkx as nx

# 导入数据
df = pd.read_csv('初赛数据集/2013-08 - Citi Bike trip data.csv')

# 筛选符合条件的借还车站点
df_filtered = df[(df['start station longitude']>=-74.023) & (df['start station longitude']<=-73.973) &
                 (df['end station longitude']>=-74.023) & (df['end station longitude']<=-73.973) &
                 (df['start station latitude']>=40.695) & (df['start station latitude']<=40.72) &
                 (df['end station latitude']>=40.695) & (df['end station latitude']<=40.72)]

。。。略

# 添加边
# 添加自行车借还关系作为网络图的边
for idx, row in df_filtered.iterrows():
    G.add_edge(row['start station id'], row['end station id'])

# 计算平均最短路径长度和网络直径
average_shortest_path_length = nx.average_shortest_path_length(G)
diameter = nx.diameter(G)

# 输出结果
print('平均最短路径长度:', average_shortest_path_length)
print('网络直径:', diameter)

3.2 问题二

见另一篇博客,持续更新

3.3 问题三

见另一篇博客,持续更新

4 完整代码下载

见知乎文章底部链接,包括所有问题的全部代码

zhuanlan.zhihu.com/p/643865954

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/759907.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PID算法:标准PID算法的一些改进措施

前面的几篇文章分别分享了PID算法的原理、增量式和位置式PID算法的区别、以及过程控制中一些重要的指标&#xff0c;感兴趣的朋友可以回看之前的文章或者自行查阅资料。 在实际项目中&#xff0c;使用数字PID算法对系统的被控量进行控制的时候&#xff0c;有时候并不是仅仅的使…

面试之可重复读是否可以解决幻读

可重复读&#xff08;repeatable read&#xff09;定义:一个事务执行过程中看到的数据&#xff0c;总是跟这个事务在启动时看到的数据时是一致的。 不过理论上 是会出现幻读的&#xff0c;简单的来说幻读指的是当用户读取某一范围的数据行时&#xff0c;另外一个事务又在该范围…

一个PDF怎么拆分成几个?这几个方法轻松拆分PDF!

在现代生活与工作的环境中&#xff0c;我们常常需要以高效的方式处理包含大量信息的PDF文件。在这种情况下&#xff0c;拆分这些文件成为一种理想的解决方案&#xff0c;以便更精准地管理和阅读这些信息。接下来&#xff0c;我们将深入探讨几种实用的PDF拆分技巧。 一、直观的…

postman-循环调用测试接口

此篇文章产生的背景是想针对接口做流控验证&#xff0c;检查流控是否奏效&#xff0c;便发现postman也能一次操作来循环调用接口&#xff0c;减少了一些开发测试工作&#xff0c;下面就看一下操作流程 目录 前置查看postman版本我的接口数据 具体操作步骤新建接口集选择接口集进…

FL Studio Producer Edition v21.0.3.3517 for Mac中文版解锁版下载

水果音乐编辑软件FL Studio Producer Edition v21.0.3.3517 for Mac中文版解锁版下载是兔八哥爱分享搜集到的Mac Os系统上一款功能齐全的音乐编曲工具&#xff0c;可以为需要创作高品质音乐曲目的专业和业余艺术家提供多轨录音&#xff0c;排序和混音。 借助FL Studio 21的帮助…

运动模糊还原|维纳滤波|图像处理

前言 那么这里博主先安利一些干货满满的专栏了&#xff01; 这两个都是博主在学习Linux操作系统过程中的记录&#xff0c;希望对大家的学习有帮助&#xff01; 操作系统Operating Syshttps://blog.csdn.net/yu_cblog/category_12165502.html?spm1001.2014.3001.5482Linux S…

《Ansible故障篇:ansible报错解决python依赖》

一、背景信息 如下报错&#xff1a;这个警告是提醒您当前的Ansible配置在目标主机上使用的是/usr/bin/python而不是建议的/usr/bin/python3&#xff0c;因为Ansible 2.9版本之前的某些版本默认使用早期的Python 2.x版本。然而&#xff0c;在将来的版本中&#xff0c;Ansible将会…

xpath下载安装——Python爬虫xpath插件下载安装(2023.7亲测可用!!)

目录 1.免费下载插件链接&#xff08;若失效评论区留言发送最新链接&#xff09;&#xff08;2023.7亲测可用&#xff09; 2.安装插件 &#xff08;1&#xff09;打开chrome浏览器页面&#xff0c;点击&#xff1a;右上角三个点 > 扩展程序 > 管理拓展程序 &#xff…

leedcode 1326. 灌溉花园的最少水龙头数目

在 x 轴上有一个一维的花园。花园长度为 n&#xff0c;从点 0 开始&#xff0c;到点 n 结束。 花园里总共有 n 1 个水龙头&#xff0c;分别位于 [0, 1, …, n] 。 给你一个整数 n 和一个长度为 n 1 的整数数组 ranges &#xff0c;其中 ranges[i] &#xff08;下标从 0 开始…

wsl2中安装docker

1、安装docker 执行以下脚本&#xff1a; 这个脚本在执行之前需要先执行chmod x install-docker.sh这个命令 # install docker curl -fsSL get.docker.com -o get-docker.sh sh get-docker.shif [ ! $(getent group docker) ]; thensudo groupadd docker; elseecho "doc…

暗图增强 小期刊/会议 论文阅读笔记

Y. Ueda, H. Misawa, T. Koga, N. Suetake and E. Uchino, “HUE-Preserving Color Contrast Enhancement Method Without Gamut Problem by Using Histogram Specification,” 2018 25th IEEE International Conference on Image Processing (ICIP), Athens, Greece, 2018, pp…

一种具有集成JFET区域的新型SiC沟道MOSFET,通过该区域改善了其短路容限能力

标题&#xff1a;A Novel SiC Trench MOSFET with Improved Short-circuit Capability through an Integrated JFET Region 阅读日期&#xff1a;2023.7.16 研究了什么 该文章研究了一种新型SiC沟槽栅MOSFET&#xff0c;其具有集成JFET区域&#xff08;IJ-TMOS&#xff09;&a…

天天刷题-->LeetCode(最长回文子串)

个人名片&#xff1a; &#x1f405;作者简介&#xff1a;一名大二在校生&#xff0c;热爱生活&#xff0c;爱好敲码&#xff01; \ &#x1f485;个人主页 &#x1f947;&#xff1a;holy-wangle ➡系列内容&#xff1a; &#x1f5bc;️ tkinter前端窗口界面创建与优化 &…

【NLP】使用Word Embedding实现中文自动摘要

使用Word Embedding实现中文自动摘要 主要步骤中文语料库数据预处理生成词向量把文档的词转换为词向量生成各主题的关键词检查运行结果 参考资料 本文通过一个实例介绍如何使用Word Embedding实现中文自动摘要&#xff0c;使用 Gensim中的word2vec模型来生成Word Embedding。 …

揭秘乳腺癌预测黑科技:R语言和支持向量机的奇妙之旅!

一、引言 乳腺癌被认为是全球范围内最常见的癌症之一&#xff0c;对女性健康造成了重大威胁[1]。根据世界卫生组织的统计数据&#xff0c;乳腺癌是女性恶性肿瘤中的主要类型&#xff0c;并且是导致女性死亡的第二大原因[2]。这个事实凸显了乳腺癌在全球范围内的流行程度以及对公…

数据库架构演变过程

&#x1f680; ShardingSphere &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&…

ES系列--分析器

一、前言 ES进行文档分析就会涉及到分析器&#xff0c;无论是内置的分析器&#xff0c;还是自定义的分析器&#xff0c;都是由一个分词器&#xff08;tokenizers&#xff09; 、0或多个词项过滤器&#xff08;token filters&#xff09;、0或多个字符过滤器&#xff08;charact…

随机数检测(四)

随机数检测&#xff08;四&#xff09;- 累加和检测、近似熵检测、线性复杂度检测、Maurer通用统计检测、离散傅里叶检测 3.12 累加和检测方法3.13 近似熵检测方法3.14 线性复杂度检测3.15 Maurer通用统计检测3.16 离散傅里叶检测方法 如果商用密码产品认证中遇到问题&#xff…

Python应用实例(二)数据可视化(四)

数据可视化&#xff08;四&#xff09;下载数据 1.CSV文件格式1.1 分析CSV文件头‘1.2 打印文件头及其位置1.3 提取并读取数据1.4 绘制温度图表1.5 在图表中添加日期 从网上下载数据&#xff0c;并对其进行可视化。网上的数据多得令人难以置信&#xff0c;大多未经仔细检查。如…

智能车打开usb相机和激光雷达录制数据包的过程记录

首先&#xff0c;智能车的遥控器启动之后&#xff0c;要解除驻车挡位&#xff08;尾灯不亮红色才可以&#xff09;&#xff0c;然后右上角的那个拨杆是喇叭&#xff0c;对应的左上角的那个拨杆是控制挡位的&#xff0c;包括前进档&#xff0c;后退档。假如是前进&#xff0c;往…