Pull to refresh

Comments 29

  1. Название статьи (устаревшие...) противоречит названиям разделов (новые...).

  2. Не понял преимуществ dataclasses.

  3. Там же, в выводе времени (timeit) лучше писать не "Access speed", а "Access time", чтобы не путать читающих логи. И дополнить после собственно времени, в чем измерялось время.

Добавлю про pathlib.

Вставил PurePath.joinpath() в лоб вместо os.path.join(). Словил AttributeError: 'str' object has no attribute '_make_child'.

А вот os.path.join() принял <class 'pathlib.WindowsPath'> и привёл путь к str.

Я не настоящий сварщик, но мне это странно.
os.path.join('/mnt', 'e')
PurePath('/mnt').joinpath('e')
pathlib.Path('/mnt') / 'e'

3 варианта одного и того же объединения

Кажется, это не совсем одно и то же:
print(type(os.path.join('/mnt', 'e')))
>>> <class 'str'>

print(type(PurePath('/mnt').joinpath('e')))
>>> <class 'pathlib.PureWindowsPath'>

print(type(Path('/mnt') / 'e'))
>>> <class 'pathlib.WindowsPath'>

Мне именно в этом видится корень проблемы.
Например, во втором случае можно словить AttributeError: 'PureWindowsPath' object has no attribute 'endswith', если .endswith() используется где-то в недрах чужой либы. Что у меня и произошло после написания комментария.

Кажется, это не совсем одно и то же:

В смысле, что 3 способа получения пути к одной и той же папке через объединение двух путей. Изначально же речь шла о некорректном объединении (вызове метода у класса, а не объекта) и соответствующей ошибке:

Вставил PurePath.joinpath() в лоб вместо os.path.join(). Словил AttributeError: 'str' object has no attribute '_make_child'.

А для чужих либ можно использовать str(path), если они напрямую не поддерживают Path по каким-то причинам.

Есть еще дико удобный glob, с unix-style путями и wildcards

import glob
glob.glob('mnt/e') # папка /mnt/e
glob.glob('mnt/e/*') # всe файлы в mnt/e

Аналогично можно использовать и все тот же Path)

mnt = pathlib.Path('/mnt')
mnt.glob('e') # папка /mnt/e
mnt.glob('*') # все файлы в /mnt/
mnt.rglob('*') # все файлы в /mnt/ и подпапках

А как он с виндой работает? Спрашиваю для друга.

pathlib и заточен под работу в мультисредах. Когда все пути объекты, модуль сам выберет как их джойнить. Это одна из задач при его создании.

Поищите по ПиКонам, помню отдельная преза была по совместимости pathlib с кроссплатформенностью.

Не понял, а как согласуется название статьи и раздел про logging и f-строки?

Именно. Wes McKinney, создатель панд, еще в 2013 году написал пост 10 Things Why I Hate Pandas. Вот, в 2017 он опять распедалил по этому поводу. Я сам нежно относился к этой библиотеке, пока опытные товарищи не сказали, что панды использовать не стоит ни в коем случае. Я удивился и начал копать, оказалось, это вполне известная тема. Эта библиотека хороша на инфоцыганских курсах, когда надо покрутить крошечные датасеты, но в серьезной ежедневной работе ей не место.

Знаю больше одного и даже больше двух астрономов, которые используют pandas каждый день для работы со своими астрономическими данными. Не только не жалуются, но и другим рекомендуют, я собственно от них о ней и узнал.

А что тогда предлагается использовать для работы с "табличными" данными, если не pandas? В той статье по вашей ссылке, я так понял, он рекомендует Apache Arrow (не доводилось работать с этой библиотекой).

Исследователи вообще R предпочитают обычно. Я про астрономию ничего не знаю, но гугл говорит, что в телескоп видно пять миллионов звезд, это смешно для дата саенс. На последнем месте работы я имел дело с примерно таким количеством транзакций в час.

Да, Arrow все советуют.

Датасеты у них и правда небольшие. Они работают с экзопланетами, и например в каталоге NASA сейчас всего 3797 таких звёздных систем (с 5069 планетами), так что с такими объёмами они конечно могут продолжать пользоваться pandas.

А я теперь попробую Apache Arrow, спасибо за ваш коментарий и ссылку.

Ну, как бы не всем нужно забивать гвозди микроскопом - в жизни полно прикладных задач, когда экселя уже мало, а хадупа - много. Запустил ноутбук, быстро на пандах набросал, запустил один раз, пока кофе пьешь - оно и посчиталось.

ЗЫ: Как ваша работа, кстати? После той увлекательной статьи продолжения так и не вышло?

Согласен! Зачем использовать левый язык, когда есть R!
:)
Работу я так и не нашел, всем нужен диплом, опыт никого не устраивает. У меня сейчас свой стартап, агритек. Собрались отличные ребята, делаем умный гроубокс, вчера был третий митинг с голландским акселератором. Мы друг другу нравимся, скорее всего, осенью будем в Лимбурге.

Надо написать статью, когда мы запилим прототип. Проект называется Tom Umber, запомните это имя! )

Ну что ж, Джека Ма, вон, даже в Мак не взяли работать. Может это и не ваше. Удачи со стартапом!

R я тоже как-то ковырял и даже прошел курс на Курсере (там был какой-то очень злой 4хнедельный, с дикими дедлайнами) - осилил его только со второй попытки. Вот только в моей области он редко используется, а когда не пользуешься - забывается очень быстро.

R прекрасен, когда работаешь только с цифрами. Но когда нужно и скрипты писать, и то, и се, и третье, и десятое, то Питон, безусловно, язык выбора.

Наверное, стартапы это мой путь. Я чувствую себя как рыба в воде, питча очередного person of interest и организовывая команду. Мы уже подались на YCombinator,на эстонскую стартап визу, и мне все это ужасно нравится, не смотря на то, что я все зафейлил (ожидаемо). Дата саентист я посредственный, а с людьми общаться прям обожаю :)

Кстати, спасибо за референс на Амазон. Мне в итоге так и не ответили, но опыт был очень полезный. Четырнадцать Заповедей Строителя Коммунизма я запомнил и сделал выводы.

Джек Ма классный! :)

"Четырнадцать заповедей" многие недооценивают, но достаточно посмотреть, кто самый богатый человек в мире ;)

Здесь забыли добавить результат print()

localized = nyc.localize(dt)

print(f"Datetime: {localized}, Timezone: {localized.tzname()}, TZ Info: {localized.tzinfo}")

И, наконец, если вы не пользуетесь namedtyple

tuple

А меня одного смущает, что при проверке быстродействия мы смотрим на минимальное время?

print(f"Access speed: {min(timeit.repeat('u.name', setup=setup,  number=10000000))}") 
# Access speed: 0.17728697300481144  

При прочих равных, я не отрицаю удобство f-strings, но конкретно в логировании форматирование должно быть "ленивым"

Sign up to leave a comment.