1.项目背景
随着共享单车在全球范围内的普及,城市交通出行模式发生了巨大变化。伦敦作为国际化大都市,交通拥堵问题日益严重,共享单车作为一种绿色、环保、便捷的出行方式,逐渐成为解决交通问题的重要组成部分,然而,要实现共享单车系统的高效运营,必须深入了解用户的使用习惯和需求。本项目对伦敦共享单车数据进行了全面分析,涵盖了数据清洗、特征工程(构建新特征)、骑行高峰期分析、站点流量分析,以及通过聚类分析将800个站点划分为5类,并对每一类站点提出建议,最后通过方差分析探讨了影响共享单车流量的因素,通过这些步骤,可以识别高频使用的时间段和站点,为运营商提供优化调度和资源分配的科学依据。
2.数据说明
字段 | 说明 |
---|---|
Number | 每次出行的唯一标识符(Trip ID) |
Start Date | 出行开始的日期和时间 |
Start Station Number | 起始站的标识符 |
Start Station | 起始站的名称 |
End Date | 出行结束的日期和时间 |
End Station Number | 终点站的标识符 |
End Station | 终点站的名称 |
Bike Number | 所使用自行车的唯一标识符 |
Bike Model | 所使用自行车的型号 |
Total Duration | 出行的总时间(时分秒) |
Total Duration (ms) | 出行的总时间(毫秒) |
3.Python库导入及数据读取
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import networkx as nx
import matplotlib.colors as mcolors
import numpy as np
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.metrics import silhouette_score
import scipy.stats as stats
import warnings
warnings.filterwarnings('ignore')
from pylab import mpl
mpl.rcParams["font.sans-serif"] = ["SimHei"] # 设置显示中文字体 宋体
mpl.rcParams["axes.unicode_minus"] = False #字体更改后,会导致坐标轴中的部分字符无法正常显示,此时需要设置正常显示负号
data = pd.read_csv('D:\Desktop\商业数据分析案例\伦敦共享单车数据集\LondonBikeJourneyAug2023.csv')
4.数据预览及数据处理
# 查看数据维度
data.shape
(776527, 11)
#查看数据信息
data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 776527 entries, 0 to 776526
Data columns (total 11 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Number 776527 non-null int64
1 Start date 776527 non-null object
2 Start station number 776527 non-null int64
3 Start station 776527 non-null object
4 End date 776527 non-null object
5 End station number 776527 non-null int64
6 End station 776527 non-null object
7 Bike number 776527 non-null int64
8 Bike model 776527 non-null object
9 Total duration 776527 non-null object
10 Total duration (ms) 776527 non-null int64
dtypes: int64(5), object(6)
memory usage: 65.2+ MB
#查看各列缺失值
data.isna().sum()
Number 0
Start date 0
Start station number 0
Start station 0
End date 0
End station number 0
End station 0
Bike number 0
Bike model 0
Total duration 0
Total duration (ms) 0
dtype: int64
#查看重复值
data.duplicated().sum()
0
# 将起始日期和结束日期转换为日期时间格式
data[