SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

MarkeZine Day(マーケジンデイ)は、マーケティング専門メディア「MarkeZine」が主催するイベントです。 「マーケティングの今を網羅する」をコンセプトに、拡張・複雑化している広告・マーケティング領域の最新情報を効率的にキャッチできる場所として企画・運営しています。

直近開催のイベントはこちら!

MarkeZine Day 2025 Retail

実践!WebマーケターのためのR入門

最終回/ダミー変数を使って上手にデータをまとめ、グループごとの特徴を把握しよう【R入門講座】


単位が異なる変数を扱える技、それが基準化/標準化

 分析を行っていると、単位が異なるデータを扱わないといけない場面に遭遇することがあります。こんな時に大活躍するのが「基準化/標準化」です。

 ん……? わかったつもりで流したけど、そもそも単位が異なるってなんなんだ?

 例えば、ある人の総合的な身体能力を測りたいとしたとします。競技としては以下の6つを用いたとしましょう。

  • 100m競争のタイム(秒)
  • 跳び箱の段数(数)
  • 遠投の距離(メートル)
  • 1分間の反復横跳びの回数(数)
  • 腕立ての回数(数)
  • 1km水泳のタイム(秒)

 さて、これらの項目からどのようにして総合的な判断を下せばよいでしょうか? 

 例えば、それぞれの競技の順位を用いて合計して小さい順に身体能力が高いとするのがいいでしょうか?

 確かに一案ではあります。ただ、せっかく秒単位で記録している情報を順位に変換することが本当に望ましいのでしょうか? また、重視したい競技があったらどうするのがよいでしょうか?

 ここで重要なポイントはそれぞれの競技の単位が異なっているという点です。秒単位の競技の結果と回数単位の競技の結果をそのまま足したり引いたりするのは、直観的にも何かおかしな結果になることは容易に想像がつきますね。

 そこで、それぞれの競技を同じテーブルに乗せるために「標準化(基準化)」というテクニックを用いることで、単位を気にしなくてもよい状況にしたうえでそれぞれの変数を合計することができるようになります。

 昔懐かしい偏差値みたいなものです。もちろん小さい方がよかったり(水泳のタイムとか)、大きい方がよかったり(遠投の距離とか)するのは-(マイナス)をかけて揃えてあげる必要がありますが。

 次に、ただ合計するのではなく、それぞれの競技毎に重み付けを行い合計することで評価者の希望を反映した指標を作成できます。ちなみに基準化すると平均値は0、ばらつきの指標である標準偏差は1となります。

標準化の操作

 それでは早速Rで基準化の操作を行ってみましょう!

scale.dummy<-scale(sample1.dummy[,2:9])

 scaleを使うと簡単に基準化を実行できます!

sample1.dummy[,2:9]

 は、sample1.dummy の2列目から9列目という意味でしたね。

 確認してみましょう。

head(scale.dummy)

 どうやら変更されたようですが? 念のため数値で確認。

summary(scale.dummy)

 平均値は0になっていますね。標準偏差も1になっているか確認したいところです。psychのパッケージを使うことで簡単に出せますよ!

library(psych)
describe(scale.dummy)

 やれやれ、大量に出力されてしまいました。mean(平均値)、sd(標準偏差)、median(中央値)ですね。他の指標はここではいったん横に置いておきましょう。sdは全て1になっていますね。

 続いて、AGE(年齢)を例に取り上げて、基準化前後で比較を行ってみましょう。

AGE<-data.frame(cbind(sample1.dummy[,4],scale.dummy[,3]))

補足

  • data.frame()……R上でデータを取り扱いやすくするおまじないです。
  • cbind(a,b)……aとbの変数をくっつけて新しいテーブルを作成します。
  • sample1.dummy[,4] ……基準化前のAGEを選択
  • scale.dummy[,3]……基準化後のscale.AGEを選択

names(AGE)<-c("AGE","scale.AGE")

 確認してみましょう。

head(AGE)

 うまいこといってますね! 続いて復讐を兼ねて視覚化してみましょう。ライブラリを追加で読み込みます。

library(gridExtra)

 基準化前後でヒストグラムを描きます。第4回記事を参考にしましょう。

p1<-ggplot(AGE,aes(x=AGE)) + geom_histogram()
p2<-ggplot(AGE,aes(x=scale.AGE)) + geom_histogram()
grid.arrange(p1,p2,nrow = 1, ncol=2,main=textGrob("ヒストグラム"))

クリックすると拡大
クリックすると拡大

 左側が基準化前、右側が基準化後です。まず、形は同一ですね?

 ただ、一つ違うのは……、そうです横軸の数値が異なっています。

 そうなんです。

 基準化後はこの例では概ね-2から+2の間に入っています。ついでに散布図も書いてみましょう。

ggplot(AGE,aes(x=AGE,y=scale.AGE))+geom_point()

クリックすると拡大
クリックすると拡大

 見事に右上がりの一直線上に乗っていますね。

cor(AGE)

 AGEとscale.AGEの相関係数は1になっていることも確認できました。

簡単! 2015年2月10日「3つ」覚えて分析から視覚化まで即実践!Rでできるデータ分析講座開催

Rをインストールしたが、無骨なUIに「今日はこのへんで……」と、そっと閉じてしまった方にオススメです!

本講座では実機を使って「できるだけわかりやすく」グラフ化&データ分析をワークショップ形式で簡単に身に付けることができます。

★☆★「Rでできるデータ分析講座」の詳細・お申し込みはこちら★☆★

次のページ
似たようなグループをクラスター分析でサックリ作ってみるぞ

この記事は参考になりましたか?

  • Facebook
  • X
  • Pocket
  • note
関連リンク
実践!WebマーケターのためのR入門連載記事一覧

もっと読む

この記事の著者

豊澤 栄治(トヨサワ エイジ)

株式会社ファンコミュニケーションズ サービス開発部 情報科学技術研究所 所長

横浜国立大学経営学部、一橋大学大学院国際企業戦略研究科卒

SPSS Japan、みずほ第一フィナンシャルテクノロジー(株)、外資系運用会社(Amundi Japan)での経験を活かし、金融の分析ノウハウをマーケティ...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

MarkeZine(マーケジン)
2015/04/21 12:08 https://markezine.jp/article/detail/20790

Special Contents

PR

Job Board

PR

おすすめ

イベント

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング