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

news2024/12/28 6:03:29

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

文章目录

  • 前言
  • 一、相关技术
    • 1.Flask
    • 2.Echarts
    • 3.词云
  • 二、代码部分
    • 1.5个前端页面:
    • 2.代码
  • 效果图


前言

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

数据分析的过程通常包括以下几个阶段:
明确分析目的与框架:确定数据分析的目标和范围,构建分析框架。
数据收集:通过各种渠道和方法收集相关数据,确保数据的准确性和完整性。
数据处理:对收集到的数据进行清洗、转换和整理,以便进行后续分析。
数据分析:运用统计分析、数据挖掘等方法对数据进行深入分析,提取有用信息。
数据展现:通过图表、图形等方式将分析结果可视化,便于理解和交流。
撰写报告:将数据分析的过程、结果和结论整理成报告,为决策提供支持。

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

本文使用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的安装:

pip install Flask

Flask 的特点
轻量级:Flask 核心非常简洁,易于扩展。
灵活:你可以自由地选择数据库、模板引擎等。
WSGI 兼容:Flask 遵循 WSGI(Web Server Gateway Interface)标准,可以与多种服务器兼容。
开发便捷:内置的开发服务器和调试器让开发变得简单快捷。
社区支持:由于 Flask 的流行,其社区非常活跃,提供了大量的插件和扩展。

简单实例:

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库

pip install wordcloud

示例:

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实现携带数据的路由跳转 代码如下:

# -*- 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主要实现数据的处理 代码如下:

# -*- 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为例:

<!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>

效果图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1987030.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

代码随想录算法训练营第六天(一)|242.有效的字母异位词

LeetCode 242 有效的字母异位词 题目&#xff1a; 给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。 注意&#xff1a;若 s 和 t 中每个字符出现的次数都相同&#xff0c;则称 s 和 t 互为字母异位词。 示例 1: 输入: s "anagram&q…

韦东山嵌入式linux系列-mmap

应用程序和驱动程序之间传递数据时&#xff0c;可以通过read、 write函数进行。这涉及在用户态 buffer 和内核态 buffer 之间传数据&#xff0c;如下图所示 应用程序不能直接读写驱动程序中的buffer&#xff0c;需要在用户态 buffer 和内核态 buffer 之间进行一次数据拷贝。这种…

6.1.面向对象技术-面向对象相关概念

基本概念 对象&#xff1a;基本的运行实体&#xff0c;为类的实例&#xff0c;封装了数据和行为的整体(数据和行为就是属性和方法)&#xff0c;如学生、汽车等真实存在的实体。对象具有清晰的边界、良好定义的行为和可扩展性。 学生有张三、李四等。张三就是具体的个体&#xf…

Java哈希算法

哈希算法 哈希算法1.概述2.哈希碰撞3.常用的哈希算法4.哈希算法的用途4.1校验下载文件4.2存储用户密码MD5加密5.SHA-1加密小结&#xff1a; 哈希算法 1.概述 哈希算法&#xff08;Hash&#xff09;又称摘要算法&#xff08;Digest&#xff09;&#xff0c;它的作用是&#xf…

OrangePi AIpro学习3 —— vscode开发昇腾DVPP程序

目录 一、VScode配置 1.1 下载和安装 1.2 安装和配置需要的插件 二、构建项目 2.1 项目架构 2.2 解决代码高亮显示 2.3 测试编译 2.4 总结出最简单的代码 2.5 vscode报错找不到头文件解决方法 三、代码简单讲解 3.1 初始化部分 3.2 拷贝数据到NPU显存中 3.3 准备裁…

Leetcode每日一题之仅仅反转字母(C++)

在学习之余对于知识的巩固也尤为重要&#xff0c;不论难度高低&#xff0c;都会对代码的理解有所加深&#xff0c;下面我们开始练习 思路解析 关于本题的核心思路就是如何判断字符串中元素是否为字母以及如何遍历字符串以达到仅反转的目的&#xff0c;这里用到的知识就是关于 s…

【数据结构与算法 | 二叉树篇】AVL树

1. 前言 AVL树是一种自平衡的二叉搜索树。为什么会出现AVL树。众所周知&#xff0c;虽然普通的二叉搜索树的平均时间复杂度为O(logn)&#xff0c;但最差的情况的时间复杂度为O(n)。为了避免最差的这种情况&#xff0c;出现了AVL树。 我们规定&#xff1a;如果树有个节点它的左…

大模型LLM——微调的七种方法

大模型的七种微调方法 文章目录 大模型的七种微调方法1. LoRA2. QLoRA3. 适配器调整4. 前缀调整5. 提示调整6. P-Tuning7. P-Tuning v2 1. LoRA LoRA的主要步骤包括&#xff1a; 选择微调目标权重矩阵&#xff1a;首先在大型模型&#xff08;如GPT&#xff09;中识别需要微调…

学习vue3 五,传送,缓存组件以及过渡和过渡列表

目录 Teleport传送组件 keep-alive缓存组件 transition动画组件 1. 过渡的类名 2. 自定义过渡class名 3. transition的生命周期 4.appear transition-group 1. 过渡列表 2. 列表的移动过渡 3. 状态过渡 Teleport传送组件 Teleport Vue 3.0新特性之一。 Teleport 是一…

AI技术如何重塑企业EHS安全健康环保体系,附实践案例

随着人工智能技术的快速发展&#xff0c;其在环境、健康和安全&#xff08;EHS&#xff09;管理领域的应用日益广泛。AI技术通过大数据分析、模式识别和预测建模等手段&#xff0c;为EHS管理提供了新的视角和工具。这一变革不仅提升了风险评估和事故预防的效率&#xff0c;同时…

Can‘t use Subversion command line client:svn不能使用Subversion命令行客户端:svn

1、导入idea中会报Can’t use Subversion command line client… 2、在提交svn代码的时候&#xff0c;出现这样的错误&#xff1a;Can’t use Subversion command line client: svn Probably the path to Subversion executable is wrong. Fix it. 问题原因&#xff1a;在安…

实验8-1-4 拆分实数的整数与小数部分

本题要求实现一个拆分实数的整数与小数部分的简单函数。 函数接口定义&#xff1a; void splitfloat( float x, int *intpart, float *fracpart );其中x是被拆分的实数&#xff08;0≤x<10000&#xff09;&#xff0c;intpart和fracpart分别是将实数x拆分出来的整数部分与…

sqli-labs1-24通关教程

目录 前置知识 第一关 1、第一关是单引号字符型注入,输入id1‘会报错 2、输入注释符正常显示 3、爆出列数为联合做准备 4、使用联合查询爆出数据库名 5、使用information_schema爆出表名 6、猜测用户名再users表中&#xff0c;爆出列名 ​编辑 7、利用查出来的表名数据…

【第2期】2024 搜索客 Meetup | Elasticsearch 的代码结构和写入查询流程的解读

本次活动由 搜索客社区、极限科技&#xff08;INFINI Labs&#xff09;联合举办&#xff0c;活动主题将深入探讨 Elasticsearch 的两个核心方面&#xff1a;代码结构以及写入和查询的关键流程。本次活动将为 Elasticsearch 初学者和有经验的用户提供宝贵的见解&#xff0c;欢迎…

叉车(工业车辆)安全监控管理系统,叉车安全方案

叉车作为特种设备的一种&#xff0c;存在一定的危险性&#xff0c;操作过程出现意外的情况可谓是不胜枚举&#xff0c;轻则伤财、受些皮外伤&#xff0c;重则直接致人死亡。为加强叉车操作的安全管理&#xff0c;从2023年12月1日起实施的TSG 81-2022《场&#xff08;厂&#xf…

【网络安全学习】SQL注入02:使用sqlmap进行注入

1.sqlmap的基本功能 sqlmap的基本功能是对Web应用中的数据库进行自动化的检测、利用和攻击。 使用pikachu靶场进行sqlmap的基础功能使用。 1️⃣ 第一步&#xff1a;先检查是否有注入点&#xff1a; # -u : 指定目标url&#xff0c;也就是指定注入点 sqlmap -u "http:…

终端命令行|CLI工具|CMD|PowerShell

基本概念 终端是一个文本界面&#xff0c;用于执行基于文本的程序。 果你正在运行任何用于 web 开发的工具&#xff0c;你一定需要打开命令行并运行一些命令来使用你所选择的工具 (这样的工具被称为CLI 工具也就是命令行接口工具)。 命令行接口工具 (CLI 工具) 是什么&#xf…

延伸--人工鱼群算法

目录 基本原理 改进策略 代码示例 应用实例 总结 人工鱼群算法在解决多峰函数问题中的具体应用案例和效果如何&#xff1f; 双群人工鱼群算法与传统人工鱼群算法相比&#xff0c;有哪些具体的改进和优势&#xff1f; 步长自适应调整在人工鱼群算法中的实现机制是什么&a…

vue3踩坑问题记录

//vue3element-plus //1、placeholder换行显示 const startTxt ref() const contentText ref<any>() startTxt.value "请描述问题内容、例如&#xff1a;" historyData.prompt.forEach((el:any)>{contentText.value \n${el.question}}) <ElInputv-mo…

点赞收藏测试文章(让我看看有多少机器人在刷互动量)

前言 这里有一些看似合理但实际毫无意义的句子&#xff0c;我需要用它来看看跟我互动的有多少机器人 如果你是人类用户&#xff0c;可以用评论来代替点赞&收藏&#xff0c;爱你~ 目录 前言 正文 1. 紫色的大象在夜空中游泳。 2. 月亮上的饼干师烤出了一片海洋。 3. 时…