ODS - ML System Design
.
Курс, посвященный проектированию ML систем с точки зрения софта, железа и бизнеса. Говоря проще: как жить дальше после получения обученной модельки.
.
Общее взаимодействие такое:
📍Участники выбирают какую-либо тему (например, бот рекомендаций игр, распознавание SQL, сервис сравнения цен и др)
📍Объединяются в команды
📍Слушают лекции, читают презентации и допматериал
📍🪚 Пилят свой проект в соответствии с полученными знаниями
🪣 Пытаются всеми правдами и неправдами дотащить проект допрода защиты
📍По пути могут разбираются в одной из выбранных тем (отличный прицип научился сам - научи других)
📍Презентуют проект
.
Восторженные крики, радость, мерч и вот это вот всё в конце😎
.
🍩Из приятных бонусов:
- поработать в команде
- получить новые знания\упорядочить старые
- собрать систему вместе
- получить отличный Design Doc
.
🏆Итог: 8 место среди всех проектов, сумевших дойти до конца (~40), отличная футболка и общее понимание устройства ML системы.
#ods #mlsystemdesign #part1
.
Курс, посвященный проектированию ML систем с точки зрения софта, железа и бизнеса. Говоря проще: как жить дальше после получения обученной модельки.
.
Общее взаимодействие такое:
📍Участники выбирают какую-либо тему (например, бот рекомендаций игр, распознавание SQL, сервис сравнения цен и др)
📍Объединяются в команды
📍Слушают лекции, читают презентации и допматериал
📍🪚 Пилят свой проект в соответствии с полученными знаниями
🪣 Пытаются всеми правдами и неправдами дотащить проект до
📍По пути могут разбираются в одной из выбранных тем (отличный прицип научился сам - научи других)
📍Презентуют проект
.
Восторженные крики, радость, мерч и вот это вот всё в конце😎
.
🍩Из приятных бонусов:
- поработать в команде
- получить новые знания\упорядочить старые
- собрать систему вместе
- получить отличный Design Doc
.
🏆Итог: 8 место среди всех проектов, сумевших дойти до конца (~40), отличная футболка и общее понимание устройства ML системы.
#ods #mlsystemdesign #part1
👍3🔥1
ODS - ML System Design 2️⃣
.
Чем занималась команда
.
Громкое название проекта - Voice Teacher - аудио анализ вашей речи с указанием слов филлеров, их процента и возможностью улучшения речи.
.
Удалось реализовать
- прием аудисообщений
- анализ на существование слов-филлеров
- отправка результата пользователю
.
Архитектура
- микросервисы:
- моделька - FastAPI
- база - FastAPI
- бот
- развернуто на YCloud
Для всего используется старый добрый Python🤟
.
Организация совместной работы
1. Кодовая база -
2. Общие идеи, тикеты, рисунки -
3. Документы -
4. Общение\обсуждение - чат Телеграмм, Zoom для онлайн обсуждений
.
#ods #mlsystemdesign #part2
.
Чем занималась команда
.
Громкое название проекта - Voice Teacher - аудио анализ вашей речи с указанием слов филлеров, их процента и возможностью улучшения речи.
.
Удалось реализовать
- прием аудисообщений
- анализ на существование слов-филлеров
- отправка результата пользователю
.
Архитектура
- микросервисы:
- моделька - FastAPI
- база - FastAPI
- бот
- развернуто на YCloud
Для всего используется старый добрый Python🤟
.
Организация совместной работы
1. Кодовая база -
github. Описаны правила создания веток (например, все исследовательские ветки именовались по шаблону exp-author_name-N)2. Общие идеи, тикеты, рисунки -
miro3. Документы -
Google Docs4. Общение\обсуждение - чат Телеграмм, Zoom для онлайн обсуждений
.
#ods #mlsystemdesign #part2
🔥1
ODS - ML System Design 3️⃣
.
Что не получилось
.
🔻не досмотрел все лекции - предновогодний декабрь не давал много времени на просмотр лекций - это будет наверстано
🔺выбранная тема для доклада - workflow фреймворк luigi (тот что разработал Spotify).
Предпочтения были такие:
- хотел про Airflow, но не успел, его уже заняли
- был куплен вводный курс, соответственно хотел и курс добить и оформить в виде статьи
Курс добить удалось, а статья не вышла - это и есть вторая недоделка по курсу ML System Design
.
🤞Торжественно обязуюсь досмотреть все лекции и написать статью про luigi.
.
Какие еще оркестраторы\workflow managers есть:
- prefect
- dagster (один из участников делал доклад)
- airflow
——————————————————-
Познакомится с задачами и инструментами Data Engineer на практике можно в водной части курса DE. А для тех, кто любит зависать в терминале, ковырятся в логах и перекладывать JSONы, можно рекомендовать пройти полностью курс. 😉
#mlsystemdesign #part3 #ods
.
Что не получилось
.
🔻не досмотрел все лекции - предновогодний декабрь не давал много времени на просмотр лекций - это будет наверстано
🔺выбранная тема для доклада - workflow фреймворк luigi (тот что разработал Spotify).
Предпочтения были такие:
- хотел про Airflow, но не успел, его уже заняли
- был куплен вводный курс, соответственно хотел и курс добить и оформить в виде статьи
Курс добить удалось, а статья не вышла - это и есть вторая недоделка по курсу ML System Design
.
🤞Торжественно обязуюсь досмотреть все лекции и написать статью про luigi.
.
Какие еще оркестраторы\workflow managers есть:
- prefect
- dagster (один из участников делал доклад)
- airflow
——————————————————-
Познакомится с задачами и инструментами Data Engineer на практике можно в водной части курса DE. А для тех, кто любит зависать в терминале, ковырятся в логах и перекладывать JSONы, можно рекомендовать пройти полностью курс. 😉
#mlsystemdesign #part3 #ods
👍1
⚪️ Снег КРУ(Г)Жится...
В самом начале был пост про круговые диаграммы.
.
Как бы не хотелось, но используют их чаще чем надо. Нашел интересную статью Why humans love pie charts.
.
Автор объясняет с двух сторон популярность кругов:
- история
- эволюция
.
Выходит так: круги просто не могли быть непопулярны😉
.
Приятного чтения📗
#pie #article
В самом начале был пост про круговые диаграммы.
.
Как бы не хотелось, но используют их чаще чем надо. Нашел интересную статью Why humans love pie charts.
.
Автор объясняет с двух сторон популярность кругов:
- история
- эволюция
.
Выходит так: круги просто не могли быть непопулярны😉
.
Приятного чтения📗
#pie #article
🎥 А чем вы планировали заниматься в выходные
.
Для тех кто давно хотел, но боялся спросить😉
.
В эту субботу, 4 марта в 20:00 (мск) консультант по карьере и релокации Диана https://amo.si/H/TXCU83/BMWVEX проводит вебинар на тему «Планирование релокации».
На вебинаре обсудят:
• как планировать релокацию (с чего начать, какую выбрать стратегию, как это всё включить в планирование, особенно, если вы на текущей работе очень заняты);
• какие бывают подводные камни и как их обойти
Для записи пишите в https://amo.si/H/OXQEF7/DBLH53 Вас запишут, ответят на вопросы и пришлют ссылку на вебинар.
Также рекомендую их телеграмм-канал, там каждый день что-то интересное: https://amo.si/H/Q49JUU/UBL4W3
#вебинар
.
Для тех кто давно хотел, но боялся спросить😉
.
В эту субботу, 4 марта в 20:00 (мск) консультант по карьере и релокации Диана https://amo.si/H/TXCU83/BMWVEX проводит вебинар на тему «Планирование релокации».
На вебинаре обсудят:
• как планировать релокацию (с чего начать, какую выбрать стратегию, как это всё включить в планирование, особенно, если вы на текущей работе очень заняты);
• какие бывают подводные камни и как их обойти
Для записи пишите в https://amo.si/H/OXQEF7/DBLH53 Вас запишут, ответят на вопросы и пришлют ссылку на вебинар.
Также рекомендую их телеграмм-канал, там каждый день что-то интересное: https://amo.si/H/Q49JUU/UBL4W3
#вебинар
🌚1
Когда хочется побыстрее🔥
.
Если вы строите графики по времени и вам хочется их получать быстрее, то вы можете использовать методы гистограмм:
-
-
- аналогичные другие
.
Да, это быстро и удобно, но на этом плюсы заканчиваются и начинаются ошибки. Чтобы их не совершать, подготовил colab, в котором рассмотрел:
- наличие ошибок при использовании методов гистограмм
- зависимость ошибок от данных и выбранных параметров графика по времени
.
Забирайте себе и стройте корректные графики😉
.
#hist #line #timeline #tutorial
.
Если вы строите графики по времени и вам хочется их получать быстрее, то вы можете использовать методы гистограмм:
-
plt.hist-
sns.histplot- аналогичные другие
.
Да, это быстро и удобно, но на этом плюсы заканчиваются и начинаются ошибки. Чтобы их не совершать, подготовил colab, в котором рассмотрел:
- наличие ошибок при использовании методов гистограмм
- зависимость ошибок от данных и выбранных параметров графика по времени
.
Забирайте себе и стройте корректные графики😉
.
#hist #line #timeline #tutorial
👍2
🔥It's a new release of sklearn
.
Если вы частенько работает в
.
- отфильтровать выбросы
- преобразовать шкалу
- преобразовать распределение
- сгенерировать новые признаки
- дискретизировать и тд.
.
Некоторые наиболее известные:
- StandardScaler - стандартизация
- PolynomialFeatures - создание полиномиальных комбинаций
.
Для таких задач в библиотеке есть широкий выбор средств для создания
- make_pipeline
- ColumnTransformer
.
Мы же любим когда данные лежат в пандах 🐼 - там всё удобно и человекочитаемо😍 Но когда начинаются игры с обработкой данных и подготовкой их к обучению моделей, то всё скатывается до массивов
.
Массивы
В одном из последних проектов приходилось страдать от этого😭
.
Но смотрите, что произошло после релиза 1.2. Разработчики подарили нам магию, немного изменим код:
Новинки:
-
-
.
Это лучшее нововведение в библиотеках анализа данных с которыми я работаю за последние несколько лет😉.
.
А для тех, кто много работает с моделями появилась классная фича - PartialDependenceDisplay - очень полезная, тк всем хочется узнать, как влияет одна отдельная фича на прогнозы модели
.
А какие вы можете вспомнить изменения, которые упростили вам анализ данных🤔
Еще больше узнать по кнопке👇
.
Если вы частенько работает в
sklearn, то вам точно понравятся нововведения, которые появились👇.
sklearn - библиотека методов и алгоритмов машинного обучения на Python. Для обучения моделей или использования некоторых методов (например, снижения размерности) данные необходимо подготовить:- отфильтровать выбросы
- преобразовать шкалу
- преобразовать распределение
- сгенерировать новые признаки
- дискретизировать и тд.
.
Некоторые наиболее известные:
- StandardScaler - стандартизация
- PolynomialFeatures - создание полиномиальных комбинаций
.
Для таких задач в библиотеке есть широкий выбор средств для создания
Pipeline, например: - make_pipeline
- ColumnTransformer
.
Мы же любим когда данные лежат в пандах 🐼 - там всё удобно и человекочитаемо😍 Но когда начинаются игры с обработкой данных и подготовкой их к обучению моделей, то всё скатывается до массивов
numpy, вот как это выглядело раньше:X, y = load_iris(as_frame=True, return_X_y=True)
sepal_cols = ["sepal length (cm)", "sepal width (cm)"]
petal_cols = ["petal length (cm)", "petal width (cm)"]
preprocessor = ColumnTransformer(
[
("scaler", StandardScaler(), sepal_cols),
("kbin", KBinsDiscretizer(encode="ordinal"), petal_cols),
("Poly", PolynomialFeatures(degree=2, include_bias=False), sepal_cols)
],
)
pipe = make_pipeline(preprocessor)
X_out = preprocessor.fit_transform(X)
print(type(X_out))
display(X_out[:5, :])
# результат будет на 1 рисунке в комментах
.
Массивы
numpy нетакие юзерфрендли, ладно когда мы не создаем новых фич, можно использовать наименования их исходных данных, но когда мы используем полиномиальные фичи, получаются колонки с названиями x0, x1^2 и тд - крайне неудобно.В одном из последних проектов приходилось страдать от этого😭
.
Но смотрите, что произошло после релиза 1.2. Разработчики подарили нам магию, немного изменим код:
X, y = load_iris(as_frame=True, return_X_y=True)
sepal_cols = ["sepal length (cm)", "sepal width (cm)"]
petal_cols = ["petal length (cm)", "petal width (cm)"]
preprocessor = ColumnTransformer(
[
("scaler", StandardScaler(), sepal_cols),
("kbin", KBinsDiscretizer(encode="ordinal"), petal_cols),
("Poly", PolynomialFeatures(degree=2, include_bias=False), sepal_cols)
],
verbose_feature_names_out=False,
).set_output(transform="pandas")
pipe = make_pipeline(preprocessor)
X_out = preprocessor.fit_transform(X)
X_out.sample(n=5, random_state=0)
Новинки:
-
verbose_feature_names_out=False - добавление префикса к названиям колонок, к какому трансформеру они относятся-
set_output(transform="pandas") - истинная магия 🧙♂️, да-да, теперь выход пайплайна будет DataFrame c человекочитаемыми признаками - 2 рисунок в комментах.
Это лучшее нововведение в библиотеках анализа данных с которыми я работаю за последние несколько лет😉.
.
А для тех, кто много работает с моделями появилась классная фича - PartialDependenceDisplay - очень полезная, тк всем хочется узнать, как влияет одна отдельная фича на прогнозы модели
.
А какие вы можете вспомнить изменения, которые упростили вам анализ данных🤔
Еще больше узнать по кнопке👇
❌ Про ошибки и не только
.
Навеяно статьей 10 первых ошибок в карьере ML-инженера. Богдан, автор статьи, был участником нашей команды в курсе ML System Design, хотя скорее ментором😉
.
Некоторые ошибки (хотя для себя я бы назвал это идеей или откровением🙃) откликнулись:
🔹Не ML единым. Модельки не панацея, особенно в сложных областях (медицина, металлургия), там где человек должен очень хорошо понимать, как принимаются решения. Задачу следует попробовать решать начиная с простых правил, чаще всего такие правила у заказчика уже есть - узнайте их, возможно, их стоит просто улучшить
🔹Не писать дизайн-док. В моей практике я бы расширил: не только дизайн-док, но и фиксировать summary после каждого значимого обсуждения. Как показывает практика, у заказчика может быть много проектов (его внимание рассеяно), заказчик может слабо понимать ML, поэтому фиксация договоренностей в начале (дизайн-док) и на промежуточных этапах - очень важна
🔹Говорить просто о сложном - всем надо тренироваться объяснять простым языком, людям нравится, когда они понимают вас
🔹Жить в Jupyter-тетрадках. Года 1.5 назад съехал с jupyter'a - нет, я конечно его использую, когда надо быстро что-то посмотреть, попробовать, но в остальное время пишу в IDE - тут мой фаворит
- повышается качество кода
- сразу привыкаешь структурировать код по модулям
- и кажется чувствуешь себя немножко круче😎
🔹Браться за любой проект. Тут можно взгрустнуть, да такое бывает, приходится браться за невыигрышные проекты, иногда даже с проведенным ресерчем. Боремся коллеги💪
.
Пишите какие ошибки проходили, а может есть что-то новенькое🙃
#error #article
.
Навеяно статьей 10 первых ошибок в карьере ML-инженера. Богдан, автор статьи, был участником нашей команды в курсе ML System Design, хотя скорее ментором😉
.
Некоторые ошибки (хотя для себя я бы назвал это идеей или откровением🙃) откликнулись:
🔹Не ML единым. Модельки не панацея, особенно в сложных областях (медицина, металлургия), там где человек должен очень хорошо понимать, как принимаются решения. Задачу следует попробовать решать начиная с простых правил, чаще всего такие правила у заказчика уже есть - узнайте их, возможно, их стоит просто улучшить
🔹Не писать дизайн-док. В моей практике я бы расширил: не только дизайн-док, но и фиксировать summary после каждого значимого обсуждения. Как показывает практика, у заказчика может быть много проектов (его внимание рассеяно), заказчик может слабо понимать ML, поэтому фиксация договоренностей в начале (дизайн-док) и на промежуточных этапах - очень важна
🔹Говорить просто о сложном - всем надо тренироваться объяснять простым языком, людям нравится, когда они понимают вас
🔹Жить в Jupyter-тетрадках. Года 1.5 назад съехал с jupyter'a - нет, я конечно его использую, когда надо быстро что-то посмотреть, попробовать, но в остальное время пишу в IDE - тут мой фаворит
PyCharm. Последние полгода использую профессиональную версию - тут сразу есть поддержка Jupyter - поэтому переключаться достаточно просто. Из опыта IDE извлек:- повышается качество кода
- сразу привыкаешь структурировать код по модулям
- и кажется чувствуешь себя немножко круче😎
🔹Браться за любой проект. Тут можно взгрустнуть, да такое бывает, приходится браться за невыигрышные проекты, иногда даже с проведенным ресерчем. Боремся коллеги💪
.
Пишите какие ошибки проходили, а может есть что-то новенькое🙃
#error #article
📈 Plotly\Dash
Давно знаком с данной библиотекой и фреймворком на её основе для создания кастомных дашбордом (Plotly, Dash)
.
Разнообразие компонентов и объектов внутри библиотеки иногда ставит в ступор начинающего дашбордбилдера и возникают вопросики🤔
.
В курсе Аналитика данных Яндекс Практикум фреймворк рассматривается как один из возможных вариантов построения дашбордов, но сейчас не является обязательным (то есть это дополнительная практика для студента). Моя память помнит, какие страдания испытывала 1 когорта, настраивая и запуская Dash - для нас это было обязательным😈
.
Время идет, курс меняется, но пытливые студенты остаются и им хочется большего, возникают вопросы. Недавно как раз давал ответы по ряду вопросов.
.
Решил оформить ответы в виде github-репозитория (так будет легче пополнять его, может превратиться во Вредные советы по Dash🙃). В репозитории есть не только текст, но и примеры, которые можно запустить и поиграться.
.
Кажется, там есть ответ на самый важный вопрос, который 4 года назад не был решаем - как сделать фильтр по дате и времени.
.
#dash #plotly #github
Давно знаком с данной библиотекой и фреймворком на её основе для создания кастомных дашбордом (Plotly, Dash)
.
Разнообразие компонентов и объектов внутри библиотеки иногда ставит в ступор начинающего дашбордбилдера и возникают вопросики🤔
.
В курсе Аналитика данных Яндекс Практикум фреймворк рассматривается как один из возможных вариантов построения дашбордов, но сейчас не является обязательным (то есть это дополнительная практика для студента). Моя память помнит, какие страдания испытывала 1 когорта, настраивая и запуская Dash - для нас это было обязательным😈
.
Время идет, курс меняется, но пытливые студенты остаются и им хочется большего, возникают вопросы. Недавно как раз давал ответы по ряду вопросов.
.
Решил оформить ответы в виде github-репозитория (так будет легче пополнять его, может превратиться во Вредные советы по Dash🙃). В репозитории есть не только текст, но и примеры, которые можно запустить и поиграться.
.
Кажется, там есть ответ на самый важный вопрос, который 4 года назад не был решаем - как сделать фильтр по дате и времени.
.
#dash #plotly #github
❤2
Без chatGPT никуда
.
Шутливая игра слов и забавные совпадения, 20 вариантов как назвать свой блог про data egineering от chatGPT.
.
Некоторые варианты больше похожи на названия постов или статей. В общем наслаждайтесь👇
.
.
#chatgpt #joke
.
Шутливая игра слов и забавные совпадения, 20 вариантов как назвать свой блог про data egineering от chatGPT.
.
Некоторые варианты больше похожи на названия постов или статей. В общем наслаждайтесь👇
.
1. «Пандамониум: руководство по работе с пандами для инженера данных»
2. «От нуля до героя SQL: освоение анализа баз данных»
3. «Программирование Python для анализа данных»
4. «Большие данные, большие мечты: полное руководство для инженеров»
5. «JSON на все руки: советы по программированию для анализа данных»
6. «SQL-версия для ваших проблем с данными»
7. «Python Power: как стать мастером обработки данных»
8. «Погружение в большие данные: советы и рекомендации для инженеров»
9. «Обработка чисел с помощью Pandas: учебник по анализу данных»
10. «Искусство программирования: взгляд инженера данных»
11. «SQL Like a Boss: расширенные методы анализа баз данных»
12. «Python Pandemonium: как освоить Pandas для анализа данных»
13. «Большая картина больших данных: полное руководство для инженеров»
14. «Анализ данных для чайников: руководство для начинающих»
15. «Секреты SQL: советы и рекомендации по эффективному анализу базы данных»
16. «Python Picks: лучшие библиотеки для обработки данных»
17. «Укрощение больших данных: стратегии успешного анализа»
18. «JSON Journeys: одиссея инженера данных»
19. «Python и Pandas: динамический дуэт инженеров данных»
20. «Драма базы данных: решение общих проблем при анализе данных»
.
#chatgpt #joke
😁2
Header всему голова
.
Кому не знакомы странные наименования столбцов в таблицах, выгрузках или API, например,
.
ps: все же переименовывают при помощи
.
Попробуем автоматизировать этот процесс. На помощь нам придут замечательные регулярные выражения (тот самый модуль
.
Создаем функцию
- разделяет имена по заглавной букве
- переводит написание через нижнее подчеркивание
- переводит слова в LOWER CASE
Пользуйстесь наздоровье🙌
.
А вообще регулярки - это очень мощно, рекомендую обязательно ознакомится с фукнционалом модуля
- классная статья
- моя настольная книга
#regex #cameltosnake #code
.
Кому не знакомы странные наименования столбцов в таблицах, выгрузках или API, например,
deviceId или dReleaseDate. И каждый раз приходится ручками переименовывать, когда их 2-3 еще терпимо, но когда полей 20+, уже к 10 появляется 🤮.
ps: все же переименовывают при помощи
df.rename(columns={old_column_name: new_column_name}) 😉.
Попробуем автоматизировать этот процесс. На помощь нам придут замечательные регулярные выражения (тот самый модуль
re который ты обходил стороной и боялся как серебряной пули).
Создаем функцию
camel_to_snake, которая:- разделяет имена по заглавной букве
- переводит написание через нижнее подчеркивание
- переводит слова в LOWER CASE
import re.
def camel_to_snake(name):
name = re.sub('(.)([A-Z][a-z]+|[А-Я][а-я]+)', r'\1_\2', name)
return re.sub('([a-z]|[а-я])([A-Z]|[А-Я])', r'\1_\2', name).lower()
Пользуйстесь наздоровье🙌
.
А вообще регулярки - это очень мощно, рекомендую обязательно ознакомится с фукнционалом модуля
re:- классная статья
- моя настольная книга
#regex #cameltosnake #code
Хабр
Регулярные выражения в Python от простого к сложному. Подробности, примеры, картинки, упражнения
Регулярные выражения в Python от простого к сложному Решил я давеча моим школьникам дать задачек на регулярные выражения для изучения. А к задачкам нужна какая-нибудь теория. И стал я искать хорошие...
🔥5
Секреты 🐼as
.
А вы замечали, что пишите неэффективный\плохочитаемый (подставить любимое) код🤔
.
Нередко это связано с устоявшимися конструкциями, которые вы где-то увидели, набили на них руку или просто так было, когда вы изучали
.
Одна из задач в ML создание новых признкаков, при изучении временных рядов часто используется такой признак как moving average. При добавлении его необходимо исключить лик целевой, тк текущее значение входит в окно.
.
Нередко встречается такой код:
.
Исключили лишний метод, использовали встроенные аргументы - good work🤝
#code #pandas #refactor
.
А вы замечали, что пишите неэффективный\плохочитаемый (подставить любимое) код🤔
.
Нередко это связано с устоявшимися конструкциями, которые вы где-то увидели, набили на них руку или просто так было, когда вы изучали
pandas==0.23😎.
Одна из задач в ML создание новых признкаков, при изучении временных рядов часто используется такой признак как moving average. При добавлении его необходимо исключить лик целевой, тк текущее значение входит в окно.
.
Нередко встречается такой код:
df['ma'] = df['column'].shift().rolling().mean()Здесь
shift выполняет роль, исключающую текущее значение целевой (сдвигаем весь ряд на 1 позицию в будущее). В целом код понятен но перегружен дополнительным методом. Если заглянуть в доку к методу rolling то разработчики уже учли эту возможную проблему, а нам остается только воспользоваться:df['ma'] = df['column'].rolling(closed='left').mean()При такой опции
closed='left' - последнее значение в окне исключается из расчета, тем самым не будет создан лик целевой..
Исключили лишний метод, использовали встроенные аргументы - good work🤝
#code #pandas #refactor
Идеальные данные для pandas
.
В этих данных не будет дубликатов, пропусков, некорректных значений и всех остальных наших проблем с данными🤩
.
Заинтригованы? Я нашел их - берите и пользуйтесь панда-данные
.
Попробуем решить одну из задачек - cloud of words для кого, конечно же, По😉
.
Здесь ссылка на google-colab. Осторожно основа кода сгенерирована ChatGPT😱
.
#data #code #practice
.
В этих данных не будет дубликатов, пропусков, некорректных значений и всех остальных наших проблем с данными🤩
.
Заинтригованы? Я нашел их - берите и пользуйтесь панда-данные
.
Попробуем решить одну из задачек - cloud of words для кого, конечно же, По😉
.
Здесь ссылка на google-colab. Осторожно основа кода сгенерирована ChatGPT😱
.
#data #code #practice
#WeAreGRUT
.
Немного личного в публичное
А как вы проводите свои выходные😜
.
У меня запланированы весёлые беговые старты на фестивале GRUT🪵
.
В этом году нет одной дистанции, а сразу три:
1⃣0⃣km HardHight
5⃣km Sprint
T2⃣0⃣km в основной день
.
Да, пребудет с вами сила🙌
#grut #run
.
Немного личного в публичное
А как вы проводите свои выходные😜
.
У меня запланированы весёлые беговые старты на фестивале GRUT🪵
.
В этом году нет одной дистанции, а сразу три:
1⃣0⃣km HardHight
5⃣km Sprint
T2⃣0⃣km в основной день
.
Да, пребудет с вами сила🙌
#grut #run
👍1🔥1
🤨 Пиу-пиу
.
Разрезаем пустоту информационного пространства. Последний месяц прошёл в активном поиске работы, будет серия постов про вопросы с собеседований.
.
Текущий мой вектор - data engineering👨🔧 И вопросы соответствующие, но будет и практическая часть с задачками, соответственно всеми любимый SQL😜
.
Буду выкладывать задачки, чтобы вы могли подумать, а потом прикладывать своё решение в моменте (возможно, дополню его, тем, что можно было бы улучшить)
.
Разрезаем пустоту информационного пространства. Последний месяц прошёл в активном поиске работы, будет серия постов про вопросы с собеседований.
.
Текущий мой вектор - data engineering👨🔧 И вопросы соответствующие, но будет и практическая часть с задачками, соответственно всеми любимый SQL😜
.
Буду выкладывать задачки, чтобы вы могли подумать, а потом прикладывать своё решение в моменте (возможно, дополню его, тем, что можно было бы улучшить)
❤4🔥3👍1
А пока вы вспоминаете SQL
.
Принес вам забавный (ну не очень) случай из работы.
.
На скрине выше:
- первое поле есть в таблице
- второго нет (подчеркнуто красным)
.
А где же разница? А разница в букве
.
Написать код, забирающий данные - 15 минут, найти такую ошибку - бесценно❤️
.
Принес вам забавный (ну не очень) случай из работы.
.
На скрине выше:
- первое поле есть в таблице
- второго нет (подчеркнуто красным)
.
А где же разница? А разница в букве
C - в существующем поле она кириллическая🤷♂️🤯.
Написать код, забирающий данные - 15 минут, найти такую ошибку - бесценно❤️
🥴2
Задача 1️⃣
.
На очереди первая задачка по SQL, кажется, что она самая популярная,она была в двух вариантах:
1. Даны следующие таблицы
.
Ответы оставляем в комментариях👇 ps: тут конечно могут помочь диаграммы Венна (кружочки), но они имеют изъян.
#вопросы #собес #sql
.
На очереди первая задачка по SQL, кажется, что она самая популярная,она была в двух вариантах:
1. Даны следующие таблицы
a - 5 rowsВыполняется такой запрос:
b - 10 rows
select count(*)2. Даны таблицы t1 и t2
from a
unknown join b on unknown (a.a=b.b)
Какое максимальное и минимальное количество может быть для разных join? Примечание: значения в таблицах уникальны.
t1 t2
1 3
2 4
3 5
4 6
5 7
Что получится при разных видах JOIN
.
Ответы оставляем в комментариях👇 ps: тут конечно могут помочь диаграммы Венна (кружочки), но они имеют изъян.
#вопросы #собес #sql
Задачки 2️⃣ и 3️⃣
+ дополнительный вопрос от меня
——————————————————
.
Жду ваших решений в комментариях и помните, у задачки необязательно есть одно единственное решение😉
#вопросы #собес #sql
Дана таблица:
CREATE TABLE IF NOT EXISTS prices (
id bigint not null,
price int4 not null,
dt date not null
);
Пример данных:
id price dt
1 100 2021-01-01
1 110 2021-05-05
В таблице prices хранятся данные по ценам товаров. В этой таблице есть другие цены и другие товары, эти приведены для примера.
При изменении цены записывается новая строка с датой начиная с которой это цена действует.
Цена действует до тех пор, пока она не сменится другой ценой.
Надо написать параметризованный запрос, который по id и dt вернет цену товара на этот день.
Например:id=1, dt=2021-01-02 => price=100id=1, dt=2021-06-01 => price=110.
+ дополнительный вопрос от меня
Какой механизм реализован в этой таблице?——————————————————
Дана таблица Client (id, email, phone)
1. Найти все email которые встречаются в таблице более 2х раз.
2. Вывести id, email, email_дуплицирован(1,0)
☝️1 и 2 - два разных запроса
.
Жду ваших решений в комментариях и помните, у задачки необязательно есть одно единственное решение😉
#вопросы #собес #sql
Задача 4️⃣ (в двух частях)
.
.
Жду ваших верных решений😎
#вопросы #собес #sql
.
Дана таблица:
CREATE TABLE IF NOT EXISTS deliveries (
id bigint not null,
dt date not null,
id_supplier bigint not null,
id_product bigint not null,
quantity int4 not null,
price decimal(16, 4)
);
Пример данных:
id dt id_supplier id_product quantity price
1 2021-01-01 2 134 5 10.5
2 2021-05-05 1 135 10 11.0
Задача 2.1
В таблице хранятся данные о поставках, каждая поставка имеет:
свой уникальный id, дату совершения поставки dt, данные о поставщике id_supplier и товаре id_product, количестве штук товара в поставке quantity, цене одной штуки price.
Необходимо найти поставщика, который поставил нам товаров на наибольшую сумму денег.
Задача 2.2
Дополнительно дан справочник:
CREATE TABLE IF NOT EXISTS supplier (
id bigint not null,
name VARCHAR(200) not null
);
Пример данных:
id name
1 Поставщик1
2 Поставщик2
Как найти поставщиков которые ничего не поставляли, если рядом есть справочник поставщиков?
.
Жду ваших верных решений😎
#вопросы #собес #sql
Задача 5️⃣
.
Продолжаем серию SQL задачек, на очереди аналитическая задачка.
.
.
Дерзайте, задачку точно можно решить не одним способом😉 Используйте все ваши знания и творческий подход😎
#вопросы #собес #sql
.
Продолжаем серию SQL задачек, на очереди аналитическая задачка.
.
Посчитать среднее время нахождения в статусе "Подтверждён" , за которым следовал статус "Доставлен" для заказов , созданных в этом году.
-- Таблица, со статусами заказа
create table OrderStatusChangeLog
(
order_id INTEGER
, status_id INTEGER
, time_changed DATETIME
);
comment on column OrderStatusChangeLog.order_id is 'ID заказа';
comment on column OrderStatusChangeLog.status_id is 'ID статуса заказа';
comment on column OrderStatusChangeLog.time_changed is 'Время изменения заказа';
Пример (сэмпл) данных в таблице:
+--------+---------+-------------------+
|order_id|status_id|time_changed |
+--------+---------+-------------------+
|14324 |1 |01.05.2022 10:00:01|
|14324 |2 |01.05.2022 10:25:17|
|14324 |10 |01.05.2022 10:30:55|
|14324 |7 |01.05.2022 10:31:24|
|14324 |10 |01.05.2022 15:30:54|
|14324 |5 |04.05.2022 12:22:32|
|1468 |1 |01.05.2022 10:00:01|
|1468 |2 |01.05.2022 11:25:23|
|1468 |10 |01.05.2022 11:30:48|
|67825 |1 |01.05.2022 10:00:01|
|67825 |2 |01.05.2022 10:25:44|
|67825 |10 |01.05.2022 10:30:05|
|67825 |5 |08.05.2022 16:32:49|
+--------+---------+-------------------+
-- Таблица-справочник статусов
create table OrderStatus
(
status_id INTEGER
, status_name VARCHAR(255)
);
comment on column OrderStatus.status_id is 'ID статуса заказа';
comment on column OrderStatus.status_name is 'Наименование статуса заказа';
Пример (сэмпл) данных в таблице:
+---------+-----------+
|status_id|status_name|
+---------+-----------+
|1 |Новый |
|2 |Оплачен |
|10 |Подтверждён|
+---------+-----------+
-- Таблица с заказами
create table Orders
(
order_id INTEGER PRIMARY KEY
, time_created DATETIME
, client_id INTEGER
, status_id INTEGER
);
comment on column Orders.order_id is 'ID заказа';
comment on column Orders.time_created is 'Время создания заказа';
comment on column Orders.client_id is 'ID клиента';
comment on column Orders.status_id is 'ID текущего статуса заказа';
Пример (сэмпл) данных в таблице:
+--------+-------------------+---------+---------+
|order_id|time_created |client_id|status_id|
+--------+-------------------+---------+---------+
|1468 |01.05.2022 10:00:01|234 |10 |
|14324 |01.05.2022 10:00:01|738294 |5 |
|3421987 |10.03.2021 19:03:55|761285 |5 |
+--------+-------------------+---------+---------+
.
Дерзайте, задачку точно можно решить не одним способом😉 Используйте все ваши знания и творческий подход😎
#вопросы #собес #sql
👍2