Вот и настала пора подводить итоги года!
Корпораты прошли, адвенты закончились, тайные санты проведены, подарки закуплены (или будут закупаться), ну а я собрала некую смесь итогов из канала, работы и жизни🥗
Немного циферок:
🎄 1672 подписчика: а в начале года вас было всего 182!!! - это в 9,3 раза больше без единой монетки 🍪 🍪
🎄 260 постов
🎄 50 походов на концерты, съемки и митапы
🎄 28 поездок на поезде
🎄 22 собеса в нашу команду
🎄 8 встреч random coffee
🎄 7 прочитанных книжек
🎄 3 пройденных курса: де, систем дизайн, англ
🎄 3 путешествия: Питер и Йошкар-Ола
🎄 2 переезда
🎄 2 статьи на хабре: тык1, тык2
🎄 1 подкаст со мной
🎄 1 рилс в качестве амбассадора Сбера
а еще:
🧤 командой развернули собственный кластер и многому научились
🍰 попробовала себя в роли девопса
⛸ успела позаниматься k-pop и фигурным катанием
☕️ научилась собирать кубик рубика 5х5
Хотела сделать подборку постов и поняла, что они все такие крутые!🤭 Вот просто можно взять и полистать. Я пишу от души, и любой пост - это частичка того, что я сделала/осознала/ощутила, но все-таки самые-самые-самые из самых-самых вот здесь:
👍 Крутецкие посты
dbt deep dive
Покручиваем графы
Что спросить на собесе?
Зарубежные подкасты про данные
Вопросы подписчиков
Кейс про паркеты
🥰 Про оптимизацию
Разница между MAX(dt::date) и MAX(dt)::date
LEFT убивает индексы
Разбор count(x)
Как я забила всю оперативку
Как заруинить джойн в спарке?
🤓 Покекать
Вредные советы
Как ПСИ проходили
Мама, я девопс
Наш командный сленг
Командный мудборд
И еще раз ссылочка на подкаст^^
➖ ➖ ➖ ➖ ➖ ➖ ➖ ➖ ➖ ➖
Надеюсь, этот год был для вас продуктивным, а следующий будет еще круче!
Может быть, до конца года еще что-нибудь напишу, пока не придумала🤭 В заготовках уже лежат 13 постов, но они не ложатся под новогоднее настроение, поэтому вернемся к ним в следующем году❄️
Мои решения для Advent of SQL можно глянуть тут, разберем интересные задачки уже в январе
А пока всех поздравляю с наступающим новым годом!🔴
❄️ Желаю довести недоделанные дела до конца, хорошо отпраздновать и хорошо отдохнуть, загадать самые искренние пожелания, а я загадаю, чтобы они у всех у вас сбылись! 🍪
Корпораты прошли, адвенты закончились, тайные санты проведены, подарки закуплены (или будут закупаться), ну а я собрала некую смесь итогов из канала, работы и жизни
Немного циферок:
а еще:
Хотела сделать подборку постов и поняла, что они все такие крутые!
dbt deep dive
Покручиваем графы
Что спросить на собесе?
Зарубежные подкасты про данные
Вопросы подписчиков
Кейс про паркеты
Разница между MAX(dt::date) и MAX(dt)::date
LEFT убивает индексы
Разбор count(x)
Как я забила всю оперативку
Как заруинить джойн в спарке?
Вредные советы
Как ПСИ проходили
Мама, я девопс
Наш командный сленг
Командный мудборд
И еще раз ссылочка на подкаст^^
Надеюсь, этот год был для вас продуктивным, а следующий будет еще круче!
Может быть, до конца года еще что-нибудь напишу, пока не придумала
Мои решения для Advent of SQL можно глянуть тут, разберем интересные задачки уже в январе
А пока всех поздравляю с наступающим новым годом!
Please open Telegram to view this post
VIEW IN TELEGRAM
5❤35🔥10👍4🎄4 4🤔1
Мы тут релизились за 5 дней до нг (потому что можем себе позволить), и я испытала настоящие эмоциональные качели
Нужно было раскатать один сервис, но ситуация осложнилась тем, что:
У нас было еще одно бонусное усложнение - у разных людей разный набор доступов. Поэтому на созвонах было ~ по 3 человека, где:
Так вот, хроники с полей:
here we go again…
Но новый год не был бы таким волшебным, если бы не исполнение
Поэтому эта история с счастливым концом (и парой задач на доработку уже на следующий год)
Но не стоит забывать, что за каждым чудом могут стоять люди, которые материализовали это чудо
Please open Telegram to view this post
VIEW IN TELEGRAM
🎄35🔥4👍2
Как дела?) Отдохнули?
С пн 13.01 стартует de zoomcamp!
Кто еще ждет особого знака судьбы - он здесь🔶
🔮 Зумкемп - это бесплатная штука на пару месяцев, которую я сама проходила 2 года назад. Но не сделала финальный проект и не получила серт, потому что уже нашла работу и выходила на неё.
Из стека у нас был GCP, BigQuery, Terraform, Spark, Kafka, Prefect, Postgres, Docker, dbt, Looker
Некоторые штуки у меня не удалось применить, и я по итогу заменила гугл бакеты на yandex cloud + google drive
🎄 В этом году оркестратор с Prefect меняется на Kestra, parquet на avro, и вроде все
⚠️ Видосы, стримы, задания и общение с участниками - total english
В общем, штука стоящая - тык
С пн 13.01 стартует de zoomcamp!
Кто еще ждет особого знака судьбы - он здесь
Из стека у нас был GCP, BigQuery, Terraform, Spark, Kafka, Prefect, Postgres, Docker, dbt, Looker
Некоторые штуки у меня не удалось применить, и я по итогу заменила гугл бакеты на yandex cloud + google drive
В общем, штука стоящая - тык
Please open Telegram to view this post
VIEW IN TELEGRAM
👍24❤6🔥4
Мы с вами чем-то не тем занимаемся
https://music.yandex.com/album/33934790/track/132728259?utm_medium=copy_link
https://music.yandex.com/album/33934790/track/132728259?utm_medium=copy_link
Yandex Music
Язык для славян
Научно-технический рэп • Track • 2024
😁8❤2🔥2 2
Про генераторы и итераторы
Мне когда-то советовали прочитать книжку Лутца по питону, но я ее забросила. Теперь мне нечего было делать, и я снова решила к ней вернуться) И тут я как осознала!
📝 Сделаем одно упражнение. Возьмем список, отберем только четные числа двумя способами:
А теперь дважды материализуем:
Список хранит все в памяти, занимает оперативку, и мы можем его вызывать сколько угодно раз.
А генератор закончился и всегда будет пустым🔲
➖ ➖ ➖ ➖
Если мы попробуем сделать то же самое ручками, то есть еще интересный нюанс.
Сделаем два итератора - для функции range и нашего генератора l2. Сначала вызовем первый, потом второй:
🌀 Прикол в том, что у range итераторов может быть много, как будто они передаются по значению. А в остальных случаях как будто по ссылке - когда изменяется одна, изменяется и другая.
По сути в тех случаях, когда нам не нужно несколько раз обращаться к одним данным, мы спокойно можем использовать генератор✅
Мне когда-то советовали прочитать книжку Лутца по питону, но я ее забросила. Теперь мне нечего было делать, и я снова решила к ней вернуться) И тут я как осознала!
lst = [1, 2, 3, 4]
l1 = [x for x in lst if x % 2 == 0]
l2 = (x for x in lst if x % 2 == 0)
print(type(l1))
# <class 'list'>
print(type(l2))
# <class 'generator'>
А теперь дважды материализуем:
print(list(l1))
print(list(l1))
# [2, 4]
# [2, 4]
print(list(l2))
print(list(l2))
# [2, 4]
# []
Список хранит все в памяти, занимает оперативку, и мы можем его вызывать сколько угодно раз.
А генератор закончился и всегда будет пустым
Если мы попробуем сделать то же самое ручками, то есть еще интересный нюанс.
Сделаем два итератора - для функции range и нашего генератора l2. Сначала вызовем первый, потом второй:
r = range(2)
i1 = iter(r)
i2 = iter(r)
print(next(i1))
# 0
print(next(i2))
# 0 - заново
l2 = (x for x in lst if x % 2 == 0)
i1 = iter(l2)
i2 = iter(l2)
print(next(i1))
# 2
print(next(i2))
# 4 - продолжили
По сути в тех случаях, когда нам не нужно несколько раз обращаться к одним данным, мы спокойно можем использовать генератор
Please open Telegram to view this post
VIEW IN TELEGRAM
👍26❤8🔥8
Какой способ/ы выполнятся быстрее?
Anonymous Poll
23%
for line in f.read():
42%
for line in f.readlines():
41%
for line in f:
👍2
Крутые дата-каналы 🔥
Собрали тут с ребятами мини-папку с дата-каналами. У меня в телеге под 200 полезных каналов, что я уже выделила папку "cool" для лучших из лучших❤️
В ней лежит больше половины из дата-папки, и я их частенько почитываю. Сейчас добавила оставшиеся, так что точно рекомендую и вам это сделать🔥
https://news.1rj.ru/str/addlist/a1B07iwrPxUxNWIy
Собрали тут с ребятами мини-папку с дата-каналами. У меня в телеге под 200 полезных каналов, что я уже выделила папку "cool" для лучших из лучших
В ней лежит больше половины из дата-папки, и я их частенько почитываю. Сейчас добавила оставшиеся, так что точно рекомендую и вам это сделать
https://news.1rj.ru/str/addlist/a1B07iwrPxUxNWIy
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
data party
Айлин invites you to add the folder “data party”, which includes 8 chats.
1🔥8 3👍2
Forwarded from Алексей
for line in f:
Использует итерацию по файлу построчно, без загрузки всего файла в память.
Самый быстрый и экономичный способ по памяти, особенно для больших файлов.
for line in f.read()::
Читает весь файл целиком в память как одну строку, а затем проходит по символам, а не по строкам. Это значительно замедляет работу и требует больше памяти.
for line in f.readlines()::
Читает весь файл в память как список строк. Это быстрее, чем f.read(), но всё ещё требует загрузки всего файла в память.
верно рассуждаю?
Использует итерацию по файлу построчно, без загрузки всего файла в память.
Самый быстрый и экономичный способ по памяти, особенно для больших файлов.
for line in f.read()::
Читает весь файл целиком в память как одну строку, а затем проходит по символам, а не по строкам. Это значительно замедляет работу и требует больше памяти.
for line in f.readlines()::
Читает весь файл в память как список строк. Это быстрее, чем f.read(), но всё ещё требует загрузки всего файла в память.
верно рассуждаю?
👍14❤3
Спасибо Алексею за полное и лаконичное пояснение 🧡 , а я добавлю еще пояснялку с замерами по памяти
➖ ➖
Я взяла тестовый файлик с 1 млн строк и протестила все функции на нем по типу такого:
🔶 Результаты🔶
🟣 read()
<class 'str'>
123 793 263 - длина строки
123 793 312 - размер в байтах
🟣 readlines()
<class 'list'>
1 000 001 - количество строк (+заголовок)
8 448 728 - размер в байтах
🟣 файловый итератор
<class '_io.TextIOWrapper'>
208 - размер в байтах
➡️ Получилось, что на выборке в 1 млн строк c длиной ~ 200 символов выигрыш по памяти между списком и итератором составил в 40k раз
➖ ➖
Если мы попробуем сделать такую же штуку с list(range(1000000)) vs range(1000000), то получим нечто похожее:
🟣 list(range(1000000))
<class 'list'>
1 000 000 - количество чисел
8 000 056 - размер в байтах
🟣 range(1000000)
<class 'range'>
1000000 - количество чисел
48 - размер в байтах
➡️ Тут с чиселками выигрыш в 166k раз
Вот и думайте
#python_tips
Я взяла тестовый файлик с 1 млн строк и протестила все функции на нем по типу такого:
import sys
with open('1000000 Sales Records.csv') as f:
f_list = f.readlines()
print(type(f_list))
print(len(f_list))
print(sys.getsizeof(f_list)) # in bytes
<class 'str'>
123 793 263 - длина строки
123 793 312 - размер в байтах
<class 'list'>
1 000 001 - количество строк (+заголовок)
8 448 728 - размер в байтах
<class '_io.TextIOWrapper'>
208 - размер в байтах
Если мы попробуем сделать такую же штуку с list(range(1000000)) vs range(1000000), то получим нечто похожее:
<class 'list'>
1 000 000 - количество чисел
8 000 056 - размер в байтах
<class 'range'>
1000000 - количество чисел
48 - размер в байтах
Вот и думайте
#python_tips
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍21 8🔥3
Никто еще не попробовал эту штуку в dbt?
https://www.getdbt.com/blog/dbt-labs-acquires-sdf-labs
https://www.sdf.com/
https://www.getdbt.com/blog/dbt-labs-acquires-sdf-labs
https://www.sdf.com/
dbt Labs
dbt Labs acquires SDF Labs to advance analytics engineering | dbt Labs
dbt Labs has acquired SDF Labs to enhance analytics engineering solutions. Learn how this partnership strengthens the modern data stack.
👍5
я популярити
мой первый доклад по де в таком масштабе💺
уже нагенерила идеи, данные и скрипт, сегодня доделываю презу и потом пойду репать спич😥
даже на почту эта рассылка пришла!
мой первый доклад по де в таком масштабе
уже нагенерила идеи, данные и скрипт, сегодня доделываю презу и потом пойду репать спич
даже на почту эта рассылка пришла!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤19🔥5
Forwarded from Simulative
🧑💻 Вебинар: Собираем витрину данных, как в бигтехе, от описания до результата
Представьте, что вы тренер футбольной команды. И у вас есть витрина данных, которая собирает информацию о каждом игроке, включая количество забитых голов, ассистов, время на поле и количество проведенных матчей. Такая витрина помогает выявить слабые места в команде и сфокусироваться на их улучшении.
О том, как аналитику строить витрину данных, разберём в прямом эфире на примере реальной задачи 28 января в 19:00 по МСК. Спикер вебинара — Айгуль Сибгатуллина, Data Engineer в Сбер, автор телеграм-канала @data_engineerette.
Вебинар пройдёт в нашем любимом режиме «решение тестового задания» — представим, что мы владельцы бизнеса, и на практическом примере покажем, зачем и почему мы это делаем.
Что будет:
🟠 Построение воркфлоу от этапа получения ТЗ до создания полноценной витрины;
🟠 Какие инструменты нужны для дата-инженера;
🟠 Как разобраться с методологией на разных диалектах;
🟠 Как объединить данные из нескольких источников;
🟠 Spark в работе дата-инженера: преобразования и оптимизации;
🟠 Как AI может ускорить процессы.
➡️ Зарегистрироваться
Представьте, что вы тренер футбольной команды. И у вас есть витрина данных, которая собирает информацию о каждом игроке, включая количество забитых голов, ассистов, время на поле и количество проведенных матчей. Такая витрина помогает выявить слабые места в команде и сфокусироваться на их улучшении.
О том, как аналитику строить витрину данных, разберём в прямом эфире на примере реальной задачи 28 января в 19:00 по МСК. Спикер вебинара — Айгуль Сибгатуллина, Data Engineer в Сбер, автор телеграм-канала @data_engineerette.
Вебинар пройдёт в нашем любимом режиме «решение тестового задания» — представим, что мы владельцы бизнеса, и на практическом примере покажем, зачем и почему мы это делаем.
Что будет:
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥51👍13❤12🦄2
Выложила запись на ютуб
Но у меня ни таймкоды не подтянулись, ни ссылки не работают
Спасибо всем, кто пришел! Меня ваши сердечки и огонечки очень подбадривали
Немного статистики: 400 человек в пике, 600 в тотале!
Ссылка на материалы: https://github.com/Aigul9/spark-webinar
Please open Telegram to view this post
VIEW IN TELEGRAM
❤53🔥25👍10
Please open Telegram to view this post
VIEW IN TELEGRAM
🤷25😁22🌚10🤔9👍8❤2
This media is not supported in your browser
VIEW IN TELEGRAM
Решения всех ваших проблем 🙌
Вчера на ретро с командой накидали решения проблем, перетасовали, а потом выбирали подходящие стикеры, как в игре с мемами. И вот что у нас получилось⬆️
Можете в комментах поделиться, что вам советует судьба на этот раз
Вчера на ретро с командой накидали решения проблем, перетасовали, а потом выбирали подходящие стикеры, как в игре с мемами. И вот что у нас получилось
Можете в комментах поделиться, что вам советует судьба на этот раз
Please open Telegram to view this post
VIEW IN TELEGRAM
❤14🔥10👍2