最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

2023國賽數(shù)學建模思路 - 復盤:校園消費行為分析

2023-08-16 10:49 作者:數(shù)模Assistant君  | 我要投稿

0 賽題思路

(賽題出來以后第一時間在群內分享)

2023高教社杯全國大學生數(shù)學建模競賽

資料思路分享Q群:575833716

1 賽題背景

校園一卡通是集身份認證、金融消費、數(shù)據(jù)共享等多項功能于一體的信息集成系統(tǒng)。在為師生提供優(yōu)質、高效信息化服務的同時,系統(tǒng)自身也積累了大量的歷史記錄,其中蘊含著學生的消費行為以及學校食堂等各部門的運行狀況等信息。

很多高?;谛@一卡通系統(tǒng)進行“智慧校園”的相關建設,例如《揚子晚報》2016年 1月 27日的報道:《南理工給貧困生“暖心飯卡補助”》。

不用申請,不用審核,飯卡上竟然能悄悄多出幾百元……記者昨天從南京理工大學獨家了解到,南理工教育基金會正式啟動了“暖心飯卡”

項目,針對特困生的溫飽問題進行“精準援助”。

項目專門針對貧困本科生的“溫飽問題”進行援助。在學校一卡通中心,教育基金會的工作人員找來了全校一萬六千余名在校本科生 9 月中旬到 11月中旬的刷卡記錄,對所有的記錄進行了大數(shù)據(jù)分析。最終圈定了 500余名“準援助對象”。

南理工教育基金會將拿出“種子基金”100萬元作為啟動資金,根據(jù)每位貧困學生的不同情況確定具體的補助金額,然后將這些錢“悄無聲息”的打入學生的飯卡中,保證困難學生能夠吃飽飯。

——《揚子晚報》2016年 1月 27日:南理工給貧困生“暖心飯卡補助”本賽題提供國內某高校校園一卡通系統(tǒng)一個月的運行數(shù)據(jù),希望參賽者使用

數(shù)據(jù)分析和建模的方法,挖掘數(shù)據(jù)中所蘊含的信息,分析學生在校園內的學習生活行為,為改進學校服務并為相關部門的決策提供信息支持。

2 分析目標

  • 1. 分析學生的消費行為和食堂的運營狀況,為食堂運營提供建議。

  • 2. 構建學生消費細分模型,為學校判定學生的經(jīng)濟狀況提供參考意見。

3 數(shù)據(jù)說明

附件是某學校 2019年 4月 1 日至 4月 30日的一卡通數(shù)據(jù)

一共3個文件:data1.csv、data2.csv、data3.csv

在這里插入圖片描述


在這里插入圖片描述


在這里插入圖片描述

4 數(shù)據(jù)預處理

將附件中的 data1.csv、data2.csv、data3.csv三份文件加載到分析環(huán)境,對照附錄一,理解字段含義。探查數(shù)據(jù)質量并進行缺失值和異常值等方面的必要處理。將處理結果保存為“task1_1_X.csv”(如果包含多張數(shù)據(jù)表,X可從 1 開始往后編號),并在報告中描述處理過程。

import numpy as np
import pandas as pd
import os
os.chdir('/home/kesci/input/2019B1631')
data1 = pd.read_csv("data1.csv", encoding="gbk")
data2 = pd.read_csv("data2.csv", encoding="gbk")
data3 = pd.read_csv("data3.csv", encoding="gbk")
data1.head(3)

在這里插入圖片描述

data1.columns = ['序號', '校園卡號', '性別', '專業(yè)名稱', '門禁卡號']
data1.dtypes

在這里插入圖片描述

data1.to_csv('/home/kesci/work/output/2019B/task1_1_1.csv', index=False, encoding='gbk')
data2.head(3)

在這里插入圖片描述

將 data1.csv中的學生個人信息與 data2.csv中的消費記錄建立關聯(lián),處理結果保存為“task1_2_1.csv”;將 data1.csv 中的學生個人信息與data3.csv 中的門禁進出記錄建立關聯(lián),處理結果保存為“task1_2_2.csv”。

data1 = pd.read_csv("/home/kesci/work/output/2019B/task1_1_1.csv", encoding="gbk")
data2 = pd.read_csv("/home/kesci/work/output/2019B/task1_1_2.csv", encoding="gbk")
data3 = pd.read_csv("/home/kesci/work/output/2019B/task1_1_3.csv", encoding="gbk")
data1.head(3)

在這里插入圖片描述

5 數(shù)據(jù)分析

5.1 食堂就餐行為分析

繪制各食堂就餐人次的占比餅圖,分析學生早中晚餐的就餐地點是否有顯著差別,并在報告中進行描述。(提示:時間間隔非常接近的多次刷卡記錄可能為一次就餐行為)

data = pd.read_csv('/home/kesci/work/output/2019B/task1_2_1.csv', encoding='gbk')
data.head()

在這里插入圖片描述

import matplotlib as mpl
import matplotlib.pyplot as plt
# notebook嵌入圖片
%matplotlib inline
# 提高分辨率
%config InlineBackend.figure_format='retina'
from matplotlib.font_manager import FontProperties
font = FontProperties(fname="/home/kesci/work/SimHei.ttf")
import warnings
warnings.filterwarnings('ignore')canteen1 = data['消費地點'].apply(str).str.contains('第一食堂').sum()
canteen2 = data['消費地點'].apply(str).str.contains('第二食堂').sum()
canteen3 = data['消費地點'].apply(str).str.contains('第三食堂').sum()
canteen4 = data['消費地點'].apply(str).str.contains('第四食堂').sum()
canteen5 = data['消費地點'].apply(str).str.contains('第五食堂').sum()
# 繪制餅圖
canteen_name = ['食堂1', '食堂2', '食堂3', '食堂4', '食堂5']
man_count = [canteen1,canteen2,canteen3,canteen4,canteen5]
# 創(chuàng)建畫布
plt.figure(figsize=(10, 6), dpi=50)
# 繪制餅圖
plt.pie(man_count, labels=canteen_name, autopct='%1.2f%%', shadow=False, startangle=90, textprops={'fontproperties':font})
# 顯示圖例
plt.legend(prop=font)
# 添加標題
plt.title("食堂就餐人次占比餅圖", fontproperties=font)
# 餅圖保持圓形
plt.axis('equal')
# 顯示圖像
plt.show()

在這里插入圖片描述

通過食堂刷卡記錄,分別繪制工作日和非工作日食堂就餐時間曲線圖,分析食堂早中晚餐的就餐峰值,并在報告中進行描述。

在這里插入圖片描述

# 對data中消費時間數(shù)據(jù)進行時間格式轉換,轉換后可作運算,coerce將無效解析設置為NaT
data.loc[:,'消費時間'] = pd.to_datetime(data.loc[:,'消費時間'],format='%Y-%m-%d %H:%M',errors='coerce')
data.dtypes
# 創(chuàng)建一個消費星期列,根據(jù)消費時間計算出消費時間是星期幾,Monday=1, Sunday=7
data['消費星期'] = data['消費時間'].dt.dayofweek + 1
data.head(3)
# 以周一至周五作為工作日,周六日作為非工作日,拆分為兩組數(shù)據(jù)
work_day_query = data.loc[:,'消費星期'] <= 5
unwork_day_query = data.loc[:,'消費星期'] > 5

work_day_data = data.loc[work_day_query,:]
unwork_day_data = data.loc[unwork_day_query,:]
# 計算工作日消費時間對應的各時間的消費次數(shù)
work_day_times = []
for i in range(24):
? ?work_day_times.append(work_day_data['消費時間'].apply(str).str.contains(' {:02d}:'.format(i)).sum())
? ?# 以時間段作為x軸,同一時間段出現(xiàn)的次數(shù)和作為y軸,作曲線圖
x = []
for i in range(24):
? ?x.append('{:02d}:00'.format(i))
# 繪圖
plt.plot(x, work_day_times, label='工作日')
# x,y軸標簽
plt.xlabel('時間', fontproperties=font);
plt.ylabel('次數(shù)', fontproperties=font)
# 標題
plt.title('工作日消費曲線圖', fontproperties=font)
# x軸傾斜60度
plt.xticks(rotation=60)
# 顯示label
plt.legend(prop=font)
# 加網(wǎng)格
plt.grid()

在這里插入圖片描述

# 計算飛工作日消費時間對應的各時間的消費次數(shù)
unwork_day_times = []
for i in range(24):
? ?unwork_day_times.append(unwork_day_data['消費時間'].apply(str).str.contains(' {:02d}:'.format(i)).sum())
? ?# 以時間段作為x軸,同一時間段出現(xiàn)的次數(shù)和作為y軸,作曲線圖
x = []
for i in range(24):
? ?x.append('{:02d}:00'.format(i))
plt.plot(x, unwork_day_times, label='非工作日')
plt.xlabel('時間', fontproperties=font);
plt.ylabel('次數(shù)', fontproperties=font)
plt.title('非工作日消費曲線圖', fontproperties=font)
plt.xticks(rotation=60)
plt.legend(prop=font)
plt.grid()

在這里插入圖片描述

根據(jù)上述分析的結果,很容易為食堂的運營提供建議,比如錯開高峰等等。

5.2 學生消費行為分析

根據(jù)學生的整體校園消費數(shù)據(jù),計算本月人均刷卡頻次和人均消費額,并選擇 3個專業(yè),分析不同專業(yè)間不同性別學生群體的消費特點。

data = pd.read_csv('/home/kesci/work/output/2019B/task1_2_1.csv', encoding='gbk')
data.head()

在這里插入圖片描述

# 計算人均刷卡頻次(總刷卡次數(shù)/學生總人數(shù))
cost_count = data['消費時間'].count()
student_count = data['校園卡號'].value_counts(dropna=False).count()
average_cost_count = int(round(cost_count / student_count))
average_cost_count


# 計算人均消費額(總消費金額/學生總人數(shù))
cost_sum = data['消費金額'].sum()
average_cost_money = int(round(cost_sum / student_count))
average_cost_money


# 選擇消費次數(shù)最多的3個專業(yè)進行分析
data['專業(yè)名稱'].value_counts(dropna=False)

在這里插入圖片描述

# 消費次數(shù)最多的3個專業(yè)為 連鎖經(jīng)營、機械制造、會計
major1 = data['專業(yè)名稱'].apply(str).str.contains('18連鎖經(jīng)營')
major2 = data['專業(yè)名稱'].apply(str).str.contains('18機械制造')
major3 = data['專業(yè)名稱'].apply(str).str.contains('18會計')
major4 = data['專業(yè)名稱'].apply(str).str.contains('18機械制造(學徒)')

data_new = data[(major1 | major2 | major3) ^ major4]
data_new['專業(yè)名稱'].value_counts(dropna=False)


分析 每個專業(yè),不同性別 的學生消費特點
data_male = data_new[data_new['性別'] == '男']
data_female = data_new[data_new['性別'] == '女']
data_female.head()

在這里插入圖片描述

根據(jù)學生的整體校園消費行為,選擇合適的特征,構建聚類模型,分析每一類學生群體的消費特點。

data['專業(yè)名稱'].value_counts(dropna=False).count()
# 選擇特征:性別、總消費金額、總消費次數(shù)
data_1 = data[['校園卡號','性別']].drop_duplicates().reset_index(drop=True)
data_1['性別'] = data_1['性別'].astype(str).replace(({'男': 1, '女': 0}))
data_1.set_index(['校園卡號'], inplace=True)
data_2 = data.groupby('校園卡號').sum()[['消費金額']]
data_2.columns = ['總消費金額']
data_3 = data.groupby('校園卡號').count()[['消費時間']]
data_3.columns = ['總消費次數(shù)']
data_123 = ?pd.concat([data_1, data_2, data_3], axis=1)#.reset_index(drop=True)
data_123.head()

# 構建聚類模型
from sklearn.cluster import KMeans
# k為聚類類別,iteration為聚類最大循環(huán)次數(shù),data_zs為標準化后的數(shù)據(jù)
k = 3 ? ?# 分成幾類可以在此處調整
iteration = 500
data_zs = 1.0 * (data_123 - data_123.mean()) / data_123.std()
# n_jobs為并發(fā)數(shù)
model = KMeans(n_clusters=k, n_jobs=4, max_iter=iteration, random_state=1234)
model.fit(data_zs)
# r1統(tǒng)計各個類別的數(shù)目,r2找出聚類中心
r1 = pd.Series(model.labels_).value_counts()
r2 = pd.DataFrame(model.cluster_centers_)
r = pd.concat([r2,r1], axis=1)
r.columns = list(data_123.columns) + ['類別數(shù)目']


# 選出消費總額最低的500名學生的消費信息
data_500 = data.groupby('校園卡號').sum()[['消費金額']]
data_500.sort_values(by=['消費金額'],ascending=True,inplace=True,na_position='first')
data_500 = data_500.head(500)
data_500_index = data_500.index.values
data_500 = data[data['校園卡號'].isin(data_500_index)]
data_500.head(10)

在這里插入圖片描述

# 繪制餅圖
canteen_name = list(data_max_place.index)
man_count = list(data_max_place.values)
# 創(chuàng)建畫布
plt.figure(figsize=(10, 6), dpi=50)
# 繪制餅圖
plt.pie(man_count, labels=canteen_name, autopct='%1.2f%%', shadow=False, startangle=90, textprops={'fontproperties':font})
# 顯示圖例
plt.legend(prop=font)
# 添加標題
plt.title("低消費學生常消費地點占比餅圖", fontproperties=font)
# 餅圖保持圓形
plt.axis('equal')
# 顯示圖像
plt.show()

在這里插入圖片描述

建模資料

資料分享: 最強建模資料

在這里插入圖片描述


2023高教社杯全國大學生數(shù)學建模競賽

資料思路分享Q群:575833716


2023國賽數(shù)學建模思路 - 復盤:校園消費行為分析的評論 (共 條)

分享到微博請遵守國家法律
乐亭县| 崇礼县| 平舆县| 额敏县| 白沙| 建昌县| 容城县| 呼伦贝尔市| 滨海县| 黄陵县| 河南省| 格尔木市| 金坛市| 漳州市| 睢宁县| 锦屏县| 乃东县| 锡林浩特市| 温州市| 凌源市| 普兰店市| 乌拉特中旗| 谷城县| 寻乌县| 小金县| 邹平县| 安庆市| 陵水| 三原县| 仁化县| 霍城县| 漳浦县| 淮滨县| 阜南县| 玛纳斯县| 普兰县| 沙河市| 横山县| 靖边县| 师宗县| 昌宁县|