2022년 5월 23일 월요일

오렌지 Python Script에서 matplotlib 한글깨짐 현상

   "데이터 사이언스 스쿨" K-평균군집화를 오렌지로 따라해봅니다. 

아래는 데이터 사이언스 스쿨에서 가져온것임미니배치 K-평균 군집화

K-평균 방법에서는 중심위치와 모든 데이터 사이의 거리를 계산해야 하기 때문에 데이터의 갯수가 많아지면 계산량도 늘어단다. 데이터의 수가 너무 많을 때는 미니배치 K-평균(Mini-batch) 군집화 방법을 사용하면 계산량을 줄일 수 있다. 미니배치 K-평균 군집화는 데이터를 미니배치 크기만큼 무작위로 분리하여 K-평균 군집화를 한다. 모든 데이터를 한꺼번에 썼을 때와 결과가 다를 수는 있지만 큰 차이가 없다.

1.오렌지 캔바스에 Python Script Widget 하나를 올려 놓고 아래 코드를 붙여 넣기 합니다. (소스는 데이터 사이언스 스쿨에서 복사) .[Ctrl + Enter] 또는 [Shift + Enter], [RUN]버튼으로 실행

import numpy as np

import matplotlib.pyplot as plt

# 아래 2줄은 한글 깨어짐 때문에 추가함
plt.rc('font',family='AppleGothic')
plt.rcParams['axes.unicode_minus']=False

from sklearn.cluster import KMeans
from sklearn.cluster import MiniBatchKMeans
from sklearn.datasets import make_blobs

X, y = make_blobs(n_samples=150000, cluster_std=[1.0, 2.5, 0.5], random_state=170)

model1 = KMeans(n_clusters=3).fit(X)

model2 = MiniBatchKMeans(n_clusters=3, batch_size=1000, compute_labels=True).fit(X)

idx = np.random.randint(150000, size=300)
plt.subplot(121)
plt.scatter(X[idx, 0], X[idx, 1], c=model1.labels_[idx])
plt.title("K-평균 군집화")
plt.subplot(122)
plt.scatter(X[idx, 0], X[idx, 1], c=model2.labels_[idx])
plt.title("미니배치 K-평균 군집화")
plt.tight_layout()
plt.show()


2. 한글 깨어짐 현상이 없어 졌습니다. (맥의 경우입니다)

# 아래 2줄은 한글 깨어짐 때문에 추가함
plt.rc('font',family='AppleGothic')
plt.rcParams['axes.unicode_minus']=False
을 추가하였습니다.



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월 20일 금요일

오렌지로 데이터 사이언스 스쿨 따라하기(1) seaborn.pairplot

"데이터 사이언스 스쿨"은 파이썬, 수학, 머신러닝등을 아주 잘 설명해 놓아 학습하기 좋습니다. 더군다나 군더더기 광고가 없어서 짜증나지 않게 관련정보를 획득 할 수 있습니다. 

가끔 오렌지로 머신러닝을 따라하는데 파이썬 코드로 설명해 놓아 오렌지에 없는 것들이 있어 파이썬스크립트위젯으로 해결하곤 합니다.

1. 아래는 4.1의 회귀분석 예제의 보스턴 집값예측을 따라 해봅니다. 오렌지의 캔바스를 아래와 같이 구성합니다.


2. Datasets Widget을 선택하여 Housing 자료를 읽어 옵니다.


3. 각 Feature등에 대한 설명은 "데이터 사이언스 스쿨"에서 갖어 왔습니다. 이하는 생략합니다.

sklearn 패키지의 datasets 서브패키지는 회귀분석을 공부하기 위한 예제를 제공한다. 그 중 load_boston() 명령으로 받을 수 있는 보스턴 주택 가격 데이터는 다음과 같은 데이터이다. 보스턴의 506개 타운(town)의 13개 독립변수값로부터 해당 타운의 주택가격 중앙값을 예측하는 문제다. 사용할 수 있는 특징 데이터는 다음과 같다.

  • 독립변수

  • CRIM: 범죄율

  • INDUS: 비소매상업지역 면적 비율

  • NOX: 일산화질소 농도

  • RM: 주택당 방 수

  • LSTAT: 인구 중 하위 계층 비율

  • B: 인구 중 흑인 비율

  • PTRATIO: 학생/교사 비율

  • ZN: 25,000 평방피트를 초과 거주지역 비율

  • CHAS: 찰스강의 경계에 위치한 경우는 1, 아니면 0

  • AGE: 1940년 이전에 건축된 주택의 비율

  • RAD: 방사형 고속도로까지의 거리

  • DIS: 직업센터의 거리

  • TAX: 재산세율

  • 종속변수 : 보스턴 506개 타운의 1978년 주택 가격 중앙값 (단위 1,000 달러)

Data Table Widget을 선택하여 데이터를 살펴봅니다. 타겟변수(종속변수)가 MEDV 이군요

4. 관련 내용을 읽어가다보면 스캐터플롯(scatter plot = pairplot)이 있는데 오렌지에서는 없어서...

5. Python Script Widget을 선택하여 아래 내용을 복사&붙여넣기하고 [RUN] 버튼을 누르면 그래프를 볼 수 있습니다. (얼마전까지 이게 안되는 갑다하고 넘어갔었습니다)

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
df = in_data.to_pandas_dfs()
df = pd.concat(df, axis=1)
sns.pairplot(df[["MEDV", "RM", "AGE", "CHAS"]])
plt.show()

6. 아래와 같이 결과를 볼 수 있습니다. (저장해 두었다가 변수만 바꾸어가면 다른 경우에도 사용 할 수 있겠습니다. 저장하는 방법은 이전에 올렸었습니다. More버튼눌러서....)

RM이 상관도가 제일 높군요

7. Polynomial Regression Widget을 선택하여 아래와 같이 설정합니다.

 


오렌지로 분류용 가상데이터 생성 make_classification

 Scikit-Learn 패키지는 분류(classification) 모형의 테스트를 위해 여러가지 가상 데이터를 생성하는 함수를 제공합니다. make_classification을 이용하여 오렌지에서 가상 데이터 생성하여 보겠습니다. 이곳에서 가져옮  그곳에는 이외에도 여러가지의 가상데이터에대한 설명이있습니다.

make_classification

make_classification함수는 설정에 따른 분류용 가상 데이터를 생성하는 명령이다. 이 함수의 인수와 반환값은 다음과 같다.

  • 인수:

  • n_samples : 표본 데이터의 수, 디폴트 100

  • n_features : 독립 변수의 수, 디폴트 20

  • n_informative : 독립 변수 중 종속 변수와 상관 관계가 있는 성분의 수, 디폴트 2

  • n_redundant : 독립 변수 중 다른 독립 변수의 선형 조합으로 나타나는 성분의 수, 디폴트 2

  • n_repeated : 독립 변수 중 단순 중복된 성분의 수, 디폴트 0

  • n_classes : 종속 변수의 클래스 수, 디폴트 2

  • n_clusters_per_class : 클래스 당 클러스터의 수, 디폴트 2

  • weights : 각 클래스에 할당된 표본 수

  • random_state : 난수 발생 시드

  • 반환값:

  • X : [n_samples, n_features] 크기의 배열

    • 독립 변수

  • y : [n_samples] 크기의 배열

    • 종속 변수

1. jupyter notebook, jupyter lab, VSCode등을 이용하여 코딩을 합니다. 이런 방법을 사용하는 것은 코딩이 쉬워서입니다. 신텍스에러등도 잡아주고, 자동 완성기능도 사용하여 쉽지요.


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


3. Python Script (1) Widget에 코딩된 소스를 붙여넣기 합니다. 그리고 Data Table Widget으로 결과를 확인합니다.

4. 저는 1의 긴 코딩보다 이런방법이 좋다고 생각합니다.  Python Script Widget에 아레 내용을 복사&붙여넣기하고 [RUN]버튼을 선택합니다.

from Orange.data import Table
from sklearn.datasets import make_classification

X, y = make_classification(n_samples=10000, n_features=5,
            n_classes=2, flip_y= 0.02, random_state=12)

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

5. Edit Domain Widget을 선택하여 아래와 같이 설정합니다.


6. Data Table Widget에서 두가지 방법의 결과를 확인합니다. Feature 순서를 제외하고는 같습니다. 


7. 이 사례는 유튜브에서 보고 방법을 바꾸어 본 것입니다. (오렌지로 하되 오렌지로 안되는 것만 코딩!) 

8. Data Sampler Widget을 아래와 같이 설정합니다. Sample Data 버튼을 선택합니다.


9. Test and Score Widget에서 결과를 확인합니다.


10. 참고로 Edit Domain Widget 과 Random Forest Widget은 연결하지 않아도되는 것은 알고계시죠?




2022년 5월 19일 목요일

오렌지 자동실행 스크립트 만들기와 아이콘 바꾸기(맥)

 맥에서 오렌지를 conda로 설치하였을 경우 매번 터미널을 역고, 아래 명령어를 쳐주곤 하였는데 이것을 스크립터를 만들어 한방에 실행 할 수 있게 합니다.

1. Finder에서 [즐겨찾기 > 응용프로그램 > 유틸리티 > 스크립트 편집기]를 선택합니다.


2. 새로운 문서를 선택합니다.


3. 아래와 같이 입력합니다.
tell application "Terminal"
do script "cd ~; conda activate orange; cd /Volumes/SSD512G/Orange; orange-canvas &"
end tell

여기서 do script "..."으로 쌓여 있는 것을 설명하면
cd ~;  <= 사용자 디렉토리로 이동
conda activate orange; <= orange라는 가상환경으로 전환(다른 이름으로 가상환경을 만들었으면 그 이름)
cd /Volumes/SDD512G/Orange; <= 오렌지자료를 저장 할 기본 디렉토리(File Widget 기정치폴더)
orange-canvas & <= 오렌지를 백그라운드(&)로 실행, 터미널에서 다른 명령어를 사용하기위해서... 

4. [파일 > 저장...]


5. 아래와 같이 적당한 이름(1)을 위치는 데스크탑(2)이라하고, 파일 포맷은 응용 프로그램(3)으로 지정한 후 저장(4) 버튼을 눌러 저장합니다. 

6. 데스크탑(바탕화면)에 아래와 같이 오렌지.app(1)이라는 실행파일이 생성되었습니다. 그런데 아이콘이 보기 싫네요. 구글링하여 적당한 이미지를 다운받습니다. 저는 (2)번 이미지를 다운 받았습니다.


7. 다운받은 이미지위에서(바탕화면에 저장했다고 생각합니다) 마우스오른쪽버튼을 선택한후 [다음으로 열기 > 미리보기.app]을 선택하면 미리보기 창이 나타납니다.

8. 미리보기 메뉴에서 [편집 > 복사하기]를 선택합니다.

9. 바탕화면의 오렌지.app 위에서 마우스오른쪽 버튼을 크릭하여 정보 가져오기를 선택합니다.
10. 오렌지.app 정보 창에서 왼쪽위 아이콘을 선택하고(1) Finder 메뉴에서 [편집 > 붙여넣기]를 선택합니다. 

아래와 같이 아이콘이 바뀌었슴을 확인합니다. 바탕화면에 있는 아이콘도 바뀌었습니다. 










오렌지의 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가 바뀌는 것을 확인합니다.









델파이 12.1이냐 11.3이냐?

 델파이가 12.1이 나왔습니다. 혹시 11.3버전의 커뮤니티버전이 필요하시는분이 있을 수 있을 것 같아 https://altd.embarcadero.com/.../RADStudio_11_3_esd_28... 와 이것 찾느랴 엄청고생함.