Matlab Tutorial #4

Indeksowanie macierzy

Przyglądniemy się teraz naszym danym w inny sposób.  Zobaczmy,  jak na przestrzeni lat zmieniała się liczba oddanych do użytku mieszkań budowanych przez inwestorów indywidualnych. W celu zaznajomienia się z problemem, otwórz do podglądu plik arkusza Excel z pierwotnymi danymi.

  • w przeglądarce plików, w oknie current folder kliknij prawym przyciskiem myszy na pliku mieszkania*.xls i wybierz opcję open outside MATLAB

liczba mieszkań - excell

Informacje dotyczące liczby mieszkań oddanych przez inwestorów indywidualnych dla roku 1991 znajdują się w szóstym wierszu. Dla roku 1992 będzie to wiersz 12, dla roku 1993 – wiersz 18 itd. Odstęp jest stały. Interesuje nas grudzień, czyli dwunasta, ostatnia kolumna (informacje zebrane w tej kolumnie dotyczą liczby oddanych do użytku mieszkań pomiędzy styczniem a grudniem, czyli na przestrzeni całego roku). Tak to wygląda w arkuszu excell. Zobaczmy, jak dane prezentują się już po zaimportowaniu do środowiska MATLAB.

  • W oknie poleceń MATLABa wpisz:
load bud
openvar BMdane

BMdane - widok zmiennej

Polecenie load jest odpowiedzialne za wczytanie danych z pliku utworzonego we wcześniejszej części samouczka, z kolei polecenie openvar pozwoliło wyświetlić dane w MATLABowej przeglądarce zmiennych. To co nas zaciekawia, to fakt, że po imporcie danych zniknęły wiersze nagłówkowe. Interesujące dla nas dane, związane z budownictwem indywidualnym,  znajdują się w wierszach 4, 10, 16, itp. Posiadając tę informację możesz utworzyć teraz nową zmienną.

  • Utwórz zmienną indywidualni zawierającą wyłącznie dane o liczbie mieszkań oddanych do użytku przez inwestorów indywidualnych w ciągu pojedynczego roku.
indywidualni = BMdane(4:6:end, 12)

Polecenie oznacza: utwórz nową zmienną indywidualni w ten sposób, że z macierzy BMdane wybierz wiersze od czwartego, co szósty, do ostatniego dostępnego. Ogranicz się do ostatniej (12) kolumny. Jeśli nie wszystko jest dla Ciebie w tym momencie jasne, możesz wykonać kilka dodatkowych ćwiczeń.

  • Utwórz nową zmienną M, kwadrat magiczny o rozmiarach 5x5, a następnie zaindeksuj zmienną M "wyciągając" z niej kolejno:
    1. zawartość komórki znajdującej się w drugim wierszu i trzeciej kolumnie,
    2. zawartość trzeciego wiersza w kolumnach: 1, 2 i 5,
    3. zawartość czwartej kolumny, wiersze od pierwszego, co drugi, do ostatniego.
M = magic(5)
m = M(2, 3)
m = M(3, [1,2,5])
m = M(1:2:end, 2)

Wróćmy do danych dotyczących budownictwa. Przyglądnijmy się, jaka jest zawartość zmiennej indywidualni. Wykres typu bar mógł Ci się trochę opatrzyć, spróbujemy czegoś innego.

  • Wyświetl wykres dla zmiennej indywidualni korzystając z funkcji stem.
stem(indywidualni)

wykres typu stem

Na wykresie widać jeden, dość znacznie wybijający się ponad resztę punkt. Jeśli analizujemy dane tego typu, zazwyczaj interesuje nas zaistniała anomalia. Pierwsze, co chcielibyśmy wiedzieć, to w którym roku doszło do tak dużego odstępstwa od normy. Niestety na osi X wykresu nie mamy podanych dat, mamy jedynie wartości kolejnych indeksów, licząc od pierwszego. Nie sprawiało to nam problemu, kiedy analizowaliśmy dane dotyczące kolejnych miesięcy, obecnie sytuacja zmusza nas do pewnej zmiany w sposobie wyświetlania danych. Funkcje graficzne mogą przyjmować różną liczbę argumentów wejściowych. Do tej pory wywołując daną funkcję graficzną wprowadzaliśmy wyłącznie jeden argument – dane, które miały zostać naniesione na oś Y. Najczęściej jednak wprowadza się dwa argumenty wejściowe – dane dla osi X oraz dane dla osi Y. W naszym wypadku na osi X będziemy chcieli umieścić kolejne lata, poczynając od 1991, a kończąc na ostatnim roku, dla którego zostały zebrane dane. Dane dla osi Y już mamy, te dla osi X musimy stworzyć.

  • Stwórz wektor liczbowy poczynając od wartości 1991, a kończąc na 2015 z krokiem 1
lata = 1991:2015

Powyższe polecenie automatycznie wygenerowało nam odpowiedni wektor (dzięki czemu nie musimy wprowadzać tych danych na zasadzie lata = [1991 1992 1993 … 2015]). Jeżeli chcemy zastosować inny odstęp, z którym generowane są kolejne wartości, polecenie trzeba nieznacznie zmodyfikować wstawiając pomiędzy wartość początkową i końcową jeszcze jeden znak dwukropka oraz pożądany krok. Zazwyczaj wygląda to tak:

t= 0:0.1:1
  • Uaktualnij wykres wykorzystując stworzony przed chwilą wektor czasu lata.
stem(lata, indywidualni)

Wartości na osi X są obecnie prawidłowe, jednak nie wszystkie punkty są opisane – co jest prawidłowym zachowaniem systemu i wynika z potrzeby zachowania czytelności wykresu. Jeśli chcemy dokładnie wiedzieć, jakie są koordynaty interesującego nas „piku”, możemy skorzystać z dwóch opcji.

  • Kliknij na ikonę lupy(+) widoczną na pasku narzędzi wykresu i zaznacz obszar pomiędzy wartościami 2000 a 2010 na osi X(rozciągając kwadrat zaznaczenie wzdłuż całej osi Y). Powrót do wcześniejszego widoku jest możliwy dzięki sąsiadującemu przyciskowi z ikoną lupy(-).
  • Kliknij na ikonę ‘Data cursor’, a następnie na interesujący cię punkt wykresu.

wykres - dodatkowe narzędzia

Jak widać na powyższym wykresie, w 2003 roku inwestorzy indywidualni oddali do użytku ponad 118 tysięcy mieszkań. Ten nietypowy wzrost względem roku poprzedniego można próbować wyjaśnić kilkoma czynnikami. Jest to zwiększenie stawki VAT na materiały budowlane, która miała miejsce na początku roku 2004, zniesieniem ulgi budowlanej w roku 2002 oraz wprowadzeniem kar za korzystanie z mieszkań, które nie posiadały zezwolenia na użytkowanie. Wyższa stawka VAT na materiały budowlane i nowe mieszkania zaczęła obowiązywać od maja 2004. Zobaczmy, czy możemy zaobserwować istotne różnice w liczbie oddanych do użytku mieszkań w pierwszych miesiącach roku 2004. Tym razem po dane sięgniemy do macierzy BMdaneM, gdyż tam mamy zgromadzone informacje dotyczące miesięcznie oddawanych do użytku mieszkań.

  • Z macierzy BMdaneM wybierz i wyświetl dane dotyczące ilości oddanych do użytku mieszkań przez inwestorów indywidualnych w kolejnych miesiącach roku 2004. Dla porównania na jednym wykresie wyświetl analogiczne dane dla lat 2003 i 2005.
ind2004 = BMdaneM(82,:);
ind2003 = BMdaneM(76,:); 

Przed chwilą musiałeś „wklepać” w linii poleceń dwa bardzo podobne do siebie polecenia. Korzystając z klawiszy strzałek możesz czasem ułatwić sobie pracę odwołując się do historii poleceń. Wciśnij teraz przycisk ‘strzałka w górę’ na klawiaturze i zmodyfikuj odpowiednio polecenie by wyliczyć zmienną ind2005.

ind2005 = BMdaneM(88,:); 
bar([ind2003' ind2004' ind2005']);

Praca z wykresem - podstawowe narzędzia

Wykres, który powstał po wydaniu powyższego polecenia nie jest kompletny. Brakuje tu jednej podstawowej rzeczy - opisu. W zasadzie, w przypadku każdego wykresu przydatna jest znajomość trzech podstawowych funkcji pozwalających opisać osie X i Y oraz nadać nazwę. Osie opisać można przy pomocy funkcji xlablel oraz ylabel, natomiast tytuł nadaje się przy pomocy funkcji title.

  • Dodaj do wykresu tytuł oraz opisy osi.
xlabel('miesiąc')
ylabel('liczba oddanych mieszkań')
title('Inwestorzy indywidualni')

Jeżeli argument funkcji jest ciągiem znaków tekstowych, to przy wprowadzaniu tych znaków zawsze należy umieścić je pomiędzy znakami apostrofu ('). Tekst możemy też zapisać w pierwszej kolejności do dedykowanej zmiennej.

tytul = 'Inwestorzy indywidualni';
title(tytul)

Tytuł powinien być dłuższy, ale w tym wypadku warto podzielić go na dwie części, a więc pojawia się potrzeba stworzenia macierzy opisów.  Do konstrukcji takiej macierzy nie wykorzystujemy nawiasów kwadratowych, a nawiasy klamrowe.

tytul = {'Mieszkania oddane do użytkowania'; 'przez inwestorów indywidualnych'}
title(tytul)

W przypadku naszego wykresu, poza standardowym zestawem (tytuł + osie) należy jeszcze zadbać o legendę wyjaśniającą, z czym związane są kolory słupków widoczne na wykresie. Również tym razem potrzebna będzie macierz opisów. Nie ma obowiązku wcześniejszego tworzenia takiej macierzy, niezbędne opisy można "skeić" na bieżąco, podczas wywoływania funkcji legend.

legend({'2003', '2004', '2005'})

wykres z pełnym opisem

Mała uwaga, choć rzecz jest pewnie oczywista: opisy w funkcji legend należy podać w kolejności zgodnej z ułożeniem zmiennych w macierzy trafiającej do funkcji rysującej.

Jedna myśl nt. „Matlab Tutorial #4”

  1. Uwaga do uwagi na końcu 🙂
    Możemy sobie pozwolić na podawanie opisów w legendzie nie w kolejności (nawet opuszczając poszczególne obiekty graficzne) jeśli jest tak potrzeba, np.:
    h = bar([ind2003' ind2004' ind2005']);
    legend(h([3 1]),{'2003','2005'})
    pozdrawiam

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *