智慧出行 【Python旅游数据分析推荐系统】Django+协同过滤算法 界面:BootStrap+ECharts 功能:数据存储、可视化展示、用户交互
智慧出行 【Python旅游数据分析推荐系统】
框架:Django+协同过滤算法
界面:BootStrap+ECharts
功能:数据存储、可视化展示、用户交互
运行环境:Python3.7~3.12,Django,MySQL,requests
所需软件:PyCharm+Anaconda
1
1
1
景点数据分析可视化系统(Django+协同过滤)
一、项目核心信息表
| 项目 | 详情说明 |
|---|---|
| 项目名称 | 景点数据分析可视化系统(旅游推荐系统) |
| 技术框架 | 后端:Django + Python + MySQL 前端:Bootstrap + ECharts |
| 核心算法 | 协同过滤推荐算法(基于用户/景点评分) |
| 主要功能 | 景点数据存储、用户交互(评论/评分)、多维度数据可视化、个性化推荐、后台管理 |
| 运行环境 | Python 3.7~3.12、Django、MySQL、requests库 |
| 开发工具 | PyCharm + Anaconda |
| 典型场景 | 旅游数据分析、景点推荐、用户评论情感分析、数据可视化展示、课程/毕业设计项目 |
二、核心功能模块说明
| 模块 | 功能详情 |
|---|---|
| 用户模块 | 注册登录、个人信息管理、密码修改 |
| 数据操作 | 景点数据表格查看、添加/编辑评论、评分提交 |
| 数据可视化 | 城市景点数量柱状图、景点等级饼图、价格/销量趋势分析、评论时间折线图、评论词云 |
| 推荐系统 | 基于协同过滤算法,根据用户评分/浏览记录推荐相似景点 |
| 后台管理 | Django Admin后台,景点数据、用户信息、评论数据管理 |
三、关键构建代码示例
1. Django 项目结构
tourism_system/ ├── tourism/ # 主应用 │ ├── models.py # 数据模型 │ ├── views.py # 视图逻辑(含协同过滤推荐) │ ├── urls.py # 路由配置 │ └── templates/ # 前端页面 ├── static/ # 静态资源(Bootstrap、ECharts) ├── db.sqlite3 # 数据库文件(或MySQL) └── manage.py # Django入口文件2. 数据模型models.py
fromdjango.dbimportmodelsfromdjango.contrib.auth.modelsimportUser# 景点信息模型classScenicSpot(models.Model):name=models.CharField(max_length=100,verbose_name="景区名")level=models.CharField(max_length=50,verbose_name="景区等级")province=models.CharField(max_length=50,verbose_name="景区省份")price=models.DecimalField(max_digits=10,decimal_places=2,verbose_name="价格")sales=models.IntegerField(verbose_name="月销量")image=models.ImageField(upload_to='scenic/',verbose_name="图片")address=models.TextField(verbose_name="详情地址")def__str__(self):returnself.name# 评论模型classComment(models.Model):user=models.ForeignKey(User,on_delete=models.CASCADE)spot=models.ForeignKey(ScenicSpot,on_delete=models.CASCADE,related_name='comments')rating=models.IntegerField(verbose_name="评分")content=models.TextField(verbose_name="评论内容")created_time=models.DateTimeField(auto_now_add=True)def__str__(self):returnf"{self.user.username}-{self.spot.name}"3. 协同过滤推荐核心views.py
fromdjango.shortcutsimportrenderfromdjango.db.modelsimportPrefetchfrom.modelsimportScenicSpot,Commentimportnumpyasnpfromsklearn.metrics.pairwiseimportcosine_similarity# 构建用户-景点评分矩阵defbuild_rating_matrix():comments=Comment.objects.all()users=list(User.objects.values_list('id',flat=True))spots=list(ScenicSpot.objects.values_list('id',flat=True))user_idx={u:ifori,uinenumerate(users)}spot_idx={s:ifori,sinenumerate(spots)}matrix=np.zeros((len(users),len(spots)))forcincomments:u=user_idx[c.user.id]s=spot_idx[c.spot.id]matrix[u][s]=c.ratingreturnmatrix,users,spots# 基于物品的协同过滤推荐defrecommend_spots(user_id,top_n=5):matrix,users,spots=build_rating_matrix()user_idx=users.index(user_id)# 计算景点间相似度spot_sim=cosine_similarity(matrix.T)user_ratings=matrix[user_idx]# 预测用户未评分景点的评分scores=np.zeros(len(spots))foriinrange(len(spots)):ifuser_ratings[i]==0:scores[i]=np.dot(spot_sim[i],user_ratings)/np.sum(spot_sim[i])# 取评分最高的top_n个景点top_indices=scores.argsort()[-top_n:][::-1]recommended_ids=[spots[i]foriintop_indices]returnScenicSpot.objects.filter(id__in=recommended_ids)# 推荐页面视图defrecommendation(request):ifnotrequest.user.is_authenticated:returnredirect('login')spots=recommend_spots(request.user.id)returnrender(request,'recommendation.html',{'spots':spots})4. 数据可视化(ECharts)前端示例
<!-- 景点等级饼图 --><divid="levelPie"style="width:600px;height:400px;"></div><script>varmyChart=echarts.init(document.getElementById('levelPie'));varoption={title:{text:'景点等级情况'},tooltip:{trigger:'item'},series:[{type:'pie',radius:['40%','70%'],data:[{value:{{level_counts['5A']}},name:'5A景区'},{value:{{level_counts['4A']}},name:'4A景区'},{value:{{level_counts['3A']}},name:'3A景区'},{value:{{level_counts['unknown']}},name:'未评价'}]}]};myChart.setOption(option);</script>四、应用场景
| 场景 | 具体用途 |
|---|---|
| 旅游数据分析 | 分析不同城市景点分布、价格销量趋势、用户评论情感倾向 |
| 个性化推荐 | 基于用户历史评分和浏览记录,推荐相似景点 |
| 数据可视化展示 | 为旅游平台、政府文旅部门提供直观的数据报表 |
| 课程/毕业设计 | Django+机器学习结合的典型项目,可扩展功能丰富度 |
| 小型旅游平台后台 | 管理景点数据、用户评论、订单信息,为前端展示提供数据支持 |
五、关键标签
#Django#Python#旅游推荐系统#协同过滤#景点数据分析#数据可视化#ECharts#Bootstrap#MySQL#毕业设计
