오픈소스(R) 프로그래밍 3
데이터 시각화하기ㆍ수집하기


이상일(서울대학교 지리교육과 교수)

2026-01-02

데이터 시각화하기

데이터사이언스 프로세스

  • 데이터 시각화하기(visualize): 데이터에 내재된 패턴, 관계, 분포, 변화, 이상값 등을 시각적으로 표현하여 인간의 인지와 해석을 돕는 과정으로, EDA(exploratory data analysis)의 핵심 부분

데이터사이언스 프로세스: 타이디버스

https://r4ds.hadley.nz/intro.html

ggplot2 패키지

https://ggplot2.tidyverse.org/

ggplot2 패키지

https://allisonhorst.com/r-packages-functions

ggplot2 패키지

https://allisonhorst.com/r-packages-functions

GG: The Grammar of Graphics (1999)

샤를 조제프 미나르의 1812 나폴레옹 러시아 원정도

https://en.wikipedia.org/wiki/Charles_Joseph_Minard

ggplot2의 8대 구성요소

https://initiation.doana-r.com/06-ggplot2#1

핵심 구성요소: 데이터(data)

  • 시각화의 가장 기본적인 요소

    • 데이터프레임
  • 최상위 함수에서 글로벌 지정

    • ggplot(data = 데이터프레임명) 혹은 ggplot(데이터프레임명)
  • 특정한 기하객체에 로컬 지정 가능

    • geom_*(data = 데이터프레임명)
  • 다중 지정 가능

    • 다양한 기하객체에 개별적으로 로컬 지정

핵심 구성요소: 기하객체(geometries)

  • 플롯의 전체 구조 혹은 형식을 규정

  • 플롯의 유형

    • 막대플롯(bar plot), 라인플롯(line plot), 산점도(scatter plot) 등
  • 독립 함수

    • geom_*()
  • ggplot() 함수 뒤에 +로 연결하여 지정

핵심 구성요소: 시각속성(aesthetics)

  • 플롯의 외견을 규정

  • 데이터 값의 다양성을 시각적으로 나타내주는 그래픽 요소(자원)

    • 컬러(color), 크기(size), 형태(shape), 위치(position)(x-축, y-축), 투명도(alpha) 등
  • 시각속성 매핑(mapping)

    • 특정한 시각속성을 특정한 컬럼에 부여하는 과정
  • 독립 함수가 아님: mapping 인수의 aes() 보조 함수로 지정

    • ggplot() 그리고/혹은 geom_*() 함수의 내부

    • mapping = aes(시각속성 = 컬럼명) 혹은 aes(시각속성 = 컬럼명)

핵심 구성요소: 데이터, 시각속성, 기하객체

library(gapminder)
gapminder
# A tibble: 1,704 × 6
   country     continent  year lifeExp      pop gdpPercap
   <fct>       <fct>     <int>   <dbl>    <int>     <dbl>
 1 Afghanistan Asia       1952    28.8  8425333      779.
 2 Afghanistan Asia       1957    30.3  9240934      821.
 3 Afghanistan Asia       1962    32.0 10267083      853.
 4 Afghanistan Asia       1967    34.0 11537966      836.
 5 Afghanistan Asia       1972    36.1 13079460      740.
 6 Afghanistan Asia       1977    38.4 14880372      786.
 7 Afghanistan Asia       1982    39.9 12881816      978.
 8 Afghanistan Asia       1987    40.8 13867957      852.
 9 Afghanistan Asia       1992    41.7 16317921      649.
10 Afghanistan Asia       1997    41.8 22227415      635.
# ℹ 1,694 more rows
gapminder_2007 <- gapminder |> 
  filter(year == 2007) 
ggplot(data = gapminder_2007, mapping = aes(x = gdpPercap, y = lifeExp)) +
  geom_point(mapping = aes(color = continent))
gapminder |> 
  filter(year == 2007) |> 
  ggplot(aes(x = gdpPercap, y = lifeExp)) +
  geom_point(aes(color = continent))

gapminder |> 
  filter(year == 2007) |> 
  ggplot(aes(x = gdpPercap, y = lifeExp)) +
  geom_point(aes(color = continent)) +
  geom_smooth()

핵심 구성요소: 기하객체의 종류

구분 내용 기하객체 이름
기본 플롯 geom_point() 점플롯(산점도)
geom_line() 선플롯(선그래프)
geom_area() 면적플롯
막대 geom_bar() 막대플롯
통계 플롯 분포

geom_boxplot()

geom_histogram()

박스플롯

히스토그램

추세선 geom_smooth() 평활곡선플롯
기타 텍스트

geom_text()

geom_label()

텍스트플롯

라벨플롯

지도 제작 geom_sf() sf플롯

핵심 구성요소: 시각속성의 종류

분류 시각속성 설명 성격
컬러 관련 aes(color = ) 점/선의 컬러 지정 정성 > 정량
aes(fill = ) 면의 필(컬러) 지정 정성 > 정량
aes(alpha = ) 점/선/면의 투명도 지정 정성 < 정량
차이 표현 관련 aes(shape = ) 점의 모양 지정 정량
aes(size = ) 점의 크기 지정 정성
aes(linetype = ) 선의 유형 지정 정성
aes(linewidth = ) 선의 크기 지정 정량
위치 관련 aes(x = ) x축 지정 정성/정량
aes(y = ) y축 지정 정성/정량
그룹화 관련 aes(group = ) 그룹화 기준 지정 정성

기타 구성요소: 스케일(scale)

기타 구성요소: 패싯(facet)

  • 다면생성(faceting)을 통해, 하나의 플롯을 여러 개의 하위 플롯으로 분할

  • 독립 함수

    • geom_*() 함수나 scale_시각속성_*() 함수 뒤에 +로 연결
  • 두 가지 중요 함수

기타 구성요소: 패싯(facet)

gapminder |> 
  filter(year == 2007) |> 
  ggplot(aes(x = log(gdpPercap), y = log(lifeExp))) +
  geom_point(aes(size = pop)) +
  geom_smooth()

gapminder |> 
  filter(year == 2007) |> 
  ggplot(aes(x = log(gdpPercap), y = log(lifeExp))) +
  geom_point(aes(size = pop)) +
  geom_smooth() +
  facet_wrap(~continent)

기타 구성요소: 통계적 변환

  • 시각화 과정에 통계적 변환을 수반: stat_*() 함수, 내부 함수

https://r4ds.hadley.nz/layers

기타 구성요소: 좌표(coordinates)

  • 그래픽 요소들의 위치 결정에 기준이 되는 준거 체계

  • 두 가지 중요 함수

  • 독립 함수

    • geom_*() 함수나 scale_시각속성_*() 함수 뒤에 +로 연결

기타 구성요소: 테마(theme)

  • 그래프의 전체적인 외양(테마)를 수정

    • 8개 테마 제공: theme_*() 함수
  • 그래프의 세부 구성 요소를 수정

  • 독립 함수

    • geom_*() 함수나 scale_시각속성_*() 함수 뒤에 +로 연결

기타 구성요소: 테마(theme)

https://r4ds.hadley.nz/communication

기타 구성요소: 테마(theme)

https://isabella-b.com/blog/ggplot2-theme-elements-reference/

ggplot2의 확장 프로그램

patchwork 패키지

https://allisonhorst.com/r-packages-functions

gganimate 패키지

https://allisonhorst.com/r-packages-functions

데이터 수집하기

데이터사이언스 프로세스

https://r4ds.hadley.nz/import.html

  • 데이터 ‘가져오기’: 대상이 되는 정보를 다양한 프로그래밍적 방법(웹 스크레이핑, 오픈 API 호출 등)을 통해 외부 시스템으로부터 획득하는 과정

두 가지 방식

  • 웹 스크레이핑(web scraping)

  • 오픈 API 활용

웹 스크레이핑

  • 웹페이지의 HTML 구조를 자동으로 분석하여 공개된 정보를 추출 및 수집하는 데이터 획득 기법

    • 데이터 긁어 오기

    • 데이터 크롤링(crawling)과 유사: 박박 기면서 수집하기

  • 해킹(hacking)과의 경계가 모호

    • 허가 없이 정보 시스템에 침투하여 데이터를 취득하는 행위
  • 최근들어 점점 회피하는 추세

HTML의 정의

  • HyperText Markup Language, 하이퍼텍스터 마크업 언어

    • 웹 브라우저를 통해 표출되는 사항(무엇이 어떻게)을 프로그래밍하는 마크업(markup) 언어 혹은 웹 다큐먼트를 작성하는 마크업 언어

      • 마크업 언어: 다큐먼트의 구조와 포맷을 관장하는 텍스트-엔코딩 시스템
  • 마크다운(markdown) 언어

    • 사용자의 편이성이 강화된 마크업 언어

    • Quarto: 비주얼 에디터

HTML의 기초

  • 웹페이지는 다양한 태그(tag)로 구성

    • 각 태그는 시작 태그와 종료 태그로 구성되며, 둘 사이에 해당 콘텐츠가 위치
  • 태그의 종류는 다양하며, 크게 세 가지로 구분

    • 최상위인 html 태그

    • 웹페이지의 전반적인 구조를 결정하는 블록(block) 태그

      • 예: h1, section, p, ol 태그 등
    • 블록 태그 내부의 특정 부분에만 적용되는 인라인(inline) 태그

      • 예: b, i, a 태그 등

HTML의 기초

  • 태그들은 복잡한 다단계 구조를 이룸

  • 태그는 속성(attribute)를 가질 수 있음

    • 특별히 중요한 속성: 클래스(class), 아이디(id)

    • p나 div 태그와 같은 블록 태그: height, width, margin, padding

    • img 태그: src, alt, width, height

    • a 태그: href

https://odinuv.cz/articles/html/

HTML 엘리먼트의 선택

  • HTML 엘리먼트

    • 태그와 속성으로 구성된 HTML의 한 단위 혹은 특정 부분

    • 웹 스크레이핑의 타깃의 주소

  • HTML 엘리먼트의 선택: CSS 선택자(casading style sheet selector)

선택 대상 CSS 선택자 결과
태그(tag) tag1 “tag1”이라는 이름의 모든 tag
클래스(class) .class1 “class1”이라는 class 속성을 갖는 모든 요소
아이디(id) #id1 “id1”이라는 id 속성을 갖는 모든 요소
tag와 class의 결합 tag1.class1 “tag1”이라는 tag의 “class1”이라는 class 속성을 갖는 모든 요소
class1과 class2의 결합 .class1.class2 “class1”이라는 이름의 class 속성과 “class2”라는 이름의 class 속성을 동시에 갖는 모든 요소

HTML 엘리먼트의 선택

  • 정확한 CSS 선택자의 확인

    • 웹페이지에서 오른쪽 마우스 버튼을 눌러 “검사” 선택한 뒤, 탐색

    • 브라우저 확장 프로그램의 활용: SelectGadget

rvest 패키지

https://rvest.tidyverse.org/

rvest 패키지를 활용한 웹 스크레이핑 절차

  • 1단계: 웹페이지 읽기

    • 웹 스크레이핑의 대상이 되는 웹페이지의 URL 읽기
  • 2단계: HTML 엘리먼트 선택

    • 필요한 정보를 포함하고 있는 엘리먼트의 지정
  • 3단계: 하위 엘리먼트 선택

    • 필요한 정보를 포함하고 있는 하위 엘리먼트의 지정
  • 4단계: 엘리먼트로부터 데이터 파싱

    • 데이블 데이터, 텍스트 등을 추출

사례 1: 스타워즈

vignette(“starwars”)

<section>
  <h2 data-id="1">The Phantom Menace</h2>
  <p>Released: 1999-05-19</p>
  <p>Director: <span class="director">George Lucas</span></p>
  
  <div class="crawl">
    <p>...</p>
    <p>...</p>
    <p>...</p>
  </div>
</section>

사례 1: 스타워즈

library(tidyverse)
library(rvest)
url <- "https://rvest.tidyverse.org/articles/starwars.html"
read_html(url) |> 
  html_elements("section") |> 
  html_element("h2") |> 
  html_text2()
library(tidyverse)
library(rvest)
url <- "https://rvest.tidyverse.org/articles/starwars.html"
read_html(url) |> 
  html_elements("section") |> 
  html_element("h2") |> 
  html_text2()
[1] "The Phantom Menace"      "Attack of the Clones"   
[3] "Revenge of the Sith"     "A New Hope"             
[5] "The Empire Strikes Back" "Return of the Jedi"     
[7] "The Force Awakens"      
section <- read_html(url) |> 
  html_elements("section")
tibble(
  title = section |> 
    html_element("h2") |> 
    html_text2(),
  released = section |> 
    html_element("p") |> 
    html_text2() |> 
    str_remove("Released: ") |> 
    parse_date(),
  director = section |> 
    html_element(".director") |> 
    html_text2(),
  intro = section |> 
    html_element(".crawl") |> 
    html_text2()
)
# A tibble: 7 × 4
  title                   released   director         intro                     
  <chr>                   <date>     <chr>            <chr>                     
1 The Phantom Menace      1999-05-19 George Lucas     "Turmoil has engulfed the…
2 Attack of the Clones    2002-05-16 George Lucas     "There is unrest in the G…
3 Revenge of the Sith     2005-05-19 George Lucas     "War! The Republic is cru…
4 A New Hope              1977-05-25 George Lucas     "It is a period of civil …
5 The Empire Strikes Back 1980-05-17 Irvin Kershner   "It is a dark time for th…
6 Return of the Jedi      1983-05-25 Richard Marquand "Luke Skywalker has retur…
7 The Force Awakens       2015-12-11 J. J. Abrams     "Luke Skywalker has vanis…

사례 2: 웹 상의 테이블

위키피디어: 전 세계 국가 관련 항목

library(tidyverse)
library(rvest)
url <- "https://en.wikipedia.org/wiki/List_of_countries_and_dependencies_by_population"
my_table <- url |> 
  read_html() |> 
  html_element("table") |> 
  html_table()
my_table
# A tibble: 240 × 6
   Location      Population    `% ofworld` Date     Source (official or …¹ Notes
   <chr>         <chr>         <chr>       <chr>    <chr>                  <chr>
 1 World         8,232,000,000 100%        13 Jun … UN projection[1][3]    ""   
 2 India         1,417,492,000 17.2%       1 Jul 2… Official projection[4] "[b]"
 3 China         1,408,280,000 17.1%       31 Dec … Official estimate[5]   "[c]"
 4 United States 340,110,988   4.1%        1 Jul 2… Official estimate[6]   "[d]"
 5 Indonesia     284,438,782   3.5%        30 Jun … National annual proje… ""   
 6 Pakistan      241,499,431   2.9%        1 Mar 2… 2023 census result[8]  "[e]"
 7 Nigeria       223,800,000   2.7%        1 Jul 2… Official projection[9] ""   
 8 Brazil        213,421,037   2.6%        1 Jul 2… Official estimate[10]  ""   
 9 Bangladesh    169,828,911   2.1%        14 Jun … 2022 census result[11] "[f]"
10 Russia        146,028,325   1.8%        1 Jan 2… Official estimate[13]  "[g]"
# ℹ 230 more rows
# ℹ abbreviated name: ¹​`Source (official or fromthe United Nations)`
my_table_new <- my_table |> 
  select(-Notes) |> 
  rename(
    location = "Location",
    population = "Population",
    pop_pct = "% ofworld",
    date = "Date",
    source = "Source (official or fromthe United Nations)"
  ) |> 
  mutate(
    population = parse_number(population, ",") |> as.numeric(),
    pop_pct = str_remove_all(pop_pct, "%") |> as.numeric(),
    date = dmy(date)
  )
my_table_new 
# A tibble: 240 × 5
   location      population pop_pct date       source                       
   <chr>              <dbl>   <dbl> <date>     <chr>                        
 1 World         8232000000   100   2025-06-13 UN projection[1][3]          
 2 India         1417492000    17.2 2025-07-01 Official projection[4]       
 3 China         1408280000    17.1 2024-12-31 Official estimate[5]         
 4 United States  340110988     4.1 2024-07-01 Official estimate[6]         
 5 Indonesia      284438782     3.5 2025-06-30 National annual projection[7]
 6 Pakistan       241499431     2.9 2023-03-01 2023 census result[8]        
 7 Nigeria        223800000     2.7 2023-07-01 Official projection[9]       
 8 Brazil         213421037     2.6 2025-07-01 Official estimate[10]        
 9 Bangladesh     169828911     2.1 2022-06-14 2022 census result[11]       
10 Russia         146028325     1.8 2025-01-01 Official estimate[13]        
# ℹ 230 more rows

오픈 API 활용: 정의

  • 데이터 제공자가 공식적으로 공개한 인터페이스를 통해 구조화된 데이터를 프로그램 방식으로 획득하는 방법

    • 데이터를 보유하고 있는 공적 기관이 데이터의 사용 권한을 사용자들에게 부여함으로써 데이터에 대한 접근성을 높여주는 일련의 방식
  • 오픈 API(application programming interface)

    • 복수의 프로그램들이 서로 상호작용하는 방법을 정의하는 일련의 통신 규약(protocol)

    • 한 애플리케이션이 다른 애플리케이션의 기능(데이터, 알고리즘)을 불러 사용할 수 있게 해주는 통로

    • API 키(key)

오픈 API 활용: 사례

httr2 패키지

https://httr.r-lib.org/

사례: 공공데이터포털

  • https://www.data.go.kr/

  • 회원가입

  • 데이터 검색: “전국 초중등학교 위치”

  • Open API, 인증키

    • Base URL: api.odcloud.kr/api
    • 일반 인증키(Decoding)
    • 데이터 API: /15099519/v1/uddi:e83bc47a-f235-4b44-96d8-a9d0686435a5

사례: 공공데이터포털

library(httr2)
base_url <- "https://api.odcloud.kr/api/15099519/v1/uddi:e83bc47a-f235-4b44-96d8-a9d0686435a5" 
request(base_url) |>
  req_url_query(
    serviceKey = your_api_key,
    page = 1,
    perPage = 1000
  ) |>
  req_perform() |> 
  resp_body_json() |> 
  _[["data"]] |> bind_rows() |> as_tibble() |> slice_head(n = 5)
# A tibble: 5 × 18
  경도          교육지원청명 교육지원청코드 데이터기준일자 변경일자 본교분교구분
  <chr>         <chr>                 <int> <chr>          <chr>    <chr>       
1 126.83075160… 전북특별자치도정읍교육…        8362000 2025-09-22     2025-07… 본교        
2 126.62621220… 인천광역시서부교육지원…        7361000 2025-09-22     2025-07… 본교        
3 127.61483550… 전북특별자치도장수교육…        8422000 2025-09-22     2025-07… 본교        
4 129.39651960… 경상북도포항교육지원청…        8761000 2025-09-22     2025-07… 본교        
5 129.07938730… 부산광역시동래교육지원…        7191000 2025-09-22     2025-07… 본교        
# ℹ 12 more variables: 생성일자 <chr>, 설립일자 <chr>, 설립형태 <chr>,
#   소재지도로명주소 <chr>, 소재지지번주소 <chr>, 시도교육청명 <chr>,
#   시도교육청코드 <int>, 운영상태 <chr>, 위도 <chr>, 학교ID <chr>,
#   학교급구분 <chr>, 학교명 <chr>
final_data <- map_dfr(1:12, function(p) {
  request(base_url) |>
    req_url_query(
      serviceKey = your_api_key, 
      page = p, 
      perPage = 1000) |>
    req_perform() |>
    resp_body_json() |>
    _[["data"]] |> bind_rows() |> as_tibble()
})
final_data
# A tibble: 12,000 × 18
   경도         교육지원청명 교육지원청코드 데이터기준일자 변경일자 본교분교구분
   <chr>        <chr>                 <int> <chr>          <chr>    <chr>       
 1 126.8307516… 전북특별자치도정읍교육…        8362000 2025-09-22     2025-07… 본교        
 2 126.6262122… 인천광역시서부교육지원…        7361000 2025-09-22     2025-07… 본교        
 3 127.6148355… 전북특별자치도장수교육…        8422000 2025-09-22     2025-07… 본교        
 4 129.3965196… 경상북도포항교육지원청…        8761000 2025-09-22     2025-07… 본교        
 5 129.0793873… 부산광역시동래교육지원…        7191000 2025-09-22     2025-07… 본교        
 6 128.8886173… 경상남도김해교육지원청…        9091000 2025-09-22     2025-07… 본교        
 7 128.0643803… 경상남도사천교육지원청…        9081000 2025-09-22     2025-07… 본교        
 8 126.4853077… 전라남도무안교육지원청…        8661000 2025-09-22     2025-07… 본교        
 9 126.7792304… 경기도파주교육지원청……        7681000 2025-09-22     2025-07… 본교        
10 128.5672852… 대구광역시서부교육지원…        7261000 2025-09-22     2025-07… 본교        
# ℹ 11,990 more rows
# ℹ 12 more variables: 생성일자 <chr>, 설립일자 <chr>, 설립형태 <chr>,
#   소재지도로명주소 <chr>, 소재지지번주소 <chr>, 시도교육청명 <chr>,
#   시도교육청코드 <int>, 운영상태 <chr>, 위도 <chr>, 학교ID <chr>,
#   학교급구분 <chr>, 학교명 <chr>

사례: KOSIS

  • KOSIS 공유서비스 웹페이지(https://kosis.kr/openapi/) 접속

  • 상단의 [활용신청] 탭 클릭

    • 통계청의 ONE-ID로 통합로그인(없으면 회원가입 필수)
  • 활용신청하여 사용자 인증키 획득

    • 사용자 인증키는 마이페이지에서 언제든 확인 가능
  • kosis 패키지: 주석훈

사례: KOSIS

https://sangillee.snu.ac.kr/dashboard_popgeo/

사례: 네이버 뉴스

  • NAVER Developer (https://developers.naver.com/main/)

  • [Products]-[서비스 API]-[검색] (https://developers.naver.com/products/service-api/search/search.md)

    • 오픈 API 이용 신청 절차

    • ClientID와 Client Secret 개념

    • 요청 URL: https://openapi.naver.com/v1/search/news.json

    • 파라미터: query, display, start, sort

  • 오픈 API 이용 신청

    • 애플리케이션 이름: 아무 이름이나 입력

    • 사용 API: ’검색’이 선택된 상태를 유지

    • 비로그인 오픈 API 서비스 환경: ‘WEB’ 설정

    • 웹 서비스 URL (최대 10개): ’http://localhost’를 입력

사례: 네이버 뉴스

library(httr2)
search <- "지역소멸"
base_url <- "https://openapi.naver.com/v1/search/news.json"
result_naver <- base_url |> 
  request() |> 
  req_headers(
    "X-Naver-Client-ID" = your_ClientID,
    "X-Naver-Client-Secret" = your_Client_Secret
  ) |> 
  req_url_query(
    query = search,
    display = 100,
    start = 1,
    sort = "date"
  ) |> 
  req_perform() |> 
  resp_body_json(check_type = FALSE) |> 
  pluck("items") |> bind_rows()
result_naver |> slice_head(n = 5)
# A tibble: 5 × 5
  title                                   originallink link  description pubDate
  <chr>                                   <chr>        <chr> <chr>       <chr>  
1 방치, 해체…골목의 시간은 '45년 전' 그날 멈췄다 [길걷수다]…… https://www… http… "수백년 전부터 사… Sun, 0…
2 [사설]새해도 <b>지역</b>에 아기 울음소리 계속 커지길…… http://www.… http… "증가, 출산에 관… Sun, 0…
3 성장보다 앞선 과제…올해를 '안전 대개조' 원년으로…… http://www.… http… "광주·전남은 전통… Sun, 0…
4 장수군의회 최한주 의장 신년사           http://www.… http… "이러한 변화의 흐… Sun, 0…
5 부안군의회 박병래 의장 신년사           http://www.… http… "경제 여건의 부담… Sun, 0…
naver_extractor <- function(base_url, search_item, n_start = 1, n_display = 100){
  news <- request(base_url) |> 
  req_headers(
    "X-Naver-Client-ID" = your_ClientID,
    "X-Naver-Client-Secret" = your_Client_Secret
  ) |> 
  req_url_query(
    query = search_item,
    display = n_display,
    start = n_start,
    sort = "date"
  ) |> 
  req_perform() |> 
  resp_body_json() |> pluck("items") |> bind_rows()
}

search <- "지역소멸"
rep <- 10
result_naver <- map_dfr(
  start_idx <- (0:(rep-1)) * 100 + 1,
  \(x) naver_extractor(
    a_url       = your_url,
    search_item = search,
    n_start     = x,
    n_display = 100
  )
)
result_naver |> slice_head(n = 5)
# A tibble: 5 × 5
  title                                   originallink link  description pubDate
  <chr>                                   <chr>        <chr> <chr>       <chr>  
1 방치, 해체…골목의 시간은 '45년 전' 그날 멈췄다 [길걷수다]…… https://www… http… "수백년 전부터 사… Sun, 0…
2 [사설]새해도 <b>지역</b>에 아기 울음소리 계속 커지길…… http://www.… http… "증가, 출산에 관… Sun, 0…
3 성장보다 앞선 과제…올해를 '안전 대개조' 원년으로…… http://www.… http… "광주·전남은 전통… Sun, 0…
4 장수군의회 최한주 의장 신년사           http://www.… http… "이러한 변화의 흐… Sun, 0…
5 부안군의회 박병래 의장 신년사           http://www.… http… "경제 여건의 부담… Sun, 0…

텍스트 마이닝과 자연어처리

  • 텍스트 마이닝

    • 비정형 텍스트 데이터로부터 패턴 또는 관계를 추출하여 의미 있는 정보를 찾아내는 기법

    • 기본 과정: 텍스트 전처리, 토큰화하기, 단어 빈도 분석하기

    • 고급 분석: 비교 분석, 감정 분석, 의미망 분석, 토픽 모델링 등

  • 자연어처리(NLP; natural language processing)

    • KoNLP(Korean Natural Language Processing)

mall 패키지

https://mlverse.github.io/mall/