博主介绍:✌全网粉丝10W+,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业项目实战6年之久,选择我们就是选择放心、选择安心毕业✌
> 🍅想要获取完整文章或者源码,或者代做,拉到文章底部即可与我联系了。🍅🍅感兴趣的可以先收藏起来,点赞、关注不迷路,大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助同学们顺利毕业 。🍅
1、毕业设计:2025年计算机专业毕业设计选题汇总(建议收藏)✅
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 (绿色聊天软件)
🍅由于篇幅限制,获取完整文章或源码、代做项目的,查看我的【用户名】、【专栏名称】、【顶部选题链接】就可以找到我啦🍅
感兴趣的可以先收藏起来,点赞、关注不迷路,下方查看👇🏻获取联系方式👇🏻