Description for Comparison Analysis
pacman::p_load("readr",
"dplyr", "tidyr",
"stringr",
"tidytext",
"KoNLP",
"ggplot2")
# ๋ฐ์ดํฐ ๋ถ๋ฌ์ค๊ธฐ
# 1. ๋ฌธ์ฌ์ธ ์ ๋ํต๋ น ์ฐ์ค๋ฌธ ๋ถ๋ฌ์ค๊ธฐ
raw_moon <- readLines(".../speech_moon.txt",
encoding = "UTF-8")
moon <- raw_moon %>%
as_tibble() %>% # Tibble ํํ๋ก ๋ณํ
mutate(president = "moon") # ๋ณ์ president ์ถ๊ฐ
moon
# A tibble: 117 ร 2
value president
<chr> <chr>
1 "์ ๊ถ๊ต์ฒด ํ๊ฒ ์ต๋๋ค!" moon
2 " ์ ์น๊ต์ฒด ํ๊ฒ ์ต๋๋ค!" moon
3 " ์๋๊ต์ฒด ํ๊ฒ ์ต๋๋ค!" moon
4 " " moon
5 " โ๋ถ๋น๋ถ๋ช
(ไธ้ฃไธ้ณด)โ์ด๋ผ๋ ๊ณ ์ฌ๊ฐ ์์ต๋๋ค. ๋จ์ชฝ ์ธโฆ moon
6 "" moon
7 "๊ทธ ๋์ ์ ์น์ ๊ฑฐ๋ฆฌ๋ฅผ ๋ฌ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์์ธํ ์๋๊ฐโฆ moon
8 "" moon
9 "" moon
10 "โ์ฐ๋ฆฌ๋๋ผ ๋ํต๋ นโ์ด ๋๊ฒ ์ต๋๋ค." moon
# โน 107 more rows
# 2. ๋ฐ๊ทผํ ์ ๋ํต๋ น ์ฐ์ค๋ฌธ ๋ถ๋ฌ์ค๊ธฐ
raw_park <- readLines(".../speech_park.txt",
encoding = "UTF-8")
park <- raw_park %>%
as_tibble() %>% # Tibble ํํ๋ก ๋ณํ
mutate(president = "park") # ๋ณ์ president ์ถ๊ฐ
park
# A tibble: 96 ร 2
value president
<chr> <chr>
1 "์กด๊ฒฝํ๋ ๊ตญ๋ฏผ ์ฌ๋ฌ๋ถ! ์ ๋ ์ค๋, ๊ตญ๋ฏผ ํ ๋ถ ํ ๋ถ์ ๊ฟโฆ park
2 "" park
3 "๊ตญ๋ฏผ ์ฌ๋ฌ๋ถ! ์ ์ ์ถ์ ๋ํ๋ฏผ๊ตญ๊ณผ ํจ๊ป ํด์จ ์๊ฐ์ด์์ตโฆ park
4 "" park
5 "์ด๋จธ๋๊ฐ ํํ์ ๋์๊ฐ์ ํ, ๊ฒฌ๋ ์ ์๋ ๊ณ ํต๊ณผ ์ด๋ ค์โฆ park
6 "" park
7 "๊ทธ๋๋ถํฐ ์ ์ถ์ ์์ ํ ๋ค๋ฅธ ๊ธธ์ ๊ฐ์ผํ์ต๋๋ค. ๊ฐ์ธ์ โฆ park
8 "" park
9 "์๋ฒ์ง๋ฅผ ์๋ ๋ ๋ค๋ฅธ ๊ณ ํต๊ณผ ์ํ์ ๊ฒช๊ณ , ์ ๋ ํ๋ฒํ โฆ park
10 "" park
# โน 86 more rows
# ๋ ์ ๋ํต๋ น์ ์ฐ์ค๋ฌธ์ ํ๋์ ๋ฐ์ดํฐ์
์ผ๋ก ๊ฒฐํฉํ๊ธฐ
bind_speeches <- bind_rows(moon, park) %>% # ๋ ์ ๋ํต๋ น์ ์ฐ์ค๋ฌธ์ ํ์ผ๋ก ๊ฒฐํฉ
select(president, value) # ๋ณ์ president์ value ์ ํ
head(bind_speeches) # ๋ฐ์ดํฐ์
์ ์๋ถ๋ถ ์ถ๋ ฅ
# A tibble: 6 ร 2
president value
<chr> <chr>
1 moon "์ ๊ถ๊ต์ฒด ํ๊ฒ ์ต๋๋ค!"
2 moon " ์ ์น๊ต์ฒด ํ๊ฒ ์ต๋๋ค!"
3 moon " ์๋๊ต์ฒด ํ๊ฒ ์ต๋๋ค!"
4 moon " "
5 moon " โ๋ถ๋น๋ถ๋ช
(ไธ้ฃไธ้ณด)โ์ด๋ผ๋ ๊ณ ์ฌ๊ฐ ์์ต๋๋ค. ๋จ์ชฝ ์ธโฆ
6 moon ""
tail(bind_speeches) # ๋ฐ์ดํฐ์
์ ๋ท๋ถ๋ถ ์ถ๋ ฅ
# A tibble: 6 ร 2
president value
<chr> <chr>
1 park "๊ตญ๋ฏผ๋ค์ด ๊ฟ์ผ๋ก๋ง ๊ฐ์ก๋ ํ๋ณตํ ์ถ์ ์ค์ ๋ก ์ด๋ฃฐ ์ ์๋โฆ
2 park ""
3 park "๊ฐ์ฌํฉ๋๋ค."
4 park ""
5 park "2012๋
7์ 10์ผ"
6 park "์๋๋ฆฌ๋น ์๋นํ๋ณด ๋ฐ๊ทผํ"
# ์ ์ฒ๋ฆฌ
speeches <- bind_speeches %>%
mutate(value = str_replace_all(value,
"[^๊ฐ-ํฃ]", # [^๊ฐ-ํฃ] : ํ๊ธ์ ์ ์ธํ ๋ชจ๋ ๋ฌธ์๋ฅผ ์๋ฏธํ๋ ์ ๊ท ํํ์
" "), # ๊ณต๋ฐฑ์ผ๋ก ๋ณ๊ฒฝ
value = str_squish(value)) # ์ฐ์๋ ๊ณต๋ฐฑ ์ ๊ฑฐ
speeches
# A tibble: 213 ร 2
president value
<chr> <chr>
1 moon "์ ๊ถ๊ต์ฒด ํ๊ฒ ์ต๋๋ค"
2 moon "์ ์น๊ต์ฒด ํ๊ฒ ์ต๋๋ค"
3 moon "์๋๊ต์ฒด ํ๊ฒ ์ต๋๋ค"
4 moon ""
5 moon "๋ถ๋น๋ถ๋ช
์ด๋ผ๋ ๊ณ ์ฌ๊ฐ ์์ต๋๋ค ๋จ์ชฝ ์ธ๋ ๋๋ญ๊ฐ์ง์ ์โฆ
6 moon ""
7 moon "๊ทธ ๋์ ์ ์น์ ๊ฑฐ๋ฆฌ๋ฅผ ๋ฌ ์์ต๋๋ค ๊ทธ๋ฌ๋ ์์ธํ ์๋๊ฐ โฆ
8 moon ""
9 moon ""
10 moon "์ฐ๋ฆฌ๋๋ผ ๋ํต๋ น ์ด ๋๊ฒ ์ต๋๋ค"
# โน 203 more rows
# ํ ํฐํ
speeches <- speeches %>%
unnest_tokens(input = value, # ํ ํฐํ๋ฅผ ์ํํ ํ
์คํธ๊ฐ ํฌํจ๋ ๋ณ์๋ช
output = word, # ์ถ๋ ฅ ๋ณ์๋ช
token = extractNoun) # ๋ช
์ฌ ๊ธฐ์ค์ผ๋ก ํ ํฐํ
speeches
# A tibble: 2,997 ร 2
president word
<chr> <chr>
1 moon "์ ๊ถ๊ต์ฒด"
2 moon "ํ๊ฒ ์ต๋"
3 moon "์ ์น"
4 moon "๊ต์ฒด"
5 moon "ํ๊ฒ ์ต๋"
6 moon "์๋"
7 moon "๊ต์ฒด"
8 moon "ํ๊ฒ ์ต๋"
9 moon ""
10 moon "๋ถ๋น๋ถ๋ช
"
# โน 2,987 more rows
"dplyr"
์ ํจ์ count
๋ฅผ ์ด์ฉํ์ฌ ๋ ์ ๋ํต๋ น์ ์ฐ์ค๋ฌธ์์ ์ฌ์ฉํ ๋จ์ด์ ๋น๋๋ฅผ ๊ณ์ฐํ๋ค.frequency <- speeches %>% # ์ ์ฒ๋ฆฌ & ํ ํฐํ๋ฅผ ์ํํ ๊ฒฐ๊ณผ๊ฐ ์ ์ฅ๋์ด ์๋ ๊ฐ์ฒด "speeches"
count(president, word) %>% # ์ฐ์ค๋ฌธ ๊ฐ๊ฐ์ ๋จ์ด ๋น๋ ๊ณ์ฐ
filter(str_count(word) > 1) # ๋ ๊ธ์ ์ด์์ ๋จ์ด๋ง ์ถ์ถ -> ํ ๊ธ์๋ก ๋ ๋จ์ด ์ ๊ฑฐ
frequency
# A tibble: 1,131 ร 3
president word n
<chr> <chr> <int>
1 moon ๊ฐ๋ 1
2 moon ๊ฐ์ฌ 1
3 moon ๊ฐ์ด 2
4 moon ๊ฐ์กฑ 1
5 moon ๊ฐ์กฑ๊ตฌ์กฐ 1
6 moon ๊ฐ์ง 4
7 moon ๊ฐ์น 3
8 moon ๊ฐ์ข
1
9 moon ๊ฐ๋น 1
10 moon ๊ฐ๋ ฅ 3
# โน 1,121 more rows
"dplyr"
์ ํจ์ slice_max
๋ฅผ ์ด์ฉํ์ฌ ์ฐ์ค๋ฌธ์์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ ๋จ์ด๋ฅผ ์ถ์ถํ๋ค.
slice_max
: ๊ฐ์ด ํฐ ์์ n๊ฐ์ ํ์ ์ถ์ถํด ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ ํจ์slice_min
: ๊ฐ์ด ์์ ํ์ n๊ฐ์ ํ์ ์ถ์ถํ์ฌ ์ ๋ ฌํ๋ ํจ์group_by
๋ฅผ ์ด์ฉํ์ฌ ๋ณ์ president
์ ๋ํด ๊ทธ๋ฃนํ๋ฅผ ์ํํ๋ค.top10 <- frequency %>% # ๋จ์ด ๋น๋๊ฐ ์ ์ฅ๋์ด ์๋ ๊ฐ์ฒด in 1-1
group_by(president) %>% # ๋ณ์ president์ ๋ํด ๊ทธ๋ฃนํ -> ๊ฐ๊ฐ์ ์ฐ์ค๋ฌธ์์ ๋น๋๊ฐ ๋์ ๋จ์ด๋ฅผ ์ถ์ถํ๊ธฐ ์ํด ์ํ
slice_max(n, # ๋จ์ด์ ๋น๋๊ฐ ์
๋ ฅ๋ ๋ณ์๋ช
n = 10) # ๋น๋๊ฐ ๊ฐ์ฅ ๋์ 10๊ฐ์ ๋จ์ด ์ถ์ถ
top10
# A tibble: 22 ร 3
# Groups: president [2]
president word n
<chr> <chr> <int>
1 moon ๊ตญ๋ฏผ 21
2 moon ์ผ์๋ฆฌ 21
3 moon ๋๋ผ 19
4 moon ์ฐ๋ฆฌ 17
5 moon ๊ฒฝ์ 15
6 moon ์ฌํ 14
7 moon ์ฑ์ฅ 13
8 moon ๋ํต๋ น 12
9 moon ์ ์น 12
10 moon ํ๊ฒ 12
# โน 12 more rows
# ๋ฌธ์ฌ์ธ ์ ๋ํต๋ น ์ฐ์ค๋ฌธ์ ๋ํ ๊ฒฐ๊ณผ๋ง ์ถ๋ ฅ
top10 %>%
filter(president == "moon")
# A tibble: 10 ร 3
# Groups: president [1]
president word n
<chr> <chr> <int>
1 moon ๊ตญ๋ฏผ 21
2 moon ์ผ์๋ฆฌ 21
3 moon ๋๋ผ 19
4 moon ์ฐ๋ฆฌ 17
5 moon ๊ฒฝ์ 15
6 moon ์ฌํ 14
7 moon ์ฑ์ฅ 13
8 moon ๋ํต๋ น 12
9 moon ์ ์น 12
10 moon ํ๊ฒ 12
# ๋ฐ๊ทผํ ์ ๋ํต๋ น ์ฐ์ค๋ฌธ์ ๋ํ ๊ฒฐ๊ณผ๋ง ์ถ๋ ฅ
top10 %>%
filter(president == "park")
# A tibble: 12 ร 3
# Groups: president [1]
president word n
<chr> <chr> <int>
1 park ๊ตญ๋ฏผ 72
2 park ํ๋ณต 23
3 park ์ฌ๋ฌ๋ถ 20
4 park ์ ๋ถ 17
5 park ๊ฒฝ์ 15
6 park ์ ๋ขฐ 11
7 park ๊ตญ๊ฐ 10
8 park ์ฐ๋ฆฌ 10
9 park ๊ต์ก 9
10 park ์ฌ๋ 9
11 park ์ฌํ 9
12 park ์ผ์๋ฆฌ 9
Result!
๋ฐ๊ทผํ ์ ๋ํต๋ น ์ฐ์ค๋ฌธ์์ ๋น๋๊ฐ ๋์ ๋จ์ด 12๊ฐ๊ฐ ์ถ๋ ฅ๋์๋ค. 10๊ฐ๊ฐ ์๋ 12๊ฐ์ธ ์ด์ ๋ โ๊ต์กโ, โ์ฌ๋โ, โ์ฌํโ, โ์ผ์๋ฆฌโ๊ฐ ๋๊ฐ์ด 9๋ฒ์ฉ ์ฌ์ฉ๋์ด ๋น๋๊ฐ ๋์ผํ ๋จ์ด๋ฅผ ๋ชจ๋ ์ถ์ถํ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋น๋๊ฐ ๋์ผํ๋๋ผ๋ ์ํ๋ ๊ฐ์๋งํผ๋ง ๋จ์ด๋ฅผ ์ถ์ถํ๊ธฐ ์ํด์๋ ์ต์
with_ties = F
๋ฅผ ์ง์ ํ๋ฉด ๋๋ค.
# ๋น๋๊ฐ ๋์ผํ๋๋ผ๋ ์ํ๋ ๊ฐ์๋งํผ ๋จ์ด ์ถ์ถ
top10 <- frequency %>% # ๋จ์ด ๋น๋๊ฐ ์ ์ฅ๋์ด ์๋ ๊ฐ์ฒด in 1-1
group_by(president) %>% # ๋ณ์ president์ ๋ํด ๊ทธ๋ฃนํ -> ๊ฐ๊ฐ์ ์ฐ์ค๋ฌธ์์ ๋น๋๊ฐ ๋์ ๋จ์ด๋ฅผ ์ถ์ถํ๊ธฐ ์ํด ์ํ
slice_max(n, # ๋จ์ด์ ๋น๋๊ฐ ์
๋ ฅ๋ ๋ณ์๋ช
n = 10, # ๋น๋๊ฐ ๊ฐ์ฅ ๋์ 10๊ฐ์ ๋จ์ด ์ถ์ถ
with_ties = F) # ๋น๋๊ฐ ๋์ผํ๋๋ผ๋ ์ต์
n์ ์ง์ ํ ๊ฐ์๋งํผ๋ง ๋จ์ด ์ถ์ถ
top10
# A tibble: 20 ร 3
# Groups: president [2]
president word n
<chr> <chr> <int>
1 moon ๊ตญ๋ฏผ 21
2 moon ์ผ์๋ฆฌ 21
3 moon ๋๋ผ 19
4 moon ์ฐ๋ฆฌ 17
5 moon ๊ฒฝ์ 15
6 moon ์ฌํ 14
7 moon ์ฑ์ฅ 13
8 moon ๋ํต๋ น 12
9 moon ์ ์น 12
10 moon ํ๊ฒ 12
11 park ๊ตญ๋ฏผ 72
12 park ํ๋ณต 23
13 park ์ฌ๋ฌ๋ถ 20
14 park ์ ๋ถ 17
15 park ๊ฒฝ์ 15
16 park ์ ๋ขฐ 11
17 park ๊ตญ๊ฐ 10
18 park ์ฐ๋ฆฌ 10
19 park ๊ต์ก 9
20 park ์ฌ๋ 9
# ๋ฌธ์ฌ์ธ ์ ๋ํต๋ น ์ฐ์ค๋ฌธ์ ๋ํ ๊ฒฐ๊ณผ๋ง ์ถ๋ ฅ
top10 %>%
filter(president == "moon")
# A tibble: 10 ร 3
# Groups: president [1]
president word n
<chr> <chr> <int>
1 moon ๊ตญ๋ฏผ 21
2 moon ์ผ์๋ฆฌ 21
3 moon ๋๋ผ 19
4 moon ์ฐ๋ฆฌ 17
5 moon ๊ฒฝ์ 15
6 moon ์ฌํ 14
7 moon ์ฑ์ฅ 13
8 moon ๋ํต๋ น 12
9 moon ์ ์น 12
10 moon ํ๊ฒ 12
# ๋ฐ๊ทผํ ์ ๋ํต๋ น ์ฐ์ค๋ฌธ์ ๋ํ ๊ฒฐ๊ณผ๋ง ์ถ๋ ฅ
top10 %>%
filter(president == "park")
# A tibble: 10 ร 3
# Groups: president [1]
president word n
<chr> <chr> <int>
1 park ๊ตญ๋ฏผ 72
2 park ํ๋ณต 23
3 park ์ฌ๋ฌ๋ถ 20
4 park ์ ๋ถ 17
5 park ๊ฒฝ์ 15
6 park ์ ๋ขฐ 11
7 park ๊ตญ๊ฐ 10
8 park ์ฐ๋ฆฌ 10
9 park ๊ต์ก 9
10 park ์ฌ๋ 9
Result!
์ต์
with_ties = F
๋ฅผ ์ง์ ํ์ฌ ๋ฐ๊ทผํ ์ ๋ํต๋ น ์ฐ์ค๋ฌธ์์ ๋น๋๊ฐ ๋์ ๋จ์ด 10๊ฐ๊ฐ ์ถ๋ ฅ๋์๋ค. ๋๊ฐ์ด 9๋ฒ์ฉ ์ฌ์ฉํ ๋จ์ด โ๊ต์กโ, โ์ฌ๋โ, โ์ฌํโ, โ์ผ์๋ฆฌโ ์ค โ๊ต์กโ๊ณผ โ์ฌ๋โ์ด ํฌํจ๋ ์ด์ ๋ ๋น๋๊ฐ ๋์ผํ ๋จ์ด์ ๊ฒฝ์ฐ ์๋ณธ ๋ฐ์ดํฐ์ ์ ๋ ฌ ์์์ ๋ฐ๋ผ ์ถ๋ ฅํ๊ธฐ ๋๋ฌธ์ด๋ค.
# ๊ธฐ๋ณธ ๋ง๋ ๊ทธ๋ํ
ggplot(top10, # ์์ฃผ ์ฌ์ฉํ ์์ 10๊ฐ ๋จ์ด๊ฐ ์ ์ฅ๋์ด ์๋ ๊ฐ์ฒด in 1-2
aes(x = reorder(word, n), # reorder : top10์์ ๋จ์ด์ ๋ฐ๋ฅธ ํ๊ท ์ฌ์ฉ ๋น๋๋ฅผ ์ด์ฉํ์ฌ ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ
y = n,
fill = president)) + # ๋ํต๋ น์ ๋ฐ๋ผ ๋ง๋ ์๊น ๋ค๋ฅด๊ฒ ํํ
geom_col() + # ๋ง๋ ๊ทธ๋ํ
coord_flip() + # ๋ง๋๋ฅผ ๊ฐ๋ก๋ก ํ์
facet_wrap(~president) # ๋ณ์ president์ ํญ๋ชฉ๋ณ๋ก ๊ทธ๋ํ ์์ฑ -> ๋ ์ ๋ํต๋ น ๊ฐ๊ฐ์ ๋ง๋ ๊ทธ๋ํ ์์ฑ
Result!
๊ทธ๋ํ๋ฅผ ๋ณด๋ฉด ๋ง๋๊ฐ ์๋ ๋จ์ด๊ฐ ์กด์ฌํ๋ค. ์ด๋ ์ถ์ ๊ตฌ์ฑํ๋ ๋จ์ด๊ฐ ํ ๋ํต๋ น์ ์ฐ์ค๋ฌธ์๋ง ํฌํจ๋์ด ์๊ธฐ ๋๋ฌธ์ด๋ค. ์๋ฅผ ๋ค์ด, โํ๋ณตโ์ ๋ฐ๊ทผํ ์ ๋ํต๋ น์ ์ฐ์ค๋ฌธ์๋ ์กด์ฌํ์ง๋ง ๋ฌธ์ฌ์ธ ์ ๋ํต๋ น์ ์ฐ์ค๋ฌธ์๋ ์กด์ฌํ์ง ์๋๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ํจ์ facet_wrap
์ ์ต์
scales = "free_y"
์ ์ง์ ํ๋ค.
# y์ถ์ด ๋ค๋ฅธ ๋ง๋ ๊ทธ๋ํ
ggplot(top10, # ์์ฃผ ์ฌ์ฉํ ์์ 10๊ฐ ๋จ์ด๊ฐ ์ ์ฅ๋์ด ์๋ ๊ฐ์ฒด in 1-2
aes(x = reorder(word, n), # reorder : top10์์ ๋จ์ด์ ๋ฐ๋ฅธ ํ๊ท ์ฌ์ฉ ๋น๋๋ฅผ ์ด์ฉํ์ฌ ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ
y = n,
fill = president)) + # ๋ํต๋ น์ ๋ฐ๋ผ ๋ง๋ ์๊น ๋ค๋ฅด๊ฒ ํํ
geom_col() + # ๋ง๋ ๊ทธ๋ํ
coord_flip() + # ๋ง๋๋ฅผ ๊ฐ๋ก๋ก ํ์
facet_wrap(~president, # ๋ณ์ president์ ํญ๋ชฉ๋ณ๋ก ๊ทธ๋ํ ์์ฑ -> ๋ ์ ๋ํต๋ น ๊ฐ๊ฐ์ ๋ง๋ ๊ทธ๋ํ ์์ฑ
scales = "free_y") # y์ถ ํต์ผ X
Result!
๋ฐ๊ทผํ ์ ๋ํต๋ น์ ๋ง๋ ๊ทธ๋ํ๋ฅผ ๋ณด๋ฉด, โ๊ตญ๋ฏผโ์ ๋น๋๊ฐ ๋๋ฌด ๋์ ๋ค๋ฅธ ๋จ์ด์ ๋น๋ ์ฐจ์ด๊ฐ ์ ๋๋ฌ๋์ง ์๋๋ค.
# ์ ๋ฐ์ ์ธ ๋จ์ด์ ๋น๋๊ฐ ์ ๋๋ฌ๋๋๋ก "๊ตญ๋ฏผ" ์ ์ธ
top10 <- frequency %>% # ๋จ์ด ๋น๋๊ฐ ์ ์ฅ๋์ด ์๋ ๊ฐ์ฒด in 1-1
filter(word != "๊ตญ๋ฏผ") %>% # "๊ตญ๋ฏผ" ์ ์ธ
group_by(president) %>% # ๋ณ์ president์ ๋ํด ๊ทธ๋ฃนํ -> ๊ฐ๊ฐ์ ์ฐ์ค๋ฌธ์์ ๋น๋๊ฐ ๋์ ๋จ์ด๋ฅผ ์ถ์ถํ๊ธฐ ์ํด ์ํ
slice_max(n, # ๋จ์ด์ ๋น๋๊ฐ ์
๋ ฅ๋ ๋ณ์๋ช
n = 10, # ๋น๋๊ฐ ๊ฐ์ฅ ๋์ 10๊ฐ์ ๋จ์ด ์ถ์ถ
with_ties = F) # ๋น๋๊ฐ ๋์ผํ๋๋ผ๋ ์ต์
n์ ์ง์ ํ ๊ฐ์๋งํผ๋ง ๋จ์ด ์ถ์ถ
top10
# A tibble: 20 ร 3
# Groups: president [2]
president word n
<chr> <chr> <int>
1 moon ์ผ์๋ฆฌ 21
2 moon ๋๋ผ 19
3 moon ์ฐ๋ฆฌ 17
4 moon ๊ฒฝ์ 15
5 moon ์ฌํ 14
6 moon ์ฑ์ฅ 13
7 moon ๋ํต๋ น 12
8 moon ์ ์น 12
9 moon ํ๊ฒ 12
10 moon ๋ํ๋ฏผ๊ตญ 11
11 park ํ๋ณต 23
12 park ์ฌ๋ฌ๋ถ 20
13 park ์ ๋ถ 17
14 park ๊ฒฝ์ 15
15 park ์ ๋ขฐ 11
16 park ๊ตญ๊ฐ 10
17 park ์ฐ๋ฆฌ 10
18 park ๊ต์ก 9
19 park ์ฌ๋ 9
20 park ์ฌํ 9
ggplot(top10, # "๊ตญ๋ฏผ" ์ ์ธํ๊ณ ์์ฃผ ์ฌ์ฉํ ์์ 10๊ฐ ๋จ์ด๊ฐ ์ ์ฅ๋์ด ์๋ ๊ฐ์ฒด
aes(x = reorder(word, n), # reorder : top10์์ ๋จ์ด์ ๋ฐ๋ฅธ ํ๊ท ์ฌ์ฉ ๋น๋๋ฅผ ์ด์ฉํ์ฌ ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ
y = n,
fill = president)) + # ๋ํต๋ น์ ๋ฐ๋ผ ๋ง๋ ์๊น ๋ค๋ฅด๊ฒ ํํ
geom_col() + # ๋ง๋ ๊ทธ๋ํ
coord_flip() + # ๋ง๋๋ฅผ ๊ฐ๋ก๋ก ํ์
facet_wrap(~president, # ๋ณ์ president์ ํญ๋ชฉ๋ณ๋ก ๊ทธ๋ํ ์์ฑ -> ๋ ์ ๋ํต๋ น ๊ฐ๊ฐ์ ๋ง๋ ๊ทธ๋ํ ์์ฑ
scales = "free_y") # y์ถ ํต์ผ X
Result!
๊ทธ๋ํ๋ฅผ ๋ณด๋ฉด x์ถ์ ์ง์ ํ ๋ ํจ์ reorder
๋ฅผ ์ฌ์ฉํ์ฌ๋ ๋ง๋๊ฐ ๋น๋ ๊ธฐ์ค์ผ๋ก ์๋ฒฝํ๊ฒ ์ ๋ ฌ๋์ง ์์๋ค. ์ด๋ ๊ทธ๋ํ๋ฅผ ์์ฑํ ๋ ๊ฐ์ฒด โtop10โ์์ ๋จ์ด์ ๋ฐ๋ฅธ ํ๊ท ์ฌ์ฉ ๋น๋๋ฅผ ๊ธฐ์ค์ผ๋ก x์ถ ์์๋ฅผ ์ ํ๊ธฐ ๋๋ฌธ์ด๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด Package "tidytext"
์ ํจ์ reorder_within(x, by, within)
๋ฅผ ์ฌ์ฉํ๋ค.
x
: x์ถ์ ๋ํ๋ผ ๋ณ์๋ช
by
: ์ ๋ ฌ ๊ธฐ์ค์ผ๋ก ๋จ์ด์ ๋น๋๊ฐ ์
๋ ฅ๋ ๋ณ์๋ช
within
: ๊ทธ๋ํ๋ฅผ ๋๋๋ ๊ธฐ์ค# ํญ๋ชฉ๋ณ๋ก ๋จ์ด ๋น๋๋ฅผ ์ ๋ ฌํ ๋ง๋ ๊ทธ๋ํ
ggplot(top10, # "๊ตญ๋ฏผ" ์ ์ธํ๊ณ ์์ฃผ ์ฌ์ฉํ ์์ 10๊ฐ ๋จ์ด๊ฐ ์ ์ฅ๋์ด ์๋ ๊ฐ์ฒด
aes(x = reorder_within(word, n, president), # reorder_within : ํญ๋ชฉ๋ณ๋ก ๋จ์ด ๋น๋์ ์ ๋ ฌ
y = n,
fill = president)) + # ๋ํต๋ น์ ๋ฐ๋ผ ๋ง๋ ์๊น ๋ค๋ฅด๊ฒ ํํ
geom_col() + # ๋ง๋ ๊ทธ๋ํ
coord_flip() + # ๋ง๋๋ฅผ ๊ฐ๋ก๋ก ํ์
facet_wrap(~president, # ๋ณ์ president์ ํญ๋ชฉ๋ณ๋ก ๊ทธ๋ํ ์์ฑ -> ๋ ์ ๋ํต๋ น ๊ฐ๊ฐ์ ๋ง๋ ๊ทธ๋ํ ์์ฑ
scales = "free_y") # y์ถ ํต์ผ X
# ๋จ์ด ๋ค์ ํญ๋ชฉ ์ด๋ฆ์ ์ ๊ฑฐํ ๋ง๋ ๊ทธ๋ํ
ggplot(top10, # "๊ตญ๋ฏผ" ์ ์ธํ๊ณ ์์ฃผ ์ฌ์ฉํ ์์ 10๊ฐ ๋จ์ด๊ฐ ์ ์ฅ๋์ด ์๋ ๊ฐ์ฒด
aes(x = reorder_within(word, n, president), # reorder_within : ํญ๋ชฉ๋ณ๋ก ๋จ์ด ๋น๋์ ์ ๋ ฌ
y = n,
fill = president)) + # ๋ํต๋ น์ ๋ฐ๋ผ ๋ง๋ ์๊น ๋ค๋ฅด๊ฒ ํํ
geom_col() + # ๋ง๋ ๊ทธ๋ํ
coord_flip() + # ๋ง๋๋ฅผ ๊ฐ๋ก๋ก ํ์
facet_wrap(~president, # ๋ณ์ president์ ํญ๋ชฉ๋ณ๋ก ๊ทธ๋ํ ์์ฑ -> ๋ ์ ๋ํต๋ น ๊ฐ๊ฐ์ ๋ง๋ ๊ทธ๋ํ ์์ฑ
scales = "free_y") + # y์ถ ํต์ผ X
scale_x_reordered() # ๋จ์ด ๋ค์ ๋ํต๋ น ์ด๋ฆ ์ ๊ฑฐ
๋ณดํธ์ ์ผ๋ก ์์ฃผ ์ฌ์ฉ
ํ๊ณ ๋ณ๋ค๋ฅธ ํน์ง์ด ์๊ธฐ ๋๋ฌธ์ ํ
์คํธ์ ์ฐจ์ด๋ฅผ ์ ๋๋ฌ๋ด์ง ๋ชปํ๋ค.
ํน์ ํ
์คํธ์์๋ง ๋ง์ด ์ฌ์ฉ
ํ๊ณ ๋ค๋ฅธ ํ
์คํธ์์๋ ์ ๊ฒ ์ฌ์ฉํ ๋จ์ด
, ์ฆ, '์๋์ ์ผ๋ก ๋ง์ด ์ฌ์ฉํ ๋จ์ด'
๋ฅผ ์ดํด๋ด์ผ ํ๋ค."frequency"
๋ ๋ณ์ president
๊ฐ โmoonโ์ธ ํ๊ณผ โparkโ์ธ ํ์ด ์ธ๋ก๋ก ๊ธธ๊ฒ ๋์ด๋ ํํ์ด๋ค.
# Long Form Dataset
df_long <- frequency %>% # ๋จ์ด ๋น๋๊ฐ ์ ์ฅ๋์ด ์๋ ๊ฐ์ฒด in 1-1
group_by(president) %>% # ๋ณ์ president์ ๋ํด ๊ทธ๋ฃนํ -> ๊ฐ๊ฐ์ ์ฐ์ค๋ฌธ์์ ๋น๋๊ฐ ๋์ ๋จ์ด๋ฅผ ์ถ์ถํ๊ธฐ ์ํด ์ํ
slice_max(n, # ๋จ์ด์ ๋น๋๊ฐ ์
๋ ฅ๋ ๋ณ์๋ช
n = 10) %>% # ๋น๋๊ฐ ๊ฐ์ฅ ๋์ 10๊ฐ์ ๋จ์ด ์ถ์ถ
filter(word %in% c("๊ตญ๋ฏผ", "์ฐ๋ฆฌ", # "๊ตญ๋ฏผ", "์ฐ๋ฆฌ", "์ ์น", "ํ๋ณต" ๋จ์ด๋ง ์ถ์ถ
"์ ์น", "ํ๋ณต"))
df_long
# A tibble: 6 ร 3
# Groups: president [2]
president word n
<chr> <chr> <int>
1 moon ๊ตญ๋ฏผ 21
2 moon ์ฐ๋ฆฌ 17
3 moon ์ ์น 12
4 park ๊ตญ๋ฏผ 72
5 park ํ๋ณต 23
6 park ์ฐ๋ฆฌ 10
Result!
์๋ฅผ ์ํด โ๊ตญ๋ฏผโ, โ์ฐ๋ฆฌโ, โ์ ์นโ, โํ๋ณตโ ๋จ์ด๋ง ์ถ์ถํ์ฌ Long Form ๋ฐ์ดํฐ์
์ผ๋ก ๋ํ๋ด์๋ค. โ๊ตญ๋ฏผโ์ ์ฒซ ๋ฒ์งธ ํ์ ํตํด ๋ฌธ์ฌ์ธ ์ ๋ํต๋ น์ ์ฐ์ค๋ฌธ์์ 21๋ฒ ์ฌ์ฉํ์์ผ๋ฉฐ, ๋ค ๋ฒ์งธ ํ์ ํตํด ๋ฐ๊ทผํ ์ ๋ํต๋ น์ ์ฐ์ค๋ฌธ์์ 72๋ฒ ์ฌ์ฉํ์์์ ์ ์ ์๋ค. โ์ฐ๋ฆฌโ๋ ๋ ๋ฒ์งธ ํ๊ณผ ์ฌ์ฏ ๋ฒ์งธ ํ์ ํตํด ๊ฐ๊ฐ์ ์ฐ์ค๋ฌธ์์ ๋ช ๋ฒ ์ฌ์ฉํ์๋์ง ์ ์ ์๋ค. ์ด์ฒ๋ผ Long Form ๋ฐ์ดํฐ์
์ ๊ฐ์ ๋จ์ด๊ฐ ํญ๋ชฉ๋ณ๋ก ๋ค๋ฅธ ํ
์ ๊ตฌ์ฑํ๊ธฐ ๋๋ฌธ์ ๊ฐ ํญ๋ชฉ์์ ํด๋น ๋จ์ด๋ฅผ ๋ช ๋ฒ์ฉ ์ฌ์ฉํ์๋์ง ํ ๋ฒ์ ๋น๊ตํ๊ธฐ ์ด๋ ต๊ณ , ๋จ์ด ๋น๋๋ฅผ ํ์ฉํด ์ฐ์ฐํ๊ธฐ๋ ๋ถํธํ๋ค.
# Wide Form Dataset์ผ๋ก ๋ณํ
df_wide <- df_long %>% # Long Form Dataset
pivot_wider(names_from = president, # ๋ณ์๋ช
์ผ๋ก ์
๋ ฅํ ๊ฐ์ด ๋ค์ด ์๋ ๋ณ์
values_from = n) # ๋ณ์์ ์ฑ์ ๋ฃ์ ๊ฐ์ด ๋ค์ด ์๋ ๋ณ์
df_wide
# A tibble: 4 ร 3
word moon park
<chr> <int> <int>
1 ๊ตญ๋ฏผ 21 72
2 ์ฐ๋ฆฌ 17 10
3 ์ ์น 12 NA
4 ํ๋ณต NA 23
Result!
Wide Form ๋ฐ์ดํฐ์
์ผ๋ก ๋ณํํ๊ธฐ ์ํด Package "tidyr"
์์ ์ ๊ณตํ๋ ํจ์ pivot_wider
๋ฅผ ์ฌ์ฉํ๋ค. Wide Form ๋ฐ์ดํฐ์
์ ํ ๋จ์ด๊ฐ ํ ํ์ผ๋ก ๊ตฌ์ฑ๋์ด์์ผ๋ฉฐ, ๋ ์ฐ์ค๋ฌธ์์ โ๊ตญ๋ฏผโ, โ์ฐ๋ฆฌโ, โ์ ์นโ, โํ๋ณตโ์ ๋ช ๋ฒ์ฉ ์ฌ์ฉํ์๋์ง ์ฝ๊ฒ ๋น๊ตํ ์ ์๋ค.
Caution!
์์์ ์คํํ ์ฝ๋์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด, ๊ฒฐ์ธก์น NA
๊ฐ ์กด์ฌํ๋ค. ์ด๋ค ๋จ์ด๊ฐ ๋ ์ฐ์ค๋ฌธ ์ค ํ ์ฐ์ค๋ฌธ์ ์กด์ฌํ์ง ์์ผ๋ฉด ๋จ์ด์ ๋น๋๊ฐ ๊ณ์ฐ๋์ง ์์ผ๋ฏ๋ก ๋ณ์ n
์ ๊ฐ์ด ์์ด์ NA
๊ฐ ๋๋ค. ๊ฒฐ์ธก์น NA
๋ ์ฐ์ฐํ ์ ์์ผ๋ฏ๋ก 0
์ผ๋ก ๋ณํํด์ผ ํ๋ค. ์ด๋ฌํ ์์
์ ํจ์ pivot_wider
์ ์ต์
values_fill = list(n = 0)
์ ์ง์ ํ๋ฉด ๋๋ค.
df_wide <- df_long %>% # Long Form Dataset
pivot_wider(names_from = president, # ๋ณ์๋ช
์ผ๋ก ์
๋ ฅํ ๊ฐ์ด ๋ค์ด ์๋ ๋ณ์
values_from = n, # ๋ณ์์ ์ฑ์ ๋ฃ์ ๊ฐ์ด ๋ค์ด ์๋ ๋ณ์
values_fill = list(n = 0)) # ๊ฒฐ์ธก์น NA๋ฅผ 0์ผ๋ก ๋์ฒด
df_wide
# A tibble: 4 ร 3
word moon park
<chr> <int> <int>
1 ๊ตญ๋ฏผ 21 72
2 ์ฐ๋ฆฌ 17 10
3 ์ ์น 12 0
4 ํ๋ณต 0 23
# ๋ ์ฐ์ค๋ฌธ์์ ์ฌ์ฉํ ๋ชจ๋ ๋จ์ด์ ๋น๋๋ฅผ ์ด์ฉํ์ฌ Wide Form ํํ๋ก ๋ณํ
frequency_wide <- frequency %>% # ๋จ์ด ๋น๋๊ฐ ์ ์ฅ๋์ด ์๋ ๊ฐ์ฒด in 1-1
pivot_wider(names_from = president, # ๋ณ์๋ช
์ผ๋ก ์
๋ ฅํ ๊ฐ์ด ๋ค์ด ์๋ ๋ณ์
values_from = n, # ๋ณ์์ ์ฑ์ ๋ฃ์ ๊ฐ์ด ๋ค์ด ์๋ ๋ณ์
values_fill = list(n = 0)) # ๊ฒฐ์ธก์น NA๋ฅผ 0์ผ๋ก ๋์ฒด
frequency_wide
# A tibble: 955 ร 3
word moon park
<chr> <int> <int>
1 ๊ฐ๋ 1 0
2 ๊ฐ์ฌ 1 0
3 ๊ฐ์ด 2 0
4 ๊ฐ์กฑ 1 1
5 ๊ฐ์กฑ๊ตฌ์กฐ 1 0
6 ๊ฐ์ง 4 0
7 ๊ฐ์น 3 1
8 ๊ฐ์ข
1 0
9 ๊ฐ๋น 1 0
10 ๊ฐ๋ ฅ 3 0
# โน 945 more rows
Result!
๋ ์ฐ์ค๋ฌธ์์ ์ฌ์ฉํ ๋ชจ๋ ๋จ์ด์ ๋ํ Wide Form ๋ฐ์ดํฐ์
์ ์์ฑํ์๋ค.
\[ \begin{align*} \text{Odds ratio} = \frac{\left( \frac{n+1}{\text{total}+1} \right)_{\text{Text A}} }{ \left( \frac{n+1}{\text{total}+1} \right)_{\text{Text B}} } \end{align*} \]
\[ \begin{align*} \text{ํด๋น ๋จ์ด์ ๋น์ค} = \frac{\text{ํด๋น ๋จ์ด์ ๋น๋} }{ \text{๋ชจ๋ ๋จ์ด์ ๋น๋ ํฉ} } \end{align*} \]
๋น๋๊ฐ 0๋ณด๋ค ํฐ ๊ฐ์ด ๋๋๋ก ๋ชจ๋ ๊ฐ์ 1
์ ๋ํ๋ค.odds_df <- frequency_wide %>% # Wide Form Dataset in 2-1
mutate(ratio_moon = ((moon + 1)/(sum(moon + 1))), # ๋ฌธ์ฌ์ธ ์ ๋ํต๋ น์ ์ฐ์ค๋ฌธ์์ ๋จ์ด์ ๋น์ค ๊ณ์ฐ
ratio_park = ((park + 1)/(sum(park + 1)))) # ๋ฐ๊ทผํ ์ ๋ํต๋ น์ ์ฐ์ค๋ฌธ์์ ๋จ์ด์ ๋น์ค ๊ณ์ฐ
odds_df
# A tibble: 955 ร 5
word moon park ratio_moon ratio_park
<chr> <int> <int> <dbl> <dbl>
1 ๊ฐ๋ 1 0 0.000873 0.000552
2 ๊ฐ์ฌ 1 0 0.000873 0.000552
3 ๊ฐ์ด 2 0 0.00131 0.000552
4 ๊ฐ์กฑ 1 1 0.000873 0.00110
5 ๊ฐ์กฑ๊ตฌ์กฐ 1 0 0.000873 0.000552
6 ๊ฐ์ง 4 0 0.00218 0.000552
7 ๊ฐ์น 3 1 0.00175 0.00110
8 ๊ฐ์ข
1 0 0.000873 0.000552
9 ๊ฐ๋น 1 0 0.000873 0.000552
10 ๊ฐ๋ ฅ 3 0 0.00175 0.000552
# โน 945 more rows
Result!
โ๊ฐ๋โ์ ๋ฐ๊ทผํ ์ ๋ํต๋ น์ ์ฐ์ค๋ฌธ์์ ์ฌ์ฉ๋์ง ์์ ๋น๋๊ฐ 0์ด์ง๋ง ๊ฐ์ 1์ ๋ํ์ฌ ๊ณ์ฐํ๋ฏ๋ก์จ ๋จ์ด์ ๋น์ค์ด 0.000552๋ก ๊ณ์ฐ๋์๋ค.
odds_df <- odds_df %>%
mutate(odds_ratio = ratio_moon/ratio_park) # ์ค์ฆ๋น ๊ณ์ฐ / ๋ฐ๊ทผํ ์ ๋ํต๋ น์ ์ฐ์ค๋ฌธ์ ๋นํด ๋ฌธ์ฌ์ธ ์ ๋ํต๋ น์ ์ฐ์ค๋ฌธ์์ ์ผ๋ง๋ ๋น์ค์ด ๋ ํฐ์ง๋ฅผ ๋ํ๋
# ๋ฌธ์ฌ์ธ ์ ๋ํต๋ น์ ์ฐ์ค๋ฌธ์์ ์๋์ ๋น์ค์ด ํฐ ๋จ์ด
odds_df %>%
arrange(desc(odds_ratio)) # ์ค์ฆ๋น๋ฅผ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ
# A tibble: 955 ร 6
word moon park ratio_moon ratio_park odds_ratio
<chr> <int> <int> <dbl> <dbl> <dbl>
1 ๋ณต์ง๊ตญ๊ฐ 8 0 0.00393 0.000552 7.12
2 ์ธ์ 6 0 0.00306 0.000552 5.54
3 ์ฌ์ฑ 6 0 0.00306 0.000552 5.54
4 ์ ์ 6 0 0.00306 0.000552 5.54
5 ๊ฐ์ 5 0 0.00262 0.000552 4.75
6 ๊ณตํ 5 0 0.00262 0.000552 4.75
7 ๋ํต๋ น์ 5 0 0.00262 0.000552 4.75
8 ๋ณดํต 5 0 0.00262 0.000552 4.75
9 ์์ 5 0 0.00262 0.000552 4.75
10 ์ง๋ฐฉ 5 0 0.00262 0.000552 4.75
# โน 945 more rows
Result!
๋ฌธ์ฌ์ธ ์ ๋ํต๋ น์ ์ฐ์ค๋ฌธ์์ ์๋์ ์ผ๋ก ๋ง์ด ์ฌ์ฉํ ๋จ์ด์ผ์๋ก ์ค์ฆ๋น๊ฐ ํฌ๋ค. ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด, โ๋ณต์ง๊ตญ๊ฐโ๊ฐ 7.12๋ก ์ค์ฆ๋น๊ฐ ์ ์ผ ํฌ๋ฉฐ, ์ด๋ ๋ฐ๊ทผํ ์ ๋ํต๋ น์ ์ฐ์ค๋ฌธ์ ๋นํด ๋ฌธ์ฌ์ธ ์ ๋ํต๋ น์ ์ฐ์ค๋ฌธ์์ ์๋์ ์ผ๋ก ๋ง์ด ์ฌ์ฉํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
# ๋ฐ๊ทผํ ์ ๋ํต๋ น์ ์ฐ์ค๋ฌธ์์ ์๋์ ๋น์ค์ด ํฐ ๋จ์ด
odds_df %>%
arrange(odds_ratio) # ์ค์ฆ๋น๋ฅผ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ
# A tibble: 955 ร 6
word moon park ratio_moon ratio_park odds_ratio
<chr> <int> <int> <dbl> <dbl> <dbl>
1 ๋ฐ๊ทผํ 0 8 0.000436 0.00496 0.0879
2 ์ฌ๋ฌ๋ถ 2 20 0.00131 0.0116 0.113
3 ํ๋ณต 3 23 0.00175 0.0132 0.132
4 ์ค์ฒ 0 5 0.000436 0.00331 0.132
5 ์ ๋ณด 0 5 0.000436 0.00331 0.132
6 ํฌ๋ช
0 5 0.000436 0.00331 0.132
7 ๊ณผ์ 0 4 0.000436 0.00276 0.158
8 ๊ตญ์ ์ด์ 0 4 0.000436 0.00276 0.158
9 ์์ 0 4 0.000436 0.00276 0.158
10 ์ง์ 0 4 0.000436 0.00276 0.158
# โน 945 more rows
Result!
๋ฐ๊ทผํ ์ ๋ํต๋ น์ ์ฐ์ค๋ฌธ์์ ์๋์ ์ผ๋ก ๋ง์ด ์ฌ์ฉํ ๋จ์ด์ผ์๋ก ์ค์ฆ๋น๊ฐ ์๋ค. ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด, โ๋ฐ๊ทผํโ๊ฐ 0.0879๋ก ์ค์ฆ๋น๊ฐ ์ ์ผ ์์ผ๋ฉฐ, ์ด๋ ๋ฌธ์ฌ์ธ ์ ๋ํต๋ น์ ์ฐ์ค๋ฌธ์ ๋นํด ๋ฐ๊ทผํ ์ ๋ํต๋ น์ ์ฐ์ค๋ฌธ์์ ์๋์ ์ผ๋ก ๋ง์ด ์ฌ์ฉํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
## ์ค์ฆ๋น ๋ณ์ ํ ๋ฒ์ ์ถ๊ฐ
odds_df <- frequency_wide %>% # Wide Form Dataset in 2-1
mutate(ratio_moon = ((moon + 1)/(sum(moon + 1))), # ๋ฌธ์ฌ์ธ ์ ๋ํต๋ น์ ์ฐ์ค๋ฌธ์์ ๋จ์ด์ ๋น์ค ๊ณ์ฐ
ratio_park = ((park + 1)/(sum(park + 1))), # ๋ฐ๊ทผํ ์ ๋ํต๋ น์ ์ฐ์ค๋ฌธ์์ ๋จ์ด์ ๋น์ค ๊ณ์ฐ
odds_ratio = ratio_moon/ratio_park) # ์ค์ฆ๋น ๊ณ์ฐ / ๋ฐ๊ทผํ ์ ๋ํต๋ น์ ์ฐ์ค๋ฌธ์ ๋นํด ๋ฌธ์ฌ์ธ ์ ๋ํต๋ น์ ์ฐ์ค๋ฌธ์์ ์ผ๋ง๋ ๋น์ค์ด ๋ ํฐ์ง๋ฅผ ๋ํ๋
odds_df
# A tibble: 955 ร 6
word moon park ratio_moon ratio_park odds_ratio
<chr> <int> <int> <dbl> <dbl> <dbl>
1 ๊ฐ๋ 1 0 0.000873 0.000552 1.58
2 ๊ฐ์ฌ 1 0 0.000873 0.000552 1.58
3 ๊ฐ์ด 2 0 0.00131 0.000552 2.37
4 ๊ฐ์กฑ 1 1 0.000873 0.00110 0.791
5 ๊ฐ์กฑ๊ตฌ์กฐ 1 0 0.000873 0.000552 1.58
6 ๊ฐ์ง 4 0 0.00218 0.000552 3.96
7 ๊ฐ์น 3 1 0.00175 0.00110 1.58
8 ๊ฐ์ข
1 0 0.000873 0.000552 1.58
9 ๊ฐ๋น 1 0 0.000873 0.000552 1.58
10 ๊ฐ๋ ฅ 3 0 0.00175 0.000552 3.17
# โน 945 more rows
top10 <- odds_df %>% # ์ค์ฆ๋น๋ฅผ ๊ณ์ฐํ ๊ฒฐ๊ณผ๊ฐ ์ ์ฅ๋์ด ์๋ ๊ฐ์ฒด in 2-2-2
filter(rank(odds_ratio) <= 10 | # ์ค์ฆ๋น๊ฐ ๋ฎ์ ํ์ 10๊ฐ์ ๋จ์ด ์ถ์ถ
rank(-odds_ratio) <= 10) # ์ค์ฆ๋น๊ฐ ๋์ ์์ 10๊ฐ์ ๋จ์ด ์ถ์ถ
top10 %>%
arrange(desc(odds_ratio)) %>% # ์ค์ฆ๋น๋ฅผ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ
print(n = Inf) # ๋ชจ๋ ํ ์ถ๋ ฅ
# A tibble: 20 ร 6
word moon park ratio_moon ratio_park odds_ratio
<chr> <int> <int> <dbl> <dbl> <dbl>
1 ๋ณต์ง๊ตญ๊ฐ 8 0 0.00393 0.000552 7.12
2 ์ธ์ 6 0 0.00306 0.000552 5.54
3 ์ฌ์ฑ 6 0 0.00306 0.000552 5.54
4 ์ ์ 6 0 0.00306 0.000552 5.54
5 ๊ฐ์ 5 0 0.00262 0.000552 4.75
6 ๊ณตํ 5 0 0.00262 0.000552 4.75
7 ๋ํต๋ น์ 5 0 0.00262 0.000552 4.75
8 ๋ณดํต 5 0 0.00262 0.000552 4.75
9 ์์ 5 0 0.00262 0.000552 4.75
10 ์ง๋ฐฉ 5 0 0.00262 0.000552 4.75
11 ๊ณผ์ 0 4 0.000436 0.00276 0.158
12 ๊ตญ์ ์ด์ 0 4 0.000436 0.00276 0.158
13 ์์ 0 4 0.000436 0.00276 0.158
14 ์ง์ 0 4 0.000436 0.00276 0.158
15 ํ๋ณต 3 23 0.00175 0.0132 0.132
16 ์ค์ฒ 0 5 0.000436 0.00331 0.132
17 ์ ๋ณด 0 5 0.000436 0.00331 0.132
18 ํฌ๋ช
0 5 0.000436 0.00331 0.132
19 ์ฌ๋ฌ๋ถ 2 20 0.00131 0.0116 0.113
20 ๋ฐ๊ทผํ 0 8 0.000436 0.00496 0.0879
Result!
ํจ์ filter
๋ ์กฐ๊ฑด์ ๋ง๋ ํ๋ง ์ถ์ถํ๋ ํจ์์ด๋ฉฐ, ํจ์ rank
๋ ๊ฐ์ ์์๋ฅผ ๊ตฌํ๋ ํจ์์ด๋ค. ์ด ๋ ํจ์๋ฅผ ์ด์ฉํ์ฌ ์ค์ฆ๋น๊ฐ ๋์ ์์ 10๊ฐ์ ํ์ 10๊ฐ์ ๋จ์ด๋ฅผ ์ถ์ถํ ์ ์๋ค.
๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด, ์ถ์ถํ ๋จ์ด ์์ 10๊ฐ๋ ๋ฌธ์ฌ์ธ ์ ๋ํต๋ น์ ์ฐ์ค๋ฌธ์์ ๋ ์์ฃผ ์ฌ์ฉํ์ฌ ์ค์ฆ๋น๊ฐ ๋์ ๋จ์ด์ด๋ค. โ๋ณต์ง๊ตญ๊ฐโ, โ์ฌ์ฑโ, โ๊ณตํโ ๊ฐ์ ๋จ์ด๋ฅผ ์์ฃผ ์ฌ์ฉํจ์ผ๋ก์จ ๋ฌธ์ฌ์ธ ์ ๋ํต๋ น์ด ๋ฐ๊ทผํ ์ ๋ํต๋ น๋ณด๋ค ๋ณต์ง์ ํ๋ฑ์ ๋ ๊ฐ์กฐํ๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
๋ฐ๋๋ก, ํ์ 10๊ฐ๋ ๋ฐ๊ทผํ ์ ๋ํต๋ น์ ์ฐ์ค๋ฌธ์์ ๋ ์์ฃผ ์ฌ์ฉํ์ฌ ์ค์ฆ๋น๊ฐ ๋ฎ์ ๋จ์ด์ด๋ค. โ๋ฐ๊ทผํโ, โ์ฌ๋ฌ๋ถโ ๊ฐ์ ๋จ์ด๋ฅผ ๋ณด๋ฉด ๋ฐ๊ทผํ ์ ๋ํต๋ น์ด ๋ฌธ์ฌ์ธ ์ ๋ํต๋ น๋ณด๋ค ๊ฐ์ธ์ ์ ์ฒด์ฑ๊ณผ ๊ตญ๋ฏผ๊ณผ์ ์ ๋๊ฐ์ ๋ ๊ฐ์กฐํ๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
Caution!
๋จ์ด ๋น๋ ๋น๊ต์์ ๋จ์ํ ์ฌ์ฉ ๋น๋๊ฐ ๋์ ๋จ์ด๋ โ๊ตญ๋ฏผโ, โ์ฐ๋ฆฌโ, โ์ฌํโ ๊ฐ์ ๋ณดํธ์ ์ธ ๋จ์ด๋ผ ์ฐ์ค๋ฌธ์ ์ฐจ์ด๊ฐ ์ ๋๋ฌ๋์ง ์์๋ค. ๋ฐ๋ฉด, ์ค์ฆ๋น ๊ธฐ์ค์ผ๋ก ์ถ์ถํ ๋จ์ด๋ ๋ ์ฐ์ค๋ฌธ ์ค ํ์ชฝ์์ ๋น์ค์ด ๋ ํฐ ๋จ์ด์ด๋ฏ๋ก ์ด๋ฅผ ํตํด ์ฐ์ค๋ฌธ์ ์ฐจ์ด๋ฅผ ๋ถ๋ช
ํ๊ฒ ์ ์ ์๋ค.
# ๊ทธ๋ํ ์์ฑ์ ์ํ ๋ณ์ ์ถ๊ฐ
top10 <- top10 %>% # ์ค์ฆ๋น๊ฐ ๋์ ์์ 10๊ฐ์ ๋จ์ด์ ๋ฎ์ ํ์ 10๊ฐ์ ๋จ์ด๊ฐ ์ ์ฅ๋์ด ์๋ ๊ฐ์ฒด in 2-3
mutate(president = ifelse(odds_ratio > 1, "moon", "park"), # ์ค์ฆ๋น๊ฐ 1๋ณด๋ค ํฌ๋ฉด ๋ณ์ president์ "moon", ๊ทธ๋ ์ง ์์ผ๋ฉด "park" ํ ๋น -> ์ค์ฆ๋น๊ฐ 1๋ณด๋ค ํฌ๋ฉด ๋ฌธ์ฌ์ธ ์ ๋ํต๋ น์ ์ฐ์ค๋ฌธ์์ ์๋์ ๋น์ค์ด ๋๊ธฐ ๋๋ฌธ
n = ifelse(odds_ratio > 1, moon, park)) # ์ค์ฆ๋น๊ฐ 1๋ณด๋ค ํฌ๋ฉด ๋ณ์ n์ ๋ณ์ moon์ ์
๋ ฅ๋ ๊ฐ ํ ๋น, ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ณ์ park์ ์
๋ ฅ๋ ๊ฐ ํ ๋น
top10
# A tibble: 20 ร 8
word moon park ratio_moon ratio_park odds_ratio president n
<chr> <int> <int> <dbl> <dbl> <dbl> <chr> <int>
1 ๊ฐ์ 5 0 0.00262 0.000552 4.75 moon 5
2 ๊ณตํ 5 0 0.00262 0.000552 4.75 moon 5
3 ๋ํตโฆ 5 0 0.00262 0.000552 4.75 moon 5
4 ๋ณดํต 5 0 0.00262 0.000552 4.75 moon 5
5 ๋ณต์งโฆ 8 0 0.00393 0.000552 7.12 moon 8
6 ์์ 5 0 0.00262 0.000552 4.75 moon 5
7 ์ธ์ 6 0 0.00306 0.000552 5.54 moon 6
8 ์ฌ๋ฌ๋ถ 2 20 0.00131 0.0116 0.113 park 20
9 ์ฌ์ฑ 6 0 0.00306 0.000552 5.54 moon 6
10 ์ ์ 6 0 0.00306 0.000552 5.54 moon 6
11 ์ง๋ฐฉ 5 0 0.00262 0.000552 4.75 moon 5
12 ํ๋ณต 3 23 0.00175 0.0132 0.132 park 23
13 ๊ณผ์ 0 4 0.000436 0.00276 0.158 park 4
14 ๊ตญ์ โฆ 0 4 0.000436 0.00276 0.158 park 4
15 ๋ฐ๊ทผํ 0 8 0.000436 0.00496 0.0879 park 8
16 ์์ 0 4 0.000436 0.00276 0.158 park 4
17 ์ค์ฒ 0 5 0.000436 0.00331 0.132 park 5
18 ์ ๋ณด 0 5 0.000436 0.00331 0.132 park 5
19 ์ง์ 0 4 0.000436 0.00276 0.158 park 4
20 ํฌ๋ช
0 5 0.000436 0.00331 0.132 park 5
ggplot(top10,
aes(x = reorder_within(word, n, president), # reorder_within : ํญ๋ชฉ๋ณ๋ก ๋จ์ด ๋น๋์ ์ ๋ ฌ
y = n,
fill = president)) + # ๋ํต๋ น์ ๋ฐ๋ผ ๋ง๋ ์๊น ๋ค๋ฅด๊ฒ ํํ
geom_col() + # ๋ง๋ ๊ทธ๋ํ
coord_flip() + # ๋ง๋๋ฅผ ๊ฐ๋ก๋ก ํ์
facet_wrap(~president, # ๋ณ์ president์ ํญ๋ชฉ๋ณ๋ก ๊ทธ๋ํ ์์ฑ -> ๋ ์ ๋ํต๋ น ๊ฐ๊ฐ์ ๋ง๋ ๊ทธ๋ํ ์์ฑ
scales = "free_y") + # y์ถ ํต์ผ X
scale_x_reordered() # ๋จ์ด ๋ค์ ๋ํต๋ น ์ด๋ฆ ์ ๊ฑฐ
Result!
๊ทธ๋ํ๋ฅผ ๋ณด๋ฉด, ์ ๋ฐ์ ์ผ๋ก ๋ฐ๊ทผํ ์ ๋ํต๋ น์ ์ฐ์ค๋ฌธ์์ ๋จ์ด ๋น๋๊ฐ ๋์ผ๋ฉฐ ๋ฌธ์ฌ์ธ ์ ๋ํต๋ น์ ์ฐ์ค๋ฌธ์์๋ ๋ฎ์ ๊ฒ์ฒ๋ผ ๋ณด์ธ๋ค. ์ด๋ ๋ฐ๊ทผํ ์ ๋ํต๋ น์ ์ฐ์ค๋ฌธ์์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ ๋จ์ด์ธ โํ๋ณตโ์ ๋น๋๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ ๊ทธ๋ํ์ x์ถ ํฌ๊ธฐ๋ฅผ ๋๊ฐ์ด ๊ณ ์ ํ๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋ํ๋ณ๋ก x์ถ ํฌ๊ธฐ๋ฅผ ๋ค๋ฅด๊ฒ ์ ํด์ผ ๊ฐ ์ฐ์ค๋ฌธ์ ๋จ์ด ๋น์ค์ ์ ๋๋ก ์ ์ ์๋ค. ์ด๋ฅผ ์ํด ํจ์ facet_wrap
์ ์ต์
scales = "free"
์ ์ง์ ํ์ฌ x์ถ๊ณผ y์ถ์ ํฌ๊ธฐ๋ฅผ ๋ชจ๋ ๊ทธ๋ํ๋ณ๋ก ์ ํ ์ ์๋ค.
ggplot(top10,
aes(x = reorder_within(word, n, president), # reorder_within : ํญ๋ชฉ๋ณ๋ก ๋จ์ด ๋น๋์ ์ ๋ ฌ
y = n,
fill = president)) + # ๋ํต๋ น์ ๋ฐ๋ผ ๋ง๋ ์๊น ๋ค๋ฅด๊ฒ ํํ
geom_col() + # ๋ง๋ ๊ทธ๋ํ
coord_flip() + # ๋ง๋๋ฅผ ๊ฐ๋ก๋ก ํ์
facet_wrap(~president, # ๋ณ์ president์ ํญ๋ชฉ๋ณ๋ก ๊ทธ๋ํ ์์ฑ -> ๋ ์ ๋ํต๋ น ๊ฐ๊ฐ์ ๋ง๋ ๊ทธ๋ํ ์์ฑ
scales = "free") + # x์ถ๊ณผ y์ถ ํต์ผ X
scale_x_reordered() # ๋จ์ด ๋ค์ ๋ํต๋ น ์ด๋ฆ ์ ๊ฑฐ
Result!
๊ทธ๋ํ๋ฅผ ๋ณด๋ฉด, ๊ฐ ์ฐ์ค๋ฌธ์์ ๋ง์ด ์ฌ์ฉํ ๋จ์ด โ๋ณต์ง๊ตญ๊ฐโ์ โํ๋ณตโ์ ๋ง๋ ๊ธธ์ด๋ ๊ฐ์ง๋ง ๋น๋๊ฐ ๋ค๋ฅด๋ค. ์ด์ฒ๋ผ x์ถ ํฌ๊ธฐ๊ฐ ๊ทธ๋ํ๋ง๋ค ๋ค๋ฅด๋ฉด ๋ง๋ ๊ธธ์ด๊ฐ ๊ฐ์๋ ์ค์ ๊ฐ์ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ํด์ํ ๋ ์กฐ์ฌํด์ผ ํ๋ค.
Caution!
์ค์ฆ๋น๋ฅผ ์ด์ฉํด ๋ง๋ ๋ง๋ ๊ทธ๋ํ๋ ๊ฐ ํ
์คํธ์์ ์๋์ ์ผ๋ก ์ค์ํ ๋จ์ด๊ฐ ๋ฌด์์ธ์ง ํํํ๊ธฐ ์ํด ๋ง๋ ๋ค. ๋ง๋ ๊ธธ์ด๋ฅผ ๋ณด๊ณ ๋ ํ
์คํธ์ ๋จ์ด ๋น๋๋ฅผ ๋น๊ตํ๋ฉด ์ ๋๊ณ , ๊ฐ ํ
์คํธ์์ ์๋์ ์ผ๋ก ์ค์ํ ๋จ์ด๊ฐ ๋ฌด์์ธ์ง๋ง ์ดํด๋ด์ผ ํ๋ค.
speeches_sentence <- bind_speeches %>% # ๋ ์ฐ์ค๋ฌธ์ ์๋ฌธ์ ํ๋์ ๋ฐ์ดํฐ์
์ผ๋ก ๊ฒฐํฉํ Dataset in 1
as_tibble() %>% # Tibble ํํ๋ก ๋ณํ
unnest_tokens(input = value, # ํ ํฐํ๋ฅผ ์ํํ ํ
์คํธ๊ฐ ํฌํจ๋ ๋ณ์๋ช
output = sentence, # ์ถ๋ ฅ ๋ณ์๋ช
token = "sentences") # ๋ฌธ์ฅ ๊ธฐ์ค์ผ๋ก ํ ํฐํ
head(speeches_sentence) # ํ ํฐํ ๊ฒฐ๊ณผ ์๋ถ๋ถ ์ถ๋ ฅ
# A tibble: 6 ร 2
president sentence
<chr> <chr>
1 moon "์ ๊ถ๊ต์ฒด ํ๊ฒ ์ต๋๋ค!"
2 moon "์ ์น๊ต์ฒด ํ๊ฒ ์ต๋๋ค!"
3 moon "์๋๊ต์ฒด ํ๊ฒ ์ต๋๋ค!"
4 moon ""
5 moon "โ๋ถ๋น๋ถ๋ช
(ไธ้ฃไธ้ณด)โ์ด๋ผ๋ ๊ณ ์ฌ๊ฐ ์์ต๋๋ค."
6 moon "๋จ์ชฝ ์ธ๋ ๋๋ญ๊ฐ์ง์ ์์, 3๋
๋์ ๋ ์ง๋ ์ธ์ง๋ ์๋ โฆ
tail(speeches_sentence) # ํ ํฐํ ๊ฒฐ๊ณผ ๋ท๋ถ๋ถ ์ถ๋ ฅ
# A tibble: 6 ร 2
president sentence
<chr> <chr>
1 park ๊ตญ๋ฏผ ์ฌ๋ฌ๋ถ์ ํ๋ณต์ด ๊ณง ์ ์ ํ๋ณต์
๋๋ค.
2 park ์ฌ๋ํ๋ ์กฐ๊ตญ ๋ํ๋ฏผ๊ตญ๊ณผ ๊ตญ๋ฏผ ์ฌ๋ฌ๋ถ์ ์ํด, ์์ผ๋ก ๋จธ๋ โฆ
3 park ๊ทธ ๊ธธ์ ํจ๊ป ํด์ฃผ์๊ธธ ๋ถํ๋๋ฆฝ๋๋ค.
4 park ๊ฐ์ฌํฉ๋๋ค.
5 park 2012๋
7์ 10์ผ
6 park ์๋๋ฆฌ๋น ์๋นํ๋ณด ๋ฐ๊ทผํ
speeches_sentence %>%
filter(president == "moon" & str_detect(sentence, "๋ณต์ง๊ตญ๊ฐ")) # ๋ฌธ์ฌ์ธ ์ ๋ํต๋ น์ ์ฐ์ค๋ฌธ์์ "๋ณต์ง๊ตญ๊ฐ"๊ฐ ํฌํจ๋ ๋ฌธ์ฅ ์ถ์ถ
# A tibble: 8 ร 2
president sentence
<chr> <chr>
1 moon โ๊ฐํ ๋ณต์ง๊ตญ๊ฐโ๋ฅผ ํฅํด ๋ด๋ํ๊ฒ ๋์๊ฐ๊ฒ ์ต๋๋ค.
2 moon 2๋ฐฑ ๋
์ ์ด์ ๊ฐ์ ์๋์ฌ๋ถ๋ฐฐ, ๋ณต์ง๊ตญ๊ฐ์ ์ฌ์์ ๊ฐ์ง ์โฆ
3 moon ์ด์ ์ฐ๋ฆฌ๋ ๋ณต์ง๊ตญ๊ฐ๋ฅผ ํฅํด ๋ด๋ํ๊ฒ ๋์๊ฐ ๋์
๋๋ค.
4 moon ๋ถ์๊ฐ์ธ, 4๋๊ฐ ์ฌ์
๊ฐ์ ์๋์ฐฉ์ค์ ๊ณผ์ค๋ฅผ ์ฒญ์ฐํ๊ณ , ํโฆ
5 moon ์ฐ๋ฆฌ๋ ์ง๊ธ ๋ณต์ง๊ตญ๊ฐ๋ก ๊ฐ๋๋, ์๊ทนํ์ ๋ถ์ด๋ ๊ตญ๊ฐ๋ก ๊ฐโฆ
6 moon ๊ฐํ ๋ณต์ง๊ตญ๊ฐ์ผ์๋ก ๊ตญ๊ฐ ๊ฒฝ์๋ ฅ๋ ๋ ๋์ต๋๋ค.
7 moon ๊ฒฐ๊ตญ ๋ณต์ง๊ตญ๊ฐ๋ก ๊ฐ๋ ๊ธธ์ ์ฌ๋์ ๋ํ ํฌ์, ์ผ์๋ฆฌ ์ฐฝ์ถ, โฆ
8 moon ์ฐ๋ฆฌ๋ ๊ณผ๊ฐํ ๊ฐํ ๋ณดํธ์ ๋ณต์ง๊ตญ๊ฐ๋ก ๊ฐ์ผ ํฉ๋๋ค.
speeches_sentence %>%
filter(president == "park" & str_detect(sentence, "ํ๋ณต")) # ๋ฐ๊ทผํ ์ ๋ํต๋ น์ ์ฐ์ค๋ฌธ์์ "ํ๋ณต"์ด ํฌํจ๋ ๋ฌธ์ฅ ์ถ์ถ
# A tibble: 19 ร 2
president sentence
<chr> <chr>
1 park ์ ๋ ์ค๋, ๊ตญ๋ฏผ ํ ๋ถ ํ ๋ถ์ ๊ฟ์ด ์ด๋ฃจ์ด์ง๋ ํ๋ณตํ ๋โฆ
2 park ๊ตญ๊ฐ๋ ๋ฐ์ ํ๊ณ , ๊ฒฝ์ ๋ ์ฑ์ฅํ๋ค๋๋ฐ, ๋์ ์ถ์ ๋์์ง์งโฆ
3 park ๊ณผ๊ฑฐ์๋ ๊ตญ๊ฐ์ ๋ฐ์ ์ด ๊ตญ๋ฏผ์ ํ๋ณต์ผ๋ก ์ด์ด์ก์ต๋๋ค.
4 park ๊ฐ์ธ์ ์ฐฝ์๋ ฅ์ด ์ค์ํ ์ง์๊ธฐ๋ฐ์ฌํ์์๋ ๊ตญ๋ฏผ ํ ์ฌ๋, โฆ
5 park ์ด์ ๊ตญ์ ์ด์์ ํจ๋ฌ๋ค์์ ๊ตญ๊ฐ์์ ๊ตญ๋ฏผ์ผ๋ก, ๊ฐ์ธ์ ์ถโฆ
6 park ๊ตญ๋ฏผ ๊ฐ๊ฐ์ธ์ ๊ฟ์ ํฅํ ๋
ธ๋ ฅ์ด ๊ตญ๊ฐ๋ฅผ ๋ฐ์ ์ํค๊ณ ๊ตญ๊ฐ ๋ฐโฆ
7 park ์ ๋ โ๊ฒฝ์ ๋ฏผ์ฃผํ ์คํโ, โ์ผ์๋ฆฌ ์ฐฝ์ถโ, ๊ทธ๋ฆฌ๊ณ โํ๊ตญโฆ
8 park ๊ตญ๋ฏผํ๋ณต์ ๊ธธ์ ์ด์ด๊ฐ ์ฒซ ๋ฒ์งธ ๊ณผ์ ๋ก, ์ ๋ ๊ฒฝ์ ๋ฏผ์ฃผํ๋ฅผโฆ
9 park ๊ตญ๋ฏผํ๋ณต์ ๊ธธ์ ์ด์ด๊ฐ ๋ ๋ฒ์งธ ๊ณผ์ ๋ก, ์ ๋ ์ข์ ์ผ์๋ฆฌ โฆ
10 park ๊ตญ๋ฏผํ๋ณต์ ๊ธธ์ ์ด์ด๊ฐ ์ธ ๋ฒ์งธ ๊ณผ์ ๋ก, ์ฐ๋ฆฌ์ ์ค์ ์ ๋งโฆ
11 park ์ ๋ ๊ตญ๋ฏผํ๋ณต์ ์ํด โ๊ฒฝ์ ๋ฏผ์ฃผํ-์ผ์๋ฆฌ-๋ณต์งโ๋ฅผ ์์ฐ๋ฅดโฆ
12 park ๋ชจ๋ ๊ณ์ธต์ ๊ตญ๋ฏผ์ด ํจ๊ป ์ฐธ์ฌํด ๋ง๋ค๊ณ , ์ ๋ถ์ ๊ธฐ์
, ์ง์ญโฆ
13 park 50๋
์ ๊ฒฝ์ ๊ฐ๋ฐ 5๊ฐ๋
๊ณํ์ด ์ฐ์
ํ์ ๊ธฐ์ ์ ์ด๋ค๋๋ฏ,โฆ
14 park ์ ๋ ์ง์๊ฐ๋ฅํ ๊ตญ๋ฏผ ํ๋ณต์ ๋ง๋ค ์ ์๋๋ก,์ฌ๋์ ๋ํ โฆ
15 park ์ ๋ฐ๊ทผํ, ๊ฒฝ์๊ณผ ์
์์ ๋งค๋ชฐ๋ ๊ต์ก์โํจ๊ปํ๋ ํ๋ณต๊ตโฆ
16 park ์กด๊ฒฝํ๋ ๊ตญ๋ฏผ์ฌ๋ฌ๋ถ, ๊ตญ๋ฏผํ๋ณต์ ์ํ ๋
ธ๋ ฅ์ด ์์ ์ ์ผ๋ก โฆ
17 park ๊ตญ๋ฏผ ์ฌ๋ฌ๋ถ, ๊ตญ๋ฏผํ๋ณต์ ๊ฟ์ ์ด๋ค๋ด๊ธฐ ์ํด์๋, ๋จผ์ ์ โฆ
18 park ๊ตญ๋ฏผ๋ค์ด ๊ฟ์ผ๋ก๋ง ๊ฐ์ก๋ ํ๋ณตํ ์ถ์ ์ค์ ๋ก ์ด๋ฃฐ ์ ์๋โฆ
19 park ๊ตญ๋ฏผ ์ฌ๋ฌ๋ถ์ ํ๋ณต์ด ๊ณง ์ ์ ํ๋ณต์
๋๋ค.
Result!
ํจ์ filter
์ str_detect
๋ฅผ ์ด์ฉํ์ฌ ๊ฐ ์ฐ์ค๋ฌธ์์ ์ฃผ์ ๋จ์ด๋ฅผ ์ฌ์ฉํ ๋ฌธ์ฅ์ ์ถ์ถํ ์ ์๋ค. ์ถ์ถํ ๋ฌธ์ฅ์ ๋ณด๋ฉด ๋จ์ด๊ฐ ์ด๋ค ์๋ฏธ๋ก ์ฌ์ฉ๋์๋์ง ์ ์ ์๋ค.
odds_df %>% # ์ค์ฆ๋น๋ฅผ ๊ณ์ฐํ ๊ฒฐ๊ณผ๊ฐ ์ ์ฅ๋์ด ์๋ ๊ฐ์ฒด in 2-2-2
arrange(abs(1 - odds_ratio)) %>% # ์ค์ฆ๋น๊ฐ 1์ ๊ฐ๊น์ด ๋จ์ด์์ผ๋ก ์ ๋ ฌ
head(10) # ์์ 10๊ฐ ๋จ์ด ์ถ์ถ
# A tibble: 10 ร 6
word moon park ratio_moon ratio_park odds_ratio
<chr> <int> <int> <dbl> <dbl> <dbl>
1 ๋๋ฌธ 4 3 0.00218 0.00221 0.989
2 ๊ฐํ 3 2 0.00175 0.00165 1.06
3 ๋ถ๋ด 3 2 0.00175 0.00165 1.06
4 ์ธ๊ณ 3 2 0.00175 0.00165 1.06
5 ์ฑ
์ 3 2 0.00175 0.00165 1.06
6 ํ๋ ฅ 3 2 0.00175 0.00165 1.06
7 ๊ฑฐ๋ 2 1 0.00131 0.00110 1.19
8 ๊ต์ฒด 2 1 0.00131 0.00110 1.19
9 ๊ทผ๋ณธ์ 2 1 0.00131 0.00110 1.19
10 ๊ธฐ๋ฐ 2 1 0.00131 0.00110 1.19
Result!
์ถ๋ ฅ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด ๋๋ถ๋ถ ๋ณดํธ์ ์ธ ์๋ฏธ๋ฅผ ์ง๋๋ ๋จ์ด์ด๋ฉฐ, ์ด๋ฌํ ๋จ์ด๋ค์ ๋น๋๊ฐ ๋ฎ๊ธฐ ๋๋ฌธ์ ๊ฐ์กฐํ ๋จ์ด๋ ์๋๋ค.
# ์ค์๋๊ฐ ๋น์ทํ๋ฉด์ ๋น๋๊ฐ ๋์ ๋จ์ด ์ถ์ถ
odds_df %>% # ์ค์ฆ๋น๋ฅผ ๊ณ์ฐํ ๊ฒฐ๊ณผ๊ฐ ์ ์ฅ๋์ด ์๋ ๊ฐ์ฒด in 2-2-2
filter(moon >= 5 & park >= 5) %>% # ๋ ์ฐ์ค๋ฌธ์์ 5๋ฒ ์ด์ ์ฌ์ฉํ ๋จ์ด๋ง ์ถ์ถ
arrange(abs(1 - odds_ratio)) %>% # ์ค์ฆ๋น๊ฐ 1์ ๊ฐ๊น์ด ๋จ์ด์์ผ๋ก ์ ๋ ฌ
head(10) # ์์ 10๊ฐ ๋จ์ด ์ถ์ถ
# A tibble: 10 ร 6
word moon park ratio_moon ratio_park odds_ratio
<chr> <int> <int> <dbl> <dbl> <dbl>
1 ์ฌํ 14 9 0.00655 0.00552 1.19
2 ์ฌ๋ 9 9 0.00436 0.00552 0.791
3 ๊ฒฝ์ 15 15 0.00698 0.00883 0.791
4 ์ง์ 5 5 0.00262 0.00331 0.791
5 ์ฐ๋ฆฌ 17 10 0.00786 0.00607 1.29
6 ๋ถ์ 7 8 0.00349 0.00496 0.703
7 ์ฐ์
9 5 0.00436 0.00331 1.32
8 ๋ํ๋ฏผ๊ตญ 11 6 0.00524 0.00386 1.36
9 ๊ตญ๊ฐ 7 10 0.00349 0.00607 0.576
10 ๊ต์ก 6 9 0.00306 0.00552 0.554
Result!
๋ ์ฐ์ค๋ฌธ ๋ชจ๋ โ์ฌํโ, โ์ฌ๋โ, โ๊ฒฝ์ โ ๋ฑ์ ๊ฐ์กฐํ์์ ์ ์ ์๋ค.
logodds_df <- odds_df %>% # ์ค์ฆ๋น๋ฅผ ๊ณ์ฐํ ๊ฒฐ๊ณผ๊ฐ ์ ์ฅ๋์ด ์๋ ๊ฐ์ฒด in 2-2-2
mutate(log_odds_ratio = log(odds_ratio)) # ๋ก๊ทธ ์ค์ฆ๋น ๊ณ์ฐ
# ๋ฌธ์ฌ์ธ ์ ๋ํต๋ น์ ์ฐ์ค๋ฌธ์์ ์๋์ ๋น์ค์ด ํฐ ๋จ์ด
logodds_df %>%
arrange(desc(log_odds_ratio)) # ๋ก๊ทธ ์ค์ฆ๋น ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ
# A tibble: 955 ร 7
word moon park ratio_moon ratio_park odds_ratio log_odds_ratio
<chr> <int> <int> <dbl> <dbl> <dbl> <dbl>
1 ๋ณต์ง๊ตญโฆ 8 0 0.00393 0.000552 7.12 1.96
2 ์ธ์ 6 0 0.00306 0.000552 5.54 1.71
3 ์ฌ์ฑ 6 0 0.00306 0.000552 5.54 1.71
4 ์ ์ 6 0 0.00306 0.000552 5.54 1.71
5 ๊ฐ์ 5 0 0.00262 0.000552 4.75 1.56
6 ๊ณตํ 5 0 0.00262 0.000552 4.75 1.56
7 ๋ํต๋ นโฆ 5 0 0.00262 0.000552 4.75 1.56
8 ๋ณดํต 5 0 0.00262 0.000552 4.75 1.56
9 ์์ 5 0 0.00262 0.000552 4.75 1.56
10 ์ง๋ฐฉ 5 0 0.00262 0.000552 4.75 1.56
# โน 945 more rows
# ๋ฐ๊ทผํ ์ ๋ํต๋ น์ ์ฐ์ค๋ฌธ์์ ์๋์ ๋น์ค์ด ํฐ ๋จ์ด
logodds_df %>%
arrange(log_odds_ratio) # ๋ก๊ทธ ์ค์ฆ๋น ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
# A tibble: 955 ร 7
word moon park ratio_moon ratio_park odds_ratio log_odds_ratio
<chr> <int> <int> <dbl> <dbl> <dbl> <dbl>
1 ๋ฐ๊ทผํ 0 8 0.000436 0.00496 0.0879 -2.43
2 ์ฌ๋ฌ๋ถ 2 20 0.00131 0.0116 0.113 -2.18
3 ํ๋ณต 3 23 0.00175 0.0132 0.132 -2.03
4 ์ค์ฒ 0 5 0.000436 0.00331 0.132 -2.03
5 ์ ๋ณด 0 5 0.000436 0.00331 0.132 -2.03
6 ํฌ๋ช
0 5 0.000436 0.00331 0.132 -2.03
7 ๊ณผ์ 0 4 0.000436 0.00276 0.158 -1.84
8 ๊ตญ์ ์ดโฆ 0 4 0.000436 0.00276 0.158 -1.84
9 ์์ 0 4 0.000436 0.00276 0.158 -1.84
10 ์ง์ 0 4 0.000436 0.00276 0.158 -1.84
# โน 945 more rows
# ๋ ์ฐ์ค๋ฌธ์์ ๋น์ค์ด ๋น์ทํ ๋จ์ด
logodds_df %>%
arrange(abs(log_odds_ratio))
# A tibble: 955 ร 7
word moon park ratio_moon ratio_park odds_ratio log_odds_ratio
<chr> <int> <int> <dbl> <dbl> <dbl> <dbl>
1 ๋๋ฌธ 4 3 0.00218 0.00221 0.989 -0.0109
2 ๊ฐํ 3 2 0.00175 0.00165 1.06 0.0537
3 ๋ถ๋ด 3 2 0.00175 0.00165 1.06 0.0537
4 ์ธ๊ณ 3 2 0.00175 0.00165 1.06 0.0537
5 ์ฑ
์ 3 2 0.00175 0.00165 1.06 0.0537
6 ํ๋ ฅ 3 2 0.00175 0.00165 1.06 0.0537
7 ๊ฑฐ๋ 2 1 0.00131 0.00110 1.19 0.171
8 ๊ต์ฒด 2 1 0.00131 0.00110 1.19 0.171
9 ๊ทผ๋ณธ์ 2 1 0.00131 0.00110 1.19 0.171
10 ๊ธฐ๋ฐ 2 1 0.00131 0.00110 1.19 0.171
# โน 945 more rows
# ๊ทธ๋ํ ์์ฑ์ ์ํ ๋ณ์ ์ถ๊ฐ
top10 <- logodds_df %>% # ๋ก๊ทธ ์ค์ฆ๋น๊ฐ ์ ์ฅ๋์ด ์๋ ๊ฐ์ฒด in 3-1
group_by(president = ifelse(log_odds_ratio > 0, "moon", "park")) %>% # ๋ก๊ทธ ์ค์ฆ๋น๊ฐ ์์์ด๋ฉด ๋ณ์ president์ "moon", ๊ทธ๋ ์ง ์์ผ๋ฉด "park" ํ ๋นํ ํ ๊ทธ๋ฃนํ
slice_max(abs(log_odds_ratio), n = 10, # ๋ก๊ทธ ์ค์ฆ๋น์ ์ ๋๊ฐ ๊ธฐ์ค์ผ๋ก ์์ 10๊ฐ์ ๋จ์ด ์ถ์ถ -> ์์์ ๊ทธ๋ฃนํ๋ฅผ ์ํํ๊ธฐ ๋๋ฌธ์ ๊ฐ ์ฐ์ค๋ฌธ์์ ์์ 10๊ฐ์ ๋จ์ด ์ถ์ถ
with_ties = F) # ๋น๋๊ฐ ๋์ผํ๋๋ผ๋ ์ต์
n์ ์ง์ ํ ๊ฐ์๋งํผ๋ง ๋จ์ด ์ถ์ถ
top10 %>%
arrange(desc(log_odds_ratio)) %>% # ๋ก๊ทธ ์ค์ฆ๋น ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ
select(word, log_odds_ratio, president) %>% # ๋ณ์ word, log_odds_ratio, president ์ ํ
print(n = Inf) # ๋ชจ๋ ํ ์ถ๋ ฅ
# A tibble: 20 ร 3
# Groups: president [2]
word log_odds_ratio president
<chr> <dbl> <chr>
1 ๋ณต์ง๊ตญ๊ฐ 1.96 moon
2 ์ธ์ 1.71 moon
3 ์ฌ์ฑ 1.71 moon
4 ์ ์ 1.71 moon
5 ๊ฐ์ 1.56 moon
6 ๊ณตํ 1.56 moon
7 ๋ํต๋ น์ 1.56 moon
8 ๋ณดํต 1.56 moon
9 ์์ 1.56 moon
10 ์ง๋ฐฉ 1.56 moon
11 ๊ณผ์ -1.84 park
12 ๊ตญ์ ์ด์ -1.84 park
13 ์์ -1.84 park
14 ์ง์ -1.84 park
15 ํ๋ณต -2.03 park
16 ์ค์ฒ -2.03 park
17 ์ ๋ณด -2.03 park
18 ํฌ๋ช
-2.03 park
19 ์ฌ๋ฌ๋ถ -2.18 park
20 ๋ฐ๊ทผํ -2.43 park
ggplot(top10,
aes(x = reorder(word, log_odds_ratio), # reorder : top10์์ ๋จ์ด์ ๋ฐ๋ฅธ ํ๊ท ๋ก๊ทธ ์ค์ฆ๋น๋ฅผ ์ด์ฉํ์ฌ ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ
y = log_odds_ratio,
fill = president)) + # ๋ํต๋ น์ ๋ฐ๋ผ ๋ง๋ ์๊น์ ๋ค๋ฅด๊ฒ ํํ
geom_col() + # ๋ง๋ ๊ทธ๋ํ
coord_flip() # ๋ง๋๋ฅผ ๊ฐ๋ก๋ก ํ์
Caution!
์ค์ฆ๋น/๋ก๊ทธ ์ค์ฆ๋น๋ ๋ ์กฐ๊ฑด์ ํ๋ฅ ์ ์ด์ฉํด ๊ณ์ฐํ๋ฏ๋ก ์ธ ๊ฐ ์ด์์ ํ
์คํธ๋ฅผ ๋น๊ตํ ๋ ์ ์ ํ์ง ์๋ค๋ ๋จ์ ์ด ์๋ค. ํ
์คํธ๋ฅผ ๋์ฉ ์ง์ง์ด ๋ฐ๋ก ๋น๊ตํ ์๋ ์์ง๋ง, ๋น๊ตํ ํ
์คํธ๊ฐ ๋ง์ผ๋ฉด ๊ณ์ฐ ์ ์ฐจ๊ฐ ๋ฒ๊ฑฐ๋กญ๊ณ ๊ฒฐ๊ณผ๋ฅผ ํด์ํ๊ธฐ ์ด๋ ต๊ธฐ ๋๋ฌธ์ ํจ์จ์ ์ด์ง ์๋ค.
DF๊ฐ ํด์๋ก ์ฌ๋ฌ ๋ฌธ์์์ ํํ๊ฒ ์ฌ์ฉํ ์ผ๋ฐ์ ์ธ ๋จ์ด
๋ผ๊ณ ํ ์ ์๋ค.IDF๋ DF์ ์ญ์
์ด๋ฏ๋ก DF๊ฐ ํด์๋ก ์์์ง๊ณ , ๋ฐ๋๋ก DF๊ฐ ์์์๋ก ์ปค์ง๋ค.IDF๊ฐ ํด์๋ก ๋๋ฌผ๊ฒ ์ฌ์ฉํ ํน์ดํ ๋จ์ด, IDF๊ฐ ์์์๋ก ํํ๊ฒ ์ฌ์ฉํ ์ผ๋ฐ์ ์ธ ๋จ์ด
๋ผ๊ณ ํ ์ ์๋ค.# ๋ฐ์ดํฐ ๋ถ๋ฌ์ค๊ธฐ
# speeches_presidents : ์ญ๋ ๋ํต๋ น์ ๋์ ์ถ๋ง ์ ์ธ๋ฌธ์ ๋ด์ ๋ฐ์ดํฐ ํ์ผ
raw_speeches <- read_csv(".../speeches_presidents.csv")
raw_speeches
# A tibble: 4 ร 2
president value
<chr> <chr>
1 ๋ฌธ์ฌ์ธ "์ ๊ถ๊ต์ฒด ํ๊ฒ ์ต๋๋ค! ์ ์น๊ต์ฒด ํ๊ฒ ์ต๋๋ค! ์๋๊ต์ฒด โฆ
2 ๋ฐ๊ทผํ "์กด๊ฒฝํ๋ ๊ตญ๋ฏผ ์ฌ๋ฌ๋ถ! ์ ๋ ์ค๋, ๊ตญ๋ฏผ ํ ๋ถ ํ ๋ถ์ ๊ฟ์ดโฆ
3 ์ด๋ช
๋ฐ "์กด๊ฒฝํ๋ ๊ตญ๋ฏผ ์ฌ๋ฌ๋ถ, ์ฌ๋ํ๋ ํ๋๋ผ๋น ๋น์ ๋์ง ์ฌ๋ฌ๋ถโฆ
4 ๋
ธ๋ฌดํ "์ด๋๋์ธ๊ฐ ๋ถํฐ ์ ๊ฐ ๋ํต๋ น์ด ๋๊ฒ ๋ค๊ณ ๋ง์ ํ๊ธฐ ์์ํโฆ
# ์ ์ฒ๋ฆฌ
speeches <- raw_speeches %>%
mutate(value = str_replace_all(value,
"[^๊ฐ-ํฃ]", # [^๊ฐ-ํฃ] : ํ๊ธ์ ์ ์ธํ ๋ชจ๋ ๋ฌธ์๋ฅผ ์๋ฏธํ๋ ์ ๊ท ํํ์
" "), # ๊ณต๋ฐฑ์ผ๋ก ๋ณ๊ฒฝ
value = str_squish(value)) # ์ฐ์๋ ๊ณต๋ฐฑ ์ ๊ฑฐ
speeches
# A tibble: 4 ร 2
president value
<chr> <chr>
1 ๋ฌธ์ฌ์ธ ์ ๊ถ๊ต์ฒด ํ๊ฒ ์ต๋๋ค ์ ์น๊ต์ฒด ํ๊ฒ ์ต๋๋ค ์๋๊ต์ฒด ํ๊ฒ ์ต๋โฆ
2 ๋ฐ๊ทผํ ์กด๊ฒฝํ๋ ๊ตญ๋ฏผ ์ฌ๋ฌ๋ถ ์ ๋ ์ค๋ ๊ตญ๋ฏผ ํ ๋ถ ํ ๋ถ์ ๊ฟ์ด ์ดโฆ
3 ์ด๋ช
๋ฐ ์กด๊ฒฝํ๋ ๊ตญ๋ฏผ ์ฌ๋ฌ๋ถ ์ฌ๋ํ๋ ํ๋๋ผ๋น ๋น์ ๋์ง ์ฌ๋ฌ๋ถ โฆ
4 ๋
ธ๋ฌดํ ์ด๋๋์ธ๊ฐ ๋ถํฐ ์ ๊ฐ ๋ํต๋ น์ด ๋๊ฒ ๋ค๊ณ ๋ง์ ํ๊ธฐ ์์ํ์ตโฆ
# ํ ํฐํ
speeches <- speeches %>%
unnest_tokens(input = value, # ํ ํฐํ๋ฅผ ์ํํ ํ
์คํธ๊ฐ ํฌํจ๋ ๋ณ์๋ช
output = word, # ์ถ๋ ฅ ๋ณ์๋ช
token = extractNoun) # ๋ช
์ฌ ๊ธฐ์ค์ผ๋ก ํ ํฐํ
speeches
# A tibble: 3,838 ร 2
president word
<chr> <chr>
1 ๋ฌธ์ฌ์ธ ์ ๊ถ๊ต์ฒด
2 ๋ฌธ์ฌ์ธ ์ ์น
3 ๋ฌธ์ฌ์ธ ๊ต์ฒด
4 ๋ฌธ์ฌ์ธ ์๋
5 ๋ฌธ์ฌ์ธ ๊ต์ฒด
6 ๋ฌธ์ฌ์ธ ๋ถ๋น๋ถ๋ช
7 ๋ฌธ์ฌ์ธ ๊ณ ์ฌ
8 ๋ฌธ์ฌ์ธ ๋จ์ชฝ
9 ๋ฌธ์ฌ์ธ ์ธ๋
10 ๋ฌธ์ฌ์ธ ๋๋ญ๊ฐ์ง
# โน 3,828 more rows
# ๋จ์ด ๋น๋ ๊ตฌํ๊ธฐ
frequency <- speeches %>% # ์ ์ฒ๋ฆฌ & ํ ํฐํ๋ฅผ ์ํํ ๊ฒฐ๊ณผ๊ฐ ์ ์ฅ๋์ด ์๋ ๊ฐ์ฒด "speeches"
count(president, word) %>% # ์ฐ์ค๋ฌธ ๊ฐ๊ฐ์ ๋จ์ด ๋น๋ ๊ณ์ฐ
filter(str_count(word) > 1) # ๋ ๊ธ์ ์ด์์ ๋จ์ด๋ง ์ถ์ถ -> ํ ๊ธ์๋ก ๋ ๋จ์ด ์ ๊ฑฐ
frequency
# A tibble: 1,513 ร 3
president word n
<chr> <chr> <int>
1 ๋
ธ๋ฌดํ ๊ฐ์ด 2
2 ๋
ธ๋ฌดํ ๊ฐํ 2
3 ๋
ธ๋ฌดํ ๊ฐ๋ฑ 1
4 ๋
ธ๋ฌดํ ๊ฐ์ฅ 1
5 ๋
ธ๋ฌดํ ๊ฐ์ 1
6 ๋
ธ๋ฌดํ ๊ฐํธ 4
7 ๋
ธ๋ฌดํ ๊ฐํ 4
8 ๋
ธ๋ฌดํ ๊ฑด๊ตญ 1
9 ๋
ธ๋ฌดํ ๊ฒฝ์ 1
10 ๋
ธ๋ฌดํ ๊ฒฝ์ 1
# โน 1,503 more rows
"tidytext"
์ ํจ์ bind_tf_idf(tbl, term, document, n)
๋ฅผ ์ด์ฉํ์ฌ TF-IDF๋ฅผ ๊ณ์ฐํ ์ ์๋ค.
tbl
: TF-IDF๋ฅผ ์ํํ ๊ฐ์ฒดterm
: ๋จ์ด๊ฐ ์
๋ ฅ๋์ด ์๋ ๋ณ์document
: ํ
์คํธ ๊ตฌ๋ถ ๋ณ์n
: ๋จ์ด ๋น๋๊ฐ ์
๋ ฅ๋์ด ์๋ ๋ณ์frequency <- frequency %>% # ๋จ์ด ๋น๋๊ฐ ์ ์ฅ๋์ด ์๋ ๊ฐ์ฒด in 4-1
bind_tf_idf(term = word, # ๋จ์ด๊ฐ ์
๋ ฅ๋์ด ์๋ ๋ณ์
document = president, # ํ
์คํธ ๊ตฌ๋ถ ๋ณ์
n = n) %>% # ๋จ์ด ๋น๋๊ฐ ์
๋ ฅ๋์ด ์๋ ๋ณ์
arrange(desc(tf_idf)) # TF-IDF ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ
frequency
# A tibble: 1,513 ร 6
president word n tf idf tf_idf
<chr> <chr> <int> <dbl> <dbl> <dbl>
1 ๋
ธ๋ฌดํ ๊ณต์ 6 0.0163 1.39 0.0227
2 ๋
ธ๋ฌดํ ๋น์ ผ 6 0.0163 1.39 0.0227
3 ๋
ธ๋ฌดํ ์ ๊ณ 6 0.0163 1.39 0.0227
4 ์ด๋ช
๋ฐ ๋ฆฌ๋์ญ 6 0.0158 1.39 0.0219
5 ๋
ธ๋ฌดํ ๊ถ๋ ฅ 9 0.0245 0.693 0.0170
6 ๋
ธ๋ฌดํ ๊ฐํธ 4 0.0109 1.39 0.0151
7 ์ด๋ช
๋ฐ ๋น์ 4 0.0105 1.39 0.0146
8 ์ด๋ช
๋ฐ ๋์ง 4 0.0105 1.39 0.0146
9 ์ด๋ช
๋ฐ ์ผ๋ฅ๊ตญ๊ฐ 4 0.0105 1.39 0.0146
10 ๋ฐ๊ทผํ ๋ฐ๊ทผํ 8 0.00962 1.39 0.0133
# โน 1,503 more rows
Result!
๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด ๋ณ์ tf
, idf
, tf-idf
๊ฐ ์ถ๊ฐ๋์๋ค. ๋ณ์ tf
์ ์
๋ ฅ๋ ๊ฐ์ ํด๋น ๋ฌธ์์์ ๋ช ๋ฒ ์ฌ์ฉํ์๋์ง๋ฅผ ๋ํ๋ด๋ ๋จ์ ๋น๋๊ฐ ์๋๋ผ ๋จ์ด ์ฌ์ฉ ๋น์จ(โํด๋น ๋จ์ด์ ๋น๋ ์/๋ชจ๋ ๋จ์ด์ ๋น๋ ํฉโ)์ ์๋ฏธํ๋ค.
Caution!
TF-IDF๋ฅผ ์ด์ฉํ๋ฉด ํ
์คํธ์ ํน์ง์ ๋๋ฌ๋ด๋ ์ค์ํ ๋จ์ด๊ฐ ๋ฌด์์ธ์ง ํ์
ํ ์ ์๋ค. ๋ณ์ tf-idf
๊ฐ ๋์ ๋จ์ด๋ฅผ ์ดํด๋ณด๋ฉด ๊ฐ ๋ํต๋ น์ด ๋ค๋ฅธ ๋ํต๋ น๋ค๊ณผ ๋ฌ๋ฆฌ ๋ฌด์์ ๊ฐ์กฐํ๋์ง ์ ์ ์๋ค. ๋ฐ๋ฉด, TF-IDF๊ฐ ๋ฎ์ ๋จ์ด๋ฅผ ์ดํด๋ณด๋ฉด ์ญ๋ ๋ํต๋ น๋ค์ด ๊ณตํต์ผ๋ก ์ฌ์ฉํ ํํ ๋จ์ด๊ฐ ๋ฌด์์ธ์ง ํ์
ํ ์ ์๋ค.
# ๋ฌธ์ฌ์ธ ์ ๋ํต๋ น์ ์ฐ์ค๋ฌธ๋ง ์ถ์ถ
frequency %>%
filter(president == "๋ฌธ์ฌ์ธ") %>%
arrange(desc(tf_idf)) # TF-IDF๊ฐ ๋์ ๋จ์ด์์ผ๋ก ์ ๋ ฌ
# A tibble: 688 ร 6
president word n tf idf tf_idf
<chr> <chr> <int> <dbl> <dbl> <dbl>
1 ๋ฌธ์ฌ์ธ ๋ณต์ง๊ตญ๊ฐ 8 0.00608 1.39 0.00843
2 ๋ฌธ์ฌ์ธ ์ฌ์ฑ 6 0.00456 1.39 0.00633
3 ๋ฌธ์ฌ์ธ ๊ณตํ 5 0.00380 1.39 0.00527
4 ๋ฌธ์ฌ์ธ ๋ด์์ด 5 0.00380 1.39 0.00527
5 ๋ฌธ์ฌ์ธ ๋ํต๋ น์ 5 0.00380 1.39 0.00527
6 ๋ฌธ์ฌ์ธ ๋ณดํต 5 0.00380 1.39 0.00527
7 ๋ฌธ์ฌ์ธ ์์ 5 0.00380 1.39 0.00527
8 ๋ฌธ์ฌ์ธ ์ฐ๋ฆฌ๋๋ผ 10 0.00760 0.693 0.00527
9 ๋ฌธ์ฌ์ธ ์ง๋ฐฉ 5 0.00380 1.39 0.00527
10 ๋ฌธ์ฌ์ธ ํ๋ 10 0.00760 0.693 0.00527
# โน 678 more rows
frequency %>%
filter(president == "๋ฌธ์ฌ์ธ") %>%
arrange(tf_idf) # TF-IDF๊ฐ ๋ฎ์ ๋จ์ด์์ผ๋ก ์ ๋ ฌ
# A tibble: 688 ร 6
president word n tf idf tf_idf
<chr> <chr> <int> <dbl> <dbl> <dbl>
1 ๋ฌธ์ฌ์ธ ๊ฒฝ์ 6 0.00456 0 0
2 ๋ฌธ์ฌ์ธ ๊ฒฝ์ 15 0.0114 0 0
3 ๋ฌธ์ฌ์ธ ๊ณ ํต 4 0.00304 0 0
4 ๋ฌธ์ฌ์ธ ๊ณผ๊ฑฐ 1 0.000760 0 0
5 ๋ฌธ์ฌ์ธ ๊ตญ๋ฏผ 21 0.0160 0 0
6 ๋ฌธ์ฌ์ธ ๊ธฐํ 5 0.00380 0 0
7 ๋ฌธ์ฌ์ธ ๋ํต๋ น 12 0.00913 0 0
8 ๋ฌธ์ฌ์ธ ๋์ 2 0.00152 0 0
9 ๋ฌธ์ฌ์ธ ๋ค์ด 9 0.00684 0 0
10 ๋ฌธ์ฌ์ธ ๋ง์ 2 0.00152 0 0
# โน 678 more rows
# ๋ฐ๊ทผํ ์ ๋ํต๋ น์ ์ฐ์ค๋ฌธ๋ง ์ถ์ถ
frequency %>%
filter(president == "๋ฐ๊ทผํ") %>%
arrange(desc(tf_idf)) # TF-IDF๊ฐ ๋์ ๋จ์ด์์ผ๋ก ์ ๋ ฌ
# A tibble: 407 ร 6
president word n tf idf tf_idf
<chr> <chr> <int> <dbl> <dbl> <dbl>
1 ๋ฐ๊ทผํ ๋ฐ๊ทผํ 8 0.00962 1.39 0.0133
2 ๋ฐ๊ทผํ ์ ๋ณด 5 0.00601 1.39 0.00833
3 ๋ฐ๊ทผํ ํฌ๋ช
5 0.00601 1.39 0.00833
4 ๋ฐ๊ทผํ ํ๋ณต 23 0.0276 0.288 0.00795
5 ๋ฐ๊ทผํ ๊ต์ก 9 0.0108 0.693 0.00750
6 ๋ฐ๊ทผํ ๊ตญ์ ์ด์ 4 0.00481 1.39 0.00666
7 ๋ฐ๊ทผํ ์ ๋ถ 17 0.0204 0.288 0.00588
8 ๋ฐ๊ทผํ ๊ฐ๊ฐ์ธ 3 0.00361 1.39 0.00500
9 ๋ฐ๊ทผํ ๊ฐ์ธ 3 0.00361 1.39 0.00500
10 ๋ฐ๊ทผํ ๊ณต๊ฐ 3 0.00361 1.39 0.00500
# โน 397 more rows
frequency %>%
filter(president == "๋ฐ๊ทผํ") %>%
arrange(tf_idf) # TF-IDF๊ฐ ๋ฎ์ ๋จ์ด์์ผ๋ก ์ ๋ ฌ
# A tibble: 407 ร 6
president word n tf idf tf_idf
<chr> <chr> <int> <dbl> <dbl> <dbl>
1 ๋ฐ๊ทผํ ๊ฒฝ์ 1 0.00120 0 0
2 ๋ฐ๊ทผํ ๊ฒฝ์ 15 0.0180 0 0
3 ๋ฐ๊ทผํ ๊ณ ํต 4 0.00481 0 0
4 ๋ฐ๊ทผํ ๊ณผ๊ฑฐ 2 0.00240 0 0
5 ๋ฐ๊ทผํ ๊ตญ๋ฏผ 72 0.0865 0 0
6 ๋ฐ๊ทผํ ๊ธฐํ 1 0.00120 0 0
7 ๋ฐ๊ทผํ ๋ํต๋ น 3 0.00361 0 0
8 ๋ฐ๊ทผํ ๋์ 3 0.00361 0 0
9 ๋ฐ๊ทผํ ๋ค์ด 3 0.00361 0 0
10 ๋ฐ๊ทผํ ๋ง์ 3 0.00361 0 0
# โน 397 more rows
# ์ด๋ช
๋ฐ ์ ๋ํต๋ น์ ์ฐ์ค๋ฌธ๋ง ์ถ์ถ
frequency %>%
filter(president == "์ด๋ช
๋ฐ") %>%
arrange(desc(tf_idf)) # TF-IDF๊ฐ ๋์ ๋จ์ด์์ผ๋ก ์ ๋ ฌ
# A tibble: 202 ร 6
president word n tf idf tf_idf
<chr> <chr> <int> <dbl> <dbl> <dbl>
1 ์ด๋ช
๋ฐ ๋ฆฌ๋์ญ 6 0.0158 1.39 0.0219
2 ์ด๋ช
๋ฐ ๋น์ 4 0.0105 1.39 0.0146
3 ์ด๋ช
๋ฐ ๋์ง 4 0.0105 1.39 0.0146
4 ์ด๋ช
๋ฐ ์ผ๋ฅ๊ตญ๊ฐ 4 0.0105 1.39 0.0146
5 ์ด๋ช
๋ฐ ํ๋๋ผ 7 0.0184 0.693 0.0128
6 ์ด๋ช
๋ฐ ๋๋ผ 15 0.0395 0.288 0.0114
7 ์ด๋ช
๋ฐ ๋์ฝ 3 0.00789 1.39 0.0109
8 ์ด๋ช
๋ฐ ์ผํ 3 0.00789 1.39 0.0109
9 ์ด๋ช
๋ฐ ์ฌ๋ 5 0.0132 0.693 0.00912
10 ์ด๋ช
๋ฐ ์ธ์ 5 0.0132 0.693 0.00912
# โน 192 more rows
frequency %>%
filter(president == "์ด๋ช
๋ฐ") %>%
arrange(tf_idf) # TF-IDF๊ฐ ๋ฎ์ ๋จ์ด์์ผ๋ก ์ ๋ ฌ
# A tibble: 202 ร 6
president word n tf idf tf_idf
<chr> <chr> <int> <dbl> <dbl> <dbl>
1 ์ด๋ช
๋ฐ ๊ฒฝ์ 3 0.00789 0 0
2 ์ด๋ช
๋ฐ ๊ฒฝ์ 5 0.0132 0 0
3 ์ด๋ช
๋ฐ ๊ณ ํต 1 0.00263 0 0
4 ์ด๋ช
๋ฐ ๊ณผ๊ฑฐ 1 0.00263 0 0
5 ์ด๋ช
๋ฐ ๊ตญ๋ฏผ 13 0.0342 0 0
6 ์ด๋ช
๋ฐ ๊ธฐํ 3 0.00789 0 0
7 ์ด๋ช
๋ฐ ๋ํต๋ น 4 0.0105 0 0
8 ์ด๋ช
๋ฐ ๋์ 1 0.00263 0 0
9 ์ด๋ช
๋ฐ ๋ค์ด 1 0.00263 0 0
10 ์ด๋ช
๋ฐ ๋ง์ 1 0.00263 0 0
# โน 192 more rows
# ๋
ธ๋ฌดํ ์ ๋ํต๋ น์ ์ฐ์ค๋ฌธ๋ง ์ถ์ถ
frequency %>%
filter(president == "๋
ธ๋ฌดํ") %>%
arrange(desc(tf_idf)) # TF-IDF๊ฐ ๋์ ๋จ์ด์์ผ๋ก ์ ๋ ฌ
# A tibble: 216 ร 6
president word n tf idf tf_idf
<chr> <chr> <int> <dbl> <dbl> <dbl>
1 ๋
ธ๋ฌดํ ๊ณต์ 6 0.0163 1.39 0.0227
2 ๋
ธ๋ฌดํ ๋น์ ผ 6 0.0163 1.39 0.0227
3 ๋
ธ๋ฌดํ ์ ๊ณ 6 0.0163 1.39 0.0227
4 ๋
ธ๋ฌดํ ๊ถ๋ ฅ 9 0.0245 0.693 0.0170
5 ๋
ธ๋ฌดํ ๊ฐํธ 4 0.0109 1.39 0.0151
6 ๋
ธ๋ฌดํ ๊ตญํ์์ 3 0.00817 1.39 0.0113
7 ๋
ธ๋ฌดํ ๋จ๋ถ๋ํ 3 0.00817 1.39 0.0113
8 ๋
ธ๋ฌดํ ์ด๋ฆฌ 3 0.00817 1.39 0.0113
9 ๋
ธ๋ฌดํ ๊ฐํ 2 0.00545 1.39 0.00755
10 ๋
ธ๋ฌดํ ๊ฐํ 4 0.0109 0.693 0.00755
# โน 206 more rows
frequency %>%
filter(president == "๋
ธ๋ฌดํ") %>%
arrange(tf_idf) # TF-IDF๊ฐ ๋ฎ์ ๋จ์ด์์ผ๋ก ์ ๋ ฌ
# A tibble: 216 ร 6
president word n tf idf tf_idf
<chr> <chr> <int> <dbl> <dbl> <dbl>
1 ๋
ธ๋ฌดํ ๊ฒฝ์ 1 0.00272 0 0
2 ๋
ธ๋ฌดํ ๊ฒฝ์ 1 0.00272 0 0
3 ๋
ธ๋ฌดํ ๊ณ ํต 1 0.00272 0 0
4 ๋
ธ๋ฌดํ ๊ณผ๊ฑฐ 1 0.00272 0 0
5 ๋
ธ๋ฌดํ ๊ตญ๋ฏผ 7 0.0191 0 0
6 ๋
ธ๋ฌดํ ๊ธฐํ 1 0.00272 0 0
7 ๋
ธ๋ฌดํ ๋ํต๋ น 6 0.0163 0 0
8 ๋
ธ๋ฌดํ ๋์ 2 0.00545 0 0
9 ๋
ธ๋ฌดํ ๋ค์ด 4 0.0109 0 0
10 ๋
ธ๋ฌดํ ๋ง์ 1 0.00272 0 0
# โน 206 more rows
# 1. ์ฃผ์ ๋จ์ด ์ถ์ถ (TF-IDF๊ฐ ๋์ ์์ ๋จ์ด ์ถ์ถ)
top10 <- frequency %>% # TF-IDF๊ฐ ์ ์ฅ๋์ด ์๋ ๊ฐ์ฒด in 4-2
group_by(president) %>% # ๋ณ์ president์ ๋ํด ๊ทธ๋ฃนํ -> ๊ฐ๊ฐ์ ์ฐ์ค๋ฌธ์์ ๋น๋๊ฐ ๋์ ๋จ์ด๋ฅผ ์ถ์ถํ๊ธฐ ์ํด ์ํ
slice_max(tf_idf,
n = 10, # TF-IDF๊ฐ ๋์ ์์ 10๊ฐ ๋จ์ด ์ถ์ถ
with_ties = F) # ๋น๋๊ฐ ๋์ผํ๋๋ผ๋ ์ต์
n์ ์ง์ ํ ๊ฐ์๋งํผ๋ง ๋จ์ด ์ถ์ถ
top10
# A tibble: 40 ร 6
# Groups: president [4]
president word n tf idf tf_idf
<chr> <chr> <int> <dbl> <dbl> <dbl>
1 ๋
ธ๋ฌดํ ๊ณต์ 6 0.0163 1.39 0.0227
2 ๋
ธ๋ฌดํ ๋น์ ผ 6 0.0163 1.39 0.0227
3 ๋
ธ๋ฌดํ ์ ๊ณ 6 0.0163 1.39 0.0227
4 ๋
ธ๋ฌดํ ๊ถ๋ ฅ 9 0.0245 0.693 0.0170
5 ๋
ธ๋ฌดํ ๊ฐํธ 4 0.0109 1.39 0.0151
6 ๋
ธ๋ฌดํ ๊ตญํ์์ 3 0.00817 1.39 0.0113
7 ๋
ธ๋ฌดํ ๋จ๋ถ๋ํ 3 0.00817 1.39 0.0113
8 ๋
ธ๋ฌดํ ์ด๋ฆฌ 3 0.00817 1.39 0.0113
9 ๋
ธ๋ฌดํ ๊ฐํ 2 0.00545 1.39 0.00755
10 ๋
ธ๋ฌดํ ๊ฐํ 4 0.0109 0.693 0.00755
# โน 30 more rows
# 2. ๊ทธ๋ํ ์์๋ฅผ ์ ํ๊ธฐ ์ํ Factor ๋ณํ
top10$president <- factor(top10$president, # factor : ๋ฒ์ฃผํ์ผ๋ก ๋ณํ
levels = c("๋ฌธ์ฌ์ธ", "๋ฐ๊ทผํ", "์ด๋ช
๋ฐ", "๋
ธ๋ฌดํ")) # levels = ๊ทธ๋ํ ์์
# 3. ๋ง๋ ๊ทธ๋ํ
ggplot(top10,
aes(x = reorder_within(word, tf_idf, president), # reorder_within : ํญ๋ชฉ๋ณ๋ก ๋จ์ด ๋น๋์ ์ ๋ ฌ
y = tf_idf,
fill = president)) + # ๋ํต๋ น์ ๋ฐ๋ผ ๋ง๋ ์๊น์ ๋ค๋ฅด๊ฒ ํํ
geom_col(show.legend = F) + # ๋ง๋ ๊ทธ๋ํ
coord_flip() + # ๋ง๋๋ฅผ ๊ฐ๋ก๋ก ํ์
facet_wrap(~president, # ๋ณ์ president์ ํญ๋ชฉ๋ณ๋ก ๊ทธ๋ํ ์์ฑ -> ๋ํต๋ น ๊ฐ๊ฐ์ ๋ง๋ ๊ทธ๋ํ ์์ฑ
scales = "free", # x์ถ๊ณผ y์ถ ํต์ผ X
ncol = 2) + # ํ ํ์ ๋ํ๋ผ ๊ทธ๋ํ ๊ฐ์
scale_x_reordered() # ๋จ์ด ๋ค์ ๋ํต๋ น ์ด๋ฆ ์ ๊ฑฐ
Result!
๊ทธ๋ํ๋ฅผ ๋ณด๋ฉด, ์ญ๋ ๋ํต๋ น์ ๊ฐ์ฑ์ ๋๋ฌ๋ด๋ ๋จ์ด๋ฅผ ํ์
ํ ์ ์๋ค.
Caution!
๋ชจ๋ ๋ฌธ์์ ์ฌ์ฉ๋ ๋จ์ด๋ IDF๊ฐ 0์ด๋ฏ๋ก TF-IDF๋ 0์ด ๋๋ค. ๋ฐ๋ผ์ TF-IDF๋ฅผ ํ์ฉํ๋ฉด ์ด๋ค ๋จ์ด๊ฐ ํน์ ๋ฌธ์์ ํน์ถ๋๊ฒ ๋ง์ด ์ฌ์ฉ๋๋๋ผ๋ ๋ชจ๋ ๋ฌธ์์ ์ฌ์ฉ๋๋ฉด ๋ฐ๊ฒฌํ ์ ์๋ ํ๊ณ๊ฐ ์๋ค. โWeighted log oddsโ๋ฅผ ํ์ฉํ๋ฉด ์ด๋ฐ ํ๊ณ๋ฅผ ๊ทน๋ณตํ ์ ์๋ค. Weighted log odds๋ ๋จ์ด ๋ฑ์ฅ ํ๋ฅ ์ ๊ฐ์ค์น๋ก ์ด์ฉํ๊ธฐ ๋๋ฌธ์ ์ด๋ค ๋จ์ด๊ฐ ๋ชจ๋ ๋ฌธ์์ ์ฌ์ฉ๋๋๋ผ๋ ํน์ ๋ฌธ์์ ๋ง์ด ์ฌ์ฉ๋๋ฉด ๋ฐ๊ฒฌํ ์ ์๋ค. ๋ํ, ์ค์ฆ๋น์ ๋ฌ๋ฆฌ ์
์ด์์ ๋ฌธ์๋ฅผ ๋น๊ตํ ๋๋ ์ฌ์ฉํ ์ ์๋ ์ฅ์ ์ด ์๋ค. Weighted log odds๋ Package "tidylo"
๋ฅผ ์ด์ฉํ๋ฉด ์ฝ๊ฒ ๊ตฌํ ์ ์๋ค. ํด๋น ํจํค์ง์ ์์ธํ ์ค๋ช
์ ์ฌ๊ธฐ๋ฅผ ์ฐธ๊ณ ํ๋ค.
# 1. ๋จ์ด ๋น๋ ๋น๊ต
speeches <- bind_speeches %>% # ๋ ์ฐ์ค๋ฌธ์ ์๋ฌธ์ ํ๋์ ๋ฐ์ดํฐ์
์ผ๋ก ๊ฒฐํฉํ Dataset
# ์ ์ฒ๋ฆฌ
mutate(value = str_replace_all(value,
"[^๊ฐ-ํฃ]", # [^๊ฐ-ํฃ] : ํ๊ธ์ ์ ์ธํ ๋ชจ๋ ๋ฌธ์๋ฅผ ์๋ฏธํ๋ ์ ๊ท ํํ์
" "), # ๊ณต๋ฐฑ์ผ๋ก ๋ณ๊ฒฝ
value = str_squish(value)) %>% # ์ฐ์๋ ๊ณต๋ฐฑ ์ ๊ฑฐ
# ํ ํฐํ
unnest_tokens(input = value, # ํ ํฐํ๋ฅผ ์ํํ ํ
์คํธ๊ฐ ํฌํจ๋ ๋ณ์๋ช
output = word, # ์ถ๋ ฅ ๋ณ์๋ช
token = extractNoun) # ๋ช
์ฌ ๊ธฐ์ค์ผ๋ก ํ ํฐํ
speeches
# A tibble: 2,997 ร 2
president word
<chr> <chr>
1 moon "์ ๊ถ๊ต์ฒด"
2 moon "ํ๊ฒ ์ต๋"
3 moon "์ ์น"
4 moon "๊ต์ฒด"
5 moon "ํ๊ฒ ์ต๋"
6 moon "์๋"
7 moon "๊ต์ฒด"
8 moon "ํ๊ฒ ์ต๋"
9 moon ""
10 moon "๋ถ๋น๋ถ๋ช
"
# โน 2,987 more rows
# ์ฐ์ค๋ฌธ๋ณ ๋จ์ด ๋น๋ ๊ตฌํ๊ธฐ
frequency <- speeches %>%
count(president, word) %>% # ์ฐ์ค๋ฌธ ๊ฐ๊ฐ์ ๋จ์ด ๋น๋ ๊ณ์ฐ
filter(str_count(word) > 1) # ๋ ๊ธ์ ์ด์์ ๋จ์ด๋ง ์ถ์ถ -> ํ ๊ธ์๋ก ๋ ๋จ์ด ์ ๊ฑฐ
frequency
# A tibble: 1,131 ร 3
president word n
<chr> <chr> <int>
1 moon ๊ฐ๋ 1
2 moon ๊ฐ์ฌ 1
3 moon ๊ฐ์ด 2
4 moon ๊ฐ์กฑ 1
5 moon ๊ฐ์กฑ๊ตฌ์กฐ 1
6 moon ๊ฐ์ง 4
7 moon ๊ฐ์น 3
8 moon ๊ฐ์ข
1
9 moon ๊ฐ๋น 1
10 moon ๊ฐ๋ ฅ 3
# โน 1,121 more rows
# ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋ ๋จ์ด ์ถ์ถ
top10 <- frequency %>%
group_by(president) %>% # ๋ณ์ president์ ๋ํด ๊ทธ๋ฃนํ -> ๊ฐ๊ฐ์ ์ฐ์ค๋ฌธ์์ ๋น๋๊ฐ ๋์ ๋จ์ด๋ฅผ ์ถ์ถํ๊ธฐ ์ํด ์ํ
slice_max(n, n = 10, # ๋น๋๊ฐ ๊ฐ์ฅ ๋์ 10๊ฐ์ ๋จ์ด ์ถ์ถ
with_ties = F) # ๋น๋๊ฐ ๋์ผํ๋๋ผ๋ ์ต์
n์ ์ง์ ํ ๊ฐ์๋งํผ๋ง ๋จ์ด ์ถ์ถ
top10
# A tibble: 20 ร 3
# Groups: president [2]
president word n
<chr> <chr> <int>
1 moon ๊ตญ๋ฏผ 21
2 moon ์ผ์๋ฆฌ 21
3 moon ๋๋ผ 19
4 moon ์ฐ๋ฆฌ 17
5 moon ๊ฒฝ์ 15
6 moon ์ฌํ 14
7 moon ์ฑ์ฅ 13
8 moon ๋ํต๋ น 12
9 moon ์ ์น 12
10 moon ํ๊ฒ 12
11 park ๊ตญ๋ฏผ 72
12 park ํ๋ณต 23
13 park ์ฌ๋ฌ๋ถ 20
14 park ์ ๋ถ 17
15 park ๊ฒฝ์ 15
16 park ์ ๋ขฐ 11
17 park ๊ตญ๊ฐ 10
18 park ์ฐ๋ฆฌ 10
19 park ๊ต์ก 9
20 park ์ฌ๋ 9
# 2. ์ค์ฆ๋น
# Wide Form ํํ๋ก ๋ณํ
frequency_wide <- frequency %>%
pivot_wider(names_from = president, # ๋ณ์๋ช
์ผ๋ก ์
๋ ฅํ ๊ฐ์ด ๋ค์ด ์๋ ๋ณ์
values_from = n, # ๋ณ์์ ์ฑ์ ๋ฃ์ ๊ฐ์ด ๋ค์ด ์๋ ๋ณ์
values_fill = list(n = 0)) # ๊ฒฐ์ธก์น NA๋ฅผ 0์ผ๋ก ๋์ฒด
frequency_wide
# A tibble: 955 ร 3
word moon park
<chr> <int> <int>
1 ๊ฐ๋ 1 0
2 ๊ฐ์ฌ 1 0
3 ๊ฐ์ด 2 0
4 ๊ฐ์กฑ 1 1
5 ๊ฐ์กฑ๊ตฌ์กฐ 1 0
6 ๊ฐ์ง 4 0
7 ๊ฐ์น 3 1
8 ๊ฐ์ข
1 0
9 ๊ฐ๋น 1 0
10 ๊ฐ๋ ฅ 3 0
# โน 945 more rows
# ์ค์ฆ๋น/๋ก๊ทธ ์ค์ฆ๋น ๊ณ์ฐ
frequency_wide <- frequency_wide %>%
mutate(ratio_moon = ((moon + 1)/(sum(moon + 1))), # ๋ฌธ์ฌ์ธ ์ ๋ํต๋ น์ ์ฐ์ค๋ฌธ์์ ๋จ์ด์ ๋น์ค ๊ณ์ฐ
ratio_park = ((park + 1)/(sum(park + 1))), # ๋ฐ๊ทผํ ์ ๋ํต๋ น์ ์ฐ์ค๋ฌธ์์ ๋จ์ด์ ๋น์ค ๊ณ์ฐ
odds_ratio = ratio_moon/ratio_park, # ์ค์ฆ๋น ๊ณ์ฐ
log_odds_ratio = log(odds_ratio)) # ๋ก๊ทธ ์ค์ฆ๋น ๊ณ์ฐ
frequency_wide
# A tibble: 955 ร 7
word moon park ratio_moon ratio_park odds_ratio log_odds_ratio
<chr> <int> <int> <dbl> <dbl> <dbl> <dbl>
1 ๊ฐ๋ 1 0 0.000873 0.000552 1.58 0.459
2 ๊ฐ์ฌ 1 0 0.000873 0.000552 1.58 0.459
3 ๊ฐ์ด 2 0 0.00131 0.000552 2.37 0.865
4 ๊ฐ์กฑ 1 1 0.000873 0.00110 0.791 -0.234
5 ๊ฐ์กฑ๊ตฌโฆ 1 0 0.000873 0.000552 1.58 0.459
6 ๊ฐ์ง 4 0 0.00218 0.000552 3.96 1.38
7 ๊ฐ์น 3 1 0.00175 0.00110 1.58 0.459
8 ๊ฐ์ข
1 0 0.000873 0.000552 1.58 0.459
9 ๊ฐ๋น 1 0 0.000873 0.000552 1.58 0.459
10 ๊ฐ๋ ฅ 3 0 0.00175 0.000552 3.17 1.15
# โน 945 more rows
# ๋ก๊ทธ ์ค์ฆ๋น๋ฅผ ๊ธฐ์ค์ผ๋ก ์๋์ ์ผ๋ก ์ค์ํ ๋จ์ด ์ถ์ถ
top10 <- frequency_wide %>%
group_by(president = ifelse(log_odds_ratio > 0, "moon", "park")) %>% # ๋ก๊ทธ ์ค์ฆ๋น๊ฐ ์์์ด๋ฉด ๋ณ์ president์ "moon", ๊ทธ๋ ์ง ์์ผ๋ฉด "park" ํ ๋นํ ํ ๊ทธ๋ฃนํ
slice_max(abs(log_odds_ratio), n = 10, # ๋ก๊ทธ ์ค์ฆ๋น์ ์ ๋๊ฐ ๊ธฐ์ค์ผ๋ก ์์ 10๊ฐ์ ๋จ์ด ์ถ์ถ -> ์์์ ๊ทธ๋ฃนํ๋ฅผ ์ํํ๊ธฐ ๋๋ฌธ์ ๊ฐ ์ฐ์ค๋ฌธ์์ ์์ 10๊ฐ์ ๋จ์ด ์ถ์ถ
with_ties = F) # ๋น๋๊ฐ ๋์ผํ๋๋ผ๋ ์ต์
n์ ์ง์ ํ ๊ฐ์๋งํผ๋ง ๋จ์ด ์ถ์ถ
top10
# A tibble: 20 ร 8
# Groups: president [2]
word moon park ratio_moon ratio_park odds_ratio log_odds_ratio
<chr> <int> <int> <dbl> <dbl> <dbl> <dbl>
1 ๋ณต์ง๊ตญโฆ 8 0 0.00393 0.000552 7.12 1.96
2 ์ธ์ 6 0 0.00306 0.000552 5.54 1.71
3 ์ฌ์ฑ 6 0 0.00306 0.000552 5.54 1.71
4 ์ ์ 6 0 0.00306 0.000552 5.54 1.71
5 ๊ฐ์ 5 0 0.00262 0.000552 4.75 1.56
6 ๊ณตํ 5 0 0.00262 0.000552 4.75 1.56
7 ๋ํต๋ นโฆ 5 0 0.00262 0.000552 4.75 1.56
8 ๋ณดํต 5 0 0.00262 0.000552 4.75 1.56
9 ์์ 5 0 0.00262 0.000552 4.75 1.56
10 ์ง๋ฐฉ 5 0 0.00262 0.000552 4.75 1.56
11 ๋ฐ๊ทผํ 0 8 0.000436 0.00496 0.0879 -2.43
12 ์ฌ๋ฌ๋ถ 2 20 0.00131 0.0116 0.113 -2.18
13 ํ๋ณต 3 23 0.00175 0.0132 0.132 -2.03
14 ์ค์ฒ 0 5 0.000436 0.00331 0.132 -2.03
15 ์ ๋ณด 0 5 0.000436 0.00331 0.132 -2.03
16 ํฌ๋ช
0 5 0.000436 0.00331 0.132 -2.03
17 ๊ณผ์ 0 4 0.000436 0.00276 0.158 -1.84
18 ๊ตญ์ ์ดโฆ 0 4 0.000436 0.00276 0.158 -1.84
19 ์์ 0 4 0.000436 0.00276 0.158 -1.84
20 ์ง์ 0 4 0.000436 0.00276 0.158 -1.84
# โน 1 more variable: president <chr>
# 3. TF-IDF ๊ณ์ฐ
frequency <- frequency %>% # ๋จ์ด ๋น๋๊ฐ ์ ์ฅ๋์ด ์๋ ๊ฐ์ฒด
bind_tf_idf(term = word, # ๋จ์ด๊ฐ ์
๋ ฅ๋์ด ์๋ ๋ณ์
document = president, # ํ
์คํธ ๊ตฌ๋ถ ๋ณ์
n = n) %>% # ๋จ์ด ๋น๋๊ฐ ์
๋ ฅ๋์ด ์๋ ๋ณ์
arrange(desc(tf_idf)) # TF-IDF ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ
frequency
# A tibble: 1,131 ร 6
president word n tf idf tf_idf
<chr> <chr> <int> <dbl> <dbl> <dbl>
1 park ๋ฐ๊ทผํ 8 0.00932 0.693 0.00646
2 moon ๋ณต์ง๊ตญ๊ฐ 8 0.00599 0.693 0.00415
3 park ์ค์ฒ 5 0.00583 0.693 0.00404
4 park ์ ๋ณด 5 0.00583 0.693 0.00404
5 park ํฌ๋ช
5 0.00583 0.693 0.00404
6 park ๊ณผ์ 4 0.00466 0.693 0.00323
7 park ๊ตญ์ ์ด์ 4 0.00466 0.693 0.00323
8 park ์์ 4 0.00466 0.693 0.00323
9 park ์ง์ 4 0.00466 0.693 0.00323
10 moon ์ธ์ 6 0.00449 0.693 0.00311
# โน 1,121 more rows
# TF-IDF ๊ธฐ์ค์ผ๋ก ์๋์ ์ผ๋ก ์ค์ํ ๋จ์ด ์ถ์ถ
top10 <- frequency %>%
group_by(president) %>% # ๋ณ์ president์ ๋ํด ๊ทธ๋ฃนํ
slice_max(n, n = 10, # TF-IDF๊ฐ ๊ฐ์ฅ ๋์ 10๊ฐ์ ๋จ์ด ์ถ์ถ
with_ties = F) # ๋น๋๊ฐ ๋์ผํ๋๋ผ๋ ์ต์
n์ ์ง์ ํ ๊ฐ์๋งํผ๋ง ๋จ์ด ์ถ์ถ
top10
# A tibble: 20 ร 6
# Groups: president [2]
president word n tf idf tf_idf
<chr> <chr> <int> <dbl> <dbl> <dbl>
1 moon ๊ตญ๋ฏผ 21 0.0157 0 0
2 moon ์ผ์๋ฆฌ 21 0.0157 0 0
3 moon ๋๋ผ 19 0.0142 0 0
4 moon ์ฐ๋ฆฌ 17 0.0127 0 0
5 moon ๊ฒฝ์ 15 0.0112 0 0
6 moon ์ฌํ 14 0.0105 0 0
7 moon ์ฑ์ฅ 13 0.00973 0 0
8 moon ๋ํต๋ น 12 0.00898 0 0
9 moon ์ ์น 12 0.00898 0 0
10 moon ํ๊ฒ 12 0.00898 0 0
11 park ๊ตญ๋ฏผ 72 0.0839 0 0
12 park ํ๋ณต 23 0.0268 0 0
13 park ์ฌ๋ฌ๋ถ 20 0.0233 0 0
14 park ์ ๋ถ 17 0.0198 0 0
15 park ๊ฒฝ์ 15 0.0175 0 0
16 park ์ ๋ขฐ 11 0.0128 0 0
17 park ๊ตญ๊ฐ 10 0.0117 0 0
18 park ์ฐ๋ฆฌ 10 0.0117 0 0
19 park ๊ต์ก 9 0.0105 0 0
20 park ์ฌ๋ 9 0.0105 0 0
Text and figures are licensed under Creative Commons Attribution CC BY 4.0. The figures that have been reused from other sources don't fall under this license and can be recognized by a note in their caption: "Figure from ...".