본문 바로가기
앱 로그 분석 실무

데이터 분석에서 앱 로그 데이터는 어떤 모습일까?

by 히모기 2022. 2. 22.

안녕하세요!

오늘은 제가 앱 로그 데이터가 어떻게 생겼는지(?) 알려드리겠습니다:)

 

앱 로그데이터에는 종류가 많이 존재하는데요!

그중에서도 사용자의 행동 이력과 정보가 담긴 앱 로그 데이터에 한하여 설명드려보겠습니다.

 

사용자의 행동이력 및 정보의  앱 로그 데이터란?

 

1) 사용자의 행동 이력 :

   사용자가 특정 앱을 시작하면서부터 종료할 때까지 활동한 다양한 행동들이 순차적으로 기록된 데이터

   ex) 다양한 행동들의 예시

      - 장바구니 담기, 결제, 홈 화면 클릭 등

2) 사용자 정보 :

   사용자가 특정 앱을 시작할 때 입력한 개인 정보

   ex) 개인 정보 예시

      - 성별, 지역, 나이 등

 

다음은 사용자 앱 로그 데이터의 예시입니다. 사실 수집된 로그 데이터를 어떠한 형태로 저장할 것인지는 회사마다 다를 수 있기 때문에, 반드시 해당 구조처럼 존재하는 것은 아닙니다.

 

{ "user_id": "5d468b47-6ec6-4eb3-8704-e3a96c8a504b"
, "property": { "gender": "male",
                   "age": 42,
                   "city": "seoul"}
, "session_id": "HZq-IYjARqWEXvRudFrKpg"
, "date": 2022-02-22 13:25:00
, "duration": 3000
,  "events": [ { "name": "buy_store",
                  "date": 2022-02-22 13:25:06,
                  "param": { "membership": "off",
                             "use_point": 3000,
                             "use_cart": "on"
                           }
                }
              ]
}

 

처음 접하신다면 생소하실 수 있는데요. 실제로 제가 특정 앱을 사용한다고 해보겠습니다.

그렇다면 다음과 같이 이해하시면 될 것 같습니다.

 

user_id : 특정 앱 내에서 내가 갖는 고유한 아이디

property : 나의 개인 정보

session_id : 내가 앱을 실행할 때마다 생기는 하나의 세션의 고유한 아이디

date : 앱을 실행할 때의 시간

duration : 앱을 실행하고 종료할 때까지의 소요된 시간

events : 내가 앱을 실행할 때 사용한 앱 내의 기능

param : 사용한 앱 내의 기능의 부가적인 기능

 

중요한 특징은 저희가 일반적으로 사용하는 행과 열의 구조가 아닌 key-value의 형태로 이루어진 딕셔너리의 구조라는 것입니다. 물론 이 데이터를 DB에서 쿼리를 통해서 테이블의 구조로 가져다가 사용하는 경우가 대부분이라고 생각됩니다.

 

DB에서 query를 이용하여 사용하는 경우

 

하지만 저는 위의 데이터의 구조를 직접 가져다가 사용해야 했습니다. 따라서 해당 구조로 만들어진 데이터를 연습해보고 다루는 방법을 고민해보시는 것을 추천드립니다! 

처음 접했을 때, stackoverflow의 관련된 거의 모든 글들을 살펴보면서 팁들을 얻으려고 했던 것 같습니다,,!

이전에는 구조적 잘 되어 있는 csv나 xlsx 형태의 데이터들을 분석할 때에는 항상 "데이터 처리 및 가공"이라는 과정에 대해서 의문이 들곤 했습니다. 하지만 해당 문제를 고민하면서 다음의 항목들을 해결해야 했습니다.

 

  1. 한 사용자가 특정 앱 내에 여러 번 접속해서 했던 행동들을 살펴보려면 어떻게 해야 할까?
  2. 해당 데이터를 행과 열의 구조로 나타내려면 어떻게 해야 할까?
  3. 하나의 행에는 어떤 내용들이 있어야 할까?
  4. 테이블을 여러 개로 나눠서 데이터를 관리하면 어떨까? 

 

 

1-4번의 과정을 python으로 수행하려면 어떤 코드를 짜야할까?

 

 

 

저도 완벽하게 이 문제를 해결해낸 것은 아니고, 해결 방법들에는 여러 가지가 있었습니다.

여러분들도 고민해보시고 좋은 방법이 있다면 알려주세요! 

마지막으로, 해당 글은 제 경험 기반 하에 작성한 것이기 때문에 틀린 점이나 보완할 점이 있을 수 있으니 
피드백은 언제든 편하게 말씀 주시면 감사하겠습니다:)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

댓글