# FilmAnalysis_Group3 **Repository Path**: Worldfickler/FilmAnalysis_Group3 ## Basic Information - **Project Name**: FilmAnalysis_Group3 - **Description**: 电影数据分析与可视化 通过大数据手段分析与电影相关的数据源,并使用可视化图标将其展示出来 - **Primary Language**: Java - **License**: AGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-04-24 - **Last Updated**: 2023-11-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 项目报告 ## 技术点 1. MySQL 2. hive 3. sqoop 4. 帆软报表 5. 积木报表 ## 虚拟机启动 1. `myhadoop.sh start` 2. `hiveservices.sh start` ## 连接DataGrip 10000 端口 ## 帆软报表 http://localhost:8075/ ## 积木报表 http://localhost:8085/ ## 郭聚辉: ### 项目功能 1. **最受欢迎的前25个游戏(游戏id、受欢迎量、名称、用户评论量)- 双表联查** 2. **受欢迎量/用户评论量的前25个游戏(游戏id、受欢迎量、名称、用户评论量、受欢迎量/用户评论量)** 3. **用户评论量/受欢迎量的前25个游戏(游戏id、受欢迎量、名称、用户评论量、用户评论量/受欢迎量)** 4. **统计所有游戏win版本、mac版本、linux版本所占比例** 5. **按照年份对games表进行动态分区,并按照id进行分桶** 6. **统计每年有多少款新上线的游戏** 7. **统计不同评价的年份比例** 8. **统计每年不同评级游戏的比例** ### 项目功能展示 ![输入图片说明](img/1image.png) ![输入图片说明](img/2image.png) ![输入图片说明](img/3image.png) ![输入图片说明](img/4image.png) ![输入图片说明](img/5image.png) ### 数据字典 #### game | 数据字段 | 字段说明 | |----------------|-------------| | app_id | 游戏id | | title | 游戏名称 | | date_release | 上线时间 | | win | 是否支持win版本 | | mac | 是否支持mac版本 | | linux | 是否支持linux版本 | | rating | 评价等级 | | positive_ratio | 支持率 | | user_reviews | 用户评论数量 | | price_final | 最终价格 | | price_original | 初始价格 | | discount | 折扣 | | steam_deck | 是否支持steam平台 | #### recommendations | 数据字段 | 字段说明 | |----------------|------| | app_id | 游戏id | | helpful | 有用人数 | | funny | 喜爱人数 | | date | 评价时间 | | is_recommended | 是否推荐 | | hours | 游玩时长 | | user_id | 用户id | | review_id | 评论id | #### user | 数据字段 | 字段说明 | |----------|------| | user_id | 用户id | | products | 游戏数量 | | reviews | 评论数量 | ### 建表语句(示例) ``` CREATE TABLE IF NOT EXISTS games ( app_id INT, title STRING, date_release DATE, win BOOLEAN, mac BOOLEAN, linux BOOLEAN, rating STRING, positive_ratio INT, user_reviews INT, price_final FLOAT, price_original FLOAT, discount FLOAT, steam_deck BOOLEAN ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE; ``` ### 导入数据(示例) ``` load data local inpath '/opt/module/datas/game/games.csv' overwrite into table games; ``` ### 数据分析语句(示例) ``` -- 最受欢迎的前25个游戏(游戏id、受欢迎量、名称、用户评论量)- 双表联查 create table result1 ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' as SELECT r.app_id, r.total_funny, g.title, g.user_reviews FROM ( SELECT app_id, SUM(funny) AS total_funny FROM recommendations GROUP BY app_id ) r JOIN games g ON g.app_id = r.app_id ORDER BY total_funny DESC LIMIT 25; ``` ### sqoop导出语句(示例) ``` bin/sqoop export \ --connect jdbc:mysql://192.168.56.1:3306/game \ --username Fickler \ --password 123456 \ --table result1 \ --export-dir /user/hive/warehouse/game.db/result1 \ --input-fields-terminated-by "," \ --input-lines-terminated-by "\n" ``` ### 遇到的问题 1. 数据格式的不一致,数据清洗 2. recommendations中的app_id不唯一,根据app_id进行分组统计展示 3. 结果表的分隔符没有具体指定 4. 三层分区时,报错code2,猜测问题是虚拟内存不够 5. 部分数据分析的结果,可视化工具不能详细的展示 ##朱茂泉 ###项目功能 1. 选出评分最高的15名,并且给出评分次数 2. 求好片最多的年份中最好看的10部电影 3. 2000-2010年评分最高的电影类型(年份,类型,影评分) 4. 求1997年上映的电影Comedy类电影,以及人们的评分 5. 根据genome_scores的tagid寻找该标签的评分最5部电影 ###可视化展示 ![输入图片说明](img/zmq1image.png) ![输入图片说明](img/zmq2image.png) ![输入图片说明](img/zmq3image.png) ## MovieLens 数据字段说明 ### Movie movie.csv 电影信息: | 数据字段 | 字段说明 | |---------------|---------------------| | movieId | 电影ID | | title | 标题 | | genres | 流派 | ### Tag tag.csv 包含用户应用于电影的标记: | 数据字段 | 字段说明 | |---------------|---------------------| |userId|用户ID| |movieId|电影ID| |tag|标签| |timestamp|时间戳| ### rating rating.csv包含用户对电影的评级: | 数据字段 | 字段说明 | |---------------|---------------------| |userId|用户ID| |movieId|电影ID| |rating|评分| |timestamp|时间戳| ### link link.csv 包含可用于链接到其他源的标识符: | 数据字段 | 字段说明 | |---------------|---------------------| |movieId|电影ID| |imdbId|互联网电影数据库ID| |tmbdId|TMBD的ID| ### genome_scores genome_scores.csv 包含影片标签相关性数据: | 数据字段 | 字段说明 | |---------------|---------------------| |movieId|电影ID| |tagId|标签ID| |relevance|关联| ### genome_tags genome_tags.csv 包含标记说明: | 数据字段 | 字段说明 | |---------------|---------------------| |tagId|标签id| |tag|标签| ###分区建表(示例) ``` CREATE TABLE genome_scores ( movieId INT, tagId INT, relevance FLOAT ) PARTITIONED BY (tags INT) ROW FORMAT DELIMITED FIELDS TERMINATED BY ','; ALTER TABLE genome_scores ADD PARTITION (tags = "1"); ###为标签表分桶(示例) CREATE TABLE tag ( userId INT, movieId INT, tag string, timestamps string ) CLUSTERED BY (timestamps) INTO 10 BUCKETS ROW FORMAT DELIMITED FIELDS TERMINATED BY ','; ``` ###数据导入 `load data local inpath '/opt/module/datas/zhazhahei/genome_scores.csv' overwrite into table genome_scores;` ###数据分析(案例) ``` //5.根据genome_scores的tagid寻找该标签的评分最5部电影 create table result5 ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' as SELECT m.title,r.rating,gt.tag FROM genome_scores AS gs INNER JOIN genome_tags AS gt ON gs.tagId = gt.tagId INNER JOIN rating AS r ON gs.movieId = r.movieId INNER JOIN movie AS m ON r.movieId = m.movieId WHERE gs.tagId = 1 ORDER BY r.rating DESC LIMIT 5; ``` ### sqoop导出语句(示例) ``` bin/sqoop export \ --connect jdbc:mysql://192.168.56.1:3306/jimureport \ --username Fickler \ --password 123456 \ --table result1 \ --export-dir /user/hive/warehouse/zhazhahei.db/result1 \ --input-fields-terminated-by "," \ --input-lines-terminated-by "\n" ``` ### 遇到的问题 1. 数据处理出现问题,不好清理 2. 做按电影类型查询时出现的类型绉余 3. 处理出数据,可视化展示不美观 ## movie ### Movie | 数据字段 | 字段说明 | |---------------|---------------------| | MOVIE_ID | 电影ID,对应豆瓣的DOUBAN_ID | | NAME | 电影名称 | | ALIAS | 别名 | | ACTORS | 主演 | | COVER | 封面图片地址 | | DIRECTORS | 导演 | | GENRES | 类型 | | OFFICIAL_SITE | 地址 | | REGIONS | 制片国家/地区 | | LANGUAGES | 语言 | | RELEASE_DATE | 上映日期 | | MINS | 片长 | | IMDB_ID | IMDbID | | DOUBAN_SCORE | 豆瓣评分 | | DOUBAN_VOTES | 豆瓣投票数 | | TAGS | 标签 | | STORYLINE | 电影描述 | | SLUG | 加密的url,可忽略 | | YEAR | 年份 | | ACTOR_IDS | 演员与PERSON_ID的对应关系,多个演员采用“`|`”符号分割,格式“演员A:ID`|`演员B:ID” | | DIRECTOR_IDS | 导演与PERSON_ID的对应关系,多个导演采用“`|`”符号分割,格式“导演A:ID`|`导演B:ID” | ### Person | 数据字段 | 字段说明 | |---------------|-------| | PERSON_ID | 名人ID | | NAME | 演员名称 | | SEX | 性别 | | NAME_EN | 更多英文名 | | NAME_ZH | 更多中文名 | | BIRTH | 出生日期 | | BIRTHPLACE | 出生地 | | CONSTELLATORY | 星座 | | PROFESSION | 职业 | | BIOGRAPHY | 简介,存在简介数据的名人只有15135个 | ### User | 数据字段 | 字段说明 | |---------------|---------| | USER_ID | 豆瓣用户ID | | USER_NICKNAME | 评论用户昵称 | | USER_AVATAR | 评论用户头像 | | USER_URL | 评论用户url | ### Rating | 数据字段 | 字段说明 | |-------------|---------------------| | RATING_ID | 评分ID | | USER_ID | 豆瓣用户ID | | MOVIE_ID | 电影ID,对应豆瓣的DOUBAN_ID | | RATING | 评分 | | RATING_TIME | 评分时间 | ### Comment | 数据字段 | 字段说明 | |--------------|---------------------| | COMMENT_ID | 评论ID | | USER_ID | 用户ID | | MOVIE_ID | 电影ID,对应豆瓣的DOUBAN_ID | | CONTENT | 评论内容 | | VOTES | 评论赞同数 | | COMMENT_TIME | 评论时间 | ##赵义 ###遇到的问题 掌握的不够熟练,很多都写不出来,一点点摸索出来 可视化软件不会用,学了一点点