Contents
はじめに
MATLABは、テーブルデータの操作も手軽にできます。データ解析をする上で、複数のデータテーブルを結合し、情報を関連付けることでより深くより広くデータを分析することができます。この記事では、MATLABで複数のテーブルを横方向に結合する方法を紹介します。
この記事を読むことで、MATLABでのテーブルの結合方法を理解することができます。
データの準備
以前の記事で、警察庁が発行している交通事故データを使用してPower BIで横方向に結合する方法を紹介しました。今回はそれと同じこと+αをMATLABを使用して行います。過去の記事と同様のデータを使用して行いますので、データのダウンロード等はこちらの記事を参照してください。こちらの記事では、左外部結合を行いましたが、今回は、左外部結合のほか、内部結合、外部結合、右外部結合を行ってみます。
テーブルデータの結合
データの読み込み
まずは、readtable
関数を使用してデータを読み込みます。ファイル名以降の 'VariableNamingRule','preserve'
は、csvファイルの変数名をそのまま使用するためのものです。列名に日本語が含まれたテーブルの場合、MATLABが自動で変数名を書き換えてしまいますが、この設定をしておくと、日本語の変数でもそのままテーブルに採用してくれます。
% データ読み込み
honhyo = readtable("honhyo_2022.csv",'VariableNamingRule','preserve');
hojyuhyo = readtable("hojuhyo_2022.csv",'VariableNamingRule','preserve');
kousokuhyo = readtable("kosokuhyo_2022.csv",'VariableNamingRule','preserve');
MATLAB以下のように3つのテーブルがワークスペースに読み込まれていればOKです。
Key列の作成
3つのテーブルを結合するためには、Keyとなる共通の列が必要です。先の記事と同様に、都道府県コード、警察署等コード、本票番号の3つをを連結してKey列を作成します。
% key列の作成
honhyo.key = [num2str(honhyo.("都道府県コード")),repmat('_',height(honhyo),1),num2str(honhyo.("警察署等コード")),repmat('_',height(honhyo),1),num2str(honhyo.("本票番号"))];
hojyuhyo.key = [num2str(hojyuhyo.("都道府県コード")),repmat('_',height(hojyuhyo),1),num2str(hojyuhyo.("警察署等コード")),repmat('_',height(hojyuhyo),1),num2str(hojyuhyo.("本票番号"))];
kousokuhyo.key = [num2str(kousokuhyo.("都道府県コード")),repmat('_',height(kousokuhyo),1),num2str(kousokuhyo.("警察署等コード")),repmat('_',height(kousokuhyo),1),num2str(kousokuhyo.("本票番号"))];
MATLABこんな感じでkey列が各テーブルで作成できていればOKです。
外部結合
外部結合には、完全外部結合、左外部結合、右外部結合の3パターンがあります。MATLABでは、outerjoin
関数を使用して外部結合を行いますが、引数 'Type'
で結合の方法を制御します。詳しくはMathworksさんのこちらのドキュメントを参照してください。以下では、本票と補充票の結合を例にそれぞれ解説します。
完全外部結合
完全外部結合とは、左右両方のテーブルの一致する行を結合させ、一致しない行は左右どちらの行も保持します。完全外部結合を行う場合は、引数'Type'
を'full'
とします。outerjoin
関数の既定値は、'full'
なので'Type'
を何も指定しない場合は、完全外部結合となります。
% 完全外部結合による本票と補充票の結合
full_outer_join = outerjoin(honhyo,hojyuhyo,'Type','full',"Keys","key");
MATLAB左外部結合
次に左外部結合です。左外部結合は、左に指定したテーブルに存在するすべての右テーブルの行を結合します。右に指定したテーブルにしか存在しない行は結合されません。左外部結合では、引数'Type'
を'left'
に指定します。
% 左外部結合による本票と補充票の結合
left_outer_join = outerjoin(honhyo,hojyuhyo,'Type','left',"Keys","key");
MATLAB右外部結合
次に右外部結合です。右外部結合は、先ほどの左外部結合とは逆で右に指定したテーブルに存在するすべての左テーブルの行を結合します。左に指定したテーブルにしか存在しない行は結合されません。右外部結合では、引数'Type'
を'right'
に指定します。
% 右外部結合による本票と補充票の結合
right_outer_join = outerjoin(honhyo,hojyuhyo,'Type','right',"Keys","key");
MATLAB内部結合
次に内部結合です。内部結合は、左右両方のテーブルに存在するものしか結合しません。内部結合の場合は、innerjoin
関数を使用します。
% 内部結合による本票と補充票の結合
inner_join = innerjoin(honhyo,hojyuhyo,"Keys","key");
MATLABまとめ
この記事では、MATLABでテーブルデータを読み込み、Keyを作成し、横方向に連結する方法を紹介しました。読み込んだテーブルに適切なKey列が存在しない場合は、Key列を作成します。外部結合の場合は、引数 'Type'
で結合の方法を指定するようにしましょう。これらの方法を活用することで、異なるデータセットを効率的に結合し、より包括的なデータ解析を行うことができます。自分のプロジェクトに適した方法を見つけてみてください。