课程成绩数据可视化分析

1.1项目完成的功能与特色

(1)功能:对2016—2018课程的平时、期中、期末三个不同的分数进行数据清洗和分析,最后以合适的柱状图、折线图、饼图等方式表示出来并在网页上渲染

(2)特色:图表能够清晰得呈现不同分数得高低,一目了然得看出最高分、最低分、平均分,观察图表的人能够迅速得获取自己所想要的信息,通过图的呈现能够很快发现自己班级的分数差距,清楚得掌握班级分数得差距。

二、各模块详细描述(名称,功能,运行截图,关键源代码)

(1):对数据的清洗

self.data=xlrd.open_workbook(filedata)

table=self.data.sheet_by_index(0)#获取2016年的表

nrows=table.nrows#获取总行数

ncols=table.ncols#获得总列数

zero=table.col_values(0)#获得第一列的值

one=table.col_values(1)

two=table.col_values(2)

three=table.col_values(3)

five=table.col_values(4)#获得第四列的值

zero.pop(0)#去掉第一行

one.pop(0)#去掉第二行

two.pop(0)#去掉第三行

three.pop(0)#去掉第四行

five.pop(0)#去掉第五行

for i in zero:

if i not in self.class_list:

self.class_list.append(i)

list1=[]

for e in range(0,len(zero)):

#print(zero1[e],five1[e])

if five[e]!=‘缺考\xa0‘:

list1.append(zero[e])

list1.append(one[e])

list1.append(two[e])

list1.append(three[e])

list1.append(five[e])

self.data2016_list1.append(list1)  #  存2016年表格得全部数据[[班级,性别,平时,期中,总评]],列表套列表

list1=[]

table=self.data.sheet_by_index(1)#获得2017年

nrows=table.nrows#获取总行数

ncols=table.ncols#获得总列数

zero1=table.col_values(0)#获得第一列的值

one1=table.col_values(1)

two1=table.col_values(2)

three1=table.col_values(3)

five1=table.col_values(4)#获得第四列的值

zero1.pop(0)#去掉第一行

one1.pop(0)#去掉第二行

two1.pop(0)#去掉第三行

three1.pop(0)#去掉第四行

five1.pop(0)#去掉第五行

for i in zero1:

if i not in self.class_list1:

self.class_list1.append(i)

for e in range(0,len(zero1)):

if five1[e]!=‘缺考\xa0‘:

list1.append(zero1[e])

list1.append(one1[e])

list1.append(two1[e])

list1.append(three1[e])

list1.append(five1[e])

self.data2017_list1.append(list1)

list1=[]

table=self.data.sheet_by_index(2)#获取2018年的表

nrows=table.nrows#获取总行数

ncols=table.ncols#获得总列数

zero2=table.col_values(0)#获得第一列的值

one2=table.col_values(1)

two2=table.col_values(2)

three2=table.col_values(3)

five2=table.col_values(4)#获得第四列的值

zero2.pop(0)#去掉第一行

one2.pop(0)#去掉第二行

two2.pop(0)#去掉第三行

three2.pop(0)#去掉第四行

five2.pop(0)#去掉第五行

for i in zero2:

if i not in self.class_list2:

self.class_list2.append(i)

for e in range(len(zero2)):

if five2[e]!=‘缺考\xa0‘:

list1.append(zero2[e])

list1.append(one2[e])

list1.append(two2[e])

list1.append(three2[e])

list1.append(five2[e])

self.data2018_list1.append(list1)

list1=[]

(2):2016年各班级平均分,柱状图

list1=[]

score_list=[]

for i in range(len(self.class_list)):

sum1=0

count=0

score=[]

for j in range(len(self.data2016_list1)):

if self.class_list[i] in self.data2016_list1[j]:

sum1=sum1+int(self.data2016_list1[j][4])

count=count+1

if count>0:

avg=int(sum1/count)

score.append(self.class_list[i])

score.append(avg)

score_list.append(score)

avg_list=[]

for i in range(len(score_list)):

avg_list.append(score_list[i][1])

bar=Bar("标题:2016年各班级平均分","副标题:柱状图")

bar.add("图注:分数(分)",self.class_list,avg_list)

bar.render(‘2016年各班级平均分.html‘)

(3):2017年各班级平均分柱状图

list1=[]

score_list2=[]

for i in range(len(self.class_list2)):

sum1=0

count=0

score2=[]

for j in range(len(self.data2018_list1)):

if self.class_list2[i] in self.data2018_list1[j]:

sum1=sum1+int(self.data2018_list1[j][4])

count=count+1

if count>0:

avg=float(sum1/count)

score2.append(self.class_list2[i])

score2.append(avg)

score_list2.append(score2)

avg_list2=[]#存放算出来的平均数

for i in range(len(score_list2)):

avg_list2.append(score_list2[i][1])

bar=Bar("标题:2018年各班级平均分","副标题:柱状图")

bar.add("图注:分数(分)",self.class_list2,avg_list2)

bar.render(‘2018年各班级平均分柱状图.html‘)

(4):不同总体平均分情况柱状图

self.sheet_list =self.data.sheet_names()#获得表名字,2016级,2017,2018三个

#print(sheet_list)

list2=[]

sum1=0

count=0

for e in self.data2016_list1:

if e:

sum1+=int(e[4])

count+=1

list2.append(int(sum1/count))

sum1=0

count=0

for e in self.data2017_list1:

if e:

sum1+=int(e[4])

count+=1

list2.append(int(sum1/count))

sum1=0

count=0

for e in self.data2018_list1:

if e:

sum1+=int(e[4])

count+=1

list2.append(int(sum1/count))

bar=Bar("标题:不同年份总体平均分情况","副标题:柱状图")

bar.add("图注:分数(分)",self.sheet_list,list2)

bar.render(‘不同总体平均分情况.html‘)

(5):2016-2018男女生平时分平均成绩折线图

line=Line(‘2016-2018男女生平时分平均成绩‘,‘折线图‘)

line.add("女生平时分平均分数(分)",self.sheet_list,avglist1,is_label_show=True)

line.add("男生平时分平均分数(分)",self.sheet_list,avglist4,is_label_show=True)

line.render(‘2016-2018男女生平时分平均成绩折线图.html‘)

(6):2016年平时、期中、期末饼状图

pie = Pie("饼状图", "2016年平时、期中、期末饼状图",title_pos=‘center‘,width=900)

#上方的colums选项取消显示,显示label标签

pie.add("2016年各个项目,courselist,avglist11 ,is_legend_show=False,is_label_show=True)

#保存图表

pie.render(‘2016年各项平均分饼状图.html‘)

(7):2016年男女生总评堆积柱状图

bar = Bar("2016年男女生总评堆积柱状图")

bar.add("男生", self.sheet_list, avglist3, is_stack=True)

bar.add(‘女生‘, self.sheet_list, avglist6, is_stack=True)

bar.render(‘2016年男女生总评堆积柱状图.html‘)

(8):2016—2018年女生平时、期中、总评成绩柱状图、显示最大值和最小值、平均分数线

data1 = [12,13,14,25,67]

data2 = [34,56,78,45,67]

labels = [‘A‘, ‘B‘, ‘C‘, ‘D‘, ‘E‘]

bar=Bar("标题:2016年女生各项平均成绩","副标题:标记和点柱状图")

bar.add(‘平时‘, self.sheet_list, avglist1, mark_point=[‘average‘])

bar.add(‘期中‘, self.sheet_list, avglist2, mark_point=[‘max‘], mark_line=[‘min‘, ‘max‘])

bar.add(‘总评‘, self.sheet_list, avglist3)

bar.render(‘2016年女生成绩标记和点柱状图.html‘)

(9):2016男生各项平均成绩玫瑰花样式饼图

pie2 = Pie("2016男生各项平均成绩玫瑰花样式饼图", title_pos=‘center‘, width=900)

pie2.add("2016男生", courselist, avglist41,is_random=True, radius=[25, 60], rosetype=‘area‘, is_legend_show=False, is_label_show=True)

pie2.show_config()

pie2.render(‘2016男生各项平均成绩玫瑰花样式饼图.html‘)

(10):2016-2018年男生各项平均成绩时间轴饼图

pie_1 = Pie("2016年男生各项平均成绩")

pie_1.add("男生", courselist, avglist41,is_label_show=True, radius=[30, 55], rosetype=‘radius‘)

pie_2 = Pie("2017年男生各项平均成绩")

pie_2.add("男生", courselist,avglist51,is_label_show=True, radius=[30, 55], rosetype=‘radius‘)

pie_3 = Pie("2018年男生各项平均成绩")

pie_3.add("男生", courselist,avglist61,is_label_show=True, radius=[30, 55], rosetype=‘radius‘)

timeline = Timeline(is_auto_play=True, timeline_bottom=0)

timeline.add(pie_1, ‘2016 年‘)

timeline.add(pie_2, ‘2017 年‘)

timeline.add(pie_3, ‘2018 年‘)

timeline.render(‘2016-2018年男生各项平均成绩时间轴饼图.html‘)

(11):网页渲染:

from flask import Flask, jsonify, render_template, request, url_for
from werkzeug.utils import redirect

app = Flask(__name__)

@app.route("/index")
def index():
    return render_template("index.html")

@app.route("/gra", methods=[‘GET‘, ‘POST‘])
def getValues():
    text = request.form.get(课程成绩)
    if text == 课程成绩1‘:
        return render_template("2016年各班级平均分.html")
    elif text==课程成绩2‘:
        return render_template("2017年各班级平均分柱状图.html")
    elif text=="课程成绩3":
        return render_template("2018年各班级平均分柱状图.html")
    elif text=="课程成绩4":
        return render_template("不同总体平均分情况.html")
    elif text=="课程成绩5":
        return render_template("2016-2018男女生平时分平均成绩折线图.html")
    elif text=="课程成绩6":
        return render_template("2016男生各项平均成绩玫瑰花样式饼图.html")
    elif text=="课程成绩7":
        return render_template("2016年各项平均分饼状图.html")
    elif text=="课程成绩8":
        return render_template("2016年女生成绩标记和点柱状图.html")
    elif text=="课程成绩9":
        return render_template("2016年男女生总评堆积柱状图.html")
    elif text=="课程成绩10":
        return render_template("2016-2018年男生各项平均成绩时间轴饼图.html")
    else:
        return "不存在"

if __name__ == ‘__main__‘:
    app.run(host=‘127.9.9.7‘, port=8888, debug=True)

三、运用到的知识

(1)运用flask框架、python语言、html5语言。

(2)Numpy:增强了Python的科学计算和数据处理能力。

(3)Matplotlab:专业画图工具

(4)Pandas:为数据的读取、数据清洗、数据快速分析提供强大的便捷。

(5)pyecharts:可将图表生成html文件,直接用于交互式的页面可视化,也可以生成Jupyter Notebook格式。将数据清晰得展示出来。

原文地址:https://www.cnblogs.com/zjl12/p/12057052.html

时间: 2024-11-13 07:54:55

课程成绩数据可视化分析的相关文章

55个最实用大数据可视化分析工具

该文转自[IT168 技术] 近年来,随着云和大数据时代的来临,数据可视化产品已经不再满足于使用传统的数据可视化工具来对数据仓库中的数据抽取.归纳并简单的展现.传统的数据可视化工具仅仅将数据加以组合,通过不同的展现方式提供给用户,用于发现数据之间的关联信息.新型的数据可视化产品必须满足互联网爆发的大数据需求,必须快速的收集.筛选.分析.归纳.展现决策者所需要的信息,并根据新增的数据进行实时更新.因此,在大数据时代,数据可视化工具必须具有以下特性: (1)实时性:数据可视化工具必须适应大数据时代数

盘点最实用的大数据可视化分析工具(1/4)

俗话说的好:工欲善其事,必先利其器!一款好的工具可以让你事半功倍,尤其是在大数据时代,更需要强有力的工具通过使数据有意义的方式实现数据可视化,还有数据的可交互性:我们还需要跨学科的团队,而不是单个数据科学家.设计师或数据分析员:我们更需要重新思考我们所知道的数据可视化,图表和图形还只能在一个或两个维度上传递信息, 那么他们怎样才能与其他维度融合到一起深入挖掘大数据呢?此时就需要倚仗大数据可视化(BDV)工具,因此,笔者收集了适合各个平台各种行业的多个图表和报表工具,这些工具中不乏有适用于NET.

55个最实用的大数据可视化分析工具

俗话说的好:工欲善其事,必先利其器!一款好的工具可以让你事半功倍,尤其是在大数据时代,更需要强有力的工具通过使数据有意义的方式实现数据可视化,还有数据的可交互性:我们还需要跨学科的团队,而不是单个数据科学家.设计师或数据分析员:我们更需要重新思考我们所知道的数据可视化,图表和图形还只能在一个或两个维度上传递信息, 那么他们怎样才能与其他维度融合到一起深入挖掘大数据呢?此时就需要倚仗大数据可视化(BDV)工具,因此,笔者收集了适合各个平台各种行业的多个图表和报表工具,这些工具中不乏有适用于NET.

大数据可视化分析平台新应用:提升企业的数字营销策略

数字化时代,催生了不少社交媒体和搜索引擎公司.无论是国内还是国外乃至全球,社交媒体的势力愈加强大,与此也产生了大量的数据,成为大数据中的一部分.企业发展到一定地步,免不了大大小小的决策,这驱使着越来越多的企业选择商业智能产品——大数据可视化分析平台来合理利用它们积累的数据基础. 如今,从Facebook到Instagram,许多社交媒体渠道现在正在淹没在大量数据中.每天,超过400万小时的视频内容上传到YouTube,而每天有43亿条消息在Facebook网上发布. 随着可用于分析的数据量继续呈

奥威Power-BI服装行业BI数据可视化分析--动销商品分析

奥威Power-BI服装行业BI数据可视化分析--动销商品分析,需求概述:(1)该分析报表是一个简单的动销产品分析,展示动销SKU的实时数据,包括价格.销量.各门店库存以及本周销售趋势(2)表格内容包括款式.款名.型号.价格.销量,并且显示该型号的图片以便定位准确:(3)柱形图为各个门店的库存数量,通过点击表格的产品型号,可以联动到柱图,看该型号在各门店的库存情况:(4)折线图为本周销售趋势,通过点击表格的产品型号,可以联动到折线图,看该型号本周的销售趋势: 原文出处:http://www.po

如何用FineReport报表进行数据可视化分析?

独立的数据毫无意义,能进行比较和分析的数据才是有价值的数据.在FineReport报表工具中,数据的录入和展示操作只是开始,之后的数据分析才是重头戏.那么在FineReport中经过怎样的配置才能进行数据分析?又怎么进行数据分析呢? 使用FineReport进行数据可视化分析非常简单,经过简单的配置,使用者只需在B/S端简单拖拽目标数据及相关维度,即可得到从不同维度分析的结果,提升数据可视化程度,帮助决策层做出准确的决策.同时降低了系统开发的定制化程度,极大地降低了系统开发者的维护成本. B/S

一周实现大数据可视化分析——敏捷BI助艾瑞咨询集团实现互联网的大数据分析

相对传统分析方法,通过敏捷BI和Hadoop的互补,艾瑞咨询集团的业务效率获得数倍的提升:线下报告交付周期从3至4周缩短至小于1周,软件交付从半年缩短至一个月. 当前,一提到大数据人们就会想Hadoop,它似乎成为大数据的"代言人".不可否认,Hadoop在集群扩展性和成本上都有巨大的优势,但是,Hadoop并不适合做实时分析系统. 因此,很多企业都会利用Hadoop实现数据存储,再通过其他工具实现对大数据的高速捕获和实时分析.这里,我们将通过艾瑞咨询集团的一个真实案例,解读一下敏捷B

新零售大数据可视化分析系统搭建大数据系统解决方案

大数据可视化分析系统是什么?最贴切的例子就是,年底来了,各大软件都出了的年度账单.他们利用大数据分析系统,对每个用户进行了全面的分析,然后用文字的方式表达出来,以此方式又做了一次成功的营销. 其实每个行业都是需要大数据分析系统,不仅仅是可以做出年度账单,更多的是分析数据,发现问题,为公司做更好的规划.尤其是在新零售行业,无论是线上还是线下的销售每天都会产生大量数据,如何将这些大数据利用起来呢. 要知道营销的本质就是利用数据提高消费者购买转化率,促进成交总额的增长.通过融合线上线下的数据,生成消费

数据可视化分析除了需要编码的Python,还有更简单的方式吗?

大数据.数据分析的兴起和火爆,也带动了数据可视化的广泛应用.说起数据分析和可视化的关系,就好比你为一堆散乱的拼图写了一份说明,告诉他这个数据是什么样子,代表什么.可以说,数据可视化虽然不是必不可少的,但却是可以加快效率,为报告锦上添花的.今天,说起数据可视化,我们就不得不谈一下数据可视化工具了.主要说到的这个工具也是最近在数据分析圈比较受追捧的一个软件--Python. 数据可视化分析除了需要编码的Python,还有更简单的方式吗?Python虽好,但是需要编程才能实现数据的可视化,编程对于用户