DateTime и Pandas

В составе модуля Pandas есть очень удобный функционал для чтения CSV-файлов. К сожалению, большинство примеров работы с ним предполагают что одна физическая колонка в CSV-файле соответствует одной логической записи в DataFrame. Предположение отличное, но я сходу наткнулся на то, что дата разнесена по нескольким столбцам, а не записана в формате типа YYYY/MM/DD:

data = """\
    2011,1,10,AAPL,Buy,1500,
    2011,1,13,AAPL,Sell,1500,
    2011,1,13,IBM,Buy,4000,
    """

Примитивные решения со считыванием в существующем формате с последующей конверсией или построчным чтением с преобразованием, пусть и подходили для моего случая, но выглядели очень уж “не спортивно”, посему были отброшены сразу. И это было верно, так как правильное решение оказалось очень простым и элегантным:

import pandas.io.parsers as pp
from cStringIO import StringIO

pp.read_csv(StringIO(data), names=["year", "month", "day", "symbol", "op", "count", "NA"],
                           parse_dates={'date':["year", "month", "day"]})

Что даст нам правильно представленные данные:

                 date symbol    op  count  NA
0 2011-01-10 00:00:00   AAPL   Buy   1500 NaN
1 2011-01-13 00:00:00   AAPL  Sell   1500 NaN
2 2011-01-13 00:00:00    IBM   Buy   4000 NaN

О двух интересных проектах

В этих ваших интернетах, за последнюю неделю, я узнал о двух проектах которые, на мой взгляд, как минимум заслуживают того, что бы о них прочитать. Речь идет о двух новых “почти ОС”, одна из которых совсем уж наброски, а вторая вполне себе рабочий прототип. Интересны системы, в первую очередь, тем на чем они написаны и в какой среде работают. Continue reading

Я бы в камне высек и каждому разработчику на стол поставил…

НИКОГДА не пиши промышленной код на экзотическом и/или слабо распространенном, в компании где ты работаешь, языке программирования. Например на Perl/Haskell/Clojure или еще какой-то давно/недавно выученной тобой хреновине.

Луч поноса авторам HomeBrew

Довольно давно, а если говорить точнее, то уже лет как 5 я использую MacPorts. Порты, конечно, не без багов, но все же они достаточно хорошо спроектированы и удобны в использовании. В них всегда можно найти несколько версий компиляторов и т.д. И тут, внезапно, мне понадобился HomeBrew. Да, я знаю, что писать пакеты для MacPorts трудно, а для HomeBrew легко. Да, я в курсе того, что заставить работать MacPorts через прокси не так уж и просто, а HomeBrew очень легко. Но…

КАКОГО ХЕРА HomeBrew требует что бы пользователь был Admin?! Что за жопорукий дебил это придумал?! Системное приложение ОБЯЗАНО уметь работать через sudo или каким-то иным способом повышать свои права!

Что бы такое посмотреть, что бы такое почитать? IV

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

Ну и Майерс с Саттером понарассказали всякого:

  • An Effective C++11/14 Sampler. Первый, похоже что делает наброски к новой книге по эффективному использованию C++11;
  • One C++. А второй всячески хвалит C++ демонстрируя его пригодность для всего-всего на свете. Да, это выступление можно и не смотреть, я скорее промотал, нежели просмотрел.

Переменные окружения в OSX

Отловил странный то ли глюк, то ли фичу. Изначальная задача следующая: необходимо добавить переменные окружения таким образом, что бы они были доступны всем запускаемым процессам, т.е. не только тем, что были запущены из командной строки, но и UI-приложениям.

Стандартный путь довольно прост: необходимо вписать в файл /etc/launchd.conf новые пути, следующим способом.

setenv PATH /new/path/a:/new/path/b

Собственно, я так делал всегда и все было нормально. Но, внезапно, а может и не очень, к примеру после какого-то обновления, ряд приложений (тот же Eclipse и Wireshark) перестал видеть что-либо за пределами переменных, прописанных в /etc/launchd.conf. В итоге, по мнению этого ряда приложений “исчезло” все, VJM, dir, ls да совсем-совсем все.

Гугла подсказала, что пользовательские переменные, которые должны стать доступны всем, можно добавить еще в пару файлов, например в /private/etc/paths. Формат файла прост: одна линия – один путь.

/new/path/a
/new/path/b