課程成績數據可視化分析

1.1項目完成的功能與特點html

(1)功能:對2016—2018課程的平時、期中、期末三個不一樣的分數進行數據清洗和分析,最後以合適的柱狀圖、折線圖、餅圖等方式表示出來並在網頁上渲染html5

(2)特點:圖表可以清晰得呈現不一樣分數得高低,一目瞭然得看出最高分、最低分、平均分,觀察圖表的人可以迅速得獲取本身所想要的信息,經過圖的呈現可以很快發現本身班級的分數差距,清楚得掌握班級分數得差距。python

2、各模塊詳細描述(名稱,功能,運行截圖,關鍵源代碼)json

(1):對數據的清洗flask

              self.data=xlrd.open_workbook(filedata)app

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

        nrows=table.nrows#獲取總行數框架

        ncols=table.ncols#得到總列數dom

        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)

 

 

3、運用到的知識

   (1)運用flask框架、python語言、html5語言。

   (2)Numpy:加強了Python的科學計算和數據處理能力。

   (3)Matplotlab:專業畫圖工具

   (4)Pandas:爲數據的讀取、數據清洗、數據快速分析提供強大的便捷。

  (5)pyecharts:可將圖表生成html文件,直接用於交互式的頁面可視化,也能夠生成Jupyter Notebook格式。將數據清晰得展現出來。

相關文章
相關標籤/搜索