05 June 2020

Читаем csv средствами NumPy

Модель проверяется по реальным данным. Одним из наиболее употребительных методов их хранения, являются CSV файлы или ВеличиныРазделенныеЗапятой. Самый очевидный способ их чтения - воспользоваться функциями библиотеки NumPy, а именно функцией loadtxt.
Удобство в том, что можно несколько колонок прочитать одновременно.
Но тогда надо указывать параметр unpack=True чтобы сделать  декомпозицию и присвоить данные нескольким массивам, перечисленным через запятую
Вот пример CSV файла



Как можно видеть первой строчкой идет заголовок, его надо пропустть, для этого ставим параметр skiprows=1. Другим параметром usecols = (1,2) укзываем что надо читать колонки 1 и 2.
Код:

dIreal, Ireal  = np.loadtxt('CovidData.csv',
    delimiter=',',  # разделитель - запятая
    usecols = (1,2),  #  читаем 1 и 2 колонки ( нумерация с нуля )
    skiprows=1,  # пропускаем первую строку заголовка
    unpack=True) # декомпозиция колонок на массивы ( списки )


После выполнения колонки dI и Isum окажутся в массивах dIreal и Ireal соответственно.
Для чтения данных для колонк D и R нам надо пропустить строки - они начинаются позже. Код будет аналогичный, но с бОльшим пропуском

Dreal, Rreal = np.loadtxt('CovidData.csv',
    delimiter=',',
    usecols = (4,6),
    skiprows=16,
    unpack=True)


Однако "шаманство" начинается если нам надо прочитать даты, особенно если они имеют другой формат - в данном случае надо применять конвертер или лямбда-функцию конвертирования данных. Код:

import datetime as dt

# лямбда-функция конвертирования данных
conv2date = lambda x: dt.datetime.strptime ( x.decode("utf-8"), '%d.%m.%Y')

datesMain = np.loadtxt('CovidData.csv',
     delimiter=',',
     usecols = (0), # первая колонка
     converters={0:conv2date}, # применяем конвертер
     dtype='datetime64[D]', # указываем целевой тип данных
     skiprows=1 )


Таким образом можно прочитать и даты - в моем случае я для дат использовал тире, как более читаемый символ-разделитель в CSV.

Однако такой набор кода не очень удобен, поэтому я стал смотреть в сторону библиотеки для работы с данными - Pandas.

No comments:

Post a Comment