Автор оригинала: Lev Izraelit.
В этой серии статей мы будем использовать New York Times Covid-19 Data Чтобы создать след трекера, который будет отображать данные как временные ряды. Пользователи смогут просмотреть данные для США в целом или сузить его государством и по округе. Полное веб-приложение доступно на Github – COVID-19-US И живая версия размещена на http://covid19-us.levizrealit.com. Мы будем использовать React и Teadercript вместе с другими библиотеками для визуализации пользовательского интерфейса и диаграммы. Если вы не использовали TypeactScript, эти статьи также познакомятся с некоторыми основными основаниями и более продвинутыми концепциями языка.
Посмотрите на данные
Данные в New York Times Covid-19 Dateetet размещен в 3 CSV-файле – US.csv , US-States.csv и US-Counties.csv Отказ Мы можем увидеть каждый из этих файлов в его сырой форме, нажав на Сырой
Кнопка в правом верхнем углу.
Данные США
Глядя на Сырые данные нами мы можем видеть следующее:
date,cases,deaths 2020-01-21,1,0 2020-01-22,1,0 2020-01-23,1,0 2020-01-24,2,0 2020-01-25,3,0 2020-01-26,5,0 2020-01-27,5,0 ...
Файл состоит из 3 столбцов, где первая строка содержит имена столбцов: Дата
, случаи
и Смерть
Отказ Последующие строки содержат значения для каждой три столбца.
Данные штата
Данные штата США Содержит два дополнительных столбца: Государство
и FIPS
Отказ А Код FIPS это географический идентификатор, который мы не будем использовать для этого проекта.
date,state,fips,cases,deaths ... 2020-02-06,Washington,53,1,0 2020-02-06,Wisconsin,55,1,0 2020-02-07,Arizona,04,1,0 2020-02-07,California,06,6,0 ...
Данные графства
Данные округа США содержит Округ
Столбец в дополнение ко всем столбцам, обнаруженным в данных состояния:
date,county,state,fips,cases,deaths ... 2020-02-01,Orange,California,06059,1,0 2020-02-01,Santa Clara,California,06085,1,0 2020-02-01,Cook,Illinois,17031,2,0 2020-02-01,Suffolk,Massachusetts,25025,1,0 2020-02-01,Snohomish,Washington,53061,1,0 ...
Разбор данных
Мы будем использовать Папапрайс разбирать данные CSV непосредственно в браузере. Для нашей первой попытки мы сделаем данные штата США в браузере, используя innerhtml
Итак, мы видим, можно увидеть, как работает разборки. Вы можете отправиться в CodeSandbox чтобы увидеть результат.
Форма данных
Первое, что вы заметите в примере, это типографы Интерфейс :
interface StateCaseData { date: string; state: string; cases: number; deaths: number; }
Интерфейс определяет форму некоторых данных независимо от источника. В этом случае мы получаем данные из файла CSV, который загружен, а затем проанализирован. Посмотрев на RAW CSV, содержащий данные США, можно предположить, что данные будут проанализированы в массив объектов, которые соответствуют Statecasedata
интерфейс.
Результат анализа
Как только мы импортируем папапарс:
import ParseCSV from "papaparse";
Мы можем позвонить в Разбор Способ, обеспечивающий URL для Данные штата США CSV и объект, содержащий дополнительные аргументы:
ParseCSV.parse(US_CSV_URL, { download: true, header: true, dynamicTyping: true, complete: parseResult => { console.log("errors: ", parseResult.errors); const data = parseResult.data.filter(isStateCaseData); renderStateData(data); } });
Это аргументы, содержащиеся в объекте:
Скачать
: Указывает, что файл должен быть загруженЗаголовок
: Указывает, что первый ряд в файле содержит имена столбцовDynamictyping
: Указывает, что мы бы понравились папафарсе, чтобы преобразовать номера и логические в их соответствующие типы, а не преобразовывать их в строки.полный
: обратный вызов, который описывает то, что мы хотели бы сделать, как только разборка сделана. PAPARSE будет вызывать этот обратный вызов с Результаты объекта который содержитданные
Свойство – массив объектов, ключ от имени поля. Это также содержитОшибки
Свойство, массив строки. На момент написания этот массив пуст, то есть нет ошибок, разбирающихся в CSV.
Несколько слов о разборе данные
Недвижимость в Parseresult
Отказ Ранее я сказал, что мы можем предположить, что каждый объект в данных, проанализированных из CSV, будет соответствовать Statecasedata
интерфейс. Но мы не хотим предполагать, что данные всегда будут правильными. На самом деле тип parseresult.data
определяется как любой []
– Массив, в котором элементы могут быть любого типа, что. Что если некоторые элементы в этом массиве отсутствуют A случаи
или Государство
имущество? То, что мы хотим, это только держать эти объекты, которые на самом деле противостоять Statecasedata
Интерфейс и откажитесь от остальных. Мы можем сделать это, определив функцию под названием Isstatecasedata
что, когда дано элемент как аргумент, возвращает правда
Если он соответствует Statecasedata
Интерфейс и ложь
иначе:
function isStateCaseData(dataElem: any): data is StateCaseData { return ( !!dataElem && isString(dataElem.date) && isString(dataElem.state) && isNumber(dataElem.cases) && isNumber(dataElem.deaths) ); } const isString = (value: any): value is String => typeof value === "string"; const isNumber = (value: any): value is Number => typeof value === "number";
Тип возврата Isstatecasedata
это Тип предиката Отказ Эта функция на самом деле является Тип гвардии – Функция, которая возвращает логическое значение, указывающее, передает ли аргумент к нему указанного типа. Определить, если тип DataElem
это Statecasedata
Или нет, нам нужно проверить типы каждого из его свойств: Дата
и Государство
должны быть строки; случаи
и Смерть
должны быть номерами. Эти проверки типа выполняются через своих охранников собственного типа: isString
и Isnumber
Отказ Но сначала мы должны убедиться, что аргумент не null
или undefined
– Если это так, пытаясь получить доступ к любому свойству, приведет к ошибке выполнения. Мы проверяем это с помощью двойные челки , что принесет аргумент на логическое значение. Если аргумент является null
или undefined
это будет принуждено к ложь
и чек будет короткий замкнутый Отказ
Возвращаясь к тому, где мы фильтруем Parseresult
данные:
const data = parseResult.data.filter(isStateCaseData);
Если мы навязываемся данные
Мы увидим, что Typearctry заполнил тип как Statecasedata []
– Мы проверили, что каждый элемент в списке есть Statecasedata
тип. Наконец, мы можем сделать данные, передавая его на Renderstateatata
функция. Эта функция просто передается на массив данных и отображает значения Дата
, Государство
и случаи
каждого элемента.
Это завершает первую часть серии. В следующей части мы будем группировать данные таким образом, что позволяет нам сделать его на диаграммы и элементы.