データサイエンス基本編 | R | データの中心を求める方法

前回の記事では achievement.csvを読み込んでxという名前をつけました。
この名前を通してデータを操作してみましょう。

確認すべきはデータの要約

これからデータを考察しようとする場合、まず確認すべきはデータの要約です。

具体的には以下の二つを調べます。

  • データの中心
  • データの幅

データの中心

データの中心は平均値が代表されることが多いですが、その他には中央値がよく使われます。

データの幅

データの幅については分散や標準偏差などで表されます。

先ほど読み込んだデータを元に実際にRを操作して確認してみましょう。

平均値とは

データを全て出してからデータの個数で割った値です。
まず先ほどachievement.csvを読み込んで「x」というオブジェクトを作りました。
これを使ってクラスの数学の平均点を確認してみましょう。

この場合データの中で数学を記録した列を指定する必要があります。
これをRでは「データオブジェクト名$別名」と指定します。
真ん中に挟むのは半角のドルマークです。

具体的にはこうします。
「x」の後に$(ドルマーク)そして、「mathematics」を入力して実行

R | 数学のみ表示
# 数学のみ表示
x$Mathematics

この結果出力されているのはデータの数学列に記録されていた得点になります。

得点は40人分あることが確認できます。

それではオブジェクト「x$mathematics」の平均値を求めてみましょう。
Rでは平均値ももちろん関数を使って求めることができます。

平均を出すには mean()関数を使います
その引数としてデータ列を指定します。

R | 数学のみの平均値
# 数学のみの平均値
mean(x$Mathematics)

データの足し上げて、個数で割る計算

ちなみにデータを足して、個数で割る計算はこのようにも実行できます。
sum関数は合計
そして、length関数は個数。つまり、長さを求める関数です。
割り算の/(スラッシュ)を書き、分母としては要素の個数を調べるためlength関数を使います。

R | 数値の合計 / その個数
# 数値の合計 / その個数
sum(x$Mathematics)/length(x$Mathematics)

同じ結果を得られますが、
もちろん、関数を利用した方が簡単に計算結果を得ることができます。

中央値

中央値とは

データの中心、中央値
データの中心を把握する際に平均はよく用いられています。

その他にデータの中心を理解するには、データを大きさで並べ替えた真ん中の値を指す中央値があります。

これはmedian()関数で求められます。

R | 中央値
# 中央値
median(x$Mathematics)

中央値と平均値は一般には一致しません。
その典型的な例は年収が挙げられます。

例えば、社員10人の会社で年収がそれぞれこのようだったとします。
300,300,300,300,400,400,400,2000,9000

数字が10個ありますが、この平均を計算するにはc()関数という関数でデータをまとめます
これにsalaryというオブジェクト名をつけておきましょう。

salaryオブジェクトに代入し、c()関数で数値を一つずつ入力しましょう。

ちなみに、このように複数の値を一つにまとめたものをベクトルと言います。※この例ではsalaryオブジェクトがそれを指します。

オブジェクトの中でベクトルという構造を持っているという意味になります。
平均値はこのようになります。

R | 社員 10 人の会社で年収
# 社員 10 人の会社で年収
salary <- c(300,300,300,300,400,400,400,2000,9000)
salary
R | 年収の平均値
# 平均値
mean(salary)
中央値の場合にはこうなります。

R | 年収の中央値
# 中央値
median(salary)

感覚としては中央値の方が練習の実態に近いと感じられるのではないでしょうか。
これについては後でデータの幅を説明する際にもう一度説明します。

ここで全ての科目について平均点を調べてみましょう。
mean関数を全ての科目に適用して行きます。

mean関数で「x」の中のEnglishを指定
mean関数で「x」の中のHistoryをして以下同様に行いましょう。

R | データの幅
# データの幅
mean(x$English)
mean(x$History)
mean(x$Japanese)
mean(x$Information)
mean(x$Science)
mean(x$Mathematics)

今、列ごとに一つずつに関数を適用しました。
しかし、実は各列の平均点をまとめて求める方法があります。

Rでは列ごとに平均値を求める関数colMeans()関数があります
この関数を使えばメイン関数を6回繰り返し実行する必要はありませんそれではこのように入力してみてください。

R | 各列の平均点をまとめて求める
# 各列の平均点をまとめて求める
colMeans(x[,-c(1,2)])
すると実行結果では全ての科目が表示されその数値も同じ結果が出ています。

ただ丸括弧内()の入力がなんだ?と気になった方もいらっしゃると思います。

この理由はオブジェクトxの1列目と2列目が「名前」と「性別」であるためです。
これらは数値でないので平均値の計算はできません。

そこで1,2列以外の列について平均値を求めるように指定する必要があります。
Rでは列の位置、または行の位置を「添え字」という方法で指定します。

今の例ですと、xオブジェクトの1,2列を除いて各列の平均値を求めているわけです。

Rではデータの一部
特に行番号や列番号を指定したいときに[]を使います。
そして、[](角括弧)の内部は,(カンマ)で前半と後半に分かれ、
前半は行の指定
後半は列の指定
になります。

上の実行例では,(カンマ)の前半は何も指定していません。
このように何も指定しない場合には自動的に全ての行を指定したことになります。

また、後半にはc()関数にて「-c(1,2)」と指定しました。
c()関数の前にマイナス記号を付けて、1,2列目を取り除く指定になります。