1 문제 개요

PDF 파일에서 표를 추출하는 문제를 가정해보자. KPMG FY2018 투명성 보고서에서 20 페이지에 위치한 “소속공인회계사의 경력 현황” 표를 추출하는 경우가 이에 해당된다.

PDF 파일의 특정 영역에서 표를 가져오는 사례

2 PDF 파일에서 영역 특정

가장 먼저 해야되는 문제는 PDF 파일에서 표가 들어 있는 영역을 특정하는 것이다.

PDF 파일에서 표추출

PDF 파일에서 표추출

3 표위치 특정 - pdf_data()

KPMG FY2018 투명성 보고서에서 20 페이지에 위치한 “소속공인회계사의 경력 현황” 표를 특정하기 위해서 먼저 경로명을 입력한다. pdf_data() 함수를 사용해서 해당 표에 해당되는 모든 텍스트를 가져온다.

# A tibble: 19 x 6
   width height     x     y space text     
   <int>  <int> <int> <int> <lgl> <chr>    
 1    40     10    92   645 FALSE 사업부문 
 2    35     10   150   645 FALSE 1년미만  
 3    43     10   204   639 FALSE 1년이상~ 
 4    35     10   211   651 FALSE 3년미만  
 5    43     10   263   639 FALSE 3년이상~ 
 6    35     10   269   651 FALSE 5년미만  
 7    43     10   322   639 FALSE 5년이상~ 
 8    41     10   325   651 FALSE 10년미만 
 9    48     10   378   639 FALSE 10년이상~
10    41     10   384   651 FALSE 15년미만 
11    41     10   440   645 FALSE 15년이상 
12    23     11   100   675 FALSE 인원     
13    20     11   157   675 FALSE 290      
14    20     11   216   675 FALSE 428      
15    20     11   275   675 FALSE 248      
16    20     11   333   675 FALSE 326      
17    20     11   392   675 FALSE 173      
18    20     11   451   675 FALSE 115      
19    31     11   496   675 FALSE 1,580    

4 위치 DF → 표 DF

앞서 추출한 위치를 포함한 데이터프레임을 표 데이터프레임으로 변환시킨다.

# A tibble: 14 x 2
   fieldname_value clean_text       
   <chr>           <chr>            
 1 field           사업부문         
 2 field           1년미만          
 3 field           1년이상~3년미만  
 4 field           3년이상~5년미만  
 5 field           5년이상~10년미만 
 6 field           10년이상~15년미만
 7 field           15년이상         
 8 value           인원             
 9 value           290              
10 value           428              
11 value           248              
12 value           326              
13 value           173              
14 value           115              

5 분석가능한 데이터프레임

다음 단계로 시각화 및 각종 통계분석을 위해서 자료형을 적절히 맞춘다. 즉, 사업구분은 범주형으로 범주수준도 유의미하게 맞추고, 인원수도 숫자로 인식시킨다. 이를 바탕으로 ggplot 으로 시각화 한다.