- 최근, 인스타 광고(데이터 분석 광고)를 통해 우연찮게 제가 예전에 썼던 "파이썬으로 퍼널 분석 하는 글"과 유사한 이미지를 발견하였습니다.
- 처음에는 반가운 마음이 들었습니다. 어? 나도 비슷한 내용으로 글썼었는데..!
- 오..! 어떤 내용일까? 새로운 방법이 있는걸까? 기대하는 마음으로 저도 강의를 신청하고 수강하였습니다.
- 그런데, 기대가 무색하게 제가 이전에 작성하였던 글과 코드 진행 순서부터 변수명, 그리고 결과물까지 완전히 유사한 것을 확인하였습니다.
과거 작성한 파이썬 퍼널 분석 코드
import pandas as pd
import numpy as np
from itertools import permutations
import copy
def arrayToDf(phase_name: str, array, col_name: str) -> pd.DataFrame:
"""
array를 받아서 원하는 범주에 할당하여 데이터프레임을 생성합니다.
"""
dfFromArray = pd.DataFrame(data=array, index=[phase_name]*len(np_array), columns=[col_name]).reset_index()
dfFromArray.columns = ['category', col_name]
return dfFromArray
user_a = np.arange(100)
user_b = np.arange(70)
user_c = np.arange(50)
user_d = np.arange(30)
user_df = pd.DataFrame()
for np_array, category in zip([user_a, user_b, user_c, user_d], ['phase1', 'phase2', 'phase3', 'phase4']):
user_df = pd.concat([user_df, arrayToDf(category, np_array, 'userId')])
def make_funnel(df: pd.DataFrame, category: str, userid: str, phase_list: list) -> pd.DataFrame:
"""
퍼널 데이터 형식의 데이터프레임을 출력해줍니다.
-------------param--------------
df: 데이터프레임
category: 퍼널단계 컬럼명
userid : 유저아이디 컬럼명
phase_list: 퍼널 단계 리스트
"""
empty_list = []
intersectArray = np.array(df.loc[(df[category] == phase_list[0]), userid]) #array 초기화
initialCnt = len(intersectArray) #모수
phase_name = phase_list[0] #시작 퍼널
for phase in phase_list:
phaseArray = np.array(df.loc[(df[category] == phase), userid]) #단계별 유저수
intersectArray = np.intersect1d(intersectArray, phaseArray) #퍼널 통과 유저 array
intersectCnt = len(intersectArray) #퍼널 통과 유저수
phase_name = str(phase_list.index(phase) + 1) +'.' + phase #퍼널 단계 이름을 생성합니다.
empty_list.append(["->".join(phase_list), phase_name, intersectCnt, intersectCnt/initialCnt])
df = pd.DataFrame(data=empty_list, columns = ['퍼널이름', '퍼널단계', '유저수', '전환율'])
return df
testDf = make_funnel(user_df, 'category', 'userId', ['phase1', 'phase2', 'phase3', 'phase4'])
#한 번에 여러 스타일을 적용해야함.
testDf.style.format({'전환율':'{:,.1%}'.format})\ #%형태로 포메팅
.set_properties(**{'text-align': 'left'})\ #왼쪽 정렬
.bar(subset=['전환율'], width=100, align='left', vmin=0, vmax=1)\
.set_table_styles(
[{"selector": "", "props": [("border", "1px solid grey")]},
{"selector": "tbody td", "props": [("border", "1px solid grey")]},
{"selector": "th", "props": [("border", "1px solid grey")]}])
- 혹시나, 강의를 들으셨던 분이라면 제가 과거에 작성했던 글과 완전히 유사하다는 것을 아실 수 있으실겁니다. (사용한 파라미터 명까지 완전히 똑같습니다 ㅜ)
- 물론, 제 글이 대단한 글은 아닙니다. 요즘 같은 세상에는 어쩌면 chatgpt에 'python퍼널 분석 코드 짜줘' 한 문장의 요청으로 생성할 수 있는 코드 인지도 모르겠습니다.
- 그렇지만, 뭐랄까 제가 공들여서 적었던 글의 내용들이 출처 하나 없이 영리 목적으로 활용되는 것을 보니 뭔가 아쉽다고나 할까요. 이게 뭐라고, 괜히 서운한 마음이 들어 개인적으로 멘토처럼 생각하는 분께 상담도 받아보고...
- 업체쪽에 메일 한번 보내보는게 어떻겠냐고 조언 주셔서 확인 부탁드린다고 메일은 보내 둔 상황입니다. 어쩌면 제가 너무 침소봉대 하는 것인지도 모르겠습니다.
- 그래도, 뭔가모르게 아쉽고 서운하네요~_~
- 다른 한편으로는 이번일로 예전에 적었던 글을 다시 살펴보니, 부족한 부분들도 보이고 어떻게 개선할지 생각하다보니 두근 거리기도 합니다.
- 곧있으면.. 글또 10기도 시작하니, 전에 적었던 것보다 더 개선해서 잘 적어봐야겠습니다. 그럼 이만...
'나라는 존재 > 생각' 카테고리의 다른 글
비난이라는 생각의 감옥 (1) | 2024.11.24 |
---|---|
당신을 통제하는 감정은? - 인사이드 아웃2 후기 (1) | 2024.07.02 |
분석가라는 배역에 몰입하기 위해 (3) | 2024.03.31 |
아직끝나지 않은 24년 1분기에 대한 회고 (feat. 아직 한발 남았다) (6) | 2024.03.17 |
연말 성과작성 - 누구보다 빠르게 난 남들과는 다르게 (6) | 2024.02.18 |
제 블로그에 와주셔서 감사합니다! 다들 오늘 하루도 좋은 일 있으시길~~
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!