www.crosshyou.info

政府統計の総合窓口のデータや、OECDやUCIやのデータを使って、Rの練習をしています。ときどき、読書記録も載せています。

都道府県別の定期健康診断結果報告のデータ分析8 - R言語で階層クラスタリング

UnsplashSora Saganoが撮影した写真 

www.crosshyou.info

前回までは回帰分析をしていましたが、

今回はR言語でクラスタリングをしてみようと思います。

まず、クラスタリング用のデータフレームとして、aggregate()関数とmean()関数を使って3年間の平均の値のデータフレームを作成します。

あんまり相関の強い変数は使いたくないので、各変数の相関係数を調べてみます。

numとritsuが -0.301, numとtworatioが -0.506, ritsuとtworatioが 0.230 と相関が低いので、この3つの変数を使ってクラスタリングをしましょう。

とりあえず、この3つの変数の散布図を作成してみます。

クラスタリングは、今回はhierarchy clustering をやってみます。

まず、num, ritsu, towratioだけのデータフレームを作ります。

head()関数ではじめの数行を表示しています。

rownames()関数でデータフレームの行名を設定してます。

つぎの作業は、

scale()関数で変数を平均値0、標準偏差1に標準化します。

summary()関数でデータフレームのサマリーを表示しました。3つの変数のMeanが0になっていることがわかります。

次は dist()関数で距離を計算します。

これは、正直いってよくわかりません。

こうして作成したdistanceオブジェクトをhclust()関数で処理します。

plot()関数で結果を表示できます。

Tokyoがポツンと一軒家状態ですね。Tokyoは特殊なんですね。

Aichi, Kanagawa, Osakaが固まっていたりしていて、なんとなくなるほどね、と思います。

このクラスターの樹形図を基にして、3つのグループにわけてみましょう。

イメージは上の図のように3つにわけます。

df_clがsclae()関数の作用でマトリックスに変換されているので、as.data.frame()関数でデータフレームに戻しています。cutree()関数でk=3にして3つのクラスターにわけています。Aichi, Chiba, Ehimeが1、Akita, Aomorim Fukiが2とグループ化されました。

散布図にしてどのようにクラスタリングされたのかを見てみます。

plot()関数の中で、type = "n" にしてプロットしないようにして、text()関数で文字を表示しています。きれいににグループ化されていることが確認できます。

他の2つの組み合わせも確認しましょう。

うまく3つのクラスターに分けられていることが確認できました。

今回は以上です。

次回は

www.crosshyou.info

です。

初めから読むには、

 

www.crosshyou.info

です。

 

今回使用した関数は

aggregate()関数 : データフレームの値の集計

mean()関数 : 平均値を計算

cor()関数 : 相関係数を計算

plot()関数 : 散布図を描く

head()関数 : データフレームのはじめの数行を表示

rownames()関数 : でデータフレームの行名を表示

summary()関数 : データフレームのサマリーを表示

dist()関数 : 各観測間の距離を計算

hclust()関数 : 距離からクラスターを作成

as.data.frame()関数 : マトリックスをデータフレームに変換

cutree()関数 : クラスターをグループ分け

text()関数 : グラフの中に文字を表示

でした。