Статьи

Анализ наборов данных воздушного движения FAA с использованием облачных чисел

Федеральное авиационное управление США (FAA) ежемесячно публикует набор данных о производительности по времени для всех авиакомпаний, имеющих сертификат авиаперевозчика Министерства транспорта США (DOT). Управление по исследованиям и инновационным технологиям (RITA) FAA Бюро статистики транспорта (BTS) публикует наборы данных в виде предварительно сжатых файлов значений с разделителями-запятыми (CSV, Excel) здесь :

образНажмите на изображение, чтобы просмотреть полную версию.

BTS также публикует сводные данные о своевременной работе, такие как график процента выполненных рейсов (2011–2012), показанный здесь с акцентом на:

образ

При нажатии на одну из полос по умолчанию отображаются данные о задержке рейсов за последние 10 лет:

образ

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


Схема и размер базы данных FAA On_Time_Performance

Файл базы данных за январь 2012 года, который был последним доступным на момент написания этого поста, содержит 486 133 строки из 83 столбцов, только некоторые из которых представляют интерес для анализа своевременной производительности:

OnTimePerformance2012-01InExcel

ZIP-файл содержит файл Readme.html с макетом записи (схемой), содержащей имена и описания полей.

Размер извлеченного файла CSV за январь 2012 года составляет 213 455 МБ, что указывает на то, что данные за год будут иметь около 5,8 миллионов строк и будут иметь размер около 2,5 ГБ, что ограничивает возможность получения статуса больших данных.

Применение фильтра для отображения рейсов с задержкой вылета> 0 показывает, что 151 762 (31,2%) из 486 133 рейсов за месяц страдали задержкой вылета на 1 минуту или более:

OnTimePerformance2012-01Filtered

Вы заметите, что на многих рейсах с задержкой вылета не было задержек прибытия, что означает, что полет превысил запланированную продолжительность. Задержки прибытия более важны для пассажиров, поэтому более подходящим является фильтр по задержкам прибытия> 0 (149 036 рейсов, 30,7%):

образ

 


Пример решения «Cloud Numerics» под кодовым названием Microsoft для анализа задержек прибытия авиаперевозчиков

Кодовое название Microsoft «Cloud Numerics» — это проект инкубатора SQL Azure Labs для численного анализа и анализа данных «учеными-данными, количественными аналитиками и другими, которые пишут приложения на C # в Visual Studio. Это позволяет масштабировать, развертывать и запускать эти приложения в Windows Azure »с помощью высокопроизводительных вычислений (HPC) для параллельной обработки распределенных массивов данных. Текущая версия ограничена массивами, которые помещаются в основную память кластера Windows 2008 R2 Server. Как отмечает команда «Cloud Numerics», данные на диске могут быть предварительно обработаны существующими инструментами обработки «больших данных» [такими как Hadoop / MapReduce] и загружены в приложение «Cloud Numerics» для дальнейшей обработки.

  • В статье OakLeaf « Кодовое имя Microsoft« Cloud Numerics »из публикации SQL Azure Labs от 22.01.2012 (обновлено 17.03.2012) описывается создание примера приложения по умолчанию с помощью шаблона приложения Microsoft Cloud Numerics для Visual Studio 2010 и его запуск в Windows. Эмуляторы Azure Development Fabric и Storage на локальном компьютере разработчика. Этот образец использует матрицу внутренних генераций случайных чисел для своих чисел.
  • Развертывание «Облако Числовые» Примеры приложений для Windows Azure HPC Clusters пост 1/28/2012 описывает развертывание немного более сложный пример приложения Скрытое семантическое индексирование для размещенных вычислительных кластеров и сервисов хранения в Windows Azure.

Roope Astala из команды под кодовым названием «Cloud Numerics» описал пример «Cloud Numerics»: анализ данных « своевременного» воздушного движения в публикации 3/8/2012 в блоге команды:

Вы сидите в аэропорту только для того, чтобы засвидетельствовать ваше время вылета. Подожди. Ваш рейс снова задерживается, и вы задаетесь вопросом «что происходит?» Вы можете предсказать, сколько времени потребуется, чтобы прибыть в пункт назначения? Есть ли много коротких задержек перед вами или просто несколько долгих? Этот пример демонстрирует, как вы можете использовать «Числовые данные облака» для просеивания и расчета достаточно большого сечения данных о воздушном движении, необходимых для ответа на эти вопросы. Мы будем использовать своевременные данные о производительности Министерства транспорта США для анализа распределения задержек.

Данные доступны по адресу http://www.transtats.bts.gov/DL_SelectFields.asp?Table_ID=236&DB_Short_Name=On-Time . Этот набор данных содержит данные для каждого регулярного рейса в США с 1987 по 2011 год и, как и следовало ожидать, огромен! Для вашего удобства мы загрузили образец продолжительностью 32 месяца (один файл в месяц, содержащий около 500 000 рейсов в каждом) в хранилище BLOB-объектов Windows Azure по этому URI контейнера: http://cloudnumericslab.blob.core.windows.net/flightdata .

Вы не можете получить доступ к этому URI напрямую в браузере, вы должны использовать API клиента C # хранилища … или запрос API REST ( http://cloudnumericslab.blob.core.windows.net/flightdata?restype=container&comp=list ), чтобы вернуть общедоступный список блобов, первые три элемента которого показаны здесь:

OnTimePerformanceBlobList

Даты образцов файлов варьируются с мая 2009 года по декабрь 2011 года; месяцы не появляются последовательно в списке.

Cloud Numeric IParallelReaderInterface может использовать четыре вычислительных экземпляра ExtraLarge с восемью ядрами для обработки всех 32 месяцев параллельно, если вы получили разрешение превысить значение по умолчанию 20. В отличие от большинства других проектов инкубатора SQL Azure Labs, Cloud Numerics не предлагает бесплатные ресурсы Windows Azure для запуска примеров проектов. Экземпляры ExtraLarge Compute стоят 0,96 долл. США за час развертывания, поэтому назначение ядра каждому месяцу обойдется в 3,84 долл. США за час развертывания. Сообщение Рупа рекомендует:

При развертывании приложения в Windows Azure необходимо использовать от двух до четырех вычислительных узлов. Одному узлу может не хватить памяти, а для развертываний большего размера в образце набора данных недостаточно файлов для назначения всем процессам распределенного ввода-вывода. Вы не должны пытаться запустить приложение в локальной системе из-за передачи данных и требований к памяти . [Акцент добавлен.]

Запись!

Вы указываете, сколько вычислительных узлов выделяется при использовании утилиты развертывания облачных чисел для настройки кластера Windows Azure (по умолчанию 3). Подробнее см. В этом разделе руководства « Приступая к работе» .

 


Создание решения OnTimePerformance из шаблона приложения Microsoft Cloud Numerics

Шаблон приложения Microsoft Cloud Numerics предлагает создать новое решение MSCloudNumerics1.sln с шестью предварительно созданными проектами:

  • AppConfigure
  • AzureSampleService
  • ComputeNode
  • Внешний интерфейс
  • HeadNode
  • MSCloudNumericsApp

Изменения в коде шаблона требуются только для файла класса Program.cs проекта MSCloudNumericsApp.

Чтобы создать решение AirCarrierOnTimeStats.sln и добавить обязательную ссылку, выполните следующие действия:

1. Запустите Visual Studio 2010 Web Developer Express или более позднюю версию, выберите «Создать», «Проект», чтобы открыть, выберите приложение Microsoft Cloud Numerics и назовите проект AirCarrierOnTimeStats:

образ

2. Нажмите OK, чтобы создать шаблонное решение.

3. Щелкните правой кнопкой мыши узел MSCloudNumericsApp и выберите Добавить ссылку, чтобы открыть одноименный диалог. Прокрутите и выберите библиотеку Microsoft.WindowsAzure.StorageClient на вкладке .NET:

образ

4. Нажмите ОК, чтобы добавить ссылку на проект.


Замена кода шаблона процедурами, специфичными для OnTimePerformance

1. Воссоздайте предварительно созданный класс Program.cs MSCloudNumericApp, заменив весь предварительно собранный код класса Program.cs следующим, используя заглушки блоков и процедур:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using msnl = Microsoft.Numerics.Local;
using msnd = Microsoft.Numerics.Distributed;
using Microsoft.Numerics.Statistics;
using Microsoft.Numerics.Mathematics;
using Microsoft.Numerics.Distributed.IO;
using Microsoft.WindowsAzure;
using Microsoft.WindowsAzure.StorageClient;
namespace FlightOnTime
{ 
   [Serializable]
   public class FlightInfoReader : IParallelReader<double>
   {

   }

   class Program
   {
      static void WriteOutput(string output)
      {

      }

      static void Main()
      {
         // Initialize runtime
         Microsoft.Numerics.NumericsRuntime.Initialize();
         // Shut down runtime
         Microsoft.Numerics.NumericsRuntime.Shutdown();
      }
   }
}

2. Добавьте методы для чтения данных блога, заменив заглушку открытого класса FlightInfoReader следующим кодом:

[Serializable]
 public class FlightInfoReader : IParallelReader<double>
 {

    string _containerAddress;

    public FlightInfoReader(string containerAddress)
     {
         _containerAddress = containerAddress;
     }
 
    public int DistributedDimension
     {
         get {return 0;}
         set {}
     }
 
    public Object[] ComputeAssignment(int ranks)
     {
         // Get list of flight info files (blobs) from container
         var container = new CloudBlobContainer(_containerAddress);
         var blobs = container.ListBlobs().ToArray();
 
        // Allocate blobs to workers in round-robin fashion
         List<Uri> [] assignments = new List<Uri> [ranks];
         for (int i = 0; i < ranks; i++)
         {
             assignments[i] = new List<Uri>();
         }
 
        for (int i = 0; i < blobs.Count(); i++)
         {
             int currentRank = i % ranks;
             assignments[currentRank].Add(blobs[i].Uri);
         }
         return (Object[]) assignments;
     }
 
    public msnl.NumericDenseArray<double> ReadWorker(Object assignment)
     {
         
         List<Uri> assignmentUris = (List<Uri>) assignment;
 
        // If there are no blobs to read, return empty array
         if (assignmentUris.Count == 0)
         {
             return msnl.NumericDenseArrayFactory.Create<double>(new long[] { 0 });
         }
 
        List<double> arrivalDelays = new List<double>();
 
        for (int blobCount = 0; blobCount < assignmentUris.Count; blobCount++)
         {
             // Open blob and read text lines
             var blob = new CloudBlob(assignmentUris[blobCount].AbsoluteUri);
             var rows = blob.DownloadText().Split(new char[] {'\n'});
             int nrows = rows.Count();
 
            // Offset by one row because of header file, also, note that last row is empty
             for (int i = 1; i < nrows - 1; i++)
             {
                 // Remove quotation marks and split row
                 var thisRow = rows[i].Replace("\"", String.Empty).Split(new char[] { ',' });
  
                 // Filter out canceled and diverted flights
                 if (!thisRow[49].Contains("1") && !thisRow[51].Contains("1"))
                 {
                     // Add arrival delay from column 44 to list
                     arrivalDelays.Add(System.Convert.ToDouble(thisRow[44]));
                 }
             }
         }
         // Convert list to numeric dense array and return it from reader
         return msnl.NumericDenseArrayFactory.CreateFromSystemArray<double>(arrivalDelays.ToArray());
     }
 }

 

3. Считайте данные и внедрите алгоритм статистики, заменив статическую пустую главную заглушку следующим:

static void Main()
 {
     // Initialize runtime
     Microsoft.Numerics.NumericsRuntime.Initialize();
 
    // Instantiate StringBuilder for writing output
     StringBuilder output = new StringBuilder();
 
    // Read flight info
     string containerAddress = @"http://cloudnumericslab.blob.core.windows.net/flightdata/";
     var flightInfoReader = new FlightInfoReader(containerAddress);
     var flightData = Loader.LoadData<double>(flightInfoReader);
 
    // Compute mean and standard deviation
     var nSamples = flightData.Shape[0];
     var mean = Descriptive.Mean(flightData);
     flightData = flightData - mean;
     var stDev = BasicMath.Sqrt(Descriptive.Mean(flightData * flightData) * ((double)nSamples / (double)(nSamples - 1)));
 
    output.AppendLine("Mean (minutes), " + mean);
     output.AppendLine("Standard deviation (minutes), " + stDev);
 
    // Compute how much of the data is below or above 0, 1,...,5 standard deviations
 
    long nStDev = 6;
     for (long k = 0; k < nStDev; k++)
     {
         double aboveKStDev = 100d * Descriptive.Mean((flightData > k * stDev).ConvertTo<double>());
         double belowKStDev = 100d * Descriptive.Mean((flightData < -k * stDev).ConvertTo<double>());
         output.AppendLine("Samples below and above k standard deviations (percent), " + k + ", " + belowKStDev + ", " + aboveKStDev);
     }
 
    // Write output to a blob
     WriteOutput(output.ToString());
 
    // Shut down runtime
     Microsoft.Numerics.NumericsRuntime.Shutdown();
 }

 

4. Запишите результаты в большой двоичный объект в вашей учетной записи хранения Windows Azure, заменив заглушку WriteOutput на следующую:

static void WriteOutput(string output)
 {
     // Write to blob storage
     // Replace "myAccountKey" and "myAccountName" by your own storage account key and name
     string accountKey = "myAccountKey";
     string accountName = "myAccountName";
     // Result blob and container name
     string containerName = "flightdataresult";
     string blobName = "flightdataresult.csv";
 
    // Create result container and blob
     var storageAccountCredential = new StorageCredentialsAccountAndKey(accountName, accountKey);
     var storageAccount = new CloudStorageAccount(storageAccountCredential, true);
     var blobClient = storageAccount.CreateCloudBlobClient();
     var resultContainer = blobClient.GetContainerReference(containerName);
     resultContainer.CreateIfNotExist();
     var resultBlob = resultContainer.GetBlobReference(blobName);
 
    // Make result blob publicly readable,
     var resultPermissions = new BlobContainerPermissions();
     resultPermissions.PublicAccess = BlobContainerPublicAccessType.Blob;
     resultContainer.SetPermissions(resultPermissions);
 
    // Upload result to blob
     resultBlob.UploadText(output);
 }

 

Замените myAccountName именем вашей учетной записи хранения Windows Azure, а myAccountKey — именем ключа доступа вашей учетной записи хранения Windows Azure после завершения процесса настройки кластера в следующем разделе.

5. Щелкните правой кнопкой мыши узел AppConfigure и выберите Set as StartUp Project:

образ


Настройка решения AirCarrierOnTimeStats

В этом разделе предполагается, что у вас есть учетные записи Windows Azure Compute и Storage, которые необходимы для загрузки и запуска решения в Windows Azure. Если у вас нет подписки на эти учетные записи, вы можете подписаться на трехмесячную бесплатную пробную версию здесь . Бесплатная пробная версия включает в себя:

  • Виртуальная машина вычислений: 750 часов малых вычислений в месяц
  • Реляционная база данных: 1 ГБ, веб-версия, база данных SQL Azure
  • Хранение: 20 ГБ с 1 000 000 транзакций хранения
  • Сеть доставки контента (CDN): 500 000 транзакций CDN
  • Передача данных (пропускная способность): неограниченный входящий / 20 ГБ исходящий

Небольшие вычислительные узлы имеют эквивалент одного ядра ЦП 1,6 ГГц, 1,75 ГБ ОЗУ, 225 ГБ хранилища экземпляров и «умеренную» производительность ввода-вывода. Если вы сконфигурируете минимальное рекомендуемое количество экземпляров Extra Large CPU с восемью ядрами в каждом, вы будете тратить 18 часов Small Compute в час на развертывание решения. Два дополнительных экземпляра Small Compute предназначены для главного узла и веб-роли (интерфейс). Смотрите шаг 11 ниже для более подробной информации.

Совет . См. Статью « Развертывание примеров« облачных чисел »в кластерах HPC Windows Azure», где приведено описание аналогичного примера приложения облачных чисел, если вам нужны более подробные инструкции по развертыванию проекта.

1. Создайте или используйте подписку с группой Affinity, которая указывает центр обработки данных в северной части США, где хранятся большие двоичные объекты.

2. В Visual Studio выберите Build, Configuration Manager, чтобы открыть диалоговое окно Configuration Manager, выберите Release в списке конфигураций Active Solution и нажмите OK, чтобы изменить конфигурацию сборки с Debug на Release:

образ

Если вы не строите для Release, задание Cloud Numerics, отправленное вами в конце этого сообщения, не будет выполнено до конца.

3. Нажмите F5, чтобы построить решение и запустить процесс настройки с помощью утилиты развертывания Cloud Numerics.

4. Скопируйте идентификатор подписки с портала управления и вставьте его в текстовое поле «Идентификатор подписки»:

образ

5. Если вы ранее создали сертификат Microsoft Cloud Numerics Azure Management, нажмите кнопку «Обзор», чтобы открыть диалоговое окно «Безопасность Windows», и выберите сертификат в списке:

образ 

В противном случае нажмите кнопку «Создать», чтобы открыть диалоговое окно «Имя сертификата», примите «Имя сертификата», найдите папку, в которой будет храниться файл * .cer, и укажите имя файла:

образ

Нажмите кнопку ОК, чтобы принять сертификат и закрыть диалоговое окно.

6. Если вы создали новый сертификат, появится следующее диалоговое окно.

образ

Нажмите OK, чтобы подтвердить любой процесс.

7. Вернитесь на портал управления, выберите Сертификаты управления на панели навигации, выберите соответствующую подписку:

образ 

8. Нажмите кнопку Добавить сертификат в группе Сертификаты, чтобы открыть диалоговое окно Добавить новый сертификат управления.

9. Нажмите кнопку «Обзор», чтобы открыть диалоговое окно «Открыть», перейдите в папку, в которой вы сохранили файл сертификата для предыдущего или нового сертификата, и дважды щелкните файл * .cer, чтобы добавить его:

образ

10. Нажмите кнопку ОК, чтобы завершить процесс добавления сертификата, убедитесь, что сертификат отображается под узлом подписки, и вернитесь в диалоговое окно «Утилиты».

11. Введите глобально уникальное размещенное имя службы, aircarrierstats для этого примера и выберите центр обработки данных в северо-центральной части США в списке Location:

образ

В процессе настройки также будет создана учетная запись хранения с именем службы и ее именем.

12. Нажмите кнопку Далее, чтобы выбрать кластер на вкладке Azure, введите и имя администратора, пароль и подтвердите пароль:

образ

13. По умолчанию Утилита указывает 3 очень больших вычислительных узла, которые имеют 8 ядер ЦП на экземпляр. Максимальное количество ядер по умолчанию (без запроса дополнительной поддержки Windows Azure Billing) равно 20, поэтому измените количество вычислительных узлов на 2, в результате чего общее количество ядер составит 18, включая Head и Web FrontEnd.

14. Нажмите кнопку «Далее», чтобы активировать вкладку «Сервер SQL Azure», примите значения по умолчанию «Новый сервер и администратор» и нажмите «Настроить кластер», чтобы начать процесс настройки. (Вам не нужно заполнять страницу кода приложения, пока вы не отправите задание.) Через несколько минут процесс настройки кластера завершится:

образ

15. Выберите Учетные записи хранения в навигационной панели портала Windows Azure, в которой была создана учетная запись хранения aircarrierstats:

образ

16. Нажмите кнопку View первичного ключа доступа, чтобы открыть диалоговое окно со значениями первичного и вторичного ключей:

образ

17. Щелкните значок буфера обмена справа от текстового поля Первичный ключ, чтобы скопировать значение, и нажмите Закрыть, чтобы закрыть диалоговое окно.

18. При необходимости откройте файл Program.cs проекта MSCloudNumericsApp, замените MyAccountName на aircarrierstats и вставьте-замените MyAccountKey значением Clipboard.


Развертывание кластера в Windows Azure и обработка задания MSCloudNumericsApp.exe

Заключительными этапами процесса являются развертывание проекта в размещенной службе Windows Azure и отправка (запуск) его для создания большого двоичного объекта в службе хранения aircarrierstats.

1. Вернитесь в диалоговое окно «Утилиты» и нажмите «Развернуть кластер», чтобы создать размещенную службу aircarrierstats, применить ее сертификат службы и начать процесс развертывания.

образ

Копирование пакета HPC в хранилище больших двоичных объектов может занять час или более в зависимости от скорости загрузки вашего интернет-соединения. Инициализация четырех узлов требует дополнительного

2. Завершение развертывания активирует кнопку «Проверить состояние кластера»:

образ 

3. Вернитесь на портал Windows Azure, выберите Hosted Services на панели навигации, чтобы отобразить состояние четырех узлов, и выберите подписку Air-Carrier On-Time Stats, чтобы отобразить его свойства:

образ

4. Когда все узлы перейдут в состояние «Готово», снова откройте утилиту развертывания облачных чисел, нажмите вкладку «Код приложения», нажмите кнопку «Обзор», перейдите в папку \ MyDocuments \ Visual Studio 2010 \ Projects \ AirCarrierOnTimeStats \ MSCloudNumericsApp \ bin \ Release и выберите MSCloudNumericsApp. .exe в качестве исполняемого файла для запуска и нажмите Submit Job:

образ

Использование веб-портала планировщика HPC Windows Azure для проверки состояния задания

1. Когда появится сообщение «Задание успешно отправлено», введите URL-адрес размещенной службы ( для этого примера https://aircarrierstats.cloudapp.net ) и нажмите ссылку «Перейти на веб-сайт», чтобы временно принять самозаверяющий сертификат, и откройте страницу примера приложения с предупреждением сертификата в адресной строке:

образ

2. Щелкните Предупреждение о сертификате, чтобы отобразить всплывающее окно «Ненадежный сертификат», и нажмите «Просмотр сертификатов», чтобы открыть диалоговое окно «Сертификат»:

образ

3. Нажмите кнопку «Установить сертификат», чтобы запустить мастер импорта сертификатов, нажмите «Далее», чтобы открыть страницу хранилища сертификатов, и примите параметр по умолчанию:

образ

4. Нажмите кнопку «Далее», чтобы импортировать сертификат, нажмите кнопку «Готово» и нажмите кнопку «ОК», чтобы закрыть сообщение «Импорт успешно завершен».

5. Введите имя пользователя и пароль администратора кластера в диалоговом окне безопасности Windows:

образ

6. Нажмите кнопку ОК, чтобы открыть страницу веб-портала планировщика HPC Windows Azure, и нажмите Все задания, чтобы отобразить статус отправленного задания:

образ

Если вы получили сообщение об ошибке, нажмите на ссылку Мои задания.

7. Нажмите на ссылку MSCloudNumericsApp.exe, чтобы открыть страницу сведений о задании:

образ

Обратите внимание, что работа завершена примерно через две минуты.

8. Перейдите на вкладку «Просмотр задач», чтобы отобразить подробности выполнения:

образ

Ссылка «Справка» открывает примечания к выпуску пакета обновления 2 для Microsoft HPC Pack 2008 R2, в котором не содержится никакой информации о веб-портале планировщика HPC.

Просмотр данных FlightDataResult в Excel

Откройте файл flightdataresult.csv в Excel из контейнера flightdataresult учетной записи хранения aircarrierstats в утилите хранения Azure, такой как Cerebrata Cloud Storage Studio, чтобы отобразить результат вычислений стандартного отклонения:

образ