数据可视化期末报告

Author

221527107杨怡婕

1 报告要求

  • 期末实验报告由5章节5个图形组成,每个章节需要作一个图形。

  • 每个章节选择作什么图自主选择,作图前补充完整图形标题名称,例如:图形1——多变量条形图。

  • 案例数据自主收集,不同章节可以公用一个数据集。但同学间不允许使用相同数据集。

  • 每个章节的数据集合需要通过datatable 函数展示,并简要解释数据来源和变量意义。

  • 每个输出图形后需要对图形作简要解读,最少需针对图形提出一个观点。

  • 渲染html文件保留代码展示,6月22日前将发布网址提交至共享文档“8、期末报告” 列中。

  • 评分标准:

    • 每章节图形各20分

    • 能有效输出图形和合理解释75%

    • 数据独特性强10%

    • 图形个性化强15%

2 类别数据可视化

2.1 案例数据解释与展示

数据名称:Netflix电影和电视节目

Kaggle上扒下来的Netflix所有节目清单,包含电影(Movie)和电视剧(TV Show),从1925年到2021年的都有。

library(tidyverse)
library(ggplot2)
library(DT)
library(dplyr)
library(forcats) 
library(ggridges) 
library(GGally)   


netflix_data <- read.csv("netflix_titles.csv")  
datatable(head(netflix_data, 5), 
          options = list(pageLength = 5, scrollX = TRUE),
          caption = "数据来源:Kaggle Netflix Movies and TV Shows数据集")

2.2 图形1——帕累托图

type_count <- netflix_data %>%
  count(type) %>%
  mutate(perc = n/sum(n),
         cum_perc = cumsum(perc))

ggplot(type_count, aes(x = type, y = n)) +
  geom_bar(aes(fill = type), stat = "identity") +
  geom_line(aes(y = cum_perc*max(n), group = 1), color = "red", size = 1) +
  geom_point(aes(y = cum_perc*max(n)), color = "red") +
  scale_y_continuous(sec.axis = sec_axis(~./max(type_count$n), 
                                        labels = scales::percent)) +
  labs(title = "图形1——Netflix内容类型帕累托图", 
       x = "类型", y = "数量", 
       caption = "红线表示累积百分比") +
  theme_minimal()

  • 图形解读:生成的图清晰地展示了Netflix平台的内容构成情况。从图中可以看到,电影的数量远超电视剧,电影的数量大约在6000部左右,而电视剧只有2000部上下。最引人注目的是那条红色折线,它从左侧电影部分的75%位置开始,到右侧电视剧部分直接升到了100%,这个走势直观地告诉我们:电影才是Netflix真正的”顶梁柱”,占了平台内容的四分之三还多。

3 数据分布可视化

3.1 案例数据解释与展示

  • 数据同上

3.2 图形2——脊形图

movies <- netflix_data %>% 
  filter(type == "Movie", release_year >= 2000)

ggplot(movies, aes(x = release_year, y = rating, fill = rating)) +
  geom_density_ridges(alpha = 0.7, scale = 1.5) +
  labs(title = "图形2——电影发布年份与分级脊形图", 
       x = "发布年份", y = "分级") +
  theme_ridges()

  • 图形解读:图形展现了2000-2020年间Netflix电影的分级变化趋势。最抢眼的是TV-MA那条高高隆起的”山脊”,特别是在2015年后明显增高,说明Netflix这几年明显加大了成人向内容的投入。相比之下,PG-13这类适合青少年观看的内容就像平缓的小土坡,数量增长缓慢。图形凸显了几个现象:首先,TV-MA内容的爆发式增长正好和Netflix开始制作原创内容的时间吻合,像是《纸牌屋》这类大尺度剧集就是那时候推出的。其次,适合儿童观看的TV-Y、TV-G这类内容基本保持稳定,没有太大波动,说明Netflix的主要目标观众还是成年人。另外R级电影的数量反而在减少,这可能是因为TV-MA这个分级更适合流媒体平台。整体来看,这张图清楚地反映了Netflix的内容策略转变——从早期的合家欢路线,逐步转向更成人化、更大胆的内容创作,这也很符合当下流媒体市场竞争的趋势。

4 变量关系可视化

4.1 案例数据解释与展示

  • 数据同上

4.2 图形3——气泡图

movies_duration <- movies %>%
  mutate(duration_min = as.numeric(gsub(" min", "", duration))) %>%
  filter(!is.na(duration_min))

set.seed(42)
movies_sample <- movies_duration %>% sample_n(100)

ggplot(movies_sample, 
       aes(x = release_year, y = duration_min, 
           size = duration_min, color = rating)) +
  geom_point(alpha = 0.7) +
  scale_size(range = c(2, 10)) +
  labs(title = "图形3——电影时长与发布年份关系", 
       x = "年份", y = "时长(分钟)") +
  theme(legend.position = "bottom")

  • 图形解读:图形展示了2000-2020年间Netflix电影时长的变化趋势。从整体分布来看,近年来的电影时长明显缩短,大多数集中在90-110分钟这个区间。特别值得注意的是,那些超过120分钟的”大气泡”基本都集中在2000-2010年之间,而近几年几乎看不到了。

    从分级角度来看,TV-MA和PG-13的内容占据了大多数,但它们的时长差异很有意思。PG-13的电影时长相对稳定,基本保持在90-110分钟这个标准商业片长度。而TV-MA的内容时长则更加多样化,既有短小精悍的70分钟作品,也有较长的120分钟电影。

    最明显的趋势是,2015年后,电影时长整体向更短的方向发展。这可能反映了两个变化:一是移动端观影成为主流,观众更倾向于时长适中的内容;二是Netflix在内容制作上更加注重节奏紧凑性,毕竟在流媒体平台上,观众的注意力更容易分散。这个变化也解释了为什么现在很难在Netflix上看到像以前那样动辄两个半小时的史诗级长片了。

5 样本相似性可视化

5.1 案例数据解释与展示

  • 数据同上

5.2 图形4——聚类热图

genre_rating <- netflix_data %>%
  separate_rows(listed_in, sep = ", ") %>%
  group_by(listed_in, rating) %>%
  summarise(count = n()) %>%
  filter(count > 50) 

ggplot(genre_rating, aes(x = rating, y = listed_in, fill = count)) +
  geom_tile() +
  scale_fill_gradient(low = "white", high = "red") +
  labs(title = "图形4——类型与分级聚类热图", 
       x = "分级", y = "类型") +
  theme(axis.text.y = element_text(size = 8))

  • 图形解读:这张热图揭示了Netflix内容类型与分级之间的关联。最引人注目的是国际电影与TV-MA分级形成的深红色区块,表明这类内容中成人向作品占比极高。比如韩国电影《釜山行》和西班牙剧《纸钞屋》就是典型代表。

    热图右侧显示,儿童内容清一色集中在TV-Y和TV-G分级,形成整齐的蓝色色块,说明平台对儿童内容的审核非常严格。而恐怖类型则像一条红色彩带横跨多个分级,从TV-14到TV-MA都有分布。

    另外,纪录片主要集中在TV-14和TV-MA两个极端分级:要么是适合青少年的科普内容,要么就是限制级的真实事件改编。这种两极分化现象生动体现了纪录片创作的多样性。

6 时间序列可视化

6.1 案例数据解释与展示

  • 数据同上

6.2 图形5——面积图

yearly_content <- netflix_data %>%
  filter(release_year >= 2010) %>%
  count(release_year, type)

ggplot(yearly_content, 
       aes(x = release_year, y = n, fill = type)) +
  geom_area(alpha = 0.8, position = "stack") +
  labs(title = "图形5——Netflix年度内容增长面积图", 
       x = "年份", y = "数量") +
  scale_fill_manual(values = c("#E50914", "#221F1F"))  

  • 图形解读:图形展现了Netflix从2010到2020年的内容增长轨迹,可见电影数量呈现爆发式增长,正好对应全球疫情封锁期,得知大家宅家刷剧的需求让Netflix逮着机会疯狂上架新内容。另外有三条重要趋势: 1. 电影始终是主力,但2018年后电视剧(黑色区域)开始悄悄发力 2. 2020年大爆发,那年新增内容几乎是2019年的两倍,完美诠释了”危机就是商机” 3. 电视剧后劲足到2021年,电视剧的增速已经明显超过电影,这可能和《怪奇物语》等爆款剧的成功有关