スプレッドシート データの 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
は変数のデータ型を自動的に検出します。ただし、データに非標準の日付、持続時間、または繰り返されるラベルが含まれている場合は、それらの変数を正しいデータ型に変換できます。変数を正しいデータ型に変換することで、計算と比較を効率的に実行できるようになり、メモリの使用が改善されます。たとえば、変数 Year
、Month
、DayofMonth
は 1 つの datetime
変数として、UniqueCarrier
は categorical
として、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
を使用してファイルの一部をインポートします。詳細については、「スプレッドシート ファイルのコレクションまたはシーケンスからの読み取り」を参照してください。
参考
readtable
| spreadsheetDatastore