数据可视化分析(柱状图、饼图、折线图、雷达图)

分析文件’课程成绩.xlsx’,至少要完成内容:

1)每年不同班级平均成绩情况

2)不同年份总体平均成绩情况

3)不同性别学生成绩情况,并分别用合适的图表展示出三个内容的分析结果。

导入相应的库

from functools import reduce
import xlrd
from flask import Flask, jsonify, render_template, request, url_for
from pyecharts import Line,Bar,Pie,Radar

python读取excel文件数据

excel_path="..\\class.xlsx"
    #打开文件,获取excel文件的workbook(工作簿)对象
    excel=xlrd.open_workbook(excel_path,encoding_override="utf-8")
    # 返回所有Sheet对象的list
    all_sheet=excel.sheets()
    #循环遍历每个sheet对象存储表中所有数据
    grade_list=[]
    # 将文件中数据存进grade_list
    for sheet in all_sheet:
        for each_row in range(sheet.nrows):#循环打印每一行
            # each_row="".join(str(each_row).split())
            grade_list.append(sheet.row_values(each_row))
   

python图表中文乱码

#设置中文乱码
from pylab import *
mpl.rcParams[‘font.sans-serif‘] = [‘SimHei‘]

列表数据相加求平均

    def sum_list(items):
        sum_numbers = 0
        count = 0
        for x in items:
            sum_numbers += x
            count += 1
        return int(sum_numbers / count)

查找不同年级的班级所有数据

#查找不同年级的班级所有数据
    def deffentScore(grade):
        #不同年级对应的数据
        grade_score=[]
        for grade_list_row in grade_list:
            if grade in grade_list_row[0]:
                grade_score.append(grade_list_row)
        return grade_score
    #查找不同年级的班级
    def deffentGrade(grade):
        #不同年级对应的分类
        grade_score=[]
        for grade_list_row in grade_list:
            if grade in grade_list_row[0] and grade_list_row[0] not in grade_score:
                grade_score.append(grade_list_row[0])
        return grade_score

图利用map和reduce编写一个str2float函数,把字符串转化成浮点数

利用map和reduce编写一个str2float函数,把字符串‘123.456’转换成浮点数123.456
def StrToFloat(s):
    l=s.split(‘.‘)
    return reduce(lambda x,y:int(x)+int(y)/10**len(y),l)

python移除列表空数据

#移除空数据,缺考数据,移除表格中的空格
    def removeNull(alist):
        for i in alist:
            if ‘缺考‘ in i[4] or ‘‘ in i:
                alist.remove(i)
        clist=[]
        for i in alist:
            blist=[]
            count=0
            for y in i:
                y=‘‘.join(str(y).split())
                count+=1
                if count>2 and count<6:
                    if ‘.‘in y:
                        y=StrToFloat(y)
                    else:
                        y=int(y)
                blist.append(y)
            clist.append(blist)
        return clist

flask框架使用,并从前端页面获取数据,后台处理返回页面


from flask import Flask, jsonify, render_template, request, url_for
app = Flask(__name__)
def main():
@app.route("/index")def index():    overAll()    overAllTwo()    return render_template("Base.html")
@app.route(‘/test1‘,methods=[‘POST‘])def testGet1():    sex = request.form.get(‘sex‘)    sex1(str(sex))    print("执行get1")    return render_template("Base.html")
if __name__ == ‘__main__‘:
    main()
    app.run(host=‘127.0.0.1‘, port=8080, debug=True)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>课程分析</title>
</head>
<body>
    <div style="display: flex; flex-direction: column">
        <div>
            <form action="/test" method="post">
                <input type="text" name="year" >
                <input type="submit" value="提交" onclick="change(1)">
            </form>
            <br>
            <iframe src="http://127.0.0.1:8080/yearClass"
                    width="850px" height="400px"   frameborder="1/0"
                    name="" id="iframe-a" scrolling="no"></iframe>
        </div>
        <div>
            <iframe src="http://127.0.0.1:8080/overall"
                    width="850px" height="400px"   frameborder="1/0"
                    name="" id="iframe-b" scrolling="no"></iframe>
        </div>
        <div>
            <iframe src="http://127.0.0.1:8080/overalltwo"
                    width="850px" height="400px"   frameborder="1/0"
                    name="" id="iframe-c" scrolling="no"></iframe>
        </div>
        <div>
            <form action="/test1" method="post">
                <input type="text" name="sex" >
                <input type="submit" value="提交" onclick="change(2)">
            </form>
            <br>
            <iframe src="http://127.0.0.1:8080/sex"
                    width="850px" height="400px"   frameborder="1/0"
                    name="" id="iframe-d" scrolling="no"></iframe>
        </div>
    </div>
</body>
<script>

    function change(e) {
        if(e==1){
            document.getElementById(‘iframe-a‘).contentWindow.location.reload();
        }
        else if(e==2){
            document.getElementById(‘iframe-d‘).contentWindow.location.reload();
        }
    }
</script>
</html>

1、项目采用的技术栈

flask框架

Numpy:矩阵计算与其它大多数框架的数据处理基础;

Matplotlab:专业画图工具,话说这个单词还是真是在Matlab之间插入了plot这个词形成的;

PyEcharts:是一款将python与echarts结合的强大的数据可视化工具,可以展示动态图,在线报告使用比较美观,并且展示数据方便,鼠标悬停在图上,即可显示数值、标签等。

2、系统模块列表

柱状图、饼图、折线图、雷达图

3、柱状图:每年不同班级平均成绩情况

@app.route(‘/test‘,methods=[‘POST‘])
    def testGet():
        year = request.form.get(‘year‘)
        year_score=deffentScore(year)
        year_class=deffentGrade(year)
        avg_score=differentClassesEachYear(year_class,year_score)
        #绘图
        # //设置柱状图的主标题与副标题
        bar = Bar("柱状图", "每年不同班级平均成绩情况")
        # //添加柱状图的数据及配置项
        bar.add("平均成绩", year_class, avg_score, mark_line=["average"], mark_point=["max", "min"])
        # //生成本地文件(默认为.html文件)
        bar.render(‘./templates/yearClass.html‘)
        print("执行get")
        return render_template("Base.html")

4、饼图:根据不同年份总体分析平均成绩情况

def overAll():
        year=[‘2016‘,‘2017‘,‘2018‘]
        year=[‘16‘,‘17‘,‘18‘]
        year_score=[]
        for i in year:
            list1=[]
            for grade_list_row in grade_list:
                if i in grade_list_row[0]:
                    list1.append(grade_list_row[4])
            year_score.append(sum_list(list1))
        # //设置主标题与副标题,标题设置居中,设置宽度为900
        pie = Pie("饼状图", "不同年份总体平均成绩情况",title_pos=‘center‘,width=900)
        # //加入数据,设置坐标位置为【75,50】,上方的colums选项取消显示,显示label标签
        pie.add("年份", year, year_score ,center=[50,50],is_legend_show=False,is_label_show=True)
        # //保存图表
        pie.render(‘./templates/overall.html‘)

5、折线图

def overAllTwo():
        year_score=deffentScore(‘16‘)
        year_class=deffentGrade(‘16‘)
        avg_score=differentClassesEachYear(year_class,year_score)
        year_score1=deffentScore(‘17‘)
        year_class1=deffentGrade(‘17‘)
        avg_score1=differentClassesEachYear(year_class1,year_score1)
        year_score2=deffentScore(‘18‘)
        year_class2=deffentGrade(‘18‘)
        avg_score2=differentClassesEachYear(year_class2,year_score2)
        class1=[‘班级1‘,‘班级2‘,‘班级3‘]
        #移除最后一个元素
        avg_score2.pop()
        line = Line("折线图","不同年份总体平均成绩情况")
        # //is_label_show是设置上方数据是否显示
        line.add("2016年", class1, avg_score, is_label_show=True)
        line.add("2017年", class1, avg_score1, is_label_show=True)
        line.add("2018年", class1, avg_score2, is_label_show=True)
        line.render(‘./templates/overalltwo.html‘)

6、雷达图:根据不同性别学生分析成绩情况

def sex1(sexName):
        sex_score=[]
        sex_class=[]
        score=[]
        for grade_list_row in grade_list:
            if sexName in grade_list_row[1]:
                sex_score.append(grade_list_row)
        for grade_list_row in sex_score:
            if grade_list_row[0] not in sex_class:
                sex_class.append(grade_list_row[0])
        for className in sex_class:
            list1=[]
            for grade_list_row in sex_score:
                if className==grade_list_row[0]:
                    list1.append(grade_list_row[4])
            score.append(sum_list(list1))
        score1=[]
        score1.append(score)
        print(score1,sex_class)
        radar = Radar("雷达图", "不同班级男女的平均成绩")
        schema =[(‘网络1611‘,100), (‘网络1612‘,100), (‘网络1613‘,100),
                 (‘网络1711‘,100), (‘网络1712‘,100), (‘网络1714‘,100),
                 ( ‘网络1811‘,100), (‘网络1814‘,100), (‘网络1813‘,100)]
        # //传入坐标
        radar.config(schema)
        # //一般默认为同一种颜色,这里为了便于区分,需要设置item的颜色
        radar.add("平均成绩",score1,item_color="#1C86EE")
        radar.render(‘./templates/sex.html‘)

原文地址:https://www.cnblogs.com/WT-01/p/12077895.html

时间: 2024-10-02 19:14:12

数据可视化分析(柱状图、饼图、折线图、雷达图)的相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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