기본 콘텐츠로 건너뛰기

데이터 분석 입문 5



 앞서 데이터의 분포에 대해서 잠시 알아봤습니다. 데이터의 분포는 매우 중요한 특징을 보여줍니다. 예를 들어 제가 주로 다루는 의료 관련 데이터에서는 체중, 키, 체질량지수(BMI) 등 여러 기본 데이터가 있고 이것만으로도 비만이나 저체중 같은 여러 가지 정보를 알아낼 수 있습니다. 


 하지만 동시에 이것만으로는 데이터의 정확한 특징을 파악하고 있습니다. 예를 들어 남자인지 여자인지, 성인인지 소아인지, 아시아인인지 백인인지 등에 대한 정보가 추가로 포함되어야 체중, 키, 체질량 지수 등의 데이터가 정상 범위에 속하는지 아니면 비만이 많은 인구 집단인지 파악할 수 있을 것입니다. 


 다루고자하는 데이터의 종류에 따라 다르겠지만, 요즘 등장하는 데이터들은 데이터 수집 기술의 발전과 IT 기술의 발전으로 인해서 점차 그 종류가 자세해지고 관측치의 크기도 커지고 있습니다. 하지만 처음부터 복잡하고 큰 데이터를 다루는 것보다는 단순한 데이터로 설명을 하는 것이 좋을 것 같습니다. 


 지금까지 ggplot2 패키지의 다이아몬드 데이터에서 캐럿에 대한 정보만 봤지만, 이것만이 다이아몬드의 가격을 결정하는 요소는 아닐 것입니다. 여기서 이 데이터를 통해서 우리가 알고 싶은 것이 다이아몬드의 가격이라고 가정하고 여기에서 다이아몬드 컷 (cut) 에 대한 정보를 추가로 확인해 보겠습니다. 


 앞서 다이아몬드 컷은 다섯 등급으로 나뉘어진다는 점을 확인했습니다. 


 > table(cut)
cut
     Fair      Good Very Good   Premium     Ideal 
     1610      4906     12082     13791     21551


 이제 각 등급별 다이아몬드 캐럿 분포를 알아보겠습니다. 우선 다시 ggplot2 패키지를 불러들이고 Fair 등급의 다이아몬드의 캐럿의 분포를 확인하겠습니다. 이 경우 히스토그램보다는 밀도 곡선(density curve)가 더 좋은 선택입니다. 여러 개가 겹쳐도 확인이 쉽기 때문입니다. 


> d=density(diamonds$carat[diamonds$cut=="Fair"],na.rm=TRUE)
> plot(d,"Density Plot of Diamonds carat",col="red",lty=1)
> rug(diamonds$carat)



 여기서 Fair 등급의 다이아몬드만 확인하기 위해서 추가한 부분은 사실 하나 뿐입니다. diamonds$carat[diamonds$cut=="Fair"] 이죠. R에서는 다른 설명 없이도 [] 안에 들어간 조건을 선택해 줍니다. 주의할 점은 carat 뒤에 점을 찍지 않아야 한다는 점과 Fair 처럼 숫자형이 아닌 문자형/범주형 분류는 ""안에 넣어야 한다는 점입니다. 


 이제 여기에 Good 등급도 같이 추가해 보겠습니다. 사실 한줄만 추가해주면 알아서 겹친 그림을 보여주지만 색상과 실선을 달리해야 알아보기 쉽겠죠. 여기서 약간 복잡해집니다. 


d1=density(diamonds$carat[diamonds$cut=="Fair"],na.rm=TRUE)
d2=density(diamonds$carat[diamonds$cut=="Good"],na.rm=TRUE)
plot(d1,"Density Plot of Diamonds carat (Fair and Good)",col="red",lty=1)
lines(d2,col="blue",lty=2)




 일단 두 개의 밀도 곡선을 그려야 하니 d1, d2 두 가지를 표시해 줍니다. 여기까지는 별 어려움이 없습니다. 그 다음 plot 함수를 이용해서 실제 곡선을 그려야 하는데, 동시에 두 개를 그릴 수 없으므로 일단 d1 하나만 그리고 제목, 색상, 실선 종류를 정했습니다. 이후 lines 함수를 이용해서 d2 곡선의 색상과 실선 종류를 선택한 것입니다. 플롯 함수를 두 번 사용하지 않는 것은 하나의 창에 두 개의 곡선을 그리기 위한 것이죠. 


 흥미롭게도 다이아몬드 등급에 따른 캐럿의 분포는 약간 차이가 있는 것 같습니다. 이런 차이가 어디에서 비롯되는 것인지는 모르겠지만, 등급이 높은 다이아몬드는 작은 캐럿이라도 버리지 않고 활용하는 것이 아닐까 하는 생각도 드네요. 계속해서 데이터를 살펴보겠습니다. 그런데 그 전에 각 곡선에 대한 설명이 없는 만큼 범례(legend)를 추가하겠습니다. legend 함수를 사용해서 범례를 표시합니다. 


d1=density(diamonds$carat[diamonds$cut=="Fair"],na.rm=TRUE)
d2=density(diamonds$carat[diamonds$cut=="Good"],na.rm=TRUE)
plot(d1,"Density Plot of Diamonds carat (Fair and Good)",col="red",lty=1)
lines(d2,col="blue",lty=2)
legend("topright",legend=c("Fair","Good"),col=c("red","blue"),lty=1:2)




 legend 함수 뒤에 위치(topright), 범례의 내용 (legend=c("Fair","Good")), 그리고 색상과 선의 종류 (col=c("red","blue"),lty=1:2) 표시하면 됩니다. 이제 줄의 숫자를 늘려서 Very Good 도 같이 표시해 봅시다. 


d1=density(diamonds$carat[diamonds$cut=="Fair"],na.rm=TRUE)
d2=density(diamonds$carat[diamonds$cut=="Good"],na.rm=TRUE)
d3=density(diamonds$carat[diamonds$cut=="Very Good"],na.rm=TRUE)
plot(d1,"Density Plot of Diamonds carat (Fair and Good)",col="red",lty=1)
lines(d2,col="blue",lty=2)
lines(d3,col="salmon",lty=3)
legend("topright",legend=c("Fair","Good","Very Good"),col=c("red","blue","salmon"),lty=1:3)




 약간 모양이 비슷하네요. (참고로 모든 사진은 클릭하면 원본을 볼 수 있습니다. 네이버에서는 작게 나오네요) 그러면 다 표시해 보겠습니다. 


d1=density(diamonds$carat[diamonds$cut=="Fair"],na.rm=TRUE)
d2=density(diamonds$carat[diamonds$cut=="Good"],na.rm=TRUE)
d3=density(diamonds$carat[diamonds$cut=="Very Good"],na.rm=TRUE)
d4=density(diamonds$carat[diamonds$cut=="Premium"],na.rm=TRUE)
d4=density(diamonds$carat[diamonds$cut=="Ideal"],na.rm=TRUE)
plot(d1,"Density Plot of Diamonds carat",col="red",lty=1)
lines(d2,col="blue",lty=2)
lines(d3,col="salmon",lty=3)
lines(d4,col="black",lty=4)
lines(d4,col="green",lty=5)
legend("topright",legend=c("Fair","Good","Very Good","Premium","Ideal"),col=c("red","blue","salmon","black","green"),lty=1:5)




 이걸 보면 캐럿이 작더라도 컷이 좋으면 가치가 있는지 작은 캐럿에서 컷 등급이 높은 다이아몬드가 점점 높아지는 경향이 있습니다. (잘 안보이시면 클릭해서 확대하시면 됩니다) 맞는지는 모르겠지만, 이렇게 데이터 탐색은 가격을 높이는 인과 관계를 추론할 수 있는 정보를 제공합니다. 위의 코드는 길어 보이지만, 사실 내용은 단순합니다. 




 다음에는 박스 플롯에 대해서 알아보겠습니다. 

댓글

이 블로그의 인기 게시물

벨 V-280 Valor 시험 비행 성공

( The V-280 Valor flew for the first time at Bell Helicopter's Amarillo Assembly Center in Texas(Credit: Bell Helicopter/YouTube) )  앞서 소개드린 V-280 발러가 첫 번째 비행 테스트에 성공했다는 소식입니다. V-22 오스프리의 소형화 버전이라고 할 수 있는 V-280 발러는  미 육군의 차세대 헬기 사업인 Future Vertical Lift (FVL)에 입찰을 시도하는 틸트로터기로 현재 미 육군이 주력으로 사용하는 블랙호크 헬기와 비슷한 체급입니다. 다만 틸트로터기인 만큼 최고 속도나 항속 거리면에서 더 유리합니다. 스펙은 이전 포스트를 참조해 주시기   이전 포스트:  https://blog.naver.com/jjy0501/221115245986  (동영상)   V-280 발러는 틸트로터기의 더 대중화 될 수 있을지를 검증하는 중요한 무대가 될 것입니다. V-22 오스프리의 경우 복잡한 구조로 인해 가격이 너무 비싸져서 사실 미국은 몰라도 그 동맹국에 널리 도입되기는 어려운 부분이 있습니다. V-280 역시 가격이 아주 저렴할 것 같지는 않지만, 좀 더 합리적인 대안은 될 수 있을 것 같습니다. 만약 성공적인 결과가 나오면 한국을 포함한 미국의 동맹국에서 도입을 검토할 수 있을지 모르겠다는 생각입니다.   참고  https://newatlas.com/bell-v-280-valor-maiden-flight/52663/

100 테슬라급 자기장 도달

 미국의 로스 알라모스 국립 연구소 (Los Alamos National Laboratory) 에서 과학자들이 지금까지 인간이 개발한 가장 강력한 자기장을 발생시키는 장치 개발에 도전하고 있습니다. 자기장의 세기를 나타내는 방법으로 자기력선의 밀도를 나타내기 위해 단위 면적당 자기력선의 수를 표시하는 단위인 테슬라 (T) 가 있습니다. (1T = 1Wb/㎡  웨버 (Wb) 는 자속의 단위)   의료용으로 사용되는 초전도체를 이용한 MRI 의 경우 1.5 - 3 테슬라급의 강력한 자기장으로 인체 내부를 볼 수 있게 만들지만 과학 연구용으로 이보다 더 강력한 자기장이 필요할 수 있습니다. 최근에 등장한 90 테슬라급 자기장에 이어 이번에 로스 알라모스 국립 연구소에서는 100 테슬라급인 100.75 T 를 실현 했다고 합니다.   이를 구현한 것은 18000 파운드 (8.16 톤 정도) 의 코일과 여기에 에너지를 공급할 1200 메가줄 (Megajoule) 급 모터 제네레이터등의 설비입니다.  (   The 1,200-megajoule motor generator that powers the magnetic pulse.  )  이와 같은 연구를 통해 알아내고자 하는 것은  Quantum Phase transitions and new ultra high field magnetic states Electronic Structure determination Topologically protected states of matter  로 요약할 수 있다고 합니다.   아무튼 수 T 급 MRI 만 해도 자기장의 힘이 엄청난데 100 T 라니 엄청난 자기장이네요. 이는 지구 자기장 세기보다 200만배 강력한 (물론 좁은 범위에서 작용하는 자기장이라 지구 전체...

고대 양서류 이야기 (2) - 악어를 닮은 거대 양서류들

  페름기에는 다양한 양막류가 진화해서 앞서 소개한 육상형 템노스폰딜리는 점차 설 자리를 잃게 됩니다. 하지만 양서류는 본래 자신의 서식지인 물과 습지에서 여전히 번성을 누렸습니다. 당시에는 악어류 같은 대형 양서형 파충류도 없던 시절이었기 때문에 이와 비슷한 생태학적 지위는 여전히 양서류의 몫이었습니다. 이들에 대한 이야기는 제 책인 포식자에서 비교적 간단히 다뤘는데, 오늘은 여기에 대한 보충 설명입니다.  책 정보:  http://book.naver.com/bookdb/book_detail.nhn?bid=13347200 Yes 24:  http://www.yes24.com/24/goods/58772859 11번가:  http://books.11st.co.kr/product/SellerProductDetail.tmall?method=getSellerProductDetail&prdNo=1977867160 알라딘:  http://www.aladin.co.kr/shop/wproduct.aspx?ItemId=134877825 교보문고:  http://www.kyobobook.co.kr/product/detailViewKor.laf?ejkGb=KOR&mallGb=KOR&barcode=9788970447988&orderClick=LAG&Kc= 인터파크 :  http://book.interpark.com/product/BookDisplay.do?_method=detail&sc.prdNo=279593764&sc.saNo=003002003&bid1=search_auto&bid2=detail&bid3=prd_img&bid4=001 영풍문고:  http://www.ypbooks.co.kr/book.yp?bookcd=100843205&gubun=NV ...