パフォーマンスデータのコースのビジュアル分析

プロジェクトの1.1の機能と特長完了

(1)機能:2016から2018三つの異なるスコア通常もちろん、期間、データ分析および洗浄の終わり、適切な最終のヒストグラム、折れ線グラフ、円グラフなど、およびレンダリングされたウェブページ上に表示

(2)特徴:チャートは明らかに一目で最高スコア、最低スコア、平均スコアを見ることが、低すぎる異なるスコアを表示することができ、プレゼンテーションがすぐにマッピングすることができますを通じて1は、すぐに彼らが望む情報を入手して、チャートを観察することができます彼のクラスとの点数差を見つけ、明らかに私たちは、マスタークラスに点数差を持っていました。

第二に、各モジュールの詳細な説明(名前、機能、操作テーマ、キーソースコード)

(1):データのクリーニング

              self.data = xlrd.open_workbook(FILEDATA)

        テーブルのテーブル= self.data.sheet_by_index(0)#2016取得

        NROWS = table.nrows#行数を取得します。

        ncolsの= table.ncols#列の合計数を取得します

        ゼロ= table.col_values(0)#GET最初の列の値

        1 = table.col_values(1)

        2 = table.col_values(2)

        3 = table.col_values(3)

        5 = table.col_values(4)#GET第4列の値

        zero.pop(0)#は、最初の行を削除します

        one.pop(0)#2行目から削除します

        two.pop(0)#三行除去

        three.pop(0)#4行除去

        (0)five.pop#5番目の行を削除

        ゼロで私がのために:

            私ではないself.class_listであれば:

                self.class_list.append(I)

        LIST1 = []

        範囲のE(0、lenの(ゼロ))のために:

            #print(ZERO1 [E]、five1 [E])

            5 [E] = '不在\ XA0' もし!:

                list1.append(ゼロ[E])

                list1.append(1 [E])

                list1.append(2 [E])

                list1.append(3 [E])

                list1.append(5 [E])

            self.data2016_list1.append(リスト1)#2016フォームは、すべてのデータ[[クラス、性別、平時、期間、総合評価]]、リストセットリストを堆積させる必要があります

            LIST1 = []    

        2017年に得られた表= self.data.sheet_by_index(1)#

        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)#4番目のカラムの値を取得します

        zero1.pop(0)#は、最初の行を削除します

        one1.pop(0)#2行目から削除します

        two1.pop(0)#三行除去

        three1.pop(0)#4行除去

        (0)five1.pop#5番目の行を削除

        ZERO1で私がのために:

            私ではないself.class_list1であれば:

                self.class_list1.append(I)

        範囲のE(0、lenの(ZERO1))のために:

            [E] = '不在\ XA0' !: five1場合

                list1.append(ZERO1 [E])

                list1.append(one1 [E])

                list1.append(two1 [E])

                list1.append(three1 [E])

                list1.append(five1 [E])

            self.data2017_list1.append(リスト1)

            LIST1 = []

        表= 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)#4番目のカラムの値を取得します

        zero2.pop(0)#は、最初の行を削除します

        one2.pop(0)#2行目から削除します

        two2.pop(0)#三行除去

        three2.pop(0)#4行除去

        (0)five2.pop#5番目の行を削除

        ZERO2で私がのために:

            私ではないself.class_list2であれば:

                self.class_list2.append(I)

        範囲内の電子のために(LEN(ZERO2)):

            [E] = '不在\ XA0' !: five2場合

                list1.append(ZERO2 [E])

                list1.append(one2 [E])

                list1.append(two2 [E])

                list1.append(three2 [E])

                list1.append(five2 [E])

            self.data2018_list1.append(リスト1)

            LIST1 = []

       (2)各クラスの2016年平均、棒グラフ

                      LIST1 = []

               score_list = []

               私のための範囲内(LEN(self.class_list)):

                   SUM1 = 0

                   カウント= 0

                   スコア= []

            範囲内のJ(LEN(self.data2016_list1))のために:

                self.class_list場合は[I]でself.data2016_list1 [J]:

                    SUM1 = SUM1 + INT(self.data2016_list1 [J] [4])

                    カウント= + 1カウント

            数> 0の場合:

                平均= INT(SUM1 /回数)

            score.append(self.class_list [i])と

            score.append(平均)

            score_list.append(スコア)

         avg_list = []

        私のための範囲内(LEN(score_list)):

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

       

        バー=バー(「タイトル:各クラスの2016は平均、」「字幕:ヒストグラム」)

        bar.add( "伝説:スコア(点数)"、self.class_list、avg_list)

        bar.render( '各クラスの平均.htmlのため2016年)

 

(3)各クラスのための2017年の平均ヒストグラム

       LIST1 = []

        score_list2 = []

        私のための範囲内(LEN(self.class_list2)):

            SUM1 = 0

            カウント= 0

            score2 = []

            範囲内のJ(LEN(self.data2018_list1))のために:

                self.class_list2場合は[I]でself.data2018_list1 [J]:

                    SUM1 = SUM1 + INT(self.data2018_list1 [J] [4])

                    カウント= + 1カウント

            数> 0の場合:

                平均=フロート(SUM1 /回数)

            score2.append(self.class_list2 [i])と

            score2.append(平均)

            score_list2.append(score2)

        記憶された計算された平均のavg_list2 = []#

        iの範囲内(LEN(score_list2)):

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

        バー=バー(「タイトル:各クラスの2018年には平均的な、」「字幕:ヒストグラム」)

        bar.add( "伝説:スコア(点数)"、self.class_list2、avg_list2)

        bar.render(「各クラス.htmlのための2018年の平均ヒストグラム」)

 

       (4):異なる全体の平均ヒストグラムポイント

                self.sheet_list = self.data.sheet_names()#GETテーブル名、2016、2017,2018 3

        #print(sheet_list)

        LIST2 = []

        SUM1 = 0

        カウント= 0

        self.data2016_list1での電子のために:

            Eの場合:

                SUM1 + = INT(E [4])

                カウント+ = 1

        list2.append(int型(SUM1 /回数))

        SUM1 = 0

        カウント= 0

        self.data2017_list1での電子のために:

            Eの場合:

                SUM1 + = INT(E [4])

                カウント+ = 1

        list2.append(int型(SUM1 /回数))

        SUM1 = 0

        カウント= 0

        self.data2018_list1での電子のために:

            Eの場合:

                SUM1 + = INT(E [4])

                カウント+ = 1

        list2.append(int型(SUM1 /回数))

        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格式。将数据清晰得展示出来。

おすすめ

転載: www.cnblogs.com/zjl12/p/12057052.html