关于一季青年大学习的反馈数据整理与统计(Python实现)
2020-05-16 23:31
288 查看
青年大学习的数据统计(Python实现)
工具:ANACONDA的Jupyter Lab
背景:老师给了青年大学习的后台数据的统计(是一个xlsx文件)
主要是提交的数据与后台反馈的数据有较大的出入,老师就想看看是哪些班级的人数不多。
数据准备:1,五四学习情况.csv 2,班级编号.csv
PS:建议把xlsx文件改成csv文件
import pandas as pd order = pd.read_csv('五四学习情况.csv',encoding = 'ANSI',keep_default_na=False) order.head()
keep_default_na=False
加上这个的原因:后续csv数据读取时,就不会出现nan的情况
姓名这一列的格式为:姓名+班级编号,班级编号+姓名
只不过在处理数据的过程中:也有出现不写名字的,还有加上班级名称的
这就需要额外的处理了,毕竟也不是所有人都按照你的格式来登陆的
l = [] for i in order['姓名']: if i == '': pass else: l.append(i) len(l)
输出 890
PS:这跟pycharm等软件不同,不用写print语句,也能显示结果
check = pd.read_csv('班级编号.csv',encoding = 'ANSI',keep_default_na=False) check.head()
PS:head()函数显行示数据的前五行,便于查看数据属性
l_class = [] l_id = [] for i in check['班级']: l_class.append(i) for j in check['班级编号']: l_id.append(j)
在这里插入代码片
分别提取,班级列表,编号列表,用于合成班级-编号字典
第一个注意点:每个人填写姓名+班级编号时,格式不尽相同,提取时需要注意
l_1 = [] sign = '' for i in l: for j in i: if j =='0' or j =='1' or j =='2' or j =='3' or j =='4' or j =='5' or j =='6'or j =='7'or j =='8' or j =='9': sign+=j l_1.append(sign) sign ='' l_1[0:5]显示前五个:[‘0721’, ‘0730’, ‘0721’, ‘0721’, ‘0730’] 实际上一共有890个数据,篇幅过长,只显示前五个 另外:本人算法也不是最好的算法,只是个人的一种方法,如有更好的方法,可以交流。貌似可以用Unicode试试
l_id_int = list(map(int,l_1)) l_id_int[0:5]
把每个元素变成 int 型
输出为:[721, 730, 721, 721, 730]
接下来开始统计32个班学习的人数信息
l_num = [0 for i in range(733)] #先创建一共长度为732的列表,班级编号701-732,前面的0后续再处理 #这样做也是为了正好下标对应班级编号 for k in l_id_int: if k >1000: pass if k in l_id: l_num[k]+=1 #这里的k>1000是因为在处理时发现有个人的班级编号异常,数值较大,后续 #在对l_num求和为889,只有一个出现输入异常,找到之后,手动对该班级+1 l_num[719] +=1
l1 = [] l2 = [] for i in range(701,733): l1.append(l_class[l_id.index(i)]) for j in range(701,733): l2.append(l_num[j]) dic1 = dict(zip(l1,l2)) dic1 #统计班级——人数字典
一共32个班级,总人数统计为890
sum = 0 for i in range(701,733): sum+=l_num[i] sum #输出890
l_x = [] l_y = [] for i in check['班级']: l_x.append(i) for j in check['班级编号']: l_y.append('0'+str(j)) dict2 = dict(zip(l_x,l_y)) dict2 #制作班级名称-班级编号字典
dic3 = { '0701':[], '0702':[], '0703':[], '0704':[], '0705':[], '0706':[], '0707':[], '0708':[], '0709':[], '0710':[], '0711':[], '0712':[], '0713':[], '0714':[], '0715':[], '0716':[], '0717':[], '0718':[], '0719':[], '0720':[], '0721':[], '0722':[], '0723':[], '0724':[], '0725':[], '0726':[], '0727':[], '0728':[], '0729':[], '0730':[], '0731':[], '0732':[], } #创建字典,用于装填 姓名
x = '' sig = '' for i in l: for j in i: if j =='0' or j =='1' or j =='2' or j =='3' or j =='4' or j =='5' or j =='6'or j =='7'or j =='8' or j =='9': sig+=j else: x+=j if sig in dic3.keys(): dic3[sig].append(x) x = '' sig = '' #算法与之前类似,一个用于存储编号,一个用于存储字符串,前文提到的一个同学格式#不规范,另作处理即可,如果不规范的人数太多,还需另作算法处理 dic3['0719'].append('XXX')
整理一下,创建的数据类型比较多,还是要理一理的,不然很容易脑子一片混乱。
名称 | 含义 |
---|---|
dic3 | 字典:(键值对)存储班级编号:具体人员 |
dict2 | 字典:(键值对)存储 班级名:班级编号 |
下面需要生成32个班级信息的excel表格
file_name = [] for key,value in dict2.items(): for i in range(33): file_name.append(key) break file_name[0] #先定义好路径的名称,便于迭代文件名生成对应班级的excel表格 #输出为:'16计算机科学与技术'
以下是生成xlsx文件的函数
def display(url): excelTabel= xlwt.Workbook() sheet1=excelTabel.add_sheet(url + '.xlsx',cell_overwrite_ok=True) sheet1.write(0,0,'实际学习人数') sheet1.write(0,1,dic1[url]) sheet1.write(1,0,'以下为学习人员') for i in range(len(dic3[dict2[url]])): sheet1.write(i+2,1,dic3[dict2[url]][i]) excelTabel.save(url + '.xlsx')
for i in range(0,32): display(file_name[i]) #循环打印 生成表格
效果展示
就不一一展示了,实际上确实也是32个文件
题外话:当我看到那么多excel文件时,内心是很激动的,可能第一次做这个比较耗时间(一下午吧)但是有了这些代码后,可以再进行后续整理,再需要统计时,就可以以很快的速度生成对应的文件。节省大量时间。这也只是笔者的一个小小的分享,学以致用的地方还是有很多的,做出来也是很有成就感的。与诸君共勉,谢谢!
相关文章推荐
- 用 python实现简单EXCEL数据统计
- 使用Python实现子区域数据分类统计
- 使用Python实现子区域数据分类统计
- Python实现Mysql数据统计及numpy统计函数
- 使用Python实现子区域数据分类统计
- 使用Python实现子区域数据分类统计
- python 实现excel数据的提取和整理
- 使用Python实现子区域数据分类统计
- 使用Python实现子区域数据分类统计
- 使用Python实现子区域数据分类统计
- 教师学生评分 学校要进行年终总结,需要对教师和学生的评分结果进行统计。学生的统计数据有三个,教师的统计数据有四个。请你实现一个统计系统,对输入的数据进行整理。 请你实现一个Person类表示人员,
- python实现的分析并统计nginx日志数据功能示例
- 从Apache的日志文件收集和提供统计数据(一个Python插件架构的简单实现)
- 使用Python实现子区域数据分类统计
- 使用Python实现子区域数据分类统计
- 使用Python实现子区域数据分类统计
- 使用Python实现子区域数据分类统计
- 使用Python实现子区域数据分类统计
- 使用Python实现子区域数据分类统计
- python实现爬虫统计学校BBS男女比例之数据处理(三)