레이블이 파이썬인 게시물을 표시합니다. 모든 게시물 표시
레이블이 파이썬인 게시물을 표시합니다. 모든 게시물 표시

2022년 5월 22일 일요일

오렌지로 데이터 사이언스 스쿨 따라하기(4) 부분회귀

   "데이터 사이언스 스쿨" 4-4 부분회귀를 오렌지로 따라해봅니다.

1. 맥환경은 기준으로 설명합니다.

맥에서 터미널을 실행합니다. [CMD+Space]를 누르고 [터미널]이라고 입력합니다. 터미널에서 아래와 같이 명령어를 입력하여 오렌지와 주피터큐티콘솔을 백그라운드로 실행합니다.

이것은 저의 맥에서 만든 가상환경이니 여러분은 여러분이 만든 가상환경에 맞게 바꾸면 됩니다.
미니콘다 설치는 윈도우 미니콘다 설치 맥은 비슷하니... 오렌지, 큐티콘솔 설치는 이곳(제일아래)을 참조하십시요.
오렌지의 캔바스에 위젯을 아래와 같이 배치하고 연결합니다.



2. File Widget에서 [Browse documentation datasets] 버튼을 눌러 [housing.tab]자료를 불러옵니다.

3. Correlations Widget을 선택하여 아래와 같이 설정하여 각 변수와  MEDV와의 상관도를 확인합니다. Correlation Widget과 Scatter Plot Widget의 연결은 아래 그림을 참조하십시요.


4. Scatter PLot Widget을 선택하시면 아래 그림처럼 Axis 그룹박스가 선택불가로 회색처리되었습니다. (3)번에서 띄워놓은 Correlations Widget 에서 (2)를 바꾸어 주면 Scatter PLot Widget의 그래프도 바뀌어 보여 집니다.

AGE가 음의 상관관계를 보이는 것 같지만 상관도가 없는 것을 확인 할 수 있습니다.

5.   "데이터 사이언스 스쿨" 4-4 의 일부내용입니다. 네모박스부분 우측상단의 복사아이콘을 선택하여 코딩내용을 복사합니다.

6. (1)단계에서 실행한 Jupyter QtConsole에 아래 그림처럼 마우스오른쪽버튼을 눌러 붙여넣기하고 [리턴-키]를 누릅니다. 그래프가 보이게 하기위하여 첫줄에 %matplotlib inline 을 넣어 실행했습니다.


7. 계속하여 (5)의 (2)에서와 같이 다음 코딩부분을 복사&붙이기&[리턴-키] 하고 결과를 확인합니다.


8. 계속하여  "데이터 사이언스 스쿨" 4-4 아랫부분의 코딩내용도 [복사&붙이기&리턴-키]하여 결과를 확인합니다.

9. 따라하기 (3)에서의 statsmodels 의 summary 부분도 [print(result_boston.summary()]하여 결과를 확인합니다.

10. 사이언스 스쿨의 내용을 따라 할 때 코딩내용의 실행 결과가 오렌지로 연결될때는 오렌지의 Python Script Widget을 이용하고, 결과만 확인해보고 리턴이 없는 경우에는 Jupyter Qtconsole을 이용하면은 학습에 도움이 되겠다고 생각합니다. 머신만 러닝이냐 사람도 러닝이다!.
통계를 전문으로 하시는분, 코딩을 전문으로 하시는분, 가르치기를 전문으로 하시는분, 그리고 공학이나 의학 그리고 각분야 별로 전문을 하시는분과 나 자신이 오렌지를 잘활용했으면 해서 글을 자주 올리고 있습니다.   


2022년 5월 21일 토요일

오렌지로 데이터 사이언스 스쿨 따라하기(3) 스케일링(조건수)

  "데이터 사이언스 스쿨" 4-3 스케일링을 오렌지로 따라해봅니다.

1. 오렌지 캔바스를 아래와 같이 구성합니다.


2. File Widget에서 [Browse documentation datasets] 버튼을 눌러 [housing.tab]자료를 불러옵니다.

3. Preprocess Widget에서 Normalize 합니다.



4. Test and Score 와 Test and Score (1) Widget을 선택하여 결과가 같음을 확인합니다.

5. Data Table 과 Data Table (1) Widget을 선택하여 계수가 달라졌음을 확인합니다.

6. Python Script Widget을 선택하여 아래 내용을 복사&붙여넣기 한다음 [RUN]버튼을 선택합니다.

import statsmodels.api as sm
import numpy as np
import Orange.data.pandas_compat as p
df = p.pd.concat(in_data.to_pandas_dfs(), axis=1)

model1 = sm.OLS.from_formula("MEDV ~ CRIM+ZN+INDUS+CHAS+NOX+RM"
+"AGE+DIS+RAD+TAX+PTRATIO+B+LSTAT", data=df)

result1 = model1.fit()
print(result1.summary()) 

statsmodels 패키지로 풀어 summary 리포트를 출력해보는 것입니다.

6. Python Script widget 결과를 확인합니다.

조건수가 1.51e+04로 매우 큼을 확인합니다. 아래 내용은 사이언스 스쿨에서 가져왔습니다.
회귀분석에서 조건수가 커지는 경우는 크게 두 가지가 있다.
  • 변수들의 단위 차이로 인해 숫자의 스케일이 크게 달라지는 경우. 이 경우에는 스케일링(scaling)으로 해결한다.
  • 다중 공선성 즉, 상관관계가 큰 독립 변수들이 있는 경우, 이 경우에는 변수 선택이나 PCA를 사용한 차원 축소 등으로 해결한다.

7. Python Script Widget (1)은 Python Script Widget을 복사&붙여넣기 한것으로 같은 내용입니다. [RUN] 버튼을 선택해 실행 시키고 결과를 확인합니다.


조건수가 9.82로 매우 적어졌슴을 확인합니다.





오렌지로 데이터 사이언스 스쿨 따라하기(2) make_regression

 "데이터 사이언스 스쿨" 4-2 선형회귀분석의 기초를 오렌지로 따라해봅니다.

1. 오렌지의 캔바스에 위젯을 아래와 같이 배치하고 연결합니다.


2. Python Script Widget을 선택하고 사이언스 스쿨에 있는 식을 약간 변형하여 아래와 같이 입력하고 Ctrl+Return 또는 [RUN]버튼을 선택합니다.

from Orange.data import Table
from sklearn.datasets import make_regression
import statsmodels.api as sm

X0, y, w = make_regression(n_samples=200, n_features=1,
bias=100, noise=10, coef=True, random_state=1)

y = y.reshape(len(y), 1)

out_data = Table.from_numpy(None, X0, y)

3. Test and Score Widget을 선택하여 확인합니다.


4. Data TAble (1) Widget을 선택하여 절편과 계수를 사이언스 스쿨과 비교 확인합니다.

5. Feature Constructor Widget을 선택하여 잔차를 계산합니다.


6. Feature Statistics Widget을 선택하여 잔차의 통계량을 확인합니다. 평균이 0(영)에 근사합니다.


7. Scatter Plot (1) Widget을 선택하여 잔차의 분포를 살펴봅니다.


8. Google Sheets에서 아래와 같이 입력하고, 공유하고 링크를 복사합니다.
 

9. File Widget을 선택하고 (8)에서 복사한 URL을 붙여넣고 Name을 Feature로 Role을 feature로 변경합니다.

참고로 Create Table Widget이나 Google Sheet Widget으로 불러오면 
Some predictor(s) failed (see more ...)
- Linear Regression: Linear Regression: domain transformation produced no defined values

경고가 뜨며 처리가 안되더군요. 반드시 파일위젯을 사용하십시요. 다른 경우에도 많이 그렇더군요.

10. Prediction Widget을 선택하여 결과를 사이언스 스쿨과 비교합니다.


2022년 5월 19일 목요일

오렌지의 Tree Model Train / Test 나누어 분석 (iris)

1. 오렌지의 캔바스에 위젯을 아래와 같이 배치&연결합니다.


2. File Widget에서 

Browse documentation datasets (1)을 선택한후


iris.tab 파일을 선택합니다.

3. Data Sampler widget을 설정하고

22개가 Test 데이터입니다.

4. Predictions Widget를 선택하보면서 Data Sampler의 Sample Data 버튼을 크릭하면서 (2) perfomance score가 바뀌는 것을 확인합니다.









오렌지에서 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. 그런데... 미싱데이터를 채워주었는데 파일위젯에서 미싱율은 변화가 없네요.(궁금)




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번재 입력은 라인을 더블크릭하여 다음과 같이 지정해야 합니다.

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

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