Pss, эй, иди сюда, я скажу тебе, где ты можешь найти черных белок в Нью-Йорке.
Черные белки встречаются редко, знаете ли вы, что 1 из каждых 10 000 белок черный?
Для этого мы будем использовать NodeJs и JavaScript, а также набор данных о наблюдениях за белками в Центральном парке.
Ссылка на набор данных 🏹Данные
Теперь, когда у нас есть набор данных, мы готовы начать
Давайте начнем с создания проекта узла.
1. Создайте папку
2. Откройте папку
3. Запустите npm init, чтобы запустить проект узла в папке.
Теперь нам нужно выбрать модуль CSV для использования.
Заходим на npmjs.com и ищем CSV, там можно найти много разных модулей.
Я решил использовать csv-parse, для установки csv-parse запускаю следующий код.
npm i csv-parse
Теперь нам нужно импортировать модуль CSV
Мы можем импортировать наш модуль CSV со следующим кодом
const parse = require('csv-parse');
Помимо синтаксического анализа, мы будем использовать «fs», файловую систему
Мы будем использовать fs, чтобы позже открыть наш CSV как поток данных.
const fs = require('fs');
Создание наших переменных
const esquilos = []; //Array for our squirrels var maiorOcorrencia = [undefined, 0], contador = 0, qtdEsquilos = 0; // maiorOcorrencia local with most
occurrence of squirrels// Contador just a counter // qtdEsquilos total of squirrels analyzed
Создание функции, помогающей фильтровать
Возвращает true, если переданный мех белки черный
function filtraEsquilos(esquilo) {
return esquilo['Primary Fur Color'] === 'Black';
}
Чтение CSV как потока
Чтение в виде потока означает, что данные считываются и обрабатываются одновременно.
fs.createReadStream('esquilos.csv')
.pipe(parse({
columns: true
}))
.on('data', (data) => {
qtdEsquilos+=1;
if (filtraEsquilos(data))
esquilos.push(data);
})
.on('error', (err) => {
console.log(err)
})
Применение фильтров
.on('end', () => { // Filtering the hectares and put them in alphabetic order,so i can count the occurrencies
const hectares = (esquilos.map(x => x.Hectare)); hectares.sort().reduce(function(old, chr){ old == chr ? ++contador > maiorOcorrencia[1] && (maiorOcorrencia = [chr, contador]) : (contador = 1) return chr }); // Printing the results console.log(`The place where Black Squirrels where most seen ${maiorOcorrencia[0]}: vistos ${maiorOcorrencia[1]} vezes`); console.log(`Dos ${qtdEsquilos} 🐿️🐿️ encontrados, ${esquilos.length} 🐿️🐿️ were Black`); console.log(`Os 🐿️🐿️ Black squirrels represent ${(esquilos.length*100/qtdEsquilos).toFixed([1])}% of the squirrels population`); });
Полный код и результаты
const parse = require('csv-parse');
const fs = require('fs');
const esquilos = [];
var maiorOcorrencia = [undefined, 0], contador = 0, qtdEsquilos = 0;
function filtraEsquilos(esquilo) {
return esquilo['Primary Fur Color'] === 'Black';
}
fs.createReadStream('esquilos.csv')
.pipe(parse({
columns: true
}))
.on('data', (data) => {
qtdEsquilos+=1;
if (filtraEsquilos(data))
esquilos.push(data);
})
.on('error', (err) => {
console.log(err)
})
.on('end', () => {
//Aqui eu filtro os hectares dos esquilos pretos
const hectares = (esquilos.map(x => x.Hectare));
//Aqui eu coloco os hectares em ordem alfabético, assim eu posso contar quantas vezes eles ocorrem em sequência e determinar assim o número de ocorrências de cada
hectares.sort().reduce(function(old, chr){
old == chr ? ++contador > maiorOcorrencia[1] && (maiorOcorrencia = [chr, contador]) : (contador = 1)
return chr
});
//Imprimindo os resultados
console.log(`O lugar onde eles mais foram vistos foi no hectare ${maiorOcorrencia[0]}: vistos ${maiorOcorrencia[1]} vezes`);
console.log(`Dos ${qtdEsquilos} 🐿️🐿️ encontrados, ${esquilos.length} 🐿️🐿️ eram pretos`);
console.log(`Os 🐿️🐿️ pretos representam ${(esquilos.length*100/qtdEsquilos).toFixed([1])}% da população encontrada`);
});
Полученные результаты
// O lugar onde eles mais foram vistos foi no hectare 33D: vistos 8 vezes // Dos 3023 🐿️🐿️ encontrados, 103 🐿️🐿️ eram pretos // Os 🐿️🐿️ pretos representam 3.4% da população encontrados
Заключение
Мы пришли к выводу, что самый простой способ найти черную белку в Нью-Йорке — это посетить гектар 33D в Центральном парке.
И если вы просто хотите посетить Нью-Йорк, возьмите меня с собой 🤣.