기본 콘텐츠로 건너뛰기

파이썬(Python)을 이용한 DAU 구하기

0. DAU(Daily Active Users, 일별 활성 사용자)는 앱 또는 웹을 사용한 사용자 수를 일별 집계한 값이다.
게임 앱이라고 가정한다면, 일별 게임 플레이한 유저 수가 DAU라 할 수 있다. 유저 수는 중복을 제거한다. DAU에 대한 자세한 설명은 위키피디아에서 확인할 수 있다.

1. 먼저 매일 게임을 플레이한 유저를 기록하는 PLAYS라는 가상의 DataFrame이 있다고 하자.
Pandas 라이브러리를 이용해 user_id와 플레이한 date가 기록되어 있는 간단한 샘플 데이터프레임을 아래와 같이 만든다.


1
2
3
4
5
6
7
8
import pandas as pd

user_id = ['1', '4', '6', '1', '2', '8', '10', '1']
created_at = ['2019-01-03', '2019-01-03', '2019-01-03', '2019-01-03', '2019-01-04', '2019-01-04', '2019-01-04', '2019-01-04']

plays = pd.DataFrame({'user_id': user_id, 'created_at': created_at})

plays.tail()

tail() 메서드를 이용해 아래와 같이 PLAYS 데이터프레임이 잘 만들어진 것을 확인할 수 있다.
Jupyter Notebook을 이용하면 바로 확인할 수 있다.


2. DAU는 "일별로 유저 수 집계", "중복 유저 제거" 2가지 조건을 충족시켜야 한다.
즉 날짜(created_at)를 기준으로 user_id 수를 집계 하되, 중복 유저는 제거하고 집계해야 한다.

"groupby(['created_at'])"를 이용하여 날짜를 기준으로 집계한다.
"agg({'user_id': pd.Series.unique})"를 이용하여 groupby의 기준에 의한 user_id의 수를 집계한다.

중복을 제거하지 않고 count하고 싶으면, count 메서드를 사용한다.
"agg({'user_id': 'count'})"와 같이 작성하면 된다. count의 양쪽에 따옴표(')를 붙여야 한다.

user_id의 중복을 제거하고, unique한 값만 사용하기 위해 "pd.Series.unique"로 작성하였다.

두 번째 줄의 "rename" 메서드는 칼럼의 이름을 재지정하기 위함이다. 데이터프레임의 칼럼명을 created_at -> date, user_id -> dau로 재지정하였다.

위 조건을 대입한 코드는 아래와 같다.


1
2
3
4
dau = plays.groupby(['created_at'], as_index=False).agg({'user_id': pd.Series.nunique})
dau = dau.rename(index=str, columns={'created_at': 'date', 'user_id': 'dau'})

dau

코드를 실행하면 아래와 같이 DAU가 산출된다.
마지막 4번째 줄의 "dau" 코드는 산출된 DAU 데이터프레임을 Jupyter Notebook에서 확인하기 위해 작성한 것이다.


1월 3일에는 3명, 1월 4일에는 4명의 유저가 DAU로 집계됨을 확인할 수 있다.

SQL을 이용해 DAU를 산출하고 싶다면, "SQL - DAU 산출" 포스팅에서 쿼리를 확인할 수 있다.

끝.

댓글

이 블로그의 인기 게시물

파이썬(Python)을 이용한 산점도(scatter) 그리기

파이썬의 Matplotlib를 이용해 데이터의 산점도(scatter plot)를 그릴 수 있다. 예시를 통해 살펴보자. 먼저 아래와 같이 데이터 프레임 예시를 만든다. 1 2 3 4 5 6 7 8 9 10 import pandas as pd height = [ 170 , 168 , 177 , 181 , 172 , 171 , 169 , 175 , 174 , 178 , 170 , 167 , 177 , 182 , 173 , 171 , 170 , 179 , 175 , 177 , 186 , 166 , 183 , 168 ] weight = [ 70 , 66 , 73 , 77 , 74 , 73 , 69 , 79 , 77 , 80 , 74 , 68 , 71 , 76 , 78 , 72 , 68 , 79 , 77 , 81 , 84 , 73 , 78 , 69 ] # DataFrame 만들기 body = pd . DataFrame( { 'height' : height, 'weight' : weight} ) body라는 이름의 데이터 프레임(테이블)이 만들어졌다. 이제, body 테이블의 데이터들의 분포를 산점도로 그려보자. 산점도를 그리는 코드는 아래와 같다. 1 2 3 4 5 6 7 8 9 10 # 산점도(scatter) 그리기 import matplotlib.pylab as plt plt . scatter( body[ 'weight' ], body[ 'height' ], label = "data" ) plt . legend(loc = "best" ) plt . xlabel( 'weight' ) plt . ylabel( 'height'

웨딩 드레스 스케치 도안

웨딩 드레스샵 투어를 다니면서 샘플로 드레스를 입는 경우에는 드레스 사진을 찍지 못하게 하는 샵이 많다. ​ 그래서 투어를 돌고 나면 어떤 샵의 어떤 스타일이 신부에게 잘 어울렸는지 헷갈릴 수가 있다. ​ 하지만 투어를 다닐 때 드레스샵에서 입은 드레스의 특징과 느낌을 잘 기록하면 샵을 선택하는 데 도움이 될 수 있다. ​ 드레스 투어를 다닐 때 드레스를 기록할 스케치 도안은 아래 링크에서 확인/다운로드 할 수 있다. 웨딩 드레스 스케치 도안 확인/다운로드 하기 투어를 마친 후 드레스샵과 계약을 하고, 드디어 본식 드레스를 고를 때에는 사진을 찍을 수 있는 경우가 많다. ​ 이 땐 사진을 잘 찍어서 어떤 드레스를 입을지 잘 선택하도록 하자. ​ ​

DEMOS Calculator - 웹에서 그래프 그리기

수식의 그래프를 그려보고 싶을 때 편리한 웹 서비스가 있어서 소개한다. DEMOS Calculator(https://www.desmos.com/calculator) DEMOS Calculator는 수식을 입력하면 자동으로 그래프를 그려준다. 아래는 로그함수를 입력한 모습이다. 좌측 영역의 수식 입력창에 수식을 입력하면 실시간으로 그래프를 확인할 수 있다. 좌측 상단의 햄버거 바를 클릭하면 아래와 같이 다양한 예시 그래프들도 확인할 수 있다. 수학식에 따라 그래프를 깔끔하게 그려야 할 때 요긴하게 사용할 수 있는 웹 서비스이다. 끝.