💖💖作者:计算机毕业设计江挽 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学习实战项目
基于微信小程序的个性化漫画阅读推荐系统介绍
个性化漫画阅读推荐系统是一款基于Django框架和MySQL数据库开发的智能推荐平台,通过安卓移动端为用户提供个性化的漫画阅读体验。系统采用现代化的C/S+B/S混合架构设计,实现了用户画像构建、内容推荐算法、作家作品管理等核心功能模块。平台支持多维度的漫画分类体系,包含漫画类型管理、漫画小说管理、漫画作品管理等完整的内容管理流程,同时建立了完善的用户管理和作家管理机制。系统通过分析用户的阅读习惯、收藏偏好、评分行为等多元化数据,运用协同过滤和内容推荐相结合的算法模型,为每位用户生成个性化的漫画推荐列表。管理后台提供了直观的数据统计界面和系统管理功能,支持管理员对平台内容进行有效监管和维护。整个系统界面简洁友好,操作流程清晰,既满足了普通用户的个性化阅读需求,也为管理员提供了便捷的后台管理工具,实现了用户体验与管理效率的双重提升。
基于微信小程序的个性化漫画阅读推荐系统演示视频
基于微信小程序的个性化漫画阅读推荐系统演示图片
基于微信小程序的个性化漫画阅读推荐系统代码展示
from pyspark.sql import SparkSession
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
from django.contrib.auth.decorators import login_required
from .models import Comic, User, UserBehavior, ComicCategory
import json
import numpy as np
from sklearn.metrics.pairwise import cosine_similarity
from collections import defaultdict
spark = SparkSession.builder.appName("ComicRecommendationSystem").config("spark.sql.adaptive.enabled", "true").getOrCreate()
@csrf_exempt
@login_required
def generate_personalized_recommendations(request):
user_id = request.user.id
user_behaviors = UserBehavior.objects.filter(user_id=user_id).select_related('comic')
if not user_behaviors.exists():
popular_comics = Comic.objects.filter(status=1).order_by('-view_count')[:10]
return JsonResponse({'recommendations': [{'id': comic.id, 'title': comic.title, 'score': 0.0} for comic in popular_comics]})
user_comic_matrix = defaultdict(dict)
all_users = User.objects.all()
all_comics = Comic.objects.filter(status=1)
for user in all_users:
behaviors = UserBehavior.objects.filter(user=user)
for behavior in behaviors:
score = behavior.rating if behavior.rating else 0
if behavior.action_type == 'view':
score += 1
elif behavior.action_type == 'favorite':
score += 3
elif behavior.action_type == 'comment':
score += 2
user_comic_matrix[user.id][behavior.comic_id] = score
target_user_vector = []
comic_ids = [comic.id for comic in all_comics]
for comic_id in comic_ids:
target_user_vector.append(user_comic_matrix[user_id].get(comic_id, 0))
similarities = []
for other_user_id in user_comic_matrix:
if other_user_id != user_id:
other_user_vector = []
for comic_id in comic_ids:
other_user_vector.append(user_comic_matrix[other_user_id].get(comic_id, 0))
if sum(other_user_vector) > 0:
similarity = cosine_similarity([target_user_vector], [other_user_vector])[0][0]
similarities.append((other_user_id, similarity))
similarities.sort(key=lambda x: x[1], reverse=True)
top_similar_users = similarities[:5]
recommendations = defaultdict(float)
for similar_user_id, similarity in top_similar_users:
for comic_id, score in user_comic_matrix[similar_user_id].items():
if comic_id not in user_comic_matrix[user_id]:
recommendations[comic_id] += similarity * score
recommended_comics = sorted(recommendations.items(), key=lambda x: x[1], reverse=True)[:10]
result = []
for comic_id, score in recommended_comics:
comic = Comic.objects.get(id=comic_id)
result.append({'id': comic.id, 'title': comic.title, 'score': round(score, 2)})
return JsonResponse({'recommendations': result})
@csrf_exempt
@login_required
def manage_comic_works(request):
if request.method == 'POST':
data = json.loads(request.body)
action = data.get('action')
if action == 'create':
comic = Comic.objects.create(
title=data.get('title'),
author_id=data.get('author_id'),
category_id=data.get('category_id'),
description=data.get('description'),
cover_image=data.get('cover_image'),
status=1
)
comic_df = spark.createDataFrame([(comic.id, comic.title, comic.author_id, comic.category_id)], ['id', 'title', 'author_id', 'category_id'])
comic_df.write.mode('append').option('table', 'comics_analytics').saveAsTable('comics_analytics')
return JsonResponse({'status': 'success', 'comic_id': comic.id})
elif action == 'update':
comic_id = data.get('comic_id')
comic = Comic.objects.get(id=comic_id)
comic.title = data.get('title', comic.title)
comic.description = data.get('description', comic.description)
comic.category_id = data.get('category_id', comic.category_id)
comic.status = data.get('status', comic.status)
comic.save()
updated_df = spark.createDataFrame([(comic.id, comic.title, comic.category_id, comic.status)], ['id', 'title', 'category_id', 'status'])
updated_df.write.mode('overwrite').option('table', 'comics_updates').saveAsTable('comics_updates')
return JsonResponse({'status': 'success', 'message': 'Comic updated successfully'})
elif action == 'delete':
comic_id = data.get('comic_id')
comic = Comic.objects.get(id=comic_id)
comic.status = 0
comic.save()
UserBehavior.objects.filter(comic_id=comic_id).update(is_active=False)
delete_df = spark.createDataFrame([(comic_id,)], ['deleted_comic_id'])
delete_df.write.mode('append').option('table', 'deleted_comics_log').saveAsTable('deleted_comics_log')
return JsonResponse({'status': 'success', 'message': 'Comic deleted successfully'})
elif request.method == 'GET':
comics = Comic.objects.filter(status=1).select_related('author', 'category')
comics_data = []
for comic in comics:
view_count = UserBehavior.objects.filter(comic=comic, action_type='view').count()
favorite_count = UserBehavior.objects.filter(comic=comic, action_type='favorite').count()
comics_data.append({
'id': comic.id,
'title': comic.title,
'author': comic.author.name if comic.author else '',
'category': comic.category.name if comic.category else '',
'view_count': view_count,
'favorite_count': favorite_count,
'created_time': comic.created_time.strftime('%Y-%m-%d %H:%M:%S')
})
return JsonResponse({'comics': comics_data})
@csrf_exempt
@login_required
def analyze_user_behavior(request):
user_id = request.GET.get('user_id')
time_range = request.GET.get('time_range', '30')
behaviors = UserBehavior.objects.filter(user_id=user_id).select_related('comic', 'comic__category')
if time_range != 'all':
from datetime import datetime, timedelta
start_date = datetime.now() - timedelta(days=int(time_range))
behaviors = behaviors.filter(created_time__gte=start_date)
behavior_data = []
for behavior in behaviors:
behavior_data.append({
'action_type': behavior.action_type,
'comic_id': behavior.comic.id,
'comic_title': behavior.comic.title,
'category_id': behavior.comic.category.id if behavior.comic.category else 0,
'category_name': behavior.comic.category.name if behavior.comic.category else 'Unknown',
'rating': behavior.rating if behavior.rating else 0,
'timestamp': behavior.created_time.timestamp()
})
behavior_df = spark.createDataFrame(behavior_data)
category_stats = behavior_df.groupBy('category_name').count().collect()
action_stats = behavior_df.groupBy('action_type').count().collect()
avg_rating = behavior_df.filter(behavior_df.rating > 0).agg({'rating': 'avg'}).collect()[0][0] if behavior_data else 0
reading_pattern = defaultdict(int)
favorite_categories = defaultdict(int)
total_reading_time = 0
for behavior in behaviors:
if behavior.action_type == 'view':
hour = behavior.created_time.hour
reading_pattern[hour] += 1
total_reading_time += behavior.duration if behavior.duration else 5
elif behavior.action_type == 'favorite':
if behavior.comic.category:
favorite_categories[behavior.comic.category.name] += 1
peak_hours = sorted(reading_pattern.items(), key=lambda x: x[1], reverse=True)[:3]
top_categories = sorted(favorite_categories.items(), key=lambda x: x[1], reverse=True)[:5]
user_profile = {
'user_id': user_id,
'total_behaviors': len(behavior_data),
'category_preferences': [{'category': row.category_name, 'count': row['count']} for row in category_stats],
'action_distribution': [{'action': row.action_type, 'count': row['count']} for row in action_stats],
'average_rating': round(avg_rating, 2) if avg_rating else 0,
'peak_reading_hours': [{'hour': hour, 'frequency': freq} for hour, freq in peak_hours],
'favorite_categories': [{'category': cat, 'count': count} for cat, count in top_categories],
'total_reading_time_minutes': total_reading_time,
'analysis_period_days': time_range
}
profile_df = spark.createDataFrame([user_profile])
profile_df.write.mode('overwrite').option('table', f'user_profile_{user_id}').saveAsTable(f'user_profile_{user_id}')
return JsonResponse(user_profile)
基于微信小程序的个性化漫画阅读推荐系统文档展示
💖💖作者:计算机毕业设计江挽 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学习实战项目