-
[프로그래밍 팁] 엑셀 데이터 가져오기, 전치하기, 플롯 만들기!SAS 이야기/SAS 관련 뉴스 2018. 8. 14. 16:26
그래프를 만들 때 가장 어려운 작업은 무엇일까요? 바로 데이터를 준비하는 것인데요. 오늘은 엑셀 데이터를 SAS로 가져오고, 전치하고, 첫 열의 값을 데이터 값으로 사용하고, 플롯으로 요약하는 방법을 차례대로 소개해드리고자 합니다.
오늘 예시에서는 학생 대출 채무에 관한 데이터가 사용되는데요. 몇 년 전, 학생 대출 채무가 급증하면서 큰 이슈가 됐었고, 아래는 관련 기사에서 쓰인 그래프입니다.
이 그래프의 데이터는 newyorkfe.org 웹사이트에서 찾을 수 있었는데요. 엑셀 스프레드시트를 다운받은 후 해당 정보를 ‘Page 3 Data’ 탭에서 찾았습니다. 아래와 같이 기사에서 쓰인 데이터보다 업데이트된 최신 데이터가 포함되어 있는데요.
그리고 아래의 코드를 사용해 이 데이터를 SAS로 가져왔습니다.
proc import datafile="HHD_C_Report_2018Q1.xlsx" dbms=xlsx out=raw_data replace;
range="Page 3 Data$A3:BL9";
getnames=yes;
run;스프레드시트의 것과 매우 비슷한 SAS 데이터세트가 생겼는데요.
이렇게 SAS로 데이터를 옮겼지만, 이 상태로 그래프를 만들 수는 없습니다. 왜냐하면 연도와 분기, 즉 날짜가 변수의 값이 아닌 변수 이름의 일부분으로 암호화되어 있기 때문인데요. 이는 데이터를 저장하는 효율적이며 정규화된 방법일 수 있지만, 프로그래밍 방식으로 데이터를 분석하거나 그래프화하는 데에는 적합하지 않습니다.
SAS는 데이터세트를 뒤바꿈으로써 이러한 문제를 해결합니다. 아래의 코드를 사용해 우선 변수의 이름을 정리하고, 변수의 이름을 값으로 바꾸기 위해 데이터세트를 전치시키겠습니다. 이 전치 과정을 반복하면 기존 6개의 데이터 라인 대신 366개의 라인이 생깁니다. 최소한의 공간에 데이터를 저장하기에는 효율적이지 않지만, 분석하고 플롯을 만들기에는 훨씬 쉽습니다.
아래는 그 코드와 데이터세트 결과의 일부분입니다. 붉은색 동그라미로 표시된 부분을 보면 이전 SAS 데이터세트에서 변수 이름과 레이블이었던 것들이 값으로 바뀐 것을 볼 수 있습니다.
data raw_data; set raw_data (rename=(a=category) drop = b c);
run;proc transpose data=raw_data out=tran_data;
by category notsorted;
run;이렇게 프로그래밍 작업을 할 수 있는 값의 형태로 연도:분기 데이터를 얻었는데요. 이제 이 데이터를 실제 날짜 값으로 바꿔볼까요? 아래의 코드는 연도와 분기를 파싱하고, 그 값을 사용해 분기의 중간쯤으로 SAS 날짜 값을 생성합니다.
data tran_data; set tran_data (rename=(col1=debt));
year=.; year=substr(_label_,1,2)+2000;
qtr=.; qtr=substr(_label_,5,1);
if qtr=1 then monstr='feb';
if qtr=2 then monstr='may';
if qtr=3 then monstr='aug';
if qtr=4 then monstr='nov';
format plot_date date9.;
plot_date=input('15'||monstr||trim(left(year)),date9.);
run;이제 아래와 같은 간단한 코드를 사용해 시간 경과에 따른 학생 대출 채무에 대한 그래프를 만들 수 있습니다.
symbol2 value=circle h=1.9 interpol=join color=red;
axis1 label=(j=c 'Debt' j=c '(trillion $)') minor=none offset=(0,0);
axis2 label=none minor=none offset=(0,0);title1 ls=1.5 "Student Loan Debt in the U.S.";
proc gplot data=tran_data (where=(category='Student Loan'));
format plot_date year4.;
format debt comma5.1;
plot debt*plot_date /
vaxis=axis1 haxis=axis2 vzero
autovref cvref=graydd
autohref chref=graydd;
run;물론 이 그래프도 나쁘지 않지만, 단순히 분기별 대출 채무를 보여주는 것에서 나아가 그래프의 첫 번째 연도인 2003년과 비교했을 때 증가 또는 감소를 %로 보여주면 어떨까요? 이를 위해서는 데이터 요약이 필요합니다. 먼저 학생 대출과 다른 유형의 대출을 위한 맞춤형 카테고리를 만들어보겠습니다.
data tran_data; set tran_data;
length my_category $20;
if category='Student Loan' then my_category='Student Loan';
else my_category='Other';
run;그리고 이 두 카테고리별로 데이터를 요약하고, 2003년의 요약 값을 ‘학생과 기타(student and other)’라는 매크로 변수로 저장합니다:
proc sql noprint;
create table summarized_data as
select unique my_category, plot_date, year, qtr, sum(debt) as debt
from tran_data
group by my_category, plot_date, year, qtr;select debt into :student
from summarized_data where my_category='Student Loan'
and year=2003 and qtr=1;select debt into :other
from summarized_data where my_category='Other'
and year=2003 and qtr=1;quit; run;
마지막으로 매크로 변수로 저장한 2003년 값과 비교해 각 분기별 % 증가 또는 감소 값을 계산합니다.
data summarized_data; set summarized_data;
if my_category='Student Loan' then debt_pct=(debt-&student)/&student;
else debt_pct=(debt-&other)/&other;
run;이제 기존 그래프에서 한층 더 개선된 새로운 그래프를 만들 수 있습니다. 여기서 사용된 SAS 코드에 대해 더 자세히 확인해보세요.
최종으로 완성된 그래프는 하단과 같습니다.
기존 그래프에서 무엇이 바뀌었고 어떻게 개선됐을까요?
기존 그래프 하단의 가로 축에 표시된 분기 값은 읽기 어려웠고, 플롯에 표시된 점들과 관련 짓기도 불편했습니다. 따라서 가로 축에 연도를 표시하고, 각 연도 사이에 기준선을 그렸습니다.
그래프 왼쪽의 세로 축을 따라 눈금을 표시해서 복잡해 보이지 않습니다.
그래프 오른쪽의 세로 축에도 값을 표시해서 왼쪽과 오른쪽 모두에서 편하게 값을 확인할 수 있습니다.
점선이 아닌 실선 모양의 참조선을 사용해 다른 데이터 선이나 표식과 어우러집니다.
복잡하고 어수선해 보이는 이미지 파일의 가장자리와 바깥쪽 테두리를 지웠습니다.
더 명확한 정보를 제공하는 깔끔한 제목을 사용했습니다.
이렇게 비교해보니 어떠신가요? 학생 대출 채무가 다른 유형의 채무보다 훨씬 더 크게 증가하고 있음을 한눈에 파악할 수 있는데요. 오늘 과정을 통해 스프레드시트에서 데이터를 가져오고, 분석하고, 플롯을 만드는 데 유용한 프로그래밍 팁을 소개해드렸습니다. 실제 데이터 작업에서 유용하게 활용하실 수 있을 것입니다.
SAS 블로그에서 더 많은 프로그래밍 팁을 확인해보세요!
저자
로버트 앨리슨(Robert Allison) l SAS/GRAPH 전문가
편집
SAS코리아 마케팅
'SAS 이야기 > SAS 관련 뉴스' 카테고리의 다른 글
[프로그래밍 팁] SAS바이야(SAS Viya) 자동화된 피처 엔지니어링 템플릿으로 예측 모델 생성하기 (0) 2018.09.18 데이터 마이닝과 머신러닝을 활용한 ‘시각적 분석’의 핵심 매력! (0) 2018.09.17 [프로그래밍 팁] 엑셀 데이터 가져오기, 전치하기, 플롯 만들기! (0) 2018.08.14 데이터 시각화로 살펴본 ‘2018 국제 축구 대회’ 이모저모! (0) 2018.07.04 비즈니스 애널리틱스의 오늘과 내일을 만나다! <SAS FORUM KOREA 2018> 개최 (0) 2018.05.16 최신 분석 트렌드의 A부터 Z까지! ‘SAS 글로벌 포럼 2018’ 하이라이트 (0) 2018.04.25