グレー相関

前回の記事ではピアソン相関係数、スピアマン相関係数、ケンダ相関係数        の計算コードを書きましたが、今回はグレー相関分析のコードを書きます。  相関分析・相関係数マトリックスヒートマップ_最後の一杯の水のブログ - CSDNブログ      

グレー相関        分析とは、システムの発展・変化状況を定量的に記述・比較する手法のことであり、その基本的な考え方は、配列の幾何学的形状の類似性に基づいて、関連性が近いかどうかを判断することです。曲線。曲線が近ければ近いほど、対応するシーケンス間の相関が大きくなり、その逆も同様です。

        この方法は、通常、結果に対する各要因の影響を分析する (システム分析) ために使用できますが、時間の経過とともに変化する包括的な評価問題を解決するためにも使用できます。評価対象の時間的変化を部分列として、それぞれの部分列と親列との相関度を求め、その相関の大きさに基づいて結論を導き出します。(理論的な部分は他のブログに基づいています。コードとデータは個人の創作物です。作成の目的は、将来の自分の使用を容易にすることのみです。コード部分は、必要に応じて自分で入手できます。)

ステップ 1: データのクリーンアップとデータの標準化

本記事で使用したデータは以下の通りであり、開発サイクル、在庫撤去サイクル、一戸当たりの安値、土地一区画の平均価格、土地取引総額、土地数の相関を計算しています。取引された土地の面積、取引された土地の面積、利益率などのデータが異なるため、まず無関係なデータ、つまり時間列データを削除し、次にデータを標準化して次元を削除する必要があります。sklearn ライブラリの 3 つの標準化および非正規化手法の紹介_Last Dipper of Water のブログ-CSDN ブログ_sklearn ライブラリが扱う標準化のプロセス

#读取数据
import pandas as pd
df=pd.read_excel(r"C:\Users\86177\Desktop\datas.xlsx")
df

 無関係なデータを削除した後、データを標準化してデータを無次元化します。

df=df.iloc[:,1:]#清除第一列无关数据
#数据标准化
import pandas as pd
from sklearn.preprocessing import StandardScaler
columns=df.columns
#Z-score标准化 将某一列数据处理成均值为0,方差为1的数据。优点是受异常值影响较小。公式为:(X-μ)/σ
standard_s1=StandardScaler()#创建StandardScaler()实例
standard_s1_data=standard_s1.fit_transform(df)#将DataFrame格式的数据按照每一个series分别标准化
standard_s1_data_pd=pd.DataFrame(standard_s1_data,columns=columns)#将标准化后的数据改成DataFrame格式
datas=standard_s1_data_pd
datas

ステップ 2: 分析順序 (参照順序、比較順序) を決定します。

        システムの動作特性を反映する参照シーケンスと、システムの動作に影響を与える比較シーケンスを決定します。システムの動作特性を反映したデータ列を基準列と呼びます。システムの動作に影響を与える要素から構成されるデータ列を比較列と呼びます。

        グレー相関分析は、比較系列とパラメータ系列の相関関係を計算するものとも言えますので、この記事の例では、基準系列は利益率、比較系列は開発サイクル、在庫となります。撤去サイクル、最低単価、単一区画 平均価格、土地取引総額、取引された土地区画数、取引された土地面積。

(1) 参照配列 (マザー配列とも呼ばれます):

(2) 比較シーケンス(サブシーケンスとも呼ばれます)

ステップ 3: 相関係数を計算する

この式は一見複雑に見えますが、実際は非常に単純です。

(1)

これは、基準シーケンスの絶対値から i 番目の比較シーケンスを差し引いた差分シーケンスであり、次に差分シーケンスの最小値を取得し、次に差分シーケンスの最大値を取得します。

(2)

は最小差であり、すべての差シーケンスの最小値の最小値です。たとえば、ここに 7 つの比較シーケンスがある場合、7 つの差シーケンスがあります。各差シーケンスには最小値があります。次に、これら 7 つの中で最小

は最大差分であり、当然すべての差分列の最大値のうちの最大値です。

(3)

これを分解能係数といい、ρが小さいほど分解能が高くなりますが、一般的にρの値の範囲は(0,1)(0,1)(0,1)となりますが、具体的な値は状況に応じて異なります。ρ≤0.5463 の場合、分解能は最高であり、通常は ρ=0.5 です。

まとめ: 基準配列と比較配列が決まると、実際には最小差分と最大差分が求められる値となり、計算式で変わるのは だけです

最大および最小の差分コードを計算します。

#计算最小差值和最大差值
rather_columns=columns[1:].tolist()#比较序列
print('比较数列:{}'.format(rather_columns))
min_s=[]#存储参考序列和每一个比较序列的绝对差值的最小值
max_s=[]#存储参考序列和每一个比较序列的绝对差值的最大值
for column in rather_columns:
    min_=(datas['利润率']-datas[column]).abs().min()#比较数列与参考数列矩阵相减后差值的绝对值里的最小值
    max_=(datas['利润率']-datas[column]).abs().max()#比较数列与参考数列矩阵相减后差值的绝对值里的最大值
    min_s.append(min_)
    max_s.append(max_)
print('最小值:{}'.format(min_s))
print('最大值:{}'.format(max_s))
mmin=min(min_s)#最小差值
mmax=max(max_s)#最大差值
print('最小差值:{}'.format(mmin))
print('最大差值:{}'.format(mmax))

 コードの結果は次のとおりです。

相関係数行列の計算

#计算相关系数矩阵
rho=0.5
for column in rather_columns:
    datas[column]=(mmin+rho*mmax)/(abs(datas['利润率']-datas[column])+rho*mmax)
datas[rather_columns]#相关系数矩阵

結果は次のとおりです。

 

 ステップ 4: 関連性を計算する

実際には、これは各列の平均値であり、たとえば、開発サイクル列の 10 個の数値の平均が、開発サイクルと利益率の相関関係になります。

#计算比较序列与参考序列之间的相关系数
corr=[]
for column in rather_columns:
    corr.append(datas[column].mean())
print('7个比较数列与参考数列的关联度分别为:')
print(corr)

 注: ステップ 4 で相関度を計算するためのコードと、ステップ 3 で相関係数行列を計算するためのコードは、見やすくするためにマージおよび分離することができます。

完全なコードは次から入手できます。

import pandas as pd
#数据读取与清洗
df=pd.read_excel(r"C:\Users\86177\Desktop\层次分析法所用指标.xlsx")
df=df.iloc[:,1:]
#数据标准化
import pandas as pd
from sklearn.preprocessing import StandardScaler
columns=df.columns
#Z-score标准化 将某一列数据处理成均值为0,方差为1的数据。优点是受异常值影响较小。公式为:(X-μ)/σ
standard_s1=StandardScaler()#创建StandardScaler()实例
standard_s1_data=standard_s1.fit_transform(df)#将DataFrame格式的数据按照每一个series分别标准化
standard_s1_data_pd=pd.DataFrame(standard_s1_data,columns=columns)#将标准化后的数据改成DataFrame格式
datas=standard_s1_data_pd
#计算相关系数
rho=0.5
corr=[]#存储比较序列与参考序列之间的相关系数
for column in rather_columns:
    datas[column]=(mmin+rho*mmax)/(abs(datas['利润率']-datas[column])+rho*mmax)
    corr.append(datas[column].mean())
print(datas[rather_columns])#相关系数矩阵
print('7个比较数列与参考数列的关联度分别为:{}'.format(corr))
#计算比较序列与参考序列之间的相关系数
corr=[]
for column in rather_columns:
    corr.append(datas[column].mean())
print('7个比较数列与参考数列的关联度分别为:')
print(corr)

注: 総合評価問題におけるグレー相関読み取りの適用は、比較シーケンスと参照シーケンスの間の相関に基づいて指標 (比較シーケンス) の重みを計算することです。および後で重みを計算するためのコード

おすすめ

転載: blog.csdn.net/m0_56839722/article/details/127709631