当前位置: 首页 > news >正文

毕业设计 大数据电影数据分析与可视化系统

文章目录

  • 0 简介
  • 1 课题背景
  • 2 效果实现
  • 3 爬虫及实现
  • 4 Flask框架
  • 5 Ajax技术
  • 6 Echarts
  • 7 最后


0 简介

今天学长向大家介绍一个机器视觉的毕设项目

🚩基于大数据的电影数据分析与可视化系统

项目运行效果(视频):

毕业设计 大数据电影评论情感分析

🧿 项目分享:见文末!

1 课题背景

研究中国用户电影数据,有助于窥探中国电影市场发展背后的规律,理解其来龙去脉,获知未来走向。如今互联网上中国用户的电影数据集缺失,缺少如MovieLens、Kaggle等独立机构完成长期收集电影数据工作,研究人员只能自行收集或下载来自国外的公共电影数据集,不具有本地属性。
本项目爬取豆瓣网相关电影信息,建立数据库。并根据此数据库进行了可视化分析,从中提取出大量数据背后信息,多维度分析了电影在公映时间、观众分布、类别占比、各国市场情况的关系,从评论词云、文本情感角度挖掘单部电影呈现的规律。

2 效果实现

评论情感得分随时间变化情况如下

在这里插入图片描述

在这里插入图片描述

热门评论列表情况如下
在这里插入图片描述

3 爬虫及实现

简介
网络爬虫是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。爬虫对某一站点访问,如果可以访问就下载其中的网页内容,并且通过爬虫解析模块解析得到的网页链接,把这些链接作为之后的抓取目标,并且在整个过程中完全不依赖用户,自动运行。若不能访问则根据爬虫预先设定的策略进行下一个 URL的访问。在整个过程中爬虫会自动进行异步处理数据请求,返回网页的抓取数据。在整个的爬虫运行之前,用户都可以自定义的添加代理,伪 装 请求头以便更好地获取网页数据。
爬虫流程图如下:
在这里插入图片描述
部分代码实现

import re
import requests
import json
import time
from openpyxl import load_workbook, Workbook
from requests import RequestExceptiondef get_detail_page(html):try:headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36"}cookies = {}response = requests.get(url=html, headers=headers, cookies=cookies)response.encoding = 'utf-8'if response.status_code == 200:return response.textreturn Noneexcept RequestException:print('获取详情页错误')time.sleep(3)return get_detail_page(html)def parse_index_page(html):html = get_detail_page(html)html = html[12:-1]data = json.loads(html)id_list = []if data:for item in data:id_list.append(item['url'])return id_listdef parse_detail_page(data):html = get_detail_page(data)info = []# 获取电影名称name_pattern = re.compile('<span property="v:itemreviewed">(.*?)</span>')name = re.findall(name_pattern, html)info.append(name[0])# 获取评分score_pattern = re.compile('rating_num" property="v:average">(.*?)</strong>')score = re.findall(score_pattern, html)info.append(score[0])# 获取导演director_pattern = re.compile('rel="v:directedBy">(.*?)</a>')director = re.findall(director_pattern, html)print(director)info.append(str(director[0]))# 获取演员actor_pattern = re.compile('rel="v:starring">(.*?)</a>')actor = re.findall(actor_pattern, html)info.append(str(actor[0]))# 获取年份year_pattern = re.compile('<span class="year">\((.*?)\)</span>')year = re.findall(year_pattern, html)info.append(year[0])# 获取类型type_pattern = re.compile('property="v:genre">(.*?)</span>')type = re.findall(type_pattern, html)info.append(type[0].split(' /')[0])# 获取时长try:time_pattern = re.compile('property="v:runtime" content="(.*?)"')time = re.findall(time_pattern, html)info.append(time[0])except:info.append('1')# 获取语言language_pattern = re.compile('pl">语言:</span>(.*?)<br/>')language = re.findall(language_pattern, html)info.append(language[0].split(' /')[0])# 获取评价人数comment_pattern = re.compile('property="v:votes">(.*?)</span>')comment = re.findall(comment_pattern, html)info.append(comment[0])# 获取地区area_pattern = re.compile(' class="pl">制片国家/地区:</span>(.*?)<br/>')area = re.findall(area_pattern, html)info.append(area[0].split(' /')[0])return infohtml = 'https://movie.douban.com/j/search_subjects?type=movie&tag=%E5%86%B7%E9%97%A8%E4%BD%B3%E7%89%87&sort=rank&page_limit=20&page_start='wc = Workbook()
sheet = wc.active
sheet.title = "New"
ws = wc['New']
sheet['A1'] = 'name'
sheet['B1'] = 'score'
sheet['C1'] = 'director'
sheet['D1'] = 'actor'
sheet['E1'] = 'year'
sheet['F1'] = 'type'
sheet['G1'] = 'time'
sheet['H1'] = 'language'
sheet['I1'] = 'comment'
sheet['J1'] = 'area'
ws = wc[wc.sheetnames[0]]
wc.save('豆瓣电影.xlsx')ti = 1
for i in range(20, 50):print(i)html1 = html+str(i*20)u = parse_index_page(html1)print(u)for t in u:time.sleep(0.5)b = parse_detail_page(t)print(b)ws.append(b)wc.save('豆瓣电影.xlsx')ti += 1

4 Flask框架

简介
Flask是一个基于Werkzeug和Jinja2的轻量级Web应用程序框架。与其他同类型框架相比,Flask的灵活性、轻便性和安全性更高,而且容易上手,它可以与MVC模式很好地结合进行开发。Flask也有强大的定制性,开发者可以依据实际需要增加相应的功能,在实现丰富的功能和扩展的同时能够保证核心功能的简单。Flask丰富的插件库能够让用户实现网站定制的个性化,从而开发出功能强大的网站。

Flask项目结构图
在这里插入图片描述
部分相关代码

from flask import Flask, render_template, jsonify
import requests
from bs4 import BeautifulSoup
from snownlp import SnowNLP
import jieba
import numpy as npapp = Flask(__name__)
app.config.from_object('config')# 中文停用词
STOPWORDS = set(map(lambda x: x.strip(), open(r'./stopwords.txt', encoding='utf8').readlines()))headers = {'accept': "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",'accept-language': "en-US,en;q=0.9,zh-CN;q=0.8,zh-TW;q=0.7,zh;q=0.6",'cookie': 'll="108296"; bid=ieDyF9S_Pvo; __utma=30149280.1219785301.1576592769.1576592769.1576592769.1; __utmc=30149280; __utmz=30149280.1576592769.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); _vwo_uuid_v2=DF618B52A6E9245858190AA370A98D7E4|0b4d39fcf413bf2c3e364ddad81e6a76; ct=y; dbcl2="40219042:K/CjqllYI3Y"; ck=FsDX; push_noty_num=0; push_doumail_num=0; douban-fav-remind=1; ap_v=0,6.0','host': "search.douban.com",'referer': "https://movie.douban.com/",'sec-fetch-mode': "navigate",'sec-fetch-site': "same-site",'sec-fetch-user': "?1",'upgrade-insecure-requests': "1",'user-agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36 Edg/79.0.309.56"
}login_name = None# --------------------- html render ---------------------
@app.route('/')
def index():return render_template('index.html')@app.route('/search')
def search():return render_template('search.html')@app.route('/search/<movie_name>')
def search2(movie_name):return render_template('search.html')@app.route('/hot_movie')
def hot_movie():return render_template('hot_movie.html')@app.route('/movie_category')
def movie_category():return render_template('movie_category.html')# ------------------ ajax restful api -------------------
@app.route('/check_login')
def check_login():"""判断用户是否登录"""return jsonify({'username': login_name, 'login': login_name is not None})@app.route('/register/<name>/<pasw>')
def register(name, pasw):conn = sqlite3.connect('user_info.db')cursor = conn.cursor()check_sql = "SELECT * FROM sqlite_master where type='table' and name='user'"cursor.execute(check_sql)results = cursor.fetchall()# 数据库表不存在if len(results) == 0:# 创建数据库表sql = """CREATE TABLE user(name CHAR(256),pasw CHAR(256));"""cursor.execute(sql)conn.commit()print('创建数据库表成功!')sql = "INSERT INTO user (name, pasw) VALUES (?,?);"cursor.executemany(sql, [(name, pasw)])conn.commit()return jsonify({'info': '用户注册成功!', 'status': 'ok'})@app.route('/login/<name>/<pasw>')
def login(name, pasw):global login_nameconn = sqlite3.connect('user_info.db')cursor = conn.cursor()check_sql = "SELECT * FROM sqlite_master where type='table' and name='user'"cursor.execute(check_sql)results = cursor.fetchall()# 数据库表不存在if len(results) == 0:# 创建数据库表sql = """CREATE TABLE user(name CHAR(256),pasw CHAR(256));"""cursor.execute(sql)conn.commit()print('创建数据库表成功!')sql = "select * from user where name='{}' and pasw='{}'".format(name, pasw)cursor.execute(sql)results = cursor.fetchall()login_name = nameif len(results) > 0:return jsonify({'info': name + '用户登录成功!', 'status': 'ok'})else:return jsonify({'info': '当前用户不存在!', 'status': 'error'})

5 Ajax技术

Ajax 是一种独立于 Web 服务器软件的浏览器技术。

Ajax使用 JavaScript 向服务器提出请求并处理响应而不阻塞的用户核心对象XMLHttpRequest。通过这个对象,您的 JavaScript 可在不重载页面的情况与 Web 服务器交换数据,即在不需要刷新页面的情况下,就可以产生局部刷新的效果。

前端将需要的参数转化为JSON字符串,再通过get/post方式向服务器发送一个请并将参数直接传递给后台,后台对前端请求做出反应,接收数据,将数据作为条件查询,但会j’son字符串格式的查询结果集给前端,前端接收到后台返回的数据进行条件判断并作出相应的页面展示。

$.ajax({url: 'http://127.0.0.1:5000/updatePass',type: "POST",data:JSON.stringify(data.field),contentType: "application/json; charset=utf-8",dataType: "json",success: function(res) {if (res.code == 200) {layer.msg(res.msg, {icon: 1});} else {layer.msg(res.msg, {icon: 2});}}})

6 Echarts

ECharts(Enterprise Charts)是百度开源的数据可视化工具,底层依赖轻量级Canvas库ZRender。兼容了几乎全部常用浏览器的特点,使它可广泛用于PC客户端和手机客户端。ECharts能辅助开发者整合用户数据,创新性的完成个性化设置可视化图表。支持折线图(区域图)、柱状图(条状图)、散点图(气泡图)、K线图、饼图(环形图)等,通过导入 js 库在 Java Web 项目上运行。

7 最后

🧿 项目分享:见文末!

相关文章:

毕业设计 大数据电影数据分析与可视化系统

文章目录 0 简介1 课题背景2 效果实现3 爬虫及实现4 Flask框架5 Ajax技术6 Echarts7 最后 0 简介 今天学长向大家介绍一个机器视觉的毕设项目 &#x1f6a9;基于大数据的电影数据分析与可视化系统 项目运行效果(视频)&#xff1a; 毕业设计 大数据电影评论情感分析 &#x1…...

第三届图像处理、计算机视觉与机器学习国际学术会议(ICICML 2024)

目录 重要信息 大会简介 组织单位 大会成员 征稿主题 会议日程 参会方式 重要信息 大会官网&#xff1a;www.icicml.org 大会时间&#xff1a;2024年11月22日-24日 大会地点&#xff1a;中国 深圳 大会简介 第三届图像处理、计算机视觉与机器学…...

OJ在线评测系统 微服务技术入门 单体项目改造为微服务 用Redis改造单机分布式锁登录

单体项目改造为微服务 什么是微服务 服务&#xff1a;提供某类功能的代码 微服务&#xff1a;专注于提供某类特定功能的代码 而不是把所有的代码放到同一个项目里 会把一个大的项目按照一定的功能逻辑进行划分 拆分成多个子模块 每个子模块可以独立运行 独立负责一类功能 …...

【机器学习】网络安全——异常检测与入侵防御系统

我的主页&#xff1a;2的n次方_ 随着全球互联网和数字基础设施的不断扩展&#xff0c;网络攻击的数量和复杂性都在显著增加。从传统的病毒和蠕虫攻击到现代复杂的高级持续性威胁&#xff08;APT&#xff09;&#xff0c;网络攻击呈现出更加智能化和隐蔽化的趋势。面对这样的…...

【C语言】基础篇续

最大公约数HCF与最小公倍数LCM #include<stdio.h> int main(){int n1,n2,i,hcf,lcm;printf("Enter two numbers:");scanf("%d %d",&n1,&n2);for(i 1;i < n1 & i < n2;i){if(n1 % i 0 & n2 % i 0){hcf i;lcm (n1*n2)/hc…...

文件丢失一键找回,四大数据恢复免费版工具推荐!

丢失数据的情况虽然不经常出现&#xff0c;但一旦出现都会让人头疼不已&#xff0c;而这时候&#xff0c;要如何恢复丢失的数据呢&#xff1f;一款免费好用的数据恢复工具就派上用场了&#xff01;接下来就为大家推荐几款好用的数据恢复工具&#xff01; 福昕数据恢复 直达链…...

【学习笔记】手写一个简单的 Spring MVC

目录 一、什么是Spring MVC &#xff1f; Spring 和 Spring MVC 的区别&#xff1f; Spring MVC 的运行流程&#xff1f; 二、实现步骤 1. DispatcherServlet 1. 创建一个中央分发器 拦截所有请求 测试 2. 接管 IOC 容器 1. 创建配置文件 2. 修改 web.xml 配置文件 …...

编程究竟难在哪里?

目录 一、将现实问题转化为代码二、应对需求的不断变化三、设计新算法的挑战结语 编程之难&#xff0c;常被概括为三个方面&#xff1a;首先&#xff0c;是将现实世界的问题转化为计算机语言的挑战&#xff1b;其次&#xff0c;是需求不断变化所带来的适应性难题&#xff1b;最…...

C#医学影像分析源码,医院影像中心PACS系统源码

医学影像系统源码&#xff0c;影像诊断系统PACS源码&#xff0c;C#语言&#xff0c;C/S架构的PACS系统全套源代码。 PACS系统是医院影像科室中应用的一种系统&#xff0c;主要用于获取、传输、存档和处理医学影像。它通过各种接口&#xff0c;如模拟、DICOM和网络&#xff0c;以…...

WooCommerce与wordpress是什么关系

WooCommerce与WordPress之间的关系非常紧密&#xff0c;因为WooCommerce实际上是一个为WordPress设计的插件。WordPress是一个内容管理系统(CMS)&#xff0c;广泛用于创建各种类型的网站&#xff0c;包括博客、企业网站等。而WooCommerce则是一个免费且开源的电子商务插件&…...

Web常见的攻击方式及防御方法

Web常见的攻击方式及防御方法如下&#xff1a; 1. 跨站脚本&#xff08;XSS&#xff09; 攻击方式&#xff1a;恶意代码被注入到网页中&#xff0c;用户浏览时执行该代码&#xff0c;导致窃取用户信息、伪造页面等。防御&#xff1a; 对用户输入严格过滤、转义。使用安全的编…...

基于STM32的超声波测距仪设计

引言 本项目将基于STM32微控制器设计一个超声波测距仪&#xff0c;通过超声波传感器实现距离测量&#xff0c;并将结果显示在液晶屏上。该项目展示了STM32微控制器与超声波传感器、LCD显示器的接口通信&#xff0c;以及信号处理和距离计算的过程。 环境准备 1. 硬件设备 ST…...

【数据库】Java 集成mongodb— MongoTemplate 详解

MongoTemplate 是 Spring Data MongoDB 提供的核心类&#xff0c;用于简化与 MongoDB 数据库的交互。它封装了许多常见的数据库操作&#xff0c;使开发者能够轻松执行 CRUD&#xff08;创建、读取、更新、删除&#xff09;操作&#xff0c;处理复杂查询和聚合等。本文将详细介绍…...

腿和脚的动作透露出你的内心“世界”

离大脑越近的部位越容易受大脑控制&#xff0c;而腿脚离大脑最远&#xff0c;想要在第一时间进行伪装是很难的。当危险靠近时&#xff0c;我们的双腿会自然而然地进入戒备状态&#xff0c;产生一些不自觉的动作。因此&#xff0c;观察一个人的腿脚&#xff0c;可以帮助我们了解…...

Oracle架构之用户,权限,角色讲解

文章目录 1 用户1.1 简介1.1.1 定义1.1.2 用户相关信息1.1.2.1 用户默认表空间1.1.2.2 用户临时表空间1.1.2.3 用户资源文件1.1.2.4 用户表空间限额1.1.2.5 用户管理有关的数据字典 1.1.3 用户、模式、模式对象1.1.4 实例模式 SCOTT1.1.5 各个角色区别 1.2 用户管理1.2.1 创建用…...

Unity_Obfuscator Pro代码混淆工具_学习日志

Unity_Obfuscator Pro代码混淆工具_学习日志 切勿将密码或 API 密钥存储在您附带的应用程序内。 混淆后的热更新暂时没有想到怎么办 Obfuscator 文档 https://docs.guardingpearsoftware.com/manual/Obfuscator/Description.html商店链接Obfuscator Pro&#xff08;大约$70&a…...

已解决:org.springframework.web.HttpMediaTypeNotAcceptableException

文章目录 写在前面问题描述报错原因分析&#xff1a; 解决思路解决办法1. 确保客户端请求的 Accept 头正确2. 修改 Controller 方法的 produces 参数3. 配置合适的消息转换器4. 检查 Spring 配置中的媒体类型5. 其他解决方案 总结 写在前面 在开发过程中&#xff0c;Spring 框…...

C/C++简单编译原理

我们写的头文件和.cpp文件究竟是如何在电脑中运行的&#xff1f; 先明确几个文件类型&#xff1a; 1、头文件&#xff08;.h .hpp&#xff09; 第三方头文件、系统头文件、自编头文件…… 2、编译单位&#xff08;.cpp .c cu&#xff09; 自己写的脚本文件 3、目标文件&…...

文件处理不再难:带你轻松攻克C语言文件操作

嘿嘿,家人们,今天咱们来详细剖析C语言中的文件操作,好啦,废话不多讲,开干! 目录 1:为什么使用文件 2:文件的概念 2.1:程序文件 2.2:数据文件 2.3:文件名 3:二进制文件与文本文件 4:文件的打开与关闭 4.1:流与标准流 4.1.1:流 4.1.2:标准流 4.2:文件指针 4.3:文件的…...

Unity3D 单例模式

Unity3D 泛型单例 单例模式 单例模式是一种创建型设计模式&#xff0c;能够保证一个类只有一个实例&#xff0c;提供访问实例的全局节点。 通常会把一些管理类设置成单例&#xff0c;例如 GameManager、UIManager 等&#xff0c;可以很方便地使用这些管理类单例&#xff0c;…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展&#xff1a;显示创建时间8. 功能扩展&#xff1a;记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

浅谈不同二分算法的查找情况

二分算法原理比较简单&#xff0c;但是实际的算法模板却有很多&#xff0c;这一切都源于二分查找问题中的复杂情况和二分算法的边界处理&#xff0c;以下是博主对一些二分算法查找的情况分析。 需要说明的是&#xff0c;以下二分算法都是基于有序序列为升序有序的情况&#xf…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

云原生玩法三问:构建自定义开发环境

云原生玩法三问&#xff1a;构建自定义开发环境 引言 临时运维一个古董项目&#xff0c;无文档&#xff0c;无环境&#xff0c;无交接人&#xff0c;俗称三无。 运行设备的环境老&#xff0c;本地环境版本高&#xff0c;ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...

招商蛇口 | 执笔CID,启幕低密生活新境

作为中国城市生长的力量&#xff0c;招商蛇口以“美好生活承载者”为使命&#xff0c;深耕全球111座城市&#xff0c;以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子&#xff0c;招商蛇口始终与城市发展同频共振&#xff0c;以建筑诠释对土地与生活的…...

关于easyexcel动态下拉选问题处理

前些日子突然碰到一个问题&#xff0c;说是客户的导入文件模版想支持部分导入内容的下拉选&#xff0c;于是我就找了easyexcel官网寻找解决方案&#xff0c;并没有找到合适的方案&#xff0c;没办法只能自己动手并分享出来&#xff0c;针对Java生成Excel下拉菜单时因选项过多导…...