提示:本文章参考了哔哩哔哩的python课程李巍老师的 视频教程
前言
数据分析是指用适当的统计分析方法对收集来的大量数据进行分析,将它们加以汇总、理解和消化,以提取有用信息并进行详细研究和概括总结的过程。这个过程旨在最大化地开发数据的功能,发挥数据的作用。主要目的是把隐藏在一大批看似杂乱无章的数据中的信息集中和提炼出来,找出所研究对象的内在规律。在实际应用中,数据分析可以帮助人们做出判断,以便采取适当的行动或策略。
数据分析的过程通常包括以下几个阶段:
明确分析目的与框架:确定数据分析的目标和范围,构建分析框架。
数据收集:通过各种渠道和方法收集相关数据,确保数据的准确性和完整性。
数据处理:对收集到的数据进行清洗、转换和整理,以便进行后续分析。
数据分析:运用统计分析、数据挖掘等方法对数据进行深入分析,提取有用信息。
数据展现:通过图表、图形等方式将分析结果可视化,便于理解和交流。
撰写报告:将数据分析的过程、结果和结论整理成报告,为决策提供支持。
数据分析在现代社会中具有极其重要的地位。它不仅在商业领域得到广泛应用,帮助企业制定市场策略、优化产品设计和提高运营效率;还在政府决策、科学研究、医疗健康等领域发挥着重要作用。数据分析的准确性和及时性直接影响到决策的效果和效率。
本文使用Python Flask结合ECharts来实现葡萄酒质量的影响因素分析和可视化具有多个显著的优点:
-
动态交互性:
ECharts提供了丰富的交互功能,如缩放、拖拽、数据筛选等,使得用户能够动态地探索和分析数据。在葡萄酒质量分析的场景中,用户可以通过交互操作来深入了解不同因素对葡萄酒质量的具体影响。 -
直观易懂的视觉呈现:
ECharts能够生成高质量的图表,包括柱状图、折线图、散点图、饼图等多种类型,这些图表能够直观地展示数据之间的关系和趋势。在葡萄酒质量分析中,通过图表可以清晰地看到哪些因素对葡萄酒质量有显著影响,以及这些因素是如何影响葡萄酒质量的。 -
跨平台兼容性:
Flask是一个轻量级的Web应用框架,而ECharts是基于JavaScript的图表库,它们都具有很好的跨平台兼容性。这意味着开发出的可视化应用可以在不同的设备和浏览器上流畅运行,无论是PC端还是移动端,都能提供良好的用户体验。 -
易于集成和扩展:
Flask和ECharts都提供了丰富的API和文档,使得开发者可以轻松地集成和扩展功能。在葡萄酒质量分析的场景中,可以根据实际需求添加更多的数据分析和可视化功能,如数据预测、异常检测等。
-
实时数据更新:
Flask可以与数据库或其他数据源进行交互,实现实时数据的获取和更新。在葡萄酒质量分析的可视化应用中,可以实时展示最新的分析结果,帮助用户及时了解葡萄酒质量的变化情况。
-
提高决策效率:
通过可视化的方式展示葡萄酒质量的影响因素,可以帮助决策者更快地理解数据背后的含义,从而做出更加准确和及时的决策。在葡萄酒生产中,这有助于优化生产工艺、提高产品质量和降低成本。 -
增强用户体验:
相比于传统的数据报表或文本分析,可视化的方式更加直观和生动,能够吸引用户的注意力并提升用户体验。在葡萄酒质量分析的应用中,通过精美的图表和流畅的交互设计,可以为用户带来更好的使用体验。
一、相关技术
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