ドキュメンテーション

このページは前リリースの情報です。該当の英語のページはこのリリースで削除されています。

Excel スプレッドシートからのデータのインポート

MATLAB では、スプレッドシートのデータをインポートするための、対話方式とプログラム方式の両方のツールが提供されています。スプレッドシートのデータを対話方式でインポートする場合は、インポート ツールを使用したスプレッドシート データの読み取りを参照してください。この例では、readtable および spreadsheetDatastore を使用してプログラムによってデータをインポートする方法を示します。

  • Excel® スプレッドシート ファイルのワークシートにデータがある場合は、readtable を使用します。

  • スプレッドシート ファイルの複数のシートか、複数のスプレッドシート ファイルの集合にデータがある場合は、spreadsheetDatastore を使用します。

この例で使用するデータは、1996 年から 2008 年における米国の国内航空会社のフライトから取得されたものです。この情報は、Excel® ファイルの複数のシートで構成され、各シートには 1 年間のデータが含まれています。http://stat-computing.org/dataexpo/2009/the-data.html から、すべてを含んだデータセットをダウンロードしてください。

スプレッドシートのデータをテーブルとしてインポート

スプレッドシートは、数やテキストの列で構成されたデータを含んでいます。MATLAB® の table データ型では、このような列ごとに並べられた異種混合データをそのまま利用することができます。テーブルを使用して、データと共に変数名や行名を 1 つのコンテナーに格納できます。

関数 readtable を使用して、スプレッドシートから table にデータをインポートします。結果の table、airlinedata は、スプレッドシートの列ごとに 1 つの変数を含んでいます。既定では、readtable はファイルの最初の行のデータを変数名として処理します。

airlinedata = readtable('airlinesmall_subset.xlsx');

データのサブセットのインポート

スプレッドシートからデータの一部のみをインポートする場合は、関数 readtableRange の名前と値のペアで呼び出します。Range の名前と値のペアの値は、インポートする行と列のサブセットを指定します。

airlinedata = readtable('airlinesmall_subset.xlsx','Range','A1:F10');

特定のワークシートからのインポート

既定では、readtable は最初のワークシートのデータを読み取ります。ただし、Sheet の名前と値のペアによって、読み取るワークシートを指定できます。たとえばこの例のデータは、年ごとのワークシートで構成されています。名前と値のペアの引数を使用してワークシート名を指定することで、特定のワークシートからデータをインポートします。

airlinedata = readtable('airlinesmall_subset.xlsx','Sheet','2008');

MATLAB データ型によるテーブルの変数の表現

インポート処理の際、readtable はデータがテキストと数値のいずれであるかを検出します。ただし、MATLAB® ネイティブ データ型の追加機能を利用することで、変数のデータ型を変換するように選択できます。たとえば、日付と時間の情報をもつ変数を datetime に変換することで、日付と時間の効率的な計算、比較および書式設定された表示を行うことができます。

変数名を指定することで、変換する変数のみを含むより小さなテーブルを作成します。

data = airlinedata(:,{'Year','Month','DayofMonth','UniqueCarrier','ArrDelay'});
data(1:5,:)
ans=5×5 table
    Year    Month    DayofMonth    UniqueCarrier    ArrDelay
    ____    _____    __________    _____________    ________

    2008      1          3             'WN'             1   
    2008      1          4             'WN'            -4   
    2008      1          6             'WN'            22   
    2008      1          7             'WN'            24   
    2008      1          8             'WN'           -17   

readtable は最初の 3 つの変数 (列) である YearMonth および DayofMonth を日付情報を含む数値データとしてインポートします。4 番目の変数 UniqueCarrier は、繰り返し配置されるラベルを含むテキストとしてインポートされます。最後に、5 番目の変数 ArrDelay は飛行時間の情報を含む数値データとしてインポートされます。

YearMonth および DayofMonthdatetime 型として、UniqueCarriercategorical として、さらに ArrDelay は分単位の duration として表します。

data.Date = datetime(data.Year,data.Month,data.DayofMonth); % Columns 1 through 3
data.UniqueCarrier = categorical(data.UniqueCarrier);
data.ArrDelay = minutes(data.ArrDelay);

スプレッドシートの集合からデータをインポート

datastore は、複数のファイルにわたる任意の大量のデータを処理するために役立ちます。データのインポートとデータの処理は、データ ストアによって実行できます。

airlinesmall_subset.xlsx のスプレッドシートの集合から datastore を作成し、内容をプレビューします。

ds = spreadsheetDatastore('airlinesmall_subset.xlsx');
p = preview(ds);
p(:,1:7)
ans=8×7 table
    Year    Month    DayofMonth    DayOfWeek    DepTime    CRSDepTime    ArrTime
    ____    _____    __________    _________    _______    __________    _______

    1996      1          18            4         2117         2120        2305  
    1996      1          12            5         1252         1245        1511  
    1996      1          16            2         1441         1445        1708  
    1996      1           1            1         2258         2300        2336  
    1996      1           4            4         1814         1814        1901  
    1996      1          31            3         1822         1820        1934  
    1996      1          18            4          729          730         841  
    1996      1          26            5         1704         1705        1829  

変数名を指定することにより、インポートする変数を選択します。

ds.SelectedVariableNames = {'Year','Month','DayofMonth','UniqueCarrier','ArrDelay'};

MATLAB® ネイティブ データ型の追加機能を利用するために、データをインポートする前に変数ごとにデータ型を指定できます。

UniqueCarrier を categorical 変数としてインポートします。

ds.SelectedVariableTypes(4) = {'categorical'};
preview(ds)
ans=8×5 table
    Year    Month    DayofMonth    UniqueCarrier    ArrDelay
    ____    _____    __________    _____________    ________

    1996      1          18             HP              6   
    1996      1          12             HP             11   
    1996      1          16             HP            -13   
    1996      1           1             HP              1   
    1996      1           4             US             -9   
    1996      1          31             US              9   
    1996      1          18             US             -2   
    1996      1          26             NW            -10   

関数 read または readall を使用して、datastore からデータをインポートします。データは、関数 read を使用して一度に 1 ファイルか、readall を使用してデータ ストアのすべてのファイルからインポートできます。既定では、read はファイル内のすべてのワークシートを 1 つの table として取り込みます。

alldata = read(ds);

インポートするデータ量を制御するには、read を呼び出す前にデータ ストアの ReadSize プロパティを調整します。

ds.ReadSize = 'sheet';
data1996 = read(ds); % reads first worksheet
data1997 = read(ds); % reads the next worksheet

スプレッドシートからの段階的なデータの読み取りと処理

非常に大きなデータセットを使用している場合はメモリに収まらないことがあるため、データ ストアから読み取りながら、部分ごとに段階的に処理することが有効です。

関数 hasdataread および reset を使用して、table の目的のデータを選択および処理し、スプレッドシートごとに最大到着遅延を計算します。

reset(ds) % start reading from the first sheet
mdelay = [];
while hasdata(ds)
    t = read(ds);
    m = max(t.ArrDelay);
    mdelay = vertcat(mdelay,m);
end

各年について最大到着遅延を表示します。

year = 1996:2008 ;     
mdelayInHours = mdelay/60; % Convert to hours
plot(year,mdelayInHours,'-o','LineWidth',2);
xlabel('Year')
ylabel('Max Delay (hours)')
title('Flight Delay Trend by Year')

データ ストアの同様の処理は、MATLAB® の MapReduce フレームワークでも使用できます。詳細については、MapReduce のドキュメンテーションを参照してください。