一、实验要求

(1)根据数据集(sakila),建立星型数据挖掘模型,并建立数据仓库(sakila_dwh);

(2)根据数据仓库(sakila_dwh),设计一种数据分析,抽取近5年的数据,根据电影题材进行统计,找出最受欢迎的3个电影题材;

(3)导出(2)中找到的3个电影题材的销售数据,存成CSV文件;

(4)根据数据仓库(sakila_dwh),设计一种数据分析,抽取5年的数据,发现最受欢迎的电影明星,并给他们发送邮件。

(5)程序执行过程:尽可能详细描述ETL项目的导入、转换、导出的完整过程,附相应的截图及程序执行结果。

二、实验过程

2.1构建DVD数据仓库

本实验是在构建DVD数据仓库的基础上进行的,可以参考这篇文章https://blog.csdn.net/qq_62974479/article/details/134778135?ops_request_misc=&request_id=&biz_id=102&utm_term=DVD%E6%95%B0%E6%8D%AE%E4%BB%93%E5%BA%93&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~sobaiduweb~default-1-134778135.nonecase&spm=1018.2226.3001.4450

2.2 找最受欢迎的3个电影题材

根据前面建立的sakila_dwh数据仓库,“fact_rental”表中包含了所有的销售数据,需要结合sakila数据库中的表“dim_film”“film_category”找到每条销售记录对应的category_id,排序后,再按照category_id进行分组聚合,得到各个电影题材的销售量,从而找到最受欢迎的3个电影题材。具体实现步骤如下:

(1)建立一个新转换【favorite_film_category】

(2)创建【表输出】组件,并配置

代码:

SELECT
  customer_key
, staff_key
, film_key
, store_key
, rental_date_key
, return_date_key
, rental_time_key
, count_returns
, count_rentals
, rental_duration
, rental_last_update
, rental_id
FROM sakila_dwh.fact_rental

(3)创建【数据库查询film_id】组件并配置

(4)创建【数据库查询category_id】组件,并配置

(5)创建【数据库查询category_name】组件,并配置

(6)创建【排序记录】组件

(7)创建【分组】组件

(8)创建【排序记录】组件

(9)创建【增加序列】组件

(10)创建【过滤记录】组件

(11)创建【表输出组件】

(12)运行转换并预览结果数据

结果:

由运行结果可知,最受欢迎的3个电影题材分别为Sports、Animation、Action。

2.3 找到3个最受欢迎电影题材的销售数据

由于只需要最受欢迎的3个电影题材的销售数据,因此先将“fact_rental”表中的非最受欢迎的电影题材的销售数据过滤掉。再按照先“category_id”后“film_id”进行排序,其次按照“film_id”进行分组,然后结合“film_id”进行数据库查询需要输出的数据,最后输出销售数据文件。具体实现步骤如下:

(1)建立新转换【favorite_category_rental】

(2)建立【表输出】组件,导入“fact_rental”表

代码:

SELECT
  customer_key
, staff_key
, film_key
, store_key
, rental_date_key
, return_date_key
, rental_time_key
, count_returns
, count_rentals
, rental_duration
, rental_last_update
, rental_id
FROM sakila_dwh.fact_rental

(3)建立【数据库查询film_id】组件

(4)建立【数据库查询category_id】

(5)建立【过滤记录】组件,过滤掉非最受欢迎的3个电影题材的销售记录

(6)建立【排序记录】组件

(7)建立【分组】组件

(8)建立【数据库查询】组件

(9)建立【数据库查询】组件

(10)建立【数据库查询】

(11)建立【Excel输出】组件

然后打开Excel文件,另存为CSV文件

(12)运行转换,预览结果数据

结果数据:

2.4 找最受欢迎的电影明星

根据sakila_dwh数据仓库中“fact_rental”表中包含的销售数据,结合sakila数据库中表“dim_film”“actor”找到每条销售记录对应的film_id、actor_id,再按照actor_id进行排序、分组聚合,得到各个明星的销售数据,然后排序,从而找到最受欢迎的电影明星。具体实现步骤如下:

(1)建立新转换【favorite_actor】

(2)建立【表输入】组件

代码:

SELECT
  customer_key
, staff_key
, film_key
, store_key
, rental_date_key
, return_date_key
, rental_time_key
, count_returns
, count_rentals
, rental_duration
, rental_last_update
, rental_id
FROM sakila_dwh.fact_rental

(3)建立【数据库查询】组件

(4)建立【数据库查询】组件

(5)建立【数据库查询】组件

(6)建立【排序记录】

(7)建立【分组】组件

(8)建立【排序记录】组件

(9)建立【过滤】组件

(10)建立【表输出】组件

(11)运行转换,并预览结果数据

从结果看,actor_id为5,姓为JOHNNY,名为LOLLOBRIGIDA的演员的销售量最高,由此可见他是最受欢迎的电影明星。

(12)建立【增加序列】组件

先点击过滤记录到表输出之间的跳,即连线,让其输出流不再输出到数据库中,再建立【增加序列】组件,为了方便后续过滤出最受欢迎的几位明星。

配置:

(13)建立【过滤记录】组件,把最受欢迎的前三名电影明星过滤出来

(14)建立【增加常量】组件

由于整个数据库中是没有明星的邮箱地址,所以这里我统一设置为我自己的邮箱地址

(15)建立【发送邮件】组件

从输入流中得到数据,逐条发送邮件

(16)运行转换,并查看邮箱

可以得到近5年,最受欢迎的前三名电影明星如下:

并给他们依次发送邮件如下



Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐