ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • <TIL> 2024-03-04
    내일배움캠프(데이터 분석 부트캠프 1기)/TIL & WIL 2024. 3. 4. 23:28
    • 오늘 진행한 일 
      • 팀 프로젝트 데이터 전처리
      • 팀 프로젝트 문제 해결

    오늘 한 일은 지난 주 목요일에서 이어진다.

    https://jinhyunbae.tistory.com/170

     

    <TIL> 2024-02-29

    오늘 진행한 일 SQL 코딩 테스트 팀 프로젝트 발제 팀 프로젝트 데이터 선정 및 간단한 EDA 오전에는 실전 팀프로젝트의 발제가 있었다. 팀 프로젝트에서 활용할 데이터가 위 사진처럼 5개 주어지

    jinhyunbae.tistory.com

     

    events 데이터의 데이터의 정합성을 검증하는 것이 목표인데

    확인해야할 것은 여러가지가 있었는데 구체적으로는 아래와 같다. 

     

    1. 하나의 세션 안에 두 유저가 있는지 여부

    2. 한 유저가 두 도시에서 접속한 경우

    3. 유저 ID가 없는 경우(Null)

    4. Event가 발생하지 않았는데 구매 이력이 존재하는 경우

    5. 30분 이상 지속되는 이상 세션의 존재 여부

     

     * 세션의 정의는 "일정한 기간 내에 웹사이트에서 발생한 사용자 상호작용의 집합" 이다.

     

    최종 목표는 해당 정합성 테스트를 태블로 대시보드를 이용해서 하는 것인데 

    오늘은 태블로에 제대로 값이 출력되고 있는지를 확인하기 위한 작업을 했다. 

     

    이를 위해서 파이썬으로 EDA를 했으며 Event 미발생 구매를 보기 위해 

    order_items 데이터와 merge하기 위해서 전처리를 진행하였다. 


    오늘 진행한 EDA는 다음과 같다. 

    import pandas as pd
    import numpy as np
    import seaborn as sns
    import matplotlib.pyplot as plt
    
    events = pd.read_csv('./data/events.csv')

    1. 하나의 세션 안에 두 유저가 있는 지 여부

    nunique_user_session = events.groupby('session_id').nunique()
    nunique_user_session['user_id'].value_counts()
    0    500000
    1    181759
    Name: user_id, dtype: int64

     

    session_id를 기준으로 events의 데이터를 groupby 하는데 집계 함수를 nunique()를 사용하면

    해당 세션에 속하는  null값을 제외한 unique값의 개수를 알 수 있다. 

     

    집계했을 때

    user_id 고윳값 수를 센 결과 0의 고윳값을 가지는 세션이  5만개(user_id에 null값이 있기 때문에)

    그리고 1의 고윳값을 가지는 세션이 181759개인 것을 확인할 수 있었다. 


    2. 한 유저가 두 도시에서 접속한 경우

    cond_user_city = (~pd.isna(events['user_id']))&(~pd.isna(events['city']))
    events_task2 = events.loc[cond_user_city]
    
    nunique_user = events_task2.groupby('user_id').nunique()
    nunique_user['city'].value_counts()
    1    79283
    Name: city, dtype: int64

     

    위의 1번과 동일한 방식으로 groupby와 nunique를 이용해서 해당하는 값을 알아내고자 했는데

     

    user_id와 city에 둘 다 null값이 존재하기 때문에 이를 정제하고 개수를 세었다. 

    그 결과 1개 city에서의 유저 데이터만 79283개로 나타났다. 따라서 두 city에서 접속한

    유저는 없는 것을 알 수 있었다.


    3. 유저 ID가 없는 경우(Null)

    events.isnull().sum()
    id                       0
    user_id            1125671
    sequence_number          0
    session_id               0
    created_at               0
    ip_address               0
    city                 23080
    state                    0
    postal_code              0
    browser                  0
    traffic_source           0
    uri                      0
    event_type               0
    dtype: int64

     

    3번은 비교적 간단하게 isnull().sum()을 이용해서 풀 수 있었다. 

    user_id에 1125671개로 전체 데이터의 절반 정도가 결측치임을 확인할 수 있었다. 


    내일은 오늘 진행했던 것들을 대시보드에 다시 옮겨서 정합성 대시보드를 슬슬 구축해보고 

    구축한 내용을 가지고 튜터링을 받아서 보완하는 것이 계획이다. 

     

    프로젝트가 착착 진행되니 그래도 기분 좋게 하루를 보낼 수 있었다

    내일 하루도 화이팅!

    '내일배움캠프(데이터 분석 부트캠프 1기) > TIL & WIL' 카테고리의 다른 글

    <TIL> 2024-03-08  (0) 2024.03.08
    <TIL> 2024-03-05  (2) 2024.03.05
    <WIL> 2024년 2월 마지막 주 회고  (0) 2024.02.29
    <TIL> 2024-02-29  (0) 2024.02.29
    <TIL> 2024-02-28  (0) 2024.02.28
Designed by Tistory.