Comments 29
Название статьи (устаревшие...) противоречит названиям разделов (новые...).
Не понял преимуществ dataclasses.
Там же, в выводе времени (timeit) лучше писать не "Access speed", а "Access time", чтобы не путать читающих логи. И дополнить после собственно времени, в чем измерялось время.
справедливо
Вставил 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/ и подпапках
А как он с виндой работает? Спрашиваю для друга.
Не понял, а как согласуется название статьи и раздел про 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}")
С logging все переходят на loguru.
И, наконец, если вы не пользуетесь namedtyple
tuple
А меня одного смущает, что при проверке быстродействия мы смотрим на минимальное время?
print(f"Access speed: {min(timeit.repeat('u.name', setup=setup, number=10000000))}")
# Access speed: 0.17728697300481144
pylint имеет проверку, чтобы никто не использовал f-strings в методах logger'ов, вот тут про это написано https://stackoverflow.com/questions/66993387/use-lazy-formatting-in-logging-functions-pylint-error-message
Устаревшие Python-библиотеки, с которыми пора попрощаться