models.py
from app import db
########## Begin ##########
class Customers(db.Model):
__tablename__ = "info"
ID = db.Column(db.Integer,primary_key=True)
Age = db.Column(db.Integer)
Age_Stage = db.Column(db.String)
Education = db.Column(db.String)
Marital_Status = db.Column(db.String)
Income = db.Column(db.Integer)
Spending = db.Column(db.Integer)
Seniority = db.Column(db.Integer)
Has_child = db.Column(db.String)
Children = db.Column(db.Integer)
Wines = db.Column(db.Integer)
Fruits = db.Column(db.Integer)
Meat = db.Column(db.Integer)
Fish = db.Column(db.Integer)
Sweet = db.Column(db.Integer)
Gold = db.Column(db.Integer)
########## End ##########
view2.py
from app.model.models import *
from . import index
from app import db
from flask import render_template
from sqlalchemy import func
from sqlalchemy import desc
## 使用饼图展示各年段客户情况----------饼图
@index.route("/rate")
def index2():
########## Begin ##########
## 提取各年龄段,并统计处于各年龄段的人数按降序排序
select_ = db.session.query(Customers.Age_Stage.label("Age_Stage"),
func.count(Customers.Age_Stage).label("c_stage"))\
.group_by("Age_Stage").order_by(desc("c_stage")).all()
s_grade = sum([i.c_stage for i in select_])##对总人数进行求和
list_1 = []
## 计算占比
for i in select_:
percent = int(i.c_stage)
data = {
"Age_Stage" : str(i.Age_Stage),
"percent" : (percent/s_grade)
}
list_1.append(data)
## 将数据传送至模板
return render_template("index2.html",info=list_1)
########## End ##########
index2.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>各年龄段占比</title>
<!-- 引入 echarts.js -->
<script type="text/JavaScript" src="../static/js/echarts.min.js"></script>
</head>
<body>
<div id="main" style="width: 100%;height: 500px"></div>
<script type="text/javascript" charset="UTF-8">
//初始化echarts实例
var mychart = echarts.init(document.getElementById("main"))
/********** Begin **********/
//接收数据
var age_stage = []
var percent = []
{% for t in info %}
age_stage.push('{{ t.Age_Stage }}')
percent.push({{ t.percent }})
{% endfor %}
/********** End **********/
var option = {
title: {
text: '各年龄层次客户占比',
left: 'center',
top: "4%"
},
tooltip: {
trigger: 'item',
formatter : "{a}<br/>{b}:{d}%"
},
legend: {
top:"12%",
left: '42%'
},
series: [
{
name: '占比',
type: 'pie',
radius: '50%',
/********** Begin **********/
data: [
{ value: percent[0], name: age_stage[0] },
{ value: percent[1], name: age_stage[1] },
{ value: percent[2], name: age_stage[2] },
{ value: percent[3], name: age_stage[3] },
],
/********** End **********/
emphasis: {
itemStyle: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0.5)'
}
}
}
]
};
mychart.setOption(option);
</script>
</body>
</html>