django基于Spark的国漫推荐系统

**详细视频演示请联系博主

项目实现:










核心代码:

from pyspark.sql import SparkSession

from pyspark.ml.recommendation import ALS

from pyspark.ml.evaluation import RegressionEvaluator

from pyspark.sql.functions import col

class ComicRecommender:

def init (self):

self.spark = SparkSession.builder

.appName("ComicRecommendation")

.config("spark.executor.memory", "4g")

.getOrCreate()

复制代码
    # 加载数据
    self.ratings = self.spark.read.csv(
        "data/user_ratings.csv", 
        header=True, 
        inferSchema=True
    )
    self.comics = self.spark.read.csv(
        "data/comic_info.csv",
        header=True,
        inferSchema=True
    )
    
def preprocess(self):
    """数据预处理"""
    # 过滤无效评分
    self.ratings = self.ratings.filter((col("rating") >= 1) & (col("rating") <= 5))
    
    # 处理冷启动问题:添加默认评分
    popular_comics = self.ratings.groupBy("comic_id").count()
    avg_rating = self.ratings.groupBy().avg("rating").first()[0]
    
    default_ratings = popular_comics.filter(col("count") > 100) \
        .limit(100) \
        .withColumn("user_id", lit(0)) \
        .withColumn("rating", lit(avg_rating))
    
    self.ratings = self.ratings.union(default_ratings)

def train_model(self):
    """训练ALS模型"""
    # 划分训练集/测试集
    train, test = self.ratings.randomSplit([0.8, 0.2])
    
    # 配置ALS模型
    als = ALS(
        maxIter=10,
        regParam=0.01,
        userCol="user_id",
        itemCol="comic_id",
        ratingCol="rating",
        coldStartStrategy="drop"
    )
    
    # 训练模型
    self.model = als.fit(train)
    
    # 评估模型
    predictions = self.model.transform(test)
    evaluator = RegressionEvaluator(
        metricName="rmse", 
        labelCol="rating",
        predictionCol="prediction"
    )
    rmse = evaluator.evaluate(predictions)
    print(f"模型RMSE: {rmse}")
    
    return self.model

def generate_recommendations(self, user_id, num_recs=10):
    """为用户生成推荐"""
    # 创建用户DF
    user_df = self.spark.createDataFrame([(user_id,)], ["user_id"])
    
    # 获取推荐
    recs = self.model.recommendForUserSubset(user_df, num_recs)
    
    # 提取推荐结果
    rec_list = recs.select("recommendations").first()[0]
    
    # 关联漫画信息
    comic_ids = [row.comic_id for row in rec_list]
    comic_recs = self.comics.filter(col("id").isin(comic_ids))
    
    return comic_recs.toPandas().to_dict(orient="records")

def update_model(self, new_ratings):
    """增量更新模型"""
    # 将新评分添加到数据集
    new_df = self.spark.createDataFrame(new_ratings)
    self.ratings = self.ratings.union(new_df)
    
    # 重新训练模型
    self.train_model()
相关推荐
计算机毕设残哥1 天前
完整技术栈分享:基于Hadoop+Spark的在线教育投融资大数据可视化分析系统
大数据·hadoop·python·信息可视化·spark·计算机毕设·计算机毕业设计
千层冷面1 天前
Flask ORM 查询详解:Model.query vs db.session.query vs db.session.execute
数据库·python·django·flask
宇寒风暖2 天前
@(AJAX)
前端·javascript·笔记·学习·ajax
计算机源码社2 天前
分享一个基于Hadoop+spark的超市销售数据分析与可视化系统,超市顾客消费行为分析系统的设计与实现
大数据·hadoop·数据分析·spark·计算机毕业设计源码·计算机毕设选题·大数据选题推荐
码界筑梦坊2 天前
135-基于Spark的抖音数据分析热度预测系统
大数据·python·数据分析·spark·毕业设计·echarts
王小王-1232 天前
基于Django的福建省旅游数据分析与可视化系统【城市可换】
数据分析·django·旅游·携程·福建省旅游可视化·旅游数据分析系统·景区数据分析
合作小小程序员小小店2 天前
web网站开发,在线%射击比赛成绩管理%系统开发demo,基于html,css,jquery,python,django,model,orm,mysql数据库
python·mysql·django·jquery·html5
Q_Q19632884752 天前
python基于Hadoop的超市数据分析系统
开发语言·hadoop·spring boot·python·django·flask·node.js
计算机毕业设计木哥2 天前
计算机毕设大数据选题推荐 基于spark+Hadoop+python的贵州茅台股票数据分析系统【源码+文档+调试】
大数据·hadoop·python·计算机网络·spark·课程设计
Q_Q5110082852 天前
python的滑雪场雪具租赁服务数据可视化分析系统
spring boot·python·信息可视化·django·flask·node.js·php