2022년 5월 19일 목요일

오렌지에서 Decision Tree 와 Logistic Regression 정확성 비교

  오렌지에서 Decision Tree 와 Logistic Regression 정확성 비교를 해보겠습니다. 먼저 연습에서 자주 사용되는 가공되기 전의 Titanic 데이터를 다운받습니다.  Titanic 이번에는 titanic.xls입니다.

1. 오렌지의 캔바스에 위젯을 아래와 같이 배치하고 연결합니다. 진행해 가면서 연결해도 됩니다.

2. 엑셀을 실행하여 Titanic.xls를 불러와 Age열의 선택합니다(E열).

아래쪽에 평균값 29.88을 확인합니다.

3. 엑셀 메뉴에서 [편집 > 찾기 > 이동... > 특수...] 한다음 아래처럼 필드 값 없음(1)을 선택하고 확인(2) 합니다.

4. (1)의 위치에 29.88을 입력하고 Ctrl + Enter 키를 누룹니다(두키 같이)


5. 빈칸이 채워졌슴을 확인하고 저장한 다음 엑셀을 종료하고 

6. 저장한 파일을 오렌지의 File Widget에서 불러옵니다. 이때 survived 의 Role을 Target으로 변경합니다.

7. Tree Viewer Widget 에서 확인하고 (여성, 1등실이 확연히 생존율이 높음)


8. Test and Score Widget에서 Tree Model 과 Logistic Regression 모델을 비교합니다.

Tree 보다 Logistics Regression이 더 정밀하다고 볼 수 있겠네요. 그렇지만 CA가 비숫한 것으로 정확성은 비슷하다고 판단됩니다.

9. 이는 ROC Analysis Widget에서 확인할수 있습니다.


10. 그런데... 미싱데이터를 채워주었는데 파일위젯에서 미싱율은 변화가 없네요.(궁금)




R RStudio 설치 및 Jupyter notebook과 연동

 오렌지를 콘다로 설치해보았으면 R도 같은 방법으로 설치해보고, 불 필요하면 깔끔하게 지워버릴 수 있습니다. 아래는 나무위키에 있는 R의 장점입니다.

  • GPL로 배포되고 있어 무료로 사용할 수 있다. SPSS, MATLAB과 같은 상용 프로그램을 구입하지 않아도 된다.
  • R에서 사용할 수 있는 수많은 통계 관련 패키지[3]가 개발되어 있어서 인터넷을 통해 이 패키지들을 설치하는 식으로 무수한 기능 확장이 가능하다. 애초에 통계학자들이 만들어 낸 언어이며 통계 전문 언어 중 가장 보편적이기 때문에 내가 사용하고 싶은 모든 통계 기법이 이미 어딘가에 패키지 형태로 구현되어 있다고 봐도 된다. 여기서 찾아볼 수 있다.[4]
  • 그래픽 관련 패키지를 설치하면 간단하게 다양한 그래프를 활용할 수 있으며[5] 구글이나 네이버 지도를 불러오거나 이를 활용해 GIS 용도로 쓰는 것도 가능하다. 
  • 데이터 클리닝관련 패키지도 다양하게 지원하기 때문에 데이터를 상황에 맞게 자유자재로 다루기가 수월하다.
  • reticulate 패키지를 이용하여 Python 의 라이브러리들을 쉽게 활용할 수 있다.
  • 웹 어플리케이션 개발 프레임워크인 Shiny의 고도화로 통계 또는 머신러닝 모델을 웹과 연동할 수 있다.
  • 리스크, 재무, 마케팅 담당자 채용 시 R 능통자를 우대하기도 한다.

1. R을 오렌지와 같은 가상환경에 설치 할 수 있으나, 별도로 가상환경을 만들고 그곳에 설치합니다.

(base) jglee@iMac ~ % conda create -c conda-forge -n r4rs r-base rstudio

하면 조금 시간이 걸리기는 하지만 설치가 됩니다.

(base) jglee@iMac ~ % conda activate r4rs
(r4rs) jglee@iMac ~ % rstudio

하여 R을 사용 할 수 있는 

2. 통합환경인 RStudio를 실행합니다.


3. R과 Python을 같이 사용할 수 있는 jupyter notebook 이나 jupyter lab를 설치 할 수 있습니다. 22. 5. 19 현재 jupyter lab은 R의 코드인사잇(자동완성)지원이 잘 안되어 jupyter notebook을 설치하겠습니다.

(r4rs) jglee@iMac ~ % conda install r-irkernel jupyter

jupyter notebook 시행은

(r4rs) jglee@iMac ~ % jupyter notebook

하면 자신이 사용하는 인터넷 탐색기에 아래와 같이 jupyter를 실행하게 됩니다.


4. 기본으로 파이썬이나 R용 노트를 사용할 수 있게됩니다. TAB 키를 이용하여 코드인사잇(자동완성) 기능을 사용 할 수 있습니다.


불필요하면 아래와 같이 깔끔하게 가상환경을 삭제해버릴 수 있습니다.

(r4rs) conda deactivate
(base) conda remove -n r4rs

2022년 5월 18일 수요일

파이썬(또는 오렌지)를 설치하면서 같이 설치되는 패키지들 중 ipython 사용방법

오렌지를 Miniconda로 설치하는 방법을 이곳에서 설명하였습니다. 

1. 오렌지를 설치하면 당연히 맥의 경우 터미널에서 python을 사용할수 있겠지요. 사용하기가 좀 불편합니다.

Last login: Wed May 18 18:00:05 on console
(base) jglee@iMac ~ % conda activate orange
(orange) jglee@iMac ~ % python
Python 3.9.12 | packaged by conda-forge | (main, Mar 24 2022, 23:23:20)
[Clang 12.0.1 ] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>

2. 편리한 ipython을 사용하기위해서는 Seaborn 이라는 패키지가 필요합니다. Seaborn은 Matplotlib을 기반으로 다양한 색상 테마와 통계용 차트 등의 기능을 추가한 시각화 패키지입니다. 기본적인 시각화 기능은 Matplotlib 패키지에 의존하며 통계 기능은 Statsmodels 패키지에 의존합니다. Matplotlib는 오렌지와 같이 설치되어 있으니 Seaborn을 설치 합니다.

(orange) jglee@iMac ~ % ipython
Python 3.9.12 | packaged by conda-forge | (main, Mar 24 2022, 23:23:20)
Type 'copyright', 'credits' or 'license' for more information
IPython 8.3.0 -- An enhanced Interactive Python. Type '?' for help.

ModuleNotFoundError: No module named 'seaborn'


In [1]: exit()

일단은 Exit()하여 빠져나오고 

3. seaborn을 설치합니다.

(orange) jglee@iMac ~ % conda install seaborn
Collecting package metadata (current_repodata.json): done

덩달아서 통계 기능을 하는 Statsmodels 패키지도 깔립니다.

4. 터미널에서 ipython이라고 입력하여 실행하고 코드를 입력하면 TAB키를 이용하여 자동완성기능(코드인사잇)을 이용할 수 있습니니다.


키 기능
⍐⍗ 히스토리 검색
ctrl + r 입력된 단어를 포함하는 히스토리 실시간 검색

⍈⍇ 한 글자 좌우로 이동
ctrl +⍈⍇ 한 단어씩 좌우로 이동

ctrl + K 커서로부터 줄 끝까지 지우기
ctrl + U 현재 줄 지우기
ctrl + L 현재 화면 전체를 지우기

ctrl + o    다중행 입력시 현위치 아래에 새로운행 생성

ctrl + c 실행 중지
ctrl + z 직전 작업 취소

%magic 모든 매직 명령어의 도움말 출력
%lsmagic 매직 명령어 리스트
%automagic 매직함수를 %없이도 실행하게끔 함(default) 또는 %를 붙여야만 실행하게끔 함(실행할 때마다 전환됨)
%cls 화면 클리어
%who 변수의 리스트를 보여준다.
%who_ls 변수 리스트를 파이썬 리스트로 반환한다.
%whos 변수명 뿐만 아니라 변수 값도 보여준다.
%reset 작업공간을 초기화 시킨다.
%reset -f 수행 여부를 묻지 않고 초기화 시킨다.
%run file.py file.py 파일을 실행시킨다.
%load file.py file.py 파일을 불러들인다.
%edit (or %ed) 텍스트에디터를 실행시킨 후 거기에 입력한 코드를 실행한다.
%pwd 현재 디렉토리 표시
%cd 디렉토리 바꾸기
%pushd 현재 디렉토리를 스택에 저장
%popd 스택에 저장된 디렉토리를 빼내어 거기로 이동
%dirs 디렉토리 스택의 내용 표시
%ls 리스트

그래도 조금 불편하다 싶으면

5. jupyter qtconsole & 이라고 입력하여 실행하면 

이 QtConsole은 TAB키를 이용한 자동완성기능(코드인사잇)기능에 입력창을 여러개를 띄울 수 있는 기능등이 추가되었습니다. 


6. 또한 자동완성 방법도 드롭다운 방식등으로 바꿀 수 있습니다. 메뉴를 이용하여 많은 시도를 해보십시요.


7. 다음에 기회되면 mathplotlib, seaborn, statsmodels를 이용한 데이터 시각화, 통계등을 다루어 보겠습니다. 이외에도 jupyterLab 같은 패키지를 이용하면 오렌지를 설치하면서 설치된 jupyter를 이용해 인터넷 탐색기(사파리, 크롬, 익스플로러, 엣지)등에서 VSCode 같은 편집환경을 사용할 수 있습니다.

$ conda install notebook 또는
$ conda install jupyterLab 으로 설치

8. ipython에대한 사용방법이 잘 설명된곳을 링크하오니 참고하십시요. 자료분석을 위한 파이썬 ipython

2022년 5월 16일 월요일

오렌지 카이제곱(독립성) 검정2

 카이제곱(독립성) 검정은 Orange3로 통계강의 따라하기 05 (비율검정 카이제곱 chi2)에서 파이썬 스크립트를 이용하여 구했습니다. 이러한 데이터로 주어질경우에는 다음 방법으로도 할 수 있습니다. 자꾸 햇갈려서....

1. 먼저 연습에서 자주 사용되는 가공되기 전의 Titanic 데이터를 다운받습니다.  Titanic 

2. 오렌지의 캔바스에 위젯을 아래와 같이 배치하고 연결합니다. 진행해 가면서 연결해도 됩니다.

3. File Wedget을 선택하여 다운받은 Titanic.csv를 불러옵니다. 이미지는 생락합니다.

4. Mosaic Display Wedget을 선택하여 남여 성별로 선실 등급은 차이가 있는지 살펴봅니다. 덩달아서 생존여부와의 관계도 Interior Coloring으로 확인 할 수 있습니다.

5. Box PLot Widget을 선택하여 다음과 같이 설정하여 카이제곱의 P-Value를 구합니다.


카이제곱 통계치 = 20.38, p-Value = 0.000, 자유도 = 2임을 알 수 있으며 귀무가설을 기각하고 선실 등급은 남여 성별로 차이가 있다. 판정합니다. 그런데 구체적인 표가 없이 결과만 알게 되었네요.

6. Pivot Table Wedget을 선택하고  다음과 같이 설정하면 표를 얻을 수 있습니다.



7. 계속하여 파이썬스크립트를 이용할 때의 카이제곱값과 비교하기위하여 Select Columns Widget을 선택하여 다음과 같이 설정하여 Number가 아닌 Feature를 제외시킵니다.


8. Python Script Widget을 선택하고 아래 내용을 복사&붙여넣기를 합니다. [RUN] 버튼을 눌러 실행시키고 결과 값을 5와 비교하여 봅니다.

import Orange.data.pandas_compat as p
import numpy as np
import scipy.stats as ss

print(in_data)
idf = p.table_to_frame(in_data)

arr = np.array(idf, dtype='f')
print(ss.chi2_contingency(arr))

#out_data = p.table_from_frame(idf)


카이제곱 통계값 = 20.378, p-Value = 3.75e-05, df = 2, 그리고 기대값....

오렌지에서 이상치 처리는 Outliers Wedget으로

 오렌지에서 이상치 데이터를 처리하는 위젯은 Outliers Widget을 사용합니다. Row Select Widget에서도 수동으로 값을 입력하여 처리할 수 있습니다.

1. 먼저 연습에서 자주 사용되는 가공되기 전의 Titanic 데이터를 다운받습니다.  Titanic 

2. 오렌지의 캔바스에 위젯을 아래와 같이 배치하고 연결합니다. 진행해 가면서 연결해도 됩니다.

3. File Wedget을 선택하여 다운받은 Titanic.csv를 불러옵니다. 이미지는 생락합니다.

4. Select Columns Wedget을 선택하여 아래와 같이 설정합니다. 

이상값 감지에 도움이 될 것으로 생각되는 열만 포함하게 됩니다.

5. Preprocess Wedget을 선택하여 표준화(1)와 빠진자료 처리(2)를 추가하고 [Apply] 버튼(5)을 선택합니다.


6. Outliers Wedget을 선택하여 아래와 같이 설정합니다. (이 위젯은 Unsupervised 도구상자에 있습니니다)

데이터 포인트 사이의 유클리드 거리를 계산하고 다른 데이터 포인트에서 가장 멀리 떨어진 포인트를 이상값으로 제외하는 거리 기반 이상값 감지 알고리즘을 사용할 것입니다. 유클리드 거리는 각 개별 속성에 대해 두 데이터 포인트 사이의 거리를 사용합니다. 저는 5%만 제외하렵니다. 이를 위해 표준화를 먼저 한 것입니다.

7. Distibutions Widget 과 Distributions Widget (1)을 선택하여 비교합니다.


모평균과 편차가 약간 차이가 있군요

8. Data Table Wedget을 선택하여 어떤 자료가 예외 처리되었는지 확인해보십시요. Data Table Widget 의 2번재 입력은 라인을 더블크릭하여 다음과 같이 지정해야 합니다.

오렌지에서 Missing Data 처리 (Impute Widget)

 오렌지에서 이빨빠진 데이터를 처리하는 위젯은 Impute Widget을 사용합니다.

1. 먼저 연습에서 자주 사용되는 가공되기 전의 Titanic 데이터를 다운받습니다.  Titanic 

2. 오렌지의 캔바스를 아래와 같이 배치하고 연결합니다.


3. File Widget을 선택하고 위에서 불러온 Titanic.csv 데이터를 읽어 옵니다.

(4)에서 이빨 빠진 데이터가 2.5% 임을 확인합니다.

4. Impute Widget을 선택하여 현재 Don't impute 임을 확인합니다.

5. Feature Statistics Widget을 선택하여 이빨 빠진 데이터를 확인합니다. Data Table Widget에서도 확인하세요.


38, 41번째 Age 가 "?"로 되어있슴을 확인하십시요.

6. Impute Widget을 선택하여 Default Method 탭에서 적당한 것을 선택합니다. 저는 Model-vased imputer (simple tree)를 선택했습니다. 개뱔 Feature는 아래쪽 Individual Attribute Settings에서 하면 되겠군요.

7. Feature Statistics Widget을 선택하여 데이터가 채워졌슴을 확인합니다. Data Table Widget에서도 확인하십시요.


(1),(2),(3)에서 Missing data가 채워졌슴을 확인합니다.

38 = 41, 41 =42.166.... 으로 채워졌고 평균은 29.82로 변동이 없습니다.



오렌지로 해보는 데이터 결합 연습 Merge Data (Inner Join)

 오렌지와 유사한 프로그램으로 상용(유료) 프로그램인 Rapidminer에 있는 데이터 결합 예제를 오렌지로 구현해 보았습니다. 

1. 오렌지의 캔바스를 아래와 같이 구성하고 연결합니다.


2. 데이터를 다운 받아 적당한 폴더에 저장합니다. ProductsTransaction

3. File Wedget을 선택하고 마우스오른쪽 버튼하고 [Rename F2]를 선택해 각각 Products, Transaction으로 이름을 바꾸고, 각각 저장된 파일을 불러옵니다.



3. Merge Data Wedget을 선택하고 아래와 같이 실정합니다.


이때 주의 할 것은 Transaction File Wedget과 Merge Data Wedget의 연결이  Data이고 Products File Wedget과 Merge Data Wedget의 연결이 Data->Extra Data가 되어야 합니다.

4. Merge Data Wedget 과 Data Table (1)과의 연결이 되었는지 확인합니다. 하나의 Data Table Wedget에 여러 Wedget의 출력을 연결 할 수 있군요. Data Table (1)을 선택하여 결과를 확인합니다.


5. Feature Constructor Wedget을 선택하고 아래와같이 계산식을 입력합니다.


6. Select Columns Wedget을 선택하여 아래와 같이 지정하고 Data Table (1)에서 확인합니다.



7. Group by Wedget을 선택하고 아래와 같이 지정하고 Data Table Wedget에서 확인합니다.


고객 ID = 387인 분이 8가지를 구입하여 $10,930.4를 지불하셨네요.



2022년 5월 14일 토요일

오렌지 KNN Model에서 K값의 변화에 따른 정확도 측정

 오렌지의 많은 기능이 맘에 들지만 Line Plot Wedget은 마음에 들지 않습니다. 직관적이지 않아요. 그러나 타임시리즈에 있는 Line Chart Wedget을 이용하면 땜빵은 됩니다. 다만 0부터 시작한다는 점이 접접...

1. 오렌지의 캔바스에 아래와 같이 배치하고 연결합니다. 2개의 그룹을 하나의 캔바스에 구성하였습니다.


2. File Wedget을 선택하여 앞에서 사용한 diabetes.csv 파일을 읽어 옵니다. 케글에서 다운받으세요. Outcome을 target으로 지정하였습니다.


3. Data Sampler Wedget을 선택하여 Fixed proportion of data = 60% 로 설정합니다.


4. KNN Wedget 과 Test and Score Wedget, Create Table Wedget을 같이 띄어놓고



KNN Wedget의 (1)Number of neighbors 값을 1 ~ 11 까지 변동 시키면서

Test and Score Wedget을 Test on train data 와 Test on test data를 번갈아 가면서 선택 했을 때의 CA 값을 읽어

Create Table Wedget에 입력합니다. Test on train data는 2번컬럼에 Test on test data는 3번 컬럼에 입력합니다.

5. Select Columns Wedget을 선택하고 아래와 같이 설정합니다.


6. Line Chart Wedget을 선택하여 결과를 확인합니다.

이처럼 K 값(이웃의 갯수)을 변경함에 따라 학습때와 테스트때의 차이가 적게 되는 K 값을 KNN Model을 이용한 분석에 사용합니다. 여기서는 K=10 이군요.


델파이의 부활(Antigravity와의 만남)?

 델파이 프로그램을 사용하여 개인적으로 필요한 프로그램을 생성해 왔는데, 얼마전부터 파이썬으로 옮겨갔다.  그런데 Google 의 Antigravity를 만나고 나서 델파이에 대한 미련을 버리지 못해  제미나이가 Delphi이에 대한 학습도 엄청 했을...