Чтобы применить типы при чтении в CSV, используйте 0:
следующим образом:
q)("ID";enlist ",") 0: `:test.csv
item date
---------------
10 2015.01.01
2 2015.02.01
3 2015.01.15
4 2015.03.01
5 2015.03.01
20 2015.03.01
11 2015.02.01
23 2015.01.21
13 2015.01.31
Левый аргумент - это список из двух элементов, "ID"
указывает тип каждого столбца (целое число, дата), а ","
указывает разделитель (а enlist
указывает на наличие заголовков столбцов).
Тогда данные могут быть сгруппированы по месяцам:
q)select item by 1 xbar `month$date from ("ID";enlist ",") 0: `:test.csv
date | item
-------| -----------
2015.01| 10 3 23 13i
2015.02| 2 11i
2015.03| 4 5 20i
В качестве альтернативы, если вы хотите иметь сегменты нестандартного размера, вы можете использовать bin
со списком дат в качестве разделителей сегментов. Это даст целочисленное значение, указывающее, в какую корзину попадает каждая дата, затем вы можете использовать словарь для именования сегментов:
q)b:2015.01.01 2015.02.01 2015.03.01
q)d:(0 1 2)!`month$b
q)select item by d b bin date from ("ID";enlist ",") 0: `:test.csv
date | item
-------| -----------
2015.01| 10 3 23 13i
2015.02| 2 11i
2015.03| 4 5 20i
Примечание: bin
назначит -1
для значений ниже первого делителя. Использование binr
начнет отсчет с 0
:
q)b bin 2014.12.31
-1
q)b binr 2014.12.31
0