본문 바로가기
파이썬 (Python)/Pandas

Python Panda 상관계수와 공분산 구하기, DataFrame Sort 하는 방법

by ★√★ 2021. 6. 2.

안녕하세요 이번 포스팅은 Python의 Pandas 패키지를 이용한 DataFrame 함수를 활용하는 방법 중에 상관계수와 공분산 구하기, DataFrame Sort 하는 방법에 대해서 설명드리도록 하겠습니다. 

 

상관계수-공분산-Sort-썸네일
상관계수-공분산-Sort

 

코드 구현을 위한 Source Data DataFrame 화 하기

 

: 일단 DataFrame을 구현하기 위한 Source Data를 구현해보도록 하겠습니다. 이전 포스팅에서 설명드린 것처럼 DataFrame을 구현하기 위해서는 Dictionary로 구현되어 있는 Data Source가 필요합니다. 아래와 같이 예시 Data를 구현해보도록 하겠습니다. (참고로 이 부분은 이전 포스팅에서 똑같은 Source Data를 사용하고 있다는 걸 참조해주세요.)

 

# 필요한 패키지를 먼저 선언을 합니다.
import pandas as pd
import numpy as np

# 상관계수와 공분산 구하기 위해 새로운 DataFrame 선언하기
df2 = pd.DataFrame(np.random.randn(8, 5), columns=["Column1", "Column2", "Column3", "Column4", "Column5"], index=np.arange(8))

▼ 위의 Data는 예시로 한 것이고, Source Data는 원하시는 내용으로 다시 수정해서 구현하셔도 됩니다.

 

상관계수와 공분산 구하는 방법

 

: 위 예제 Source Data를 이용하여 상관계수와 공분산을 구하는 코드를 구현해보도록 하겠습니다. Column 명은 제가 편하게 설명할 수 있게 Column1~4로 선언을 하였습니다. Column1열과 Column2의 상관계수 구하는 코드와 Column1열과 Column3의 공분산을 구하는 코드를 구현해보도록 하겠습니다. (사실 개인적으로 상관계수와 공분산에 대해서 신경 안 쓰는 업무라서 일단 알고만 있으시다가 필요시 사용하시면 될 거 같습니다.)

# Column1열과 Column2의 상관계수 구하는 코드
print(df2['Column1'].corr(df2['Column2']))

# Column1열과 Column3의 공분산을 구하는 코드
print(df2['Column1'].cov(df2['Column3']))

 

▼ 위 코드를 실행을 해보면 아래와 같이 상관계수와 공분산이 각 지정한 Column 별로 출력이 되는 걸 확인 하실 수 있습니다. 

# # Column1열과 Column2의 상관계수
-0.3558934488923901

# Column1열과 Column3의 공분산 결과 값
-0.19615429896328176

 

DataFrame Value Sort 하는 방법

 

: 기 구현한 DataFrame에 있는 Value를 Sort 하는 방법에 대해서 설명 드리도록 하겠습니다. 이번에도 axis value를 지정을 해주셔야 하는데, axis value 지정에 따라 행 or 열 기준으로 오름차순, 내림차순으로 정렬이 가능합니다. 여러 가지 예제를 통해서 코드를 구현해보도록 하겠습니다. 

 

▼  여기에서 인지를 하셔야하는 게, ascending value의 default 값은 "True" 즉, 오름차순입니다.

# 열 기준으로 내림차순으로 정렬
print(df2.sort_index(axis=1, ascending=False))

# Column1 기준으로 오름 차순 정렬
print(df2.sort_values(by='Column1'))

# Column2 기준으로 내림차순으로 정렬
print(df2.sort_values(by='Column2', ascending=False))

# Column1, 2 둘다 적용되는 오름차순 정렬
print(df2.sort_values(by=['Column1','Column2']))

 

    Column5   Column4   Column3   Column2   Column1
0 -0.244633 -0.374957 -0.238896 -0.397764 -0.322000
1  1.355599 -0.661707  1.479211 -1.517488 -0.448544
2 -0.592878 -0.879196 -1.034051  1.126799  0.842670
3 -0.012600  0.326936  0.683890  0.614416  0.345653
4 -1.479725  0.247930  0.614557 -0.414769  0.157037
5  0.324576  0.528808  1.133349 -0.278671 -0.259626
6  0.638329 -0.131525  0.035428 -1.086283 -0.637628
7 -1.894404  0.492126 -0.249520 -1.551814  0.677345


    Column1   Column2   Column3   Column4   Column5
6 -0.637628 -1.086283  0.035428 -0.131525  0.638329
1 -0.448544 -1.517488  1.479211 -0.661707  1.355599
0 -0.322000 -0.397764 -0.238896 -0.374957 -0.244633
5 -0.259626 -0.278671  1.133349  0.528808  0.324576
4  0.157037 -0.414769  0.614557  0.247930 -1.479725
3  0.345653  0.614416  0.683890  0.326936 -0.012600
7  0.677345 -1.551814 -0.249520  0.492126 -1.894404
2  0.842670  1.126799 -1.034051 -0.879196 -0.592878


    Column1   Column2   Column3   Column4   Column5
5  1.918225  2.402326 -1.765518 -0.433801 -0.761530
7 -1.942019  0.848240 -0.351322  1.317522 -0.221442
4  0.669753  0.509918 -0.161832 -1.558975  0.935654
1  0.018032  0.030769 -0.326015  0.875171 -1.279888
6 -0.412105 -0.210425 -0.579964 -0.975626  0.595798
2 -0.218168 -0.326969  1.121992  0.395151 -0.053598
3 -1.832705 -0.705669 -1.255540 -0.656330 -0.546327
0 -1.646518 -1.136588 -0.505208 -0.746305 -0.438222


    Column1   Column2   Column3   Column4   Column5
7 -1.942019  0.848240 -0.351322  1.317522 -0.221442
3 -1.832705 -0.705669 -1.255540 -0.656330 -0.546327
0 -1.646518 -1.136588 -0.505208 -0.746305 -0.438222
6 -0.412105 -0.210425 -0.579964 -0.975626  0.595798
2 -0.218168 -0.326969  1.121992  0.395151 -0.053598
1  0.018032  0.030769 -0.326015  0.875171 -1.279888
4  0.669753  0.509918 -0.161832 -1.558975  0.935654
5  1.918225  2.402326 -1.765518 -0.433801 -0.761530

 

 이상입니다. 지금까지 Python의 Pandas 패키지를 이용한 DataFrame 함수를 활용하는 방법 중에 상관계수와 공분산 구하기, DataFrame Sort 하는 방법에 대해서 포스팅을 작성하였습니다. 위 코드를 이해하셨으면 실제로 파이 참에서 실행을 해보시는 걸 추천드립니다. 그럼 최고의 프로그래머가 되는 데 조금이나 도움이 되었으면 좋겠습니다. 이만 마무리하도록 하겠습니다. 감사합니다.

 

[저작권이나, 권리를 침해한 사항이 있으면 언제든지 Comment 부탁드립니다. 검토 후 수정 및 삭제 조치하도록 하겠습니다. 그리고, 기재되는 내용은 개인적으로 습득한 내용이므로, 혹 오류가 발생할 수 있을 가능성이 있으므로, 기재된 내용은 참조용으로만 봐주시길 바랍니다. 게시물에, 오류가 있을 때도, Comment 달아 주시면, 검증 결과를 통해, 수정하도록 하겠습니다.] 

 

 

관련 다른 글

728x90

댓글


// 내부링크를 현재창으로 열기 // Open internal links in same tab