-
-
Notifications
You must be signed in to change notification settings - Fork 1
/
data.qmd
227 lines (174 loc) · 12.1 KB
/
data.qmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
---
title: "データの種類と表現方法"
execute:
echo: true
---
```{r}
#| include: false
source("data-raw/zoo.R")
```
データ分析を行う上では「データ」のことを知らなくては進めません。
データの種類は数値だけではありません。さらに数値にもいくつかのタイプがあります。
最近ではビックデータや機械学習の普及によりログデータや画像、動画ファイルをデータとして扱う機会も増えていますが、ここではデータの種類として古くから存在する表形式のデータを例に解説します。
## データの種類
データと言われて思い浮かべるものはなんでしょうか。
ここではデータをさまざまな計測や観察により得られる情報のことを示します。
対象から情報を引き出したものと言い換えることもできます。
多くは数値の形をしていますが、文字列である場合もあります。
データの例をあげてみましょう。
ある動物について、体の一部の大きさや体重を測る、雌雄を調べる。
これらはデータの一つです。
体の部位や体重は数値によって観測されますが、雌雄は「雄」や「雌」という文字列で記録されるのが一般的です。
Rを使ったデータの記述方法を紹介します。
ここではある動物の種類についての体重と分類群を調べた結果を入力します。
`c()`関数[^ch2-1]の括弧の中(<ruby>引数<rt>ひきすう</rt></ruby>)に値である数値や文字列を記述します。
値と値の間にカンマ `,` を入力すると複数の値を記述することになります。
数値は直接入力できますが、文字列を与えるときは引用符 `"` で文字列を囲む必要があります。
[^ch2-1]: cは「組み合わせる」の英単語であるcombineに由来します。
```{r}
#| code-fold: false
# ある動物の種類についての体重と分類群を調べました
# 複数の値を並べるときは カンマ , を使います
c(6, 3.5, 5.4)
# 文字列は 引用符 " で囲みます
c("食肉類", "鳥類", "食肉類")
```
「複数の動物の体重」のように、共通の手法によって得られた値のことを<ruby><strong>変数</strong><rt>へんすう</rt></ruby>といいます。
動物の体重は、個体や種類が違うと値も変わります。
このように対象によって数値が変わるもの、変化する値を意味します。
### 変数の性質の違い
体重を記録するときは数値を用いました。
このように**数量を表す変数のことを量的変数**といいます。
数値からなる変数なので、平均を求めたり大きい順番に並び替えるといった処理が可能です。
量的変数の場合、数値の種類によってさらに離散変数と連続変数に分類できます。
<strong>とり得る値が一定の間隔によりバラバラな変数を<ruby>離散<rt>りさん</rt></ruby>変数</strong>と呼びます。
例えばサイコロの出目は一般的に1から6までの整数であるため、離散変数です。
また動物を1頭、2頭と数えた個体数も同じです。
離散型の量的変数に対し、**連続値で表現される変数を連続変数**といいます。
`r df_zoo$weight_kg[2]`$kg$、`r df_zoo$weight_kg[3]`$kg$のように表現される体重は連続変数です。
では雌雄や分類群はどのように記録するのが適切でしょうか。
これらは数量として扱いにくいものです。
「雄」や「雌」、「鳥類」や「霊長類」という具合に項目を変数として扱う場合、
それは**質的変数**またはカテゴリ変数と呼ばれます。
質的変数は量的変数のように足し算や引き算といった計算ができないのが特徴です。
<!-- 因子、水準 -->
::: {.callout-note .tokupon_none}
#### 測定の尺度
変数の性質により、量的変数と質的変数をより細かく分類することもあるよ。
尺度水準と呼ばれる基準を用いると、量的変数は間隔尺度と比例尺度に、質的変数は名義尺度と順序尺度に分けて考えることができるんだ。それぞれの特徴を説明するね。
- 比例尺度: 量的変数のうち値の比それ自体に意味のある尺度。
- 間隔尺度: 量的変数で値の差自体に意味のある尺度。`例) 華氏で記録した温度`
- 順序尺度: 質的変数で項目に順序があるもの。大小の比較ができるが演算には意味を持たない。代表値は最頻値や中央値で表される。`例) 動物の保全状況`
- 名義尺度: 質的変数のうち、順序がないもの。値の比較や演算に意味を持たず、数値を単なる名前として対象に割り振る。このとき代表値の指標としては最頻値のみが利用できる。名義尺度だけで与えられるデータをカテゴリデータと呼ぶこともある。`例) 雌雄、動物の分類群`
:::
データの種類に応じて名前がついている理由は、
データの種類によって適切なデータ分析の手法が異なるためです。
データ分析を行う際は、データがどの種類の変数なのか意識することが大切です。
## データフレーム
データ分析の作業においては、データの変数を比較し、関係を調べることが頻繁に行われます。
特定の個体や観測について複数の項目を同時に扱えるようにするために、データを表形式でまとめて表現します。
これを表データまたは**データフレーム**と呼びます。
データフレームの例として、いくつかの動物の体の大きさ(体長)と体重の記録をデータフレームにまとめてみましょう。
データフレームでは個人や個体、観測といったデータを一つの**行**にまとめます。
レッサーパンダの体長と体重の行、チンパンジーの体長と体重の行と、それぞれの値を行単位で記録します。
22種類の動物のデータをとった場合は22行、40種の動物についてであれば40行となりますね。
また、動物の分類群や名前や体長、体重といった変数を**列**として表します。
```{r}
#| echo: false
df_zoo_subset <-
df_zoo |>
dplyr::filter(name %in% c("レッサーパンダ", "チンパンジー", "マントヒヒ", "ライオン", "フンボルトペンギン")) |>
purrr::set_names(c("分類群", "動物の名前", "体長(cm)", "体重(kg)"))
```
```{r}
#| label: tbl-zoo_subset
#| tbl-cap: 5種の動物についての体長・体重のデータフレーム
df_zoo_subset
```
データフレームではデータを横に見たものが行、縦に見たものを列と考えます。
@tbl-zoo_subset のデータフレームは`r nrow(df_zoo_subset)`行`r ncol(df_zoo_subset)`列のデータフレームといえます。
::: {.callout-tip .tokupon_none}
#### 表計算ソフトウェアでも表データを扱う
表計算ソフトウェアにデータを記録するときもデータフレームと同じ形式をとるよ。
ここでは1,2,3といった数字が行、A、B、Cといったアルファベットが列を示しているね。
それぞれの値を記録している場所のことをセルというよ。
これはデータを記録している番地のようなもので、例えば、チンパンジーの体重はC3を参照すれば良いことになるね。
![表計算ソフトウェアで表データを扱う](images/excel_table.png)
:::
先ほど`r nrow(df_zoo_subset)`種の動物のデータフレームを示しましたが、データ分析を進めていくには
より多くのデータが必要になります。
たくさんのデータがあれば、データから見えてくる傾向・パターンも見えやすくなります。
ここでは22種の動物について、同様の体長、体重を調べたデータを用意しました。
ここからはこの[**動物データ**](dataset.qmd#とくしま動物園で飼育される動物の体の大きさと体重) (@tbl-zoo) を使い、データを調べていくことにします。
このデータは[とくしま動物園](https://www.city.tokushima.tokushima.jp/zoo/index.html)で
飼育される動物について記録したものです。詳細は付録[データセット](dataset.qmd#とくしま動物園で飼育される動物の体の大きさと体重)で解説しています。
### Rでのデータフレーム操作
**動物データ**はcsvファイルと呼ばれるテキストファイルの一種に記録されたデータです。
csvファイルはデータを記録するためのファイル形式として広く使われるもので、
カンマ `,` によって変数を区切っていくのが特徴です。
データフレーム同様、個体や観測のデータを一つの行にまとめます。
具体的には**動物データ**の中身は次のようになっています。
```
taxon,name,body_length_cm,weight_kg
食肉類,レッサーパンダ,63.5,6
鳥類,ホオジロカンムリヅル,100,3.5
食肉類,コツメカワウソ,64,5.4
以下省略...
```
Rではcsvをはじめとした各種ファイルをデータフレームとして扱うための関数が用意されています。
`read.csv()`関数でcsvファイルを読み込むには、関数の第一引数にファイルのパス(置き場所)を文字列で与えて実行します。データは`df_zoo`というオブジェクトに格納され、いつでも表示(参照)できるようになっています。
```{r}
#| label: read.csv
#| eval: false
#| echo: true
#| code-fold: false
# dfはデータフレーム(data frame)の頭文字から
# 動物データの読み込み
df_zoo <-
read.csv("data-raw/tokushima_zoo_animals22.csv")
```
```{r}
#| label: tbl-zoo
#| tbl-cap: 動物データ
#| eval: true
#| echo: true
#| code-fold: false
df_zoo
```
上記のコマンドの実行により、データフレームが出力されたかと思います。
一行目の出力が変数を示しています。これは列の名前(列名)とも呼ばれます。
データフレームをプログラミング言語で扱うときはこの列名にはできるだけ英語やローマ字を使ったものにしましょう。
漢字やひらがなを使うと意味がわかりやすいですが、海外で開発されたRのようなプログラムは日本語の扱いに不自由な点があるためです。
ここでも次のように**動物データ**の列名を日本語から英語に変えてあります。
- `taxon`: 動物の分類群
- `name`: 動物の種名
- `body_length_cm`: 体長(単位はcm)
- `weight_kg`: 体重(単位はkg)
変数を参照するにはドル記号 `$`を使います。
```{r}
#| echo: true
#| code-fold: false
# データフレーム中の変数を参照するにはドル記号 $ に続けて変数名を与えます。
df_zoo$name
```
ファイルを用意せずに、直接データフレームの生成もできます。
これには`data.frame()`関数と`c()`関数を使います。
`data.frame()`関数の引数に`変数名 = 値`の形式でデータを与えていきます。
文字列の変数は引用符 `"` で囲む点、データの区切りにはカンマ `,` を使う点に注意してください。
```{r}
#| label: data.frame
#| echo: true
#| eval: false
#| code-fold: false
data.frame(
taxon = c("食肉類", "鳥類", "食肉類"),
name = c("レッサーパンダ", "ホオジロカンムリヅル", "コツメカワウソ"),
body_length_cm = c(6.0, 3.5, 5.4),
weight_kg = c(63.5, 100, 64.0))
```
<!-- Windowsなら read.table('clipboard') が手軽?-->
## まとめと課題
- データをとる対象ごとに得られる、共通の手法によって得られた値のことを変数と呼びます。
変数は性質の違いによって分類できます。身近なものを対象に分類をしてみましょう。
## 参考文献・URL
- @isbn9784065238097