学生校园消费行为分析报告
1. 引言
学生群体作为一个特殊的消费群体,其消费行为对校园经济具有重要影响。本文基于校园消费数据,通过数据分析的方法探讨学生的消费特征和规律,为校园管理和服务提供数据支持和决策依据。
本项目提供国内某高校校园一卡通系统一个月的运行数据,使用数据分析和建模的方法,挖掘数据中所蕴含的信息,分析学生在校园内的学习生活行为,为改进学校服务并为相关部门的决策提供信息支持。本次数据分析目标如下:
分析学生的消费行为和食堂的运营状况,为食堂运营提供建议。
构建学生消费细分模型,为学校判定学生的经济状况提供参考意见。
2. 数据概述
本次分析的数据主要来源于某高校学生的校园消费记录,包括消费时间、消费金额、消费类别等信息。数据集分为两个主要部分:学生基本信息和消费记录。
2.1 学生基本信息
- 学生ID表 (data1)
字段名 | 描述 |
---|---|
序号 | 学生的序号 |
校园卡号 | 每位学生的校园卡号都唯一 |
性别 | 分为“男”和“女” |
专业名称 | 如“18国际金融”等 |
2.2 消费记录
- 消费记录表 (data2)
字段名 | 描述 |
---|---|
流水号 | 消费的流水号 |
校园卡号 | 每位学生的校园卡号都唯一 |
校园卡编号 | 每位学生的校园卡编号都唯一 |
消费时间 | 格式:年月日时分 |
消费金额(元) | 单位:元 |
存储金额(元) | 单位:元 |
余额(元) | 单位:元 |
消费次数 | 累计消费的次数 |
消费类型 | 如“存款”“退款”“消费”等类型 |
消费项目的序列号 | 当次消费的序号 |
消费操作的编码 | 当次消费的编码 |
消费地点 | 如“第一食堂”等 |
3. 数据处理与分析
使用Python和相关的数据分析库对数据进行清洗、处理和分析。以下是关键步骤和代码示例。
3.1 数据加载与清洗
首先,加载数据并进行初步清洗,去除缺失值和异常值。
import pandas as pd
# 读取数据
data = pd.read_csv('student_consumption.csv')
# 数据清洗
data.dropna(inplace=True)
data = data[data['amount'] > 0]
3.2 数据概览
查看数据的基本信息和统计描述,以了解数据的总体情况。
# 数据基本信息
print(data.info())
# 数据统计描述
print(data.describe())
3.3 消费金额分布
分析学生消费金额的分布情况,绘制直方图。
import matplotlib.pyplot as plt
# 绘制消费金额分布直方图
plt.hist(data['amount'], bins=50, color='skyblue')
plt.title('消费金额分布')
plt.xlabel('消费金额')
plt.ylabel('频数')
plt.show()
3.4 消费时间分析
分析学生在一天中的消费时间分布,绘制消费时间分布图。
# 提取小时信息
data['hour'] = pd.to_datetime(data['timestamp']).dt.hour
# 绘制消费时间分布图
plt.hist(data['hour'], bins=24, color='lightgreen', rwidth=0.8)
plt.title('消费时间分布')
plt.xlabel('小时')
plt.ylabel('频数')
plt.show()
3.5 消费类别分析
分析不同消费类别的消费金额占比,绘制饼图。
# 消费类别金额占比
category_amount = data.groupby('category')['amount'].sum()
# 绘制饼图
category_amount.plot.pie(autopct='%1.1f%%', colors=['gold', 'lightcoral', 'lightskyblue', 'lightgreen'])
plt.title('消费类别金额占比')
plt.ylabel('')
plt.show()
3.6 食堂就餐行为分析
通过分析食堂消费数据,了解学生在不同食堂的消费情况,以及工作日与非工作日的就餐时间分布。
3.6.1 数据预处理
筛选数据,筛选有关食堂的数据,合并同一地点同一刷卡时间的就餐记录,并划分早中晚餐时间段。
# 筛选食堂数据
canteen_data = data[data['place'].str.contains('食堂')]
# 合并同一地点同一刷卡时间的记录
canteen_data = canteen_data.groupby(['place', 'timestamp']).agg({'amount':'sum', 'count':'sum'}).reset_index()
# 划分时间段
def time_period(hour):
if 6 <= hour < 9:
return '早餐'
elif 11 <= hour < 13:
return '午餐'
elif 17 <= hour < 20:
return '晚餐'
else:
return '其他'
canteen_data['hour'] = pd.to_datetime(canteen_data['timestamp']).dt.hour
canteen_data['period'] = canteen_data['hour'].apply(time_period)
3.6.2 就餐人次占比分析
绘制各食堂就餐人次的占比饼图,分析学生早中晚餐的就餐地点分布。
# 各食堂就餐人次占比
canteen_counts = canteen_data['place'].value_counts()
# 绘制饼图
canteen_counts.plot.pie(autopct='%1.1f%%', colors=['lightcoral', 'gold', 'lightskyblue', 'lightgreen'])
plt.title('各食堂就餐人次占比')
plt.ylabel('')
plt.show()
3.6.3 工作日与非工作日就餐时间分析
分别绘制工作日和非工作日食堂就餐时间分布曲线图。
# 划分工作日和非工作日
canteen_data['weekday'] = pd.to_datetime(canteen_data['timestamp']).dt.weekday
canteen_data['day_type'] = canteen_data['weekday'].apply(lambda x: '工作日' if x < 5 else '非工作日')
# 绘制工作日和非工作日就餐时间分布曲线图
import seaborn as sns
plt.figure(figsize=(12, 6))
sns.lineplot(data=canteen_data, x='hour', y='count', hue='day_type')
plt.title('工作日与非工作日食堂就餐时间分布')
plt.xlabel('小时')
plt.ylabel('就餐次数')
plt.show()
3.7 聚类分析
基于学生的消费行为构建聚类模型,分析不同消费群体的特点,为学校管理和服务提供参考。
3.7.1 特征提取
提取学生的消费特征,包括早餐、午餐、晚餐的平均每餐消费额和月就餐次数。
# 提取消费特征
features = canteen_data.groupby(['student_id', 'period']).agg({'amount':'mean', 'count':'sum'}).unstack().fillna(0)
features.columns = ['_'.join(col).strip() for col in features.columns.values]
3.7.2 聚类建模
对特征数据做标准化处理,并构建K-Means聚类模型。
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans
# 数据标准化
scaler = StandardScaler()
features_scaled = scaler.fit_transform(features)
# 聚类建模
kmeans = KMeans(n_clusters=3, random_state=0)
clusters = kmeans.fit_predict(features_scaled)
features['cluster'] = clusters
3.7.3 聚类结果分析
对聚类结果进行分群分析,并绘制雷达图。
import numpy as np
# 聚类结果分群分析
cluster_summary = features.groupby('cluster').mean()
# 绘制雷达图
categories = list(cluster_summary.columns)
N = len(categories)
angles = [n / float(N) * 2 * np.pi for n in range(N)]
angles += angles[:1]
fig, ax = plt.subplots(figsize=(6, 6), subplot_kw=dict(polar=True))
for i in range(len(cluster_summary)):
values = cluster_summary.iloc[i].tolist()
values += values[:1]
ax.plot(angles, values, linewidth=2, linestyle='solid', label=f'Cluster {i}')
ax.fill(angles, values, alpha=0.25)
plt.title('聚类结果雷达图')
plt.legend()
plt.show()
4. 结论
通过对学生群体的消费行为进行分析,我们得出以下结论:
- 学生的消费金额大多数集中在较低的范围内,少数高额消费拉高了平均消费水平。
- 学生的消费行为具有明显的时间规律,集中在上午和晚上的特定时段。
- 不同消费类别中,餐饮消费占比最高,其次是生活用品和娱乐消费。
- 基于聚类分析,学生的消费行为可以分为不同群体,每个群体具有不同的消费特点。
根据分析结果,我们建议校园管理和商家可以:
- 适当调整营业时间,增加在高峰时段的服务能力。
- 提供更多的优惠活动,尤其是在餐饮和娱乐方面,以吸引更多学生消费。
- 根据消费趋势,优化商品结构,提升学生消费体验。
- 针对不同消费群体,提供个性化服务,满足多样化需求。