데이터 분석 대회 Kaggle에 나왔던 타이타닉 데이터로 로지스틱 회귀분석 연습을 해보았습니다. 데이터를 통해 성별, 나이, 객실 등급이 승객의 생존에 어떤 영향을 끼쳤는지 분석해 볼 수 있습니다.



알아보고 싶은 것은 "성별(Sex), 나이(Age), 객실등급(Pclass), 요금?(Fare) 가 생존에 어떻게 어느정도의 영향을 미쳤는가?" 입니다.


=============================================================================================

 

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
 
# 2015. 8. 5 
 
import pandas as pd
import statsmodels.api as sm
import pylab as pl
import numpy as np
import test2
 
df = pd.read_csv("c:/train2.csv"# read file
 
print df.head()
 
cols_to_keep = ['Survived''Age''Fare'# 분류할 수 없는 컬럼들
 
# 분류할 수 있는 컬럼들은 더미 컬럼를 만든다.
dummy_Pclass = pd.get_dummies(df['Pclass'], prefix='Pclass')
dummy_Sex = pd.get_dummies(df['Sex'], prefix='Sex')
 
# 더미를 데이터에 이어 붙인다.
data = df[cols_to_keep].join(dummy_Pclass.ix[:,'Pclass_2':]) # Pclass_2 부터 이어 붙임. 이래야 분석에 편리함
data = data.join(dummy_Sex.ix[:,'Sex_male':]) # Sex_male만 이어 붙임
 
data['intercept'= 1.0
 
# 지금까지의 데이터 확인
print data.head()
 
 
# 출력창에 다음과 같이 뜸
#   Survived  Age     Fare  Pclass_2  Pclass_3  Sex_male  intercept
#0         0   22   7.2500         0         1         1          1
#1         1   38  71.2833         0         0         0          1
#2         1   26   7.9250         0         1         0          1
#3         1   35  53.1000         0         0         0          1
#4         0   35   8.0500         0         1         1          1
 
 
# logistic regression
train_cols = data.columns[1:] # train_cols는 설명 변수
logit = sm.Logit(data['Survived'], data[train_cols]) # Survived는 목적 변수
 
# fit the model
result = logit.fit() 
 
print result.summary() # 분석결과 출력
 
#==============================================================================
#                 coef    std err          z      P>|z|      [95.0% Conf. Int.]
#------------------------------------------------------------------------------
#Age           -0.0330      0.007     -4.457      0.000        -0.048    -0.019
#Fare           0.0007      0.002      0.340      0.734        -0.003     0.005
#Pclass_2      -1.0809      0.286     -3.778      0.000        -1.642    -0.520
#Pclass_3      -2.2794      0.280     -8.142      0.000        -2.828    -1.731
#Sex_male      -2.6049      0.188    -13.881      0.000        -2.973    -2.237
#intercept      3.4772      0.418      8.318      0.000         2.658     4.297
#==============================================================================
 
# odds ratios only
print np.exp(result.params) # 오즈 비(Odds Ratio) 출력
 
#Age           0.967515
#Fare          1.000714
#Pclass_2      0.339281
#Pclass_3      0.102351
#Sex_male      0.073911
#intercept    32.367967
 
data["predict"= result.predict(data[train_cols])
print data.head()
 
# 최종결과 (predict가 생존확률)
#   Survived  Age     Fare  Pclass_2  Pclass_3  Sex_male  intercept   predict
#0         0   22   7.2500         0         1         1          1  0.106363
#1         1   38  71.2833         0         0         0          1  0.906625
#2         1   26   7.9250         0         1         0          1  0.585365
#3         1   35  53.1000         0         0         0          1  0.913663
#4         0   35   8.0500         0         1         1          1  0.071945
cs




분석 결과 정리


coef(편회귀계수)의 부호만을 봤을 때, 나이가 많을 수록, 여자보다는 남자일 수록, 1등급보다는 2등급, 3등급일 수록, 요금이 적을 수록 생존확률이 낮아졌다. 또한 coef의 절대값으로 미루어보면 성별이 생존여부에 가장 큰 영향을 미치는 것을 알 수 있었다.



용어


Odds Ratio 

Odds Ratio란 Odds의 비율이다. Odds란 성공/실패와 같이 상호 배타적이며 전체를 이루고 있는 것들의 비율을 의미한다. 예를 들어 남자 승객의 경우 577명중 109명이 생존했다. 이 경우 Odds = P(생존)/P(사망) = (109/577)/(468/577) = 0.19/0.81 = 0.23

여자 승객의 경우 314명중 233명이 생존했다. 이 경우 Odds = P(생존)/P(사망) = (233/314)/(81/314) = 2.87

따라서 Odds Ratio = 0.23/2.87 = 약 0.08


http://blog.yhathq.com/posts/logistic-regression-and-python.html


알고 싶은 것 : GPA, GRE, 모교 우선순위(prestige) 가 대학원 입학 여부에 어떻게 영향을 미치는가?

---------------------------------------------------------------------------------------------------------------------------

위의 블로그의 내용을 요약한 글입니다. 정리한 글은 위의 블로그에 더욱 자세하게 설명되어 있습니다.
환경 : python 2.7, eclipse pydev

1. 데이터 읽기
 
1
2
3
4
5
6
7
8
9
10
11
12
import pandas as pd
import statsmodels.api as sm
import pylab as pl
import numpy as np
 
 
print df.head()
 
df.columns = ["admit""gre""gpa""prestige"# df의 column 이름 바꾸기
print df.columns
 
cs


2. 데이터 요약하기

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
print df.describe() # 빈도수, 평균, 분산, 최솟값, 최댓값, 1/4분위수, 중위값, 1/4분위수를 나타냄
 
#             admit         gre         gpa   prestige
# count  400.000000  400.000000  400.000000  400.00000
# mean     0.317500  587.700000    3.389900    2.48500
# std      0.466087  115.516536    0.380567    0.94446
# min      0.000000  220.000000    2.260000    1.00000
# 25%      0.000000  520.000000    3.130000    2.00000
# 50%      0.000000  580.000000    3.395000    2.00000
# 75%      1.000000  660.000000    3.670000    3.00000
# max      1.000000  800.000000    4.000000    4.00000
 
print df.std() # 분산 출력
 
# admit      0.466087
# gre      115.516536
# gpa        0.380567
# prestige   0.944460
 
print pd.crosstab(df['admit'], df['prestige'], rownames=['admit'])
 
# prestige   1   2   3   4
# admit                   
# 0         28  97  93  55
# 1         33  54  28  12
 
df.hist()
pl.show() # pl.show()를 해야 화면에 띄워준다! 결과는 아래와 같다. 모든 컬럼에 대해 히스토그램을 그림
cs

3. 더미변수로 고치기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
dummy_ranks = pd.get_dummies(df['prestige'], prefix='prestige')
print dummy_ranks.head()
 
#    prestige_1  prestige_2  prestige_3  prestige_4
# 0           0           0           1           0
# 1           0           0           1           0
# 2           1           0           0           0
# 3           0           0           0           1
# 4           0           0           0           1
 
cols_to_keep = ['admit''gre''gpa']
data = df[cols_to_keep].join(dummy_ranks.ix[:, 'prestige_2':])
print data.head()
#    admit  gre   gpa  prestige_2  prestige_3  prestige_4
# 0      0  380  3.61           0           1           0
# 1      1  660  3.67           0           1           0
# 2      1  800  4.00           0           0           0
# 3      1  640  3.19           0           0           1
# 4      0  520  2.93           0           0           1
 
data['intercept'= 1.0
 
cs

4. 회귀분석을 시행한다.

1
2
3
4
5
6
train_cols = data.columns[1:]
logit = sm.Logit(data['admit'], data[train_cols])
result = logit.fit()
print result.summary()
 
 
cs
              Logit Regression Results                           
          ==============================================================================
          Dep. Variable:                  admit   No. Observations:                  400
          Model:                          Logit   Df Residuals:                      394
          Method:                           MLE   Df Model:                            5
          Date:                Sun, 03 Mar 2013   Pseudo R-squ.:                 0.08292
          Time:                        12:34:59   Log-Likelihood:                -229.26
          converged:                       True   LL-Null:                       -249.99
                                                  LLR p-value:                 7.578e-08
          ==============================================================================
                           coef    std err          z      P>|z|      [95.0% Conf. Int.]
          ------------------------------------------------------------------------------
          gre            0.0023      0.001      2.070      0.038         0.000     0.004
          gpa            0.8040      0.332      2.423      0.015         0.154     1.454
          prestige_2    -0.6754      0.316     -2.134      0.033        -1.296    -0.055
          prestige_3    -1.3402      0.345     -3.881      0.000        -2.017    -0.663
          prestige_4    -1.5515      0.418     -3.713      0.000        -2.370    -0.733
          intercept     -3.9900      1.140     -3.500      0.000        -6.224    -1.756
          ==============================================================================

coef에 주목한다. gre:0.0023 gpa :0.840, prestige_2 : -0.6754 등등...
coef(편회귀계수)의 값이 양수이면 그 컬럼의 값이 커질수록 목적변수가 TRUE일 확률 즉, admit=1일 확률이 높아진다.
반대로 coef의 값이 음수이면 그 컬럼의 값이 커질수록 목적변수가 FALSE일 확률 즉, admin=0일 확률이 높아진다.

즉 GRE나 GPA가 커질수록 대학원에 입학할 확률은 커지고 prestige_2, prestige_3이 커질수록 대학원에 입학할 확률은 작아진다. 
이러한 경향은 pretige가 낮아질수록 심해진다.


5. odds ratio

1
2
3
4
5
6
7
print np.exp(result.params)
# gre 1.002267
# gpa 2.234545
# prestige_2 0.508931
# prestige_3 0.261792
# prestige_4 0.211938
# intercept 0.018500
cs

 


Keras With Theano Backend 설치



Keras를 Theano를 Backend로 해서 설치하는 방법입니다.

아래와 같이 gcc를 설치하고, 이를 파이썬에서 이용할 라이브러리들을 설치한후,

Theano와 Keras를 차례대로 설치하시면 됩니다.


  • Install TDM GCC x64.
  • Install Anaconda x64.
  • Open the Anaconda prompt
  • Run conda update conda
  • Run conda update --all
  • Run conda install mingw libpython
  • Install the latest version of Theano, pip install git+git://github.com/Theano/Theano.git
  • Run pip install git+git://github.com/fchollet/keras.git


이렇게 설치 과정이 복잡한 이유는 Keras뒤에 Theano가 있고 Theano는 또 C++로 구현되어 있기 때문입니다. 

만약 gcc를 설치하지 않고 Keras를 사용하게 되면 Python으로 구현된 Theano를 Backend로 해서 돌아가게되는데

이 경우 속도는 gcc를 설치하지 않았을 때와 비교하여 현저하게 낮습니다.  

따라서 Keras with Theano를 이용할 때는 꼭 gcc를 설치하는 것이 좋습니다.


출처


http://stackoverflow.com/questions/34097988/how-do-i-install-keras-and-theano-in-anaconda-python-2-7-on-windows

/**

NbViewer를 통해 Jupyter Notebook Share하기

작성자 : 3개월

2016/11/7

*/


Jupyter notebook으로 작성한 코드를 누군가와 공유하고 싶을 때

Nbviewer를 사용하면 간편하게 웹을 통해 코드와 코드의 실행 결과를 공유할 수 있다.

방법은 github gist에 ipynb를 업로드한 후 gist 코드를 Nbviewer 웹 페이지에 입력만 하면 된다.



이 절차는 아래와 같다. (iPython의 notebook 파일인 ipynb를 기준으로 설명한다.)


1. https://gist.github.com/ 에 접속한다.


2. 공유하고 싶은 .ipynb 파일의 raw source를 복사해서 붙여넣는다.

그리고 create public gist를 클릭한다.



3. 만들어진 파일을 클릭해서 들어가면 아래와 같은 url을 볼 수 있다. 뒤의 코드를 복사한다. 9ca2c306ccfa ... 부분이다.




4. http://nbviewer.jupyter.org/ 에 접속해 아래 빈칸에 코드를 붙여넣고 Go! 를 누른다.





위와 같이 Jupyter notebook 코드가 업로드되어 있는 것을 확인할 수 있다. 

누군가와 코드를 공유할 때 위의 nbviewer 링크만 보내주면 간단히 코드와 그 결과를 공유할 수 있다.



  • 이상윤 2017.07.27 21:35

    rawresource는 어떻게 보나요ㅠㅠ

    • Deepplay 2017.07.29 04:03 신고

      raw source 보는법은 메모장 같은 텍스트 에디터로 ipynb 파일을 여시면 됩니다.

Keras는 Theano나 Tensorflow 위에서 동작하는 딥러닝 프레임워크입니다.

Tensorflow를 이용하는 것보다 더 쉽게 신경망 모델을 만들 수 있는 것 같습니다.

Keras를 처음 이용해 보기에 유용한 사이트를 찾아서 공유합니다.


Tutorial List


Fully Connected Network


- Binary Classification


http://machinelearningmastery.com/tutorial-first-neural-network-python-keras/

http://machinelearningmastery.com/binary-classification-tutorial-with-the-keras-deep-learning-library/


- Multi-label Classification


http://machinelearningmastery.com/multi-class-classification-tutorial-keras-deep-learning-library/


- Regression


http://machinelearningmastery.com/regression-tutorial-keras-deep-learning-library-python/


Drop Out


http://machinelearningmastery.com/dropout-regularization-deep-learning-models-keras/


Cross Validation


http://machinelearningmastery.com/evaluate-performance-deep-learning-models-keras/


Applied Deep Learning in Python Mini-Course


http://machinelearningmastery.com/applied-deep-learning-in-python-mini-course/


MNIST - MLP + CNN


http://machinelearningmastery.com/handwritten-digit-recognition-using-convolutional-neural-networks-python-keras/


CIFAR-10 CNN


http://machinelearningmastery.com/object-recognition-convolutional-neural-networks-keras-deep-learning-library/

/**

구글 클라우드 SDK로 파이썬 웹 애플리케이션 구축하기

작성자 : 3개월

날짜 2016-10-29

*/


참고 사이트 : https://cloud.google.com/appengine/docs/python


구글 클라우드 SDK에 포함된 PaaS 서비스인 구글 앱엔진을 통해 파이썬 Hello World 어플리케이션을 만드는 법에 관한 포스팅이다.

위의 구글 클라우드 앱엔진 Document만 봐도 할 수 있지만 한 번 정리해보았다.


1. 구글 클라우드 SDK 설치

(https://cloud.google.com/appengine/docs/python/download)


우선 구글 클라우드 SDK를 설치하여야한다. 위 사이트에서 Download and Install을 클릭한 후 설치하면 된다.


설치가 완료되면 cmd창을 열고 터미널에 아래 명령어를 입력한다.


gcloud init


사실 원래는 구글 앱엔진이라는 이름으로 구글의 PaaS 서비스가 따로 떨어져 있었다. 근데 얼마전부터 구글 앱엔진이 구글 클라우드 SDK에 통합된 것 같다. 구글 클라우드 플랫폼에서는 구글 클라우드 SDK에 종속되지 않은 구글 앱엔진의 파이썬 SDK도 따로 제공하고 있다. 


https://cloud.google.com/appengine/docs/python/download 이 곳에서 [Optionally ...] 부분을 클릭하면 이것을 다운 받을 수 있다. 하지만 모처럼 구글 클라우드 SDK라는 구글 클라우드의 통합 버전이 나왔음으로 이를 이용하도록 하자. 


구글 앱엔진을 이용하기 위해선 구글 클라우드 SDK를 설치한 후 명령어를 통하여 구글 앱엔진 파이썬 모듈을 추가하면된다.

(구글 앱엔진 파이썬 모듈이 구글 클라우드 SDK에 default로 설치되어있는지는 잘 모르겠다.. 저의 경우 그냥 명령어를 통해 모듈을 추가했다.)


2. 구글 앱엔진 파이썬 모듈 추가

커맨드 창에 아래와 같이 입력하면 구글 앱엔진 파이썬 모듈이 추가된다. (출처 : http://stackoverflow.com/questions/40290695/where-is-appcfg-py-in-google-cloud-sdk-133-0-0-darwin-x86-64-tar-gz)


gcloud components install app-engine-python

그러면 아래와 같은 디렉토리에 파이썬 모듈이 생성된다. (저의 경우에는 아래 루트에 생성됨 - Windows10 사용자)

C:\Users\사용자이름\AppData\Local\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine


3. 이클립스를 다운받는다. http://www.eclipse.org/

구글 앱엔진은 이클립스 사용을 권장하는듯 하다.

(자바가 없으면 자바 SDK 먼저 다운로드)


4. PyDev를 설치한다.

이클립스에서 Help > Eclipse Market Place에서 PyDev 검색 후 Install. 계속 next, accept 누르면 된다.


5. PyDev Google App Engine Project를 생성한다.

이클립스에서 File -> New -> Project 에서 PyDev Google App Engine Project 누른다.



Please configure an interpreter before proceeding. 를 눌러 default interpreter를 설정하고, 

구글 앱엔진 디렉토리에는 2번의 링크를 넣는다.


6. 다음 화면에서는 구글 클라우드 사이트에서 등록한 아이디가 있으면 입력하고 Template은 Hello Web App World를 선택한다.


 


7. 다음으로는 Eclipse에게 프로젝트가 어떤 library에 의존하고 있는지 알려주어야한다.

프로젝트가 생성되었음을 확인한 후 프로젝트명을 우클릭하여 Properties에 들어간다.

PyDev > PYTHONPATH 에서 Add Source Folder를 누른후 OK를 누른다.


8. 다시 프로젝트명을 우클릭후 Run As > PyDev: Google App Run을 누르면 웹 서버가 작동한다


http://localhost:8080에 들어가면 Hello, webapp World 라는 글씨가 보이게 된다.



  • 2017.04.16 10:42

    비밀댓글입니다

Jupyter notebook에서 tensorflow를 이용하려고 하였는데 tensorflow 모듈이 없다는 반응이 오는 문제가 있었습니다.

이 문제 해결을 위하여 오랜 시간을 사용 하였기에 다른 분들은 빨리 해결하면 좋겠다는 마음에서 이 글을 썼습니다.



문제 : https://github.com/jupyter/jupyter/issues/95


iPython 쉘 환경에서와 Jupyter notebook에서 virtualenv를 사용할 때 반응이 다름.



해결 : http://ipython.readthedocs.io/en/latest/install/kernel_install.html


Jupyter notebook에서 virtualenv를 이용하려면 수동으로 지정을 해주어야합니다.


source activate myenv python -m ipykernel install --user --name myenv --display-name "Python (myenv)"



위처럼 source activate를 통해 가상환경을 만들고 이 상태에서 ipykernel 위에도 가상환경을 인스톨하면 

Jupyter notebook에서도 가상환경을 이용할 수 있습니다.




SAS 무료 버젼인 University Edition에 대해서 아시나요?

원래는 비싼 통계 분석 프로그램인 SAS의 학생용 무료 버젼입니다.

SAS의 모든 기능을 제공하는 건 아니고 일부 제공되는데 간단한 실습용으로는 쓸만한 것 같습니다. 

다만 설치가 조금 까다로운데 VMWare나 Virtual Box 같은 가상 머신을 사용해야 합니다.

설치하는 방법을 요약하면 아래과 같습니다. (VMWare 기준입니다.)


http://www.sas.com/en_us/software/university-edition/download-software.html


1. 위 링크에 접속하고 SAS 회원가입을 합니다.


2. VMWare를 다운받습니다. 위 링크에 링크가 있음.


3. SAS University Edition을 다운받고 압축을 풉니다.


4. VMWare가 다운로드하고 설치가 다 되었으면 VMWare Player나 VMWare Workstation을 실행합니다.


5. Open Virtual Machine을 클릭하고 아까 압축을 푼 SAS University Edition 폴더의 SAS-University-Edition.vdx 파일을 엽니다.


6. 가상머신과의 공유폴더를 설정하여야합니다. 로컬 드라이브 아무곳에나 SASUniversityEdition 폴더를 생성하고 그 하위 폴더로 myFolders를 만듭니다.


7. 아래와 같이 VMWare에 있는 SAS-University-Edition을 우클릭한 후 Settings를 클릭합니다.


 



8. Settings에 들어 갔으면 Option - Shared Folders에 들어간 후 Folder Sharing을 Always Enabled로 설정합니다. 그리고 Add를 클릭하여 방금 만든 myFolders를 추가합니다. OK를 누르고 창을 닫습니다.


9. 다시 SAS-University-Edition을 우클릭한후 Power를 켭니다.


10. 조금 기다리면 다음과 같은 화면이 나오는데 가상머신에서 나와서 웹 브라우저를 연 후 아래 아이피에 접속하면 SAS Studio를 이용할 수 있습니다.

(저는 처음에 http://unknown 나와서 당황했는데 VMWare를 업데이트 하니까 되더군요.

VMWare를 예전에 설치하셨는데 오래 사용하지 않으신 분들은 업데이트 한 번 해주시면 되겠습니다.)



 


 



위와 같이 웹브라우저 환경에서 SAS를 이용할 수 있습니다 신기하네요!




잘 이해가 안 가시는 분들은 아래 pdf 파일에 더 상세하게 나와있습니다~


https://support.sas.com/software/products/university-edition/docs/en/SASUniversityEditionQuickStartVMwarePlayer.pdf


  • tjrqja12345@gmail.com 2019.03.05 19:51

    학과 강의실에서는 잘 동작했는데, 개인 데스크탑이랑 랩탑에서는 같은 조건에서 실행했을 경우 타임아웃이 생기는데, 이 이슈에 대한 해결책이 있나요?