基于k-means算法的校园美食推荐系统(机器学习,Scrapy爬虫,数据分析,Echarts可视化,可用于计算机毕设)
基于k-means算法的校园美食推荐系统
前言介绍
背景与意义
在当今数字化时代,校园生活愈发丰富多彩,美食作为其中的重要组成部分,深受学生喜爱。面对众多美食选择,学生往往难以快速找到符合自身口味和需求的美食。校园周边美食种类繁多,不同店铺的菜品风格各异,价格、口味、口碑等信息分散且难以整合。传统的美食推荐方式多依赖于简单的搜索或随机推荐,无法精准满足学生的个性化需求。随着校园规模的不断扩大和学生数量的增加,美食信息的复杂度也在提升,如何高效地整合这些信息并为学生提供精准推荐,成为校园生活服务领域亟待解决的问题。本研究提出构建基于 k-means 算法的校园美食推荐系统,旨在通过先进的数据分析技术,为学生提供更加智能化、个性化的美食推荐服务,提升校园生活的便利性和幸福感。
该研究将 k-means 算法应用于校园美食推荐领域,丰富了推荐系统算法的应用场景,为后续相关研究提供了新的思路和方法。通过对美食数据的挖掘与分析,深入探究美食特征与学生偏好的内在关联,有助于完善个性化推荐的理论体系。从实践层面而言,该系统能够有效整合校园周边美食信息,为学生提供精准的美食推荐,节省学生的时间和精力,提升校园生活的便利性。还能为校园周边商家提供数据支持,帮助商家更好地了解学生需求,优化菜品和服务,促进校园周边美食经济的发展。该研究为校园信息化建设提供了有益补充,推动校园服务的智能化升级,具有良好的应用前景和推广价值。
01开发环境
1.1 Python技术
1.2 Django框架
1.3 Hadoop
1.4 Scrapy爬虫
1.5 MySQL数据库
1.6 B/S 结构
1.7 Vue.js 技术
1.8 机器学习k-means算法
1.9 智能推荐
02系统功能模块
亮点(爬虫【饿了么网站】、机器学习(k-means算法)、智能推荐、数据预测、数据分析Echarts可视化)
1、数据管理:爬虫信息列表展示。
2、数据存储:mysql数据库。
3、数据分析:各种大数据分析统计图表大屏
4、数据预测:根据k-means算法预测。
5、智能推荐:根据用户浏览量或收藏量智能推荐
04图片展示
















05系统文档、代码展示
5.1 系统文档
5.2 代码展示
#k-means算法代码(交流学习+vx:S20231025S )
def meishiinfoforecast_forecast(request):
if request.method in ["POST", "GET"]:
msg = {'code': normal_code, "msg": mes.normal_code}
req_dict = request.session.get("req_dict")
connection = pymysql.connect(**mysql_config)
query = "SELECT shopname,score,monthsales,jiage, msname FROM meishiinfo"
#2.处理缺失值
df = pd.read_sql(query, connection).dropna()
id = req_dict.pop('id',None)
req_dict.pop('addtime',None)
#数据预处理
shopname_encoder = LabelEncoder()
df['shopname'] = shopname_encoder.fit_transform(df['shopname'])
msname_encoder = LabelEncoder()
df['msname'] = msname_encoder.fit_transform(df['msname'])
# 特征和目标值分离
X = df[[
'shopname',
'score',
'monthsales',
'jiage',
]]
y_true = df['msname']
# 特征标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# 使用KMeans进行聚类
kmeans = KMeans(n_clusters=y_true.nunique(), random_state=42)
kmeans.fit(X_scaled)
# 获取聚类结果
y_pred = kmeans.labels_
#模型评估
accuracy = accuracy_score(y_true, y_pred)
conf_matrix = confusion_matrix(y_true, y_pred)
print("Accuracy:", accuracy)
print("Confusion Matrix:\n", conf_matrix)
#可视化结果
plt.figure(figsize=(8, 6))
plt.rcParams['font.sans-serif'] = ['SimHei'] # 使用黑体 SimHei
plt.rcParams['axes.unicode_minus'] = False # 解决负号 '-' 显示为方块的问题
sns.scatterplot(x=X_scaled[:, X_scaled.shape[1]-2], y=X_scaled[:, X_scaled.shape[1]-1], hue=y_pred, palette='viridis', style=y_true, s=100)
plt.title('KMeans聚类结果')
plt.xlabel('shopname')
plt.ylabel('score')
plt.legend(title='Cluster')
directory =os.path.join(parent_directory, "templates","upload","meishiinfoforecast","km_prediction.png")
os.makedirs(os.path.dirname(directory), exist_ok=True)
plt.savefig(directory)
plt.clf()
#去预测
new_data = pd.DataFrame([req_dict])
try:
new_data['shopname'] = shopname_encoder.transform(new_data['shopname'])
except:
new_data['shopname']=[0]
new_data = new_data[[
'shopname',
'score',
'monthsales',
'jiage',
]]
new_data_scaled = scaler.transform(new_data)
new_pred = kmeans.predict(new_data_scaled)
# 调整预测结果以匹配实际类别
new_pred_adjusted = new_pred
df = pd.DataFrame(new_pred_adjusted, columns=[
'msname',
])
df['msname']=df['msname'].astype(int)
df['msname'] = msname_encoder.inverse_transform(df['msname'])
更多推荐


所有评论(0)