[免费]基于Python豆瓣电影数据分析及可视化系统(Flask+echarts+pandas)【论文+源码+SQL脚本】

大家好,我是java1234_小锋老师,看到一个不错的于Python豆瓣电影数据分析及可视化系统(Flask+echart+pandas)【论文+源码+SQL脚本】,分享下哈。

项目介绍

随着如今电影越来越多,各种各样的烂片和捞钱的商业片也层出不穷,而有意义的电影慢慢的变得很少。本项目是基于对豆瓣网的子网站豆瓣电影的网络爬虫技术到数据可视化分析的实现,从Pycharm的环境搭建到数据爬取,再数据处理,最后数据的可视化。该项目通过爬虫爬取目标网站,获取数据,在数据可视化的过程中,使用ECharts对做出的图表进行可视化处理,可以提高用户在需要时查找所需要信息的识别率,通过图表让人一目了然,比如一些多角度动态视图,解决了用户首次了解解决率如何,从而显著提高用户对电影的满意程度。

系统展示

部分代码

import json
from flask import Flask,request,render_template,session,redirect
import re
from myutils.query import querys
from myutils.homeData import *
from myutils.timeData import *
from myutils.rateData import *
from myutils.addressData import *
from myutils.typeData import *
from myutils.tablesData import *
from myutils.actor import *
from word_cloud_picture import get_imgimport random
app = Flask(__name__)
app.secret_key = 'This is a app.secret_Key , You Know ?'@app.route('/')
def every():return render_template('login.html')@app.route("/home")
def home():email = session['email']allData = getAllData()maxRate = getMaxRate()maxCast = getMaxCast()typesAll = getTypesAll()maxLang = getMaxLang()types = getType_t()row,column = getRate_t()tablelist = getTableList()return render_template("index.html",email=email,dataLen = len(allData),maxRate=maxRate,maxCast=maxCast,typeLen = len(typesAll),maxLang = maxLang,types=types,row=list(row),column=list(column),tablelist=tablelist)@app.route("/login",methods=['GET','POST'])
def login():if request.method == 'POST':request.form = dict(request.form)def filter_fns(item):return request.form['email'] in item and request.form['password'] in itemusers = querys('select * from user', [], 'select')print(users)login_success = 0for item in users:if item[1] == request.form['email'] and item[2] == request.form['password']:login_success = 1if login_success == 0:return '账号或密码错误'# login_success = list(filter(filter_fns, users))# print(login_success)# if not len(login_success):#     return '账号或密码错误'session['email'] = request.form['email']return redirect('/home', 301)else:return render_template('./login.html')@app.route("/registry",methods=['GET','POST'])
def registry():if request.method == 'POST':request.form = dict(request.form)if request.form['password'] != request.form['passwordCheked']:return '两次密码不符'else:def filter_fn(item):return request.form['email'] in itemusers = querys('select * from user', [], 'select')filter_list = list(filter(filter_fn, users))if len(filter_list):return '该用户名已被注册'else:querys('insert into user(email,password) values(%s,%s)',[request.form['email'], request.form['password']])session['email'] = request.form['email']return redirect('/home', 301)else:return render_template('./register.html')@app.route("/search/<int:searchId>",methods=['GET','POST'])
def search(searchId):email = session['email']allData = getAllData()data = []if request.method == 'GET':if searchId == 0:return render_template('search.html',idData=data,email=email)for i in allData:if i[0] == searchId:data.append(i)return render_template('search.html',data=data,email=email)else:searchWord = dict(request.form)['searchIpt']def filter_fn(item):if item[3].find(searchWord) == -1:return Falseelse:return Truedata = list(filter(filter_fn,allData))return render_template('search.html',data=data,email=email)@app.route("/time_t",methods=['GET','POST'])
def time_t():email = session['email']row,column = getTimeList()moveTimeData = getMovieTimeList()return render_template('time_t.html',email=email,row=list(row),column=list(column),moveTimeData=moveTimeData)@app.route("/rate_t/<type>",methods=['GET','POST'])
def rate_t(type):email = session['email']typeAll = getTypesAll()rows,columns = getMean()x,y,y1 = getCountryRating()if type == 'all':row, column = getRate_t()else:row,column = getRate_tType(type)if request.method == 'GET':starts,movieName = getStart('长津湖')else:searchWord = dict(request.form)['searchIpt']starts,movieName = getStart(searchWord)return render_template('rate_t.html',email=email,typeAll=typeAll,type=type,row=list(row),column=list(column),starts=starts,movieName=movieName,rows = rows,columns = columns,x=x,y=y,y1=y1)@app.route("/address_t",methods=['GET','POST'])
def address_t():email = session['email']row,column = getAddressData()rows,columns = getLangData()return render_template('address_t.html',row=row,column=column,rows=rows,columns=columns,email=email)@app.route('/type_t',methods=['GET','POST'])
def type_t():email = session['email']result = getMovieTypeData()return render_template('type_t.html',result=result,type_t=type_t,email=email)@app.route('/actor_t')
def actor_t():email = session['email']x,y = getAllActorMovieNum()x1,y1 = getAllDirectorMovieNum()return render_template('actor_t.html',email=email,x=x,y=y,x1=x1,y1=y1)@app.route("/movie/<int:id>")
def movie(id):allData = getAllData()idData = {}for i in allData:if i[0] == id:idData = ireturn render_template('movie.html',idData=idData)@app.route('/tables/<int:id>')
def tables(id):if id == 0:tablelist = getTableList()else:deleteTableId(id)tablelist = getTableList()return render_template('tables.html',tablelist=tablelist)@app.route('/title_c')
def title_c():return render_template('title_c.html')@app.route('/summary_c')
def summary_c():return render_template('summary_c.html')@app.route('/casts_c')
def casts_c():return render_template('casts_c.html')@app.route('/comments_c',methods=['GET','POST'])
def comments_c():email = session['email']if request.method == 'GET':return render_template('comments_c.html', email=email)else:searchWord = dict(request.form)['searchIpt']randomInt = random.randint(1,10000000)get_img('commentContent','./static/4.jpg',f'./static/{randomInt}.jpg',searchWord)return render_template('comments_c.html', email=email,imgSrc=f'{randomInt}.jpg')@app.before_request
def before_requre():pat = re.compile(r'^/static')if re.search(pat,request.path):returnif request.path == "/login" :returnif request.path == '/registry':returnuname = session.get('email')if uname:return Nonereturn redirect("/login")if __name__ == '__main__':app.run()
<!DOCTYPE html>
<html lang="en"><head><meta charset="utf-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" /><meta name="description" content="" /><meta name="author" content="" /><title>登录</title><link href="static/css/styles.css" rel="stylesheet" /><script src="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/js/all.min.js" crossorigin="anonymous"></script></head><style>.col-lg-5{opacity: .8;}.bg-primary{background-image:url("/static/login.jpeg");background-size: cover;}</style><body class="bg-primary"><div id="layoutAuthentication"><div id="layoutAuthentication_content"><main><div class="container"><div class="row justify-content-center"><div class="col-lg-5"><div class="card shadow-lg border-0 rounded-lg mt-5"><div class="card-header"><h3 class="text-center font-weight-light my-4">登录</h3></div><div class="card-body"><form action="/login" method="POST"><div class="form-floating mb-3"><input class="form-control" id="inputEmail" name="email" type="email" placeholder="请输入邮箱" /><label for="inputEmail">邮箱</label></div><div class="form-floating mb-3"><input class="form-control" id="inputPassword" name="password" type="password" placeholder="请输入密码" /><label for="inputPassword">密码</label></div><div class="form-check mb-3"><input class="form-check-input" id="inputRememberPassword" type="checkbox" value="" /><label class="form-check-label" for="inputRememberPassword">记住密码</label></div><div class="d-flex align-items-center justify-content-between mt-4 mb-0"><button style="width: 100%;" class="btn btn-primary" href="/registry">登录</button></div></form></div><div class="card-footer text-center py-3"><div class="small"><a href="/registry">还没有账号? 注册!</div></div></div></div></div></main></div></div><script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" crossorigin="anonymous"></script><script src="static/js/scripts.js"></script></body>
</html>

源码下载

链接:https://pan.baidu.com/s/1c9kPOiDxXP8oAhO7sHDoTQ
提取码:1234

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/88031.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/88031.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL127 月总刷题数和日均刷题数

SQL127 月总刷题数和日均刷题数 withtemp as (selectDATE_FORMAT(submit_time, "%Y%m") as submit_month,count(question_id) as month_q_cnt,round(count(question_id) / day(last_day(max(submit_time))),3) as avg_day_q_cntfrompractice_recordwhereyear(submit…

unity luban接入

1.找到luban官网并下载他的例子和.net8.0的sdk安装 官网地址如下 快速上手 | Luban 参考大佬教程如下 Luban新版本接入教程_哔哩哔哩_bilibili 2.找到他的luban_examples-main示例下的两个文件MiniTemplate和tool 3.MiniTemplate这个文件复制一份到项目工程下&#xff0c;自…

Django服务开发镜像构建

最后完整的项目目录结构1、安装依赖pip install django django-tables2 django-filter2、创建项目和主应用django-admin startproject configcd configpython manage.py startapp dynamic_models3、配置settings.py将项目模块dynamic_models加入进来&#xff0c;django_tables2…

20250706-3-Docker 快速入门(上)-常用镜像管理命令_笔记

一、配置加速器&#xfeff;1. Docker Hub简介与地址&#xfeff;公共镜像仓库: 由Docker公司维护的公共镜像仓库&#xff0c;包含大量容器镜像默认下载源: Docker工具默认从这个公共镜像库下载镜像访问地址: https://hub.docker.com镜像搜索功能: 可通过浏览器访问图形化管理系…

【unity游戏开发——优化篇】使用Occlusion Culling遮挡剔除,只渲染相机视野内的游戏物体提升游戏性能

注意&#xff1a;考虑到优化的内容比较多&#xff0c;我将该内容分开&#xff0c;并全部整合放在【unity游戏开发——优化篇】专栏里&#xff0c;感兴趣的小伙伴可以前往逐一查看学习。 文章目录 前言实战1、确保所有静止的3D物体都标记为Occluder Static静态遮挡体和Occludee …

通用业务编号生成工具类(MyBatis-Plus + Spring Boot)详解 + 3种调用方式

在企业应用开发中&#xff0c;我们经常需要生成类似 BZ -240704-0001 这种“业务编号”&#xff0c;它通常具有以下特点&#xff1a;前缀&#xff1a;代表业务类型&#xff0c;如 BZ 表示包装日期&#xff1a;年月日格式&#xff0c;通常为 yyMMdd序列号&#xff1a;当天内递增…

前端相关性能优化笔记

1.打开速度怎么变快 - 首屏加载优化2.再次打开速度怎么变快 - 缓存优化了3.操作怎么才顺滑 - 渲染优化4.动画怎么保证流畅 - 长任务拆分2.1 首屏加载指标细化:1.FP(First Paint 首次绘制) 2.FCP(First contentful Paint 首次内容绘制)&#xff0c;FP 到 FCP 中间其实主要是 SPA…

7.7晚自习作业

实操作业02&#xff1a;Spark核心开发 作业说明 请严格按照步骤操作&#xff0c;并将最终结果文件&#xff08;命名为&#xff1a;sparkcore_result.txt&#xff09;于20点前上传。结果文件需包含每一步的关键命令执行结果文本输出。 一、数据读取与转换操作 上传账户数据$…

手机FunASR识别SIM卡通话占用内存和运行性能分析

手机FunASR识别SIM卡通话占用内存和运行性能分析 --本地AI电话机器人 上一篇&#xff1a;手机无网离线使用FunASR识别SIM卡语音通话内容 下一篇&#xff1a;手机通话语音离线ASR识别商用和优化方向 一、前言 书接上一文《阿里FunASR本地断网离线识别模型简析》&#xff0c;…

虚幻引擎Unreal Engine5恐怖游戏设计制作教程,从入门到精通从零开始完整项目开发实战详细讲解中英字幕

和大家分享一个以前收集的UE5虚幻引擎恐怖游戏开发教程&#xff0c;这是国外一个大神制作的视频教程&#xff0c;教程从零开始到制作出一款完整的游戏。内容讲解全面&#xff0c;如蓝图基础知识讲解、角色控制、高级交互系统、高级库存系统、物品检查、恐怖环境氛围设计、过场动…

多人协同开发时Git使用命令

拉取仓库代码 # 拉取远程仓库至本地tar_dir路径 git clone gitgithub.com:your-repo.git target_dir # 默认是拉取远程master分支&#xff0c;下面拉取并切换到自己需要开发的分支上 # 假设自己需要开发的分支是/feature/my_branch分支 git checkout -b feature/my_branch orig…

线性表——双向链表

线性表——双向链表1. 双向链表的实现1.1 简单图例1.2 结点的定义1.3 新结点的创建1.4 链表的初始化1.5 结点的插入1.5.1 头部插入&#xff08;头插&#xff09;1.5.2 尾部插入&#xff08;尾插&#xff09;1.5.3 任意位置&#xff08;前&#xff09;插入1.6 结点的删除1.6.1 头…

Java后端技术博客汇总文档

文章目录 前言Java后端汇总链接Java基础知识点数据结构算法&#xff08;Java实现&#xff09;算法知识点合集算法刷题算法竞赛AcWing课程蓝桥杯AB组辅导课合集&#xff08;更新中…&#xff09; 源码分析redission 数据库SQL ServerMySQLRedis -Canal JUC并发编程JVMNetty日志框…

QT 菜单栏设计使用方法

目录 常用设置函数 多个QAction的单选设置 ​​​​​​​菜单相关类 ​​​​​​​ 系统菜单的生成和响应 使用代码添加系统菜单 使用UI设计器设计系统菜单 使用Qt设计及界面时&#xff0c;常用的两种方式添加菜单&#xff0c;第一使用UI界面添加&#xff0c;第二种 在…

AIGC领域AI艺术,打造个性化艺术作品

AIGC领域AI艺术,打造个性化艺术作品 关键词:AIGC、AI艺术、生成对抗网络、个性化创作、深度学习、艺术风格迁移、创意计算 摘要:本文深入探讨了AIGC(人工智能生成内容)在艺术创作领域的应用,重点分析了如何利用AI技术打造个性化艺术作品。文章从技术原理出发,详细解析了生…

基于Flask+Jinja2的快捷教务系统(后端链接到新版正方教务系统)

快捷教务系统&#xff08;Easy Educational Administration Management System, EasyEAMS&#xff09; 项目简介 EasyEAMS 是一个基于 Flask Jinja2 的现代化教务系统 Web 应用。学生可通过网页端登录&#xff0c;在线查询个人信息、成绩、课表、学业生涯、通知、选课等。系…

EDM自动化与出海独立开发实用教程

随着互联网全球化发展&#xff0c;越来越多的独立开发者&#xff08;Indie Developer&#xff09;选择将自己的产品推向海外市场。如何高效地获客、激活用户、提升转化率&#xff0c;成为出海过程中必须解决的问题。EDM&#xff08;电子邮件营销&#xff09;自动化&#xff0c;…

「日拱一码」017 深度学习常用库——TensorFlow

目录 基础操作 张量操作&#xff1a; tf.constant 用于创建常量张量 tf.Variable 用于创建可训练的变量张量 tf.reshape 可改变张量的形状 tf.concat 可将多个张量沿指定维度拼接 tf.split 则可将张量沿指定维度分割 数学运算&#xff1a; tf.add 张量的加运算 tf.su…

ARM DStream仿真器脚本常用命令

以下是ARM DStream仿真器脚本中常用的命令及其功能分类&#xff0c;结合调试流程和典型应用场景整理&#xff1a; ⚙️ 一、连接与初始化命令 connect 建立与目标设备的连接&#xff0c;需指定接口类型&#xff08;如JTAG/SWD&#xff09;和处理器核心。 示例&#xff1a;conne…

vscode 调试unity

lanch.json { “version”: “0.2.0”, “configurations”: [ { “name”: “Attach to Unity”, “type”: “vstuc”, “request”: “attach” } ] }