데이터를 기반으로

R 스터디 4일차 - 시각화!!(feat. ggplot) 본문

스터디/R 온라인 스터디

R 스터디 4일차 - 시각화!!(feat. ggplot)

이노후 2019. 4. 29. 01:46
728x90
반응형

안녕하십니까?


그간 잘 지내셨는지요 ㅎㅎ


요즘 너무 바쁜 일정 덕분에 스터디를 하지 못하고 있었네요 ㅠㅠ


아 참 SQLD 자격증을 취득했습니다!! 겨우겨우 ㅎㅎㅎㅎ


자 이제 서론은 그만하고 저번 스터디에 이어서 오늘은 시각화에 초점을 맞추어 진행하고자 합니다!


자, 시작하겠습니다!!



우선 가장 먼저 참고한 스터디 관련 사이트 입니다!!


https://medium.com/@unfinishedgod/%EC%84%9C%EC%9A%B8%EC%8B%9C-%EB%A8%B9%EA%B1%B0%EB%A6%AC-%EB%B6%84%EC%84%9D-6-%EC%8B%9C%EA%B0%81%ED%99%94-%ED%95%B4%EC%84%9D-45fd4ecf9efb



저번 시간에는 중국집, 치킨, 피자에 관한 다양한 시각으로 바라보는 작업을 했습니다.


오늘은 그런 다양한 시각으로 바라봤던 작업을 시각화해 볼 예정입니다.


우선 데이터를 불러오고 난 그림을 그릴 예정인데 구별로 묶어서 그릴 때 마지막 '구' 라는 글씨가


보는데 걸리적 거려 지우고 시작하겠습니다.




위와 같이 gsub은 일치하는 값을 찾아 제가 설정하는 값을 바꿔주는 함수입니다.


저는 단어의 끝이 "구" 인 단어들을 골라 "구"라는 단어를 삭제해 줄 것입니다.


바꿀 값을 아무것도 넣지 않는 즉, "" 이와 같이 설정하면 단순하게 삭제가 된다고 생가하시면 됩니다!!


전처리에서 제가 자주 사용하는 함수입니다!!!


gsub 적극 추천!!!




이후 중국집과 치킨은 업종이라는 변수에 해당 값이 입력되어 있지만 피자는 없기에


변수를 추가해줍니다!!


저는 위와 같이 변수하나를 추가해서 순서를 바꿔주는 작업을 했습니다.


원래 블로그에서 진행하는 방법은


type<-rep("피자",nrow(piz))

piz <- cbind(piz[,1:7],업종,piz[,8])


이런 식으로 type 이라는 새로운 변수를 추가해서 중간에 추가하는 식의 방법도 존재합니다!


편하신 방법으로 하면 될 것 같습니다.



자 이제 데이터들의 변수명을 통일해 주고 난 후


데이터를 통합하겠습니다.


rbind 는 row를 기준으로 합해지는 과정이기에


dim 함수로 잘 되어가고 있는 지 확인했습니다.


점차 수가 늘어나는 게 잘 되었다고 생각됩니다.



날짜 데이터로 변환하고 요일도 순서별로 조정해주고 리스트를 벡터화하여 진행합니다.


이제 부터 일, 업종별 그룹화를 dplyr을 통해 진행 후 for문을 이용해 그림을 그려보겠습니다.




일, 요일, 음식 종류 별 그룹을 지어 전화량을 합산하여 데이터 프레임으로 만들었습니다.


이전에 리스트를 벡터화를 진행한 것은 for문을 위해 진행한 것 같습니다.


위와같은 과정을 통해 for문이 돌아가며 해당하는 값을 가지게 된 것에 따라 그림이 그려집니다.


한 눈에 보일 수 있는 그림을 완성했습니다.


x축 = 일별, y축 = call량


위와 같이 plot으로만 그릴려면 복잡한 작업을 ggplot 을 통해 쉽게 그릴 수 있습니다.



위 와 같은 코드로 진행하게 되면



위와 같이 간단한 코드를 통해 좀 더 이쁜 그림을 그릴 수 있었습니다.


이번에는 구별로 그룹을 지어 확인해 보겠습니다.




x축 = 구 , y축 = call 량



구라는 단어를 지워 좀 더 한 눈에 들어올 수 있는 그래프가 된 것 같습니다.


하지만 그래프가 기준이 없기에 뒤죽 박죽의 느낌입니다.


그렇기에 치킨 주문량을 기준으로 그래프를 그려보겠습니다.





보통 scale_x_continuous() 는 연속형 변수일 때,

scale_x_discrete() 는 이산형 변수일 때 사용합니다.




이렇게 나온 그래프는 좀 더 명확하게 인식되는 그림인 것 같습니다.




치킨별, 피자별, 중국집별 한번 동시에 비교하고 싶어 그림을 그려보기로 했습니다.


원래 plot으로 그릴 때는 par(mfrow=c(n,m)) 이걸로 처음 설정 후 plot 그림을 그리면 되었지만


ggplot은 적용되지 않았습니다.


ggplot 은 따로 grid.arrange 라는 함수를 통해 진행할 수 있었습니다.




사실상 한번에 다같이 비교하기에는 x 축이 일치하지 않아 딱히 의미는 없었지만


한 번 그려보고 싶어 진행하게 되었습니다.


나중에 쓸일이 있을것 같네요 ㅎㅎㅎ





1 - 2 - 3 번째 순위 => 1번이 가장 많은 call 량이 있던 구


치킨 : 강서구 - 강남구 - 동작구


피자 : 강서구 - 동작구 - 강남구


중국집 : 강남구 - 중구 - 강서구


위와 같은 결과를 볼 수 있게 되었습니다.


과연 왜 이런 결과가 나오는 지 궁금하지만 다음 시간에 진행한다고 하니 


개인적으로 생각해보고 있겠습니다!!



.

.

.

자! 여기까지는 스터디에서 진행한 결과입니다.




지금 부터는 제가 순수하게 궁금해서 진행해보는 것이니 양해부탁드립니다!!


자 가장 먼저 궁금했던 것은


요일별로 그려보면 어떨까?


였습니다.


바로 그려보도록 하죠 ㅎㅎ




head() 를 통해 잘 데이터가 추출된 것을 확인할 수 있었습니다.




위와 같은 코드로 그림을 그려보니





이와 같은 그래프가 나왔습니다!!!!


기억 하십니까...? 제 저번 블로그 게시글에 있었던 결과입니다.


https://ds92.tistory.com/5


그렇게 많은 작업을 해서 알게된 결과는 바로!!


이 것이었습니다!!


근데.....그림을 다시 살펴봅시다!!!



바로 몇 줄만에 저의 저번 블로그 내용이 요약되어 그래프로 그려져 있는 것을 확인할 수 있었습니다.


허허....


살짝 허무했지만 그래도 그래프라는게 정말 대단하다고 느끼게 되는 순간이었습니다!!



자 이번에는 동 별로 묶어서 한번 확인을 해보겠습니다.

(참고로 그래프는 그리지 않을 예정입니다.)

.

.

.

(사실 그려봤는데 동이 너무 많아서 그래프로 담아지질 않습니다...ㅎ)



동 별로 묶어서 해보던 중 문득 이런 생각이 들었습니다.


왜 저 지역들은 call 수가 저렇게 적은 것일 까?


우선 금호동 1가 기준으로 치킨과 중국집음식만 보이기에 피자는 좀 다른 결과가 있을까?


라는 생각으로 금호동을 찾아본 결과......


아예 중국집 call 수가 없어서 안보였던 것이었습니다. ㅎㅎ허허허....



자 그럼 가장 call 수가 많은 지역은 어디일까?


(arrange에서 디폴트값은 오름차순입니다. desc() 를 이용해 내림차순을 볼 수 있습니다.)


바로 신대방동송파동 이었습니다!!!


과연 신대방동 과 송파동 은 무슨 차이가 있길래 이리 call 수가 많은 것일까?


바로 궁금증을 참지 못하고 네이버 지도를 켜버렸습니다....


확인해 보니!!!


주거 밀집 지역이라고 보일 정도로 아파트와 빌라가 즐비해 있는 곳이 었습니다.


 주거 밀집 지역 -> 사람이 많다 -> 당연히 사람이 적은 곳 보다 call 량이 많을 것이다.


이런 가설이 세워지네요!!


<위 사진은 신대방동>




<위 사진은 송파동>



자 그럼 제일 call 량이 적었던 금호동 1가를 찾아보지 않을 수 없었습니다!!


찾아보니!!!



이게 무슨 일 인가요?


이곳은 주거 밀집지역이라고 보기는 힘들지만 그래도 주거 시설이 많은 지역에 속한다고 생각되는


지도의 모습이네요....


그래서 하나의 가설을 세웠습니다.


혹시 배달 음식점이 주변에 없을까?


배달의 민족을 깔아서 확인을 해봤습니다.(금호동 벽산아파트 기준)


제가 좋아하는 치킨집, 피자집이 상당히 많았습니다.



왜....? 이렇게 차이가 나는 것인지


곰곰히 생각해보고 다음 블로그에서 결과를 보여드릴 수 있음 좋겠습니다...ㅠㅠ


우선 여기서 정체될 수 없으니!!!



일 별로 그려보도록 하겠습니다!!!





자 그림의 결과를 유심히 바라보면


모든 음식 마다 주기를 보입니다.


일정량 상승 했다 일정량 감소하는 규칙성을 보이는 상황입니다.


당연히 요일 별로 call 량이 다르기에 당연하다고 생각합니다.


하지만!!! 


치킨중국집을 유심히 관찰해봅시다!!!


월 말에 다가갈 수록 증감폭이 상승한다는 것입니다!! 특히 치킨은 더욱더 심합니다!!


특정 일수에 주문량이 많았다고 가정해도 모든 음식이 동일하게 월말에 다가갈 수록 증가와 감소의 폭이 커지는 


현상이 확인되었습니다.


굉장히 흥미로운 사실을 발견했다고 생각합니다.


월 말에 통장 잔고가 생각지 못하게 여유로워진 것일까?


아니면 월 말이라 급여일이 다가오기에 더 배달음식을 시켜먹는 것일까?


원인은 다양하다고 생각됩니다.


사실 2, 3번 주기에서 차이가 미미하게 보이지만


확실한 것은 4번째 주는 확실히 다른 주에 비해 증감 폭이 크다는 것입니다.



이번 스터디를 통해 느낀 점이 한 가지 있습니다.


.

.

.

바로 그래프는 최대한 한 눈에 들어올 수 있는 게 좋은 것이다.




이 것을 배워갑니다.


감사합니다!!!


피드백은 댓글로 부탁드립니다!!!


다음 스터디 글에서 찾아 뵙겠습니다!!! 

728x90
반응형