2017-02-19 16 views
-1

Прослушивание различных данных с использованием технологий для определения того, какой из них лучше всего подходит для работы, связанной с работой, я обнаружил, что мне нужно выполнить небольшую очистку данных.d3 regex или очистка данных Notepad ++

У меня есть столбец «BookingID», в CSV-файл, который имеет только два различных возможных форматов ввода:

"19028848 
" 

и

"27515492 
AirBnB-16002513-4222RF" 

Заметьте, что я не знаю, почему кавычки или новые разрывы строк существуют так, как они есть. Возможно, что-то связано с тем, что исходный файл был Excel, и я использовал Excel для сохранения в CSV.

В любом случае, у меня есть следующий код d3, который отображает и фильтрует две колонки моего CSV, что я хочу, как массив массивов для d3 для использования в масштабах отображения:

sales = data 
    .map(d => [+d["BookingID"], +d["Total Paid"]]) 
    .filter(results => results.every(not(isNaN))); 

Это работает для все BookingIDs в первом формате, который я написал здесь, но не для второго (т.е. они отфильтровываются). Я бы хотел, чтобы решение удалило все, начиная с номера, так что в случае с приведенным выше примером я получаю 27515492. Я не испытываю страха со всем этим, но я не могу представить, чтобы люди делали большую очистку в d3 , верный? Поскольку я не уверен, буду ли я использовать d3, highcharts, Tableau или что-то еще в конце, для этого мне бы хотелось получить решение в электронной таблице Excel или CSV на уровне Notepad ++. Я только что видел CSVed из другого вопроса, но мне просто нужно лучшее решение, не обязательно графический интерфейс или что-то интересное. Я ценю ваши рекомендации (и выражения регулярного выражения, вы regex jedis) Спасибо.

+0

Ваш вопрос не совсем ясен, но кажется регулярным, как '^ (\ d +). *' Заменить на '$ 1' на АЭС должно работать. –

+0

Спасибо, но я не уверен, что работает ... https://regex101.com/r/gYVpwG/1 –

+0

Регулярное выражение для Npp не должно работать в regex101, так как оно не поддерживает буге регулярного выражения. Во всяком случае, я нахожусь на мобильном устройстве и не могу загрузить regex101. –

ответ

1

При использовании регулярных выражений, нет необходимости предварительно обработать ваши данные в Notepad ++, потому что все это легко можно сделать в JavaScript:

// data contains the result of your CSV input processed by d3.csv() 
 
var data = [{ 
 
    "BookingID": "19028848\n", 
 
    "Total Paid": "1" 
 
}, { 
 
    "BookingID": "27515492\nAirBnB-16002513-4222RF", 
 
    "Total Paid": "1" 
 
}]; 
 

 
var sales = data 
 
    .map(d => [ 
 
    +/^(\d+).*/.exec(d["BookingID"])[1], // extract ID from input strings 
 
    +d["Total Paid"] 
 
    ]); 
 

 
console.log(sales);

Регулярное выражение /^(\d+).*/ извлечет соответствующую часть идентификатора бронирования из обоих форматов и подать результат прямо в вашу обработку данных.

+0

Я получаю TypeError:/^" (\ d +). * /. exec (...) is null в консоли.Я не понимаю этого, если вход регулярного поиска никогда не является нулевым (я проверил ...)? –

+0

@FredericBastiat Это произойдет, если совпадение не найдено для регулярного выражения (посмотрите на [docs ] (https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec#Return_value)), когда '.exec()' возвращает 'null'. Этого не должно быть в случае если действительно * все * ваши 'BookingID' придерживались двух форматов, которые вы указали. Если есть какие-либо другие форматы или нулевые значения, вы тоже должны это учитывать. – altocumulus

+0

Я ценю понимание. данных еще и посмотреть, что происходит. –