LoginSignup
tonnmi0404
@tonnmi0404

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

python 相関係数

python で相関係数を調べようとしています。結果がNoneになってしまうので、def cor(i,j)の後の部分を変えて解決する方法を教えていただきたいです。

scvファイルからi番目とj番目の列を使用して相関係数を求め、i-j=〜〜 のような形で表示させたいです。

発生している問題・エラー

Size of Data = 23
Correlation 1 - 2 =  None
Correlation 1 - 3 =  None
Correlation 1 - 4 =  None
Correlation 1 - 5 =  None
Correlation 1 - 6 =  None
Correlation 1 - 7 =  None
Correlation 2 - 3 =  None
Correlation 2 - 4 =  None
Correlation 2 - 5 =  None
Correlation 2 - 6 =  None
Correlation 2 - 7 =  None
Correlation 3 - 4 =  None
Correlation 3 - 5 =  None
Correlation 3 - 6 =  None
Correlation 3 - 7 =  None
Correlation 4 - 5 =  None
Correlation 4 - 6 =  None
Correlation 4 - 7 =  None
Correlation 5 - 6 =  None
Correlation 5 - 7 =  None
Correlation 6 - 7 =  None
出ているエラーメッセージを入力

例)結果をこんな感じにしたいです

Size of Data = 23
Correlation 1 - 2 =  0.4253466234
Correlation 1 - 3 =  0.8371647382
Correlation 1 - 4 =  0.7462936153
Correlation 1 - 5 =  0.6451837463
Correlation 1 - 6 =  0.0182645283
Correlation 1 - 7 =  0.2537482736
Correlation 2 - 3 =  0.7861273612
Correlation 2 - 4 =  0.7427634748
Correlation 2 - 5 =  0.2365238176
Correlation 2 - 6 =  0.1237864231
Correlation 2 - 7 =  0.4367123128
Correlation 3 - 4 =  0.2498764234
Correlation 3 - 5 =  0.1287631231
Correlation 3 - 6 =  0.2387461231
Correlation 3 - 7 =  0.3876234123
Correlation 4 - 5 =  0.1238761237
Correlation 4 - 6 =  0.2387643712
Correlation 4 - 7 =  0.1238763421
Correlation 5 - 6 =  0.1287637288
Correlation 5 - 7 =  0.9873412312
Correlation 6 - 7 =  0.3687364123

該当するソースコード

import math 

import pandas

data = pandas.read_csv("TravelReview2019.csv").values.tolist()

N = len(data)
print("Size of Data =", N)

def cor(i, j):
   df = pandas.DataFrame(data)
   df.corr()

for m in range(1,8):
    for n in range(m+1, 8):
        print("Correlation", m, "-", n, "= ", cor(m,n))
0

2Answer

def cor(i, j):
   df = pandas.DataFrame(data)
   corr_coeff = df.corr()
   return corr_coeff[i, j]

関数ではi, jの入力値を使わないとcorrelation matrixが返るので上手くいかないのではないでしょうか?

いくつか無駄なことをしているようです。

  1. 読み込んだdataをlistに変換し、ループ内でまたdataframeの戻しています。読み込み時にdataframeのままでいいのでは?
  2. correlation coefficientの計算もループ内でする必要はなく、一回で全部できるのでループの外で計算しましょう。その後、ループでその要素を取り出すことができます。
import pandas

data = pandas.read_csv("TravelReview2019.csv")
N = data.size[0] # or data.size[1]
print("Size of Data =", N)

corr_coeff = data.corr()

for m in range(1,8):
    for n in range(m+1, 8):
        print("Correlation", m, "-", n, "= ", corr_coeff[m, n])
1Like

Comments

  1. def cor(i, j)に間違いがあったので書換えています。

def cor(i, j): に return 文がないので None が返っています。 return してください。

def cor(i, j):
   df = pandas.DataFrame(data)
   return df.corr()
0Like

Comments

  1. @tonnmi0404

    Questioner

    image.jpg
    このような感じで、表になって出てきてしまいました…

Your answer might help someone💌