Преобразование данных из веб-сервиса

В этом примере показано, как загрузить данные из веб-сервиса и использовать функцию в качестве считывателя содержимого с webread.

Национальный центр геофизических данных (NGDC) предоставляет различные геофизические и космические данные о погоде через веб-сервис. Среди других наборов данных NGDC агрегирует номера пятен солнца, опубликованные Американской ассоциацией переменных звездных наблюдателей (AAVSO). Использовать webread скачать номера солнечных пятен за каждый год с 1945 года.

api = 'http://www.ngdc.noaa.gov/stp/space-weather/';
url = [api 'solar-data/solar-indices/sunspot-numbers/' ...
       'american/lists/list_aavso-arssn_yearly.txt'];
spots = webread(url);
whos('spots')
  Name       Size              Bytes  Class    Attributes

  spots      1x1269             2538  char               

Веб-сервис NGDC возвращает данные о пятне солнца в виде текста. По умолчанию, webread возвращает данные как символьный массив.

spots(1:100)
ans =

        American
   Year     SSN
    1945    32.3
    1946    99.9
    1947   170.9
    1948   166.6

webread может использовать функцию для возврата данных другого типа. Можно использовать readtable с webread для возврата данных о пятне Солнца в виде таблицы.

Создайте weboptions объект, который задает функцию для readtable.

myreadtable = @(filename)readtable(filename,'HeaderLines',1, ...
    'Format','%f%f','Delimiter','space','MultipleDelimsAsOne',1);
options = weboptions('ContentReader',myreadtable);

Для получения этих данных позвоните readtable с несколькими Name,Value входные параметры для преобразования данных. Для примера, Format указывает, что каждая строка имеет два числа. Пространства являются разделителями, и несколько последовательных пространства рассматриваются как один разделитель. Вызов readtable с этими входными параметрами оберните readtable и аргументы в новой функции, myreadtable. Создайте weboptions объект с myreadtable как средство чтения содержимого.

Загрузите данные о пятне солнца и верните данные как таблицу.

spots = webread(url,options);
whos('spots')
  Name        Size            Bytes  Class    Attributes

  spots      76x2              2932  table              

Отображение данных солнечного пятна по столбцу и строке.

spots(1:4,{'Year','SSN'})
ans = 

    Year     SSN 
    ____    _____

    1945     32.3
    1946     99.9
    1947    170.9
    1948    166.6

Постройте графики номеров пятен по годам. Используйте функции таблицы для выбора номеров солнечных точек до 2013 года. Преобразуйте Year и SSN столбцы для массивов и их построения.

rows = spots.Year < 2014;
vars = {'Year','SSN'};
spots = spots(rows,vars);
year = spots.Year;
numspots = spots.SSN;
figure
plot(year,numspots);
title('Sunspot Data');
xlabel('Year');
ylabel('Number of Sunspots');
xlim([1940 2015])
ylim([0 180])

Агрегированные данные и веб-сервис предоставлены NGDC. Данные Sunspot предоставлены AAVSO, первоначально опубликованные в AAVSO Sunspot Counts: 1943-2013, AAVSO Solar Section (R. Howe, Chair).