MATLAB

MATLABでのテーブルデータの結合操作ガイド

はじめに

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です。

3つのテーブルが読み込まれた状態

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です。

作成されたkey列

外部結合

外部結合には、完全外部結合、左外部結合、右外部結合の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' で結合の方法を指定するようにしましょう。これらの方法を活用することで、異なるデータセットを効率的に結合し、より包括的なデータ解析を行うことができます。自分のプロジェクトに適した方法を見つけてみてください。

-MATLAB
-, , ,