Python Flask+Echarts实现葡萄酒质量的影响因素分析可视化

提示:本文章参考了哔哩哔哩的python课程李巍老师的 视频教程

文章目录


前言

数据分析是指用适当的统计分析方法对收集来的大量数据进行分析,将它们加以汇总、理解和消化,以提取有用信息并进行详细研究和概括总结的过程。这个过程旨在最大化地开发数据的功能,发挥数据的作用。主要目的是把隐藏在一大批看似杂乱无章的数据中的信息集中和提炼出来,找出所研究对象的内在规律。在实际应用中,数据分析可以帮助人们做出判断,以便采取适当的行动或策略。

数据分析的过程通常包括以下几个阶段:

明确分析目的与框架:确定数据分析的目标和范围,构建分析框架。

数据收集:通过各种渠道和方法收集相关数据,确保数据的准确性和完整性。

数据处理:对收集到的数据进行清洗、转换和整理,以便进行后续分析。

数据分析:运用统计分析、数据挖掘等方法对数据进行深入分析,提取有用信息。

数据展现:通过图表、图形等方式将分析结果可视化,便于理解和交流。

撰写报告:将数据分析的过程、结果和结论整理成报告,为决策提供支持。

数据分析在现代社会中具有极其重要的地位。它不仅在商业领域得到广泛应用,帮助企业制定市场策略、优化产品设计和提高运营效率;还在政府决策、科学研究、医疗健康等领域发挥着重要作用。数据分析的准确性和及时性直接影响到决策的效果和效率。

本文使用Python Flask结合ECharts来实现葡萄酒质量的影响因素分析和可视化具有多个显著的优点:

  1. 动态交互性:

    ECharts提供了丰富的交互功能,如缩放、拖拽、数据筛选等,使得用户能够动态地探索和分析数据。在葡萄酒质量分析的场景中,用户可以通过交互操作来深入了解不同因素对葡萄酒质量的具体影响。

  2. 直观易懂的视觉呈现:

    ECharts能够生成高质量的图表,包括柱状图、折线图、散点图、饼图等多种类型,这些图表能够直观地展示数据之间的关系和趋势。在葡萄酒质量分析中,通过图表可以清晰地看到哪些因素对葡萄酒质量有显著影响,以及这些因素是如何影响葡萄酒质量的。

  3. 跨平台兼容性:

    Flask是一个轻量级的Web应用框架,而ECharts是基于JavaScript的图表库,它们都具有很好的跨平台兼容性。这意味着开发出的可视化应用可以在不同的设备和浏览器上流畅运行,无论是PC端还是移动端,都能提供良好的用户体验。

  4. 易于集成和扩展:

    Flask和ECharts都提供了丰富的API和文档,使得开发者可以轻松地集成和扩展功能。在葡萄酒质量分析的场景中,可以根据实际需求添加更多的数据分析和可视化功能,如数据预测、异常检测等。

  5. 实时数据更新:

    Flask可以与数据库或其他数据源进行交互,实现实时数据的获取和更新。在葡萄酒质量分析的可视化应用中,可以实时展示最新的分析结果,帮助用户及时了解葡萄酒质量的变化情况。

  6. 提高决策效率:

    通过可视化的方式展示葡萄酒质量的影响因素,可以帮助决策者更快地理解数据背后的含义,从而做出更加准确和及时的决策。在葡萄酒生产中,这有助于优化生产工艺、提高产品质量和降低成本。

  7. 增强用户体验:

    相比于传统的数据报表或文本分析,可视化的方式更加直观和生动,能够吸引用户的注意力并提升用户体验。在葡萄酒质量分析的应用中,通过精美的图表和流畅的交互设计,可以为用户带来更好的使用体验。


一、相关技术

1.Flask

Flask 是一个非常适合初学者和经验丰富的开发者使用的 Web 框架,它简洁而强大,能够帮助你快速构建出高质量的 Web 应用。

Flask的安装:

python 复制代码
pip install Flask

Flask 的特点

轻量级:Flask 核心非常简洁,易于扩展。

灵活:你可以自由地选择数据库、模板引擎等。

WSGI 兼容:Flask 遵循 WSGI(Web Server Gateway Interface)标准,可以与多种服务器兼容。

开发便捷:内置的开发服务器和调试器让开发变得简单快捷。

社区支持:由于 Flask 的流行,其社区非常活跃,提供了大量的插件和扩展。

简单实例:

python 复制代码
from flask import Flask  
  
app = Flask(__name__)  
  
@app.route('/')  
def hello_python():  
    return 'Hello, Python!'  
  
if __name__ == '__main__':  
    app.run(debug=True)

2.Echarts

ECharts 是一款基于JavaScript的数据可视化图表库,它提供了直观、生动、可交互且可个性化定制的数据可视化图表。ECharts提供了丰富的图表类型:常规的折线图、柱状图、散点图、饼图、K线图、用于统计的盒形图、用于地理数据可视化的地图、热力图、线图、用于关系数据可视化的关系图、treemap、旭日图、多维数据可视化的平行坐标、用于BI的漏斗图、仪表盘。
链接

https://echarts.apache.org/zh/index.html

特点

直观、生动:提供丰富的图表类型和视觉效果,使数据展示更加直观、生动。

可交互:支持图表的交互操作,如数据缩放、拖拽、数据视图切换等,增强了用户体验。

可个性化定制:配置项非常灵活,用户可以自定义图表的颜色、字体、布局、提示信息等,以适应不同的设计需求和品牌风格。

跨平台兼容性:在PC端和移动端上均能良好运行,并具有良好的跨浏览器兼容性。

易于集成:可以轻松集成到各种前端项目中,支持模块化加载和按需引入,减少资源文件的大小。

3.词云

Python 中的词云(Word Cloud)是一种通过文本数据中词汇的频率大小或重要性来展示其分布的图形表示方法。词云通常用于可视化文本数据,帮助人们快速识别出文本中的关键主题或高频词汇。在 Python 中,最常用的库来生成词云是 wordcloud。
安装wordcloud库

python 复制代码
pip install wordcloud

示例:

python 复制代码
from wordcloud import WordCloud  
import matplotlib.pyplot as plt  
  
# 示例文本  
text = "Python is an amazing programming language. It is easy to learn and powerful. " \  
       "Many people use Python for data analysis, web development, and machine learning. " \  
       "Python has a large community and many libraries."  
  
# 创建词云对象  
wordcloud = WordCloud(width = 800, height = 800,  
                background_color ='white',  
                min_font_size = 10).generate(text)  
  
# 显示词云图片  
plt.figure(figsize = (8, 8), facecolor = None)  
plt.imshow(wordcloud)  
plt.axis("off")  
plt.tight_layout(pad = 0)  
  
plt.show()

词云效果展示

使用词云的目的是以视觉上吸引人的方式展示文本数据中的关键词汇或短语,以及它们的相对重要性或频率。词云通过调整词汇的大小、颜色、方向等属性,来直观地表达文本中的信息层次和焦点。词云能够迅速突出显示文本中最频繁出现的词汇,帮助用户快速理解文本的主要内容和主题。在数据分析和信息可视化领域,词云提供了一种直观的方式来呈现大量文本数据中的关键信息。它们使得数据科学家、分析师和决策者能够更容易地理解和解释数据。在报告、演示文稿或社交媒体上,词云可以用作一种吸引人的视觉元素,以增强信息传递的效果。它们能够迅速吸引观众的注意力,并有效地传达关键信息。

二、代码部分

1.5个前端页面:

首页

2.数据一览


3.可视化分析

4.多元化分析

5.影响因素简介

2.代码

项目结构:

在app.py实现携带数据的路由跳转 代码如下:

python 复制代码
# -*- codeing = utf-8 -*-
# @Time : 2023/5/2 14:56
# @Author : 小马
# @File: app.py
# @Software : PyCharm
from flask import Flask,render_template
from flask import request
import GetDataFromExcel
global d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,dd,h,Guiyi
app=Flask(__name__)
@app.route('/',methods=['GET','POST'])
def index():
    return render_template("index.html")
@app.route('/index')
def home():
    return render_template("index.html")
@app.route('/movie')
def movie():
    d=GetDataFromExcel.getdatafromexcel()
    return render_template("movie.html",list=d)


@app.route('/score')
def score():
    quality=GetDataFromExcel.getQualityfromExcel()
    # d.extend(d1,d2,d3,d4,d5,d6,d7,d8)
    return render_template("score.html",q=quality,factor=d1,dd2=d2,dd3=d3,dd4=d4,dd5=d5,dd6=d6,dd7=d7,dd8=d8,dd9=d9,dd10=d10,dd11=d11,dd=d)
#

@app.route('/team')
def team():
    return render_template("team.html")
@app.route('/word')
def word():
    outlist=GetDataFromExcel.getDataFromOutput()
    return render_template("word.html",output=outlist,heat=h,wl=wordList,GList=Guiyi)
if __name__=='__main__':
    Guiyi=GetDataFromExcel.merge()
    wordList=GetDataFromExcel.getLieFromManageGuiyi()
    d = GetDataFromExcel.getLiefromExcel()
    d1 = GetDataFromExcel.getInforfromExcel(0, 1)
    d2=GetDataFromExcel.getInforfromExcel(1,0.1)
    d3=GetDataFromExcel.getInforfromExcel(2,0.1)
    d4=GetDataFromExcel.getInforfromExcel(3,1)
    d5=GetDataFromExcel.getInforfromExcel(4,0.01)
    d6=GetDataFromExcel.getInforfromExcel(5,10)
    d7=GetDataFromExcel.getInforfromExcel(6,10)
    d8=GetDataFromExcel.getInforfromExcel(9,0.1)
    d9=GetDataFromExcel.getmidufromExcel()#密度 3: 0.98 0.99 1
    d10=GetDataFromExcel.getsuanjianfromExcel()#酸碱性 2.5 2.75 3 3.25 3.5 3.75
    d11=GetDataFromExcel.getjiujingfromExcel()#酒精 8 9 10 11 12 13
    h=GetDataFromExcel.heat()
    app.run(debug=True)

在GetDataFromExcel.py主要实现数据的处理 代码如下:

python 复制代码
# -*- codeing = utf-8 -*-
# @Time : 2023/5/2 19:51
# @Author : 小马
# @File: GetDataFromExcel.py
# @Software : PyCharm


import xlrd2
import numpy
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import scale
def getYoulisuanFromExcel():
    datalist = []
    youlisuan4=0
    youlisuan5 = 0
    youlisuan6 = 0
    youlisuan7 = 0
    youlisuan8 = 0
    youlisuan9 = 0
    youlisuan10 = 0
    data = xlrd2.open_workbook("预处理后.xlsx")
    sheet = data.sheet_by_name("Sheet1")
    for i in range(1, sheet.nrows):

        if sheet.row(i)[0].value>=4 and sheet.row(i)[0].value<=5:
            print(sheet.row(i)[0].value)
            youlisuan4=youlisuan4+1
        elif sheet.row(i)[0].value>5 and sheet.row(i)[0].value<=6:
            youlisuan5=youlisuan5+1
        elif sheet.row(i)[0].value>6 and sheet.row(i)[0].value<=7:
            youlisuan6=youlisuan6+1
        elif sheet.row(i)[0].value>7 and sheet.row(i)[0].value<=8:
            youlisuan7=youlisuan7+1
        elif sheet.row(i)[0].value>8 and sheet.row(i)[0].value<=9:
            youlisuan8=youlisuan8+1
        elif sheet.row(i)[0].value>9 and sheet.row(i)[0].value<=10:
            youlisuan9=youlisuan9+1
        elif sheet.row(i)[0].value>10:
            youlisuan10=youlisuan10+1
    return youlisuan4,youlisuan5,youlisuan6,youlisuan7,youlisuan8,youlisuan9,youlisuan10
def getYoulisuanProFromExcel():
    youlisuan1=0
    youlisuan2=0
    youlisuan3=0
    youlisuan4=0
    youlisuan5 = 0
    youlisuan6 = 0
    youlisuan7 = 0
    youlisuan8 = 0
    youlisuan9 = 0
    youlisuan10 = 0
    data = xlrd2.open_workbook("预处理后.xlsx")
    sheet = data.sheet_by_name("Sheet1")
    for i in range(1, sheet.nrows):
        if sheet.row(i)[1].value>=0.1 and sheet.row(i)[1].value<=0.2:
            youlisuan1=youlisuan1+1
        elif sheet.row(i)[1].value>0.2 and sheet.row(i)[1].value<=0.3:
            youlisuan2=youlisuan2+1
        elif sheet.row(i)[1].value >0.3 and sheet.row(i)[1].value <= 0.4:
            youlisuan3 = youlisuan3 + 1
        elif sheet.row(i)[1].value>0.4 and sheet.row(i)[1].value<=0.5:
            # print(sheet.row(i)[0].value)
            youlisuan4=youlisuan4+1
        elif sheet.row(i)[1].value>0.5 and sheet.row(i)[1].value<=0.6:
            youlisuan5=youlisuan5+1
        elif sheet.row(i)[1].value>0.6 and sheet.row(i)[1].value<=0.7:
            youlisuan6=youlisuan6+1
        elif sheet.row(i)[1].value>0.7 and sheet.row(i)[1].value<=0.8:
            youlisuan7=youlisuan7+1
        elif sheet.row(i)[1].value>0.8 and sheet.row(i)[1].value<=0.9:
            youlisuan8=youlisuan8+1
        elif sheet.row(i)[1].value>0.9 and sheet.row(i)[1].value<=1:
            youlisuan9=youlisuan9+1
        elif sheet.row(i)[1].value>1:
            youlisuan10=youlisuan10+1
    return youlisuan1,youlisuan2,youlisuan3,youlisuan4,youlisuan5,youlisuan6,youlisuan7,youlisuan8,youlisuan9,youlisuan10
def getDataFromOutput():
    datalist = []
    data = xlrd2.open_workbook("output.xlsx")
    sheet = data.sheet_by_name("Sheet1")
    for i in range(1, sheet.nrows):
        data=[]
        data.append(sheet.row(i)[0].value)
        for j in range(1,13):
            temp=sheet.row(i)[j].value
            temp=round(temp,2)
            data.append(temp)


        datalist.append(data)
    return datalist


def getdatafromexcel():
    datalist=[]
    data = xlrd2.open_workbook("预处理后.xlsx")
    sheet = data.sheet_by_name("Sheet1")
    for i in range(1, 151):
        list=[]
        list.append(i)
        list.append(sheet.row(i))
        # sheet.row(i).append(i)
        # print("----")
        # print(type(sheet.row(i)[0]))
        # print("----")
        datalist.append(list)
    return datalist

def getInfoFromManageGuiyi(m):
    #横坐标的取值范围在-4到8
    youlisuan1 = 0
    youlisuan2 = 0
    youlisuan3 = 0
    youlisuan4 = 0
    youlisuan5 = 0
    youlisuan6 = 0
    youlisuan7 = 0
    youlisuan8 = 0
    youlisuan9 = 0
    youlisuan10 = 0
    youlisuan11=0
    youlisuan12=0
    youlisuan13=0
    data = xlrd2.open_workbook("ManageGuiyi.xlsx")
    sheet = data.sheet_by_name("Sheet1")
    for i in range(1, sheet.nrows):
        if sheet.row(i)[m].value >= -4 and sheet.row(i)[m].value <= -3:
            youlisuan1 = youlisuan1 + 1
        elif sheet.row(i)[m].value > -3 and sheet.row(i)[m].value <= -2:
            youlisuan2 = youlisuan2 + 1
        elif sheet.row(i)[m].value > -2 and sheet.row(i)[m].value <= -1:
            youlisuan3 = youlisuan3 + 1
        elif sheet.row(i)[m].value > -1 and sheet.row(i)[m].value <= 0:
            # print(sheet.row(i)[0].value)
            youlisuan4 = youlisuan4 + 1
        elif sheet.row(i)[m].value > 0 and sheet.row(i)[m].value <= 1:
            youlisuan5 = youlisuan5 + 1
        elif sheet.row(i)[m].value > 1 and sheet.row(i)[m].value <= 2:
            youlisuan6 = youlisuan6 + 1
        elif sheet.row(i)[m].value > 2 and sheet.row(i)[m].value <= 3:
            youlisuan7 = youlisuan7 + 1
        elif sheet.row(i)[m].value > 3 and sheet.row(i)[m].value <= 4:
            youlisuan8 = youlisuan8 + 1
        elif sheet.row(i)[m].value > 4 and sheet.row(i)[m].value <= 5:
            youlisuan9 = youlisuan9 + 1
        elif sheet.row(i)[m].value > 5 and sheet.row(i)[m].value <= 6:
            youlisuan10 = youlisuan10 + 1
        elif sheet.row(i)[m].value > 6 and sheet.row(i)[m].value <= 7:
            youlisuan11 = youlisuan11 + 1
        elif sheet.row(i)[m].value > 7 and sheet.row(i)[m].value <= 8:
            youlisuan12 = youlisuan12 + 1
        elif sheet.row(i)[m].value > 8:
            youlisuan13 = youlisuan13 + 1
    return youlisuan1, youlisuan2, youlisuan3, youlisuan4, youlisuan5, youlisuan6, youlisuan7, youlisuan8, youlisuan9, youlisuan10,youlisuan11,youlisuan12,youlisuan13
def getInforfromExcel(m,n):
    youlisuan1 = 0
    youlisuan2 = 0
    youlisuan3 = 0
    youlisuan4 = 0
    youlisuan5 = 0
    youlisuan6 = 0
    youlisuan7 = 0
    youlisuan8 = 0
    youlisuan9 = 0
    youlisuan10 = 0
    data = xlrd2.open_workbook("预处理后.xlsx")
    sheet = data.sheet_by_name("Sheet1")
    for i in range(1, sheet.nrows):
        if sheet.row(i)[m].value>=1*n and sheet.row(i)[m].value<=2*n:
            youlisuan1=youlisuan1+1
        elif sheet.row(i)[m].value>2*n and sheet.row(i)[m].value<=3*n:
            youlisuan2=youlisuan2+1
        elif sheet.row(i)[m].value >3*n and sheet.row(i)[m].value <= 4*n:
            youlisuan3 = youlisuan3 + 1
        elif sheet.row(i)[m].value>4*n and sheet.row(i)[m].value<=5*n:
            # print(sheet.row(i)[0].value)
            youlisuan4=youlisuan4+1
        elif sheet.row(i)[m].value>5*n and sheet.row(i)[m].value<=6*n:
            youlisuan5=youlisuan5+1
        elif sheet.row(i)[m].value>6*n and sheet.row(i)[m].value<=7*n:
            youlisuan6=youlisuan6+1
        elif sheet.row(i)[m].value>7*n and sheet.row(i)[m].value<=8*n:
            youlisuan7=youlisuan7+1
        elif sheet.row(i)[m].value>8*n and sheet.row(i)[m].value<=9*n:
            youlisuan8=youlisuan8+1
        elif sheet.row(i)[m].value>9*n and sheet.row(i)[m].value<=10*n:
            youlisuan9=youlisuan9+1
        elif sheet.row(i)[m].value>10*n:
            youlisuan10=youlisuan10+1
    return youlisuan1,youlisuan2,youlisuan3,youlisuan4,youlisuan5,youlisuan6,youlisuan7,youlisuan8,youlisuan9,youlisuan10
def getsuanjianfromExcel():
    youlisuan1 = 0
    youlisuan2 = 0
    youlisuan3 = 0
    youlisuan4 = 0
    youlisuan5 = 0
    youlisuan6 = 0
    data = xlrd2.open_workbook("预处理后.xlsx")
    sheet = data.sheet_by_name("Sheet1")
    for i in range(1, sheet.nrows):
        if sheet.row(i)[8].value>=2.5 and sheet.row(i)[8].value<=2.75:
            youlisuan1=youlisuan1+1
        elif sheet.row(i)[8].value>2.75 and sheet.row(i)[8].value<=3:
            youlisuan2=youlisuan2+1
        elif sheet.row(i)[8].value >3 and sheet.row(i)[8].value<=3.25:
            youlisuan3 = youlisuan3 + 1
        elif sheet.row(i)[8].value >3.25 and sheet.row(i)[8].value<=3.5:
            youlisuan4 = youlisuan4 + 1
        elif sheet.row(i)[8].value >3.5 and sheet.row(i)[8].value<=3.75:
            youlisuan5= youlisuan5 + 1
        elif sheet.row(i)[8].value >3.75:
            youlisuan6= youlisuan6 + 1
    return youlisuan1,youlisuan2,youlisuan3,youlisuan4,youlisuan5,youlisuan6
def getjiujingfromExcel():
    youlisuan1 = 0
    youlisuan2 = 0
    youlisuan3 = 0
    youlisuan4 = 0
    youlisuan5 = 0
    youlisuan6 = 0
    data = xlrd2.open_workbook("预处理后.xlsx")
    sheet = data.sheet_by_name("Sheet1")
    for i in range(1, sheet.nrows):
        if sheet.row(i)[10].value>=8 and sheet.row(i)[10].value<=9:
            youlisuan1=youlisuan1+1
        elif sheet.row(i)[10].value>9 and sheet.row(i)[10].value<=10:
            youlisuan2=youlisuan2+1
        elif sheet.row(i)[10].value >10 and sheet.row(i)[10].value<=11:
            youlisuan3 = youlisuan3 + 1
        elif sheet.row(i)[10].value >11 and sheet.row(i)[10].value<=12:
            youlisuan4 = youlisuan4 + 1
        elif sheet.row(i)[10].value >12 and sheet.row(i)[10].value<=13:
            youlisuan5= youlisuan5 + 1
        elif sheet.row(i)[10].value >13:
            youlisuan6= youlisuan6 + 1
    return youlisuan1,youlisuan2,youlisuan3,youlisuan4,youlisuan5,youlisuan6
def getmidufromExcel():
    youlisuan1 = 0
    youlisuan2 = 0
    youlisuan3 = 0
    data = xlrd2.open_workbook("预处理后.xlsx")
    sheet = data.sheet_by_name("Sheet1")
    for i in range(1, sheet.nrows):
        if sheet.row(i)[7].value>=0.98 and sheet.row(i)[7].value<=0.99:
            youlisuan1=youlisuan1+1
        elif sheet.row(i)[7].value>0.99 and sheet.row(i)[7].value<=1:
            youlisuan2=youlisuan2+1
        elif sheet.row(i)[7].value >1:
            youlisuan3 = youlisuan3 + 1

    return youlisuan1,youlisuan2,youlisuan3
#获取质量的评分
def getQualityfromExcel():
    data = xlrd2.open_workbook("预处理后.xlsx")
    sheet = data.sheet_by_name("Sheet1")
    d3=0
    d4=0
    d5=0
    d6=0
    d7=0
    d8=0
    d9=0
    for i in range(1,sheet.nrows):
        if sheet.row(i)[11].value==4:
            d4=d4+1
        elif sheet.row(i)[11].value==5:
            d5=d5+1
        elif sheet.row(i)[11].value==6:
            d6=d6+1
        elif sheet.row(i)[11].value==7:
            d7=d7+1
        elif sheet.row(i)[11].value==8:
            d8=d8+1
        elif sheet.row(i)[11].value==9:
            d9=d9+1
        elif sheet.row(i)[11].value==3:
            d3=d3+1
    return d3,d4,d5,d6,d7,d8,d9,d3+d4,d5+d6+d7,d8+d9
# def getGradefromExcel():
#     data = xlrd2.open_workbook("预处理后.xlsx")
#     sheet = data.sheet_by_name("Sheet1")
#     dy = 0
#     dl = 0
#     dc = 0
#     for i in range(1,sheet.nrows):
#         if sheet.row(i)[11].value<5:
#             dc=dc+1
#         elif sheet.row(i)[11].value>=5 and sheet.row(i)[11].value<=7:
#             dl=dl+1
def getInformationFromOutput():
    data = xlrd2.open_workbook("output.xlsx")
    sheet = data.sheet_by_name("Sheet1")
    list=[]
    for i in range(1,sheet.nrows):

        list.append(sheet.row(i))
    return list
def getLieFromManageGuiyi():
    data = xlrd2.open_workbook("ManageGuiyi.xlsx")
    sheet = data.sheet_by_name("Sheet1")
    L = [[]]
    for i in range(0, 12):
        list = []
        for j in range(1, sheet.nrows):
            list.append(sheet.row(j)[i].value)
        L.append(list)
    return L
def getLiefromExcel():
    data = xlrd2.open_workbook("预处理后.xlsx")
    sheet = data.sheet_by_name("Sheet1")
    L=[[]]
    for i in range(0, 12):
        list = []
        for j in range(1, sheet.nrows):
            list.append(sheet.row(j)[i].value)
        L.append(list)
    return L
#用pandas函数对数据进行处理
# 将数据表中的信息导入到表格当中
# df = pd.read_excel('预处理后.xlsx')
# a=df.describe()
# a.to_excel('output.xlsx', index=True)
# print(type(a))

def Transform():
    df = pd.read_excel('预处理后.xlsx')
    data_scaled = scale(df)
    data = numpy.array(data_scaled)
    df = pd.DataFrame(data=data[0:, 0:],
                      columns=['非挥发性酸','挥发性酸','柠檬酸','剩余糖分','氯化物','游离二氧化碳','总二氧化碳','密度','酸碱性','硫酸盐','酒精','质量'
                               ])
    df.to_excel('ManageGuiyi.xlsx', index=False)







#数据归一化处理
def Guiyi():
    df = pd.read_excel('预处理后.xlsx')
    data_scaled = scale(df)
    data_df_scaled=pd.DataFrame(data_scaled)
    corr_df=data_df_scaled.corr()
    return corr_df
def GuiyiToExcel():
    d=Guiyi()
    d.to_excel('Guiyi.xlsx', index=False)


def heat():
    d = Guiyi()
    list = [[]]
    for i in range(0, 12):
        for j in range(0, 12):
            t = round(d[i][j], 3)
            a = []
            a.append(i)
            a.append(j)
            a.append(t)
            list.append(a)
    return list


def merge():
    list = []
    for i in range(0, 11):
        d = getInfoFromManageGuiyi(i)
        list.append(d)
    return list



if __name__=='__main__':
    d=merge()
    print(d[0][0])

前端页面实现数据,以及图表的渲染 以index.html为例:

javascript 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta content="width=device-width, initial-scale=1.0" name="viewport">
  <title>葡萄酒质量的影响因素分析</title>
  <meta content="" name="descriptison">
  <meta content="" name="keywords">
  <!-- Favicons -->
  <link href="/img/favicon.png" rel="icon">
  <link href="static/assets/img/apple-touch-icon.png" rel="apple-touch-icon">
  <!-- Google Fonts -->
  <link href="https://fonts.googleapis.com/css?family=Open+Sans:300,300i,400,400i,600,600i,700,700i|Raleway:300,300i,400,400i,600,600i,700,700i,900" rel="stylesheet">
  <!-- Vendor CSS Files -->
  <link href="static/assets/vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">
  <link href="static/assets/vendor/icofont/icofont.min.css" rel="stylesheet">
  <link href="static/assets/vendor/boxicons/css/boxicons.min.css" rel="stylesheet">
  <link href="static/assets/vendor/animate.css/animate.min.css" rel="stylesheet">
  <link href="static/assets/vendor/venobox/venobox.css" rel="stylesheet">
  <link href="static/assets/vendor/aos/aos.css" rel="stylesheet">
  <!-- Template Main CSS File -->
  <link href="static/assets/css/style.css" rel="stylesheet">
  <link rel="stylesheet" href="static/assets/css/iconfont.css">
</head>
<body>
  <!-- ======= Header ======= -->
  <header id="header">
    <div class="container">
      <div class="logo float-left">
        <h1 class="text-light"><a href="index.html"><span>No.421</span></a></h1>
        <!-- Uncomment below if you prefer to use an image logo -->
        <!-- <a href="temp.html"><img src="static/assets/img/logo.png" alt="" class="img-fluid"></a>-->
      </div>
      <nav class="nav-menu float-right d-none d-lg-block">
        <ul>
          <li class="active"><a href="/index">首页 <i class="la la-angle-down"></i></a></li>
          <li><a href="/movie">数据一览</a></li>r
          <li><a href="/score">可视化分析</a></li>
          <li><a href="/word">多元化分析</a></li>
          <li><a href="/team">影响因素简介</a></li>
        </ul>
      </nav><!-- .nav-menu -->
    </div>
  </header><!-- End Header -->
    <!-- ======= Our Team Section ======= -->
    <section id="team" class="team">
      <div class="container">
        <div class="section-title">
          <h2>葡萄酒质量的影响因素分析</h2>
          <p>应用Flask框架、Echarts、WordCloud等技术实现</p>
        </div>
    <!-- ======= Counts Section ======= -->
    <section class="counts section-bg">
      <div class="container">
        <div class="row">
          <div class="col-lg-3 col-md-6 text-center" >
            <a href="/movie">
            <div class="count-box">
              <i class="iconfont icon-gongneng" style="color: #46d1ff;"></i>
              <span data-toggle="counter-up">150</span>
              <p></p>数据一览</p>
            </div>
              </a>
          </div>
          <div class="col-lg-3 col-md-6 text-center"  data-aos-delay="200">
            <a href="/score">
            <div class="count-box">
              <i class="iconfont icon-shuju" style="color: #ffb459;"></i>
              <span data-toggle="counter-up">1</span>
              <p>可视化分析</p>
            </div>
            </a>
          </div>
          <div class="col-lg-3 col-md-6 text-center"  data-aos-delay="400">
            <a href="/word">
            <div class="count-box">
<!--<div class="iconfont icon-tubiao"></div> icofont-live-support" style="color: #46d1ff;"-->
              <i class="iconfont icon-jilu" style="color: #c042ff;"></i>
              <span data-toggle="counter-up">3961</span>
              <p>多元化分析</p>
            </div>
            </a>
          </div>
          <div class="col-lg-3 col-md-6 text-center"  data-aos-delay="600">
            <a href="/team">
            <div class="count-box">
<!--              <i class="icofont-users-alt-5" style="color: #ffb459;"></i>-->
              <i class="iconfont icon-guanyu" style="color: #F7F709;"></i>
              <span data-toggle="counter-up">11</span>
              <p>影响因素</p>
            </div>
              </a>
          </div>
        </div>
      </div>
    </section><!-- End Counts Section -->
      </div>
    </section><!-- End Our Team Section -->
<!--   ======= Footer ======= -->
<!-- <footer id="footer">-->
<!--    <div class="container">-->
<!--      <div class="copyright">Copyright &copy; 2020.Company name All rights reserved.<a target="_blank" href="http://sc.chinaz.com/moban/">&#x7F51;&#x9875;&#x6A21;&#x677F;</a></div>-->
<!--      <div class="credits"></div>-->
<!--    </div>-->
<!--  </footer>&lt;!&ndash; End Footer &ndash;&gt;-->
<!--  <a href="#" class="back-to-top"><i class="icofont-simple-up"></i></a>-->
  <!-- Vendor JS Files -->
  <script src="static/assets/vendor/jquery/jquery.min.js"></script>
  <script src="static/assets/vendor/bootstrap/js/bootstrap.bundle.min.js"></script>
  <script src="static/assets/vendor/jquery.easing/jquery.easing.min.js"></script>
<!--  <script src="static/assets/vendor/php-email-form/validate.js"></script>-->
  <script src="static/assets/vendor/jquery-sticky/jquery.sticky.js"></script>
  <script src="static/assets/vendor/venobox/venobox.min.js"></script>
  <script src="static/assets/vendor/waypoints/jquery.waypoints.min.js"></script>
  <script src="static/assets/vendor/counterup/counterup.min.js"></script>
  <script src="static/assets/vendor/isotope-layout/isotope.pkgd.min.js"></script>
  <script src="static/assets/vendor/aos/aos.js"></script>
  <!-- Template Main JS File -->
  <script src="static/assets/js/main.js"></script>
</body>
</html>

效果图



相关推荐
黄公子学安全1 小时前
Java的基础概念(一)
java·开发语言·python
程序员一诺2 小时前
【Python使用】嘿马python高级进阶全体系教程第10篇:静态Web服务器-返回固定页面数据,1. 开发自己的静态Web服务器【附代码文档】
后端·python
小木_.2 小时前
【Python 图片下载器】一款专门为爬虫制作的图片下载器,多线程下载,速度快,支持续传/图片缩放/图片压缩/图片转换
爬虫·python·学习·分享·批量下载·图片下载器
Jiude2 小时前
算法题题解记录——双变量问题的 “枚举右,维护左”
python·算法·面试
唐小旭2 小时前
python3.6搭建pytorch环境
人工智能·pytorch·python
是十一月末3 小时前
Opencv之对图片的处理和运算
人工智能·python·opencv·计算机视觉
爱学测试的李木子3 小时前
Python自动化测试的2种思路
开发语言·软件测试·python
kitsch0x974 小时前
工具学习_Conan 安装第三方库
开发语言·python·学习
梦幻精灵_cq4 小时前
《点点之歌》“意外”诞生记
python
张狂年少5 小时前
电力通信规约-104实战
java·开发语言·python