작년 하반기부터 일부 기업에서 시범적으로 AI면접을 도입하기 시작했다. 작년에는 부산은행, 경동나비엔, 대한송유관공사, 오리온 등 몇몇 회사가 AI면접을 도입했었다고 한다. AI 면접에서는 간단한 자기소개와 장, 단점을 말해보라는 기본적인 질문부터 여러 가지 상황에 따른 돌발 질문에 답하게 하는 등 여러 가지 타입의 문항이 있다고 한다. 심지어 하노이 탑과 같은 간단한 온라인 게임도 있다. 

인공지능 면접은 장점과 단점이 동일하다. 인공지능 채용 시스템의 가장 큰 장점은 인간의 주관이 개입되지 않는다는 점이다. 객관적인 데이터로만 평가하니 주관적인 감정이 평가에 들어가지 않는 것이다. 특히 한국 사회에서 정말 민감한 채용 비리와 같은 문제가 인공지능 채용에 관심을 갖게 하는 이유 중 하나일 것이다. 

단점은 현재 주어진 데이터에만 기반을 두고 채용을 결정하기 때문에 향후 성장 가능성에 대한 고려가 없다는 것이다. 또한 내가 AI 면접을 본다고 생각하면 면접 과정에서 사람이 아닌 PC를 보고 답하는 방식에 대해 거부감이 생길 것 같다. 

 

 

(참고: 아래는 AI면접을 준비할 수 있는 사이트)

https://viewinter.ai/ui/index.html#/

 

AI면접, 면접준비, 비디오 면접, AI면접 꿀팁, 면접분석 | 뷰인터

스스로, 인공지능 면접, AI면접 꿀팁, 대면면접 연습, AI, 비디오, 면접, 면접연습을 할 수 있게 도와주는 인공지는 비디오 서비스, 뷰인터

viewinter.ai

 

인터랙티브 그래프(Interactive Graph)란?

- 마우스 움직임에 반응하며 실시간으로 형태가 변하는 그래프

 

** 참고

https://plot.ly/ggplot2/ 에 접속하면 plotly 패키지를 이용해 만든 인터랙티브 그래프들 직접 조작 가능

 

plotly

Plotly for ggplot2 is an interactive, browser-based charting library built on Plotly's open source javascript graphing library, plotly.js. It works entirely locally, through the HTML widgets framework.

plot.ly

 

 

■ plotly 패키지로 인터랙티브 그래프 만들기

(1) 패키지 준비하기

install.packages("plotly")
library(plotly)

 

(2) ggplot2로 그래프 만들기

- ggplot2로 만든 그래프를 plotly 패키지의 ggplotly()에 적용하면 인터랙티브 그래프가 생성됨

- 먼저 ggplot()을 이용해 그래프 제작 (mpg 데이터를 이용할 예정)

library(ggplot2)
p <- ggplot(data = mpg, aes(x = displ, y = hwy, col = drv)) + geom_point()

 

(3) 인터랙티브 그래프 만들기

ggplotly(p)

 

(4) HTML로 저장하기

- 뷰어 창에서 [Export > Save as Web Page...]를 클릭하면 인터랙티브 그래프를 HTML 포맷으로 저장 가능

인터랙티브 산점도 그래프.html
4.14MB

 

(5) 인터랙티브 막대 그래프 만들기

- 산점도 외에도 ggplot2 패키지로 만든 그래프는 ggplotly()를 이용해 인터랙티브 그래프로 제작 가능

- ggplot2 패키지에 내장된 diamonds 데이터(다이아몬드 5만여 개의 캐럿, 컷팅 방식, 가격 등의 속성을 담은 데이터)를 이용해 막대 그래프를 만든 후 ggplotly()에 적용해 인터랙티브 그래프 제작

 

 

 

 

■ dygraphs 패키지로 인터랙티브 시계열 그래프 만들기

- 인터랙티브 시계열 그래프를 이용하면 마우스로 시간 축을 움직이면서 시간에 따라 데이터가 어떻게 변하는지 자세히 살펴볼 수 있음

- ggplot2 패키지에 내장된 economics 데이터를 이용해 그래프 제작 (economics는 실업자 수, 저축률 등 1967~2015년 미국의 월별 경제 지표를 담은 데이터)

 

(1) dygraphs 패키지 설치 및 로드

install.packages("dygraphs")
library(dygraphs)

 

(2) economics 데이터 불러오기

economics <- ggplot2::economics
head(economics)

 

(3) 데이터 타입 변경하기

- ★ dygraphs 패키지를 이용해 인터랙티브 시계열 그래프를 만들려면 데이터가 시간 순서 속성을 지니는 xts 데이터 타입으로 되어 있어야 함

- xts()를 이용해 economics 데이터의 unemploy(실업자 수)를 xts 타입으로 변경

(참고: xts 패키지는 R에 내장되어 있으니 별도 설치 필요X)

library(xts)
eco <- xts(economics$unemploy, order.by = economics$date)
head(eco)

 

(4) 인터랙티브 시계열 그래프 만들기

- dygraphs 패키지의 dygraph()를 이용해 인터랙티브 시계열 그래프 제작

dygraph(eco)

선 위에 마우스 커서를 올리면 그래프 우측 상단에 날짜와 실업자 수가 표시됨

 

(5) 날짜 범위 선택 기능

- dygraph()에 %>%를 이용해 dyRangeSelector()를 추가하면 그래프 아래에 날짜 범위 선택 기능이 추가됨

- 버튼을 움직여 특정 기간만 선택 가능하고, 범위를 정한 뒤 좌우로 움직이면 시간에 따른 데이터의 변화를 볼 수 있음

dygraph(eco) %>% dyRangeSelector()

 

 

(6) 여러 값 표현하기

- 인터랙티브 시게열 그래프여러 값을 동시에 표현 가능함 (시간을 중심으로 나머지 데이터들 표현 가능)

- economics 데이터의 unemploy(실업자 수)와 psavert(저축률)를 그래프에 함께 표현 가능

# 저축률
eco_a <- xts(economics$psavert, order.by = economics$date)

# 실업자 수
eco_b <- xts(economics$unemploy/1000, odrer.by = economics$date)

 

(7)

eco2 <- cbind(eco_a, eco_b)                   # 데이터 결합
colnames(eco2) <- c("psavert", "unemploy")    # 변수명 바꾸기
head(eco2)

 

(8) dygraph()를 이용해 인터랙티브 시계열 그래프 제작

dygraph(eco2) %>% dyRangeSelector()

마우스 커서를 올리면 그래프 우측 상단에 두 변수의 값이 동시에 표시됨

 

 

 

 

** 참고한 자료

- Plotly ggplot2 Library: https://plot.ly/ggplot2/

 

plotly

Plotly for ggplot2 is an interactive, browser-based charting library built on Plotly's open source javascript graphing library, plotly.js. It works entirely locally, through the HTML widgets framework.

plot.ly

- dygraphs for R: http://rstudio.github.io/dygraphs

 

dygraphs for R

The dygraphs package is an R interface to the dygraphs JavaScript charting library. It provides rich facilities for charting time-series data in R, including: Automatically plots xts time series objects (or any object convertible to xts). Highly configurab

rstudio.github.io

 

(출처; 가천대학교 컴퓨터공학과, 이영호 교수님)

(출처; 쉽게 배우는 R 데이터 분석, 김영우)

단계 구분도(Choropleth Map)란?

- 지역별 통계치를 색깔의 차이로 표현한 지도

- 인구나 소득 같은 특성이 지역별로 얼마나 다른지 쉽게 이해 가능

 

 

■ 미국 주별 강력 범죄율 단계 구분도 만들기

(1) 패키지 준비하기

- 단계 구분도는 ggiraphExtra 패키지를 이용

install.packages("ggiraphExtra")
library(ggiraphExtra)

 

(2) 미국 주별 범죄 데이터 준비하기

- R에 내장된 USArrests 데이터는 1973년 미국 주(state)별 강력 범죄율 정보를 담고 있음

 

(3) 새 데이터 프레임 생성, 변수 속성 변경하기

- USArrests 데이터는 지역명 변수가 따로 없고, 대신 행 이름(rownames)이 지역명으로 되어 있음

- tibble 패키지의 rownames_to_column()을 이용해 행 이름을 state 변수로 바꿔 새 데이터 프레임 생성

(참고: tibble 패키지는 dplyr을 설치하면 자동으로 설치됨)

- 뒤에서 사용할 지도 데이터의 지역명 변수는 모든 값이 소문자로 되어 있기 때문에 이와 동일하게 맞추기 위해 tolower()를 이용해 state 값을 소문자로 수정

library(tibble)

crime <- rownames_to_column(USArrests, var = "state")
crime$state <- tolower(crime$state)

str(crime)

 

(4) 미국 주 지도 데이터 준비하기

- 단계 구분도 생성 시 지역별 위도, 경도 정보가 있는 지도 데이터 필요

- R에 내장된 maps 패키지에 미국 주별 위경도를 나타낸 state 데이터 존재. ggplot2 패키지의 map_data()를 이용해 이 데이터를 데이터 프레임 형태로 호출

install.packages("maps")
install.packages("mapproj")
library(ggplot2)
states_map <- map_data("state")
str(states_map)

(참고: map_data를 사용하려면 maps, mapproj 이라는 패키지가 설치되어 있어야함)

 

(5) 단계 구분도 만들기

- ggiraphExtra 패키지의 ggChoropleth()를 이용해 단계 구분도 제작

- 살인 범죄 건수를 색깔로 표현하기 위해 aes의 fill에 Murder 변수 지정

- map_id에 지역 구분이 되는 state 변수 지정

- crime 데이터의 state 변수와 states_map 데이터의 region 변수는 미국 주 이름을 나타내는 동일한 값으로 구성되어 있음

 

 

(6) 인터랙티브 단계 구분도 만들기

- interactive 파라미터를 TRUE로 설정하면, 마우스 움직임에 반응하는 인터랙티브 단계 구분도 제작 가능

- 5번의 코드 제일 뒷부분에 interactive = T 만 추가하면 됨

- 뷰어창의 인터랙티브 단계 구분도는 [Export > Save as Web Page...]를 클릭하면 HTML 포맷으로 저장 가능

ggChoropleth(data = crime,
             aes(fill = Murder,        
                 map_id = state),      
             map = states_map,
             interactive = T)

 

움짤 만들기 귀찮아서 직접 촬영,,,,

 

 

 

 

(출처; 가천대학교 컴퓨터공학과, 이영호 교수님)

(출처; 쉽게 배우는 R 데이터 분석, 김영우)

텍스트 마이닝(Text mining)이란?

- 문자로 된 데이터에서 가치 있는 정보를 얻어 내는 분석 기법

 

텍스트 마이닝 과정

1. 형태소 분석(Morphology Analysis) - 문장을 구성하는 어절들이 어떤 품사로 되어 있는지 파악

2. 단어 빈도수 분석(TF_Term Frequency) - 형태소 분석으로 어절들의 품사를 파악한 후, '명사', '동사', '형용사' 등 의미를 지닌 품사의 단어를 추출해 각 단어가 얼마나 많이 등장했는지 확인 (명사, 동사 제일 의미 有)

3. 빈도표 만들기

4. 시각화

 

 

 

■ 텍스트 마이닝 준비하기

(1) 패키지 준비하기

- 한글 자연어 분석 패키지 <KoNLP(Korean Natural Language Processing)> 이용

- KoNLP는 자바(Java)가 설치되어 있어야 사용 가능. 사용 중인 OS에 맞는 파일을 다운로드해 설치할 것

자바 다운로드 https://www.java.com/ko/download/manual.jsp

 

모든 운영 체제용 Java 다운로드

모든 운영 체제용 Java 다운로드 권장 사항 Version 8 Update 211 릴리스 날짜: 2019년 4월 16일 Oracle Java 중요 라이센스 업데이트 Oracle Java 라이센스는 2019년 4월 16일 릴리스부터 변경되었습니다. 새로운 Oracle Java SE에 대한 Oracle Technology Network 라이센스 합의서는 이전 Oracle Java 라이센스와는 상당히 다릅니다. 새로운 라이센스는 개인 용도 및 개발 용도와 같

www.java.com

(참고: OS 버전은 [제어판] >> [시스템 및 보안] >> [시스템]의 '시스템 종류'에서 확인 가능)

(참고: 패키지를 로드했는데 에러 메시지가 출력된다면? - 포스팅 하단 참고)

 

 

(2) rJava, memoise 패키지 설치

- KoNLP를 사용하려면 rJava, memoise 패키지가 설치되어 있어야 함. 두 패키지를 먼저 설치한 후 KoNLP 설치

install.packages("rJava")
install.packages("memoise")
install.packages("KoNLP")

 

(3) dplyr 패키지 로드

- 설치가 완료되면 KoNLP와 전처리 작업에 사용할 dplyr을 로드

library(KoNLP)
library(dplyr)

 

(4) 사전 설정하기

- KoNLP에서 지원하는 NIA 사전은 98만여 개의 단어로 구성 (형태소 분석하는 데 이 사전 이용)

UseNIADic()

 

(5) 데이터 준비하기

- 깃허브(bit.ly/doit_rd)에서 hiphop.txt 파일을 다운로드해 프로젝트 폴더에 삽입 (텍스트 파일에는 멜론 차트 랩/힙합 부문 상위 50곡의 가사 있음)

- readLines()로 불러와 일부를 출력

- hiphop.txt는 아래와 같은 노래들의 가사로 구성되어 있음. 50위 전체 목록은 깃허브에 공유한 SongList.xlsx 파일에 있음.

# 데이터 불러오기
txt <- readLines("hiphop.txt")
head(txt)

## [1] "\"보고싶다"                    "이렇게 말하니까 더 보고 싶다"
## [3] "너희 사진을 보고 있어도"        "보고 싶다"
## [5] "너무 야속한 시간"              "나는 우리가 밉다"

 

(6) 특수문자 제거하기

- 문장에 이모티콘이나 특수문자가 포함되어 있으면 오류가 발생할 수 있음

- 문자 처리 패키지인 stringrstr_replace_all()을 이용해 문장에 들어 있는 특수문자를 빈칸으로 수정

install.packages("stringr")
library(stringr)

# 특수문자 제거
txt <- str_replace_all(txt, "\\W", " ")

(참고: str_replace_all()에 사용된 기호 \\W는 특수문자를 의미하는 '정규 표현식'. 정규 표현식을 이용하면 문장의 내용 중 이메일 주소, 전화 번호처럼 특정한 규칙으로 되어 있는 부분을 추출 가능)

 

 

■ 가장 많이 사용된 단어 알아보기

(1) 명사 추출하기

- KoNLPextractNoun()를 이용하면 문장에서 명사 추출 가능

- 명사를 보면 문장이 무엇에 대한 내용인지 파악 가능

extractNoun("대한민국의 영토는 한반도와 그 부속도서로 한다")

## [1] "대한민국" "영토" "한반도" "부속도서" "한"

 

(2) 빈도표 만들기

- 빈도표는 테이블(table) 형태이므로 다루기 쉽도록 데이터 프레임으로 변환하고 변수명을 수정

# 가사에서 명사 추출
nouns <- extractNoun(txt)

# 추출한 명사 list를 문자열 벡터로 변환, 단어별 빈도표 생성
wordcount <- table(unlist(nouns))

# 데이터 프레임으로 변환
df_word <- as.data.frame(wordcount, stringsAsFactors = F)

# 변수명 수정
df_word <- rename(df_word, word = Var1, freq = Freq)

(참고: extractNoun()은 출력 결과를 리스트 형태로 반환. table(unlist(nouns))는 리스트로 되어 있는 nouns를 빈도 테이블로 변환하는 기능을 함.)

 

(3) 자주 사용된 단어 빈도표 만들기

- 한 글자로 된 단어는 의미가 없는 경우가 많기 때문에 nchar()를 이용해 두 글자 이상으로 된 단어만 추출

df_word <- filter(df_word, nchar(word) >= 2)

 

(4) 상위 20개 단어 추출

- 빈도 순으로 정렬한 후 상위 20개 단어 추출

top_20 <- df_word %>%
	arrange(desc(freq)) %>%
    head(20)
    
top_20

##    word freq
## 1   you   89
## 2    my   86
## 3   YAH   80
## 4    on   76
## 5   하나   75
.
.
.

- 텍스트가 힙합 가사이기 때문에 you, my, YAH 같은 영단어가 많이 사용됐다는 것을 알 수 있음

 

 

 워드 클라우드 만들기

워드 클라우드(Word cloud)란?

- 단어의 빈도를 구름 모양으로 표현한 그래프

- 단어의 빈도에 따라 글자의 크기와 색깔이 다르게 표현되기 때문에 어떤 단어가 얼마나 많이 사용됐는지 한 눈에 파악 가능

 

(1) 패키지 준비하기

- wordcloud 패키지 이용

- RColorBrewer 패키지 이용 (글자 색깔을 표현하는 데 사용) cf. RColorBrewer 패키지는 R에 내장되어 있으니 별도로 설치하지 않아도 됨

 

(2) 단어 색상 목록 만들기

- RColorBrewer 패키지의 brewer.pal()을 이용해 단어의 색깔을 지정할 때 사용할 색상 코드(Hex Color Code) 목록 생성

# Dark2 색상 목록에서 8개 색상 추출
pal <- brewer.pal(8, "Dark2")

 

(3) 난수 고정하기

- wordcloud()는 함수를 실행할 때마다 난수를 이용해 매번 다른 모양의 워드 클라우드를 생성함. 항상 동일한 워드 클라우드가 생성되도록 wordcloud()를 실행하기 전에 set.seed()로 난수를 고정

set.seed(1234)

 

(4) 워드 클라우드 만들기

- df_word 이용해 워드 클라우드 생성 (df_word는 단어와 단어가 사용된 빈도, 두 변수로 구성된 데이터 프레임)

- 출력된 워드 클라우드는 많이 사용된 단어일수록 글자가 크고 가운데에 배치

- 덜 사용된 단어일수록 글자가 작고 바깥쪽에 배치되는 형태로 구성

 

 

(5) 단어 색상 바꾸기

pal <- brewer.pal(9, "Blues")[5:9]  # 색상 목록 생성
set.seed(1234)                      # 난수 고정

- 파란색 계열의 색상 목록을 만들어 빈도가 높을수록 진한 파란색으로 표현됨

 

 

 

+ 추가

★ 패키지를 로드했는데 에러 메시지가 출력된다면?

- 'Error : .onLoad failed in loadNamespace() for 'rJava'' 라는 에러 메시지가 출력됐다면 자바가 설치된 폴더의 경로를 설정하는 코드를 실행한 후 다시 패키지를 로드하세요. 설치 경로는 자바의 버전이나 OS에 따라 다를 수 있으니 'C:/Program Files/Java/' 에서 확인한 후 자신의 환경에 맞게 설정하세요.

# java 폴더 경로 설정
Sys.setenv(JAVA_HOME="C:/Program Files/Java/jre1.8.0_111/")

 

 

 

(출처; 가천대학교 컴퓨터공학과, 이영호 교수님)

(출처; 쉽게 배우는 R 데이터 분석, 김영우)

+ Recent posts