1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 | # -*- coding: utf-8 -*- """Day 09_Mission_titanic_apply.ipynb Automatically generated by Colaboratory. Original file is located at """ from google.colab import drive drive.mount('/gdrive') PATH = "/gdrive/My Drive/Colab Notebooks/resources/" # %matplotlib inline import numpy as np import matplotlib.pyplot as plt import matplotlib as mpl import pandas as pd import seaborn as sns import time from scipy.stats import norm, multivariate_normal # installing packages for interactive graphs import ipywidgets as widgets from IPython.display import display from ipywidgets import interact, interactive, fixed, interact_manual, IntSlider @interact_manual( x =IntSlider(0,0,12) ) def test_model( x ): print(x) """1) 세 개의 나이 그룹을 만든다. 2) 성별, 선실, 나이 그룹에 의한 생존율을 데이터프레임으로 계산. - 행에는 성별 및 나이 그룹에 대한 다중 인덱스를 사용하고 - 열에는 선실 인덱스를 사용. 3) 성별 및 선실에 의한 생존율을 피봇 데이터 형태로 만든다. 4)bins = [1, 15, 25, 35, 60, 99] labels = ["미성년자", "청년", "중년", "장년", "노년"] 타이타닉호 승객을 사망자와 생존자 그룹으로 나누고 각 그룹에 대해 '미성년자', '청년', '중년', '장년', '노년' 승객의 비율을 구한다. 각 그룹 별로 비율의 전체 합은 1이 되어야 한다. 2. 아래의 작업은 임의의 데이터로 수행한다. 1) 회사의 상반기(1월~6월) 실적을 나타내는 데이터프레임과 하반기(7월~12월) 실적을 나타내는 데이터프레임을 만든 뒤 합친다. - 실적 정보는 "매출", "비용", "이익" 으로 이루어진다. (이익 = 매출 - 비용). 2) 1년간의 총 실적을 마지막 행으로 덧붙인다. """ ################################### ######### Helper Function ######### ################################### # df와 컬럼 이름 리스트를 받아서 해당 컬럼에 na가 있는 행은 다 날리는 함수 def my_df_dropNas(df, columns): for col in columns: df = df[ df[col].notna() ] return df def my_bins_get(arr, percentile , label): bins = [ np.percentile(arr, per) for per in percentile ] label = list(label) return [bins, label] def my_checkNas( x ): y = x.apply(lambda x : ( sum(x.isna()) )) return y titanic = sns.load_dataset("titanic") my_checkNas(titanic) ## 각 열에 널 제거 df = my_df_dropNas(titanic, [ 'age', 'embarked', 'embark_town' ]) # 널체크 my_checkNas(df) ## 데크 컬럼 분리 deck = df.pop('deck') deck[:2] # 널체크 my_checkNas(df) ## age 분포 시각화 sns.distplot(df['age']) ## 적당한 비율로 구간화 할 bins 얻기 bins = my_bins_get(df['age'], [0, 25, 50, 75, 100] , [ '청년','중년','장년','노년' ]) df['age_cut'] = pd.cut( df['age'], bins = bins[0], labels = bins[1] ,include_lowest = True) print(bins) #[0.42, 20.0, 28.0, 38.0, 80.0], [0, 1, 2, 3] df[:2] ## 한글 값 때문에 출력이 안됩니다. 임시로 숫자로 바꾸고 출력했어요. sns.distplot(df['age_cut']) ## 성별, 나이 행, 선실 열 ## 전체 생존자 대비 각 그룹별 생존률 df_suvProb = df.pivot_table( index = ['age_cut', 'sex'], columns = 'pclass', values = 'survived', aggfunc = lambda x : ( sum(x) / sum(df['survived']) )) ## 다 더해서 1이 나와야 한다. df_suvProb """2.""" # agg : df -> scalar apply : df -> df ## 생존 여부별, 나이대 비율 df.groupby(['survived', 'age_cut']).size().groupby(level = 0).apply(lambda x : x / float(x.sum())) | cs |
'딥러닝 모델 설계 > Machine Learning' 카테고리의 다른 글
Day 11_Web Scraping (0) | 2019.07.17 |
---|---|
Day 10_DecisionTree_With_Preprocessing (0) | 2019.07.17 |
Day 09_TimeSeries (0) | 2019.07.12 |
Day 09_bitly_Json_Dictionary_List_Advenced (0) | 2019.07.12 |
Day 08. Movielens_Analysis (0) | 2019.07.11 |