기본 콘텐츠로 건너뛰기

라벨이 개발/PYTHON인 게시물 표시

파이썬(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_

파이썬(Python) 데크(Deque) 자료구조

Deque(데크)는 Double-Ended Queue 의 줄임말로, 아래 그림과 같이 자료의 앞(왼쪽)과 뒤(오른쪽) 즉, 양방향에서 데이터를 처리할 수 있는 Queue형 자료구조이다. List(리스트)와 비슷하지만, 컨테이너의 앞과 뒤에서 원소를 삽입, 제거하는 것이 빠르다. <Deque 구조> Python에서는 collections 라이브러리를 통해 쉽게 이용할 수 있다. collections.deque의 기본 문법은 아래와 같다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 from collections import deque friends_list = [ "john" , "jane" , "peter" ] friends_deq = deque(friends_list) print(friends_deq) # 오른쪽(마지막)에 추가 friends_deq . append( "daniel" ) print(friends_deq) # 왼쪽(첫 번째)에 추가 friends_deq . appendleft( "young" ) print(friends_deq) # 모든 요소들 앞으로 당기거나 밀어내기 friends_deq . rotate( 2 ) print(friends_deq) friends_deq . rotate( - 2 ) print(friends_deq) # 오른쪽(마지막) 삭제 & 반환 print(friends_deq . pop()) print(friends_deq) # 왼쪽(첫 번째) 삭제 & 반환 print(friends_deq . popleft()) print(friends_deq) 끝.

파이썬(Python) 람다함수(lambda)

파이썬에서 람다함수(lambda)가 있다. 간단한 함수를 간결하게 한 줄로 작성할 수 있다. 아래의 예시를 통해 자세히 살펴보자. 1 2 3 4 5 6 7 8 9 10 # lambda function # lambda arguments : only one expression def generalAdd (x, y): return x + y lambdaAdd = lambda x, y : x + y print(generalAdd( 2 , 3 )) print(lambdaAdd( 2 , 3 )) 위 코드는 일반적인 함수와 람다함수를 비교한 값이다. 두 개 함수 모두 5를 return한다. 1개의 return을 가지는 1개의 expression을 함수로 작성할 때 1줄로 편리하게 작성할 수 있는 장점이 있다. 단 람다함수는 함수의 이름이 없다. 익명함수라고 불린다. 람다함수의 문법은 아래와 같다. lambda arguments : only one expression 간결하게 함수를 표현할 수 있기 때문에, 함수 안에 함수를 삽입할 때 유용하게 사용된다. 아래의 코드를 통해 예시를 살펴보자. 1 2 3 4 5 6 def exponential (x): return lambda a : a ** x square = exponential( 2 ) print(square( 3 )) exponential(2)를 통해 x에 2를 대입하여 제곱함수를 만들어 square에 할당했다. 그리고 square(3)을 통해 3^2 = 9를 출력하게 된다. 끝.

파이썬(Python) replace 함수로 텍스트 공백 없애기

파이썬의 replace 함수를 이용해 텍스트의 공백을 없앨 수 있다. replace 함수는 string에서 사용할 수 있는데 문법은 아래와 같이 간단하다. some_string.replace('old', 'new') replace를 이용해 공백을 없애기 위해서는 replace를 "old = 공백, new = 아무것도 입력하지 않음"으로 바꿔주면 된다. 아래의 예제를 통해서 살펴보자. 1 2 3 4 5 text = "Good Morning Good Afternoon Good Evening Good Night" # 텍스트 공백 제거 text_no_space = text . replace( ' ' , '' ) text_no_space text.replace(' ', '')에서 첫 번째 따옴표엔 공백이 1개 들어가 있고, 두 번째 따옴표엔 아무런 입력내용 없이 따옴표 두 개가 연속적으로 타이핑된 것에 주의하자. 아래와 같이 text의 공백이 모두 제거된 것을 확인할 수 있다. 끝.

파이썬(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'

파이썬(Python)을 이용한 로지스틱 회귀분석(logistic regression)

파이썬의 statsmodels 라이브러리를 이용해 간단하게 로지스틱 회귀분석을 해볼 수 있다. 예시를 통해 살펴보자. 먼저 아래와 같이 예시 데이터프레임을 만든다. 1 2 3 4 5 6 7 8 9 10 11 12 # DataFrame 만들기 import pandas as pd score = [ 56 , 60 , 61 , 67 , 69 , 55 , 70 , 44 , 51 , 64 , 60 , 50 , 68 , 72 , 90 , 93 , 85 , 74 , 81 , 88 , 92 , 97 , 77 , 78 , 98 ] _pass = [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ] result = pd . DataFrame( { "score" : score, "_pass" : _pass} ) result . tail() 위 코드에 대한 설명은  "파이썬(Python) Pandas를 이용한 데이터프레임(DataFrame) 만들기"  포스팅을 통해 확인할 수 있다. 위 코드를 Jupyter Notebook을 통해 실행해보면 아래와 같이 데이터 프레임이 만들어진 것을 확인할 수 있다. 종속변수와 독립변수가 모두 정규성을 가지는 연속적인 값을 가지고 있으면, 선형 회귀분석(linear regression)을 사용하여 독립변수들로 종속변수들을 설명하는 모델을 만들 수 있다. 선형 회귀분석은 "파이썬(Python)을 이용한 선형 회귀분석(linear regression)" 포스팅에서 더 자세한 내용을 확인할 수 있다. 하지만 종속변수가 연속값이 아니라 비연속값이면 선형회귀분석을 사용할 수

파이썬(Python)을 이용한 히스토그램 그리기

파이썬을 이용해 히스토그램을 그릴 수 있다. 예시를 통해 살펴보자. 먼저 아래와 같이 body라는 데이터프레임을 만든다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 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 . tail() 위 코드에 대한 설명은 " 파이썬(Python) Pandas를 이용한 데이터프레임(DataFrame) 만들기 " 포스팅에 설명해 놨으니 참고하자. 아래의 코드가 이번 포스팅의 메인인 히스토그램을 그리는 방법에 대한 설명이다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 # 히스토그램 그리기 import matplotlib.pylab as plt import numpy as np body[ 'height' ] . plot(kind = "hist" , range = ( 160 , 190 ), bins = 12 , edgecolor = "b

파이썬(Python)을 이용한 선형 회귀분석(linear regression)

파이썬의 statsmodels 라이브러리를 이용해 간단하게 선형 회귀분석을 해볼 수 있다. 예시를 통해 살펴보자. 먼저 아래와 같이 예시 데이터프레임을 만든다. 1 2 3 4 5 6 7 8 9 10 11 12 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 ] body = pd . DataFrame( { 'height' : height, 'weight' : weight } ) body . tail() 위 코드에 대한 설명은 "파이썬(Python) Pandas를 이용한 데이터프레임(DataFrame) 만들기" 포스팅을 통해 확인할 수 있다. 위 코드를 Jupyter Notebook을 통해 실행해보면 아래와 같이 데이터 프레임이 만들어진 것을 확인할 수 있다. 선형 회귀분석은 아래와 같은 가정을 만족해야 한다. 선형 회귀분석을 할 때에는 데이터가 아래의 가정을 따르는지 먼저 생각해보는 습관을 기르자. - 변수의 선형 상관관계 : 선형 회귀분석은 종속변수(Y)와 독립변수(X)가 선형의 상관 관계를 가지는 것을 가정한다. 선형의 상관관계가 아닐 경우, 다른 회귀분석 방법을 사용하거나, 새로운 변수를 추가하거나, 기존의 변수를 로그, 지수등의 방법으

파이썬(Python)을 이용한 피어슨 상관계수 구하기

피어슨 상관계수(Pearson correlation coefficient)는 두 변수 간의 상관관계를 확인하기 위한 가장 기본적인 방법이다. 피어슨 상관계수를 사용할 때 주의해야할 사항은 아래와 같다. - 상관관계가 인과관계를 의미하는 것은 아니다. 단순히 두 변수의 연관성을 확인하는 것이다. - 두 변수가 정규분포일 때 잘 작동한다.  - 이상치(outlier)에 민감하므로, 이상치는 제거하는 것이 좋다. - 두 변수가 완전히 동일하면 피어슨 상관계수는 1.0이다. 완전히 반대방향으로 동일하면 -1.0, 전혀 상관 없으면 0이다. 세부적인 해석은 아래와 같이 한다. - -1.0과 -0.7 사이이면, 강한 음적 선형관계 - -0.7과 -0.3 사이이면, 뚜렷한 음적 선형관계 - -0.3과 -0.1 사이이면, 약한 음적 선형관계 - -0.1과 +0.1 사이이면, 거의 무시될 수 있는 선형관계 - +0.1과 +0.3 사이이면, 약한 양적 선형관계 - +0.3과 +0.7 사이이면, 뚜렷한 양적 선형관계 - +0.7과 +1.0 사이이면, 강한 양적 선형관계 파이썬을 통해 피어슨 상관계수를 쉽게 구할 수 있다. 예시를 통해 알아보자. height, weight의 두 변수를 가지는 body라는 DataFrame을 만들었다. DataFrame을 만드는 과정은 아래의 포스트에서 확인할 수 있다.  "파이썬(Python) Pandas를 이용한 데이터프레임(DataFrame) 만들기" body 데이터프레임으로 피어슨 상관계수를 구하는 코드는 아래와 같다.  1 2 corr = body . corr(method = 'pearson' ) corr Jupyter Notebook으로 구하면 아래와 같은 결과를 얻는다. 표의 행과 열을 살펴보면 "height - height", "weight - weight"는 1이

파이썬(Python) Pandas를 이용한 데이터프레임(DataFrame) 만들기

파이썬(Python)에서 데이터를 다루는데 Pandas 라이브러리가 유용하게 쓰인다. Pandas에서 데이터를 핸들링 하기 위해서는 데이터를 데이터프레임(DataFrame)으로 만들어 주는 것이 유용하다. 아래는 height와 weight라는 리스트를 합쳐서 DataFrame을 만드는 코드이다. 1 2 3 4 5 6 7 8 9 10 11 12 import pandas as pd height = [ 170 , 168 , 177 , 181 , 172 , 171 , 169 , 175 , 174 , 178 ] weight = [ 70 , 66 , 73 , 77 , 74 , 73 , 69 , 79 , 77 , 80 ] body = pd . DataFrame( { 'height' : height, 'weight' : weight } ) body 1. pandas를 import한 뒤 통상 "pd"로 별칭을 붙여 사용한다. 2. 데이터가 리스트든, csv든 데이터프레임으로 만들 때는 "pd.DataFrame()"을 사용한다. Jupyter Notebook으로 코드를 실행해보면 아래와 같이 데이터프레임이 잘 만들어짐을 확인할 수 있다. 끝.