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'], [0255075100] , [ '청년','중년','장년','노년' ])
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

+ Recent posts