[免費]基于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
英文地址,請注明出處:http://en.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” } ] }