头歌-客户消费数据分析

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>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值