基于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'])
Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐