MATLAB DATASTORE – SELEKTYWNE WCZYTYWANIE DANYCH

W poprzednich dwóch wpisach była mowa o wykorzystaniu kreatora importu oraz gotowych funkcji do automatycznego wczytywania danych z wielu plików. Ale co w sytuacji, gdy objętość pliku przekracza dostępną w komputerze pamięć RAM lub gdy chcemy wczytać tylko cześć danych z dużego repozytorium? Z pomocą przychodzi obiekt o nazwie datastore.

Użycie obiektu datastore do wczytywania danych nie jest tylko alternatywą do metod przedstawionych w poprzednich wpisach. Ten sposób oferuje dużo więcej:

  • Datastore i skojarzone z tym obiektem funkcje pozwalają operować na bardzo dużych plikach, których objętość przekracza dostępną w komputerze pamięć RAM.
  • Datastore umożliwia na odczyt wybranego fragmentu danych z dużego repozytorium,.

  • Datastore umożliwia wczytanie danych w standardowych formatach xlsx, txt, tsv, xsv, itp. lecz również dane o niestandardowej strukturze (przy użyciu np. funkcji importu stworzonej w kreatorze).

Daje więc możliwość nie tylko na sekwencyjne wczytywanie danych z plików, ale również selektywne wczytywanie fragmentu danych z pliku bez potrzeby jego importu w całości do przestrzeni roboczej MATLABa. W przypadku repozytoriów „ważących” setki mega- lub gigabajty datastore jest nieocenione.

Na początek przyjrzyjmy się w jaki sposób zaimportować selektywnie dane z jednego pliku tsv, czyli o strukturze tabeli, w której kolejne kolumny są oddzielone tabulatorem. Wykorzystam pliki z poprzednich postów, zawierające wyniki pomiarowe ze stacji monitoringu parametrów ruchu drogowego. Nie są to duże pliki ale na potrzeby przykładu możemy sobie wyobrazić, że posiadają duże objętości.

Plik = 'C:\Users\Piotr\.......\pl-dk79kochanow-kat-2013-05-13.tsv';
ds = tabularTextDatastore(Plik, 'FileExtensions','.tsv');

Użyłem funkcji ‘tabularTextDatastore’, która jest predysponowana do odczytu danych o wspomnianej strukturze. W efekcie powstał obiekt datastore o nazwie ds, który przechowuje informacje na temat zawartości pliku, nazw wykrytych zmiennych w kolumnach, formatowania tekstu, kodowania znaków, itp. A więc „pojemnik” ten zawiera informacje o cechach pliku i jego zawartości bez wczytywania pliku do pamięci! Dzięki temu możemy wczytać cały plik lub jego fragment. Możemy również zobaczyć tylko podgląd pliku, czyli kilka pierwszych wierszy:

preview(ds)

Do poszczególnych pól obiektu ds możemy odnosić się poprzez indeksowanie z kropką. Na przykład możemy sprawdzić jakie zmienne zostały automatycznie wykryte:

ds.VariableNames 
'arrived'               'gap'       'lane'     'avc'       'sclass'  'speed' 'acceleration'     'direction'           'axes'    'length' 'dist1'    'dist2'                'dist3'    'dist4'    'dist5'    'dist6'    'dist7'    'weight'                'axis1'    'axis2'    'axis3'    'axis4'    'axis5'    'axis6'    'axis7'                'axis8'    'rawweight'        'rawaxis1'            'rawaxis2'            'rawaxis3'            'rawaxis4'            'rawaxis5'                'rawaxis6'            'rawaxis7'            'rawaxis8'            'sensor3temp'   'sensor4temp'  'unittemp' 

Jest to zbieżne z tym co obserwowaliśmy podczas importu danych w poprzednich postach.

Na uwagę zasługuje właściwość ReadSize:

ds.ReadSize

Właściwość ta określa ile pierwszych wierszy z pliku zostanie wczytanych. Jeżeli chcemy więc aby było to więcej lub mniej niż domyślnie ustawione 20000 to wartość tego pola należy zmienić. Powiedzmy, że interesuje nas tylko 100 pierwszych rekordów:

ds.ReadSize = 100;
dane1 = read(ds);

Zmienna dane1, zawiera 100 pierwszych wierszy z pliku oraz wszystkie kolumny reprezentujące zmienne. Jeżeli chcemy wczytać tylko wybrane zmienne należy wpisać ich nazwy do pola SelectedVariableNames:

ds.SelectedVariableNames = {'arrived', 'speed', 'length'};
dane2 = read(ds);

Teraz zostały wczytane kolumny reprezentujące zmienne o określonych nazwach. W ten sposób możemy łatwo wybierać, która partia danych ma być wczytana do MATLABowego workspace’a.

Jeżeli natomiast chcemy wczytać wszystko można od razu użyć funkcji readall().

Omówione funkcje i sposoby wczytywania danych to zaledwie czubek góry lodowej datastore. W dokumentacji MATLABa znajdziecie więcej funkcji i przykładów i dostosujecie programy do swoich potrzeb. W archiwum tutaj, znajdziecie pełny przykład z dzisiejszego postu.

(Visited 210 times, 1 visits today)

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *