基于python农产品数据分析可视化系统+农业数据分析 蔬菜数据 农作物 django框架 大数据项目(源码)✅

博主介绍:✌全网粉丝10W+,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业项目实战6年之久,选择我们就是选择放心、选择安心毕业✌
> 🍅想要获取完整文章或者源码,或者代做,拉到文章底部即可与我联系了。🍅

点击查看作者主页,了解更多项目!

🍅感兴趣的可以先收藏起来,点赞、关注不迷路,大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助同学们顺利毕业 。🍅

1、毕业设计:2025年计算机专业毕业设计选题汇总(建议收藏)✅

2、最全计算机专业毕业设计选题大全(建议收藏)✅

1、项目介绍

技术栈:
Python语言、Django框架、数据库、数据分析、matplotlib可视化、HTML、农产品

2、项目界面

(1)农产品数据分析、价格分布分析
在这里插入图片描述

(2)农产品数量分布
在这里插入图片描述

(3)农产品蔬菜类型、总数量、均价

在这里插入图片描述

(4)数据中心-----发布时间、地区、类型、菜名、价格、介绍、供应商、查案详情页

在这里插入图片描述

(5)后台数据管理
在这里插入图片描述

(6)注册登录

在这里插入图片描述

3、项目说明

1. 项目介绍

技术栈
  • 编程语言:Python
  • 后端框架:Django
  • 数据存储:数据库
  • 数据分析与可视化:Matplotlib
  • 前端开发:HTML
  • 数据类型:农产品数据(价格、数量、类型等)
项目目标

本项目旨在通过数据分析和可视化技术,为用户提供农产品市场的详细信息。系统通过采集和处理农产品数据,帮助用户了解市场动态、价格分布和数量变化,同时提供后台数据管理和用户注册登录功能,方便用户管理和查询数据。

2. 项目功能模块

(1)农产品数据分析与价格分布分析
  • 功能描述:通过可视化图表展示农产品的价格分布情况。
  • 特点
    • 使用Matplotlib生成价格分布的柱状图或折线图。
    • 支持按农产品类型、地区等条件筛选数据。
    • 提供价格波动趋势分析,帮助用户了解市场动态。
(2)农产品数量分布
  • 功能描述:展示农产品的数量分布情况。
  • 特点
    • 使用柱状图或饼图展示不同农产品的数量占比。
    • 支持按时间段、地区等条件筛选数据。
    • 提供数量变化趋势分析,帮助用户了解市场供需情况。
(3)农产品蔬菜类型、总数量、均价
  • 功能描述:展示不同蔬菜类型的总数量和均价。
  • 特点
    • 以表格或图表形式展示蔬菜类型、总数量和均价。
    • 支持按蔬菜类型、地区等条件筛选数据。
    • 提供均价变化趋势分析,帮助用户了解价格波动。
(4)数据中心
  • 功能描述:提供农产品数据的详细查询和管理功能。
  • 特点
    • 数据中心整合了发布时间、地区、类型、菜名、价格、介绍、供应商等信息。
    • 支持按条件筛选数据,如发布时间、地区、类型等。
    • 提供数据导出功能,方便用户进行进一步分析。
(5)后台数据管理
  • 功能描述:提供数据的管理功能,包括数据的增删改查。
  • 特点
    • 支持管理员对农产品数据进行管理。
    • 提供数据导入和导出功能,方便数据备份和更新。
    • 支持用户权限管理,确保数据安全。
(6)注册登录
  • 功能描述:提供用户注册和登录功能。
  • 特点
    • 支持用户通过用户名和密码进行登录。
    • 注册时需要填写必要的用户信息,如用户名、密码、邮箱等。
    • 提供用户信息管理功能,方便用户修改个人信息。

4、核心代码


import os, django
import sys
path = os.path.dirname(os.path.abspath(os.path.dirname(os.path.abspath(__file__))))
sys.path.append(path)
# print(sys.path)
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "sucai.settings")  # project_name 项目名称
django.setup()

import matplotlib.pyplot as plt
from pylab import *

from django.db.models import Q
from lvguowang import models

plt.rcParams['font.sans-serif'] = ['SimHei']

def danjia_section():
    num1 = len(models.XinXi.objects.filter(Q(price_st__gt=0) & Q(price_st__lte=0.5)))
    num2 = len(models.XinXi.objects.filter(Q(price_st__gt=0.5) & Q(price_st__lte=1)))
    num3 = len(models.XinXi.objects.filter(Q(price_st__gt=1) & Q(price_st__lte=1.5)))
    num4 = len(models.XinXi.objects.filter(Q(price_st__gt=1.5) & Q(price_st__lte=2)))
    num5 = len(models.XinXi.objects.filter(Q(price_st__gt=2) & Q(price_st__lte=100000)))
    print(num1)
    print(num2)
    print(num3)
    print(num4)
    print(num5)
    lists = [num1,num2,num3,num4,num5]
    lists.sort()


    plt.figure(figsize=(8, 6), dpi=80)

    # 再创建一个规格为 1 x 1 的子图
    plt.subplot(1, 1, 1)

    # 柱子总数
    N = 5
    # 包含每个柱子对应值的序列
    values = (num1,num2,num3,num4,num5)

    # 包含每个柱子下标的序列
    index = np.arange(N)

    # 柱子的宽度
    width = 0.35

    # 绘制柱状图, 每根柱子的颜色为紫罗兰色
    p2 = plt.bar(index, values, width, label="各价格区间数量", color="b")

    # 设置横轴标签
    plt.xlabel('价格')
    # 设置纵轴标签
    plt.ylabel('数量')

    # 添加标题
    plt.title('各价格区间数量')

    # 添加纵横轴的刻度
    plt.xticks(index, ('0-0.5', '0.5-1', '1-1.5', '1.5-2', '2以上'))
    plt.yticks()

    # 添加图例
    plt.legend(loc="upper right")

    path = os.path.dirname(
        os.path.dirname(os.path.abspath(__file__))) + os.sep + 'static' + os.sep + 'fenxi_img'
    if not os.path.exists(path):
        os.makedirs(path)
    paths = path + os.sep + 'danjia_section.jpg'
    plt.savefig(paths, dpi=100)
    plt.close()


def bing_danjia():
    num1 = len(models.XinXi.objects.filter(Q(price_st__gt=0) & Q(price_st__lte=0.5)))
    num2 = len(models.XinXi.objects.filter(Q(price_st__gt=0.5) & Q(price_st__lte=1)))
    num3 = len(models.XinXi.objects.filter(Q(price_st__gt=1) & Q(price_st__lte=1.5)))
    num4 = len(models.XinXi.objects.filter(Q(price_st__gt=1.5) & Q(price_st__lte=2)))
    num5 = len(models.XinXi.objects.filter(Q(price_st__gt=2) & Q(price_st__lte=100000)))

    labels = ['0-0.5', '0.5-1', '1-1.5', '1.5-2', '2以上']
    sizes = [num1,num2,num3,num4,num5]
    colors = ['yellowgreen', 'gold', 'lightskyblue', 'lightcoral','red']
    explode = (0, 0.1, 0, 0,0)  # only "explode" the 2nd slice (i.e. 'Hogs')

    plt.pie(sizes, explode=explode, labels=labels, colors=colors,
            autopct='%1.1f%%', shadow=True, startangle=90)

    # Set aspect ratio to be equal so that pie is drawn as a circle.
    plt.axis('equal')
    plt.title('价格分布饼图')

    path = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + os.sep + 'static' +  os.sep + 'fenxi_img'
    if not os.path.exists(path):
        os.makedirs(path)
    paths = path + os.sep +'bing_danjia.jpg'
    plt.savefig(paths,dpi=100)
    plt.close()

def huxing_junjia():
    dicts = {}
    dicts_paixu = {}
    datas = models.XinXi.objects.all()
    for data in datas:
        if dicts.get(data.itype,'') == '':
            dicts[data.itype] = {"price":data.price_st,"renshu":1}
            dicts_paixu[data.itype] = 1
        else:
            dicts[data.itype]["price"] = float(dicts[data.itype]["price"]) + float(data.price_st)
            dicts[data.itype]['renshu'] = int(dicts[data.itype]['renshu']) + 1
            dicts_paixu[data.itype] += 1
    dicts_order = sorted(dicts_paixu.items(), key=lambda x: x[1], reverse=True)
    dicts_junjia = {}
    for info in dicts_order[:6]:
        junjia = round(float(dicts[info[0]]['price']) / float(dicts[info[0]]['renshu']),2)

        dicts_junjia[info[0]] = junjia
    plt.figure(figsize=(8, 6), dpi=80)

    # 再创建一个规格为 1 x 1 的子图
    plt.subplot(1, 1, 1)

    # 柱子总数
    N = 6
    # 包含每个柱子对应值的序列
    values = (list(dicts_junjia.values())[0], list(dicts_junjia.values())[1], list(dicts_junjia.values())[2], list(dicts_junjia.values())[3], list(dicts_junjia.values())[4],list(dicts_junjia.values())[5])

    # 包含每个柱子下标的序列
    index = np.arange(N)

    # 柱子的宽度
    width = 0.35

    # 绘制柱状图, 每根柱子的颜色
    p2 = plt.bar(index, values, width, label="各蔬菜均价", color="lightskyblue")

    # 设置横轴标签
    plt.xlabel('价格')
    # 设置纵轴标签
    plt.ylabel('蔬菜')

    # 添加标题
    plt.title('蔬菜均价')

    # 添加纵横轴的刻度
    plt.xticks(index, (list(dicts_junjia.keys())[0], list(dicts_junjia.keys())[1], list(dicts_junjia.keys())[2], list(dicts_junjia.keys())[3], list(dicts_junjia.keys())[4],list(dicts_junjia.keys())[5]))
    plt.yticks()

    # 添加图例
    plt.legend(loc="upper right")

    for rect in p2:  # rects 是三根柱子的集合
        height = rect.get_height()
        plt.text(rect.get_x() + rect.get_width() / 2, height, str(height), size=15, ha='center', va='bottom')

    path = os.path.dirname(
        os.path.dirname(os.path.abspath(__file__))) + os.sep + 'static' + os.sep + 'fenxi_img'
    if not os.path.exists(path):
        os.makedirs(path)
    paths = path + os.sep + 'huxing_junjia.jpg'
    plt.savefig(paths, dpi=100)
    plt.close()


def bing_huxing():
    dicts_paixu = {}
    datas = models.XinXi.objects.all()
    for data in datas:
        if dicts_paixu.get(data.itype, '') == '':
            dicts_paixu[data.itype] = 1
        else:
            dicts_paixu[data.itype] += 1
    dicts_order = sorted(dicts_paixu.items(), key=lambda x: x[1], reverse=True)
    print(dicts_order)
    list1 = []
    list2 = []
    list3 = []
    for info in dicts_order[:6]:
        list1.append(info[0])
        list2.append(info[1])
        list3.append(0)
    list3[2] = 0.1
    labels = list1
    sizes = list2
    colors = ['yellowgreen', 'gold', 'lightskyblue', 'lightcoral','red']
    explode = tuple(list3)  # only "explode" the 2nd slice (i.e. 'Hogs')

    plt.pie(sizes, explode=explode, labels=labels,
            autopct='%1.1f%%', shadow=True, startangle=90)

    # Set aspect ratio to be equal so that pie is drawn as a circle.
    plt.axis('equal')
    plt.title('蔬菜数量分布')

    path = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + os.sep + 'static' +  os.sep + 'fenxi_img'
    if not os.path.exists(path):
        os.makedirs(path)
    paths = path + os.sep +'bing_huxing.jpg'
    plt.savefig(paths,dpi=100)
    plt.close()

def zhexianjunjia():
    dicts_paixu = {}
    datas = models.XinXi.objects.all()
    for data in datas:
        if dicts_paixu.get(data.itype, '') == '':
            dicts_paixu[data.itype] = 1
        else:
            dicts_paixu[data.itype] += 1
    dicts_order = sorted(dicts_paixu.items(), key=lambda x: x[1], reverse=False)
    print(dicts_order)
    nums = []
    x = []
    for ii in dicts_order:
        nums.append(ii[1])
        x.append(ii[0])
    nums = nums
    # nums.sort()

    x = x
    y = nums
    print(x)
    print(y)
    # "r" 表示红色,ms用来设置*的大小
    plt.plot(x, y, "r", marker='*', ms=10, label="a")
    plt.xticks(rotation=45)
    plt.xlabel("蔬菜类型")
    plt.ylabel("数量")
    plt.title("各蔬菜数量")
    # upper left 将图例a显示到左上角
    plt.legend(loc="upper left")
    # 在折线图上显示具体数值, ha参数控制水平对齐方式, va控制垂直对齐方式
    for x1, y1 in zip(x, y):
        plt.text(x1, y1 + 1, str(y1), ha='center', va='bottom', fontsize=20, rotation=0)
    path = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + os.sep + 'static' + os.sep + 'fenxi_img'
    if not os.path.exists(path):
        os.makedirs(path)
    paths = path + os.sep + 'zhexian_junjia.jpg'
    plt.savefig(paths, dpi=100)
    plt.close()
if __name__ == '__main__':
    danjia_section()
    bing_danjia()
    huxing_junjia()
    bing_huxing()
    zhexianjunjia()

5、项目获取

biyesheji0005  或  biyesheji0001   (绿色聊天软件)

🍅由于篇幅限制,获取完整文章或源码、代做项目的,查看我的【用户名】、【专栏名称】、【顶部选题链接】就可以找到我啦🍅

感兴趣的可以先收藏起来,点赞、关注不迷路,下方查看👇🏻获取联系方式👇🏻

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值