상관계수(r)와 유의확율(p-value)

1. Correlation (상관관계)
  - 상관관계는 두 변수간의 관계의 강도와 방향을 설명하는 척도입니다. 변수가 얼마나 밀접하게 관련되어 있는지 연구하는 데 사용되는 방법을 Correlation Analysis(상관분석)라 합니다.
   그러나, 상관관계가 인과 관계를 의미하지는 않습니다. 한 변수의 변경이 다른 변수의 변경과 연관되어 있다는 사실이 실제로 다른 변수가 변경되는 것을 의미하지는 않습니다. (인관관계는 선형회귀분석으로)

2. 상관계수(r)와 상관 관계 해석
2.1 상관계수 r : 두 연속 변수 간의 연관 정도에 대한 수치.
  - 계수값은 항상 -1과 1사이이며, 변수간의 선형 관계의 강도와 방향을 모두 측정함.
 1) Strength(힘): 계수의 절대 값이 클수록 관계가 강해집니다.
   - 0에서 +1, -1 사이의 값은 약함, 보통 및 강함 관계의 척도를 나타냅니다. 마찬가지로 R은 -1 또는 1 에 가까울 수록 관계의 강도가 증가합니다.
 2) Direction(방향): 계수 기호(더하기, 빼기)는 관계의 방향을 나타냅니다.
    - 양의 계수는 직접적인 상관 관계를 나타내며 한 변수가 증가하면 다른 변수도 증가합니다.
    - 음의 계수는 역 상관을 나타내며, 그래프에서 하향 기울기를 생성합니다. 한 변수가 증가면 다른 변수는 감소하는 경향이 있습니다.
     . 계수 1은 완전환 양의 관계를 의미합니다. 한 변수가 증가하면 다른 변수는 비례 적으로 증가합니다.
     . 계수 -1은 완벽한 음의 관계를 의미합2니다. 한 변수가 증가하면 다른 변수는 비례적으로 감사합니다.
     . 계수 0은 두 변수간에 관계가 없음을 의미합니다. 데이터 포인트는 그래프 전체에 흩어져 있습니다.

3. 관련수식
3.1 R : 상관계수
3.2 R Square(R제곱값: R^2) : 결정계수
   - 이 값은 추세선이 데이터에 얼마나 잘 대응하는 지 나타내며, R^2가 1에 가까울수록 적합도가 더 좋습니다.
3.3 P-Value
  - 유의확률. 귀무가설이 맞다고 가정할 때 얻은 결과보다 극단적인 결과가 실제로 관측될 확률이다. p-value가 작을 수록 그 정도가 약하다고 보며, 특정 값(대게 0.05나 0.01)보다 작을 경우 귀무가설을 기각하는 것이나 여기에는 여러가지 문제들이 있다.
  - p-value는 보통 검정통계량(t)과 자유도(df) 로 계산됨. (엑셀에서 TDIS(t, df, false(양측검증)) 함수)
  - 검정통계량(t)은 상관계수에서 아래 식을 통해서 계산할 수 있음.
  - 자유도는 표본쌍(n) - 2로 계산
  ps1. 결정계수 = 상관계수^2
  ps2. 상관계수 = SQRT(결정계수) = 결정계수^0.5=√ℛ
  ps3. 차트에 추세선 추가하고, 상단에 추세선 수식 표시. (예: y= 0.003x + 11.11 (추세선 선형 방정식 y=ax + b))

3.4 선형방정식
  : 차트에서 추세선을 그리기위한 계산식. X의 min/max로 추세선을 추가하고, 산술식을 표기한다.
 1) 선형방정식
  Y = {0}X (+or-) {1}
    - {0} : slope
    - {1}: yintercept

 

end.

'Programming Language > 알고리즘' 카테고리의 다른 글

[주식] RSI (Relative Strength Index)  (0) 2022.03.06
[주식] 이동평균 계산  (0) 2022.03.06

pyCharm에서는 그냥 되던게, Visual Studio Code에서는 안되네요.

 

작업디렉토리에 있는 Main.py가 아닌, 아래 모듈에서 실행을 하면 프로젝트의 다른 모듈을 못찾아서 ModuleNotFoundError가 납니다. 원인은 모듈 검색 경로에 working directory 를 못찾아서 발생하는 거라고 합니다.

하위 경로의 모듈을 실행하려면, 파이썬은 모듈검색 과정에서 working Directory를 추가해줘야 한다. (3번 참조)

참고로, 모듈 검색과정은 sys.modules, build-in moudels, sys.path 순서로 진행되고, 실행위치는 sys.path에 포함된다.

 

 - 참조 visual studio code Docs : https://code.visualstudio.com/docs

 

1. 현재환경

 - anaconda로 가상환경 사용

 - python : 3.9 (32bit) - 아나콘다로 가상환경을 사용중

 

2. 실행 및 디버그 수행 - F5 (Ctrl + Shift + D) 해결방법 (빠른 실행은 3.번을 읽어주세요)

1) visual studio code에서, Ctrl + Shift + P 누른후, python Select Interpreter를 가상환경으로 변경한다.

2) Ctrl + Shift + `를 누르고, 새 터미널을 생성한다. 새 터미널 우측 에 [+]옆 아래 화살표를 누르면, 

   메뉴가 나오는데, "기본 프로필 선택" 선택한다.  이때, Command + Prompt를 선택한다.

   기본 설정인, PowerShell에서는 실핼 때, 아나콘다 가상환경이 설정환경으로 변경이 되지 않았다.

   다행히 기본 Command + Prompt 로 수행하면, 정상처리가 된다.

3) Ctrl + Shift + D를 누르고, "실행 및 디버그"에서 launch.json파일을 만들고,

   기본 설정에 아래와 같이 env 설정을 추가한다.

4) F5(디버깅 시작) or Ctrl + F5(디버깅없이 시작)

   그런데.... 매번 이러니까... 느림.....

 

# .vscode/launch.json

{
    "version": "0.2.0",
    "configurations": [
      {
        "name": "Python: 메인",
        "type": "python",
        "request": "launch",
        "program": "${file}",
        "console": "integratedTerminal",
        "env": {
            "PYTHONPATH": "${workspaceFolder}"
        },
        "justMyCode": true
      }
    ]
  }

 

3. Run Code, .... 수행 - F5 (Ctrl + Alt + D) 해결방법

 

2.번 방법은 수행이 느리고, pyCharm보다 왜 느릴까 하다가 다시 방법을 찾아봄.

Code Runner 를 깔면, py파일 우측 상단에 ▷화살표가 표시되는데, Run Code, Run Python File, ... 표시됨.

실행이 여기 저기 있다보니 햇갈림. Run Code 는 Code 터미널이 별도로 수행이 되고 있고, 환경을 잡아 주면 Code 수행 터미널에서 수행이 됨. 그래서 Run Code 환경을 추가함.

 

1, 2) 2.번의 1), 2) 까지는 동일함.

3) Ctrl + P를 누르면, setting.json 설정환경을 수정할 수 있습니다. setting.json에서 아래 아래 환경을 추가합니다.

   아래 환경을 추가하면, terminal에서 작업폴더가 PYTHONPATH에 자동으로 추가됩니다.

   그리고, 2.번  launch.json 파일의 PYTHONPATH 설정해도 됩니다.

   다른 OS는 terminal.integrated.env.linux, terminal.integrated.env.osx 참조하세요.

"terminal.integrated.env.windows": {
    "PYTHONPATH": "${workspaceFolder}"
}

4) Run Code 시, conda activate가 cmd 초기에 늦게 수행이 되서 처음에 오류나 발생해서, .vscode/settings.json파일을 만들고 기본 Command를 추가한 후 기본으로 설정함. (2.2) 번을 다시 변경함). 이렇게 하면 cmd 수행 시 바로 conda activate 가 되고, 수행을 한다.

 

# .vscode/setting.json

{
    "terminal.integrated.profiles.windows": {
        "Cmd-Conda": {
          "path": ["cmd.exe"],
          "args": ["/K","C:\\Users\\아이디\\Anaconda3\\Scripts\\activate.bat", "system_trading_py39_32"]
        }
      },
    "terminal.integrated.defaultProfile.windows": "Cmd-Conda"
}

5) ▷화살표를 누르거나, Ctrl + Alt + N으로 수행한다. 런처보다는 빠르게 수행인된다.

 

ps. Run Code는 잘 되는데, Run Python File 수행은 오류가 발생... 아, 이건 그냥 "실행 및 디버그"로 수행하는 걸로.

 

 

 

 

'Programming Language > Python' 카테고리의 다른 글

python DB 연결  (0) 2024.04.29
dataframe 출력 사이즈 설정  (0) 2022.05.31
[Python] pandas - DataFrame Text 출력  (0) 2022.03.19
[Python] 클래스  (0) 2022.03.14
[Python] 모듈과 패키지  (0) 2022.03.14

 

tabulate 모듈을 사용해서 공통으로 작성했습니다.

지원하는 tablefmt중에서 'presto' 양식으로 처리했습니다.

 

 

import re
from tabulate import tabulate


def get_string_dataframe(df, pivot_yn=True, index_drop=True):
    """DataFrame의 TEXT출력 문자를 반환한다."""
    if pivot_yn:
        df = df.T

    if index_drop:
        df = df.reset_index(drop=index_drop)

    body = tabulate(df, headers='keys', tablefmt='presto', disable_numparse=True)
    hindex = body.index('\n')
    header = body[:hindex]
    newheader = re.sub('[ ]{2,}', ' ', header)
    body = header[:header.index('|') + 1] + newheader[newheader.index('|') + 1:] + '\n' + body[hindex + 1:]
    return body
    
def test_get_string_dataframe():
    data = {'18498': {'종목코드': '003960', '종목명': '사조대림', '주문번호': '18498', '주문상태': '체결', '주문수량': 37, '주문가격': 27700, '현재가': 27600, '주문구분': '매도', '미체결수량': 0, '체결량': 37, '시간': '090552', '당일매매수수료': 3580, '당일매매세금': 2357},
            '18308': {'종목코드': '073560', '종목명': '우리손에프앤지', '주문번호': '18308', '주문상태': '체결', '주문수량': 480, '주문가격': 2135, '현재가': 2140, '주문구분': '매도', '미체결수량': 434, '체결량': 46, '시간': '090542', '당일매매수수료': 300, '당일매매세금': 227},
            '16975': {'종목코드': '307930', '종목명': '컴퍼니케이', '주문번호': '16975', '주문상태': '접수', '주문수량': 54, '주문가격': 8920, '현재가': 8820, '주문구분': '매도', '미체결수량': 54, '체결량': 0, '시간': '090432', '당일매매수수료': 0, '당일매매세금': 0},
            '16923': {'종목코드': '001120', '종목명': 'LX인터내셔널', '주문번호': '16923', '주문상태': '체결', '주문수량': 61, '주문가격': 30450, '현재가': 30400, '주문구분': '매도', '미체결수량': 0, '체결량': 61, '시간': '090428', '당일매매수수료': 6490, '당일매매세금': 4273},
            '16819': {'종목코드': '084010', '종목명': '대한제강', '주문번호': '16819', '주문상태': '체결', '주문수량': 21, '주문가격': 22000, '현재가': 21650, '주문구분': '매도', '미체결수량': 0, '체결량': 21, '시간': '090423', '당일매매수수료': 1600, '당일매매세금': 1062},
            '16780': {'종목코드': '010060', '종목명': 'OCI', '주문번호': '16780', '주문상태': '체결', '주문수량': 4, '주문가격': 110500, '현재가': 111000, '주문구분': '매도', '미체결수량': 0, '체결량': 4, '시간': '090421', '당일매매수수료': 1540, '당일매매세금': 1017},
            '13708': {'종목코드': '017480', '종목명': '삼현철강', '주문번호': '13708', '주문상태': '체결', '주문수량': 73, '주문가격': 6690, '현재가': 6560, '주문구분': '매도', '미체결수량': 0, '체결량': 73, '시간': '090213', '당일매매수수료': 1700, '당일매매세금': 1123},
            '13699': {'종목코드': '008260', '종목명': 'NI스틸', '주문번호': '13699', '주문상태': '체결', '주문수량': 96, '주문가격': 5030, '현재가': 4895, '주문구분': '매도', '미체결수량': 0, '체결량': 96, '시간': '090213', '당일매매수수료': 1690, '당일매매세금': 1110},
            '13698': {'종목코드': '006800', '종목명': '미래에셋증권', '주문번호': '13698', '주문상태': '체결', '주문수량': 124, '주문가격': 8260, '현재가': 8270, '주문구분': '매도', '미체결수량': 0, '체결량': 124, '시간': '090213', '당일매매수수료': 3560, '당일매매세금': 2356},
            }

    df = pd.DataFrame(data)
    print(get_string_dataframe(df))


if __name__ == "__main__":
    test_get_string_dataframe()

#     | 종목코드 | 종목명 | 주문번호 | 주문상태 | 주문수량 | 주문가격 | 현재가 | 주문구분 | 미체결수량 | 체결량 | 시간 | 당일매매수수료 | 당일매매세금
# ----+--------+---------+--------+--------+--------+--------+--------+--------+---------+-------+--------+-----------+----------
#  0  | 003960 | 사조대림    | 18498  | 체결     | 37     | 27700  | 27600  | 매도     | 0       | 37    | 090552 | 3580      | 2357
#  1  | 073560 | 우리손에프앤지 | 18308  | 체결     | 480    | 2135   | 2140   | 매도     | 434     | 46    | 090542 | 300       | 227
#  2  | 307930 | 컴퍼니케이   | 16975  | 접수     | 54     | 8920   | 8820   | 매도     | 54      | 0     | 090432 | 0         | 0
#  3  | 001120 | LX인터내셔널 | 16923  | 체결     | 61     | 30450  | 30400  | 매도     | 0       | 61    | 090428 | 6490      | 4273
#  4  | 084010 | 대한제강    | 16819  | 체결     | 21     | 22000  | 21650  | 매도     | 0       | 21    | 090423 | 1600      | 1062
#  5  | 010060 | OCI     | 16780  | 체결     | 4      | 110500 | 111000 | 매도     | 0       | 4     | 090421 | 1540      | 1017
#  6  | 017480 | 삼현철강    | 13708  | 체결     | 73     | 6690   | 6560   | 매도     | 0       | 73    | 090213 | 1700      | 1123
#  7  | 008260 | NI스틸    | 13699  | 체결     | 96     | 5030   | 4895   | 매도     | 0       | 96    | 090213 | 1690      | 1110
#  8  | 006800 | 미래에셋증권  | 13698  | 체결     | 124    | 8260   | 8270   | 매도     | 0       | 124   | 090213 | 3560      | 2356

 

그리고, DataFrame을 바로 출력할 때는 아래 설정으로 포맷을 조정할수 있습니다.

# pd.set_option('display.max_rows', None)
pd.set_option('display.max_columns', None)
pd.set_option('display.width', None)
pd.set_option('display.colheader_justify', 'left')
# pd.set_option('display.precision', 10)

print(df.to_markdown(index=False))

'Programming Language > Python' 카테고리의 다른 글

dataframe 출력 사이즈 설정  (0) 2022.05.31
Python 모듈 실행시 ModuleNotFoundError 처리  (0) 2022.03.25
[Python] 클래스  (0) 2022.03.14
[Python] 모듈과 패키지  (0) 2022.03.14
[Python] 내장함수  (0) 2022.03.14

1. Class 선언
  - 클래스명은 캐멀 표기법으로 한다. 첫 글자는 대문자.
  - self : 클래스의 메소드 위치 기본 변수로 항상 정의해야 하지만, 메소드 호출 시에는 없는 것 처럼 사용한다.
  - 클래스 변수 : 클래스 내의 함수 밖에 정의된 변수는 클래스 변수가 된다.
  - 인스턴스 변수 : ___init__() 함수에서 인스턴스 변수를 선언한다.

2. 데이터 은닉과 이름 장식
    - 변수를 은닉하기 위해서는 '__변수명' 양식으로 정의한다.
    - 은닉된 인스턴스 변수는 외부에서 접근할 수 없지만, 클래스 변수는 '클래스._클래스__변수명'으로 접근할 수 있다.

3. 상속
    - 다중상속과 다형성 지원한다.
    - 객체의 클래스타입 확인 방법: 객체.__class__  또는 type(객체)
    - 부모클래스 확인 방법: 클래스명.__bases__
    - __main__ : 실행환경 최상단 위치라는 의미
    - super() 지시어. 자식 객체에서 부모 객체를 접근하게 해준다. 부모의 메소드를 호출할 때 주로 사용한다.

4. Class 정의 예

    class SuperMan(Human, Man):         # 다중상속이 가능한다.
        __country = 'South Korea'       # 클래스 변수. 변수 은닉. Dog._Dog__country 로 호출
        def __init__(self, name):       # 초기화 메소드. 생성자와 유사
            self.name = name
            self.tricks = []
        def fly(self):
            super().fly()               # 부모 메소드 호출
            print(self.name + ' can fly faster.')

 

end.

 

+ Recent posts