Django web 开发(四) - Django项目实践(十)-数据统计

数据统计

  • echarts 国内

获取方式: https://registry.npmjs.org/echarts/-/echarts-5.4.1.tgz
下载完成后
在这里插入图片描述
将此文件放到项目静态文件目录下
在这里插入图片描述
接下来,上手做

柱状图

编辑myproject/employee_management/templates/layout.html

<li><a href="/chart/list/">数据统计</a></li>

编辑myproject/myproject/urls.py

from employee_management.views import depart,user,pretty,admin, account, task, order, chart

# 数据统计
    path('chart/list/', chart.chart_list),

新建myproject/employee_management/views/chart.py

from django.shortcuts import render, HttpResponse


def chart_list(request):
    """ 数据统计 """
    return render(request, 'chart_list.html')

新建myproject/employee_management/templates/chart_list.html

{% extends 'layout.html'%}

{% block css %}

{% endblock %}


{% block content %}
<div class="container">
    <h1>数据统计</h1>
    <div class="panel panel-default">
        <div class="panel-heading">
            <h3 class="panel-title">折线图</h3>
        </div>
        <div class="panel-body">
            
        </div>
    </div>
    <div class="row">
        <div class="col-sm-8">
            <div class="panel panel-default">
                <div class="panel-heading">
                    <h3 class="panel-title">柱状图</h3>
                </div>
                <div class="panel-body">
                    <div id="m2" style="width: 600px;height:400px;"></div>
                </div>
            </div>
        </div>
        <div class="col-sm-4">
            <div class="panel panel-default">
                <div class="panel-heading">
                    <h3 class="panel-title">饼图</h3>
                </div>
                <div class="panel-body">
                    Panel content
                </div>
            </div>
        </div>

    </div>
</div>
{% endblock %}

{% block script %}
<script src="/static/js/echarts.min.js"></script>
<script type="text/javascript">
    // 基于准备好的dom,初始化echarts实例
    var myChart = echarts.init(document.getElementById('m2'));

    // 指定图表的配置项和数据
    var option = {
        title: {
            text: 'ECharts 入门示例'
        },
        tooltip: {},
        legend: {
            data: ['销量', '价格']
        },
        xAxis: {
            data: ['1月', '2月', '3月', '4月', '5月', '6月']
        },
        yAxis: {},
        series: [
            {
                name: '销量',
                type: 'bar',
                data: [5, 20, 36, 10, 10, 20]
            },
            {
                name: '价格',
                type: 'bar',
                data: [25, 40, 80, 65, 70, 50]
            }
        ]
    };

    // 使用刚指定的配置项和数据显示图表。
    myChart.setOption(option);
</script>
{% endblock %}

浏览器访问
在这里插入图片描述

调整一下文字和标题的位置

编辑myproject/employee_management/templates/chart_list.html

textAlign: "auto",
   left: "center",

在这里插入图片描述

legend: {
    data: ['销量', '价格'],
    bottom: 0,
},

在这里插入图片描述

模拟从后台获取数据

编辑myproject/myproject/urls.py

path('chart/bar/', chart.chart_bar),

编辑myproject/employee_management/views/chart.py,新增chart_bar函数

import json
from django.shortcuts import render, HttpResponse
from django.http import JsonResponse


def chart_list(request):
    """ 数据统计 """
    return render(request, 'chart_list.html')


def chart_bar(request):
    """ 构造柱状图的数据 """

    # 数据可以去数据库中获取
    legend = ['销量', '价格']
    xAxis = ['1月', '2月', '3月', '4月', '5月', '6月']
    series_list = [
                {
                    "name": '销量',
                    "type": 'bar',
                    "data": [5, 20, 36, 10, 10, 20]
                },
                {
                    "name": '价格',
                    "type": 'bar',
                    "data": [25, 40, 80, 65, 70, 50]
                }
            ]

    result = {
        "status": True,
        "data": {
            "legend": legend,
            "xAxis": xAxis,
            "series_list": series_list,
        }
    }

    return JsonResponse(result)

编辑myproject/employee_management/templates/chart_list.html

<script type="text/javascript">

    $(function () {
        initBar();
    })

    function initBar() {
        // 基于准备好的dom,初始化echarts实例
        var myChart = echarts.init(document.getElementById('m2'));

        // 指定图表的配置项和数据
        var option = {
            title: {
                text: '员工业绩年度汇总信息',
                subtext: "xxx公司",
                textAlign: "auto",
                left: "center",
            },
            tooltip: {},
            legend: {
                data: [],   // 后台获取
                bottom: 0,
            },
            xAxis: {
                data: []    // 后台获取
            },
            yAxis: {},
            series: []      // 后台获取
        };

        $.ajax({
            url: "/chart/bar/",
            type: "get",
            dataType: "JSON",
            success: function(res){
                if(res.status){
                    // 将获取到的数据更新到 option 中
                    option.legend.data = res.data.legend;
                    option.xAxis.data = res.data.xAxis;
                    option.series = res.data.series_list;

                    // 使用刚指定的配置项和数据显示图表。
                    myChart.setOption(option);
                }
            }
        })
    }
</script>

在这里插入图片描述

饼图

经过上面柱状图的测试,饼图就非常简单了

打开网址: https://echarts.apache.org/examples/zh/index.html#chart-type-pie
在这里插入图片描述
在这里插入图片描述
编辑myproject/employee_management/templates/chart_list.html,在复制代码的基础上进行修改

<script type="text/javascript">

    $(function () {
        initBar();
        iniPie();
    })
	
	// 柱状图
    function initBar() {
        // 基于准备好的dom,初始化echarts实例
        var myChart = echarts.init(document.getElementById('m2'));

        // 指定图表的配置项和数据
        var option = {
            title: {
                text: '员工业绩年度汇总信息',
                subtext: "xxx公司",
                textAlign: "auto",
                left: "center",
            },
            tooltip: {},
            legend: {
                data: [],   // 后台获取
                bottom: 0,
            },
            xAxis: {
                data: []    // 后台获取
            },
            yAxis: {},
            series: []      // 后台获取
        };

        $.ajax({
            url: "/chart/bar/",
            type: "get",
            dataType: "JSON",
            success: function (res) {
                if (res.status) {
                    // 将获取到的数据更新到 option 中
                    option.legend.data = res.data.legend;
                    option.xAxis.data = res.data.xAxis;
                    option.series = res.data.series_list;

                    // 使用刚指定的配置项和数据显示图表。
                    myChart.setOption(option);
                }
            }
        })

    }

	// 饼图
    function iniPie() {
        var chartDom = document.getElementById('m3');
        var myChart = echarts.init(chartDom);
        var option;

        option = {
            title: {
                text: '部门预算占比',
                subtext: 'xxx公司',
                left: 'center'
            },
            tooltip: {
                trigger: 'item'
            },
            legend: {
                orient: 'vertical',
                bottom: 0,
            },
            series: [
                {
                    name: 'Access From',
                    type: 'pie',
                    radius: '50%',
                    data: [
                        { value: 1048, name: '销售部' },
                        { value: 735, name: '运营部' },
                        { value: 580, name: '财务部' },
                    ],
                    emphasis: {
                        itemStyle: {
                            shadowBlur: 10,
                            shadowOffsetX: 0,
                            shadowColor: 'rgba(0, 0, 0, 0.5)'
                        }
                    }
                }
            ]
        };
        option && myChart.setOption(option);
    }
</script>

浏览器测试
在这里插入图片描述

接下来实现模拟获取后台数据,依然是上面的套路

编辑myproject/myproject/urls.py

path('chart/pie/', chart.chart_pie),

编辑myproject/employee_management/views/chart.py

def chart_pie(request):
    """ 构造饼图的数据 """
    data_list = [
                    { "value": 1048, "name": '销售部' },
                    { "value": 735, "name": '运营部' },
                    { "value": 580, "name": '财务部' },
                ]

    result = {
        "status": True,
        "data_list": data_list,
    }

    return JsonResponse(result)

编辑myproject/employee_management/templates/chart_list.html

<div id="m3" style="width: 300px; height:400px;"></div>

在这里插入图片描述

function iniPie() {
    var chartDom = document.getElementById('m3');
    var myChart = echarts.init(chartDom);
    var option;

    option = {
        title: {
            text: '部门预算占比',
            subtext: 'xxx公司',
            left: 'center'
        },
        tooltip: {
            trigger: 'item'
        },
        legend: {
            orient: 'vertical',
            bottom: 0,
        },
        series: [
            {
                name: 'Access From',
                type: 'pie',
                radius: '50%',
                data: [],
                emphasis: {
                    itemStyle: {
                        shadowBlur: 10,
                        shadowOffsetX: 0,
                        shadowColor: 'rgba(0, 0, 0, 0.5)'
                    }
                }
            }
        ]
    };

    $.ajax({
        url: "/chart/pie/",
        type: "get",
        dataType: "JSON",
        success: function(res) {
            if(res.status){
                option.series[0].data = res.data_list;
                option && myChart.setOption(option);
            }
        }
    })
}

特别说明:

  • 老版本的 echart 不会对 option 变量在局部声明,而是直接声明为全局变量,我是用的 echart 版本为5.4,已经提前帮我声明好了(不加 var 表示全局变量)

在这里插入图片描述
浏览器测试
在这里插入图片描述

折线图

编辑myproject/employee_management/templates/chart_list.html

<div id="m1" style="width: 100%; height:300px;"></div>

在这里插入图片描述
增加initLine函数

$(function () {
    initBar();
    iniPie();
    initLine();
})

function initLine() {
    var chartDom = document.getElementById('m1');
    var myChart = echarts.init(chartDom);
    var option;

    option = {
        title: {
            text: '分公司业绩图',
            left: "center",
        },
        tooltip: {
            trigger: 'axis'
        },
        legend: {
            data: ['天津分公司', '北京分公司'],
            bottom: 0,
        },
        grid: {
            left: '3%',
            right: '4%',
            bottom: '12%',
            containLabel: true
        },
        toolbox: {
            feature: {
                // saveAsImage: {}
                saveAsImage: false,
            }
        },
        xAxis: {
            type: 'category',
            boundaryGap: false,
            data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月']
        },
        yAxis: {
            type: 'value'
        },
        series: [
            {
                name: '天津分公司',
                type: 'line',
                stack: 'Total',
                data: [120, 132, 101, 134, 90, 230, 210]
            },
            {
                name: '北京分公司',
                type: 'line',
                stack: 'Total',
                data: [220, 182, 191, 234, 290, 330, 310]
            },
        ]
    };

    option && myChart.setOption(option);
}

浏览器访问
在这里插入图片描述

实现获取后台数据

编辑myproject/employee_management/templates/chart_list.html

function initLine() {
    var chartDom = document.getElementById('m1');
    var myChart = echarts.init(chartDom);
    var option;

    option = {
        title: {
            text: '分公司业绩图',
            left: "center",
        },
        tooltip: {
            trigger: 'axis'
        },
        legend: {
            data: [],
            bottom: 0,
        },
        grid: {
            left: '3%',
            right: '4%',
            bottom: '12%',
            containLabel: true
        },
        toolbox: {
            feature: {
                // saveAsImage: {}
                saveAsImage: false,
            }
        },
        xAxis: {
            type: 'category',
            boundaryGap: false,
            data: []
        },
        yAxis: {
            type: 'value'
        },
        series: []
    };

    $.ajax({
        url: "/chart/line/",
        type: "get",
        dataType: "JSON",
        success: function(res) {
            if(res.status){
                option.legend.data = res.data.legend_list;
                option.xAxis.data = res.data.xAxis_list;
                option.series = res.data.series_list;

                option && myChart.setOption(option);
            }
        }
    })
}

编辑myproject/myproject/urls.py

path('chart/line/', chart.chart_line),

编辑myproject/employee_management/views/chart.py

def chart_line(request):
    """ 构造折线图的数据 """
    legend_list = ['天津分公司', '北京分公司']
    xAxis_list = ['1月', '2月', '3月', '4月', '5月', '6月', '7月']
    series_list = [
                {
                    "name": '天津分公司',
                    "type": 'line',
                    "stack": 'Total',
                    "data": [120, 132, 101, 134, 90, 230, 210]
                },
                {
                    "name": '北京分公司',
                    "type": 'line',
                    "stack": 'Total',
                    "data": [220, 182, 191, 234, 290, 330, 310]
                },
            ]

    result = {
        "status": True,
        "data": {
            "legend_list": legend_list,
            "xAxis_list": xAxis_list,
            "series_list": series_list,
        }
    }
    return JsonResponse(result)

浏览器测试
在这里插入图片描述

  • 6
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django京东爬虫是一个非常有意思和实用的毕业设计项目Django是一种流行的Python Web框架,可用于开发高效、灵活的Web应用程序。而京东爬虫是指通过网络爬取京东商城的数据进行分析和利用。这个毕业设计项目结合了Python编程、Web开发数据分析等多个领域的知识和技能。 实现这个项目的关键在于利用Django框架搭建一个网站,实现京东商品的搜索和展示功能。首先,需要通过爬虫技术爬取京东网站上的商品数据,可以使用Python的Requests库和BeautifulSoup库来实现页面的请求和解析。然后,将获取到的数据保存到数据库中,可以使用Django的ORM框架来实现数据的存储和管理。 在网站的前端界面上,可以使用Django的模板语言来渲染数据并展示给用户。可以实现一个搜索框,用户可以输入关键字进行商品搜索,然后将搜索结果展示给用户。另外,可以实现分页功能,让用户可以浏览多页的搜索结果。 此外,还可以添加一些其他的功能,比如用户注册、登录、评论等。可以使用Django的用户认证系统来实现用户的注册和登录功能。用户可以登录后,可以在商品详情页对商品进行评论和评分。 在数据分析方面,可以使用Python的数据分析库,例如Pandas、NumPy和Matplotlib等,对采集到的京东商品数据进行统计和可视化分析。可以分析京东网站上各类商品的销量、价格趋势等信息,为用户提供一些有用的数据洞察。 总的来说,Django京东爬虫毕业设计项目可以锻炼学生的Python编程能力、Web开发能力以及数据分析能力。同时,还可以增加对网络爬虫和数据挖掘等领域的了解和实践经验。这个项目具有一定的挑战性和实用性,对毕业设计来说是一个很好的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值