그래프 그리기 03:= 여러 집단별로 동일한 그래프를 반복해서 그리기
/*
원본 데이터는 A열의 대분류(종사상지위,근로형태,산업 등)와 B열의 중분류가 각 해당 대분류별로 구성된 항목별로 2001년~2012년까지의 값이 들어있는 자료이다(제공:= 신우진).
*/
// 이런 자료를 갖고서 어떤 그래프를 그려야 할까?^.^
// 좀 더 구체적으로 말하면, A열의 분류(근로형태별, 산업별, 종사상지위별 등)로 각각의 그래프를 B의 중분류 항목을 기준으로 연도별 추이를 그려야 하는 것이 오늘의 작업...
// 자! 시작해 볼까요^^
// 먼저, 스타타로 그래프를 그릴려면, 위의 원본을 다음과 같은 형태로 일단 변환하는 것이 필요합니다.
* 오늘의 작업은 그래프 그리기이니, 이러한 형태로 변환하는 것은 나중에 기회가 되면 설명할께요. 여기에 더 관심이 있는 분은 import excel과 reshape 명령어를 공부하면 될 겁니다....
* 자! 다시 한 번 이번 작업에서의 핵심을 말하면 다음과 같습니다.
1. A열의 항목과 B의 항목을 각각 하나의 목록으로 받아내서 사용할 수 있어야 한다.
2. A와 B의 각 항목명을 문자로 인식, 즉 항목명은 물론 각 항목명 시작과 끝부분에 인용부호를 그대로 인식하여 사용할 수 있어야 한다. 구체적으로 말하면, "항목명" 의 형태를 살리면서 목록을 만들수 있어야 한다(스타타에서는 이게 생각보다 힘들다..물론, 알면 쉽지만 모르면 ㅠ.ㅠ)
levelsof A, loc(grpA) // 대분류 항목 목록 만들고
foreach Litem of loc grpA { // 대분류 항목 목록 내 항목별 순서대로 루프 시작
levelsof B if A == "`Litem'", loc(grpB) // 중분류 항목 서브 목록 만들고
loc nstr: word count `grpB' // 중분류 항목의 갯수를 알아내고
lab def aa 0 "" // 문자로 된 중분류항목값을 숫자로 변환하고, 원래의 값을 value label 만들기 위한 라벨정의
gen aa:aa = . // 문자로 된 중분류항목값을 숫자로 변환한 값을 담을 임시 변수
forvalues ii = 1(1)`nstr' { // 중분류 항목 서브 목록을 이용해, value label 만들고..
loc thisitem: word `ii' of `grpB'
replace aa = `ii' if B == "`thisitem'"
lab def aa `ii' "`thisitem'", add
}
* 주황색이 핵심!!
loc MyTwoway = ""
loc MyLegend = ""
forvalues ii = 1(1)`nstr' {
loc thisitem: word `ii' of `grpB'
loc MyTwoway = "`MyTwoway'" + "(connected rate yr if aa == " + "`ii'" + ")"
loc MyLegend = `" `MyLegend' `ii' "`thisitem'" "'
di "`MyTwoway'" // "확인용
di `"`MyLegend'"' // "확인용
}
#delimit ;
twoway `MyTwoway' ,
by(mytype) by(, note("")) legend(order(`"`MyLegend'"') rows(1))
ytitle("저임금비중(%)")
ylabel(0(10)`vmax', angle(horizontal))
xtitle("")
xlabel(2001(3)2011 2012 , labsize(medium) )
scheme(sj) ;
#delimit cr
graph export ".........\인적특성_`Litem'.png", replace
원본 데이터는 A열의 대분류(종사상지위,근로형태,산업 등)와 B열의 중분류가 각 해당 대분류별로 구성된 항목별로 2001년~2012년까지의 값이 들어있는 자료이다(제공:= 신우진).
*/
// 이런 자료를 갖고서 어떤 그래프를 그려야 할까?^.^
// 좀 더 구체적으로 말하면, A열의 분류(근로형태별, 산업별, 종사상지위별 등)로 각각의 그래프를 B의 중분류 항목을 기준으로 연도별 추이를 그려야 하는 것이 오늘의 작업...
// 오늘의 작업을 정리하면,
1. A열의 항목별로 별도의 그래프를 그려야 한다. 다만, 그래프의 형식은 다행히도 동일하다.
2. 각 그래프는 B의 항목을 기준으로 그린다. 즉, 각 그래프의 범례(legend)는 B열의 항목으로 한다.
// 만일 이 작업을 하나하나씩 그린다면, 시간이 많이 걸리고 번거로운 것 당연!!
// 자! 시작해 볼까요^^
// 먼저, 스타타로 그래프를 그릴려면, 위의 원본을 다음과 같은 형태로 일단 변환하는 것이 필요합니다.
* 오늘의 작업은 그래프 그리기이니, 이러한 형태로 변환하는 것은 나중에 기회가 되면 설명할께요. 여기에 더 관심이 있는 분은 import excel과 reshape 명령어를 공부하면 될 겁니다....
* 자! 다시 한 번 이번 작업에서의 핵심을 말하면 다음과 같습니다.
1. A열의 항목과 B의 항목을 각각 하나의 목록으로 받아내서 사용할 수 있어야 한다.
2. A와 B의 각 항목명을 문자로 인식, 즉 항목명은 물론 각 항목명 시작과 끝부분에 인용부호를 그대로 인식하여 사용할 수 있어야 한다. 구체적으로 말하면, "항목명" 의 형태를 살리면서 목록을 만들수 있어야 한다(스타타에서는 이게 생각보다 힘들다..물론, 알면 쉽지만 모르면 ㅠ.ㅠ)
levelsof A, loc(grpA) // 대분류 항목 목록 만들고
foreach Litem of loc grpA { // 대분류 항목 목록 내 항목별 순서대로 루프 시작
levelsof B if A == "`Litem'", loc(grpB) // 중분류 항목 서브 목록 만들고
loc nstr: word count `grpB' // 중분류 항목의 갯수를 알아내고
lab def aa 0 "" // 문자로 된 중분류항목값을 숫자로 변환하고, 원래의 값을 value label 만들기 위한 라벨정의
gen aa:aa = . // 문자로 된 중분류항목값을 숫자로 변환한 값을 담을 임시 변수
forvalues ii = 1(1)`nstr' { // 중분류 항목 서브 목록을 이용해, value label 만들고..
loc thisitem: word `ii' of `grpB'
replace aa = `ii' if B == "`thisitem'"
lab def aa `ii' "`thisitem'", add
}
* 주황색이 핵심!!
loc MyTwoway = ""
loc MyLegend = ""
forvalues ii = 1(1)`nstr' {
loc thisitem: word `ii' of `grpB'
loc MyTwoway = "`MyTwoway'" + "(connected rate yr if aa == " + "`ii'" + ")"
loc MyLegend = `" `MyLegend' `ii' "`thisitem'" "'
di "`MyTwoway'" // "확인용
di `"`MyLegend'"' // "확인용
}
#delimit ;
twoway `MyTwoway' ,
by(mytype) by(, note("")) legend(order(`"`MyLegend'"') rows(1))
ytitle("저임금비중(%)")
ylabel(0(10)`vmax', angle(horizontal))
xtitle("")
xlabel(2001(3)2011 2012 , labsize(medium) )
scheme(sj) ;
#delimit cr
graph export ".........\인적특성_`Litem'.png", replace
drop aa // 임시변수 삭제
label drop aa // 임시라벨도 삭제
} // 대분류 항목 목록 내 항목별 순서대로 루프 끝. ^^
* 이제 그 결과를 보면, ^^
<고용형태별 비중>
<근로형태별 비중>
<고용형태와 종사상지위별 비중>
* 이해를 위해 부연설명을 하면,
스타타에서 twoway그래프를 그리고자 하면, 아래와 같이 각 항목별로 그래프를 지정하는데,
twoway (connected var_B yr)
(connected var_C yr)
(connected var_D yr)
(connected var_E yr),
.... legend(order(1 "전체근로자" 2 "비임금근로자" 3 "임금근로자" ) rows(1))
MyTwoway 로컬변수의 내용은 위에서 빨간색 부분에 해당하는 것이고,
MyLegend 로컬변수의 내용은 주황색 부분에 해당하는 것입니다. ^^
댓글
댓글 쓰기