データの結合を学ぶ
データの結合
データの結合は、2つのデータセットを一定のルールに基づいてまとめる操作です。以下に、様々な結合方法の説明と具体的な例を示します。
共通部分を残す (inner join)
2つのデータセットの共通部分のみを結果として残します。
例
左のデータ
ID | 名前 |
---|---|
1 | 田中 |
2 | 佐藤 |
3 | 鈴木 |
右のデータ
ID | 年齢 |
---|---|
2 | 25 |
3 | 30 |
4 | 28 |
結合結果
ID | 名前 | 年齢 |
---|---|---|
2 | 佐藤 | 25 |
3 | 鈴木 | 30 |
左側のデータを残す (left join)
左のデータセットの全てのデータを残し、右のデータセットとマッチするデータがあれば結合します。マッチしない場合は、右の部分に<NA>
が表示されます。
例
左のデータ
ID | 名前 |
---|---|
1 | 田中 |
2 | 佐藤 |
3 | 鈴木 |
右のデータ
ID | 年齢 |
---|---|
2 | 25 |
3 | 30 |
4 | 28 |
結合結果
ID | 名前 | 年齢 |
---|---|---|
1 | 田中 | <NA> |
2 | 佐藤 | 25 |
3 | 鈴木 | 30 |
右側のデータを残す (right join)
右のデータセットの全てのデータを残し、左のデータセットとマッチするデータがあれば結合します。マッチしない場合は、左の部分に<NA>
が表示されます。
例
左のデータ
ID | 名前 |
---|---|
1 | 田中 |
2 | 佐藤 |
3 | 鈴木 |
右のデータ
ID | 年齢 |
---|---|
2 | 25 |
3 | 30 |
4 | 28 |
結合結果
ID | 名前 | 年齢 |
---|---|---|
2 | 佐藤 | 25 |
3 | 鈴木 | 30 |
4 | <NA> | 28 |
左右両方のデータを残す (outer join)
左のデータセットと右のデータセットの両方のデータを残します。
マッチしない場合は、該当する部分に<NA>
が表示されます。
例
左のデータ
ID | 名前 |
---|---|
1 | 田中 |
2 | 佐藤 |
3 | 鈴木 |
右のデータ
ID | 年齢 |
---|---|
2 | 25 |
3 | 30 |
4 | 28 |
結合結果
ID | 名前 | 年齢 |
---|---|---|
1 | 田中 | <NA> |
2 | 佐藤 | 25 |
3 | 鈴木 | 30 |
4 | <NA> | 28 |
右に存在しない左のデータを残す (left anti join)
左のデータセットの中で、右のデータセットとマッチしないデータのみを残します。
例
左のデータ
ID | 名前 |
---|---|
1 | 田中 |
2 | 佐藤 |
3 | 鈴木 |
右のデータ
ID | 年齢 |
---|---|
2 | 25 |
3 | 30 |
4 | 28 |
結合結果
ID | 名前 |
---|---|
1 | 田中 |
左に存在しない右のデータを残す (right anti join)
右のデータセットの中で、左のデータセットとマッチしないデータのみを残します。
例
左のデータ
ID | 名前 |
---|---|
1 | 田中 |
2 | 佐藤 |
3 | 鈴木 |
右のデータ
ID | 年齢 |
---|---|
2 | 25 |
3 | 30 |
4 | 28 |
結合結果
ID | 年齢 |
---|---|
4 | 28 |
組み合わせの爆発
データを結合する際、キーとして使用する列に重複した要素が存在すると、予期しない数の行が生成されることがあります。
これを「組み合わせの爆発」と呼び、誤ったデータを生み出す可能性があります。
ゆえに、nehan の「キー列を指定する結合」において、組み合わせ爆発が発生した場合は強制的にエラーが発生します。(オプションで制御は可能)
例
左のデータ
キー | 名前 |
---|---|
A | 田中 |
A | 佐藤 |
B | 鈴木 |
右のデータ
キー | 年齢 |
---|---|
A | 25 |
A | 28 |
B | 30 |
上記のデータで、“キー”列を基に結合すると以下のようになります。
結合結果
キー | 名前 | 年齢 |
---|---|---|
A | 田中 | 25 |
A | 田中 | 28 |
A | 佐藤 | 25 |
A | 佐藤 | 28 |
B | 鈴木 | 30 |
左のデータのキー A に対して 2 つの行が、右のデータのキー A に対しても 2 つの行が存在するため、結合結果はキー A に対して 4 つの行が生成されました。
これが「組み合わせの爆発」の例です。