学生校园消费数据分析与可视化

引言

校园消费数据是反映学生日常生活和消费习惯的重要指标,通过对这些数据的深入分析,可以帮助学校更好地了解学生需求,优化校园服务设施,提升学生生活质量。本文基于真实的学生校园消费数据,通过数据清洗、预处理和可视化分析,揭示学生消费行为的规律和特点。

数据获取与预处理

数据来源

本次分析的数据来源于三个CSV文件(data1.csv、data2.csv、data3.csv),包含了学生的基本信息和消费记录。

数据清洗与预处理

在进行数据分析之前,我们首先对原始数据进行了清洗和预处理,主要包括以下步骤:

  1. 读取并整合三个CSV文件中的数据
  2. 处理缺失值,对于关键信息缺失的记录进行删除或填充
  3. 处理异常值,识别并移除明显不合理的消费记录
  4. 转换数据格式,确保日期、金额等字段格式统一
  5. 将处理后的数据保存为processed_student_data.csv文件

数据结构说明

处理后的数据集包含以下主要字段:

  • CardNo:学生校园卡编号
  • PeoNo:学生学号
  • Date:消费日期和时间
  • Money:消费金额
  • Type:交易类型(消费/存款)
  • Dept:消费地点
  • Sex:性别
  • Major:专业

数据分析与可视化

1. 消费时间趋势分析

通过分析学生消费金额随时间的变化趋势,我们可以了解学生在不同时间段的消费规律。
在这里插入图片描述

分析结论:从消费时间趋势图可以看出,学生消费金额呈现出明显的周期性波动。工作日(周一至周五)的消费金额明显高于周末,这与学生的上课时间安排和校园活动规律相符。此外,4月18日出现了一个明显的消费高峰,可能与学校的特殊活动或节假日有关。

2. 消费地点分布分析

分析学生在不同地点的消费情况,可以帮助学校了解各服务设施的使用情况,优化资源配置。

在这里插入图片描述

分析结论:从消费地点分布对比图可以看出,第四食堂的总消费金额最高,达到91130.2元,而第二食堂的消费次数最多,达到31197次。这表明不同食堂在学生中的受欢迎程度和消费特点存在差异。学校可以根据这些数据调整各食堂的服务内容和运营时间,以更好地满足学生需求。

3. 男女生消费差异分析

分析男女生在消费金额上的差异,可以了解不同性别学生的消费习惯和偏好。

分析结论:从男女生消费占比饼图可以看出,女生的总消费金额略高于男生,分别为83257.76元和80083.13元,占比约为51%和49%。这一差异相对较小,说明在校园消费方面,男女生的整体消费水平较为接近。

4. 专业消费差异分析

分析不同专业学生的消费情况,可以了解各专业学生的消费特点和需求差异。

在这里插入图片描述

分析结论:从专业消费差异对比图可以看出,不同专业学生的消费金额和消费次数存在明显差异。18软件技术专业的总消费金额最高,达到11414.16元,而18连锁经营专业的消费次数最多,达到3024次。这可能与各专业的学生人数、课程安排和生活习惯等因素有关。

5. 消费金额分布分析

分析学生消费金额在不同区间的分布情况,可以了解学生的消费结构和消费水平。

在这里插入图片描述

分析结论:从消费金额分布柱状图可以看出,学生的消费主要集中在0-10元的区间内,其中0-5元区间的消费次数最多,达到6.9万次,5-10元区间的消费次数为2.5万次。这表明学生的日常消费以小额消费为主,符合校园生活的特点。

结论与建议

主要发现

  1. 学生消费金额呈现明显的周期性波动,工作日消费高于周末
  2. 不同食堂的消费金额和消费次数存在差异,第四食堂消费金额最高,第二食堂消费次数最多
  3. 男女生的消费水平较为接近,女生略高于男生
  4. 不同专业学生的消费情况存在明显差异,软件技术专业消费金额最高,连锁经营专业消费次数最多
  5. 学生消费主要集中在0-10元的小额消费区间

对学校管理的建议

  1. 根据消费时间趋势,合理安排各服务设施的运营时间,特别是在消费高峰期增加服务人员和窗口
  2. 根据各食堂的消费特点,调整菜品结构和价格策略,优化资源配置
  3. 关注不同专业学生的需求差异,提供更有针对性的服务
  4. 针对学生小额消费为主的特点,优化支付方式,提高消费便利性

代码实现

数据读取与预处理代码

import pandas as pd
import numpy as np

# 读取三个CSV文件
df1 = pd.read_csv('data1.csv')
df2 = pd.read_csv('data2.csv')
df3 = pd.read_csv('data3.csv')

# 整合数据
data = pd.concat([df1, df2, df3], ignore_index=True)

# 处理缺失值
data = data.dropna(subset=['CardNo', 'Money', 'Date'])  # 删除关键信息缺失的记录

# 处理异常值
data = data[(data['Money'] > 0) & (data['Money'] < 1000)]  # 过滤不合理的消费金额

# 转换数据格式
data['Date'] = pd.to_datetime(data['Date'])

# 保存处理后的数据
data.to_csv('processed_student_data.csv', index=False)

数据分析与可视化代码

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from datetime import datetime

# 读取处理后的数据
data = pd.read_csv('processed_student_data.csv')
data['Date'] = pd.to_datetime(data['Date'])

# 1. 消费时间趋势分析
daily_consumption = data.groupby(data['Date'].dt.date)['Money'].sum()
plt.figure(figsize=(12, 6))
plt.plot(daily_consumption.index, daily_consumption.values)
plt.title('学生校园消费时间趋势图')
plt.xlabel('日期')
plt.ylabel('消费金额(元)')
plt.xticks(rotation=45)
plt.tight_layout()
plt.savefig('消费时间趋势图.png')

# 2. 消费地点分布分析
location_consumption = data.groupby('Dept')['Money'].agg(['sum', 'count']).sort_values('sum', ascending=False).head(5)
location_consumption.plot(kind='barh', figsize=(12, 6))
plt.title('学生校园消费地点分布对比图')
plt.xlabel('金额/次数')
plt.ylabel('消费地点')
plt.tight_layout()
plt.savefig('消费地点分布对比图.png')

# 3. 男女生消费差异分析
sex_consumption = data.groupby('Sex')['Money'].sum()
plt.figure(figsize=(8, 8))
plt.pie(sex_consumption.values, labels=sex_consumption.index, autopct='%1.1f%%')
plt.title('男女生消费占比饼图')
plt.axis('equal')
plt.tight_layout()
plt.savefig('男女生消费占比饼图.png')

# 4. 专业消费差异分析
major_consumption = data.groupby('Major')['Money'].agg(['sum', 'count']).sort_values('sum', ascending=False).head(10)
major_consumption.plot(kind='barh', figsize=(12, 8))
plt.title('专业消费差异对比图')
plt.xlabel('金额/次数')
plt.ylabel('专业')
plt.tight_layout()
plt.savefig('专业消费差异对比图.png')

# 5. 消费金额分布分析
bins = [0, 5, 10, 15, 20, 30, 50, 100]
labels = ['0-5元', '5-10元', '10-15元', '15-20元', '20-30元', '30-50元', '50-100元']
data['AmountRange'] = pd.cut(data['Money'], bins=bins, labels=labels, right=False)
amount_distribution = data['AmountRange'].value_counts().sort_index()
plt.figure(figsize=(12, 6))
plt.bar(amount_distribution.index, amount_distribution.values / 10000)  # 转换为万次
plt.title('学生校园消费金额分布柱状图')
plt.xlabel('消费金额区间')
plt.ylabel('消费次数(万次)')
plt.tight_layout()
plt.savefig('消费金额分布柱状图.png')

通过以上分析和代码实现,我们对学生校园消费数据有了全面的了解。这些分析结果可以为学校的管理决策提供有力支持,帮助学校更好地满足学生需求,提升校园服务质量。

赛题数据下载:

https://download.csdn.net/download/qq_51751200/92212043

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐