<jupyter_start><jupyter_text>1. Read the Dataset¶  1.1 File Info.* 문서 앱내 사용시 발생하는 클라이언 로그 데이터 (after parsed)* 서버로그와 달리, 유저의 행동이 발생할 경우 로그 수집 (유저 행동 패턴 파악에 용이) * 클라이언트(앱) 로그 * 서버 로그_ really purchase<jupyter_code>%matplotlib inline
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

import warnings
warnings.filterwarnings('ignore')
plt.style.use('seaborn-paper')
import pandas as pd
df= pd.read_csv('df_funnel.csv',index_col=0)
df.head(5)
df.tail(5)
# key infor => data en entries, missing values, type
df.info()<jupyter_output><class 'pandas.core.frame.DataFrame'>
Int64Index: 301861 entries, 0 to 301860
Data columns (total 7 columns):
actiontype          301861 non-null object
ismydoc             301861 non-null object
ext                 301861 non-null object
sessionid           301861 non-null object
documentposition    301861 non-null object
datetime            301861 non-null object
screen              301861 non-null object
dtypes: object(7)
memory usage: 18.4+ MB<jupyter_text>2. Preprocessing* 데이터 타입 변환* 데이터 값 변경* 결측치 처리* 신규 session id 부여* 대소문자 처리  2.1 날짜를 pandas datetime 형태로 변환하기pandas.to_datetime()<jupyter_code># if datetime is string? no sort

df.groupby ('datetime').size().head(15)
## case 1. if data type is string,
str_date =['2018/01/01','2018.01.02','2018-01-03','2018-01-04','2018/01/05']#string type
str_date
pd.to_datetime(str_date)# parsed
pd.Series(pd.to_datetime(str_date))# to pd:series
## case 2. 날짜가 timestamp인 경우
ts_date =[1349720105, 1349806505, 1349892905, 1349979305, 1350065705]
ts_date
pd.Series(pd.to_datetime([1530837876, 1530751476, 1530665076, 1530578676, 1530492276], unit='s')).dt.date<jupyter_output><empty_output><jupyter_text>* timestamp converter: https://www.epochconverter.com/<jupyter_code>## case 3. in case of changing the type of column

df.info()
df.head() # object =string
# option1. string to datetime
df['datetime'].astype('datetime64[ns]').head()
# option2
pd.to_datetime(df['datetime']).head()
df['datetime']=pd.to_datetime(df['datetime'])
df.info()
df.head()
df.groupby('datetime').size()#.plot()
# day to year
df['datetime'].dt.year[:10]
# day to month
df['datetime'].dt.month[:10]
# day to day
df['datetime'].dt.day[:10]<jupyter_output><empty_output><jupyter_text>2.2 Missing value 확인<jupyter_code>df.info()
df.isnull().sum()<jupyter_output><empty_output><jupyter_text>* 2.3 결측치 처리Drop경우에 따라 결측치 처리 방법이 달라진다.샘플수가 많다면 missing values 를 포함하는 행을 모두 삭제하는 것이 가능하다* 결측치가 하나라도 있으면 버리는 코드 예제df.dropna()* 모든 값이 Null일 경우만 버리는 코드 예제df.dropna(how='all')* 결측치가 하나 이상 있는 Case만 선택하는 코드 예제df[df.isnull().any(axis=1)]* Imputation * 만약 샘플수가 충분하지 않을 경우, Pandas의 fillna() 명령어로 Null 값을 채우는 것이 가능하다. * 연속형인 경우 Mean이나 Median을 이용하고 명목형인 경우 Mode(최빈치)나 예측 모형을 통해 Null 값을 대체할 수 있다.* Null 값을 median으로 대체하는 코드 예제df.fillna(df.mean())Referencehttps://machinelearningmastery.com/handle-missing-data-python/<jupyter_code>df_by_screen = df.groupby(['datetime','screen'])['sessionid'].nunique().unstack()
df_by_screen = df.groupby(["datetime", "screen"])['sessionid'].nunique().unstack()
df_by_screen[:10]
df_by_screen.isnull().sum()
pd.get_dummies(x)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.13688212927756654, 'fraction_numerical': 0.0738276299112801, 'mean_word_length': 5.214566929133858, 'pattern_counts': {'":': 0, '<': 21, '<?xml version=': 0, '>': 22, 'https://': 2, 'lorem ipsum': 0, 'www.': 1, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '5', 'dir': 'jupyter-structured-clean-dedup', 'id': '498482', 'license': 'MIT', 'n_tokens_mistral': 1562, 'n_tokens_neox': 1614, 'n_words': 308, 'path': 'DSES_2nd_review/19-05-11_lecturenote.ipynb', 'repo_name': 'MinJiH/TIL', 'size': '3156'}