Main Content

スプレッドシート データの table への読み取り

MATLAB® でスプレッドシート データを表現する最良の方法は table であり、数値とテキストが混在するデータや、変数と行の名前を格納することができます。データは対話的に、またはプログラムによって table に読み込むことができます。対話的にデータを選択するには、[ホーム] タブの [変数] セクションで、[データのインポート] をクリックします。プログラムによってデータをインポートするには、次のいずれかの関数を使用します。

  • readtable — 単一のワークシートの読み取り。

  • spreadsheetDatastore — 複数のワークシートまたはファイルの読み取り。

この例では、両方の関数を使用してプログラムによってスプレッドシート データをインポートする方法を説明します。サンプル データ airlinesmall_subset.xlsx には、1996 ~ 2008 年の間に年ごとに 1 つのシートが含まれています。シート名は、2003 のように年に対応しています。

ワークシートからのすべてのデータの読み取り

readtable を呼び出して、2008 という名前のワークシートのデータをすべて読み取り、最初の 10 行 10 列のみを表示します。名前と値のペアの引数 Sheet を使用して、ワークシート名を指定します。データがファイルの最初のワークシートにある場合は、Sheet を指定する必要はありません。

T = readtable('airlinesmall_subset.xlsx','Sheet','2008');
T(1:10,1:10)
ans=10×10 table
    Year    Month    DayofMonth    DayOfWeek    DepTime    CRSDepTime    ArrTime    CRSArrTime    UniqueCarrier    FlightNum
    ____    _____    __________    _________    _______    __________    _______    __________    _____________    _________

    2008      1           3            4         1012         1010        1136         1135          {'WN'}           752   
    2008      1           4            5         1303         1300        1411         1415          {'WN'}          1161   
    2008      1           6            7         2134         2115        2242         2220          {'WN'}          1830   
    2008      1           7            1         1734         1655          54           30          {'WN'}           302   
    2008      1           8            2         1750         1755        2018         2035          {'WN'}          1305   
    2008      1           9            3          640          645         855          905          {'WN'}           896   
    2008      1          10            4         1943         1945        2039         2040          {'WN'}           120   
    2008      1          11            5         1303         1305        1401         1400          {'WN'}          1685   
    2008      1          13            7         1226         1230        1415         1400          {'WN'}          1118   
    2008      1          14            1         1337         1340        1623         1630          {'WN'}           730   

特定ワークシートからの選択した範囲の読み取り

1996 という名前のワークシートから、'A1:E11' の範囲を指定して最初の 5 列のデータを 10 行だけ読み取ります。関数 readtable が 10 行 5 列の table を返します。

T_selected = readtable('airlinesmall_subset.xlsx','Sheet','1996','Range','A1:E11')
T_selected=10×5 table
    Year    Month    DayofMonth    DayOfWeek    DepTime
    ____    _____    __________    _________    _______

    1996      1          18            4         2117  
    1996      1          12            5         1252  
    1996      1          16            2         1441  
    1996      1           1            1         2258  
    1996      1           4            4         1814  
    1996      1          31            3         1822  
    1996      1          18            4          729  
    1996      1          26            5         1704  
    1996      1          11            4         1858  
    1996      1           7            7         2100  

datetime、duration、または categorical への変数の変換

インポート処理の間に、readtable は変数のデータ型を自動的に検出します。ただし、データに非標準の日付、持続時間、または繰り返されるラベルが含まれている場合は、それらの変数を正しいデータ型に変換できます。変数を正しいデータ型に変換することで、計算と比較を効率的に実行できるようになり、メモリの使用が改善されます。たとえば、変数 YearMonthDayofMonth は 1 つの datetime 変数として、UniqueCarriercategorical として、ArrDelay は分単位の duration として表します。

data = T(:,{'Year','Month','DayofMonth','UniqueCarrier','ArrDelay'});
data.Date = datetime(data.Year,data.Month,data.DayofMonth);
data.UniqueCarrier = categorical(data.UniqueCarrier);
data.ArrDelay = minutes(data.ArrDelay);

遅延が最長である年間通算日を見つけ、その日付を表示します。

ind = find(data.ArrDelay == max(data.ArrDelay));
data.Date(ind)
ans = datetime
   07-Apr-2008

スプレッドシート ファイルからのすべてのワークシートの読み取り

データストアは、複数のワークシートまたは複数のスプレッドシート ファイルに分散した任意の大量のデータを処理するために役立ちます。データストアによって、データのインポートとデータの処理を実行できます。

airlinesmall_subset.xlsx にあるワークシートのコレクションからデータストアを作成し、インポートする変数を選択したうえで、データをプレビューします。

ds = spreadsheetDatastore('airlinesmall_subset.xlsx');
ds.SelectedVariableNames = {'Year','Month','DayofMonth','UniqueCarrier','ArrDelay'};
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   

データをインポートする前に、使用するデータ型を指定できます。この例では、UniqueCarrier を categorical 変数としてインポートします。

 ds.SelectedVariableTypes(4) = {'categorical'};

関数 readall または read を使用してデータをインポートします。関数 readall では、全データをメモリに収める必要があり、これはサンプル データにも当てはまります。インポート後、このデータセットの最大到着遅延時間を計算します。

alldata = readall(ds);
max(alldata.ArrDelay)/60
ans = 15.2333

大規模なデータ セットの場合は、関数 read を使用してファイルの一部をインポートします。詳細については、「スプレッドシート ファイルのコレクションまたはシーケンスからの読み取り」を参照してください。

参考

|

関連するトピック