# -*- coding: utf-8 -*-
"""
Created on Mon Dec 2 19:22:54 2019
@author: lenovo
"""
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
df1=pd.read_csv('C:/Users/lenovo/.spyder-py3/大学生消费行为分析/项目实操/data1.csv',encoding='gbk')
df2=pd.read_csv('C:/Users/lenovo/.spyder-py3/大学生消费行为分析/项目实操/data2.csv',encoding='gbk')
print('表格行列值为:',df2.shape)#查看表格数据共有多少条
#———————————————————————————————————————————————————————————————————————————
######数据预处理————缺失值######
print(df2.isnull().any())#检查表格数据是否有缺失值
#———————————————————————————————————————————————————————————————————————————
######数据预处理————转换日期格式#####
print('进行转换前表的类型为:\n', df2['Date'].dtypes)
df2['Date'] = pd.to_datetime(df2['Date'])#转换日期格式
print('进行转换后表的类型为:\n', df2['Date'].dtypes)
#———————————————————————————————————————————————————————————————————————————
######数据预处理————异常值#####
df2_dec=df2.describe()#对统计字段进行描述统计
print(df2_dec)
#plt.scatter(df2['Index'], df2['Money'])#画图观察消费金额分布
#plt.show()
datetimes=df2
datetimes=datetimes.set_index('Date')#重设索引 将日期定为索引
#locs = datetimes.index.indexer_at_time('00:00:00')#提取特定时间点的消费数据
#print(locs)
start_time = '00:00:00'
end_time = '06:00:00'
locs2 = datetimes.index.indexer_between_time(start_time,
end_time,
include_start=True,
include_end=False)
df2_night=datetimes.iloc[locs2]#提取出时间位于凌晨的消费数据
print("消费时间在0点至6点的消费数据量有:",df2_night.shape)
df2_night=df2_night.reset_index()
print("凌晨时间消费的地点为:\n",df2_night['Dept'].unique())
print("凌晨时间消费的地点频次数为:\n",df2_night['Dept'].value_counts())
#提取出在食堂消费的数据
#df2_loc=df2.loc[df2['Dept']=="第一食堂"]
df2_outlier=[]
for i in range(len(df2_night)):#提取出消费地点异常的数据
word1 = "食堂"
word2="教学楼"
word3="基础课部"
if word1 in df2_night.loc[i,'Dept']:
df2_outlier.append(df2_night.loc[i,:])
if word2 in df2_night.loc[i,'Dept']:
df2_outlier.append(df2_night.loc[i,:])
if word3 in df2_night.loc[i,'Dept']:
df2_outlier.append(df2_night.loc[i,:])
df2_outlier=pd.DataFrame(df2_outlier)
print("消费地点异常的数据量有:",df2_outlier.shape)
new_df2 = df2[~ df2['Index'].isin(df2_outlier['Index'])]#在原表中删除异常数据的行
print("数据清洗完成后剩余的有效数据量为:",new_df2.shape)
new_df2.drop('TermSerNo',axis=1,inplace=True)#删除TermSerNo和conOperNo两列
new_df2.drop('conOperNo',axis=1,inplace=True)#删除TermSerNo和conOperNo两列
#———————————————————————————————————————————————————————————————————————————
#####表格合并#####
all_data = pd.merge(new_df2,df1,left_on ='CardNo',right_on = 'CardNo')
print(all_data)
#———————————————————————————————————————————————————————————————————————————
#计算刷卡的学生数目
student=len(all_data['CardNo'].unique())
print("18级学生总数为:",student)
#依照卡号进行分组,并计算均值
#student= all_data.groupby(['Major'])#根据校园卡进行分组
#人均刷卡频次=本月刷卡总数/人数
#student_month_count=all_data['CardNo'].value_counts()#学生的本月各学生刷卡频次
Times=len(all_data)#刷卡记录总数
student_month_count= Times / student#人均刷卡频次
print("整体18级学生的本月人均刷卡频次为:",student_month_count)
#人均消费=总消费金额/人数
student_spend=all_data['Money'].sum()#学生本月消费总额
student_e_money= student_spend / student#学生本月人平均消费
print("整体18级学生的本月人均消费为:",student_e_money)
#———————————————————————————————任务3.1开始—————————————————————————————————
#——————————————————————————————————————————————————————————————————————————
#专业&性别
#——————————————————————————————————————————————————————————————————————————
#专业数目
Majors=len(all_data['Major'].unique())
Majors_name=all_data['Major'].unique()
print("18级包含专业数为:",Majors)
print("18级包含的专业为:\n",Majors_name)
'''['18工业设计' '18机械制造' '18计算机应用'
'18电气自动化' '18国贸实务' '18软件技术' '18宝玉石鉴定'
'18电子商务' '18模具设计' '18连锁经营' '18旅游管理'
'18视觉传播' '18国际金融' '18会计' '18商务英语'
'18金融管理' '18审计' '18嵌入式技术' '18建筑设计'
'18皮具艺术' '18国际商务' '18计算机网络' '18工商企管'
'18市场营销' '18首饰设计' '18工程造价' '18工业工程'
'18物流管理' '18商务日语' '18建筑工程' '18艺术设计'
'18工业机器人' '18社会工作' '18汽车检测' '18市政工程'
'18酒店管理' '18产品艺术' '18机械制造(学徒)'
'18动漫设计' '18环境艺术' '18投资与理财']'''
#男女生总数
girls=all_data.loc[all_data['Sex']=='女']
boys=all_data.loc[all_data['Sex']=='男']
print("18级女生总数为:",girls)
print("18级男生总数为:",boys)
#groupby方法
Majors_grouped= all_data.groupby(['Major','Sex'])#根据专业和性别进行分组
Majors_group= all_data.groupby(['Major','Sex','Dept'])#根据专业和性别进行分组
def CardTimes(data):
students=len(data['CardNo'].unique())#计算学生总数
Times=len(data)#刷卡记录总数
s_month_count= Times / students#人均刷卡频次
#print("本月人均刷卡频次为:",student_month_count)
return s_month_count
def EPeopleSpend(data):
students=len(data['CardNo'].unique())#计算学生总数
student_spend=data['Money'].sum()#学生本月消费总额
s_e_money= student_spend / students#学生本月人平均消费
#print("整体18级学生的本月人均消费为:",student_e_money)
return s_e_money
#——————————————————————————————————————————————————————————————————————————
#各专业、不同性别学生的本月人均刷卡频次和人均消费
staff_C=Majors_grouped.apply(CardTimes)#人均刷卡频次
#staff_C

程序员张小妍
- 粉丝: 2w+
最新资源
- 该项目为一个集数据抓取与展示一体的ACM队员数据系统,基于Django、python实现。.zip
- 辅助背单词软件,基于艾宾浩斯记忆曲线(其实背啥都行)的Python重构版,增加在线查词与翻译等功能.zip
- 基于C开发的命令行输入输出流重定向与实时分析工具_支持快捷按键和文本框输入实时过滤计算分析多格式结果呈现文本提示弹窗曲线表格支持批量测试和日志抓取_用于开发调试协议分.zip
- 各种有用的web api 基于Golang, Python(tornado django scrapy gevent).zip
- 华南理工大学找到卷王,基于 Python 的综测系统数据爬虫.zip
- 湖南大学(HNU)数据库系统课程大作业 ATM系统 前端基于Python的PyQt5,后端基于MySQL.zip
- (新闻爬虫),基于python+Flask+Echarts,实现首页与更多新闻页面爬取
- 基于 Flask + Requests 的全平台音乐接口 Python 版.zip
- 基于 FFmpeg ,使用 Python 开发的批量媒体文件格式转换器。.zip
- 基于 CAI 的 OneBot Python 实现.zip
- 基于 nonebot2 开发的消息交互式 Python 解释器,依赖 docker SDK.zip
- 基于 Python 3 + Django 2 开发的用于适配手机的简单 Jenkins 构建平台.zip
- Python 语言的爬楼梯问题实现-计算爬到第 n 级台阶的方法数
- 基于 Napcat, NcatBot, JMComic-Crawler-Python 的 QQ 机器人。.zip
- 基于 Python Tornado 的博客程序 (练习).zip
- 基于 Python 3.5 + Django 2.0 开发的简单个人博客.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈


