tokki7127
@tokki7127 (とっきー)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

[python] maxから二番目の数字を取得したい

解決したいこと

相関係数行列の中で(対角線上の値(=1)は除いて)
相関係数の絶対値が最も大きいものを検出したい。 

スクリーンショット 2021-03-10 21.01.51.png

期待した結果
mpg 0.579267
cylinders 0.950721
displacement 0.95072
horsepower 0.897257
weight 0.932824
acceleration 0.420289
model_year 0.579267
origin 0.420289
dtype: float64

該当するソースコード

x.py
# ライブラリをインポートする
import pandas as pd
import numpy as np

# 可視化のためのモジュール
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline

## URLからファイルのパスを読み取る
path = 'http://archive.ics.uci.edu/ml/machine-learning-databases/auto-mpg/auto-mpg.data'

## URLを渡し変数にデータを格納し、カラム名を指定する
mpg_data = pd.read_csv(path, delim_whitespace=True, header=None,
names = ['mpg', 'cylinders', 'displacement','horsepower','weight', 'acceleration', 'model_year', 'origin', 'name'],
na_values='?')

corr = mpg_data.corr()

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

各行ごとに1.0000の次のデータを抜き出したい

データの形はDF

自分で試したこと

x.py
# ライブラリをインポートする
import pandas as pd
import numpy as np

# 可視化のためのモジュール
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline

## URLからファイルのパスを読み取る
path = 'http://archive.ics.uci.edu/ml/machine-learning-databases/auto-mpg/auto-mpg.data'

## URLを渡し変数にデータを格納し、カラム名を指定する
mpg_data = pd.read_csv(path, delim_whitespace=True, header=None,
names = ['mpg', 'cylinders', 'displacement','horsepower','weight', 'acceleration', 'model_year', 'origin', 'name'],
na_values='?')

corr = mpg_data.corr()

#解決策
corr = corr[corr < corr.max()
corr.max()

解決策

これで相関行列以外も対応できる

x.py
corr = corr[corr < corr.max()
corr.max()

#結果
mpg             0.580541
cylinders       0.950823
displacement    0.950823
horsepower      0.897257
weight          0.932994
acceleration    0.423329
model_year      0.580541
origin          0.565209
dtype: float64

データの形
スクリーンショット 2021-03-12 12.25.05.png

0

2Answer

絶対値最大ならmpg列は0.579267ではなく-0.831741なのでは?

size = len(corr)
corr.unstack().iloc[np.argpartition(corr.abs().to_numpy(), kth=-2)[:, -2]+np.arange(size)*size]
# mpg           weight         -0.831741
# cylinders     displacement    0.950721
# displacement  cylinders       0.950721
# horsepower    displacement    0.897257
# weight        displacement    0.932824
# acceleration  horsepower     -0.689196
# model_year    mpg             0.579267
# origin        displacement   -0.609409
# dtype: float64
0Like

Your answer might help someone💌