大家好,我是阿佑,还记得上文咱们讲了 NumPy 的核心知识点 么?
今天阿佑就将结合这些知识点,给大家实操一个常用的项目案例,让大家对 NumPy 的使用有更进一步的掌握和体会!
靓仔靓女们,准备好迎接你们的新玩具了吗?NumPy的魔法秀即将开始!阿佑将带你领略NumPy的神奇之处,从简单的数组创建到复杂的数据操作,每一个功能都像是精心设计的魔法。我们将一起学习如何使用NumPy进行高效的数据处理,让你在数据分析的舞台上大放异彩。快来加入我们,一起见证NumPy的魔法秀!
文章目录
实战案例:分析共享单车使用情况
背景介绍
在这个案例中,我们将分析一个共享单车服务的使用情况。数据集包含了2018年某个城市的共享单车租借记录,我们的目标是探索使用模式、识别高峰时段,并预测未来的租借趋势。
数据集概览
数据集包含以下字段:
timestamp
: 租借发生的时间戳user_id
: 用户的唯一标识符bike_id
: 自行车的唯一标识符start_station
: 开始租借的站点end_station
: 结束租借的站点duration
: 租借持续的时间(秒)
环境准备
首先,确保安装了NumPy和Pandas库。如果未安装,可以通过以下命令安装:
pip install numpy pandas
数据加载
我们将使用Pandas来加载数据,因为Pandas在处理表格数据时非常方便。
import pandas as pd
# 加载数据
file_path = 'bike_sharing_data.csv'
data = pd.read_csv(file_path)
假设数据已经预处理过,没有缺失值。
数据清洗
在进行数据分析之前,我们需要确保数据的准确性和完整性。
# 检查是否有缺失值
print(data.isnull().sum())
# 由于数据集已经预处理过,此处假设没有缺失值
数据探索
我们对数据进行初步探索,以了解数据的基本特征。
# 查看数据的前几行
print(data.head())
# 描述性统计
print(data.describe())
# 分析租借持续时间的分布
import matplotlib.pyplot as plt
data['duration'].hist(bins=50)
plt.xlabel('Duration (seconds)')
plt.ylabel('Frequency')
plt.title('Distribution of Bike Rental Duration')
plt.show()
数据转换
为了方便分析,我们可能需要将某些字段转换为更易处理的格式。
# 将时间戳转换为更易读的格式
data['timestamp'] = pd.to_datetime(data['timestamp'])
# 提取租借发生的小时和星期信息
data['hour'] = data['timestamp'].dt.hour
data['dayofweek'] = data['timestamp'].dt.dayofweek
分析租借模式
我们分析租借模式,以识别高峰时段和用户偏好。
# 分析每小时的租借次数
hourly_rents = data.groupby('hour').size()
# 绘制每小时的租借次数
hourly_rents.plot(kind='bar')
plt.xlabel('Hour of the Day')
plt.ylabel('Number of Rents')
plt.title('Bike Rentals by Hour of Day')
plt.show()
用户行为分析
我们进一步分析用户行为,以了解用户的租借习惯。
# 计算每个用户的租借次数
user_rent_counts = data.groupby('user_id').size()
# 绘制租借次数分布
user_rent_counts.hist(bins=50)
plt.xlabel('Number of Rents')
plt.ylabel('Number of Users')
plt.title('Distribution of User Rental Counts')
plt.show()
最后,我们尝试预测未来的租借趋势:
- 使用时间序列分析方法,如ARIMA模型,预测未来的租借次数。
- 考虑节假日、天气等因素对租借趋势的影响。
通过上述分析,我们可以得出以下结论:
- 租借高峰时段主要集中在早晚高峰时段。
- 用户的租借习惯呈现多样性,但大多数用户租借次数较少。
- 预测模型可以帮助我们更好地理解未来的租借趋势,并为共享单车服务提供决策支持。
由于篇幅限制,我们继续深入分析共享单车数据集,探索更多有趣的洞见。
站点使用情况分析
分析不同站点的租借情况,可以帮助共享单车服务提供商优化车辆分布。
# 统计每个站点的租借次数
station_counts = data['start_station'].value_counts()
# 绘制租借次数最多的前10个站点
station_counts.head(10).plot(kind='bar')
plt.xlabel('Start Station')
plt.ylabel('Rental Count')
plt.title('Top 10 Start Stations by Rental Count')
plt.show()
时间与租借关系分析
探索租借活动与时间的关系,比如工作日与周末的差异。
# 标记周末(1为周末,0为工作日)
data['is_weekend'] = data['timestamp'].dt.weekday >= 5
# 比较工作日与周末的租借次数
weekend_rents = data[data['is_weekend']]['duration'].sum()
weekday_rents = data[~data['is_weekend']]['duration'].sum()
print(f"Total weekend rentals: {weekend_rents}")
print(f"Total weekday rentals: {weekday_rents}")
天气对租借活动的影响
如果数据集中包含天气信息,可以分析天气如何影响租借活动。
# 假设数据集中有天气信息,比如温度(temperature)和降水(precipitation)
# 这里我们使用假设的列名 'temperature' 和 'precipitation'
# 分析不同天气条件下的租借次数
weather_rents = data.groupby(['temperature', 'precipitation']).size()
# 绘制不同温度下的租借次数
data['temperature'].hist(bins=20, alpha=0.5)
data[data['precipitation'] > 0]['temperature'].hist(bins=20, alpha=0.5, cumulative=False)
plt.xlabel('Temperature')
plt.ylabel('Number of Rents')
plt.title('Bike Rentals by Temperature with and without Precipitation')
plt.show()
用户忠诚度分析
分析用户的忠诚度,比如回头客的比例。
# 计算至少租借两次的用户数量
loyal_users = user_rent_counts[user_rent_counts > 1]
# 计算回头客的比例
loyal_percentage = (len(loyal_users) / len(user_rent_counts)) * 100
print(f"Loyal user percentage: {loyal_percentage:.2f}%")
预测模型构建
使用机器学习技术预测未来的租借次数。
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
# 假设我们使用租借持续时间作为目标变量
y = data['duration']
# 选择特征,这里我们使用时间信息和天气信息作为特征
X = data[['hour', 'dayofweek', 'temperature', 'precipitation']]
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 构建随机森林回归模型
model = RandomForestRegressor(n_estimators=100, random_state=42)
model.fit(X_train, y_train)
# 预测测试集
predictions = model.predict(X_test)
# 评估模型
mse = mean_squared_error(y_test, predictions)
print(f"Mean Squared Error: {mse:.2f}")
结论与建议
根据分析结果,我们可以为共享单车服务提供商提出以下建议:
- 优化高峰时段的车辆调度,特别是在租借高峰站点。
- 针对工作日和周末的不同需求,调整市场策略。
- 考虑天气因素,比如在雨天提供折扣或增加车辆供应。
- 针对回头客提供忠诚度奖励计划,以增加用户粘性。
站点使用情况分析
分析不同站点的租借情况,可以帮助共享单车服务提供商优化车辆分布。
# 统计每个站点的租借次数
station_counts = data['start_station'].value_counts()
# 绘制租借次数最多的前10个站点
station_counts.head(10).plot(kind='bar')
plt.xlabel('Start Station')
plt.ylabel('Rental Count')
plt.title('Top 10 Start Stations by Rental Count')
plt.show()
时间与租借关系分析
探索租借活动与时间的关系,比如工作日与周末的差异。
# 标记周末(1为周末,0为工作日)
data['is_weekend'] = data['timestamp'].dt.weekday >= 5
# 比较工作日与周末的租借次数
weekend_rents = data[data['is_weekend']]['duration'].sum()
weekday_rents = data[~data['is_weekend']]['duration'].sum()
print(f"Total weekend rentals: {weekend_rents}")
print(f"Total weekday rentals: {weekday_rents}")
天气对租借活动的影响
如果数据集中包含天气信息,可以分析天气如何影响租借活动。
# 假设数据集中有天气信息,比如温度(temperature)和降水(precipitation)
# 这里我们使用假设的列名 'temperature' 和 'precipitation'
# 分析不同天气条件下的租借次数
weather_rents = data.groupby(['temperature', 'precipitation']).size()
# 绘制不同温度下的租借次数
data['temperature'].hist(bins=20, alpha=0.5)
data[data['precipitation'] > 0]['temperature'].hist(bins=20, alpha=0.5, cumulative=False)
plt.xlabel('Temperature')
plt.ylabel('Number of Rents')
plt.title('Bike Rentals by Temperature with and without Precipitation')
plt.show()
用户忠诚度分析
分析用户的忠诚度,比如回头客的比例。
# 计算至少租借两次的用户数量
loyal_users = user_rent_counts[user_rent_counts > 1]
# 计算回头客的比例
loyal_percentage = (len(loyal_users) / len(user_rent_counts)) * 100
print(f"Loyal user percentage: {loyal_percentage:.2f}%")
预测模型构建
使用机器学习技术预测未来的租借次数。
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
# 假设我们使用租借持续时间作为目标变量
y = data['duration']
# 选择特征,这里我们使用时间信息和天气信息作为特征
X = data[['hour', 'dayofweek', 'temperature', 'precipitation']]
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 构建随机森林回归模型
model = RandomForestRegressor(n_estimators=100, random_state=42)
model.fit(X_train, y_train)
# 预测测试集
predictions = model.predict(X_test)
# 评估模型
mse = mean_squared_error(y_test, predictions)
print(f"Mean Squared Error: {mse:.2f}")
结论与建议
根据分析结果,我们可以为共享单车服务提供商提出以下建议:
- 优化高峰时段的车辆调度,特别是在租借高峰站点。
- 针对工作日和周末的不同需求,调整市场策略。
- 考虑天气因素,比如在雨天提供折扣或增加车辆供应。
- 针对回头客提供忠诚度奖励计划,以增加用户粘性。
后续工作
- 进一步细化预测模型,考虑更多特征和复杂的模型。
- 分析不同用户群体的租借行为,提供个性化的服务。
- 探索数据的时序特性,构建更精确的时间序列预测模型。
用户行为细分
用户行为细分可以帮助我们更好地理解不同用户群体的租借习惯。
# 根据租借次数对用户进行分组
user_segments = user_rent_counts.value_counts(bins=5, sort=True)
# 绘制用户行为细分图
user_segments.index += 1 # 添加租次数
user_segments.plot(kind='bar')
plt.xlabel('Number of Rents')
plt.ylabel('Number of Users')
plt.title('User Segmentation Based on Rental Frequency')
plt.xticks(user_segments.index, [f'1-{user_segments.index[0]}' if i==0 else f'{i-1}-{i}' if i!=len(user_segments)-1 else f'{i}-{user_segments.index[-1]}' for i in user_segments.index])
plt.show()
租借时长与距离分析
分析租借时长与租借距离的关系,可以帮助我们了解用户的出行模式。
# 假设有一个字段 'distance' 表示租借距离
# 绘制租借时长与距离的散点图
plt.scatter(data['duration'], data['distance'])
plt.xlabel('Duration (seconds)')
plt.ylabel('Distance (km)')
plt.title('Duration vs Distance of Bike Rentals')
plt.show()
# 计算相关性
correlation = data['duration'].corr(data['distance'])
print(f"Correlation between duration and distance: {correlation:.2f}")
季节性分析
分析季节性变化对租借活动的影响。
# 假设数据集中有 'month' 字段
# 统计每个月的租借次数
monthly_rents = data['timestamp'].dt.month.value_counts()
# 绘制每个月的租借次数
monthly_rents.plot(kind='bar')
plt.xlabel('Month')
plt.ylabel('Number of Rents')
plt.title('Bike Rentals by Month')
plt.show()
节假日影响分析
如果数据集中包含节假日信息,可以分析节假日对租借活动的影响。
# 假设数据集中有 'holiday' 字段,1 表示节假日,0 表示非节假日
# 比较节假日与非节假日的租借次数
holiday_rents = data[data['holiday']]['duration'].sum()
non_holiday_rents = data[~data['holiday']]['duration'].sum()
print(f"Total holiday rentals: {holiday_rents}")
print(f"Total non-holiday rentals: {non_holiday_rents}")
高级预测模型
使用更高级的机器学习模型,如XGBoost或LightGBM,来提高预测的准确性。
# 这里以XGBoost为例
import xgboost as xgb
# 构建XGBoost回归模型
model = xgb.XGBRegressor(objective='reg:squarederror', random_state=42)
model.fit(X_train, y_train)
# 预测测试集
predictions = model.predict(X_test)
# 评估模型
mse = mean_squared_error(y_test, predictions)
print(f"Mean Squared Error: {mse:.2f}")
结论与建议
根据进一步的分析,我们可以为共享单车服务提供商提出以下建议:
- 针对不同用户群体提供定制化的服务和促销活动。
- 根据租借时长与距离的相关性,优化车辆的分布和维护计划。
- 考虑季节性变化,调整市场策略和运营计划。
- 利用节假日的高需求,提供特别促销或增加车辆供应。
后续工作
- 探索更多的用户行为细分,如根据租借时间(早晚高峰)进行细分。
- 利用深度学习技术,如LSTM,来捕捉时间序列数据中的长期依赖关系。
- 结合社交媒体数据,分析用户情绪和口碑对租借活动的影响。
用户留存分析
用户留存是衡量服务成功的关键指标之一。通过分析用户留存率,我们可以了解用户对共享单车服务的忠诚度和满意度。
# 假设我们有一个字段 'first_rent_date' 记录用户第一次租借的日期
# 计算每个用户的租借天数
data['rent_days'] = (data['timestamp'] - data['first_rent_date']).dt.days
# 用户留存分析通常需要跟踪一定时间范围内用户是否继续使用服务
# 假设我们跟踪的时间范围是30天
retained_users = data[data['rent_days'] <= 30]
# 计算留存率
retention_rate = (len(retained_users) / len(data)) * 100
print(f"User retention rate: {retention_rate:.2f}%")
地理空间分析
如果数据集包含地理信息,如经纬度,我们可以进行地理空间分析,以了解不同区域的租借活动。
# 假设 'start_lat' 和 'start_lon' 分别代表开始租借时的纬度和经度
# 绘制租借热点图
from geopandas import GeoDataFrame
import matplotlib.pyplot as plt
gdf = GeoDataFrame(
data[['start_station', 'start_lat', 'start_lon']],
geometry=gdf.set_geometry(['start_lat', 'start_lon'])
)
# 绘制热点图
gdf.plot(column='duration', cmap='OrRd', legend=True)
plt.title('Bike Rental Hotspots')
plt.show()
车辆使用效率分析
分析车辆的使用效率,可以帮助共享单车服务提供商优化车辆的分布和维护。
# 计算每辆车的平均租借次数
bike_usage = data.groupby('bike_id').size()
# 绘制车辆使用频率分布
bike_usage.hist(bins=50)
plt.xlabel('Number of Rents')
plt.ylabel('Number of Bikes')
plt.title('Distribution of Bike Usage')
plt.show()
多变量分析
进行多变量分析,以了解不同因素如何共同影响租借活动。
# 假设我们有用户的年龄和性别信息
# 绘制不同用户群体的租借时长分布
for user_group, group_data in data.groupby(['gender', 'age_group']):
plt.hist(group_data['duration'], bins=50, alpha=0.5, label=f'{user_group}')
plt.xlabel('Duration (seconds)')
plt.ylabel('Frequency')
plt.legend()
plt.title('Bike Rental Duration by Gender and Age Group')
plt.show()
动态定价策略
基于时间、天气、用户需求等因素,制定动态定价策略。
# 假设我们有一个字段 'price' 表示租借价格
# 分析不同价格对租借次数的影响
price_rents = data.groupby('price').size()
# 绘制不同价格下的租借次数
price_rents.plot(kind='bar')
plt.xlabel('Price')
plt.ylabel('Number of Rents')
plt.title('Bike Rentals by Price')
plt.show()
结论与建议
根据进一步的分析,我们可以为共享单车服务提供商提出以下建议:
- 根据用户留存分析,设计用户留存计划和忠诚度奖励。
- 利用地理空间分析结果,优化车辆在热点区域的分布。
- 根据车辆使用效率,调整车辆维护和更新计划。
- 考虑多变量因素,如用户群体和价格,制定更精准的市场策略。
通过阿佑的这个案例,相信大伙们了解了如何使用NumPy和Pandas进行深入的数据分析,从数据加载到清洗、探索性分析、预测建模,每一步都为决策提供了数据支持。希望这个案例能够启发大伙们在自己的数据分析项目中应用这些技术,并进一步探索和发现数据中的洞见!
我是阿佑,一个致力于把晦涩的知识讲的有趣的中二青年,欢迎评论区留言~