# Data Import
library(tidyverse)
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.1.4     ✔ readr     2.1.5
✔ forcats   1.0.0     ✔ stringr   1.5.1
✔ ggplot2   3.5.1     ✔ tibble    3.2.1
✔ lubridate 1.9.3     ✔ tidyr     1.3.1
✔ purrr     1.0.2     
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(stringr)
library(dplyr)
library(wordcloud2)
df <- read_csv("data/movie.csv")
Rows: 1072255 Columns: 42
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr  (28): title, status, backdrop_path, homepage, imdb_id, original_languag...
dbl  (12): id, vote_average, vote_count, revenue, runtime, budget, popularit...
lgl   (1): adult
date  (1): release_date

ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
colnames(df)
 [1] "id"                      "title"                  
 [3] "vote_average"            "vote_count"             
 [5] "status"                  "release_date"           
 [7] "revenue"                 "runtime"                
 [9] "adult"                   "backdrop_path"          
[11] "budget"                  "homepage"               
[13] "imdb_id"                 "original_language"      
[15] "original_title"          "overview"               
[17] "popularity"              "poster_path"            
[19] "tagline"                 "production_companies"   
[21] "production_countries"    "spoken_languages"       
[23] "keywords"                "release_year"           
[25] "Director"                "AverageRating"          
[27] "Poster_Link"             "Certificate"            
[29] "IMDB_Rating"             "Meta_score"             
[31] "Star1"                   "Star2"                  
[33] "Star3"                   "Star4"                  
[35] "Writer"                  "Director_of_Photography"
[37] "Producers"               "Music_Composer"         
[39] "genres_list"             "Cast_list"              
[41] "overview_sentiment"      "all_combined_keywords"  
df_clean <- df |>
  select(title, release_year, status, revenue, budget, AverageRating, genres_list, production_countries)|>
  filter(status=="Released")|>#筛选上映电影
  filter(release_year>"2003")|>#筛选20年之内的电影
  #删除 '[',']' 和单引号
  mutate(genres_list = gsub("\\[|\\]'", "", genres_list))|>
  #将 genres_list 按逗号和空格分割为多个部分。使用 [ 提取分割结果的第一个元素。
  mutate(genre = sapply(strsplit(genres_list, ", "), `[`, 1))|>
  select(title, release_year, status, revenue, budget, AverageRating, genre, production_countries)|>
  #删除标点符号
  mutate(genre = str_remove_all(genre, "[[:punct:]]")) |>
  #除去跨国合作电影
  filter(!str_detect(production_countries, ",")) |>
  rename(
    year = release_year,
    rate = AverageRating,
    country = production_countries
  )

glimpse(df_clean)
Rows: 312,801
Columns: 8
$ title   <chr> "The Avengers", "Deadpool", "Avengers: Infinity War", "Guardia…
$ year    <dbl> 2012, 2016, 2018, 2014, 2008, 2012, 2019, 2010, 2013, 2015, 20…
$ status  <chr> "Released", "Released", "Released", "Released", "Released", "R…
$ revenue <dbl> 1518815515, 783100000, 2052415039, 772776600, 585174222, 42536…
$ budget  <dbl> 2.20e+08, 5.80e+07, 3.00e+08, 1.70e+08, 1.40e+08, 1.00e+08, 3.…
$ rate    <dbl> 8.0, 8.0, 8.4, 8.0, 7.9, 8.5, 8.4, 8.2, 8.2, 7.3, 7.8, 8.4, NA…
$ genre   <chr> "Science Fiction", "Action", "Adventure", "Action", "Action", …
$ country <chr> "United States of America", "United States of America", "Unite…
#保存
write.csv(df_clean, file = "data/df_clean.csv")