가는중 2023. 5. 13. 14:26

## Environment : Anaconda-navigator
## Programming Language : Python 3
## Import Pandas as pd
## import Numpy as np

## import seaborn as sns

 

 

1. 데이터를 불러오기 및 데이터 전처리
2. 데이터 분석
3. 추천시스템

 

 

1. 데이터 불러오기 및 전반적인 정보 확인

Python의 import를 활용해 데이터 분석용 패키지인 판다스(Pandas)를 읽어옵니다.

 

import pandas as pd

 

판다스 데이터프레임(DataFrame)을 출력할 때, 여러컬럼을 편하게 보기 위해 최대 출력 컬럼을 50개로 늘려줍니다.

pd.options.display.max_columns = 50

 

데이터 로딩하기 - 데이터를 읽어올때는 판다스(Pandas)의 read_csv 라는 기능을 사용합니다.

FILES_DIR = './files/'
events = pd.read_csv(FILES_DIR + 'sampled_events.csv')
product = pd.read_csv(FILES_DIR + 'sampled_products.csv')
users = pd.read_csv(FILES_DIR + 'sampled_users.csv')

 

copy()를 이용하여 불러온 데이터들을 _df로 assign 한다

events_df = events.copy()
product_df = product.copy()
users_df = users.copy()

 

행렬 사이즈를 출력합니다. 결과는 row & column 으로 표시됩니다.

print(events_df.shape)
print(product_df.shape)
print(users_df.shape)

 

컬럼 리스트를 출력합니다.

print(events_df.columns)
print(product_df.columns)
print(users_df.columns)

 

event_df

다음은 간편하게 데이터를 훑기 위해 head()로 event_df 데이터의 상위 5개를 띄웁니다.
- head는 괄호() 안에 숫자를 넣어 원하는 만큼 raw를 출력할 수 있습니다. 기본은 5개입니다.

events_df.head()

product_df

product_df.head()

users_df

users_df.head()

 

 

2. 불러온 데이터들을 전처리

다음으로 Data 과학자들이 일을 하면서 가장 많은 시간을 소모하는 전처리 과정으로 들어가겠습니다.(참고 내용 From Forbes)

 

https://www.forbes.com/sites/gilpress/2016/03/23/data-preparation-most-time-consuming-least-enjoyable-data-science-task-survey-says/#437fbfc66f63

 

결측치를 확인합니다.

events_df.isnull().sum()

 

결측치가 있는 데이터 컬럼을 확인해 보자

events_df[['mobile_brand_name', 'mobile_model_name', 'mobile_marketing_name', 'country', 'region']]

 

플랫폼 컬럼이 있기 때문에 모바일 컬럼들을 drop한다. 플랫폼 컬럼은 결측치 데이터가 없다

events_df['platform']

 

 'country', 'region' 컬럼은  un_컬럼네임을 붙여 결측치를 처리하자

events_df.drop('mobile_marketing_name', axis=1, inplace=True)
events_df.drop('mobile_brand_name', axis=1, inplace=True)
events_df.drop('mobile_model_name', axis=1, inplace=True)
events_df['country'].fillna('un_country', inplace=True)
events_df['region'].fillna('un_region', inplace=True)

 

product_df 결측치를 확인합니다.

product_df.isnull().sum()

 

결측치가 너무 적어서 dropna를 하자

product_df.dropna(axis=0, inplace=True)

 

users_df 결측치를 확인합니다.

users_df.isnull().sum()

 

 'birth_date', 'gender' 컬럼은  un_컬럼네임을 붙여 결측치를 처리하자

users_df['birth_date'].fillna('un_birth_date', inplace=True)
users_df['gender'].fillna('un_gender', inplace=True)

 

'event_timestamp' 컬럼은 보기에는 날짜 시간 형식으로 보이지만 아래처럼 현재 dtype이 object로 되어있습니다.

events_df['event_timestamp']

 

'event_timestamp' 컬럼에 있는 값을 판다스의 to_datetime이라는 함수를 사용해서 날짜와 시간을 표현할 수 있는 datetime 형태로 변경합니다.

events_df['event_timestamp'] = pd.to_datetime(events_df['event_timestamp'])

 

새로운 컬럼을 생성하며 연, 월, 일, 시, 분  단위로 나누는 작업을 진행합니다.

마지막줄은 새로 생성한 6개 컬럼의 결과를 보여줍니다.

events_df["event_timestamp_year"] = events_df["event_timestamp"].dt.year
events_df["event_timestamp_month"] = events_df["event_timestamp"].dt.month
events_df["event_timestamp_day"] = events_df["event_timestamp"].dt.day
events_df["event_timestamp_hour"] = events_df["event_timestamp"].dt.hour
events_df["event_timestamp_minute"] = events_df["event_timestamp"].dt.minute

print(events_df.shape) # 내용 변경 후 row와 컬럼 형태 확인

events_df[["event_timestamp", "event_timestamp_year", "event_timestamp_month",\
            "event_timestamp_day", "event_timestamp_hour", "event_timestamp_minute"]].head()

 

 

다음 페이지에서는 본 환경을 이어서 동일한 데이터를 가지고 추가적인 전처리를 진행하도록 하겠습니다.

반응형