{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n    \ndata_path = '/kaggle/input/bike-sharing-demand/'    \n\ntrain = pd.read_csv(data_path +'train.csv')\ntest = pd.read_csv(data_path + 'test.csv')\nsubmission = pd.read_csv(data_path + 'sampleSubmission.csv')\n\n# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2022-07-28T05:34:00.389860Z","iopub.execute_input":"2022-07-28T05:34:00.390179Z","iopub.status.idle":"2022-07-28T05:34:00.445697Z","shell.execute_reply.started":"2022-07-28T05:34:00.390155Z","shell.execute_reply":"2022-07-28T05:34:00.444491Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train.shape, test.shape","metadata":{"execution":{"iopub.status.busy":"2022-07-28T05:34:00.447339Z","iopub.execute_input":"2022-07-28T05:34:00.447582Z","iopub.status.idle":"2022-07-28T05:34:00.452695Z","shell.execute_reply.started":"2022-07-28T05:34:00.447559Z","shell.execute_reply":"2022-07-28T05:34:00.451835Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train.head()","metadata":{"execution":{"iopub.status.busy":"2022-07-28T05:34:00.482301Z","iopub.execute_input":"2022-07-28T05:34:00.484586Z","iopub.status.idle":"2022-07-28T05:34:00.498475Z","shell.execute_reply.started":"2022-07-28T05:34:00.484551Z","shell.execute_reply":"2022-07-28T05:34:00.497625Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test.head()","metadata":{"execution":{"iopub.status.busy":"2022-07-28T05:34:00.537180Z","iopub.execute_input":"2022-07-28T05:34:00.537586Z","iopub.status.idle":"2022-07-28T05:34:00.554925Z","shell.execute_reply.started":"2022-07-28T05:34:00.537558Z","shell.execute_reply":"2022-07-28T05:34:00.553454Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission.head()","metadata":{"execution":{"iopub.status.busy":"2022-07-28T05:34:00.590290Z","iopub.execute_input":"2022-07-28T05:34:00.590715Z","iopub.status.idle":"2022-07-28T05:34:00.602498Z","shell.execute_reply.started":"2022-07-28T05:34:00.590686Z","shell.execute_reply":"2022-07-28T05:34:00.600891Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train.info()","metadata":{"execution":{"iopub.status.busy":"2022-07-28T05:34:00.632824Z","iopub.execute_input":"2022-07-28T05:34:00.633240Z","iopub.status.idle":"2022-07-28T05:34:00.648216Z","shell.execute_reply.started":"2022-07-28T05:34:00.633208Z","shell.execute_reply":"2022-07-28T05:34:00.646683Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test.info()","metadata":{"execution":{"iopub.status.busy":"2022-07-28T05:34:00.671646Z","iopub.execute_input":"2022-07-28T05:34:00.672060Z","iopub.status.idle":"2022-07-28T05:34:00.693295Z","shell.execute_reply.started":"2022-07-28T05:34:00.672029Z","shell.execute_reply":"2022-07-28T05:34:00.692409Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(train['datetime'][100]) #데이터 이름['피쳐이름'][원소번호] # 문자열처럼 다룰 수 있는 object type\nprint(train['datetime'][100].split()) #.split()괄호속의 문자를 바탕으로 값 나누기\nprint(train['datetime'][100].split()[0]) #.split()괄호속의 문자를 바탕으로 값 나누기한 것의 앞쪽 부분\nprint(train['datetime'][100].split()[1]) #.split()괄호속의 문자를 바탕으로 값 나누기한 것의 뒤쪽 부분","metadata":{"execution":{"iopub.status.busy":"2022-07-28T05:34:00.708901Z","iopub.execute_input":"2022-07-28T05:34:00.709321Z","iopub.status.idle":"2022-07-28T05:34:00.718053Z","shell.execute_reply.started":"2022-07-28T05:34:00.709285Z","shell.execute_reply":"2022-07-28T05:34:00.716909Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(train['datetime'][100].split()[0]) #.split()괄호속의 문자를 바탕으로 값 나누기한 것의 앞쪽 부분 = 날짜\nprint(train['datetime'][100].split()[0].split(\"-\"))#.split()괄호속의 문자를 바탕으로 값 나누기한 것의 뒤쪽 부분\nprint(train['datetime'][100].split()[0].split(\"-\")[0]) #연도\nprint(train['datetime'][100].split()[0].split(\"-\")[1]) #월\nprint(train['datetime'][100].split()[0].split(\"-\")[2]) #일","metadata":{"execution":{"iopub.status.busy":"2022-07-28T05:34:00.738756Z","iopub.execute_input":"2022-07-28T05:34:00.739195Z","iopub.status.idle":"2022-07-28T05:34:00.747812Z","shell.execute_reply.started":"2022-07-28T05:34:00.739164Z","shell.execute_reply":"2022-07-28T05:34:00.746802Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(train['datetime'][100].split()[1]) #.split()괄호속의 문자를 바탕으로 값 나누기한 것의 앞쪽 부분 = 날짜\nprint(train['datetime'][100].split()[1].split(\":\"))#.split()괄호속의 문자를 바탕으로 값 나누기한 것의 뒤쪽 부분\nprint(train['datetime'][100].split()[1].split(\":\")[0]) #연도\nprint(train['datetime'][100].split()[1].split(\":\")[1]) #월\nprint(train['datetime'][100].split()[1].split(\":\")[2]) #일","metadata":{"execution":{"iopub.status.busy":"2022-07-28T05:34:00.763235Z","iopub.execute_input":"2022-07-28T05:34:00.763609Z","iopub.status.idle":"2022-07-28T05:34:00.770931Z","shell.execute_reply.started":"2022-07-28T05:34:00.763582Z","shell.execute_reply":"2022-07-28T05:34:00.769874Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 새로운 피쳐 만들기(파생피쳐): pandas apply()이용, lambda와 함께","metadata":{}},{"cell_type":"code","source":"train['date'] = train['datetime'].apply(lambda x: x.split()[0]) #date피쳐는 datetime의 공백 앞쪽부분으로 한다\n\ntrain['year'] = train['datetime'].apply(lambda x: x.split()[0].split('-')[0])\ntrain['month'] = train['datetime'].apply(lambda x: x.split()[0].split('-')[1])\ntrain['day'] = train['datetime'].apply(lambda x: x.split()[0].split('-')[2])\ntrain['hour'] = train['datetime'].apply(lambda x: x.split()[1].split(':')[0])\ntrain['minute'] = train['datetime'].apply(lambda x: x.split()[1].split(':')[1])\ntrain['second'] = train['datetime'].apply(lambda x: x.split()[1].split(':')[2])\n","metadata":{"execution":{"iopub.status.busy":"2022-07-28T05:34:00.789880Z","iopub.execute_input":"2022-07-28T05:34:00.791080Z","iopub.status.idle":"2022-07-28T05:34:00.870933Z","shell.execute_reply.started":"2022-07-28T05:34:00.791050Z","shell.execute_reply":"2022-07-28T05:34:00.869700Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 파생피쳐를 이용해서 새로운 피쳐 만들기 (날짜 -> 요일)","metadata":{}},{"cell_type":"code","source":"from datetime import datetime\nimport calendar\n\nprint(train['date'][100])\nprint(datetime.strptime(train['date'][100], '%Y-%m-%d')) \nprint(datetime.strptime(train['date'][100], '%Y-%m-%d').weekday()) #요일로 변경, 정수타입\nprint(calendar.day_name[datetime.strptime(train['date'][100], '%Y-%m-%d').weekday()]) #요일로 변경, 문자열타입\n","metadata":{"execution":{"iopub.status.busy":"2022-07-28T05:34:00.873003Z","iopub.execute_input":"2022-07-28T05:34:00.873940Z","iopub.status.idle":"2022-07-28T05:34:00.882637Z","shell.execute_reply.started":"2022-07-28T05:34:00.873893Z","shell.execute_reply":"2022-07-28T05:34:00.881215Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train['weekday'] = train['date'].apply(\n    lambda dateString:\n    calendar.day_name[datetime.strptime(dateString, '%Y-%m-%d').weekday()])","metadata":{"execution":{"iopub.status.busy":"2022-07-28T05:34:00.884194Z","iopub.execute_input":"2022-07-28T05:34:00.884499Z","iopub.status.idle":"2022-07-28T05:34:01.014762Z","shell.execute_reply.started":"2022-07-28T05:34:00.884471Z","shell.execute_reply":"2022-07-28T05:34:01.014103Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train['season'] = train['season'].map({1: 'Spring',\n                                     2: 'Summer',\n                                     3: 'Fall', \n                                     4: 'Winter'})\ntrain['weather'] = train['weather'].map({1: 'Clear', \n                                         2: 'Most, Few Clouds', \n                                         3: 'Light Snow, Rain, Thunderstorm', \n                                         4: 'Heavy Rain, Thunderstorm, Snow, Fog'})","metadata":{"execution":{"iopub.status.busy":"2022-07-28T05:34:01.016175Z","iopub.execute_input":"2022-07-28T05:34:01.016994Z","iopub.status.idle":"2022-07-28T05:34:01.023920Z","shell.execute_reply.started":"2022-07-28T05:34:01.016971Z","shell.execute_reply":"2022-07-28T05:34:01.022590Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train.head()","metadata":{"execution":{"iopub.status.busy":"2022-07-28T05:34:01.025416Z","iopub.execute_input":"2022-07-28T05:34:01.027772Z","iopub.status.idle":"2022-07-28T05:34:01.052755Z","shell.execute_reply.started":"2022-07-28T05:34:01.027740Z","shell.execute_reply":"2022-07-28T05:34:01.051983Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 데이터 시각화","metadata":{}},{"cell_type":"code","source":"import seaborn as sns\nimport matplotlib as mpl\nimport matplotlib.pyplot as plt\n%matplotlib inline","metadata":{"execution":{"iopub.status.busy":"2022-07-28T05:34:01.053977Z","iopub.execute_input":"2022-07-28T05:34:01.054794Z","iopub.status.idle":"2022-07-28T05:34:01.062226Z","shell.execute_reply.started":"2022-07-28T05:34:01.054757Z","shell.execute_reply":"2022-07-28T05:34:01.061207Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"mpl.rc('font', size = 15)\nsns.displot(train['count']);","metadata":{"execution":{"iopub.status.busy":"2022-07-28T05:34:01.063730Z","iopub.execute_input":"2022-07-28T05:34:01.063971Z","iopub.status.idle":"2022-07-28T05:34:01.387475Z","shell.execute_reply.started":"2022-07-28T05:34:01.063945Z","shell.execute_reply":"2022-07-28T05:34:01.386105Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"타깃값이 정규분포를 따르지 않아 그ㅐ로 모델링하면 성능이 좋지 않을 것. 로그변환으로 몰려있는 데이터들을 세분화시킴\n\n-> 몰려있는 구간을 더 잘게 쪼개고, 덜 몰려있는 구간은 퉁침으로써 의미가 잘 드러나게 하기 \n\n-> titanic 예제에서 sibsp나 parch를 \"0, 1이상\"으로 구분하여 만든 것과 동일\n\n다만 모든 과정을 끝낸 뒤 다시 지수변환 해주기!","metadata":{}},{"cell_type":"code","source":"sns.displot(np.log(train['count']));","metadata":{"execution":{"iopub.status.busy":"2022-07-28T05:34:01.389180Z","iopub.execute_input":"2022-07-28T05:34:01.389524Z","iopub.status.idle":"2022-07-28T05:34:01.690156Z","shell.execute_reply.started":"2022-07-28T05:34:01.389500Z","shell.execute_reply":"2022-07-28T05:34:01.689073Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 막대그래프","metadata":{}},{"cell_type":"markdown","source":"여러 개의 막대그래프를 한 화면에 보이게 함으로서 정보를 비교하여 살펴볼 수 있도록 (n행, m열)","metadata":{}},{"cell_type":"code","source":"mpl.rc('font', size = 14)\nmpl.rc('axes', titlesize = 15) # 각 축의 제목 크기 설정\nfigure, axes = plt.subplots(nrows = 3, ncols = 2) # 3행 2열의 figure 생성\nplt.tight_layout() # 그래프 사이 여백 확보\nfigure.set_size_inches(10, 9) # 전체 figure 크기 설정","metadata":{"execution":{"iopub.status.busy":"2022-07-28T05:34:01.693273Z","iopub.execute_input":"2022-07-28T05:34:01.693611Z","iopub.status.idle":"2022-07-28T05:34:02.267320Z","shell.execute_reply.started":"2022-07-28T05:34:01.693584Z","shell.execute_reply":"2022-07-28T05:34:02.265721Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"axes","metadata":{"execution":{"iopub.status.busy":"2022-07-28T05:34:02.269127Z","iopub.execute_input":"2022-07-28T05:34:02.269573Z","iopub.status.idle":"2022-07-28T05:34:02.276600Z","shell.execute_reply.started":"2022-07-28T05:34:02.269543Z","shell.execute_reply":"2022-07-28T05:34:02.275467Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"mpl.rc('font', size = 14)\nmpl.rc('axes', titlesize = 15) # 각 축의 제목 크기 설정\nfigure, axes = plt.subplots(nrows = 3, ncols = 2) # 3행 2열의 figure 생성\nplt.tight_layout() # 그래프 사이 여백 확보\nfigure.set_size_inches(10, 9) # 전체 figure 크기 설정\n\nsns.barplot(x = 'year', y = 'count', data = train, ax = axes[0, 0])\nsns.barplot(x = 'month', y = 'count', data = train, ax = axes[0, 1])\nsns.barplot(x = 'day', y = 'count', data = train, ax = axes[1, 0])\nsns.barplot(x = 'hour', y = 'count', data = train, ax = axes[1, 1])\nsns.barplot(x = 'minute', y = 'count', data = train, ax = axes[2, 0])\nsns.barplot(x = 'second', y = 'count', data = train, ax = axes[2, 1])","metadata":{"execution":{"iopub.status.busy":"2022-07-28T05:34:02.278061Z","iopub.execute_input":"2022-07-28T05:34:02.278445Z","iopub.status.idle":"2022-07-28T05:34:06.092391Z","shell.execute_reply.started":"2022-07-28T05:34:02.278409Z","shell.execute_reply":"2022-07-28T05:34:06.091379Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"mpl.rc('font', size = 14)\nmpl.rc('axes', titlesize = 15) # 각 축의 제목 크기 설정\nfigure, axes = plt.subplots(nrows = 3, ncols = 2) # 3행 2열의 figure 생성\nplt.tight_layout() # 그래프 사이 여백 확보\nfigure.set_size_inches(10, 9) # 전체 figure 크기 설정\n\nsns.barplot(x = 'year', y = 'count', data = train, ax = axes[0, 0])\nsns.barplot(x = 'month', y = 'count', data = train, ax = axes[0, 1])\nsns.barplot(x = 'day', y = 'count', data = train, ax = axes[1, 0])\nsns.barplot(x = 'hour', y = 'count', data = train, ax = axes[1, 1])\nsns.barplot(x = 'minute', y = 'count', data = train, ax = axes[2, 0])\nsns.barplot(x = 'second', y = 'count', data = train, ax = axes[2, 1])\n\naxes[0,0].set(title = 'Rental amounts by year')\naxes[0,1].set(title = 'Rental amounts by month')\naxes[1,0].set(title = 'Rental amounts by day')\naxes[1,1].set(title = 'Rental amounts by hour')\naxes[2,0].set(title = 'Rental amounts by minute')\naxes[2,1].set(title = 'Rental amounts by second')\n\naxes[1,0].tick_params(axis = 'x', labelrotation = 90)\naxes[1,1].tick_params(axis = 'x', labelrotation = 90)","metadata":{"execution":{"iopub.status.busy":"2022-07-28T05:34:06.093786Z","iopub.execute_input":"2022-07-28T05:34:06.094096Z","iopub.status.idle":"2022-07-28T05:34:08.986042Z","shell.execute_reply.started":"2022-07-28T05:34:06.094060Z","shell.execute_reply":"2022-07-28T05:34:08.984845Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 박스플롯: 각각의 피쳐별 대여율","metadata":{}},{"cell_type":"code","source":"figure, axes = plt.subplots(nrows = 2, ncols = 2)\nplt.tight_layout()\nfigure.set_size_inches(10,10)\n\nsns.boxplot(x = 'season', y = 'count', data = train, ax = axes[0,0])\nsns.boxplot(x = 'weather', y = 'count', data = train, ax = axes[0,1])\nsns.boxplot(x = 'holiday', y = 'count', data = train, ax = axes[1,0])\nsns.boxplot(x = 'workingday', y = 'count', data = train, ax = axes[1,1])\n\naxes[0,0].set(title = 'Box Plot On Count Across Season')\naxes[0,1].set(title = 'Box Plot On Count Across Weather')\naxes[1,0].set(title = 'Box Plot On Count Across Holiday')\naxes[1,1].set(title = 'Box Plot On Count Across Working Day')\n\naxes[0,1].tick_params(axis = 'x', labelrotation = 10)","metadata":{"execution":{"iopub.status.busy":"2022-07-28T05:34:08.987461Z","iopub.execute_input":"2022-07-28T05:34:08.988429Z","iopub.status.idle":"2022-07-28T05:34:09.621220Z","shell.execute_reply.started":"2022-07-28T05:34:08.988397Z","shell.execute_reply":"2022-07-28T05:34:09.620225Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 포인트플롯: 시간펼 대여율 추이\n\n# 각각의 피쳐별로 그래프를 나타내어 같은 시간대에 계절, 날씨, 요일, 공휴일여부, 근무일여부 등이 미치는 영향 살펴볼 수 있음.","metadata":{}},{"cell_type":"code","source":"mpl.rc('font', size = 11)\nfigure, axes = plt.subplots(nrows = 5)\nfigure.set_size_inches(12, 18)\n\nsns.pointplot(x='hour', y='count', data = train, hue = 'workingday', ax = axes[0])\nsns.pointplot(x='hour', y='count', data = train, hue = 'holiday', ax = axes[1])\nsns.pointplot(x='hour', y='count', data = train, hue = 'weekday', ax = axes[2])\nsns.pointplot(x='hour', y='count', data = train, hue = 'season', ax = axes[3])\nsns.pointplot(x='hour', y='count', data = train, hue = 'weather', ax = axes[4]); #그래프 보면 폭우폭설 6건 대여 = 이상치이므로 추후 제거","metadata":{"execution":{"iopub.status.busy":"2022-07-28T05:34:09.622599Z","iopub.execute_input":"2022-07-28T05:34:09.622914Z","iopub.status.idle":"2022-07-28T05:34:23.174289Z","shell.execute_reply.started":"2022-07-28T05:34:09.622883Z","shell.execute_reply":"2022-07-28T05:34:23.173384Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 회귀선을 포함한 산점도 그래츠: 수치형 데이터 간의 상관관계","metadata":{}},{"cell_type":"code","source":"mpl.rc('font', size = 15)\nfigure, axes = plt.subplots(nrows = 2, ncols = 2)\nplt.tight_layout()\nfigure.set_size_inches(7,6)\n\nsns.regplot(x = 'temp', y= 'count', data=train, ax = axes[0,0], \n           scatter_kws = {'alpha': 0.2}, line_kws = {'color' : 'blue'}) #scatter_kws = {'alpha': 0.2}: 투명도\nsns.regplot(x = 'atemp', y= 'count', data=train, ax = axes[0,1], \n           scatter_kws = {'alpha': 0.2}, line_kws = {'color' : 'blue'})\nsns.regplot(x = 'windspeed', y= 'count', data=train, ax = axes[1,0], \n           scatter_kws = {'alpha': 0.2}, line_kws = {'color' : 'blue'})\nsns.regplot(x = 'humidity', y= 'count', data=train, ax = axes[1,1], \n           scatter_kws = {'alpha': 0.2}, line_kws = {'color' : 'blue'})","metadata":{"execution":{"iopub.status.busy":"2022-07-28T05:34:23.175620Z","iopub.execute_input":"2022-07-28T05:34:23.175853Z","iopub.status.idle":"2022-07-28T05:34:26.336678Z","shell.execute_reply.started":"2022-07-28T05:34:23.175822Z","shell.execute_reply":"2022-07-28T05:34:26.335545Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"풍속의 경우 풍속 측정치가 0인 결측값(값이 없거나 오류로 인해 0이 된 경우도 많을 듯)때문에 회귀선이 풍속이 셀 수록 대여량이 많은 것으로 기록됨 -> 피쳐 자체를 삭제하거나 결측값 없애기","metadata":{}},{"cell_type":"markdown","source":"나중에 결측값 삭제하기(+x범위 조정하기) 배우면 시도해서 회귀선이 어떻게 달라지는 지 확인","metadata":{}},{"cell_type":"markdown","source":"# 히트맵","metadata":{}},{"cell_type":"code","source":"train[['temp', 'atemp', 'humidity', 'windspeed', 'count']].corr()","metadata":{"execution":{"iopub.status.busy":"2022-07-28T05:34:26.338550Z","iopub.execute_input":"2022-07-28T05:34:26.339012Z","iopub.status.idle":"2022-07-28T05:34:26.358321Z","shell.execute_reply.started":"2022-07-28T05:34:26.338973Z","shell.execute_reply":"2022-07-28T05:34:26.357400Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"corrMat = train[['temp', 'atemp', 'humidity', 'windspeed', 'count']].corr()\nfig, ax = plt.subplots()\nfig.set_size_inches(10,10)\nsns.heatmap(corrMat, annot = True)\nax.set(title = 'Heatmap of Numerical Data')","metadata":{"execution":{"iopub.status.busy":"2022-07-28T05:34:26.359053Z","iopub.execute_input":"2022-07-28T05:34:26.359264Z","iopub.status.idle":"2022-07-28T05:34:26.601406Z","shell.execute_reply.started":"2022-07-28T05:34:26.359242Z","shell.execute_reply":"2022-07-28T05:34:26.600471Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"풍속은 상관계수가 0.1로 매우 작으니 상관관계가 약하여 피쳐 삭제 조치\ncount 와의 관계를 보는 것이니 가장 아랫줄과 가장 오른쪽 줄만을 보면 됨","metadata":{}},{"cell_type":"markdown","source":"# 베이스라인 모델","metadata":{}},{"cell_type":"code","source":"import pandas as pd\n\n# 이상치 제거 (폭우 폭설날 대여 건)\ntrain = train[train['weather'] != 'Heavy Rain, Thunderstorm, Snow, Fog']\n\n# 데이터 합치지\nall_data = pd.concat([train, test], ignore_index=True)\nall_data","metadata":{"execution":{"iopub.status.busy":"2022-07-28T05:34:26.602477Z","iopub.execute_input":"2022-07-28T05:34:26.602969Z","iopub.status.idle":"2022-07-28T05:34:26.650231Z","shell.execute_reply.started":"2022-07-28T05:34:26.602938Z","shell.execute_reply":"2022-07-28T05:34:26.649167Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 파생 피쳐 추가","metadata":{}},{"cell_type":"code","source":"#from datetime import datetime\n\n#all_data['date'] = all_data['datetime'].aply(lambda x : x.split()[0])","metadata":{},"execution_count":null,"outputs":[]}]}