我正在参加「码上掘金挑战赛」详情请看:码上掘金挑战赛来了!
希望可以再拿一个奖品! 报名参加了学校的大数据大赛,目的是用统计去分析学生在食堂吃饭的情况,我虽然菜,但是通过学习也学到了不少新知识,其中感觉收获最大的是初步学会了用python的pandas库自动批量处理excel表格。
#导入pandas头文件
import numpy as np
import pandas as pd
import os
#读取excel表格,0是第一张表单
table = pd.read_excel(r'D:\公开数据集\一卡通\一卡通.xlsx',sheet_name=0)
这个表单统计的是学校几周食堂吃饭的总记录,关键数据做了脱敏处理,我又把一些部分涂黑了,因为不想被猜出来学校。表格一共有20多万行,感觉读了快一分钟的样子才读完,不愧是大数据啊!
统计平时和周末吃饭的人数的差异。
1将整张表按照吃饭日期划分为很多小表并按顺序命名储存在新的文件夹里面。
#相同日期的整合在一起,数字根据表格行数调整
f,a,b=5,0,0
for i in range(0,21):
f+=1
a=b
t=(table['交易时间'].str.startswith('2022-03-'+str(f)))
for i in range(b,224162):
if(t[i]==True):
b+=1
t_table=table.iloc[a:b,:]
t_path = os.path.join('D:\数据集\日期\',str(f)+'.xlsx')
t_table.to_excel(t_path,sheet_name=0,index=False)
2将日期分为平时和周末两大类,分别加起来求平均值,得出结论
#数据中的日期从6号到26号
workday,weekend=0,0
num1,num2=0,0
for f in range(6, 27):
t_path = os.path.join('D:\数据集\日期', str(f) + '.xlsx')
t_table = pd.read_excel(t_path, sheet_name=0)
if (f + 1) % 7 == 0 or (f + 2) % 7 == 0:
weekend += t_table.shape[0]
num2+=1
else:
workday += t_table.shape[0]
num1+=1
aver1=workday/num1
aver2=weekend/num2
统计两个主要食堂片区的吃饭人数差异。
用list将两个片区的食堂名字包括进来,再用正则表达筛选
#例子平时(workday)时候,一个片区食堂的吃饭人数统计
list=["地点1","地点2","地点3"......]
total,num=0,0
for f in range(6,27):
t_path = os.path.join('D:\数据集\日期',str(f)+'.xlsx')
t_table=pd.read_excel(t_path,sheet_name=0)
if (f+1)%7!=0 and (f+2)%7!=0:
num+=1
t=t_table[t_table['商户名称'].isin(list)]
total+=t.shape[0]
aver=total/num
其它可以得出的有趣结论
那个学院吃饭人数多并排序
谁最能吃
print(table['单位院系'].value_counts())
print(table['学号'].value_counts())