{ "cells": [ { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "파일 다운로드 완료\n", "====================\n", "\n", "데이터셋: 사용자이탈예측\n", "파일경로: data\\class.csv\n", "\n", "====================\n", "파일 다운로드 완료\n", "====================\n", "\n", "데이터셋: 사용자이탈예측\n", "파일경로: data\\event.csv\n", "\n", "====================\n", "파일 다운로드 완료\n", "====================\n", "\n", "데이터셋: 사용자이탈예측\n", "파일경로: data\\logs.csv\n", "\n", "====================\n", "파일 다운로드 완료\n", "====================\n", "\n", "데이터셋: 사용자이탈예측\n", "파일경로: data\\user_info.csv\n", "\n", "====================\n" ] } ], "source": [ "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "\n", "!pip install --upgrade mySUNI -q\n", "from mySUNI import cds\n", "cds.download_data('사용자이탈예측')" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
loguseriddate
0L00000049012330AS0093732018-04-01
1L00000049012331AS0153152018-04-01
2L00000049012332AS0408412018-04-01
3L00000049012333AS0465942018-04-01
4L00000049012334AS0732852018-04-01
............
197423L00000049209753TS9777032019-03-31
197424L00000049209754TS9795502019-03-31
197425L00000049209755TS9952992019-03-31
197426L00000049209756TS9958532019-03-31
197427L00000049209757TS9990792019-03-31
\n", "

197428 rows × 3 columns

\n", "
" ], "text/plain": [ " log userid date\n", "0 L00000049012330 AS009373 2018-04-01\n", "1 L00000049012331 AS015315 2018-04-01\n", "2 L00000049012332 AS040841 2018-04-01\n", "3 L00000049012333 AS046594 2018-04-01\n", "4 L00000049012334 AS073285 2018-04-01\n", "... ... ... ...\n", "197423 L00000049209753 TS977703 2019-03-31\n", "197424 L00000049209754 TS979550 2019-03-31\n", "197425 L00000049209755 TS995299 2019-03-31\n", "197426 L00000049209756 TS995853 2019-03-31\n", "197427 L00000049209757 TS999079 2019-03-31\n", "\n", "[197428 rows x 3 columns]" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 코드를 입력해 주세요\n", "# logs.csv 파일을 읽으세요.\n", "df_logs = pd.read_csv('data/logs.csv')\n", "df_logs" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
useridclassgenderstart_dateend_dateevent_typeis_deleted
0OA832399C01F2015-05-01 0:00NaNCA10
1PL270116C01M2015-05-01 0:00NaNCA10
2OA974876C01M2015-05-01 0:00NaNCA10
3HD024127C01F2015-05-01 0:00NaNCA1-1
4HD661448C03F2015-05-01 0:00NaNCA1-1
........................
4187HD676663C01M2019-03-14 0:00NaNCA10
4188HD246549C01F2019-03-14 0:00NaNCA10
4189GD037007C03M2019-03-14 0:00NaNCA10
4190OA953150C01M2019-03-14 0:00NaNCA1-1
4191IK692635C02F2019-03-15 0:00NaNCA10
\n", "

4192 rows × 7 columns

\n", "
" ], "text/plain": [ " userid class gender start_date end_date event_type is_deleted\n", "0 OA832399 C01 F 2015-05-01 0:00 NaN CA1 0\n", "1 PL270116 C01 M 2015-05-01 0:00 NaN CA1 0\n", "2 OA974876 C01 M 2015-05-01 0:00 NaN CA1 0\n", "3 HD024127 C01 F 2015-05-01 0:00 NaN CA1 -1\n", "4 HD661448 C03 F 2015-05-01 0:00 NaN CA1 -1\n", "... ... ... ... ... ... ... ...\n", "4187 HD676663 C01 M 2019-03-14 0:00 NaN CA1 0\n", "4188 HD246549 C01 F 2019-03-14 0:00 NaN CA1 0\n", "4189 GD037007 C03 M 2019-03-14 0:00 NaN CA1 0\n", "4190 OA953150 C01 M 2019-03-14 0:00 NaN CA1 -1\n", "4191 IK692635 C02 F 2019-03-15 0:00 NaN CA1 0\n", "\n", "[4192 rows x 7 columns]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 코드를 입력해 주세요\n", "# user_info.csv 파일을 읽으세요.\n", "df_user_info = pd.read_csv('data/user_info.csv')\n", "df_user_info" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
classclass_nameprice
0C01all10000
1C02day7000
2C03night5000
\n", "
" ], "text/plain": [ " class class_name price\n", "0 C01 all 10000\n", "1 C02 day 7000\n", "2 C03 night 5000" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 코드를 입력해 주세요\n", "# class.csv 파일을 읽으세요.\n", "df_class = pd.read_csv('data/class.csv')\n", "df_class" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
event_type\\tevent_name
0CA1\\tNone
1CA2\\tSale
2CA3\\tFree
\n", "
" ], "text/plain": [ " event_type\\tevent_name\n", "0 CA1\\tNone\n", "1 CA2\\tSale\n", "2 CA3\\tFree" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 코드를 입력해 주세요\n", "# event.csv 파일을 읽으세요.\n", "df_event = pd.read_csv('data/event.csv')\n", "df_event" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
event_typeevent_name
0CA1None
1CA2Sale
2CA3Free
\n", "
" ], "text/plain": [ " event_type event_name\n", "0 CA1 None\n", "1 CA2 Sale\n", "2 CA3 Free" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 코드를 입력해 주세요\n", "# event.csv 파일을 다시 읽으세요.\n", "# 구분자는 \\t 입니다.\n", "df_event = pd.read_csv('data/event.csv', sep='\\t')\n", "df_event" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
useridclassgenderstart_dateend_dateevent_typeis_deletedclass_nameprice
0OA832399C01F2015-05-01 0:00NaNCA10all10000
1PL270116C01M2015-05-01 0:00NaNCA10all10000
2OA974876C01M2015-05-01 0:00NaNCA10all10000
3HD024127C01F2015-05-01 0:00NaNCA1-1all10000
4IK271057C01M2015-05-01 0:00NaNCA10all10000
..............................
4187IK947853C02F2019-03-09 0:00NaNCA10day7000
4188OA301090C02F2019-03-12 0:00NaNCA10day7000
4189OA643695C02F2019-03-12 0:00NaNCA10day7000
4190HD522396C02F2019-03-13 0:00NaNCA10day7000
4191IK692635C02F2019-03-15 0:00NaNCA10day7000
\n", "

4192 rows × 9 columns

\n", "
" ], "text/plain": [ " userid class gender start_date end_date event_type is_deleted \\\n", "0 OA832399 C01 F 2015-05-01 0:00 NaN CA1 0 \n", "1 PL270116 C01 M 2015-05-01 0:00 NaN CA1 0 \n", "2 OA974876 C01 M 2015-05-01 0:00 NaN CA1 0 \n", "3 HD024127 C01 F 2015-05-01 0:00 NaN CA1 -1 \n", "4 IK271057 C01 M 2015-05-01 0:00 NaN CA1 0 \n", "... ... ... ... ... ... ... ... \n", "4187 IK947853 C02 F 2019-03-09 0:00 NaN CA1 0 \n", "4188 OA301090 C02 F 2019-03-12 0:00 NaN CA1 0 \n", "4189 OA643695 C02 F 2019-03-12 0:00 NaN CA1 0 \n", "4190 HD522396 C02 F 2019-03-13 0:00 NaN CA1 0 \n", "4191 IK692635 C02 F 2019-03-15 0:00 NaN CA1 0 \n", "\n", " class_name price \n", "0 all 10000 \n", "1 all 10000 \n", "2 all 10000 \n", "3 all 10000 \n", "4 all 10000 \n", "... ... ... \n", "4187 day 7000 \n", "4188 day 7000 \n", "4189 day 7000 \n", "4190 day 7000 \n", "4191 day 7000 \n", "\n", "[4192 rows x 9 columns]" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 코드를 입력해 주세요\n", "# 파편화된 데이터를 병합 합니다.\n", "# 1. df_user_info와 df_class을 class를 기준으로 병합하세요. \n", "user = pd.merge(df_user_info, df_class, on='class')\n", "user" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
useridclassgenderstart_dateend_dateevent_typeis_deletedclass_namepriceevent_name
0OA832399C01F2015-05-01 0:00NaNCA10all10000None
1PL270116C01M2015-05-01 0:00NaNCA10all10000None
2OA974876C01M2015-05-01 0:00NaNCA10all10000None
3HD024127C01F2015-05-01 0:00NaNCA1-1all10000None
4IK271057C01M2015-05-01 0:00NaNCA10all10000None
.................................
4187IK562610C02F2018-12-13 0:002019-02-28 0:00CA31day7000Free
4188HI599354C02M2018-12-13 0:00NaNCA30day7000Free
4189GD796859C02F2018-12-14 0:00NaNCA30day7000Free
4190GD082270C02F2018-12-14 0:002019-02-28 0:00CA31day7000Free
4191OA426023C02F2018-12-14 0:00NaNCA30day7000Free
\n", "

4192 rows × 10 columns

\n", "
" ], "text/plain": [ " userid class gender start_date end_date event_type \\\n", "0 OA832399 C01 F 2015-05-01 0:00 NaN CA1 \n", "1 PL270116 C01 M 2015-05-01 0:00 NaN CA1 \n", "2 OA974876 C01 M 2015-05-01 0:00 NaN CA1 \n", "3 HD024127 C01 F 2015-05-01 0:00 NaN CA1 \n", "4 IK271057 C01 M 2015-05-01 0:00 NaN CA1 \n", "... ... ... ... ... ... ... \n", "4187 IK562610 C02 F 2018-12-13 0:00 2019-02-28 0:00 CA3 \n", "4188 HI599354 C02 M 2018-12-13 0:00 NaN CA3 \n", "4189 GD796859 C02 F 2018-12-14 0:00 NaN CA3 \n", "4190 GD082270 C02 F 2018-12-14 0:00 2019-02-28 0:00 CA3 \n", "4191 OA426023 C02 F 2018-12-14 0:00 NaN CA3 \n", "\n", " is_deleted class_name price event_name \n", "0 0 all 10000 None \n", "1 0 all 10000 None \n", "2 0 all 10000 None \n", "3 -1 all 10000 None \n", "4 0 all 10000 None \n", "... ... ... ... ... \n", "4187 1 day 7000 Free \n", "4188 0 day 7000 Free \n", "4189 0 day 7000 Free \n", "4190 1 day 7000 Free \n", "4191 0 day 7000 Free \n", "\n", "[4192 rows x 10 columns]" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 코드를 입력해 주세요\n", "# 2. user와 df_event를 event_type을 기준으로 병합하세요.\n", "user = pd.merge(user, df_event, on='event_type')\n", "user" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Int64Index: 4192 entries, 0 to 4191\n", "Data columns (total 10 columns):\n", " # Column Non-Null Count Dtype \n", "--- ------ -------------- ----- \n", " 0 userid 4192 non-null object\n", " 1 class 4192 non-null object\n", " 2 gender 4192 non-null object\n", " 3 start_date 4192 non-null object\n", " 4 end_date 1350 non-null object\n", " 5 event_type 4192 non-null object\n", " 6 is_deleted 4192 non-null int64 \n", " 7 class_name 4192 non-null object\n", " 8 price 4192 non-null int64 \n", " 9 event_name 4192 non-null object\n", "dtypes: int64(2), object(8)\n", "memory usage: 360.2+ KB\n" ] } ], "source": [ "# 코드를 입력해 주세요\n", "# user 데이터 프레임의 정보를 조회하세요\n", "user.info()" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "userid 0\n", "class 0\n", "gender 0\n", "start_date 0\n", "end_date 2842\n", "event_type 0\n", "is_deleted 0\n", "class_name 0\n", "price 0\n", "event_name 0\n", "dtype: int64" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 코드를 입력해 주세요\n", "# 결측치를 조회하세요.\n", "user.isna().sum()" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
useridclassgenderstart_dateend_dateevent_typeis_deletedclass_namepriceevent_name
0OA832399C01F2015-05-01 0:00NaNCA10all10000None
1PL270116C01M2015-05-01 0:00NaNCA10all10000None
2OA974876C01M2015-05-01 0:00NaNCA10all10000None
3HD024127C01F2015-05-01 0:00NaNCA1-1all10000None
4IK271057C01M2015-05-01 0:00NaNCA10all10000None
.................................
4184AS310166C02F2018-12-12 0:00NaNCA30day7000Free
4186HD071461C02F2018-12-13 0:00NaNCA30day7000Free
4188HI599354C02M2018-12-13 0:00NaNCA30day7000Free
4189GD796859C02F2018-12-14 0:00NaNCA30day7000Free
4191OA426023C02F2018-12-14 0:00NaNCA30day7000Free
\n", "

2842 rows × 10 columns

\n", "
" ], "text/plain": [ " userid class gender start_date end_date event_type is_deleted \\\n", "0 OA832399 C01 F 2015-05-01 0:00 NaN CA1 0 \n", "1 PL270116 C01 M 2015-05-01 0:00 NaN CA1 0 \n", "2 OA974876 C01 M 2015-05-01 0:00 NaN CA1 0 \n", "3 HD024127 C01 F 2015-05-01 0:00 NaN CA1 -1 \n", "4 IK271057 C01 M 2015-05-01 0:00 NaN CA1 0 \n", "... ... ... ... ... ... ... ... \n", "4184 AS310166 C02 F 2018-12-12 0:00 NaN CA3 0 \n", "4186 HD071461 C02 F 2018-12-13 0:00 NaN CA3 0 \n", "4188 HI599354 C02 M 2018-12-13 0:00 NaN CA3 0 \n", "4189 GD796859 C02 F 2018-12-14 0:00 NaN CA3 0 \n", "4191 OA426023 C02 F 2018-12-14 0:00 NaN CA3 0 \n", "\n", " class_name price event_name \n", "0 all 10000 None \n", "1 all 10000 None \n", "2 all 10000 None \n", "3 all 10000 None \n", "4 all 10000 None \n", "... ... ... ... \n", "4184 day 7000 Free \n", "4186 day 7000 Free \n", "4188 day 7000 Free \n", "4189 day 7000 Free \n", "4191 day 7000 Free \n", "\n", "[2842 rows x 10 columns]" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 코드를 입력해 주세요\n", "# end_date컬럼이 결측치인 데이터만 선택하여 출력하세요\n", "user.loc[user['end_date'].isna(), :]" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ " 0 2131\n", "-1 711\n", "Name: is_deleted, dtype: int64" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 코드를 입력해 주세요\n", "# end_date컬럼이 결측치인 데이터의 is_deleted 컬럼의 값별 개수를 카운트 하세요.\n", "user.loc[user['end_date'].isna(), 'is_deleted'].value_counts()" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ " 1 1013\n", "-1 337\n", "Name: is_deleted, dtype: int64" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 코드를 입력해 주세요\n", "# end_date컬럼이 결측치가 아닌 데이터의 is_deleted 컬럼의 값별 개수를 카운트 하세요.\n", "user.loc[~user['end_date'].isna(), 'is_deleted'].value_counts()" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "class_name\n", "all 2045\n", "day 1019\n", "night 1128\n", "Name: userid, dtype: int64" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 코드를 입력해 주세요\n", "# class_name을 기준으로 그룹을 생성하고 userid의 개수를 조회하세요.\n", "user.groupby('class_name')['userid'].count()" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "event_name\n", "Free 492\n", "None 3050\n", "Sale 650\n", "Name: userid, dtype: int64" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 코드를 입력해 주세요\n", "# event_name을 기준으로 그룹을 생성하고 userid의 개수를 조회하세요.\n", "user.groupby('event_name')['userid'].count()" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "gender\n", "F 1983\n", "M 2209\n", "Name: userid, dtype: int64" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 코드를 입력해 주세요\n", "# gender를 기준으로 그룹을 생성하고 userid의 개수를 조회하세요.\n", "user.groupby('gender')['userid'].count()" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "is_deleted\n", "-1 1048\n", " 0 2131\n", " 1 1013\n", "Name: userid, dtype: int64" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 코드를 입력해 주세요\n", "# is_deleted를 기준으로 그룹을 생성하고 userid의 개수를 조회하세요.\n", "user.groupby('is_deleted')['userid'].count()" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [], "source": [ "# 코드를 입력해 주세요\n", "# start_date 컬럼과 end_date 컬럼을 datetime 형태로 변환하세요\n", "user['start_date'] = pd.to_datetime(user['start_date'])\n", "user['end_date'] = pd.to_datetime(user['end_date'])" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Int64Index: 4192 entries, 0 to 4191\n", "Data columns (total 10 columns):\n", " # Column Non-Null Count Dtype \n", "--- ------ -------------- ----- \n", " 0 userid 4192 non-null object \n", " 1 class 4192 non-null object \n", " 2 gender 4192 non-null object \n", " 3 start_date 4192 non-null datetime64[ns]\n", " 4 end_date 1350 non-null datetime64[ns]\n", " 5 event_type 4192 non-null object \n", " 6 is_deleted 4192 non-null int64 \n", " 7 class_name 4192 non-null object \n", " 8 price 4192 non-null int64 \n", " 9 event_name 4192 non-null object \n", "dtypes: datetime64[ns](2), int64(2), object(6)\n", "memory usage: 360.2+ KB\n" ] } ], "source": [ "# 코드를 입력해 주세요\n", "# datetime으로 변경을 확인하기 위해 정보를 조회하세요\n", "user.info()" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
useridclassgenderstart_dateend_dateevent_typeis_deletedclass_namepriceevent_namestart_yearstart_monthstart_day
0OA832399C01F2015-05-01NaTCA10all10000None201551
1PL270116C01M2015-05-01NaTCA10all10000None201551
2OA974876C01M2015-05-01NaTCA10all10000None201551
3HD024127C01F2015-05-01NaTCA1-1all10000None201551
4IK271057C01M2015-05-01NaTCA10all10000None201551
..........................................
4187IK562610C02F2018-12-132019-02-28CA31day7000Free20181213
4188HI599354C02M2018-12-13NaTCA30day7000Free20181213
4189GD796859C02F2018-12-14NaTCA30day7000Free20181214
4190GD082270C02F2018-12-142019-02-28CA31day7000Free20181214
4191OA426023C02F2018-12-14NaTCA30day7000Free20181214
\n", "

4192 rows × 13 columns

\n", "
" ], "text/plain": [ " userid class gender start_date end_date event_type is_deleted \\\n", "0 OA832399 C01 F 2015-05-01 NaT CA1 0 \n", "1 PL270116 C01 M 2015-05-01 NaT CA1 0 \n", "2 OA974876 C01 M 2015-05-01 NaT CA1 0 \n", "3 HD024127 C01 F 2015-05-01 NaT CA1 -1 \n", "4 IK271057 C01 M 2015-05-01 NaT CA1 0 \n", "... ... ... ... ... ... ... ... \n", "4187 IK562610 C02 F 2018-12-13 2019-02-28 CA3 1 \n", "4188 HI599354 C02 M 2018-12-13 NaT CA3 0 \n", "4189 GD796859 C02 F 2018-12-14 NaT CA3 0 \n", "4190 GD082270 C02 F 2018-12-14 2019-02-28 CA3 1 \n", "4191 OA426023 C02 F 2018-12-14 NaT CA3 0 \n", "\n", " class_name price event_name start_year start_month start_day \n", "0 all 10000 None 2015 5 1 \n", "1 all 10000 None 2015 5 1 \n", "2 all 10000 None 2015 5 1 \n", "3 all 10000 None 2015 5 1 \n", "4 all 10000 None 2015 5 1 \n", "... ... ... ... ... ... ... \n", "4187 day 7000 Free 2018 12 13 \n", "4188 day 7000 Free 2018 12 13 \n", "4189 day 7000 Free 2018 12 14 \n", "4190 day 7000 Free 2018 12 14 \n", "4191 day 7000 Free 2018 12 14 \n", "\n", "[4192 rows x 13 columns]" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 코드를 입력해 주세요\n", "# start_date 컬럼을 기반으로 start_year, start_month, start_day 컬럼을 추가하세요\n", "# dt 사용\n", "user['start_year'] = user['start_date'].dt.year\n", "user['start_month'] = user['start_date'].dt.month\n", "user['start_day'] = user['start_date'].dt.day\n", "user" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
useridclassgenderstart_dateend_dateevent_typeis_deletedclass_namepriceevent_namestart_yearstart_monthstart_dayend_yearend_monthend_day
0OA832399C01F2015-05-01NaTCA10all10000None201551NaNNaNNaN
1PL270116C01M2015-05-01NaTCA10all10000None201551NaNNaNNaN
2OA974876C01M2015-05-01NaTCA10all10000None201551NaNNaNNaN
3HD024127C01F2015-05-01NaTCA1-1all10000None201551NaNNaNNaN
4IK271057C01M2015-05-01NaTCA10all10000None201551NaNNaNNaN
...................................................
4187IK562610C02F2018-12-132019-02-28CA31day7000Free201812132019.02.028.0
4188HI599354C02M2018-12-13NaTCA30day7000Free20181213NaNNaNNaN
4189GD796859C02F2018-12-14NaTCA30day7000Free20181214NaNNaNNaN
4190GD082270C02F2018-12-142019-02-28CA31day7000Free201812142019.02.028.0
4191OA426023C02F2018-12-14NaTCA30day7000Free20181214NaNNaNNaN
\n", "

4192 rows × 16 columns

\n", "
" ], "text/plain": [ " userid class gender start_date end_date event_type is_deleted \\\n", "0 OA832399 C01 F 2015-05-01 NaT CA1 0 \n", "1 PL270116 C01 M 2015-05-01 NaT CA1 0 \n", "2 OA974876 C01 M 2015-05-01 NaT CA1 0 \n", "3 HD024127 C01 F 2015-05-01 NaT CA1 -1 \n", "4 IK271057 C01 M 2015-05-01 NaT CA1 0 \n", "... ... ... ... ... ... ... ... \n", "4187 IK562610 C02 F 2018-12-13 2019-02-28 CA3 1 \n", "4188 HI599354 C02 M 2018-12-13 NaT CA3 0 \n", "4189 GD796859 C02 F 2018-12-14 NaT CA3 0 \n", "4190 GD082270 C02 F 2018-12-14 2019-02-28 CA3 1 \n", "4191 OA426023 C02 F 2018-12-14 NaT CA3 0 \n", "\n", " class_name price event_name start_year start_month start_day \\\n", "0 all 10000 None 2015 5 1 \n", "1 all 10000 None 2015 5 1 \n", "2 all 10000 None 2015 5 1 \n", "3 all 10000 None 2015 5 1 \n", "4 all 10000 None 2015 5 1 \n", "... ... ... ... ... ... ... \n", "4187 day 7000 Free 2018 12 13 \n", "4188 day 7000 Free 2018 12 13 \n", "4189 day 7000 Free 2018 12 14 \n", "4190 day 7000 Free 2018 12 14 \n", "4191 day 7000 Free 2018 12 14 \n", "\n", " end_year end_month end_day \n", "0 NaN NaN NaN \n", "1 NaN NaN NaN \n", "2 NaN NaN NaN \n", "3 NaN NaN NaN \n", "4 NaN NaN NaN \n", "... ... ... ... \n", "4187 2019.0 2.0 28.0 \n", "4188 NaN NaN NaN \n", "4189 NaN NaN NaN \n", "4190 2019.0 2.0 28.0 \n", "4191 NaN NaN NaN \n", "\n", "[4192 rows x 16 columns]" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 코드를 입력해 주세요\n", "# end_date 컬럼을 기반으로 end_year, end_month, end_day 컬럼을 추가하세요\n", "# dt 사용\n", "user['end_year'] = user['end_date'].dt.year\n", "user['end_month'] = user['end_date'].dt.month\n", "user['end_day'] = user['end_date'].dt.day\n", "user" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "start_year start_month\n", "2015 5 62\n", " 6 69\n", " 7 53\n", " 8 53\n", " 9 71\n", " 10 54\n", " 11 63\n", " 12 67\n", "2016 1 56\n", " 2 48\n", " 3 55\n", " 4 57\n", " 5 56\n", " 6 76\n", " 7 69\n", " 8 77\n", " 9 75\n", " 10 71\n", " 11 65\n", " 12 76\n", "2017 1 75\n", " 2 74\n", " 3 72\n", " 4 99\n", " 5 105\n", " 6 95\n", " 7 100\n", " 8 122\n", " 9 115\n", " 10 98\n", " 11 108\n", " 12 160\n", "2018 1 122\n", " 2 104\n", " 3 94\n", " 4 175\n", " 5 193\n", " 6 166\n", " 7 135\n", " 8 102\n", " 9 88\n", " 10 66\n", " 11 65\n", " 12 157\n", "2019 1 90\n", " 2 74\n", " 3 65\n", "Name: userid, dtype: int64" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 코드를 입력해 주세요\n", "# start_year와 start_month 컬럼을 이용하여 월별 신규 회원의 수를 조회하세요\n", "user.groupby(['start_year', 'start_month'])['userid'].count()" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAELCAYAAAAiIMZEAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAABCy0lEQVR4nO3deXxcZb348c83eyZJs6dr0qZN27RAN0optIVCy6I/WdwQLnhBUX5XQcV7vQper+j1x5WruF4vXlFQFAVBkUVFWQttoZTu+5I2XULTZmmTTNJkksk8vz/OmXSaTjIzmTOTyfT7fr3yyuTMmXOeOW2+eeY53+f7iDEGpZRSySVluBuglFLKeRrclVIqCWlwV0qpJKTBXSmlkpAGd6WUSkIa3JVSKgmFDO4iUi4ir4vIThHZLiJfsLcXicjLIrLX/l4Y8Jp7RaRGRHaLyFWxfANKKaXOJKHy3EVkLDDWGLNBRPKA9cD1wG3AcWPMAyJyD1BojPmKiMwEngAWAOOAV4Bpxpje2L0NpZRSgUL23I0x9caYDfZjN7ATGA9cBzxm7/YYVsDH3v6kMcZjjKkFarACvVJKqThJi2RnEZkEzAXeAUYbY+rB+gMgImX2buOBNQEvq7O3DaikpMRMmjQpkqYopdRZb/369U3GmNJgz4Ud3EUkF/gjcLcxpk1EBtw1yLYzxn5E5A7gDoCKigrWrVsXblOUUkoBInJwoOfCypYRkXSswP5bY8wz9uZj9ni8f1y+wd5eB5QHvHwCcKT/MY0xDxtj5htj5peWBv3Do5RSaojCyZYR4BFgpzHm+wFPPQ/caj++FXguYPuNIpIpIpXAVGCtc01WSikVSjjDMouAjwNbRWSTve2rwAPAUyJyO3AI+CiAMWa7iDwF7AC8wJ2aKaOUUvEVMrgbY1YRfBwdYNkAr7kfuD+KdimllIqCzlBVSqkkpMFdKaWSkAZ3pZRKQhrclVJxt2Z/My0nu4e7GUlNg7tSKq4a3R5u+vkaHn5z/3A3JalpcFdKxdXqmiaMgR31bcPdlKSmwV0pFVcr9zYBsKvePcwtSW4a3JVScWOMYVVNIykCR9u6ONGh4+6xosFdKRU3NQ3tHGvzcNU5YwDYdVR777GiwV0pFTf+IZlPXzIZgF1Hddw9VjS4K6XiZlVNE5OKXcwtL6A4J0PH3WNIg7tSKi66vT7W7G9m8dQSRITqsXnac48hDe5KqbjYeOgEJ7t7WVxlrd9QPWYUu4+56fUNvo6zGhoN7kqpuFhV00SKwEVTigGoHpNHV4+Pg80dw9yy5KTBXSkVFyv3NjG7vID87HQAZowdBWjGTKxocFdKxVzryR621LWwpKqkb1tVWS4pArt0pmpMaHBXSsXc2/ub8BlYPPXUeslZ6alMLs1lp/bcY0KDu1Iq5lbubSInI5W5FQWnba8eoxkzsRLOAtmPikiDiGwL2DZHRNaIyCYRWSciCwKeu1dEakRkt4hcFauGK6VGjlU1TSycXEx66ukhZ8bYURw+3om7q2eYWpa8wum5/wq4ut+27wDfNMbMAb5u/4yIzARuBM6xX/OQiKQ61Vil1Mhz+PhJDjafZPHUkjOeqx6TB8CeYzo047SQwd0Y8yZwvP9mYJT9OB84Yj++DnjSGOMxxtQCNcAClFJnLX/JgSXBgrudMbNTZ6o6Lm2Ir7sb+LuIPIj1B+Jie/t4YE3AfnX2NqXUWWpVTSNjRmUxpTT3jOfG5WeRl5Wm4+4xMNQbqp8BvmiMKQe+CDxib5cg+wadfiYid9jj9esaGxuH2AylVCLr9RlW1zSzxC450J+IMGPMKK0xEwNDDe63As/Yj5/m1NBLHVAesN8ETg3ZnMYY87AxZr4xZn5paWmwXZRSI9y291pp7ewJOt7uZ9WYcWOMliFw0lCD+xHgUvvx5cBe+/HzwI0ikikilcBUYG10TVRKjVSraqzx9kVVgwT3MaNo93ipO9EZr2adFUKOuYvIE8BSoERE6oD7gE8DPxKRNKALuAPAGLNdRJ4CdgBe4E5jTG+M2q6USnAr9zYyc+woSnIzB9yneqyVMbPrqJvyIle8mpb0QgZ3Y8xNAzx1/gD73w/cH02jlFIjX4fHy/qDJ/jkospB95s+2g7u9W1cMXN0PJp2VtAZqkqpmFhbe5yeXjPoeDtATmYaE4tdWkDMYRrclVIxsbqmiYy0FC6YVBRy3+oxeezUdEhHaXBXSsXEkdZOKopcZKWHnqRePWYUB5o66OzWW3RO0eCulIoJd5eXvKzw5knOGJuHz8DeBh2acYoGd6VUTLR19jAqKz2sfavH2At36GQmx2hwV0rFRCQ994oiF9npqezQhTsco8FdKRUTbV1e8sLsuaekCNO1trujNLgrpWKirauHUdnh1yacoWUIHKXBXSnlOI+3l26vL+wxd7DG3VtO9nCszRPDlp09NLgrpRzn7vIChD3mDqcW7tB8d2docFdKOa6t01o2L9KeO2jGjFM0uCulHDeUnnu+K51x+Vl6U9UhGtyVUo47FdzD77mDteye9tydocFdKeW4ti57WCaCbBmwxt33Nbbj8WoZgmhpcFdKOc5tB/dIe+7Tx+Th9Rlqmzpi0ayzigZ3pZTjhjLmDvQtor2/UYN7tDS4K6Uc19bZgwjkZkQW3CeX5gCwr6E9Fs06q2hwV0o5rq3LS25mGikpEtHrXBlpjC/IZl+jBvdoaXBXSjmurSv8ipD9TS7NYZ8Oy0QtZHAXkUdFpEFEtvXb/jkR2S0i20XkOwHb7xWRGvu5q2LRaKVUYoukImR/U0pz2dfYrjVmohROz/1XwNWBG0TkMuA6YJYx5hzgQXv7TOBG4Bz7NQ+JSOhlWJRSScUdRc99SlkuJ7t7OdrW5XCrzi4hg7sx5k3geL/NnwEeMMZ47H0a7O3XAU8aYzzGmFqgBljgYHuVUlF6Y08jJ7u9MT1HW2c0PXf/TVUdmonGUMfcpwFLROQdEXlDRC6wt48HDgfsV2dvO4OI3CEi60RkXWNj4xCboZSKxLG2Lm59dC1Pr6uL6Xncnh5GZQ+t515lp0PqTdXoDDW4pwGFwELgX4GnRESAYLfGgw6cGWMeNsbMN8bMLy0tHWIzlFKRONpqDXUcaI5trziaMffSvEzystI0uEdpqMG9DnjGWNYCPqDE3l4esN8E4Eh0TVRKOaXRbdVKP3y8M2bnMMZEFdxFhCmludRorntUhhrcnwUuBxCRaUAG0AQ8D9woIpkiUglMBdY60E6llAMa263gXnfiZMzOcbK7l16fGfINVTiVMZNoGtxdMb12TgonFfIJ4G1guojUicjtwKPAZDs98kngVrsXvx14CtgB/A240xijFYCUShD+nnvdic6YpRoOtSJkoCllORxr8/TVqEkU33xhB597YuNwNyMsIT83GWNuGuCpWwbY/37g/mgapZSKDX9wb/d4aTnZQ2FOhuPnaOsrGja0YRk4vcbM7PICJ5rliEa3p+++RaLTGapKnUX8wR3gcIyGF9x95X6jG5aBxMuY6bD/KI4EGtyVOos0tnsodFlBN1Y3VduGWBEy0MRiF2kpknDBvd3jpbOnl66exB9t1uCu1Fmk0e1hbkUhELubqqfWTx16cE9PTaGi2JVwE5k6PNYfrpHQe9fgrtRZpKndw+SSHPKz02M4LGMFwGiyZSAxM2b8762ls3uYWxKaBnelzhIdHi8nu3spycukvCg7ZsMyTmTLgBXcDzR34O31OdGsqPX0+vB4rbac6NCeu1IqQfhvppbmZjKhwBW7YZmuHtJShKz06MLLlNIcenoNh0/EbsJVJPxDMgCt2nNXSiUK/wSmUrvnHqtcd3eXVVfGqkgydFVldsZMgsxUbQ8I7id0zF0plSj6eu55mZQXufB4faelRjolmtIDgSYnWDpkYHDXG6pKqYQRGNwnFGYDxGTIo62zx5Hgnp+dTmleZsIE947TgrsOyyilEkSj20NqilDoyqC80AXEJh3S3eWNOlPGb0oCLbnnv1EM2nNXSiWQRreH4pwMUlOECXZwP3w8NsHdiZ470FcdMhGW3OvwWBOX0lKEE9pzV0oliqZ2D6V5mQBkZ6RSkptJXSyGZbp6ok6D9JtSmktrZw/NHcMfTNs9Vm99bEEWLZ3ac1dKJYjGgOAOMKEwOyYTmRwdlkmgjJl2u+c+ocClY+5KqcTR6PZQknsquJcXuRyfyNTrM7R7nByWsddTTYBx93Z7zH18YbaOuSulEoPPZ04blgEoL8zmSEsnvT7nxrPbHSgaFmhcfjZZ6SkJkTHT7ukhKz2FktxMWk72JMR9gMFocFfqLNDa2UNPr6E0N3BYxoXXZzja5lx98jYHyv0GSkkRJpckRo2Zdk8vuZnpFLjS6e71cbI7sStDanBX6iwQODvVr7zIznV3MGPmVNEwZ3ruYM1UTYzg7iU3M7WvZHKi31TV4K7UWSBwApNfeQzSIU+twuRMzx2sjJm6E53DXkO9w+MlNyuN/Gxr9aoTCZDBM5hw1lB9VEQa7PVS+z/3JRExIlISsO1eEakRkd0icpXTDVZKRS5YcB9bkIUIjqZDOlXuN9CUshyMgdqm4b2p2t7lJScjra/n3poEPfdfAVf33ygi5cAVwKGAbTOBG4Fz7Nc8JCKpjrRUKTVkwYJ7ZloqY0ZlOZoO6XZg/dT+EmXJPX8WkH/d2USfyBQyuBtj3gSOB3nqB8CXgcBbxtcBTxpjPMaYWqAGWOBEQ5VSQ9fU7iEzLYW8zNODbnmhizoH0yH9qzA5GdwrS3IQYdhXZWr3eMnJTKPAvlmc6OmQQxpzF5FrgfeMMZv7PTUeOBzwc529TSk1jBrdVhpk/zK8E4qyHa0v49RCHYGy0lOZUJg97D33Do+X3Mw08v03VBO85x7xn1cRcQH/BlwZ7Okg24Img4rIHcAdABUVFZE2QykVgcb20ycw+U0odFHf9h7dXh8ZadHnV7g9XrLSUxw5VqBEWHLPbQf3zLRUXBmpSdlznwJUAptF5AAwAdggImOweurlAftOAI4EO4gx5mFjzHxjzPzS0tIhNEMpFS5/z72/8sJsjIEjLc4MzVjlfp3rtftNKc1lf2MHPgcnXEWi2+uj2+sj1x7WKnRlJPyCHREHd2PMVmNMmTFmkjFmElZAn2eMOQo8D9woIpkiUglMBdY62mKlVMQGDO5F/tK/zgR3q66Mc+PtflNKc+ns6eVI6/Asueev5Z5jB/f87PSEX2ovnFTIJ4C3gekiUicitw+0rzFmO/AUsAP4G3CnMSaxp3EpleR6en0cP9l92uxUv1OLdjgz7u5kRchAw11jxr8KU679h6swJz3he+4h/8QaY24K8fykfj/fD9wfXbOUUk453tGNMQTtuY/NzyYtRRybyNQWq557QHXIS6fFfxjXH9z92UYF2RnsbG2LezsioTNUlUpywXLc/VJThHEF2Y4tt+dfHNtpxTkZFLjSh+2mav9hmQJXOq0J3nPX4K5UkhssuINVY8apdMhYjbmLCJNLcoYtuLv7DcsUuNJp6UzsypAa3JVKcn1Fw4KMuYO1+IRTdd1jlS0DUFmSy4Em5xcXCYe/5x6YLdPrM31BPxFpcFcqyYXTc29q99AZZQnbbq8Pj9cXk547wOTSHI62dXGyO/4B1V+nPrdvWMYqQdDSkbhDMxrclUpyjW4PeZlpZKUHL/PkT4d8ryW6XrE7BhUhA00qtjJmhqP33t5/zN1fgiCB0yE1uCuV5PqvndpfXzpklEMzbQ6vwtRfZYkV3IejOmR7/2GZHCu4J3I6pAZ3pZJco9tDySDBva+ue5Q3Vf09dyfL/QaaVGK1s7Yp/jdVOzxestNTSU2xKqz4a7oncn0ZDe5KJbmmAWan+pXmZZKZlhL1LFV3jHvurow0xozKonaYhmVyA95X32pM2nNXSg2XRrdnwEwZsNIMxxdmRz2R6VS539j03MEamhmOnru1fuqp4J4/Asr+anBXKol1dvfi9ngH7bmDNTQT/bCMvQpTdmx67gCVpTnDM+be1XNacE9LTSEvKy2hF+zQ4K5UEmsKsjB2MNZEpmhvqMah516cw4mTPXEf6+7w9JKTeXq2UYErPaGX2tPgrlQSaww3uBe6aDnZ03dTdCja+uWCx8JwZcxYtdxP/6Nllf3VnrtSahj0TWAaZMwdrEU7ILp0SHdXD3mZaX0ZJbFQWTo8wd1ahen0nnt+dmJXhtTgrlQSCzU71a+8KPrSv22d3phlyviVF7pIETgQ5+DeP1sGrJ57q/bclVLDodHtQQSKcjIG3c+f6x7NuLs7RrXcA2WkpVBe5GL/MAT3nH7DTQUu7bkrpYZJY7uHIlcG6amD/6oXuNLJyUiNKh3S3eWNaaaM36Ti+GbM+JfYyzsjuGfQ1tVD7zAt/ReKBnelkthAy+v1JyKUF7miKv0bq1WY+qssyeFAU0fcyu32r+XuV+hKx5hT+f2JRoO7Ukks3OAO1k3V6IZlYj/mDlZ1yI7u3r77CbHWv66MX4F/lupIDe4i8qiINIjItoBt3xWRXSKyRUT+JCIFAc/dKyI1IrJbRK6KUbuVSipb6lp4ZFWt473RULNTA5UXWbNUh9oGd1dPzOrKBPJXh4zXuPvAwd26j5Go6ZDh9Nx/BVzdb9vLwLnGmFnAHuBeABGZCdwInGO/5iERCV5nVCnV52dv7udbf97Bs5vec+yYxhiaQlSEDDS1LI+O7t4hBU1jDG1x6rn7c93jlTHTf3FsP3/Z30Rdbi9kcDfGvAkc77ftJWOMv2L+GmCC/fg64EljjMcYUwvUAAscbK9SSWnToRYAvv7sdt5rcWg9U48Xj9cXdnBfVFUMwKq9TRGfq7Onl16ficuY+7iCbDLSUuJ2U7V/LXe/wiTouYfySeBF+/F44HDAc3X2NqXUAI61dfFeSye3XTwJnzF86anN+BzIwPCPSZeEOSwzsTiH8qJsVg4huMejroxfaoowMY7pkP5VmM7Mlkns4mFRBXcR+TfAC/zWvynIbkH/l4rIHSKyTkTWNTY2RtMMpUa0jYdOAHDdnHF8/ZqZvL2/mUdX10Z93HAnMAVaXFXKmv3N9PT6IjpXPCpCBvJnzMTDQNkyo7LSEUncmu5DDu4icivwAeBmc+oOTB1QHrDbBOBIsNcbYx42xsw3xswvLS0dajOUGvE2HGohIzWFmeNGccP8cpbPGM13/r6bPcfcUR13KMF9ydQS2j1eNh9uiehcsV6Fqb/K0hwONp+MS475QGPuKSmS0CUIhhTcReRq4CvAtcaYwMTY54EbRSRTRCqBqcDa6JupVPLaeOgE544fRWZaKiLCAx8+j7zMNO5+chPd3sh60IHCrSsT6OIpxYgQ8dBMrFdh6q+yOIfuXh9HHLo/MZi+MfeMM/9wFboyRnQq5BPA28B0EakTkduBnwB5wMsisklE/hfAGLMdeArYAfwNuNMYE92S6kolsW6vjy11rcytKOzbVpKbybc/dB476tv40at7hnzsxnYP6anSt7BEOApcGcwan8+qmsiCu7/nPipePfc4Vods7/LiykgNWhAtPzt95A7LGGNuMsaMNcakG2MmGGMeMcZUGWPKjTFz7K9/Ctj/fmPMFGPMdGPMi4MdW6mz3a6jbXi8PuYFBHeAK88Zww3zJ/DTFftYf/D4AK8eXKPbQ0luJikRVmlcPLWETYdb+uqzh8Mdh1rugeIZ3Du6z6wr41foSk/OG6pKqehsOGjdTJ1bUXDGc1+/5hzGF2bzxd9v7rupF4lIZqcGWlxVSq/PsGZfc9iviWe2DFj3EXIyUuMS3N1d3jMyZfwSuaa7BnelhtHGwy2MGZXFuILsM57LzUzj+zfM4fCJk/zvG/siPnZTe/izUwPNm1hAdnpqREMzbZ09pKYI2enxmbMoInFbcq8jSEVIv3xX+sidxKSUip0Nh04E7bX7XTCpiIsmF/PS9mMRH3uoPffMtFQunFwU0WQmf10Zkdgt1NFfvKpDtnu8A64uVejKwO3xRpw6Gg8a3JUaJo1uD4ePd54x3t7f0uml7D7mjigzpNdnaO7oDnsCU39Lppayv6kj7Nmy8aorE2hySQ51J05GlVEUjnZP74A9d/9EpkRcS1WDu1LDxD95abCeO8DS6WUAvLEn/Ml+J0520+szQ+q5g5XvDrBqb3jnjFddmUCVpTn4DByKogZ9ONo9PQO+N3/xsETMmNHgrtQw2Xi4hfRU4dzx+YPuN7Usl3H5WazY3RD2sYcygan/OUePygw7391ahSm+wd1fHTLWQzMdnl5yMoPfS/AXD0vEjBkN7koNkw0HTzBz7CiyQtyEFBEunV7G6prmsIcgog3uIsKiqhLe2tccVp0bd5c37sMyp9Ih22N6nvYuL7mZwd/bqeJhGtyVUoC398zJS4NZOr2Udo+X9XbqZChDmZ3a35KpJRzv6GZHfVvIfds647MKU6ACVwZFORnUNsVuWMbj7aW710fuQD33vuJhOiyjlAJ2HXXT2dMbcrzdb1FVCempwoo94Q3NNLZH13P3nxPCK0UQr1WY+ptU7Ippz73DY02wHyhbJpErQ2pwV2oYbLQLc4XKlPHLzUxj/sQi3tgd3g3ORrcHV0bqgFke4SjLy6J6TB6ragY/p89naO/2MiqCMgdOqSzJjemY+0AVIf1yM9NIS5GEnMikwV2pYbDx4AlKcjOZUHjm5KWBLJ1eyq6jbupbQ6cnRrIC02AWV5Xw7oETdPUMXCLK7fFiTPzqygSqLHFxrM0zpBm84XCHqHYpIhS40hOyeJgGd6WGgX/yUiSTfi6rtlMiQ/Teu3p6eWtfM1WluVG1Eaw6M91eH2trB65vc6quzHAEd+s9HmiOTe+9o3vwnjskbvEwDe5Kxdnxjm4ONJ8Me0jGz58S+XqIlMin1h2m0e3hU0smR9NMAC6sLCYjNYWVg+S799WVifMNVYh9ATH/KkwDjbmDXfZXx9yVUuFOXuovnJTIbq+P/12xjwsmFbJwclG0TSU7I5XzJxYOelM13qswBZpU4gJit1i2v5b7YJ9KClwZmgqpVLJoPdnD67saOLUIWfg2HmohNUWYNWHwyUvBhEqJfGZDHUdau7jr8qmO1XlZPLWEXUfdfemV/YUal44lV0YaY0ZlxWw91YEWxw5U4EqnVYdllBr5ur0+bn/sXT7xq3cjXtQCrPH26jF5uIKs7BPKYCmR3l4fD63Yx6wJ+Vxilw9wgr8UweoB3qvbY6/CNAzZMmANzcRqWMZ/o3bwYZnEXGpPg7tSEfrGC9tZd/AEuZlp/PdrNRG9ttdn2Hy4JeLxdr/BUiJf2HKEQ8dPctdlVY5WZzxnXD6FrnRe3hG8MmVb5/D13AEmxXCxbP+nkmBL7PkVuDLo7OkdNKNoOGhwVyoCj685yO/eOcQ/XTqFf7lyGmtrj/PO/vAXtdhzzE1Hd/iTl4IJlhLZ6zP85LUaqsfksXzG6CEfO5jUFOGj88t5cVt90B7ycGbLgFUd8sTJHk50OD800uHxkpOROuhqVolaGVKDu1JhWlt7nG88v52l00v516umc9OCCkpyM/jJ6+H33jceagHCn7wUTF+VyIDe+9+2HWVfYwd3XV4V8bJ64fjUkkrSU1P46Yoz36u7y0tmWgqZafFZqKO/voyZGKRDtg+yUIdfQba/MuQIC+4i8qiINIjItoBtRSLysojstb8XBjx3r4jUiMhuEbkqVg1XKp6OtHTy2d+up7zIxY9unEtqipCVnsqnl0xm5d4mNtkzTkPZcOgERTkZTCx2Dbkt00bnMjY/ixV2cDfG8N+v7WVyaQ7vO3fskI87mLK8LG5aUMEzG96j7sTptVzauuJfVybQ1NFWrvvmMP8NItHu8ZIb4hNJod1zT7RZquH03H8FXN1v2z3Aq8aYqcCr9s+IyEzgRuAc+zUPicjw/DlXyiFdPb3c8Zt1dPX4+Pk/nk9+wI3DmxdOpMCVzk9e2xvWsTYeOsHc8sgmL/UnIiydXsrqmiZ6en28urOBXUfd3Lm0itQY9Nr97rhkMiLwszf2n7a9rcs7LLNT/SYW5zB9dB5/3lLv+LEHW4XJLz9B68uEDO7GmDeB/tPTrgMesx8/BlwfsP1JY4zHGFML1AALnGmqUvFnjOGeP25h+5E2fvixOVSV5Z32fG5mGp9cVMkrOxvYfqR10GM1uj3sa+yIarzd79JpZbjtlMj/fm0v5UXZXDdnXNTHHcy4gmw+cv4Efr/uMMfauvq2u7u85A1TpozftXPGsf7giTM+VUSrI4zgXpigC3YMdcx9tDGmHsD+XmZvHw8cDtivzt52BhG5Q0TWici6xsbwV5hRKp5+sbKWZzcd4Z+XT2P5zOA3Km+9eBJ5mWk89PrAi1i3dfXwqcfeJSM1hWUO3PBcVFVMWorwwIu72FzXymeXVpGWGvtbaJ+5tIpen+HhN0/13ts6e4a15w5wzSzrD5vTvXd3Vxhj7n3DMiOs5x6hYJ8Jg87yMMY8bIyZb4yZX1pa6nAzlIpeh8fLd/6+iytnjuauy6sG3C8/O51bL57EX7fVU9PgPuP5do+XT/zyXbYfaeN/bp7HjLGjom5bXlY68ycVsulwC2Pzs/jQvKB9KMdVFLu4bs44fvvOQZrtssLDsQpTsHbNKS/g+U1HHD1uR7eXvBDBPTs9lYy0FFo6k6PnfkxExgLY3/0zKuqA8oD9JgDOXm2l4mT3MTc9vYaPzi8POUb+ycWVZKWl8j/9eu+d3b3c/qt32XS4hR/fNJcrBuj9D8VldtbM/71kclwzVT67tAqP18cjq2qB4VmFKZhrZo9jR30bNQ3O1XdvD6PnLiIUutJp6UiOnvvzwK3241uB5wK23ygimSJSCUwF1kbXRKWGx656qxdePSYvxJ5QlJPBLQsreG7Texy0U/L8N2LXHjjO92+YzfvPczaT5WMXlPPPV0zjxgUVjh43lKqyXN5/3lh+/fZBWk/22Nkyw9tzB/jArLGIwAubnetPdnh6Q2bLgJUOOeJ67iLyBPA2MF1E6kTkduAB4AoR2QtcYf+MMWY78BSwA/gbcKcxJrGmbSkVpl1H28jLTAu75vqnL5lMWmoKP12xj26vj888vp6Ve5v4rw/P4ro5zg+bFLgy+PyyqSHXYI2Fuy6rot3j5ecr99PV4xvWVEi/0aOyWFhZzAubjwyp5k9/p5bYCyO4J2AJgpCtNsbcNMBTywbY/37g/mgapVQi2FXvpnpsXthpi2V5Wdx0QTm/W3uI91o6Wbm3ifs/eC43zC8P/eIRZsbYUVwxczS/WGXdWB3uG6p+184Zx73PbGX7kTbOHR95YbZAoZbYC1TgSudADNdyHQqdoapUEMYYdh5to3pMZDc/77h0CmCtO3rfNTO5+cKJsWheQrjrsiq6eqzSw4nQcwe4+pwxpKWII0Mz/lru4SxVWOjKGJGTmJQ66xxp7cLd5aV6bOjx9kDjC7K5//rzePCjs/nEosoYtS4xzC4v4JJpVqZbIoy5AxTmZHDJtFJe2HwEny+6oZn2MCpC+uXbS+05MRzkFA3uSgWx80gbQMQ9d4AbLijnI+dPcLpJCemLy6eSl5XGZAeW9HPKtbPHcaS1i/WHgte8D1ckwb3QlUG310dnAlWG1OCuVBC7jlrBfXoYmTJns7kVhWy570qqyhInuF8xczRZ6SlR57z31XIPK1sm8UoQaHBXKoidR91UFLnC6rWd7ZysHe+EnMw0llWP5q9b6/H2Bl+OMBzuvp576GykArsEQSKNu2twVyqIXfVtYeW3q8R0zexxNHd089a+8Gvt93dqFabQN4sLErB4mAZ3pfrp6umltqmDagfKBKjhsXR6KXmZaTwfRdbMqWyZ0D33U8XDNLgrlbD2HmvHZ2CG9txHrKz0VK46dwx/33YUj3doNzn7FscOY61bf033pvbgi4gPBw3uSvWz076Zqj33ke2a2eNwe7x9i5pEqj2MJfb8SvMyGZefxVv7Il8wPVY0uCvVz656N9npqVQUDX21JDX8Fk0ppjgnY8hDMx1hrMLkJyIsmzGaN/c0JcxC2Rrclepn19E2po3Ji+mqRir20lJTuPrcMby2s4GeIWTNuMNYPzXQ8pmj6ezp5e0obuI6SYO7UgGMMeysb9Px9iSxcHIxnT297Kxvi/i1HZ7QtdxPP1cRORmpvLLzWMTnigUN7koFaHR7OHGyR9Mgk8S8iYUAbDzUEvFrw6nlHigzLZVLppXy6s6GhChDoMFdqQA7j9o13PVmalIYl59FWV4mG4ZQiiCcxbH7Wz5jNEfbuth+JPJPCk7T4K5UgF31/poy2nNPBiLCvIrCofXchxDcL6suI0Xg5R3DPzSjwV2pALuOuhmbn9U3nVyNfHMrCjh0/GTEOeiRZMv4FeVkcP7EwoQYd9fgrlSAnVp2IOkMddy9PcJsGb/lM0az/Ugb9a2dEb/WSRrclbJ1e33sa2zX8fYkc974fNJShI0RjLt7vL309JohFY5bNsNaBP2VnQ0Rv9ZJUQV3EfmiiGwXkW0i8oSIZIlIkYi8LCJ77e+FTjVWqVja39ROT6/RnnuSyUpPZea4URHdVPXXlRlKcJ9SmkNlSQ6vDPO4+5CDu4iMBz4PzDfGnAukAjcC9wCvGmOmAq/aPyuV8HbVW5kyM7TnnnTmlhewpa417BLAkayf2p+IsHxGGW/va+6rLDkcoh2WSQOyRSQNcAFHgOuAx+znHwOuj/IcSsXFzqNtZKSmUFmSM9xNUQ6bN7GQk9297D7mDmt/t8eq7jiUMXewhma6e32s3Du0ujZOGHJwN8a8BzwIHALqgVZjzEvAaGNMvb1PPVAW7PUicoeIrBORdY2Nw3cBlPLbVe+mqiyX9FS9FZVs5pZHdlPV33Mf6tqw8ycWkp+dzss7hm/cPZphmUKsXnolMA7IEZFbwn29MeZhY8x8Y8z80tLSoTZDKcfsOtoW8YLYamQoL8qmOCcj7HH39ih77mmpKVxeXcbruxvojXKh7qGKpouyHKg1xjQaY3qAZ4CLgWMiMhbA/j68t4yVCsPxjm6OtXmYMYQFsVXiExHmVhSyKcyee3sUY+5+y2aUcbyjO6IsHSdFE9wPAQtFxCXWIorLgJ3A88Ct9j63As9F10Q1Uhxo6uB4R+KsIRmJXX013LXnnqzmVhSwv6mDE2H8H40mW8bvkmmlpKcKLw/ThKZoxtzfAf4AbAC22sd6GHgAuEJE9gJX2D+rJHewuYOrfvgmC7/9Kl/8/SbWHzyREMWTwuXPlKnWnnvSmldhjbtvOtwSct++9VOHOOYOMCornYWTi3l1mPLdo7pzZIy5zxhTbYw51xjzcWOMxxjTbIxZZoyZan8/7lRjVXw0uLt4/49W8u6B8P7pjDHc9/x20lKEj54/gZd3HOPDP32L9/94Fb9755Dj6WAvbD7C5Q+u4DOPr+ehFTWsrmmirSu6tSt3HW2jJDeD0rxMh1qpEs2sCfmkCGGNu7s9XkTAlR56/dTBLKsuo6ahndqmjqiOMxRD/7OkktYbuxvZUd/G3U9u4sW7lzAqa/DV3/++/Rgrdjfytf8zg08tmcxX3z+DZze9x2/ePshX/7SVb/91Jx8+fwJfump6VB9zAXw+w/df3kOHx8uO+jZe3Ha077nJJTmcNyGfWRMKmD0hn3PG5ZOdEd4v566jbu21J7mczDSqx4wKK2Omw+MlJyMtrCX2BrNsxmi+8cIOXt15jE8tmRzVsSKlwV2dYW3tcbLTU6lv7eSbz+/gezfMHnDfk91e/uOF7VSPyeO2iycB1i/RzRdO5B8WVLDh0AkeX3OI36w5yNv7mvnFrfMpj2L5utd3N1Db1MGPb5rLtbPH0XKymy11rWypa2FLXSvv7D/Oc5usZdVSBKaNzmOWHfDnlBdwzrhRWLeITun1GXYfdfPxhROH3C41MsytKOC5TUfo9ZlBV9pq74q8ImQw5UUuqsfk8YoGd5UI1h44zpKpJUwfk8d/v1bDFTPLuPrcsUH3/fGrNRxp7eJHN80lrV9+uIhw/sQizp9YxIfnTeCzv13PtT9ZxU9vOZ+Fk4uH1LZHVtUyNj+L9507BoACVwaXTCvlkmmn0mkb2rrYXNfK1roWNte18vKOYzy1rg6AqWW53LJwIh+cN77vE8mB5g48Xp/WlDkLzKso5LfvHKKmoZ3pg5SZaO/2kpMZ3ZCM3xUzR/PQin0caj5JRXH81uXV2RrqNEdbuzjYfJIFlUV8ftlUzhufz73PbKXB3XXGvjUNbn6xcj8fOX8CF0wqGvS4i6eW8NxdiynMyeCWX7zD7945FHHbdhxp4619zdx68aRBJxqVjcriipmj+ecrp/PYJxew4d+vYOWXL+OBD51HdkYq9z2/nYX/+Spf/dNWdhxpC7iZqpkyyW5uRQEQety9vctLbojhyHDdfOFE0lOF77+825HjhUuDuzrNWvsm6oWVxaSnpvCDj83mZHcv9/xx62nZL8YY/v3Z7bgyUrnnfdVhHbuyJIdn71zEoqoSvvqnrdz33LaIFi5+dHUt2emp3HRBRUTvSUQoL3Jx44IKnr9rMc/ftYgPzBrLH9fX8f4fr+Tfnt1KaopQVZYb0XHVyFNZkkOBKz1k7nmHx0uuQz33MflZfHJRJc9uOsK291odOWY4NLiHqddnhm2mWTy9s7+Z3Mw0Ztj53lVledzzvmpe29XAk+8e7tvv+c1HeHt/M1++upqS3PAzTEZlpfPobRfw6SWVPPb2QW775VpaTobOO25wd/H8piN8dP4E8l3R9ahmTSjgOx+ZzdqvLuffPzCTopwMLppcTFaUmREq8YkIc8sLQt5UHcoqTIP5v5dOocCVznf+Hr/euwb3MH3uiQ380+Prh7sZMbe29jjzJxWeNn5+60WTWFRVzLf+vIODzR20dfXw//6yk1kT8rlpQWS9aIDUFOHf/s9MvvuRWbxbe4IbH14TMl3y8TWH6PH5+MSiyojPN5B8Vzq3L67ktX9ZyuOfutCx46rENq+ikL0N7bR2Dpw+O9SFOgaSn53OXZdV8eaeRlbXNDl23MFocA9DV08vr+xs4PVdDbijzKdOZM3tHvY2tLOg8vTx85QU4cGPziYtRfji7zfx4N9309Tu4f9df+6gGQehfHR+OQ//4/nsOebmS09vHnDSU1dPL79dc5Bl1WVasVFFba49mWnzIJOZ2j1e8hwM7gAfv2gi4wuyeeDFXfjiMAqQtMG9wd3l2PjWuweO0+314fUZVtc0O3LMRPTuAWsc8sLKM2+Ojs3P5lvXn8uGQy38+u2D3HxhBbMmFER9zqXTy7jnfdW8uO0oP3mtJug+z216j+aObj7pYK9dnb1ml+cjg0xmMsZYee4OB/fMtFT+5cppbH2vlb9srXf02MEkZXD3eHv5x0fWcuPDa+jq6Y36eKv2NpGeKuRmpvHGnuStg7a29jiZaSmcN74g6PPXzh7Hh+aOZ2x+Fv96ZXg3UcPx6SWTuX7OOL738p4zVq8xxvDIqlqqx+Rx0ZShpU8qFSgvK51pZXkDjrt7vD5rib0oSg8M5Lo546kek8eDL+2m2xt+MsFQJGVw/8HLe9l11E27x8ua/dH3tFfubWJeRSGLq0pYsbtxRNVMicTaA83MqygkIy34fwsR4Xs3zOb1Ly2N+qZm/+M+8OFZnDt+FHf/fhM1DacWVFhV08SeY+3cvrjyjMlHSg3V3IoCNh46EXR4pK+ujMM9d7DuN33lfdUcbD7Jk+9Gng4ciaQL7mtrj/OzN/fxoXnjcWWk8kqUFdma2j3sqG9jydQSlk4vpb61iz3H2qM6prfXx8/e2Mfa2sQpu9PW1cOOI21njLf3JyIxySrJSk/l4Y/PJys9hU//en3fza5HVtVSkpvJtXPGOX5OdfaaV1FIW5eX/UFqvrTHMLgDLJ1WysLJRfz41b1954qFpAru7q4e/vmpTZQXuvjWdeeyuKqEV3c2RNXT9t/ZXjy1lEunW7MgV+we+tBMy8lubvvlu3z7xV3c88ctcbmxEo71B07gM8HH2+NlXEE2D918PoePn+QLT25kzzE3K3Y38vGFE8lM0zRF5Rz/ZKY39jSe8TvoD7hOj7n7iQj3vG8GTe3d/GLl/picA5IsuH/rzzs40tLJDz42m5zMNJbPHE19axfbj7QN+Zir9jaRn53OeePzGZufTfWYPFbsHtqygDUN7Vz/P6tZW3uc6+eMY39TBysSZAz/ndrjpKVIXybBcFlQWcQ3rj2HFbsbueUX75CRlsLNCyNPt1RqMFNKcynOyeBbf97BrG++xI0Pv823/7qTv2ypp6bB+mTudLZMoDnlBbz/vDH8/M39NLo9MTlH0gT3l7Yf5al1dXxm6RTOn2j1Pi+vLkOEIQ/NGGNYVdPExVOK+1L+Lp1eyrqDxyP+OPX67gY++D+rafd4eeKOC/nuR2czNj+LR1bVDqltTltb28ysCeFXUYylWxZO5KYFFTS4PXxwzviIJkkpFY6UFOG5uxbxnY/M4oNzx9PZ3csvVx/gzt9t4AtPbgKiq+Ueji9dOZ0ur4+fvLY3JsdPisJhTe0e7n1mK+eMG8UXlk3r216Sm8m8ikJe2XmMu5dPG+QIwe1r7KC+tYu7Li/p23bZ9DJ+9sZ+Vtc0cdU5Y0IewxjDL1bW8u0Xd1I9ZhQ/v3U+4wuyAfjHiybxX3/bxc76NmYMY9Gqzu5ettS18ulL4lu1bjDfvPYcppTmcN2c8cPdFJWkJhS6uGG+ixvmlwNWlt3uo2621LXS1O5hZox/JyeX5vK5y6uYVBybuRsjvudujOGeP27F7fHyg4/NOSPTY9mMMra910Z9a2fEx1611xp+WVJ1quLg+RMLyctMC2toxuPt5UtPb+H+v+7k6nPH8IfPXNQX2AFuWlBOdnoqjw5z733joRN4fSbkzdR4ykhL4VNLJuviGSpuMtNSmTWhgFsWTuTu5dPOqHIaC3cvn8b1c2PTgRnxwf3pdXW8svMYX75qOtNGn1nV74oZowGGtNTVqpomKopcp5XpTE9NYVFVCSt2h75R+59/2ckfN9Rx9/Kp/OSmebgyTv+gVODK4MPnj+e5TUdiNu4Wjndqj5Mi1h8upVRyiCq4i0iBiPxBRHaJyE4RuUhEikTkZRHZa3+PWcQ41HySb76wnYsmFw84e7GqLJeJxS5ejXDcvafXx5r9x1k8teSM58JJiTzQ1MFv3znEzRdWcPfyaQOu6PKJRZV09/p4fM3BiNrnpHdqm5k5blTIFZeUUiNHtD33HwF/M8ZUA7OBncA9wKvGmKnAq/bPMeEzhrkVhTx4w+wBg6eIsKx6NKv3NUe0luemwy20e7wsqTozuIeTEvngS7tJT03hC8unDnqeKaW5XF5dxuNrDjoymzZSHm8vGw+1sGCSzv5UKpkMObiLyCjgEuARAGNMtzGmBbgOeMze7THg+uiaOLBJJTk8/qkLTxvHDmb5zDK6vT5W7g2/GtvKvU2kCFw85czgHiolcktdC3/eUs+nl1RSlpcV8ly3L66kuaOb5+3l4eJpa10rHq8vocbblVLRi6bnPhloBH4pIhtF5BcikgOMNsbUA9jfyxxoZ1QumFTEqKy0iIZmVu1t5LwJBQNOsx8oJdIYwwMv7qIoJyPs7JOLpxRTPSaPR1fXxr20wTv2LNkLJul4u1LJJJrgngbMA35qjJkLdBDBEIyI3CEi60RkXWPj0CYFhSs9NYWl08t4bVdDWAtutHX1sLmuNeiQjN/SaWX09JozajO/ubeJt/Y187nLq8gLcwxbRPjk4kp2HXXz1r74Vp1cW3ucqWW5FGsuuVJJJZrgXgfUGWPesX/+A1awPyYiYwHs70EHpo0xDxtj5htj5peWlgbbxVHLZ46muaObTYcHX14L4O19zfT6TNCbqX7zJxWS2y8l0uezeu3lRdn8w4WRzaq8dvY4SnIz4jqpydvrY/3BE1w4WYdklEo2Qw7uxpijwGERmW5vWgbsAJ4HbrW33Qo8F1ULHXLptFLSUoRXwkiJXLW3CVdGKvMGmYpvpUQW80ZASuTzm4+ws76NL105PeJaKFnpqdyycCKv7WpgX2N0hcnCtaO+jXaPlwWVejNVqWQTbbbM54DfisgWYA7wn8ADwBUishe4wv552OVnp7OgsuiMeuHBrKpp4sLKogFL3/pdNr2MI61d7G1ox+Pt5cGXdjNz7CiumTW0Coa3LJxIRloKv1wdfe+9p9fHi1vrufkXa5jx73/juv9Zzdef28bT6w6z55ibXp/pq0q5YJL23JVKNlGVHzDGbALmB3lqWTTHjZXlM0bzH/Y6oBMHmPJbd+IktU0d3LJwYsjjBaZEpqWkUHeik19/8rwB0zJDKcnN5Po54/jD+jr+5YrpFOZkRHyMo61dPLH2EE++e4hjbR7G5WfxwXnj2dfQzh/X1/Hrt618eldGKhlpKUwsdjEmP3RGj1JqZEmK2jLh8gf3V3Y2cPvi4JOeVtnpkksGGW/386dE/mXrUQ41d7Coqjis1w3m00sm88cN7/HgS7u5/4Pnhf26dw8c55GVtby88xi9PsOl00r5f9dP5PLqsr6iZ70+Q21TO5sPt7KlroWt77Xy/vPGRtVepVRiOquCe0Wxi2mjc3llx7EBg/vKmiZGj8pkalluWMe8dHopP3vDqsl8z9Uzol4taOroPG67eBKPrq7lhvnlzC4vCPmatbXH+djDb5Ofnc6nFlfyDxdWBP1kkpoiVJXlUVWWx4fPnxBVO5VSiW3E15aJ1PIZo1l74DitJ3vOeM7nM7xV08SiqpKwg/TSaVYa/zWzx3HehHxH2nj38qmU5mbytWe3hUzdDFygZOWXL+Pe988YcMhJKXX2OKt67mClRD60Yh9f+eMWxheePrO1vcvLiZM9XDI1/NTMBZVFfOXqaj48z7nKbnlZ6XztAzP5/BMb+d3aQ3x8kPH//3jBWqDk6X+6KOy8eqVU8jvrgvucCQXMLi9gVU3wUgQTCrO5ZFr4wT01RfjM0ilONa/PNbPG8vt3D/Hdv+3ifeeOCbpgxd+3H+Xp9XXcedmpBUqUUgpA4j3dPZj58+ebdevWDXczEs6+xnau/uGbXDt7PN+7YfZpzzW6PVz1wzcZm5/Fnz67KGTaplIq+YjIemNMsIzFs2/MfSSZUpprZ8/U9eWkg1W/5t5nttDu8fLDIAuUKKWURoUE97nLpzK+IJt/f3YbPb0+AH7/7mFe2dnAV66uZmqQBUqUUkqDe4LLzkjlvmtmsvuYm8feOsDB5g7+4887uHhKMZ+4eNJwN08plaDOuhuqI9EVM0dzeXUZP3h5D89vPkJqivDgRwdeoEQppbTnPgKICN+45hy8PsOWula+dd25jAuxQIlS6uymPfcRoqLYxX99eBa1TR1cN2dohcmUUmcPDe4jyPVznZsopZRKbjoso5RSSUiDu1JKJSEN7koplYQ0uCulVBLS4K6UUklIg7tSSiUhDe5KKZWENLgrpVQSSoh67iLSCByM4hAlQPDVN84ueh0seh0seh0syXwdJhpjgq4ulBDBPVoism6ggvVnE70OFr0OFr0OlrP1OuiwjFJKJSEN7koplYSSJbg/PNwNSBB6HSx6HSx6HSxn5XVIijF3pZRSp0uWnrtSSqkAGtyVUioJxTW4i0i2iLwhIqkiMkdE3haR7SKyRUQ+FrBfpYi8IyJ7ReT3IpJhb6+2X+MRkS/1O/YBEdkqIptEZF0YbVkqIq32/ptE5Ov29gwReVNEYraQSYyvQ4GI/EFEdonIThG5KERbrrPPu0lE1onIYnv7iL0OIjI94N91k4i0icjdIdoy0LFich1Gwnu3n3tURBpEZFu/7Q+KyOWOXIxTx4zl78UX7WNtE5EnRCQrRFsKReRP9rnXisi59vaY/144xhgTty/gTuAL9uNpwFT78TigHiiwf34KuNF+/L/AZ+zHZcAFwP3Al/od+wBQEkFblgJ/HuC5+4CbR+h1eAz4lP04w3+sQdqSy6l7L7OAXclwHQLOkQocxZrsMVhbBrumjl+HEfTeLwHmAdv6bZ8IvDQSrgkwHqgFsgNef1uItnwXuM9+XA28Gq/fC6e+4j0sczPwHIAxZo8xZq/9+AjQAJSKiACXA3+wX/MYcL29X4Mx5l2gJ8btfNZua6zE5DqIyCisX8ZH7P26jTEtgzXEGNNu7P+xQA4QeIf9WUbgdehnGbDPGDPoDOgQx3oW56/DiHjvxpg3geNBth8EikVkzGDHjlAsr0kakG33uF3AkRBtmQm8ah93FzBJREbbzz1LbH8vHBG34G5/dJpsjDkQ5LkFWL3MfUAx0GKM8dpP12H95Q3FAC+JyHoRuSPMZl0kIptF5EUROSdg+zasHoDjYnwdJgONwC9FZKOI/EJEcsJo0wdFZBfwF+CTAU+N1OsQ6Ebgieha6+x1GGHvfTAbgEVOHCiW18QY8x7wIHAI6xNAqzHmpRBN2gx8KOD8E4EJ9nMx+71wUjx77iVAS/+NIjIW+A3wCWOMD5Agrw0nX3ORMWYe8D7gThG5JMT+G7A+rs4G/hvrr7F1MmN6gW4RyQvjvJGK5XVIw/oI/VNjzFygA7gnVIOMMX8yxlRj9YC+FbB9pF4H/7EygGuBp4fezJhchxHz3kNowBoycULMromIFALXAZVY7c0RkVtCtOcBoFBENgGfAzYCXoj574Vj4hncO4HTbmLYwwh/Ab5mjFljb24CCgJuWEwg9Eco/0c3jDENwJ+ABSH2bzPGtNuP/wqki0hJwC6ZQFeo8w5BLK9DHVBnjHnH/vkPWME+LPZH8ClJcB383gdsMMYcc6C9Tl6HkfbeB5KF9V6cEMtrshyoNcY0GmN6gGeAiwd7gR0fPmGMmQP8I1CKNW7vF6vfC8fELbgbY04Aqf671HbP4k/Ar40xTwfsZ4DXgY/Ym27FHocbiIjk+P+K2sMQV2J9dEJE7hKRu4K8Zow9fuf/2JUCNNs/FwP+/wiOiuV1MMYcBQ6LyHR70zJgh32ega5DVcB1mIf18XdEX4cAN9FvWGKg6zAYp6/DSHrvIUzD/j2LVoyvySFgoYi47P/ry4Cd9nkG+r0o8GfhAJ8C3jTGtNnPxez3wlHR3I2N9AvrRt9y+/EtWDc+NgV8zbGfmwysBWqwPlZm2tvHYPVO27A+wtUBo+z9N9tf24F/CzjnT4CbgrTlLnvfzcAa4OKA5z4CfG+kXQf7uTnAOmAL1lBTYYjr8BX7OmwC3gYWJ8l1cGH9kcrvd86BrsNgx3L8Ooyg9/4E1jh1j739dnt7OlaATBsh1+SbwC6sP0a/CXjNQNfkImCv/ZpnsH+P4vF74dj1jOvJYC7wmzif889ARoSveQaYrtdBr0OsrsNIee+DHOuDwLfOxmsS698Lp77imgppjNkIvC4iqXE85weMMd3h7m9/FHvWGLM7hm3S68DZfR1GwnsPIQ34nkPHAkbGNYnH74VTtHCYUkolIa0to5RSSUiDu1JKJSEN7koplYQ0uCvHicjdIuIawutuExGnZjw6SkQmicg/DOF1BSLy2Vi0KYxzn9Zm+/r+ZDjaouJPg7uKhbuxcq3DZmdI3IZz09kjOXc45VsnAREFd/s9FQDDEtwZQptV8tDgrqJizw7+i12AbZuI3IcVoF8XkdftfX4qVq347SLyzYDXHhCRr4vIKqwZlfOB34pVhzw7yLmWicifAn6+QkSesR9fKVYt7w0i8rSI5Nrbvy4i79ptezhgNu4KEflPEXkD+EK/81wqp+qhb7RnPz8ALLG3fdHuFa+0z7dBRC62X7tURF4Xkd8BW+3XTbFf990BruFSseqYPyUie0TkARG5Waw64ltFZIq930QReVWsGuOvikiFvf1XIvJjEXlLRPaLiH/25mlttreNE5G/iVUL/Tvh/jurEWi4E+31a2R/AR8Gfh7wcz79ausDRfb3VGAFMMv++QDw5YD9VgDzBzmXYM0YLLV//h1wDVbRqTeBHHv7V4CvB57bfvwb4JqAcz00wHlewCpEB1a9+zT61f/H+mSSZT+eCqyzHy/FKthWaf88iX610IOcbynWjMqxWDVL3gO+aT/3BeCHAe261X78Sax8a4BfYc3UTMEqVVsTcNzANt8G7Lf/jbKAg0D5cP8f0q/YfGnPXUVrK7BcRP5LRJYYY1qD7HODiGzAqqx3DlYA8vt9uCcyVoT6DXCLiBRgTRF/EVhoH3O1WFX8bsUq0QpwmVir9mzFqgMeWNp5oHOvBr4vIp/HWiDCG2SfdODn9nGf7vee1hpjaoO8ZjDvGmPqjTEerNK2/pK0W7H+QID1fn9nP/4NsDjg9c8aY3zGmB3AaAb2qjGm1RjThVV3aOIg+6oRLPGXilIJzRizR0TOB94PfFtETquTLSKVwJeAC4wxJ0TkV5xe/a8jwlP+EqsH2wU8bYzx2kMtLxtjbup37izgIaxPA4dF5BvhnNsY84CI/MV+T2tEZHmQ3b4IHANmY/WYAysERvqeADwBj30BP/sY+Pc0cAZi4OuDlcUNtl/vIMdWI5z23FVU7OyWk8aYx7EWRJgHuAF/retRWMGuVayVbN43yOECXxeUsUo7HwG+hjUcAVbht0UiUmW3ySUi0zgVyJvsMfiPMACxFiz5tv14ijFmqzHmv7CKsFUHaVs+UG+sGuMfxxpyGtJ7isBbWAtwgLUS0KoQ+zt5bjXC6F9tFa3zgO+KiA+rit9nsIdLRKTeGHOZiGzEqjy5H2vIYyC/Av5XRDqBi4wxA9UK/y3WuPsOAGNMo4jcBjwhIpn2Pl+zP1X8HGto4wDw7iDnnoJVTRDgbhG5DKtnuwNr6McHeEVks93Oh4A/ishHsUrQDvQpoFlEVou1wPSLxph/HaQNoXweeFRE/hVrxa1PhNh/S782n4ji3GqE0doyasSxc7U3GmMecfCYjwNfNMY0OnVMpYaTBnc1oojIeqxe8hX2zUelVBA6LKMSkp3PXtlv81eMMecPR3ucICLnYWW5BPIYYy4cjvao5KY9d6WUSkKaLaOUUklIg7tSSiUhDe5KKZWENLgrpVQS0uCulFJJ6P8Dy3Vw+opvZg0AAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# 코드를 입력해 주세요\n", "# 해당 결과를 시각화 하세요\n", "user.groupby(['start_year', 'start_month'])['userid'].count().plot()\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "end_year end_month\n", "2018.0 4.0 121\n", " 5.0 125\n", " 6.0 106\n", " 7.0 102\n", " 8.0 113\n", " 9.0 104\n", " 10.0 90\n", " 11.0 89\n", " 12.0 111\n", "2019.0 1.0 129\n", " 2.0 149\n", " 3.0 111\n", "Name: userid, dtype: int64" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 코드를 입력해 주세요\n", "# end_year와 end_month 컬럼을 이용하여 월별 탈퇴 회원의 수를 조회하세요\n", "user.groupby(['end_year', 'end_month'])['userid'].count()" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# 코드를 입력해 주세요\n", "# 해당 결과를 시각화 하세요\n", "user.groupby(['end_year', 'end_month'])['userid'].count().plot()" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "start_year start_month\n", "2018 5 193\n", " 4 175\n", " 6 166\n", "2017 12 160\n", "2018 12 157\n", "Name: userid, dtype: int64" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 코드를 입력해 주세요\n", "# 신규 가입이 가장 많은 상위 5개의 달을 조회하세요.\n", "user.groupby(['start_year', 'start_month'])['userid'].count().sort_values(ascending=False).head()" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
useridclassgenderstart_dateend_dateevent_typeis_deletedclass_namepriceevent_namestart_yearstart_monthstart_dayend_yearend_monthend_day
3204HD805503C01M2018-05-01NaTCA2-1all10000Sale201851NaNNaNNaN
3205IK000432C01F2018-05-012019-03-31CA21all10000Sale2018512019.03.031.0
3206AS247467C01M2018-05-012018-11-30CA2-1all10000Sale2018512018.011.030.0
3207OA777947C01M2018-05-012018-12-31CA2-1all10000Sale2018512018.012.031.0
3208HI630247C01M2018-05-01NaTCA20all10000Sale201851NaNNaNNaN
...................................................
4153PL850297C02F2018-04-152018-05-31CA31day7000Free20184152018.05.031.0
4154HD104614C02F2018-04-152019-02-28CA31day7000Free20184152019.02.028.0
4155AS628722C02F2018-04-152019-02-28CA31day7000Free20184152019.02.028.0
4156GD716223C02F2018-04-15NaTCA30day7000Free2018415NaNNaNNaN
4157HD981197C02F2018-04-152018-12-31CA31day7000Free20184152018.012.031.0
\n", "

534 rows × 16 columns

\n", "
" ], "text/plain": [ " userid class gender start_date end_date event_type is_deleted \\\n", "3204 HD805503 C01 M 2018-05-01 NaT CA2 -1 \n", "3205 IK000432 C01 F 2018-05-01 2019-03-31 CA2 1 \n", "3206 AS247467 C01 M 2018-05-01 2018-11-30 CA2 -1 \n", "3207 OA777947 C01 M 2018-05-01 2018-12-31 CA2 -1 \n", "3208 HI630247 C01 M 2018-05-01 NaT CA2 0 \n", "... ... ... ... ... ... ... ... \n", "4153 PL850297 C02 F 2018-04-15 2018-05-31 CA3 1 \n", "4154 HD104614 C02 F 2018-04-15 2019-02-28 CA3 1 \n", "4155 AS628722 C02 F 2018-04-15 2019-02-28 CA3 1 \n", "4156 GD716223 C02 F 2018-04-15 NaT CA3 0 \n", "4157 HD981197 C02 F 2018-04-15 2018-12-31 CA3 1 \n", "\n", " class_name price event_name start_year start_month start_day \\\n", "3204 all 10000 Sale 2018 5 1 \n", "3205 all 10000 Sale 2018 5 1 \n", "3206 all 10000 Sale 2018 5 1 \n", "3207 all 10000 Sale 2018 5 1 \n", "3208 all 10000 Sale 2018 5 1 \n", "... ... ... ... ... ... ... \n", "4153 day 7000 Free 2018 4 15 \n", "4154 day 7000 Free 2018 4 15 \n", "4155 day 7000 Free 2018 4 15 \n", "4156 day 7000 Free 2018 4 15 \n", "4157 day 7000 Free 2018 4 15 \n", "\n", " end_year end_month end_day \n", "3204 NaN NaN NaN \n", "3205 2019.0 3.0 31.0 \n", "3206 2018.0 11.0 30.0 \n", "3207 2018.0 12.0 31.0 \n", "3208 NaN NaN NaN \n", "... ... ... ... \n", "4153 2018.0 5.0 31.0 \n", "4154 2019.0 2.0 28.0 \n", "4155 2019.0 2.0 28.0 \n", "4156 NaN NaN NaN \n", "4157 2018.0 12.0 31.0 \n", "\n", "[534 rows x 16 columns]" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 코드를 입력해 주세요\n", "# 2018년 4~6월 데이터만 추출하세요. 결과를 top3 변수에 저장하세요.\n", "top3 = user.loc[ (user['start_year'] == 2018) & (user['start_month'].isin([4,5,6])), : ]\n", "top3" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Sale 359\n", "Free 175\n", "Name: event_name, dtype: int64" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 코드를 입력해 주세요\n", "# top3 데이터 프레임의 event_name 컬럼의 고유값별 개수를 조회하세요\n", "top3['event_name'].value_counts()" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "all 272\n", "night 140\n", "day 122\n", "Name: class_name, dtype: int64" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 코드를 입력해 주세요\n", "# top3 데이터 프레임의 class_name 컬럼의 고유값별 개수를 조회하세요\n", "top3['class_name'].value_counts()" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
loguseriddate
0L00000049012330AS0093732018-04-01
1L00000049012331AS0153152018-04-01
2L00000049012332AS0408412018-04-01
3L00000049012333AS0465942018-04-01
4L00000049012334AS0732852018-04-01
............
197423L00000049209753TS9777032019-03-31
197424L00000049209754TS9795502019-03-31
197425L00000049209755TS9952992019-03-31
197426L00000049209756TS9958532019-03-31
197427L00000049209757TS9990792019-03-31
\n", "

197428 rows × 3 columns

\n", "
" ], "text/plain": [ " log userid date\n", "0 L00000049012330 AS009373 2018-04-01\n", "1 L00000049012331 AS015315 2018-04-01\n", "2 L00000049012332 AS040841 2018-04-01\n", "3 L00000049012333 AS046594 2018-04-01\n", "4 L00000049012334 AS073285 2018-04-01\n", "... ... ... ...\n", "197423 L00000049209753 TS977703 2019-03-31\n", "197424 L00000049209754 TS979550 2019-03-31\n", "197425 L00000049209755 TS995299 2019-03-31\n", "197426 L00000049209756 TS995853 2019-03-31\n", "197427 L00000049209757 TS999079 2019-03-31\n", "\n", "[197428 rows x 3 columns]" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 코드를 입력해 주세요\n", "# df_logs의 date 컬럼을 datetime 형식으로 변경하세요.\n", "df_logs['date'] = pd.to_datetime(df_logs['date'])\n", "df_logs" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
loguseriddatemonth
0L00000049012330AS0093732018-04-01201804
1L00000049012331AS0153152018-04-01201804
2L00000049012332AS0408412018-04-01201804
3L00000049012333AS0465942018-04-01201804
4L00000049012334AS0732852018-04-01201804
...............
197423L00000049209753TS9777032019-03-31201903
197424L00000049209754TS9795502019-03-31201903
197425L00000049209755TS9952992019-03-31201903
197426L00000049209756TS9958532019-03-31201903
197427L00000049209757TS9990792019-03-31201903
\n", "

197428 rows × 4 columns

\n", "
" ], "text/plain": [ " log userid date month\n", "0 L00000049012330 AS009373 2018-04-01 201804\n", "1 L00000049012331 AS015315 2018-04-01 201804\n", "2 L00000049012332 AS040841 2018-04-01 201804\n", "3 L00000049012333 AS046594 2018-04-01 201804\n", "4 L00000049012334 AS073285 2018-04-01 201804\n", "... ... ... ... ...\n", "197423 L00000049209753 TS977703 2019-03-31 201903\n", "197424 L00000049209754 TS979550 2019-03-31 201903\n", "197425 L00000049209755 TS995299 2019-03-31 201903\n", "197426 L00000049209756 TS995853 2019-03-31 201903\n", "197427 L00000049209757 TS999079 2019-03-31 201903\n", "\n", "[197428 rows x 4 columns]" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# df_logs의 date 컬럼을 년월 형태로 표현하세요.\n", "# dt와 strftime 함수 이용\n", "df_logs['month'] = df_logs['date'].dt.strftime('%Y%m')\n", "df_logs" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "month userid \n", "201804 AS002855 4\n", " AS009013 2\n", " AS009373 3\n", " AS015315 6\n", " AS015739 7\n", " ..\n", "201903 TS995853 8\n", " TS998593 8\n", " TS999079 3\n", " TS999231 6\n", " TS999855 4\n", "Name: log, Length: 36842, dtype: int64" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 코드를 입력해 주세요\n", "# df_logs에서 date와 userid를 기준으로 그룹을 생성 후 log의 개수를 카운트하세요.\n", "df_logs_month = df_logs.groupby(['month','userid'])['log'].count()\n", "df_logs_month" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
monthuseridlog
0201804AS0028554
1201804AS0090132
2201804AS0093733
3201804AS0153156
4201804AS0157397
............
36837201903TS9958538
36838201903TS9985938
36839201903TS9990793
36840201903TS9992316
36841201903TS9998554
\n", "

36842 rows × 3 columns

\n", "
" ], "text/plain": [ " month userid log\n", "0 201804 AS002855 4\n", "1 201804 AS009013 2\n", "2 201804 AS009373 3\n", "3 201804 AS015315 6\n", "4 201804 AS015739 7\n", "... ... ... ...\n", "36837 201903 TS995853 8\n", "36838 201903 TS998593 8\n", "36839 201903 TS999079 3\n", "36840 201903 TS999231 6\n", "36841 201903 TS999855 4\n", "\n", "[36842 rows x 3 columns]" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 코드를 입력해 주세요\n", "# df_logs_month 데이터 프레임의 인덱스를 초기화 하세요.\n", "df_logs_month = df_logs_month.reset_index()\n", "df_logs_month" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
monthuseridfreq
0201804AS0028554
1201804AS0090132
2201804AS0093733
3201804AS0153156
4201804AS0157397
............
36837201903TS9958538
36838201903TS9985938
36839201903TS9990793
36840201903TS9992316
36841201903TS9998554
\n", "

36842 rows × 3 columns

\n", "
" ], "text/plain": [ " month userid freq\n", "0 201804 AS002855 4\n", "1 201804 AS009013 2\n", "2 201804 AS009373 3\n", "3 201804 AS015315 6\n", "4 201804 AS015739 7\n", "... ... ... ...\n", "36837 201903 TS995853 8\n", "36838 201903 TS998593 8\n", "36839 201903 TS999079 3\n", "36840 201903 TS999231 6\n", "36841 201903 TS999855 4\n", "\n", "[36842 rows x 3 columns]" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 코드를 입력해 주세요\n", "# df_logs_month 데이터 프레임의 log 컬럼의 이름을 freq로 변경하세요\n", "df_logs_month.rename(columns={'log':'freq'}, inplace=True)\n", "df_logs_month" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
minmedianmeanmaxsum
userid
AS00285525.04.500000754
AS00880514.04.000000840
AS00901322.02.00000022
AS00937335.05.083333761
AS01523347.07.5454551183
..................
TS99585389.59.5000001119
TS99859378.08.142857957
TS99907925.54.916667959
TS99923115.04.666667856
TS99985534.04.583333755
\n", "

4192 rows × 5 columns

\n", "
" ], "text/plain": [ " min median mean max sum\n", "userid \n", "AS002855 2 5.0 4.500000 7 54\n", "AS008805 1 4.0 4.000000 8 40\n", "AS009013 2 2.0 2.000000 2 2\n", "AS009373 3 5.0 5.083333 7 61\n", "AS015233 4 7.0 7.545455 11 83\n", "... ... ... ... ... ...\n", "TS995853 8 9.5 9.500000 11 19\n", "TS998593 7 8.0 8.142857 9 57\n", "TS999079 2 5.5 4.916667 9 59\n", "TS999231 1 5.0 4.666667 8 56\n", "TS999855 3 4.0 4.583333 7 55\n", "\n", "[4192 rows x 5 columns]" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 코드를 입력해 주세요\n", "# df_logs_month 데이터 프레임의 userid를 이용하여 freq 컬럼의 최소, 중앙값, 평균, 최대, 합계를 계산하세요.\n", "user_log = df_logs_month.groupby('userid')['freq'].agg(['min', 'median', 'mean', 'max', 'sum'])\n", "user_log" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
useridminmedianmeanmaxsum
0AS00285525.04.500000754
1AS00880514.04.000000840
2AS00901322.02.00000022
3AS00937335.05.083333761
4AS01523347.07.5454551183
.....................
4187TS99585389.59.5000001119
4188TS99859378.08.142857957
4189TS99907925.54.916667959
4190TS99923115.04.666667856
4191TS99985534.04.583333755
\n", "

4192 rows × 6 columns

\n", "
" ], "text/plain": [ " userid min median mean max sum\n", "0 AS002855 2 5.0 4.500000 7 54\n", "1 AS008805 1 4.0 4.000000 8 40\n", "2 AS009013 2 2.0 2.000000 2 2\n", "3 AS009373 3 5.0 5.083333 7 61\n", "4 AS015233 4 7.0 7.545455 11 83\n", "... ... ... ... ... ... ...\n", "4187 TS995853 8 9.5 9.500000 11 19\n", "4188 TS998593 7 8.0 8.142857 9 57\n", "4189 TS999079 2 5.5 4.916667 9 59\n", "4190 TS999231 1 5.0 4.666667 8 56\n", "4191 TS999855 3 4.0 4.583333 7 55\n", "\n", "[4192 rows x 6 columns]" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 코드를 입력해 주세요\n", "# user_log 데이터 프레임의 인덱스를 초기화 하세요.\n", "user_log.reset_index(inplace=True)\n", "user_log" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
loguseriddatemonthwday
0L00000049012330AS0093732018-04-012018046
1L00000049012331AS0153152018-04-012018046
2L00000049012332AS0408412018-04-012018046
3L00000049012333AS0465942018-04-012018046
4L00000049012334AS0732852018-04-012018046
..................
197423L00000049209753TS9777032019-03-312019036
197424L00000049209754TS9795502019-03-312019036
197425L00000049209755TS9952992019-03-312019036
197426L00000049209756TS9958532019-03-312019036
197427L00000049209757TS9990792019-03-312019036
\n", "

197428 rows × 5 columns

\n", "
" ], "text/plain": [ " log userid date month wday\n", "0 L00000049012330 AS009373 2018-04-01 201804 6\n", "1 L00000049012331 AS015315 2018-04-01 201804 6\n", "2 L00000049012332 AS040841 2018-04-01 201804 6\n", "3 L00000049012333 AS046594 2018-04-01 201804 6\n", "4 L00000049012334 AS073285 2018-04-01 201804 6\n", "... ... ... ... ... ...\n", "197423 L00000049209753 TS977703 2019-03-31 201903 6\n", "197424 L00000049209754 TS979550 2019-03-31 201903 6\n", "197425 L00000049209755 TS995299 2019-03-31 201903 6\n", "197426 L00000049209756 TS995853 2019-03-31 201903 6\n", "197427 L00000049209757 TS999079 2019-03-31 201903 6\n", "\n", "[197428 rows x 5 columns]" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 코드를 입력해 주세요\n", "# df_logs 데이터 프레임을 이용하여 요일(weekday) 정보를 추출하세요\n", "df_logs[\"wday\"] = df_logs[\"date\"].dt.weekday\n", "df_logs" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
count
useridmonthwday
AS00285520180454
20180521
54
20180655
20180711
............
TS99985520190111
54
61
20190254
20190354
\n", "

93333 rows × 1 columns

\n", "
" ], "text/plain": [ " count\n", "userid month wday \n", "AS002855 201804 5 4\n", " 201805 2 1\n", " 5 4\n", " 201806 5 5\n", " 201807 1 1\n", "... ...\n", "TS999855 201901 1 1\n", " 5 4\n", " 6 1\n", " 201902 5 4\n", " 201903 5 4\n", "\n", "[93333 rows x 1 columns]" ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 코드를 입력해 주세요\n", "# df_logs 데이터 프레임의 userid, month, wday 컬럼을 그룹으로 log 컬럼의 개수를 카운트하세요.\n", "df_logs_weekly = df_logs.groupby(['userid','month','wday'])['log'].agg(['count'])\n", "df_logs_weekly" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
useridmonthwdaycount
0AS00285520180454
1AS00285520180521
2AS00285520180554
3AS00285520180655
4AS00285520180711
...............
93328TS99985520190111
93329TS99985520190154
93330TS99985520190161
93331TS99985520190254
93332TS99985520190354
\n", "

93333 rows × 4 columns

\n", "
" ], "text/plain": [ " userid month wday count\n", "0 AS002855 201804 5 4\n", "1 AS002855 201805 2 1\n", "2 AS002855 201805 5 4\n", "3 AS002855 201806 5 5\n", "4 AS002855 201807 1 1\n", "... ... ... ... ...\n", "93328 TS999855 201901 1 1\n", "93329 TS999855 201901 5 4\n", "93330 TS999855 201901 6 1\n", "93331 TS999855 201902 5 4\n", "93332 TS999855 201903 5 4\n", "\n", "[93333 rows x 4 columns]" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 코드를 입력해 주세요\n", "# df_logs_weekly의 인덱스를 초기화 하세요.\n", "df_logs_weekly.reset_index(inplace=True)\n", "df_logs_weekly" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
monthwdaycount
userid
AS00285520190365
AS00880520190364
AS00901320180402
AS00937320190365
AS01523320190365
............
TS99585320190365
TS99859320190365
TS99907920190365
TS99923120190365
TS99985520190365
\n", "

4192 rows × 3 columns

\n", "
" ], "text/plain": [ " month wday count\n", "userid \n", "AS002855 201903 6 5\n", "AS008805 201903 6 4\n", "AS009013 201804 0 2\n", "AS009373 201903 6 5\n", "AS015233 201903 6 5\n", "... ... ... ...\n", "TS995853 201903 6 5\n", "TS998593 201903 6 5\n", "TS999079 201903 6 5\n", "TS999231 201903 6 5\n", "TS999855 201903 6 5\n", "\n", "[4192 rows x 3 columns]" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 코드를 입력해 주세요\n", "# 매주 방문하는 사람을 찾기 위해 df_logs_weekly 데이터 프레임의 userid 컬럼을 그룹으로 최대값을 계산하세요\n", "df_logs_weekly_routine = df_logs_weekly.groupby('userid').max()\n", "df_logs_weekly_routine" ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
monthwdaycountroutine
userid
AS002855201903650
AS008805201903640
AS009013201804020
AS009373201903650
AS015233201903650
...............
TS995853201903650
TS998593201903650
TS999079201903650
TS999231201903650
TS999855201903650
\n", "

4192 rows × 4 columns

\n", "
" ], "text/plain": [ " month wday count routine\n", "userid \n", "AS002855 201903 6 5 0\n", "AS008805 201903 6 4 0\n", "AS009013 201804 0 2 0\n", "AS009373 201903 6 5 0\n", "AS015233 201903 6 5 0\n", "... ... ... ... ...\n", "TS995853 201903 6 5 0\n", "TS998593 201903 6 5 0\n", "TS999079 201903 6 5 0\n", "TS999231 201903 6 5 0\n", "TS999855 201903 6 5 0\n", "\n", "[4192 rows x 4 columns]" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 코드를 입력해 주세요\n", "# df_logs_weekly_routine 데이터 프레임에 0의 값을 가지는 routine 컬럼을 추가하세요.\n", "df_logs_weekly_routine['routine'] = 0\n", "df_logs_weekly_routine" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
monthwdaycountroutine
userid
AS002855201903651
AS008805201903641
AS009013201804020
AS009373201903651
AS015233201903651
...............
TS995853201903651
TS998593201903651
TS999079201903651
TS999231201903651
TS999855201903651
\n", "

4192 rows × 4 columns

\n", "
" ], "text/plain": [ " month wday count routine\n", "userid \n", "AS002855 201903 6 5 1\n", "AS008805 201903 6 4 1\n", "AS009013 201804 0 2 0\n", "AS009373 201903 6 5 1\n", "AS015233 201903 6 5 1\n", "... ... ... ... ...\n", "TS995853 201903 6 5 1\n", "TS998593 201903 6 5 1\n", "TS999079 201903 6 5 1\n", "TS999231 201903 6 5 1\n", "TS999855 201903 6 5 1\n", "\n", "[4192 rows x 4 columns]" ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 코드를 입력해 주세요\n", "# count 컬럼의 값이 4 이상인 경우 routine 컬럼의 값을 1로 변경하세요\n", "df_logs_weekly_routine.loc[df_logs_weekly_routine['count'] >= 4, 'routine'] = 1\n", "df_logs_weekly_routine" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
useridroutine
0AS0028551
1AS0088051
2AS0090130
3AS0093731
4AS0152331
.........
4187TS9958531
4188TS9985931
4189TS9990791
4190TS9992311
4191TS9998551
\n", "

4192 rows × 2 columns

\n", "
" ], "text/plain": [ " userid routine\n", "0 AS002855 1\n", "1 AS008805 1\n", "2 AS009013 0\n", "3 AS009373 1\n", "4 AS015233 1\n", "... ... ...\n", "4187 TS995853 1\n", "4188 TS998593 1\n", "4189 TS999079 1\n", "4190 TS999231 1\n", "4191 TS999855 1\n", "\n", "[4192 rows x 2 columns]" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 코드를 입력해 주세요\n", "# df_logs_weekly_routine 컬럼의 인덱스를 초기화하고 userid컬럼과 routine 컬럼만 추출하세요.\n", "routine = df_logs_weekly_routine.reset_index()[['userid', 'routine']]\n", "routine" ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
useridclassgenderstart_dateend_dateevent_typeis_deletedclass_namepriceevent_name...start_monthstart_dayend_yearend_monthend_dayminmedianmeanmaxsum
0OA832399C01F2015-05-01NaTCA10all10000None...51NaNNaNNaN25.04.833333858
1PL270116C01M2015-05-01NaTCA10all10000None...51NaNNaNNaN35.05.083333761
2OA974876C01M2015-05-01NaTCA10all10000None...51NaNNaNNaN35.04.583333655
3HD024127C01F2015-05-01NaTCA1-1all10000None...51NaNNaNNaN24.54.833333758
4IK271057C01M2015-05-01NaTCA10all10000None...51NaNNaNNaN23.53.750000545
..................................................................
4187IK562610C02F2018-12-132019-02-28CA31day7000Free...12132019.02.028.034.05.6666671017
4188HI599354C02M2018-12-13NaTCA30day7000Free...1213NaNNaNNaN57.57.5000001030
4189GD796859C02F2018-12-14NaTCA30day7000Free...1214NaNNaNNaN67.57.250000829
4190GD082270C02F2018-12-142019-02-28CA31day7000Free...12142019.02.028.035.06.0000001018
4191OA426023C02F2018-12-14NaTCA30day7000Free...1214NaNNaNNaN89.09.5000001238
\n", "

4192 rows × 21 columns

\n", "
" ], "text/plain": [ " userid class gender start_date end_date event_type is_deleted \\\n", "0 OA832399 C01 F 2015-05-01 NaT CA1 0 \n", "1 PL270116 C01 M 2015-05-01 NaT CA1 0 \n", "2 OA974876 C01 M 2015-05-01 NaT CA1 0 \n", "3 HD024127 C01 F 2015-05-01 NaT CA1 -1 \n", "4 IK271057 C01 M 2015-05-01 NaT CA1 0 \n", "... ... ... ... ... ... ... ... \n", "4187 IK562610 C02 F 2018-12-13 2019-02-28 CA3 1 \n", "4188 HI599354 C02 M 2018-12-13 NaT CA3 0 \n", "4189 GD796859 C02 F 2018-12-14 NaT CA3 0 \n", "4190 GD082270 C02 F 2018-12-14 2019-02-28 CA3 1 \n", "4191 OA426023 C02 F 2018-12-14 NaT CA3 0 \n", "\n", " class_name price event_name ... start_month start_day end_year \\\n", "0 all 10000 None ... 5 1 NaN \n", "1 all 10000 None ... 5 1 NaN \n", "2 all 10000 None ... 5 1 NaN \n", "3 all 10000 None ... 5 1 NaN \n", "4 all 10000 None ... 5 1 NaN \n", "... ... ... ... ... ... ... ... \n", "4187 day 7000 Free ... 12 13 2019.0 \n", "4188 day 7000 Free ... 12 13 NaN \n", "4189 day 7000 Free ... 12 14 NaN \n", "4190 day 7000 Free ... 12 14 2019.0 \n", "4191 day 7000 Free ... 12 14 NaN \n", "\n", " end_month end_day min median mean max sum \n", "0 NaN NaN 2 5.0 4.833333 8 58 \n", "1 NaN NaN 3 5.0 5.083333 7 61 \n", "2 NaN NaN 3 5.0 4.583333 6 55 \n", "3 NaN NaN 2 4.5 4.833333 7 58 \n", "4 NaN NaN 2 3.5 3.750000 5 45 \n", "... ... ... ... ... ... ... ... \n", "4187 2.0 28.0 3 4.0 5.666667 10 17 \n", "4188 NaN NaN 5 7.5 7.500000 10 30 \n", "4189 NaN NaN 6 7.5 7.250000 8 29 \n", "4190 2.0 28.0 3 5.0 6.000000 10 18 \n", "4191 NaN NaN 8 9.0 9.500000 12 38 \n", "\n", "[4192 rows x 21 columns]" ] }, "execution_count": 47, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 코드를 입력해 주세요\n", "# user 데이터 프레임과 user_log 데이터 프레임을 userid를 기준으로 병합하세요\n", "user = pd.merge(user, user_log, on='userid')\n", "user" ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
useridclassgenderstart_dateend_dateevent_typeis_deletedclass_namepriceevent_name...start_dayend_yearend_monthend_dayminmedianmeanmaxsumroutine
0OA832399C01F2015-05-01NaTCA10all10000None...1NaNNaNNaN25.04.8333338581
1PL270116C01M2015-05-01NaTCA10all10000None...1NaNNaNNaN35.05.0833337611
2OA974876C01M2015-05-01NaTCA10all10000None...1NaNNaNNaN35.04.5833336551
3HD024127C01F2015-05-01NaTCA1-1all10000None...1NaNNaNNaN24.54.8333337581
4IK271057C01M2015-05-01NaTCA10all10000None...1NaNNaNNaN23.53.7500005451
..................................................................
4187IK562610C02F2018-12-132019-02-28CA31day7000Free...132019.02.028.034.05.66666710170
4188HI599354C02M2018-12-13NaTCA30day7000Free...13NaNNaNNaN57.57.50000010301
4189GD796859C02F2018-12-14NaTCA30day7000Free...14NaNNaNNaN67.57.2500008291
4190GD082270C02F2018-12-142019-02-28CA31day7000Free...142019.02.028.035.06.00000010180
4191OA426023C02F2018-12-14NaTCA30day7000Free...14NaNNaNNaN89.09.50000012381
\n", "

4192 rows × 22 columns

\n", "
" ], "text/plain": [ " userid class gender start_date end_date event_type is_deleted \\\n", "0 OA832399 C01 F 2015-05-01 NaT CA1 0 \n", "1 PL270116 C01 M 2015-05-01 NaT CA1 0 \n", "2 OA974876 C01 M 2015-05-01 NaT CA1 0 \n", "3 HD024127 C01 F 2015-05-01 NaT CA1 -1 \n", "4 IK271057 C01 M 2015-05-01 NaT CA1 0 \n", "... ... ... ... ... ... ... ... \n", "4187 IK562610 C02 F 2018-12-13 2019-02-28 CA3 1 \n", "4188 HI599354 C02 M 2018-12-13 NaT CA3 0 \n", "4189 GD796859 C02 F 2018-12-14 NaT CA3 0 \n", "4190 GD082270 C02 F 2018-12-14 2019-02-28 CA3 1 \n", "4191 OA426023 C02 F 2018-12-14 NaT CA3 0 \n", "\n", " class_name price event_name ... start_day end_year end_month \\\n", "0 all 10000 None ... 1 NaN NaN \n", "1 all 10000 None ... 1 NaN NaN \n", "2 all 10000 None ... 1 NaN NaN \n", "3 all 10000 None ... 1 NaN NaN \n", "4 all 10000 None ... 1 NaN NaN \n", "... ... ... ... ... ... ... ... \n", "4187 day 7000 Free ... 13 2019.0 2.0 \n", "4188 day 7000 Free ... 13 NaN NaN \n", "4189 day 7000 Free ... 14 NaN NaN \n", "4190 day 7000 Free ... 14 2019.0 2.0 \n", "4191 day 7000 Free ... 14 NaN NaN \n", "\n", " end_day min median mean max sum routine \n", "0 NaN 2 5.0 4.833333 8 58 1 \n", "1 NaN 3 5.0 5.083333 7 61 1 \n", "2 NaN 3 5.0 4.583333 6 55 1 \n", "3 NaN 2 4.5 4.833333 7 58 1 \n", "4 NaN 2 3.5 3.750000 5 45 1 \n", "... ... ... ... ... ... ... ... \n", "4187 28.0 3 4.0 5.666667 10 17 0 \n", "4188 NaN 5 7.5 7.500000 10 30 1 \n", "4189 NaN 6 7.5 7.250000 8 29 1 \n", "4190 28.0 3 5.0 6.000000 10 18 0 \n", "4191 NaN 8 9.0 9.500000 12 38 1 \n", "\n", "[4192 rows x 22 columns]" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 코드를 입력해 주세요\n", "# user 데이터 프레임과 routine 데이터 프레임을 userid를 기준으로 병합하세요\n", "user = pd.merge(user, routine, on='userid')\n", "user" ] }, { "cell_type": "code", "execution_count": 49, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
useridclassgenderstart_dateend_dateevent_typeis_deletedclass_namepriceevent_name...end_yearend_monthend_dayminmedianmeanmaxsumroutineperiod
0OA832399C01F2015-05-01NaTCA10all10000None...NaNNaNNaN25.04.8333338581NaT
1PL270116C01M2015-05-01NaTCA10all10000None...NaNNaNNaN35.05.0833337611NaT
2OA974876C01M2015-05-01NaTCA10all10000None...NaNNaNNaN35.04.5833336551NaT
3HD024127C01F2015-05-01NaTCA1-1all10000None...NaNNaNNaN24.54.8333337581NaT
4IK271057C01M2015-05-01NaTCA10all10000None...NaNNaNNaN23.53.7500005451NaT
..................................................................
4187IK562610C02F2018-12-132019-02-28CA31day7000Free...2019.02.028.034.05.6666671017077 days
4188HI599354C02M2018-12-13NaTCA30day7000Free...NaNNaNNaN57.57.50000010301NaT
4189GD796859C02F2018-12-14NaTCA30day7000Free...NaNNaNNaN67.57.2500008291NaT
4190GD082270C02F2018-12-142019-02-28CA31day7000Free...2019.02.028.035.06.0000001018076 days
4191OA426023C02F2018-12-14NaTCA30day7000Free...NaNNaNNaN89.09.50000012381NaT
\n", "

4192 rows × 23 columns

\n", "
" ], "text/plain": [ " userid class gender start_date end_date event_type is_deleted \\\n", "0 OA832399 C01 F 2015-05-01 NaT CA1 0 \n", "1 PL270116 C01 M 2015-05-01 NaT CA1 0 \n", "2 OA974876 C01 M 2015-05-01 NaT CA1 0 \n", "3 HD024127 C01 F 2015-05-01 NaT CA1 -1 \n", "4 IK271057 C01 M 2015-05-01 NaT CA1 0 \n", "... ... ... ... ... ... ... ... \n", "4187 IK562610 C02 F 2018-12-13 2019-02-28 CA3 1 \n", "4188 HI599354 C02 M 2018-12-13 NaT CA3 0 \n", "4189 GD796859 C02 F 2018-12-14 NaT CA3 0 \n", "4190 GD082270 C02 F 2018-12-14 2019-02-28 CA3 1 \n", "4191 OA426023 C02 F 2018-12-14 NaT CA3 0 \n", "\n", " class_name price event_name ... end_year end_month end_day min \\\n", "0 all 10000 None ... NaN NaN NaN 2 \n", "1 all 10000 None ... NaN NaN NaN 3 \n", "2 all 10000 None ... NaN NaN NaN 3 \n", "3 all 10000 None ... NaN NaN NaN 2 \n", "4 all 10000 None ... NaN NaN NaN 2 \n", "... ... ... ... ... ... ... ... ... \n", "4187 day 7000 Free ... 2019.0 2.0 28.0 3 \n", "4188 day 7000 Free ... NaN NaN NaN 5 \n", "4189 day 7000 Free ... NaN NaN NaN 6 \n", "4190 day 7000 Free ... 2019.0 2.0 28.0 3 \n", "4191 day 7000 Free ... NaN NaN NaN 8 \n", "\n", " median mean max sum routine period \n", "0 5.0 4.833333 8 58 1 NaT \n", "1 5.0 5.083333 7 61 1 NaT \n", "2 5.0 4.583333 6 55 1 NaT \n", "3 4.5 4.833333 7 58 1 NaT \n", "4 3.5 3.750000 5 45 1 NaT \n", "... ... ... ... ... ... ... \n", "4187 4.0 5.666667 10 17 0 77 days \n", "4188 7.5 7.500000 10 30 1 NaT \n", "4189 7.5 7.250000 8 29 1 NaT \n", "4190 5.0 6.000000 10 18 0 76 days \n", "4191 9.0 9.500000 12 38 1 NaT \n", "\n", "[4192 rows x 23 columns]" ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 코드를 입력해 주세요\n", "# end_date 컬럼와 start_date 컬럼의 차이를 이용하여 회원 기간을 계산하세요\n", "user['period'] = user['end_date'] - user['start_date']\n", "user" ] }, { "cell_type": "code", "execution_count": 50, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
useridclassgenderstart_dateend_dateevent_typeis_deletedclass_namepriceevent_name...end_yearend_monthend_dayminmedianmeanmaxsumroutineperiod
0OA832399C01F2015-05-01NaTCA10all10000None...NaNNaNNaN25.04.83333385811460 days
1PL270116C01M2015-05-01NaTCA10all10000None...NaNNaNNaN35.05.08333376111460 days
2OA974876C01M2015-05-01NaTCA10all10000None...NaNNaNNaN35.04.58333365511460 days
3HD024127C01F2015-05-01NaTCA1-1all10000None...NaNNaNNaN24.54.83333375811460 days
4IK271057C01M2015-05-01NaTCA10all10000None...NaNNaNNaN23.53.75000054511460 days
..................................................................
4187IK562610C02F2018-12-132019-02-28CA31day7000Free...2019.02.028.034.05.6666671017077 days
4188HI599354C02M2018-12-13NaTCA30day7000Free...NaNNaNNaN57.57.50000010301138 days
4189GD796859C02F2018-12-14NaTCA30day7000Free...NaNNaNNaN67.57.2500008291137 days
4190GD082270C02F2018-12-142019-02-28CA31day7000Free...2019.02.028.035.06.0000001018076 days
4191OA426023C02F2018-12-14NaTCA30day7000Free...NaNNaNNaN89.09.50000012381137 days
\n", "

4192 rows × 23 columns

\n", "
" ], "text/plain": [ " userid class gender start_date end_date event_type is_deleted \\\n", "0 OA832399 C01 F 2015-05-01 NaT CA1 0 \n", "1 PL270116 C01 M 2015-05-01 NaT CA1 0 \n", "2 OA974876 C01 M 2015-05-01 NaT CA1 0 \n", "3 HD024127 C01 F 2015-05-01 NaT CA1 -1 \n", "4 IK271057 C01 M 2015-05-01 NaT CA1 0 \n", "... ... ... ... ... ... ... ... \n", "4187 IK562610 C02 F 2018-12-13 2019-02-28 CA3 1 \n", "4188 HI599354 C02 M 2018-12-13 NaT CA3 0 \n", "4189 GD796859 C02 F 2018-12-14 NaT CA3 0 \n", "4190 GD082270 C02 F 2018-12-14 2019-02-28 CA3 1 \n", "4191 OA426023 C02 F 2018-12-14 NaT CA3 0 \n", "\n", " class_name price event_name ... end_year end_month end_day min \\\n", "0 all 10000 None ... NaN NaN NaN 2 \n", "1 all 10000 None ... NaN NaN NaN 3 \n", "2 all 10000 None ... NaN NaN NaN 3 \n", "3 all 10000 None ... NaN NaN NaN 2 \n", "4 all 10000 None ... NaN NaN NaN 2 \n", "... ... ... ... ... ... ... ... ... \n", "4187 day 7000 Free ... 2019.0 2.0 28.0 3 \n", "4188 day 7000 Free ... NaN NaN NaN 5 \n", "4189 day 7000 Free ... NaN NaN NaN 6 \n", "4190 day 7000 Free ... 2019.0 2.0 28.0 3 \n", "4191 day 7000 Free ... NaN NaN NaN 8 \n", "\n", " median mean max sum routine period \n", "0 5.0 4.833333 8 58 1 1460 days \n", "1 5.0 5.083333 7 61 1 1460 days \n", "2 5.0 4.583333 6 55 1 1460 days \n", "3 4.5 4.833333 7 58 1 1460 days \n", "4 3.5 3.750000 5 45 1 1460 days \n", "... ... ... ... ... ... ... \n", "4187 4.0 5.666667 10 17 0 77 days \n", "4188 7.5 7.500000 10 30 1 138 days \n", "4189 7.5 7.250000 8 29 1 137 days \n", "4190 5.0 6.000000 10 18 0 76 days \n", "4191 9.0 9.500000 12 38 1 137 days \n", "\n", "[4192 rows x 23 columns]" ] }, "execution_count": 50, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 코드를 입력해 주세요\n", "# period 컬럼이 NaT인 경우 아직 탈퇴하지않은 회원으로 2019년04월30일을 기준으로 차이를 계산합니다.\n", "user.loc[user['period'].isna(), 'period'] = pd.to_datetime(\"20190430\") - user['start_date']\n", "user" ] }, { "cell_type": "code", "execution_count": 51, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
minmedianmeanmaxsum
count4192.0000004192.0000004192.0000004192.0000004192.000000
mean3.0412695.2505965.3331277.82395047.096374
std1.9515651.8748741.7775332.16895924.218124
min1.0000001.0000001.0000001.0000001.000000
25%2.0000004.0000004.2500007.00000026.000000
50%3.0000005.0000005.0000008.00000053.000000
75%4.0000006.5000006.4166679.00000065.000000
max12.00000012.00000012.00000014.000000105.000000
\n", "
" ], "text/plain": [ " min median mean max sum\n", "count 4192.000000 4192.000000 4192.000000 4192.000000 4192.000000\n", "mean 3.041269 5.250596 5.333127 7.823950 47.096374\n", "std 1.951565 1.874874 1.777533 2.168959 24.218124\n", "min 1.000000 1.000000 1.000000 1.000000 1.000000\n", "25% 2.000000 4.000000 4.250000 7.000000 26.000000\n", "50% 3.000000 5.000000 5.000000 8.000000 53.000000\n", "75% 4.000000 6.500000 6.416667 9.000000 65.000000\n", "max 12.000000 12.000000 12.000000 14.000000 105.000000" ] }, "execution_count": 51, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 코드를 입력해 주세요\n", "# user 데이터 프레임의 min, median, mean, max, sum 컬럼의 기술통계요약정보를 출력하세요.\n", "user[['min', 'median', 'mean', 'max', 'sum']].describe()" ] }, { "cell_type": "code", "execution_count": 52, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1 3413\n", "0 779\n", "Name: routine, dtype: int64" ] }, "execution_count": 52, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 코드를 입력해 주세요\n", "# user 데이터 프레임의 routine 컬럼의 고유값별 개수를 계산하세요\n", "user['routine'].value_counts()" ] }, { "cell_type": "code", "execution_count": 53, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# 코드를 입력해 주세요\n", "# user 데이터 프레임의 period_day 컬럼의 histogram을 그려보세요.\n", "user['period_day'] = user['period'].dt.days\n", "user['period_day'].hist()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# ML (Classification)" ] }, { "cell_type": "code", "execution_count": 54, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
useridclassgenderstart_dateend_dateevent_typeis_deletedclass_namepriceevent_name...end_monthend_dayminmedianmeanmaxsumroutineperiodperiod_day
0OA832399C01F2015-05-01NaTCA10all10000None...NaNNaN25.04.83333385811460 days1460
1PL270116C01M2015-05-01NaTCA10all10000None...NaNNaN35.05.08333376111460 days1460
2OA974876C01M2015-05-01NaTCA10all10000None...NaNNaN35.04.58333365511460 days1460
3HD024127C01F2015-05-01NaTCA1-1all10000None...NaNNaN24.54.83333375811460 days1460
4IK271057C01M2015-05-01NaTCA10all10000None...NaNNaN23.53.75000054511460 days1460
..................................................................
4187IK562610C02F2018-12-132019-02-28CA31day7000Free...2.028.034.05.6666671017077 days77
4188HI599354C02M2018-12-13NaTCA30day7000Free...NaNNaN57.57.50000010301138 days138
4189GD796859C02F2018-12-14NaTCA30day7000Free...NaNNaN67.57.2500008291137 days137
4190GD082270C02F2018-12-142019-02-28CA31day7000Free...2.028.035.06.0000001018076 days76
4191OA426023C02F2018-12-14NaTCA30day7000Free...NaNNaN89.09.50000012381137 days137
\n", "

4192 rows × 24 columns

\n", "
" ], "text/plain": [ " userid class gender start_date end_date event_type is_deleted \\\n", "0 OA832399 C01 F 2015-05-01 NaT CA1 0 \n", "1 PL270116 C01 M 2015-05-01 NaT CA1 0 \n", "2 OA974876 C01 M 2015-05-01 NaT CA1 0 \n", "3 HD024127 C01 F 2015-05-01 NaT CA1 -1 \n", "4 IK271057 C01 M 2015-05-01 NaT CA1 0 \n", "... ... ... ... ... ... ... ... \n", "4187 IK562610 C02 F 2018-12-13 2019-02-28 CA3 1 \n", "4188 HI599354 C02 M 2018-12-13 NaT CA3 0 \n", "4189 GD796859 C02 F 2018-12-14 NaT CA3 0 \n", "4190 GD082270 C02 F 2018-12-14 2019-02-28 CA3 1 \n", "4191 OA426023 C02 F 2018-12-14 NaT CA3 0 \n", "\n", " class_name price event_name ... end_month end_day min median \\\n", "0 all 10000 None ... NaN NaN 2 5.0 \n", "1 all 10000 None ... NaN NaN 3 5.0 \n", "2 all 10000 None ... NaN NaN 3 5.0 \n", "3 all 10000 None ... NaN NaN 2 4.5 \n", "4 all 10000 None ... NaN NaN 2 3.5 \n", "... ... ... ... ... ... ... ... ... \n", "4187 day 7000 Free ... 2.0 28.0 3 4.0 \n", "4188 day 7000 Free ... NaN NaN 5 7.5 \n", "4189 day 7000 Free ... NaN NaN 6 7.5 \n", "4190 day 7000 Free ... 2.0 28.0 3 5.0 \n", "4191 day 7000 Free ... NaN NaN 8 9.0 \n", "\n", " mean max sum routine period period_day \n", "0 4.833333 8 58 1 1460 days 1460 \n", "1 5.083333 7 61 1 1460 days 1460 \n", "2 4.583333 6 55 1 1460 days 1460 \n", "3 4.833333 7 58 1 1460 days 1460 \n", "4 3.750000 5 45 1 1460 days 1460 \n", "... ... ... ... ... ... ... \n", "4187 5.666667 10 17 0 77 days 77 \n", "4188 7.500000 10 30 1 138 days 138 \n", "4189 7.250000 8 29 1 137 days 137 \n", "4190 6.000000 10 18 0 76 days 76 \n", "4191 9.500000 12 38 1 137 days 137 \n", "\n", "[4192 rows x 24 columns]" ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 코드를 입력해 주세요\n", "# user 데이터 프레임을 조회하세요.\n", "user" ] }, { "cell_type": "code", "execution_count": 55, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
genderis_deletedclass_namepriceevent_nameminmaxmedianmaxsumroutineperiod_day
0F0all10000None285.085811460
1M0all10000None375.076111460
2M0all10000None365.065511460
3F-1all10000None274.575811460
4M0all10000None253.554511460
.......................................
4187F1day7000Free3104.01017077
4188M0day7000Free5107.510301138
4189F0day7000Free687.58291137
4190F1day7000Free3105.01018076
4191F0day7000Free8129.012381137
\n", "

4192 rows × 12 columns

\n", "
" ], "text/plain": [ " gender is_deleted class_name price event_name min max median max \\\n", "0 F 0 all 10000 None 2 8 5.0 8 \n", "1 M 0 all 10000 None 3 7 5.0 7 \n", "2 M 0 all 10000 None 3 6 5.0 6 \n", "3 F -1 all 10000 None 2 7 4.5 7 \n", "4 M 0 all 10000 None 2 5 3.5 5 \n", "... ... ... ... ... ... ... ... ... ... \n", "4187 F 1 day 7000 Free 3 10 4.0 10 \n", "4188 M 0 day 7000 Free 5 10 7.5 10 \n", "4189 F 0 day 7000 Free 6 8 7.5 8 \n", "4190 F 1 day 7000 Free 3 10 5.0 10 \n", "4191 F 0 day 7000 Free 8 12 9.0 12 \n", "\n", " sum routine period_day \n", "0 58 1 1460 \n", "1 61 1 1460 \n", "2 55 1 1460 \n", "3 58 1 1460 \n", "4 45 1 1460 \n", "... ... ... ... \n", "4187 17 0 77 \n", "4188 30 1 138 \n", "4189 29 1 137 \n", "4190 18 0 76 \n", "4191 38 1 137 \n", "\n", "[4192 rows x 12 columns]" ] }, "execution_count": 55, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 코드를 입력해 주세요\n", "# user 데이터 프레임에서 다음의 결과와 같이 컬럼을 선택 후 df 변수에 저장하세요.\n", "df = user[['gender', 'is_deleted', 'class_name', 'price', 'event_name', 'min', 'max', 'median', 'max', 'sum', 'routine', 'period_day']]\n", "df" ] }, { "cell_type": "code", "execution_count": 56, "metadata": {}, "outputs": [], "source": [ "# 코드를 입력해 주세요\n", "# df에서 is_deleted 컬럼을 Y로 나머지를 X로 설정하세요\n", "X = df.loc[:, df.columns != 'is_deleted']\n", "Y = df['is_deleted']" ] }, { "cell_type": "code", "execution_count": 57, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
genderclass_namepriceevent_nameminmaxmedianmaxsumroutineperiod_day
0Fall10000None285.085811460
1Mall10000None375.076111460
2Mall10000None365.065511460
3Fall10000None274.575811460
4Mall10000None253.554511460
....................................
4187Fday7000Free3104.01017077
4188Mday7000Free5107.510301138
4189Fday7000Free687.58291137
4190Fday7000Free3105.01018076
4191Fday7000Free8129.012381137
\n", "

4192 rows × 11 columns

\n", "
" ], "text/plain": [ " gender class_name price event_name min max median max sum routine \\\n", "0 F all 10000 None 2 8 5.0 8 58 1 \n", "1 M all 10000 None 3 7 5.0 7 61 1 \n", "2 M all 10000 None 3 6 5.0 6 55 1 \n", "3 F all 10000 None 2 7 4.5 7 58 1 \n", "4 M all 10000 None 2 5 3.5 5 45 1 \n", "... ... ... ... ... ... ... ... ... ... ... \n", "4187 F day 7000 Free 3 10 4.0 10 17 0 \n", "4188 M day 7000 Free 5 10 7.5 10 30 1 \n", "4189 F day 7000 Free 6 8 7.5 8 29 1 \n", "4190 F day 7000 Free 3 10 5.0 10 18 0 \n", "4191 F day 7000 Free 8 12 9.0 12 38 1 \n", "\n", " period_day \n", "0 1460 \n", "1 1460 \n", "2 1460 \n", "3 1460 \n", "4 1460 \n", "... ... \n", "4187 77 \n", "4188 138 \n", "4189 137 \n", "4190 76 \n", "4191 137 \n", "\n", "[4192 rows x 11 columns]" ] }, "execution_count": 57, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 코드를 입력해 주세요\n", "# X를 출력하세요.\n", "X" ] }, { "cell_type": "code", "execution_count": 58, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 0\n", "1 0\n", "2 0\n", "3 -1\n", "4 0\n", " ..\n", "4187 1\n", "4188 0\n", "4189 0\n", "4190 1\n", "4191 0\n", "Name: is_deleted, Length: 4192, dtype: int64" ] }, "execution_count": 58, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 코드를 입력해 주세요\n", "# Y를 출력하세요.\n", "Y" ] }, { "cell_type": "code", "execution_count": 59, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
priceminmaxmedianmaxsumroutineperiod_daygender_Fgender_Mclass_name_allclass_name_dayclass_name_nightevent_name_Freeevent_name_Noneevent_name_Sale
010000285.08581146010100010
110000375.07611146001100010
210000365.06551146001100010
310000274.57581146010100010
410000253.55451146001100010
...................................................
418770003104.0101707710010100
418870005107.51030113801010100
41897000687.5829113710010100
419070003105.0101807610010100
419170008129.01238113710010100
\n", "

4192 rows × 16 columns

\n", "
" ], "text/plain": [ " price min max median max sum routine period_day gender_F \\\n", "0 10000 2 8 5.0 8 58 1 1460 1 \n", "1 10000 3 7 5.0 7 61 1 1460 0 \n", "2 10000 3 6 5.0 6 55 1 1460 0 \n", "3 10000 2 7 4.5 7 58 1 1460 1 \n", "4 10000 2 5 3.5 5 45 1 1460 0 \n", "... ... ... ... ... ... ... ... ... ... \n", "4187 7000 3 10 4.0 10 17 0 77 1 \n", "4188 7000 5 10 7.5 10 30 1 138 0 \n", "4189 7000 6 8 7.5 8 29 1 137 1 \n", "4190 7000 3 10 5.0 10 18 0 76 1 \n", "4191 7000 8 12 9.0 12 38 1 137 1 \n", "\n", " gender_M class_name_all class_name_day class_name_night \\\n", "0 0 1 0 0 \n", "1 1 1 0 0 \n", "2 1 1 0 0 \n", "3 0 1 0 0 \n", "4 1 1 0 0 \n", "... ... ... ... ... \n", "4187 0 0 1 0 \n", "4188 1 0 1 0 \n", "4189 0 0 1 0 \n", "4190 0 0 1 0 \n", "4191 0 0 1 0 \n", "\n", " event_name_Free event_name_None event_name_Sale \n", "0 0 1 0 \n", "1 0 1 0 \n", "2 0 1 0 \n", "3 0 1 0 \n", "4 0 1 0 \n", "... ... ... ... \n", "4187 1 0 0 \n", "4188 1 0 0 \n", "4189 1 0 0 \n", "4190 1 0 0 \n", "4191 1 0 0 \n", "\n", "[4192 rows x 16 columns]" ] }, "execution_count": 59, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# X를 One Hot 변환하세요\n", "X = pd.get_dummies(X)\n", "X" ] }, { "cell_type": "code", "execution_count": 60, "metadata": {}, "outputs": [], "source": [ "# 코드를 입력해 주세요\n", "# X와 Y를 Train 과 Test로 분할하세요.\n", "from sklearn.model_selection import train_test_split\n", "x_train, x_test, y_train, y_test = train_test_split(X, Y, stratify=Y, random_state=0)" ] }, { "cell_type": "code", "execution_count": 61, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(0.8110687022900763, 0.6688931297709924)" ] }, "execution_count": 61, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 코드를 입력해 주세요\n", "# KNN 알고리즘을 이용하여 분류하세요.\n", "from sklearn.neighbors import KNeighborsClassifier\n", "model = KNeighborsClassifier(n_neighbors=3).fit(x_train, y_train)\n", "model.score(x_train, y_train), model.score(x_test, y_test)" ] }, { "cell_type": "code", "execution_count": 62, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(0.7232824427480916, 0.7146946564885496)" ] }, "execution_count": 62, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 코드를 입력해 주세요\n", "# LogisticRegression 알고리즘을 이용하여 분류하세요.\n", "from sklearn.linear_model import LogisticRegression\n", "model = LogisticRegression(max_iter=10000).fit(x_train, y_train)\n", "model.score(x_train, y_train), model.score(x_test, y_test)" ] }, { "cell_type": "code", "execution_count": 63, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(0.7487277353689568, 0.7309160305343512)" ] }, "execution_count": 63, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 코드를 입력해 주세요\n", "# DecisionTree 알고리즘을 이용하여 분류하세요.\n", "from sklearn.tree import DecisionTreeClassifier\n", "model = DecisionTreeClassifier(max_depth=5).fit(x_train, y_train)\n", "model.score(x_train, y_train), model.score(x_test, y_test)" ] }, { "cell_type": "code", "execution_count": 64, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "price 0.004176\n", "min 0.021206\n", "max 0.005352\n", "median 0.341665\n", "max 0.009488\n", "sum 0.548655\n", "routine 0.000000\n", "period_day 0.067465\n", "gender_F 0.000000\n", "gender_M 0.000000\n", "class_name_all 0.000000\n", "class_name_day 0.000000\n", "class_name_night 0.000000\n", "event_name_Free 0.000000\n", "event_name_None 0.000000\n", "event_name_Sale 0.001994\n", "dtype: float64" ] }, "execution_count": 64, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 코드를 입력해 주세요\n", "# feature_importances_를 Series로 변환하세요.\n", "fi = pd.Series(model.feature_importances_, index=X.columns)\n", "fi" ] }, { "cell_type": "code", "execution_count": 66, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# 코드를 입력해 주세요\n", "# 변환된 결과를 시각화 하세요.\n", "fi.sort_values(ascending=False).plot(kind='bar')\n", "plt.show()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.12" } }, "nbformat": 4, "nbformat_minor": 4 }