Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Pyconkr2018 - quantify myself: self 사생활침해

359 views

Published on

5년동안 만난 사람들을 데이터로 수집하고 분석한 결과를 정리했습니다.

Published in: Data & Analytics
  • Be the first to comment

  • Be the first to like this

Pyconkr2018 - quantify myself: self 사생활침해

  1. 1. Quantify Myself: Self 사생활침해 이승훈
  2. 2. 데이터. 데이터는 다음처럼 정리되어 있습니다. (2013-12-30, 점심, 사람1, 사람2, 사람3) (2013-12-30, 회의, 사람1, 사람2, 사람3) (2013-12-30, 소주, 사람1, 사람2, 사람3) 언제, 어떤 이유로, 어떤 사람들을, 만났는지를 정리했습니다.
  3. 3. 초심. 데이터를 분석하여, 저의 인간관계, 행동패턴 등을 파악하는 것 이 본래의 목적이었습니다만. 이래저래 데이터를 굴리다보니, 근본적인 의문이 생겼습니다.
  4. 4. 물어보신 분? 제 어머니 말고는 궁금해하는 사람이 없을 것 같아요. MBC 무한도전 <선택 2014>편
  5. 5. 물어보신 분? 제 어머니 말고는 궁금해하는 사람이 없을 것 같아요. 그래서 그나마 재미있을 것 같은 것들만 좀 정리를 해봤어요. (물론 저만 재밌을 수는 있습니다). 또한, 저라는 샘플을 약간 일반화 시켜서 “공대 대학원에 다니는 30대 남성”에 대한 분석결과다 라고 해석하셔도 어느정도 타당할 것 같아요. MBC 무한도전 <선택 2014>편
  6. 6. 기본. 데이터 수집기간: 2013년 12월 30일 ~ 2018년 7월 31일 (1,674일. 약 5년 ) 이벤트 수: 5,060번 (식사, 술, 회의 등의 수) 전체 인맥의 수: 635명 (unique 만난 사람) 만난 사람 수: 12,689명 (not unique 만난 사람 ) 평균 만남별 사람수: 2.507명 (12689/5060)
  7. 7. lib. 주로 사용한 라이브러리들은 다음과 같습니다. - pandas: 데이터 전처리 - matplotlib: 결과를 시각화 - networkx: 데이터를 네트워크로 관리 및 분석 - gspread: 구글 sheet 읽고 쓰기 - itertools: 잡다하게… - collections: 잡다하게… 이후 슬라이드에서는 분석 결과를 중심으로 보여드리며 코드는 전혀 담겨 있지 않습니다. 혹시라도 궁금하시면 발표 이후에 물어봐주시면 감사하겠습니다.
  8. 8. 그래서 뭘 분석. 다음을 분석합니다. 1) 잡다한 빈도 분석 • Pandas로 데이터를 굴려가며 특이한 것이 있는지 찾습니다 2) 네트워크 분석 • 케빈베이컨 법칙, 네트워크상 중요한 node 찾기 등
  9. 9. 그래서 뭘 분석. 다음을 분석합니다. 1) 잡다한 빈도 분석 • Pandas로 데이터를 굴려가며 특이한 것이 있는지 찾습니다 2) 네트워크 분석 • 케빈베이컨 법칙, 네트워크상 중요한 node 찾기 등
  10. 10. 인맥별 누적 분포. - 소수의 인맥에게 대다수의 만남이 쏠려 있음. - 상위 10명(전체 인맥 중 1.5%)가 전체 만남의 50% 이상을 차지함 - 상위 100명(전체 인맥 중 15%)가 전체 만남의 약 90% 이상을 차지함
  11. 11. n번 이하 만난 인맥 비율. - 5년간 1번 만난 인맥이 전체 인맥중에서 35.6% - 5년간 5번 이하 만난 인맥이 전체 인맥중에서 73.4% - 즉, 평균적으로 1년에 2번 이상 만나면 상위 15% 안에 드는 친구
  12. 12. n번 이하 만난 인맥 비율. - 5년간 1번 만난 인맥이 전체 인맥중에서 35.6% - 5년간 5번 이하 만난 인맥이 전체 인맥중에서 73.4% - 즉, 평균적으로 1년에 2번 이상 만나면 상위 15% 안에 드는 친구 - 물론, 20대는 다를 수 있습니다.
  13. 13. 남녀 비율. - 전체 인맥 중 여자의 비율은 21.7% - 평소 만나는 사람 중 여자의 비율은 12.9%... - 여자친구/어머니를 제외하면 4.7%.... 제 여자친구가 매우 흡족해하는 비율이구요…
  14. 14. 남녀 비율. - 전체 인맥 중 여자의 비율은 21.7% - 평소 만나는 사람 중 여자의 비율은 12.9%... - 여자친구/어머니를 제외하면 4.7%.... 제 여자친구가 매우 흡족해하는 비율이구요…
  15. 15. 남녀 비율. - 전체 인맥 중 여자의 비율은 21.7% - 평소 만나는 사람 중 여자의 비율은 12.9%... - 여자친구/어머니를 제외하면 4.7%.... 제 여자친구가 매우 흡족해하는 비율이구요…
  16. 16. 남녀 비율. - 전체 인맥 중 여자의 비율은 21.7% - 평소 만나는 사람 중 여자의 비율은 12.9%... - 여자친구/어머니를 제외하면 4.7%.... 제 여자친구가 매우 흡족해하시는 비율이구요…
  17. 17. 기타 몇 가지 비율. - 인맥 중에서 약 80%가 학교와 관계된 사람들 - 그리고 가족(2명)보다 여자친구(1명)를 약간 더 많이 만나는군요…
  18. 18. 기타 몇 가지 비율. - 인맥 중에서 약 80%가 학교와 관계된 사람들 - 그리고 가족보다 여자친구를 약간 더 많이 만나는군요…
  19. 19. 기타 몇 가지 비율. - 인맥 중에서 약 80%가 학교와 관계된 사람들 - 그리고 가족(2명)보다 여자친구(1명)를 약간 더 많이 만나는군요…
  20. 20. 시간에 따라 만나는 사람의 변화(카테고리별 빈도 상위 10명). <아침> 어머니 KBJ KSB YSM SJH LWH SSM CSH YSG HJH <저녁> KJW SSH LJY KHK LJS LSH♥ BYW KTH LSR CIJ <술+야식> BYW LSR SSH KTH LJS KDH KGH 친형 KHK JYS <점심> KJW LJS LJY LSH♥ SSH LJT KHK BYW JYS YJH 연구실 친구 훈련소 가족 - 시간에 따른 변화가 존재하기는 하나 미미하며, - 그냥 하루종일 연구실 사람들만 만난다고 해도 별 문제가 없습니다.
  21. 21. 월별 인맥수 및 만남수의 변화(2개월단위) - 시간이 지날수록 기간 내 만나는 인맥의 수는 줄고, 인맥별 평균 만남수는 증가하고 있습니다. - 즉, "만나는 사람들만 점점 더 자주 만난다" 라고 해석할 수 있겠네요.
  22. 22. 월별 인맥수 및 만남수의 변화(2개월단위) - 시간이 지날수록 기간 내 만나는 인맥의 수는 줄고, 인맥별 평균 만남수는 증가하고 있습니다. - 즉, "만나는 사람들만 점점 더 자주 만난다" 라고 해석할 수 있겠네요.
  23. 23. 정리하면. 저(혹은 30대의 남자 대학원생)는 - 일상생활에서 거의 남자만 만나고 밥먹고 술먹고 - 아는 인맥이라고는 거의 다 학교사람밖에 없고 - 점심/저녁/밤 하루종일 연구실 사람들만 만나고 - 심지어 이제 그마저도 점점 만나던 사람들만 계속 만나고 - 그러함에도 가족보다 여자친구를 더 만나는 불효자 라는 것이 데이터로 증명되었습니다.
  24. 24. 그래서 또 뭘 분석. 다음을 분석합니다. 1) 잡다한 빈도 분석 • Pandas로 데이터를 굴려가며 특이한 것이 있는지 찾습니다 2) 네트워크 분석 • 케빈베이컨 법칙, 네트워크상 중요한 node 찾기 등
  25. 25. 케빈베이컨. 케빈베이컨의 6단계 법칙: “서로 모르는 사람이 6단계만 거치면 아는 사람이 된다” 정말 그럴까요?
  26. 26. 해봅니다. 일단 다음처럼 네트워크를 만듭니다. 함께 만난 (A, B, C)의 모든 pair에는 모두 edge가 있다고 가정합니다. (A, B, C) (B, C, D) … A B C D (A, B) (A, C) (B, C) (B, D) (C, D) Data Edges Network
  27. 27. 다 만들었습니다. 빨간 것은 사람, 선은 연결 아래 그림을 통해 우리는 모든 사람이 6단계로 연결된다는 것을 알 수 있습니다. (매직아이로 보면 보여요 소근소근)
  28. 28. 다 만들었습니다. 빨간 것은 사람, 선은 연결 아래 그림을 통해 우리는 모든 사람이 6단계로 연결된다는 것을 알 수 있습니다. (매직아이로 보면 보여요 소근소근)
  29. 29. Shortest path. 그림으로는 알 수 없으니, 다른 방법으로 해봅니다. - 네트워크의 모든 node pair의 shortest path를 찾고, - 그 중에서 가장 긴 shortest path를 찾습니다. - 그 길이가 6을 넘기지 않는다면, 제 인맥네트워크에서도 케빈 베이컨 법칙이 성립한다고 할 수 있습니다.
  30. 30. Longest Shortest Path. 아쉽게도 제 인맥네트워크에서는 가장 긴 shortest path의 길이가 7로 나옵니다. 그래도 573명이 7단계만에 모두 연결된다는 것 만으로도 대단하지…않나요..? SCY KMH KJW BSH BYW LSH SHH JSI
  31. 31. Longest Shortest Path. 또한 사생활 문제가 있어 더 자세하게 공개하기는 어렵지만, 이 shortest path에는 직장의 특성과 연령대 등이 다양하고 분포되어 있다는 것도 꽤 신기한 부분입니다. SCY KMH KJW BSH BYW LSH SHH JSI 포항/영화감독 천안/직장인 친구 독서모임 동아리 지인 친구 친구의 어머니 친구 서울/직장인포항/자영업 포항/대학원생 서울/직장인 천안/직장인포항/직장인
  32. 32. Centrality. 다음 네트워크에서 어떤 node가 가장 중요할까요?
  33. 33. Centrality. 다음 네트워크에서 어떤 node가 가장 중요할까요? 보통 A 라고 답하시는 분들이 많습니다.
  34. 34. Degree Centrality. 가장 많은 node와 직접 연결되어 있는 node는 A입니다. 물론 이 아이도 중요하기는 한데,
  35. 35. Degree Centrality. 얘가 없어진다고, 전체 네트워크의 연결이 바뀌지는 않아요. 여전히 네트워크는 모두 연결되어 있습니다.
  36. 36. Betweenness Centrality. K의 경우는 직접 연결된 node는 적지만, node 간의 shortest path에 위치해 있습니다.
  37. 37. Betweenness Centrality. 따라서 만약 K가 없어질 경우에는 네트워크의 연결성은 끊어지고 다음처럼 두 개로 나뉘어지게 됩니다.
  38. 38. Centrality. 정리하면. - Degree Centrality: 직접 연결된 node가 많을수록 높음 (해당 노드의 직접적인 영향력이 높음) - Betweenness Centrality: 네트워크의 모든 node pair들간의 shortest_path에 많이 포함될수록 높음 (직접적인 영향력보다는 간접적인 영향력이 높음, 전체 네트워크의 흐름에 영향) 이제 centrality 분석을 활용해 네트워크 상에서 중요한 친구를 찾아보겠습니다.
  39. 39. 누가 중요한 친구인가요. 그래도 Deg Cent의 경우는 빈도와 어느 정도 유사성을 가지는 반면, Bet Cent의 경우는 별로 만난 적 없는 친구가 높은 순위에 랭크되어 있습니다. <Degree Centrality 순위 , 빈도순위> LJS, 1 LJY, 6 KJW1, 2 CJI, 10 KDH, 29 SSH, 3 LSR, 8 LJE, 40 YTH, 33 KTH, 13 연구실 친구 훈련소 가족
  40. 40. 누가 중요한 친구인가요. 그래도 Deg Cent의 경우는 빈도와 어느 정도 유사성을 가지는 반면, Bet Cent의 경우는 별로 만난 적 없는 친구가 높은 순위에 랭크되어 있습니다. <Degree Centrality 순위 , 빈도순위> LJS, 1 LJY, 6 KJW1, 2 CJI, 10 KDH, 29 SSH, 3 LSR, 8 LJE, 40 YTH, 33 KTH, 13 <Betweenness Centrality 순위, 빈도 순위> BSH, 89 KJW2, 79 LJS, 1 LSR, 8 BYW, 7 KTH, 13 KDH, 29 LJY, 6 YJS, 103 HEJ, 19 연구실 친구 훈련소 가족
  41. 41. 친구를 삭제. 실제로 Bet cent가 높은 node를 삭제하면, 네트워크 내에서 가장 큰 네트워크의 크기가 급격하게 줄어들게 됩니다. 즉, bet가 높은 친구와 멀어지면 제 인맥 네트워크가 금방 작아진다는 이야기죠.
  42. 42. 네트워크 쪼개기. 이제 전체 네트워크를 Dense한 sub-네트워크들로 쪼개 보려고 합니다. Clustering 기법도 몇 개 사용해봤는데 아쉽게도 의미있는 결과가 안나왔구요. 그래서 다른 방식으로 진행했습니다.
  43. 43. Cut most valuable edge. - 방법은 간단해요. - 아래 그림처럼 가장 소중한 edge(일반적으로는 Bet centrality가 높은 edge)를 자릅니다. - 아래 그림에서 검은색일수록 가장 bet cent가 높은 edge - 아래그림처럼, 하나씩 자르다 보면 Dense한 sub-네트워크들로 쪼개집니다.
  44. 44. Cut. - 제 인맥 네트워크에서 Betweenness centrality가 가장 높은 edge를 자릅니다. (시각적 편의성을 위해서 빈도 상위 10번 이상의 node에 대해서만 표시했습니다. )
  45. 45. Cut, Cut. <훈련소 사람들>이 떨어져 나왔습니다.
  46. 46. Cut, Cut, Cut. <학교 밖에서 했던 독서모임>이 떨어져 나왔습니다.
  47. 47. Cut, Cut, Cut, Cut. <학교 안에서 하던 독서모임>이 떨어져 나왔습니다.
  48. 48. Cut, Cut, Cut, Cut, Cut. <가족+여자친구>가 떨어져 나왔습니다.
  49. 49. Cut, Cut, Cut, Cut, Cut, Cut. <덜 열심히 활동한 교내 동아리>가 떨어져 나왔습니다.
  50. 50. Cut, Cut, Cut, Cut, Cut, Cut, Cut. <열심히 활동한 교내 동아리>가 하나 더 떨어져 나옵니다.
  51. 51. Cut, Cut, Cut, Cut, Cut, Cut, Cut, Cut. <친한 학과 동기들>이 떨어져 나옵니다.
  52. 52. Cut, Cut, Cut, Cut, Cut, Cut, Cut, Cut, Cut. <개발모임>이 떨어져 나옵니다.
  53. 53. Community. - 대략 봐도 같은 community내에서는 edge가 꽤 밀집되어 있는 것을 볼 수 있어요. - 또한 각 community는 실제로 의미있게 나누어 졌구요.
  54. 54. 급작스러운 엔딩. 네, 놀라셨겠지만 이제 끝입니다 하하. 몇 가지 더 분석한 내용이 있었는데(burstness 등), 결과에서 특별한 의미를 발견할 수 없어서 제외하였습니다. 다만, 시간에 따른 네트워크의 변화를 시각적으로 보여주지 못한 부분은 좀 아쉽네요.
  55. 55. 데이터를 모은다는 것. 아마도 저는 앞으로도 (가능하면 죽을때까지) 데이터를 꾸준히 모을 예정입니다. 데이터를 분석하는 것도 중요하지만, 그만큼 (재밌는) 데이터를 수집하는 것도 중요하다고 생각해요. 특히, 이렇게 <매일 만나는 사람>에 관한 데이터는 저만 수집할 수 있으니까요. (물론 구글에서는 이미 GPS로 잘 모으고 있을 수도 있지만) 나중에 한 20년 넘게 데이터를 모아서 분석하면 진짜 재밌을 것 같다는 생각을 하고 있습니다.
  56. 56. 급작스러운 엔딩. 아무튼. 재미…있으셨는지 모르겠습니다. 발표 들어주셔서 정말 감사하구요.
  57. 57. 관련 코드. 관련 코드는 매우 간단하기는 한데, 제가 다음 주에 정리해서 블로그에 올릴 예정이에요. https://frhyme.github.io/ 혹시 관심있으신 분이 있을까 해서 블로그주소를 첨부했습니다.
  58. 58. 혹시 질문있으신가요.

×