MATLAB IMPORT DANYCH

Temat, którym miałem zająć się już dawno: import danych do MATLABa z zewnętrznych źródeł – plików zapisanych w różnych formatach, repozytoriów z danymi czy ze stron internetowych. Jak robić to poprawnie, a w przypadku wielu źródeł, jak zautomatyzować ten proces? Odpowiedz będzie w serii kolejnych wpisów na blogu.

Obecnie gromadzimy ogromne ilości danych. Mają one bardzo różny charakter, od alfanumerycznych danych statystycznych, przez obrazy, wyniki pomiarowe po rejestrowane sygnały. Często mamy do czynienia z danymi o charakterze hybrydowym, to znaczy jedno repozytorium zawiera informacje numeryczne i tekstowe jednocześnie. Do tego format zapisu danych, też może być różny – nie ma tu jednego uniwersalnego podejścia chociaż dominuje zapis tabelaryczny, znany chociażby z arkuszy kalkulacyjnych. Jest to wygodna forma zapisu, dzięki czemu dane łatwo zaimportować do dowolnego programu i poddać je analizie.

MATLAB oferuje wiele narzędzi do importu danych, które można podzielić na dwie grupy: funkcje skryptowe wywoływane z programu bądź wiersza poleceń oraz wbudowane narzędzia do importu danych z własnym interfejsem użytkownika. Pierwsze są przeznaczone do odczytu danych z plików na dysku lub źródeł w Internecie, które są zapisane w określonym formacie. Druga grupa tzw. kreatorów importu jest bardziej uniwersalna i pozwala na wczytanie danych o niemal dowolnym formacie. Co więcej, na podstawie stworzonego scenariusza importu, można utworzyć funkcję skryptową i używać jej wprost w treści programu. Pozwala to na automatyzacje całego procesu w przyszłych programach, dzięki czemu nie trzeba ręcznie ustawiać parametrów wczytywania danych. W dzisiejszym wpisie omówię to drugie podejście do importu oraz pokażę jak stworzyć taką funkcję. Za przykład posłużą nam dane pomiarowe z systemu pomiaru parametrów ruchu drogowego, zawierające informacje na temat prędkości pojazdów, ich długości, liczbie i rozstawie osi, naciskach na oś, itd.

Dane z użyciem kreatora możemy zaimportować na dwa sposoby. Przeciągając je ręcznie do okna ‘workspace’ lub klikając ikonę ‘Import Data’. W tym drugim przypadku MATLAB poprosi nas o wskazanie pliku do importu.

Dane z systemu pomiaru parametrów ruchu drogowego są zapisane w formacie TSV (tab – separated values). Jest to popularny rodzaj zapisu, w którym dane są w postaci tabelarycznej, a kolejne kolumny są oddzielone tabulatorami (Inny popularny format to csv – comma - separated values). W przykładowym pliku znajduje się nagłówek – pierwsza linia to słowna nazwa kolumny. Ta cecha jest bardzo pożądana, gdyż informacje te będzie można wykorzystać do nadana zmiennym w MATLABie nazw odpowiadających nazwie kolumny. Po przeciągnięciu pliku do ‘workspace’ otworzy się okno kreatora, w którym główną część zajmuje podgląd danych.

Standardowe czynności, które należy wykonać przy imporcie to:

  1. Określenie rodzaju separatora – w naszym przypadku ‘Tab’,
  2. Podanie zakresu danych do importu ‘Range’ – tu należy zwrócić uwagę, że pierwszy rząd zawiera opis nazwy kolumny. MATLAB rozpoznaje to automatycznie i ustawia „Variable name row” na wartość 1. Można również ręcznie zaznaczyć obszar danych do importu, przeciągając kursor bezpośrednio na danych.
  3. Określenie typu zmiennej, w której będą w MATLABie przechowywane zaimportowane dane – to bardzo ważny krok (patrz wpis: http://matlablog.ont.com.pl/matlab-kurs-podstawowy-3-typy-danych/). W przypadku danych hybrydowych najbardziej uniwersalnym typem danych będzie tabela lub komórka. Dzięki temu każda kolumna będzie mogła być zapisana w innym formacie od numerycznego po tekstowy. To jaki charakter ma dana kolumna MATLAB wykrywa automatycznie, ale można to również ręcznie ustawić w górnym wierszu nad danymi.
  4. Ręcznie możemy również wpisać nazwy kolumn, które posłużą do nazwania zmiennych, albo tak jak w naszym przypadku zdać się na opis z nagłówka pliku.
  5. W części ‘Unimportable cells’ możemy zdecydować co ma się stać z komórkami, których MATLAB z jakiegoś powodu nie jest w stanie odczytać. Można je usunąć, bądź zastąpić NaN.  

Jeżeli popełniliśmy jakiś błąd w ustawieniach, MATLAB podświetli na żółto te komórki, które nie zostaną poprawnie zaimportowane. Na przykład w naszym zbiorze danych występują dane numeryczne i tekstowe. Jeżeli ustawimy typ zmiennej na ‘Numeric matrix’, MATLAB nie zaimportuje poprawnie danych tekstowych i zastąpi je NaN. I odwrotnie, importowanie liczb jako ‘String array’ nie jest najlepszym pomysłem. Dlatego w przypadku danych ze stacji pomiarów parametrów ruchu drogowego, wybierzemy opcję ‘Table’. Wtedy, różne zmienne będą mogły mieć różny format.

Po ustawieniu wszystkich parametrów można przejść do importu. Rozwijając menu ‘Import Selection mamy do wyboru:

Import Data – jednokrotny import danych do przestrzeni roboczej MATLABA.

Generate Script – utworzenie skryptu, zawierającego instrukcje do importu danych według ustawień z kreatora ale z pliku o konkretnej nazwie.

Generate Function – jak wyżej, ale otrzymujemy funkcję, która jako argumenty przyjmuje nazwę pliku oraz numery wierszy początkowego i końcowego dzięki czemu można podać zakres importu danych. Jest na najbardziej przydatna i uniwersalna funkcja.

Dzięki wygenerowanej funkcji, możemy wielokrotnie ładować dane z różnych plików, podając jako argument funkcji ich nazwę. Dzięki temu eliminujemy potrzebę ręcznego importu danych! To bardzo pomocna funkcjonalność - raz stworzona funkcja może być wywoływana wielokrotnie w pętli, w której wczytujemy np. pliki z danego katalogu. Z takim przypadkiem mamy do czynienia w przypadku danych ze stacji pomiarowej. Każdy dzień jest zapisany w osobnym pliku. Dzięki użyciu funkcji z kreatora importu, możemy wczytać dane ze wszystkich plików automatycznie.

W kolejnych wpisach pokaże jak zrealizować wczytywanie wielu plików o różnych nazwach oraz poruszę kolejne wątki związane z importem danych. Rozważymy również „trudne przypadki”.

(Visited 2 703 times, 1 visits today)

Dodaj komentarz

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