Использование упрощенного модуля npm cloudant-quickstart (ранее silverlining)

Вычислительные записные книжки предоставляют рабочее пространство, где программисты и специалисты по данным могут обрабатывать, визуализировать и анализировать данные на веб-странице. Обычно код записной книжки пишется на Python, Java или Scala - не обязательно на моих языках.

Как программист на JavaScript, я практически не пользовался блокнотами.

RunKit: перенос блокнотов на JavaScript

RunKit - это сервис для записных книжек, который использует JavaScript в качестве предпочтительного языка и позволяет вам требовать любой пакет Node.js (npm) и использовать его в своем коде. Эта игровая среда делает его действительно полезным для обработки данных, документирования вашего подхода и обмена ими с другими.

RunKit полезен для анализа и совместного использования данных, определенных в записной книжке. Вот простой пример анализа пределов выборов в США. Однако сервис записных книжек действительно оживает, когда он использует данные из базы данных. Я собираюсь показать, как извлекать данные из базы данных Cloudant с помощью пакета silverlining - очень простой библиотеки Node.js, которая позволяет создавать, запрашивать и агрегировать данные из службы Cloudant NoSQL.

Создание некоторых данных

Зарегистрируйте учетную запись Cloudant и на панели управления Cloudant нажмите Создать базы данных и назовите его города.

На вкладке Репликация создайте новое задание репликации из https://reader.cloudant.com/cities в вашу локальную базу данных городов. Это скопирует тысячи документов JSON в вашу учетную запись Cloudant.

Примечание. Эта репликация, скорее всего, обойдется вам в несколько центов за использование Cloudant. Но пока ваш счет не превышает 50 долларов в месяц, это бесплатно.

Далее мы собираемся проанализировать данные в записной книжке.

Подключение к базе данных

Создайте новую записную книжку RunKit. В первом блоке кода вы можете написать такой код:

var url = 'https://myusername:[email protected]/mydb';
var db = require('silverlining')(url);

Примечание редактора: В феврале 2018 года библиотека silverlining устарела и заменена на cloudant-quickstart : https: //www.npmjs .com / package / cloudant-quickstart

Но это было бы ошибкой. Все записные книжки RunKit являются общедоступными, поэтому вы можете раскрыть свои учетные данные Cloudant всему миру. Лучше всего посетить страницу конфигурации среды, создать переменную среды (например, URL), которая содержит ваш полный URL-адрес Cloudant, включая имя пользователя и пароль, а затем сослаться на нее в своем коде (например, process.env.URL):

var db = require('silverlining')(process.env.URL + '/cities');

Таким образом, ваш блокнот по-прежнему работает, но ваши секреты скрыты.

Запрос данных

Вы можете запросить свою базу данных с помощью функции query. В этом случае вы получите все города с населением более 5 миллионов человек:

// create Cloudant connection
var db = require('silverlining')(process.env.CLOUDANTURL + '/cities');
// query cities with population greater than 5 million
var cities = await db.query({'population': { '$gt': 5000000 }});

Обратите внимание, что вызову db.query предшествует ключевое слово await. Это ключевое слово является новой функцией JavaScript, которая позволяет создавать асинхронные вызовы функций как синхронные. Он значительно упрощает пошаговый код, который используется в записных книжках, таких как RunKit. Обычно оператор await может использоваться только в асинхронной функции, но RunKit позволяет вам обойтись без этой детали!

Поскольку возвращенные данные содержат значения для latitude и longitude, RunKit позволяет отображать список на карте. Фактически, он делает это по умолчанию:

Также можно было получить только британские города:

// cities in Great Britain
var cities = await db.query({'country': 'GB'});

Или выберите город по id индивидуально:

// get London, knowing its id
var london = await db.get('2643743');

Или получите id пакетами:

// pull two cities at once
var cities = await db.get(['2643743','2642607']);

В любой момент вы можете переключиться из режима просмотра карты в режим просмотра свойств:

Клонировать блокнот

Вот и записная книжка моих городов на RunKit.

Создав учетную запись RunKit, вы сможете клонировать репо и запускать мои примеры ячеек для себя. Просто не забудьте создать переменную среды для своей учетной записи Cloudant. Если вы вызовете свой CLOUDANTURL и опустите имя базы данных с конца строки, вы можете запустить мой код как есть.

Когда все будет готово, нажмите зеленую кнопку повтора справа от ячейки, чтобы повторно запустить ее, или вы можете нажать shift + return в качестве ярлыка.

Смешивание с другими данными

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

// get current position of the international space station
var request = require('request');
async function currentPosition() {
  var issurl = 'http://api.open-notify.org/iss-now.json';
  var obj = JSON.parse(await require('request-promise')(issurl)).iss_position;
  obj.latitude = parseFloat(obj.latitude);
  obj.longitude = parseFloat(obj.longitude);
  return obj;
};
// fetch current position
var iss = await currentPosition();

Затем вы можете запросить базу данных городов Cloudant, чтобы найти близлежащие города:

// create Cloudant connection
var db = require('silverlining')(process.env.CLOUDANTURL + '/cities');
// get cities "near" the ISS (sometimes there are none — there's a lot of empty out there)
var t = 5; // five degrees of tolerance
var cities = await db.query(
  { 
    'latitude': {'$gt': iss.latitude — t, '$lt': iss.latitude + t},
    'longitude': {'$gt': iss.longitude — t, '$lt': iss.longitude + t}
  }
);

Какая у вас следующая записная книжка на JavaScript?

Как разработчик JavaScript, я надеюсь, что вы получите пользу от анализа данных в записной книжке. Я решил потребовать свой модуль npm, silverlining, потому что он упрощает взаимодействие базы данных с Cloudant. Но помните, что в RunKit вы можете потребовать любой пакет Node.js.

В заключение, вот записные книжки, которые я сделал для этой статьи:

Поделитесь своими записными книжками RunKit в комментариях и, пожалуйста, рассмотрите возможность поделиться этой статьей с другими читателями Medium, нажав здесь ♡.