共享单车数据分析:Python实现时间与气象因素可视化
1. 项目概述这个毕业设计项目聚焦于共享单车系统的数据分析与可视化通过对华盛顿地区2011-2012年的共享单车使用数据进行深入挖掘揭示了影响单车租借量的关键因素。作为一名数据分析师我认为这类项目不仅具有学术价值更能为实际运营决策提供数据支撑。项目采用了典型的数据分析流程从原始数据清洗开始到特征工程处理最后通过多种可视化手段呈现分析结果。整个过程使用了Python生态中的主流工具链包括Pandas进行数据处理Matplotlib和Seaborn进行基础可视化以及Pyecharts实现交互式图表。2. 数据准备与清洗2.1 原始数据特征解析原始数据集包含以下核心字段时间信息datetime精确到小时气象数据temp温度、atemp体感温度、humidity湿度、windspeed风速分类变量season季节、holiday节假日、workingday工作日、weather天气状况目标变量casual非注册用户租借量、registered注册用户租借量、count总租借量提示在实际项目中建议首先仔细阅读数据字典明确每个字段的业务含义和取值范围这对后续分析至关重要。2.2 数据清洗实战数据清洗是确保分析质量的关键步骤本项目主要进行了以下处理# 核心清洗代码示例 import pandas as pd from datetime import datetime # 读取原始数据 df pd.read_csv(bike_sharing.csv) # 处理分类变量 season_map {1:spring, 2:summer, 3:fall, 4:winter} weather_map {1:Good, 2:Normal, 3:Bad, 4:Very Bad} df[season] df[season].map(season_map) df[weather] df[weather].map(weather_map) # 时间特征工程 df[datetime] pd.to_datetime(df[datetime]) df[year] df[datetime].dt.year df[month] df[datetime].dt.month df[day] df[datetime].dt.day df[hour] df[datetime].dt.hour df[weekday] df[datetime].dt.weekday # 周一0周日6 # 检查缺失值 print(df.isnull().sum())清洗过程中发现几个关键点原始数据质量较好没有缺失值时间字段需要从字符串转换为datetime类型分类变量使用数字编码需要映射为可读标签通过dt访问器可以方便地提取各种时间维度特征2.3 特征相关性分析在深入可视化之前我们先通过统计方法了解变量间的关系import seaborn as sns import matplotlib.pyplot as plt # 计算相关系数矩阵 corr_matrix df[[temp,atemp,humidity,windspeed,count]].corr() # 绘制热力图 plt.figure(figsize(10,8)) sns.heatmap(corr_matrix, annotTrue, cmapcoolwarm, center0) plt.title(Feature Correlation Matrix) plt.show()分析结果显示temp和atemp与租借量(count)的相关性最高(约0.4)humidity呈现轻微负相关(-0.32)windspeed相关性最低(-0.1)3. 数据可视化与洞察3.1 时间维度分析年度趋势对比# 按年月聚合数据 monthly_trend df.groupby([year,month])[count].sum().unstack(level0) # 绘制对比折线图 plt.figure(figsize(12,6)) monthly_trend.plot(kindline, style--o, linewidth2, color[#1f77b4,#ff7f0e], figsize(12,6)) plt.title(Monthly Rental Trend: 2011 vs 2012) plt.xlabel(Month) plt.ylabel(Total Rentals) plt.grid(True, linestyle--, alpha0.7) plt.legend(titleYear) plt.show()关键发现2012年各月租借量均显著高于2011年平均增长约120%租借量呈现明显的季节性特征夏季6-8月达到峰值冬季11月-次年2月租借量明显下降小时模式分析# 按小时分析租借模式 hourly_pattern df.groupby([hour,workingday])[count].mean().unstack() plt.figure(figsize(14,6)) hourly_pattern.plot(kindline, style[-,--], linewidth2, color[#2ca02c,#d62728]) plt.title(Hourly Rental Pattern by Day Type) plt.xlabel(Hour of Day) plt.ylabel(Average Rentals) plt.xticks(range(24)) plt.grid(True, linestyle:, alpha0.5) plt.legend([Weekend/Holiday,Weekday], titleDay Type) plt.show()工作日与休息日的显著差异工作日呈现典型双峰模式早高峰(7-9点)和晚高峰(16-18点)休息日呈现单峰模式高峰出现在午后(12-16点)工作日早高峰的租借量明显高于休息日峰值3.2 气象因素影响温度与租借量关系# 温度分段分析 df[temp_bin] pd.cut(df[temp], bins10) temp_effect df.groupby(temp_bin)[count].mean() plt.figure(figsize(12,6)) temp_effect.plot(kindbar, color#17becf) plt.title(Rental Count by Temperature Range) plt.xlabel(Temperature Range (°C)) plt.ylabel(Average Rentals) plt.xticks(rotation45) plt.grid(True, axisy, linestyle--, alpha0.5) plt.show()温度影响的关键结论租借量在15-30°C区间最高低于5°C或高于35°C时租借量显著下降最适宜温度区间为20-25°C天气状况影响# 天气影响分析 weather_effect df.groupby(weather)[count].agg([mean,count]) fig, (ax1, ax2) plt.subplots(1, 2, figsize(16,6)) # 平均租借量 weather_effect[mean].plot(kindbar, axax1, color#9467bd) ax1.set_title(Average Rentals by Weather Condition) ax1.set_ylabel(Average Rentals) ax1.grid(True, axisy, linestyle--, alpha0.5) # 数据点数量 weather_effect[count].plot(kindbar, axax2, color#8c564b) ax2.set_title(Data Points Count by Weather Condition) ax2.set_ylabel(Number of Records) ax2.grid(True, axisy, linestyle--, alpha0.5) plt.tight_layout() plt.show()天气因素的影响天气越好租借量越高Good Normal BadVery Bad天气的记录很少仅占0.2%可能不具有统计意义恶劣天气下的租借量下降约30-50%3.3 用户类型差异注册用户 vs 非注册用户# 用户类型分析 user_type df.groupby(hour)[[registered,casual]].mean() plt.figure(figsize(14,6)) user_type.plot(kindline, linewidth2, color[#e377c2,#7f7f7f]) plt.title(Hourly Rental Pattern by User Type) plt.xlabel(Hour of Day) plt.ylabel(Average Rentals) plt.xticks(range(24)) plt.grid(True, linestyle:, alpha0.5) plt.legend([Registered Users,Casual Users]) plt.show()用户行为差异注册用户数量远高于非注册用户约3:1比例注册用户呈现明显的通勤特征早晚高峰突出非注册用户更多在日间使用10am-5pm工作日模式对比# 工作日与非工作日对比 workday_pattern df.groupby([workingday,hour])[[registered,casual]].mean() fig, (ax1, ax2) plt.subplots(1, 2, figsize(16,6), shareyTrue) # 工作日模式 workday_pattern.loc[1].plot(axax1, linewidth2, color[#e377c2,#7f7f7f]) ax1.set_title(Weekday Rental Pattern) ax1.set_xlabel(Hour of Day) ax1.set_ylabel(Average Rentals) ax1.grid(True, linestyle:, alpha0.5) # 非工作日模式 workday_pattern.loc[0].plot(axax2, linewidth2, color[#e377c2,#7f7f7f]) ax2.set_title(Weekend/Holiday Rental Pattern) ax2.set_xlabel(Hour of Day) ax2.grid(True, linestyle:, alpha0.5) plt.tight_layout() plt.show()工作日/休息日差异工作日注册用户主导早晚高峰明显休息日两种用户类型差异缩小非注册用户比例上升休息日下午时(12-16点)租借量高于工作日同时段4. 高级分析与模型构建4.1 特征重要性分析from sklearn.ensemble import RandomForestRegressor from sklearn.model_selection import train_test_split # 准备特征和目标变量 features df[[season,holiday,workingday,weather, temp,atemp,humidity,windspeed, year,month,day,hour,weekday]] target df[count] # 转换分类变量 features pd.get_dummies(features, columns[season,weather]) # 拆分训练测试集 X_train, X_test, y_train, y_test train_test_split( features, target, test_size0.2, random_state42) # 训练随机森林模型 rf RandomForestRegressor(n_estimators100, random_state42) rf.fit(X_train, y_train) # 特征重要性可视化 importance pd.DataFrame({ feature: features.columns, importance: rf.feature_importances_ }).sort_values(importance, ascendingFalse) plt.figure(figsize(12,6)) sns.barplot(ximportance, yfeature, dataimportance.head(10)) plt.title(Top 10 Important Features for Rental Prediction) plt.xlabel(Importance Score) plt.ylabel(Feature) plt.show()特征重要性结果显示小时(hour)是最重要的预测因子温度相关特征(temp/atemp)次之天气状况和季节也有显著影响是否为工作日(workingday)比节假日(holiday)更重要4.2 预测模型构建from sklearn.metrics import mean_squared_error, r2_score from sklearn.preprocessing import StandardScaler from sklearn.pipeline import make_pipeline from sklearn.linear_model import Ridge # 创建建模管道 model make_pipeline( StandardScaler(), Ridge(alpha1.0) ) # 训练模型 model.fit(X_train, y_train) # 评估模型 y_pred model.predict(X_test) rmse np.sqrt(mean_squared_error(y_test, y_pred)) r2 r2_score(y_test, y_pred) print(fRMSE: {rmse:.2f}) print(fR2 Score: {r2:.2f}) # 实际 vs 预测可视化 plt.figure(figsize(10,6)) plt.scatter(y_test, y_pred, alpha0.3) plt.plot([y_test.min(), y_test.max()], [y_test.min(), y_test.max()], r--) plt.xlabel(Actual Rentals) plt.ylabel(Predicted Rentals) plt.title(Actual vs Predicted Rental Count) plt.grid(True, linestyle--, alpha0.5) plt.show()模型评估结果RMSE约为50考虑到租借量范围在0-1000之间表现尚可R²约为0.65说明模型能解释约65%的变异预测值与实际值的散点图显示模型对中低租借量预测较好高值预测偏保守5. 项目总结与建议5.1 主要研究发现时间模式租借量呈现明显的季节性和小时模式工作日早晚高峰需求集中休息日午后需求较高2012年较2011年有显著增长约120%气象影响温度在15-30°C区间租借量最高晴天租借量比恶劣天气高30-50%风速超过25km/h时租借量显著下降用户差异注册用户占主导约75%注册用户呈现规律的通勤模式非注册用户更多在日间和休息日使用5.2 运营建议基于分析结果对共享单车运营提出以下建议车辆调度优化工作日早晚高峰前增加商业区和办公区车辆投放休息日增加公园和景点周边的车辆供应冬季适当减少总投放量夏季增加投放定价策略恶劣天气可提供优惠鼓励使用非高峰时段针对非注册用户推出促销活动考虑温度分段定价策略用户增长加强通勤时段的注册用户推广针对非注册用户设计周末专属套餐在温度适宜的季节加大营销力度5.3 项目扩展方向数据层面引入更多年份数据观察长期趋势整合地理信息进行空间分析加入促销活动等运营数据技术层面尝试更复杂的预测模型如XGBoost、LSTM开发实时预测系统构建动态可视化仪表板业务层面研究用户留存率与气象因素的关系分析不同站点的供需特征评估定价弹性对需求的影响

相关新闻

线束加工入门指南:从导线选型到端子压接与检验全流程

线束加工入门指南:从导线选型到端子压接与检验全流程

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/20 18:55:05 阅读更多 →
Qwen-7B医疗大模型实战:从数据清洗到RLHF全流程解析

Qwen-7B医疗大模型实战:从数据清洗到RLHF全流程解析

Qwen-7B这个底座,我前后折腾了快两个月,从数据清洗到RLHF全部跑通,中间踩过的坑比病历本还厚。这篇文章就把整套流程原原本本捋一遍,从医疗数据怎么准备、怎么构造SFT样本,到奖励模型怎么训、RLHF怎么调,全…

2026/9/21 4:15:16 阅读更多 →
AI大模型就业黄金期:岗位需求与转型指南

AI大模型就业黄金期:岗位需求与转型指南

1. 为什么说现在是AI大模型就业的黄金窗口期最近两年AI大模型技术呈现爆发式增长,从ChatGPT到文心一言,各类大模型产品如雨后春笋般涌现。根据行业调研数据显示,2023年全球AI大模型相关岗位需求同比增长超过300%,而具备相关技能的…

2026/9/21 15:15:31 阅读更多 →

最新新闻

3步搞定微课背景音乐,水利新人必备保姆级教程

3步搞定微课背景音乐,水利新人必备保姆级教程

3步搞定微课背景音乐,水利新人必备保姆级教程 刚学完Python或JS语法,对着屏幕发呆?很多水利行业的朋友转型做移动端开发时都卡在这:代码会写,但真到给微课视频加背景音乐、处理音频流时,完全不知道项目怎么搭。别慌,这篇 保姆级教程…

2026/9/22 1:22:28 阅读更多 →
画漫画人物女生避坑指南附完整示例

画漫画人物女生避坑指南附完整示例

画漫画人物女生避坑指南附完整示例 版本升级后 API 全变了,你盯着屏幕上的报错发呆,是不是觉得昨天还能跑通的代码,今天就像换了个语言?别慌,这不是你的错,是工具链迭代太快。很多刚入行的同学,包括我自己早期,都栽在【画漫画人物女生】这类生成…

2026/9/22 1:22:28 阅读更多 →
5分钟搞定ppt工作汇报,源码解析教你避开Stack Trace坑

5分钟搞定ppt工作汇报,源码解析教你避开Stack Trace坑

5分钟搞定ppt工作汇报,源码解析教你避开Stack Trace坑 报错堆满屏幕,StackTrace像天书一样滚过,你盯着那个红色的Exception根本不知道从哪下手改。别慌,这不是你代码写得太烂,而是你没搞懂底层逻辑。很多转岗的朋友在…

2026/9/22 1:22:28 阅读更多 →
5分钟搞定git安装配置完整示例 拒绝报错

5分钟搞定git安装配置完整示例 拒绝报错

5分钟搞定git安装配置完整示例 拒绝报错 刚接手新项目, git clone 命令刚敲完,终端直接吐出一长串红色的 fatal: could not read Username 和 remote: Repository not…

2026/9/22 1:22:28 阅读更多 →
提携图解原理:3个维度选对Python包管理工具

提携图解原理:3个维度选对Python包管理工具

提携图解原理:3个维度选对Python包管理工具 学会 import 语句,却卡在项目依赖地狱里?这是无数开发者的通病。你背下了 Python 语法,能写出漂亮的算法,但一搭真实项目, pip install…

2026/9/22 1:22:28 阅读更多 →
flash 源码与百度图片批量下载器对比选型

flash 源码与百度图片批量下载器对比选型

3步搞定flash源码环境,告别配置卡顿保姆级教程 配置环境就卡半天,是不是你的常态?别急着卸载重装,那是治标不治本。今天这篇保姆级教程,直接带你深入 Flash…

2026/9/22 1:21:28 阅读更多 →

日新闻

3台商务办公笔记本实测:手写实现环境配置,告别卡半天

3台商务办公笔记本实测:手写实现环境配置,告别卡半天

3台商务办公笔记本实测:手写实现环境配置,告别卡半天 配置环境就卡半天?别怪机器慢,多半是你没选对工具链。在Java、Go或Python的项目现场, 手写实现…

2026/9/22 0:00:41 阅读更多 →
剑帝加点速查手册:3分钟搞懂核心逻辑

剑帝加点速查手册:3分钟搞懂核心逻辑

剑帝加点速查手册:3分钟搞懂核心逻辑 面试被问原理答不上来,是不是常态?别慌。很多开发者对着 GitHub 开源仓库里的代码发呆,看似简单实则暗藏玄机。今天这份【剑帝加点】速查手册,直接带你拆解核心实现,把面试必考的原理讲透。…

2026/9/22 0:00:41 阅读更多 →
手写实现图片压缩网站核心:搞定WebP转换与质量调优

手写实现图片压缩网站核心:搞定WebP转换与质量调优

手写实现图片压缩网站核心:搞定WebP转换与质量调优 复制来的代码跑不通不知道怎么调?别慌,这种“复制粘贴地狱”在开发圈太常见了。尤其是做 图片压缩网站…

2026/9/22 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/21 3:13:20 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/21 2:19:36 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/21 4:51:05 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/21 15:36:51 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/21 15:36:51 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/19 23:35:34 阅读更多 →