## 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)
결측치를 확인합니다.
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()
다음 페이지에서는 본 환경을 이어서 동일한 데이터를 가지고 추가적인 전처리를 진행하도록 하겠습니다.