他のデータフレームの列を結合する方法

Exploratoryで他のデータフレームの列を結合する方法を説明します。

データを探索していると、例えば他のデータフレームから顧客の詳細情報であったり、国の統計情報であったり、様々な情報を取得して、現在のデータフレームに追加したいということがあると思います。

エクセルの「Vlookup」であったり、SQLの「Join」など、このような時の処理ついて詳しい方もいるかもしれません。

Exploratoryでも同じ様に列ヘッダーメニューからアクセスできる「結合(列を追加する/Join)」コマンドがあります。

「結合(列を追加する/Join)」コマンドは別のデータフレームの列を取ってきます。

また結合には様々な種類があります。

以下が結合の種類となります。

そして結合の方法によって、得られる結果は変わってきます。

以下、それぞれの結合からどのような結果が得られるかを見ていき、Exploratoryでどのように動くかを見ていきます。

1. 左外部結合(Left Join)

これはエクセルの「VLOOKUP」やSQLの「Left Outlier Join(左外部結合)」と原則と同じ動き方をします。

「左外部結合(Left Join)」は現在のデータフレームを保持して、結合したいデータフレームに結合可能な「キー」がない時はNA(欠損値)となります。

緑のテーブルは現在のデータフレームを表しており、青いデータフレームは結合したいデータフレームを表しています。

現在のデータフレームの「carrier」列を、結合したいデータフレームの「code」列と照合して、「name」列の情報を取ってきたいものとします。

緑のテーブルの1行目には「AA」というcarrierがあり、青いテーブルの1行目にも「AA」というcodeがあります。また「UA」という値に関しても同じことが言えます。このように両方に同じ値を持つ場合は「name」の情報を取ってくることができます。

一方で緑のテーブルの2行目の「AB」という値は、結合したいデータフレームにはありません。そういった時は「name」列に結果が返らず、NA(欠損値)となるわけです。

2. 右外部結合(Right Join)

「右外部結合(Right Join)」は共通の値をもたない行に対する結果が「左外部結合(Left Join)」とは異なります。

結合したいデータフレームの行は全て保持して、現在のデータフレームにマッチするキーが無い時はNA(欠損値)を返します。

なお現在のデータフレームに、結合したいデータフレームとマッチするキーがない時はその行は削除されるので注意してください。

3. 完全外部結合(Full Join)

これは左外部結合(Left Join)と右外部結合(Right Join)の両方を兼ね備えた結合方法となります。完全外部結合では、現在のデータフレームおよび、結合したいデータフレームの全ての行を保持して、マッチするキーがない時はNAを返します。

4. 内部結合(Inner Join)

これは完全外部結合(Full Join)とは逆の動き方をします。 マッチするキーがある行のみを保持します。

実践

サンプル データ

もし手を動かして理解を深めたいようでしたら、下記の2つのデータをダウンロードして、以降のステップを実践することができます。

  • US Flight Delay Data - Link
  • Carrier Code List - Link

「US Flight Delay Data」をメインのデータフレームとして、どのように「結合(列を追加する/Join)」するのかを紹介していきます。

データは以下のようになっています。

「CARRIER」列を見ると、これらの2文字のコードがどの航空会社を表しているのか分かりません。

ただ便利なことに今回は2文字の航空会社のコードと会社名の対応表である「US_Airline_Carrier_Code_Short_List」という別のデータフレームがあります。

さまざまな結合タイプを利用して、このデータフレームを「US Flight Delay Data」データフレームに「結合」します。

「US Flight Delay Data」のデータフレームに戻り、テーブルビューを開きます。

左外部結合(Left Join)

まずは左外部結合(Left Join)から始めていきます。

「CARRIER」列の列ヘッダーメニューから「結合(列を追加する/Join)」を選択します。

「結合(列を追加する/Join)」ダイアログが開くので、「左外部結合(Left Join)」が選択されていることを確認します。

続いて、「結合先データフレーム」に「US_Airline_Carrier_Code_Short_List」を選択します。

そして現在のデータフレームと結合先データフレーム、両方の列を選択します。これらの列は2つのデータフレームで一致する「キー」を持つ列です。

今回は、2つのデータフレームをマッチさせるために1つの列(キャリアコード)のみが必要です。ただし、場合によっては複数の列が必要になることもあります。そういった時には、例えば国と名前を使用して2つのデータフレームを一致させることができます。

「実行」ボタンをクリックすると、2つのことに気づくかと思います。

1つ目は、画面の左を見ると結合先のデータフレームの「US_Airline_Carrier_Code_Short_List」が強調表示されているということです。

2点目は結合元のデータフレームに新しい列が追加され、上部にオレンジ色の線が引かれているということです。

さらにサマリビューに移動すると、「name」列にNA(欠損値)があり、これは結合先のデータフレーム「US_Airline_Carrier_Code_Short_List」からのものであることが分かります。

これは結合先のデータフレームにマッチする値がない行があることを意味しています。

チャートビューに移動して、ピボットテーブルを使用すると、VXが対応する「name」を持たない「carrier」であることが分かります。

他の結合がどのように動くか見ていきましょう。

「結合(列を追加する/Join)」ステップのトークンをクリックして、ダイアログを開くと素早く結合のタイプを切り替えることができます。

右外部結合(Right Join)

「右外部結合(Right Join)」を選択して実行すると、ピボットテーブルの「CARRIER」にMQ、US、YVが表示されるようになります。

これらのキャリアのデータは1行しかないことと、「DEP_DELAY(出発遅延)」がないことが分かります。

これは現在のデータフレームに対応する値がない場合でも、「右外部結合(Right Join)」によって結合先のデータフレームのすべての行が保持されるためです。

内部結合(Inner Join)

内部結合(Inner Join)に「結合タイプ」を切り替えると、「左外部結合(Left Join)」で表示されていたVXは表示されなくなり、「右外部結合(Right Join) 」で表示されていたMQ、US、およびYVも表示されなくなりました。

完全外部結合(Full Join)

最後に、両方のデータフレームのすべての行を保持する完全結合を試してみます。

参考記事

他にもExploratoryを始めるにあたって役に立つチュートリアルがあります。

興味がある方はこちらから。

  • Exploratoryの始め方ガイド - Link