본문 바로가기

TIL

(97)
[240220-21] 태블로(Tableau) - 데이터 시각화, 계산식 활용 [실습으로 배우는 태블로 by 주정민 튜터] 0. 들어가기 전 - 태블로에서 추가 기능 구현하고 싶다면? 공식 문서에서 확인 후 구글링 하는 것이 좋음 └ 공식 유튜브 https://www.youtube.com/@Tableau-eo8gj └ 공식 문서 사이트(https://help.tableau.com/current/guides/get-started-tutorial/ko-kr/get-started-tutorial-home.htm └ 추천 아티클 참고: https://www.tableau.com/ko-kr/learn/whitepapers 1. BI 소개 1) BI란? - 비즈니스 인텔리전스 (Business Intelligence, BI)의 약어 - 조직이 데이터 기반 의사 결정을 빠르게 할 수 있도록 돕..
[240220] SQL: 코드카타 123~124(not exists, offset, group_concat) & 파이썬: 코드카타 31~32(zip) [SQL 코드가타] 1. 176. Second Highest Salary https://leetcode.com/problems/second-highest-salary 1) 어떤 문제가 있었나 급여가 두 번 째로 높은 값만 추출하는 문제로 두 번째 값이 없으면 null 반환 2) 내가 시도해본 건 무엇인가 rank로 급여액에 따라 순위를 매기고, 랭킹 숫자가 2이면 salary 칼럼 값을, 아니면 null을 출력하는 쿼리 작성 > 값이 하나일 때 null 처리가 안 되고, 값이 빈 상태로 출력되는 오류 발생 select if(ranking = 2, salary, 'null') as SecondHighestSalary from (select salary, rank() over(order by salary d..
[240219] SQL: 코드카타 122 [SQL 코드가타] 196. Delete Duplicate Emails https://leetcode.com/problems/delete-duplicate-emails/ 1) 어떤 문제가 있었나 Delete 를 활용해 중복된 이메일 중에 id가 가장 낮은 값만 남기는 쿼리 작성 2) 내가 시도해본 건 무엇인가 작성한 코드가 어떻게 구현되나 중간중간 확인하고자 했으나 그 어떤 코드를 적어도 결과는 'Person' 테이블만 출력됨 결국 다른 사람 답을 통해서 사용 경험이 없는 delete는 어떻게 활용해야 하는지 확인함 3) 어떻게 해결했나 delete p1 from Person p1 join Person p2 on p1.email = p2.email and p1.id > p2.id; 4) 무엇을 새롭게 알..
[240216] 구매자 예측 모델링(실패한 코드) * 자료 출처: Kaggle - Google Analytics Customer Revenue Prediction 1. 문제 배경 - GA 로그데이터를 활용해 구매자 예측 모델링 시도 - 매출액 칼럼에서 NaN은 미구매로 간주하고 0, 매출액이 있는 값은 1로 대치 - 데이터 분리, 인코딩 및 스케일링 작업 진행 - 프로젝트 시간이 부족하여 추가 전처리 및 x변수 조정 작업하지 못하고 실패로 마무리 2. 모델링 - 데이터 분리 from sklearn.model_selection import train_test_split # 데이터를 train, test로 분리 X = df.drop(columns = ['Revenue_yn']) y = df[['Revenue_yn']] # 학습과 평가를 위해 데이터 셋 분리..
[240215] 피벗 테이블을 활용한 히트맵 시각화 * 자료 출처: Kaggle - Google Analytics Customer Revenue Prediction 1. 문제 배경 - 요일별-시간대별 방문자수와 구매수를 히트맵으로 시각화 2. 히트맵 생성 # 시간대별 데이터 출력을 위해 시간으로 변환 visit_hour = df['visitStartTime'].dt.hour visit_dayofweek = df['visitStartTime'].dt.weekday # 월요일이 0 # 피봇테이블 생성 # 행 index는 시간, 열 columns는 요일, 사용할 값은 방문자수 wod_hour_pivot = pd.pivot_table(df, index=visit_hour, columns=visit_dayofweek, values=['fullVisitorId'],..
[240214] 파이차트: 기준값 추가 / 막대그래프: X축 이름 및 간격 변경 * 자료 출처: Kaggle - Google Analytics Customer Revenue Prediction 1. 문제 배경 - 평균세션시간별 방문자수 비중을 파이 차트로 시각화 필요 └ 평균세션시간이 0인 비중이 94%, 나머지 시간은 각 비중이 현저히 낮아 특정 기준 이하 값은 합계하여 '기타' 항목 처리 - 막대그래프에서 X축 이름과 간격 별도 지정 2. 파이차트 - 평균세션시간이 0인 비중이 94%로, 나머지 시간대는 항목이 많고, 비중이 미비하여 합계 값으로 표기 필요 - 1) 전체 수치에서 백분율을 구하고, 2) 기준치에 따라 일부는 sum 적용하여 파이차트용 데이터프레임 생성 ## 평균세션시간별 비중 # df_avg_session_time가 유저별 평균세션시간이 저장된 변수 # 평균세션시..
[240213] 유저ID와 방문시작시간으로 세션ID/평균세션시간 생성(feat. ECDF) * 자료 출처: Kaggle - Google Analytics Customer Revenue Prediction 1. 문제 배경 - GA 로그데이터로 유저별 평균 세션 시간을 ECDF로 시각화 - 평균 세션 시간 데이터가 따로 제공되지 않아 User_id와 방문시작시간 칼럼을 활용해 세션ID 생성 2. 세션ID 생성 - 각 유저의 방문시작시간의 차가 30분 이내인 값에 동일한 세션ID 부여 - 방문시작시간의 차가 30분 이상일 경우 다른 세션ID 부여 - 1) 방문시작시간으로 정렬하고, 2) diff로 전 행과의 시간 차이가 30분 미만인지 체크하고, 3) cumsum으로 id 부여 ## sessoin_id 생성하기 # 1. 시간, 방문자id 기준으로 정렬한 데이터 프레임 생성 df_sorted = df..
[240208] 날짜 데이터 타입 변환 및 처리(to_datetime, datetime) 1. 문제 배경 - POSIX 시간대(ex. 1472830385)로 처리된 날짜 칼럼을 년/월/일/시/분/초(ex.2016-08-01 07:00:12) 형식으로 변경 - 년/월/일별 분석을 위해 원하는 날짜나 시간대 등을 추출하는 작업 필요 2. 날짜형 데이터 타입 변경 - POSIX 시간은 UTC(협정 세계시) 기준 1970년 1월 1일 00:00:00 이후 경과한 초를 정수로 나타낸 시간대 └ UNIX 시간(UNIX time), Epoch 시간이라고 부르기도 함 - pd.to_datetime으로 데이터 타입 변경 └ format으로 칼럼 값의 형식을 지정한 뒤 날짜 형태로 출력 └ unit은 숫자에 대한 인수의 단위로 기본 값은 ns(나노 초). 초('s')로 지정하여 정수형 시간대를 날짜 형태로 출..