👨🏫 Кстати, вот несколько каналов, в которые мы активно заглядываем:
🔹 https://news.1rj.ru/str/prometriki
🔹 https://news.1rj.ru/str/andron_233
🔹 https://news.1rj.ru/str/data_new_gold
📖 А какие образовательные каналы вам нравятся? Пишите в комментариях 👇
🔹 https://news.1rj.ru/str/prometriki
🔹 https://news.1rj.ru/str/andron_233
🔹 https://news.1rj.ru/str/data_new_gold
📖 А какие образовательные каналы вам нравятся? Пишите в комментариях 👇
❤6🔥4
🔥 Базовая Шпаргалка по Работе с Файлами в Python 🔥
Работа с файлами в Python - это важная часть обработки данных и автоматизации задач. Мы подготовили для вас базовую шпаргалку с основными операциями для работы с файлами.
✅ Открытие файла для чтения
✅ Чтение по строкам
✅ Запись в файл
✅ Добавление в файл
✅ Чтение и запись в бинарных файлах
✅ Работа с контекстом
✅ Проверка наличия файла
✅ Удаление файла
✅ Создание директори
✅ Список файлов в директории
✅ Использование библиотеки shutil
✅ Использование библиотеки os
И для удобства мы сделали для вас notebook 😊
Сохраняйте и пользуйтесь 👇
https://colab.research.google.com/drive/1CqADXAdImiAQ9VIYYzYGdwIuiXQrAF7K?usp=sharing
Если у вас есть какие-либо дополнения, не стесняйтесь оставлять в комментариях!
#python
Работа с файлами в Python - это важная часть обработки данных и автоматизации задач. Мы подготовили для вас базовую шпаргалку с основными операциями для работы с файлами.
✅ Открытие файла для чтения
✅ Чтение по строкам
✅ Запись в файл
✅ Добавление в файл
✅ Чтение и запись в бинарных файлах
✅ Работа с контекстом
✅ Проверка наличия файла
✅ Удаление файла
✅ Создание директори
✅ Список файлов в директории
✅ Использование библиотеки shutil
✅ Использование библиотеки os
И для удобства мы сделали для вас notebook 😊
Сохраняйте и пользуйтесь 👇
https://colab.research.google.com/drive/1CqADXAdImiAQ9VIYYzYGdwIuiXQrAF7K?usp=sharing
Если у вас есть какие-либо дополнения, не стесняйтесь оставлять в комментариях!
#python
👍11🔥7❤3
Ищем junior-аналитика к себе в команду! 🔥
У нас сегодня огненная новость - ищем в команду на один из наших проектов заряженного junior-аналитика, который готов впитывать кучу новой информации и быстро развиваться на стыке аналитики и Data Science.
Требования к кандидату:
- Знание Python + Pandas - обязательно
- Английский на уровне чтения литературы и документации - обязательно
- Базовое знание статистики и математики - приветствуется
- Опыт работы с базовыми алгоритмами DS (PCA, ANOVA, кластеризация и т.д.) - приветствуется
Все необходимые знания можно добрать в процессе - главное владеть питоном и быть готовым быстро обучаться 🙂
Чем предстоит заниматься:
Мы строим продукт на стыке маркетинга и аналитики, который позволяет рекламодателям экономить миллоны бюджета за счет data-driven маркетинга. Мы умеем разбирать рекламные креативы на десятки признаков - слова, объекты, цвета и т.д. Ваша задача - под руководством опытного наставника генерировать идеи, тестировать разные алгоритмы на этих данных и улучшать продукт.
Задачи бомбически интересные, беклог полон идей + это классная возможность стартануть карьеру в международном стартапе с возможностью быстрого перехода в Data Science.
Что мы предлагаем:
- Обучение в бою и быстрый профессиональный рост с нуля до опытного аналитика/DS под руководством опытного наставника
- Комфортные условия труда - удаленка, гибкий график, з/п по договоренности
- Крутая строчка в резюме + рекомендации от CEO международного стартапа
- Возможность быстро вырасти внутри компании и получить опцион
- Никакой бюрократии, общение напрямую с CTO, совместные мозгоштурмы и полный креатив
Если вам заходит - скорей отправляйте свое резюме нашему CEO Андрону в личку + напишите пару слов, почему мы должны выбрать именно вас.
P.S. Вакансия горящая, принимать решение будем быстро, так что не затягивайте 😉
P.P.S. Не тратьте много времени на резюме - лучше расскажите, почему вы классный и почему мы сработаемся.
У нас сегодня огненная новость - ищем в команду на один из наших проектов заряженного junior-аналитика, который готов впитывать кучу новой информации и быстро развиваться на стыке аналитики и Data Science.
Требования к кандидату:
- Знание Python + Pandas - обязательно
- Английский на уровне чтения литературы и документации - обязательно
- Базовое знание статистики и математики - приветствуется
- Опыт работы с базовыми алгоритмами DS (PCA, ANOVA, кластеризация и т.д.) - приветствуется
Все необходимые знания можно добрать в процессе - главное владеть питоном и быть готовым быстро обучаться 🙂
Чем предстоит заниматься:
Мы строим продукт на стыке маркетинга и аналитики, который позволяет рекламодателям экономить миллоны бюджета за счет data-driven маркетинга. Мы умеем разбирать рекламные креативы на десятки признаков - слова, объекты, цвета и т.д. Ваша задача - под руководством опытного наставника генерировать идеи, тестировать разные алгоритмы на этих данных и улучшать продукт.
Задачи бомбически интересные, беклог полон идей + это классная возможность стартануть карьеру в международном стартапе с возможностью быстрого перехода в Data Science.
Что мы предлагаем:
- Обучение в бою и быстрый профессиональный рост с нуля до опытного аналитика/DS под руководством опытного наставника
- Комфортные условия труда - удаленка, гибкий график, з/п по договоренности
- Крутая строчка в резюме + рекомендации от CEO международного стартапа
- Возможность быстро вырасти внутри компании и получить опцион
- Никакой бюрократии, общение напрямую с CTO, совместные мозгоштурмы и полный креатив
Если вам заходит - скорей отправляйте свое резюме нашему CEO Андрону в личку + напишите пару слов, почему мы должны выбрать именно вас.
P.S. Вакансия горящая, принимать решение будем быстро, так что не затягивайте 😉
P.P.S. Не тратьте много времени на резюме - лучше расскажите, почему вы классный и почему мы сработаемся.
🔥8👍7❤1
🔥 Разбор вопросов из актуального теста от компании Kaspersky 🚀
Недавно Касперский проводил входные тестирования на стажировку, и мы решили для вас эти тесты и сейчас поделимся разбором части вопросов.
А когда этот пост наберет 15 огоньков, разберем с вами продолжение этого теста.
Вопрос 1: Выберите запросы, которые не упадут с ошибкой.
1. Все вернут ошибку
2. SELECT ID, NAME, COUNT(*) FROM T1 GROUP BY ID, NAME;
3. SELECT COUNT(ID), * FROM T1 GROUP BY (ID);
4. SELECT COUNT(ID), * FROM T1 GROUP BY (ID) HAVING AGE>18;
5. SELECT * FROM T1 GROUP BY (COL1);
6. SELECT COUNT(ID) FROM T1 HAVING AGE>18;
✅ Ответы и объяснения:
1. SELECT ID, NAME, COUNT(*) FROM T1 GROUP BY ID, NAME; - Не вызовет ошибку.
Этот запрос выберет уникальные комбинации столбцов ID и NAME из таблицы T1, подсчитает количество строк в каждой комбинации и выведет результат.
2. SELECT COUNT(ID), * FROM T1 GROUP BY (ID); - Вызовет ошибку.
В операторе GROUP BY указан столбец ID, который используют для группировки результатов. Но когда используется агрегатная функция COUNT(ID), SQL ожидает, что также будут указаны, какие другие столбцы должны быть включены в результат, если они не являются частью агрегации.
3. SELECT COUNT(ID), * FROM T1 GROUP BY (ID) HAVING AGE>18; - Вызовет ошибку.
Аналогично предыдущему запросу.
4. SELECT * FROM T1 GROUP BY (COL1); - Вызовет ошибку.
При использовании оператора GROUP BY, обычно требуется агрегировать столбцы, которые не включены в часть выражения GROUP BY. В данном случае, используют оператор *, чтобы выбрать все столбцы, но не предоставляете агрегатную функцию для столбцов, не включенных в GROUP BY. Такой запрос будет считаться некорректным.
5. SELECT COUNT(ID) FROM T1 HAVING AGE>18; - Вызовет ошибку.
Ошибка связана с использованием оператора HAVING, который обычно используется для фильтрации результатов агрегатных функций, примененных к данным, сгруппированным с помощью оператора GROUP BY. Но в запросе отсутствует оператор GROUP BY, поэтому использование HAVING без GROUP BY будет рассматриваться как некорректное использование.
Вопрос 2: Какого типа данных не встретишь в SQL?
1. MEDIUMINT
2. SMALLINT
3. BIGINT
4. COMMENT
5. AUTO_INCREMENT
6. NULL
7. IDENTITY
8. TINYINT
9. DECIMAL
✅ Ответ:COMMENT, AUTO_INCREMENT, IDENTITY. Эти три опции не являются типами данных в SQL, а представляют собой различные атрибуты или свойства столбцов.
Вопрос 3: Вам необходимо очистить все содержимое таблицы. Каким запросом вы воспользуетесь?
Выберите один вариант из списка
1. DELETE FROM
2. TRUNCATE
3. DROP TABLE
4. TRUNCATE
5. DROP TABLE
Ответы и объяснения:
1. DELETE FROM my_schema.old_table WHERE NAME IS NULL;
Этот запрос удаляет строки из таблицы, удовлетворяющие условию "WHERE NAME IS NULL". Это не полная очистка таблицы.
2. TRUNCATE my_schema.old_table WHERE NAME IS NULL;
TRUNCATE TABLE не поддерживает использование WHERE для фильтрации строк, и данная комбинация вызовет ошибку.
3. DROP TABLE my_schema.old_table;
DROP TABLE удаляет всю таблицу, а не только её содержимое.
4. TRUNCATE my_schema.old_table;
Правильный вариант для очистки содержимого таблицы. Этот запрос удалит все строки из таблицы, но оставит саму таблицу в базе данных.
5. DROP TABLE my_schema.old_table WHERE NAME IS NULL;
DROP TABLE не поддерживает использование WHERE для фильтрации строк, и данная комбинация вызовет ошибку.
Итак, правильный запрос для очистки содержимого таблицы - TRUNCATE my_schema.old_table
💥 Мы стараемся максимально подготовить вас к собеседованиям и верим в вас! Не забудь нажать огонек, чтобы мы запостили продолжение.
#sql #Kaspersky #interview_problems
Недавно Касперский проводил входные тестирования на стажировку, и мы решили для вас эти тесты и сейчас поделимся разбором части вопросов.
А когда этот пост наберет 15 огоньков, разберем с вами продолжение этого теста.
Вопрос 1: Выберите запросы, которые не упадут с ошибкой.
1. Все вернут ошибку
2. SELECT ID, NAME, COUNT(*) FROM T1 GROUP BY ID, NAME;
3. SELECT COUNT(ID), * FROM T1 GROUP BY (ID);
4. SELECT COUNT(ID), * FROM T1 GROUP BY (ID) HAVING AGE>18;
5. SELECT * FROM T1 GROUP BY (COL1);
6. SELECT COUNT(ID) FROM T1 HAVING AGE>18;
✅ Ответы и объяснения:
Этот запрос выберет уникальные комбинации столбцов ID и NAME из таблицы T1, подсчитает количество строк в каждой комбинации и выведет результат.
2. SELECT COUNT(ID), * FROM T1 GROUP BY (ID); - Вызовет ошибку.
В операторе GROUP BY указан столбец ID, который используют для группировки результатов. Но когда используется агрегатная функция COUNT(ID), SQL ожидает, что также будут указаны, какие другие столбцы должны быть включены в результат, если они не являются частью агрегации.
3. SELECT COUNT(ID), * FROM T1 GROUP BY (ID) HAVING AGE>18; - Вызовет ошибку.
Аналогично предыдущему запросу.
4. SELECT * FROM T1 GROUP BY (COL1); - Вызовет ошибку.
При использовании оператора GROUP BY, обычно требуется агрегировать столбцы, которые не включены в часть выражения GROUP BY. В данном случае, используют оператор *, чтобы выбрать все столбцы, но не предоставляете агрегатную функцию для столбцов, не включенных в GROUP BY. Такой запрос будет считаться некорректным.
5. SELECT COUNT(ID) FROM T1 HAVING AGE>18; - Вызовет ошибку.
Ошибка связана с использованием оператора HAVING, который обычно используется для фильтрации результатов агрегатных функций, примененных к данным, сгруппированным с помощью оператора GROUP BY. Но в запросе отсутствует оператор GROUP BY, поэтому использование HAVING без GROUP BY будет рассматриваться как некорректное использование.
1. MEDIUMINT
2. SMALLINT
3. BIGINT
4. COMMENT
5. AUTO_INCREMENT
6. NULL
7. IDENTITY
8. TINYINT
9. DECIMAL
✅ Ответ:
Выберите один вариант из списка
1. DELETE FROM
my_schema.old_table WHERE NAME IS NULL;2. TRUNCATE
my_schema.old_table WHERE NAME IS NULL;3. DROP TABLE
my_schema.old_table;4. TRUNCATE
my_schema.old_table;5. DROP TABLE
my_schema.old_table WHERE NAME IS NULL;Ответы и объяснения:
Этот запрос удаляет строки из таблицы, удовлетворяющие условию "WHERE NAME IS NULL". Это не полная очистка таблицы.
2. TRUNCATE my_schema.old_table WHERE NAME IS NULL;
TRUNCATE TABLE не поддерживает использование WHERE для фильтрации строк, и данная комбинация вызовет ошибку.
3. DROP TABLE my_schema.old_table;
DROP TABLE удаляет всю таблицу, а не только её содержимое.
4. TRUNCATE my_schema.old_table;
Правильный вариант для очистки содержимого таблицы. Этот запрос удалит все строки из таблицы, но оставит саму таблицу в базе данных.
5. DROP TABLE my_schema.old_table WHERE NAME IS NULL;
DROP TABLE не поддерживает использование WHERE для фильтрации строк, и данная комбинация вызовет ошибку.
Итак, правильный запрос для очистки содержимого таблицы - TRUNCATE my_schema.old_table
#sql #Kaspersky #interview_problems
🔥62👍9❤4
📊🔍Разница между оконными и агрегатными функциями
Основное различие между оконными и агрегатными функциями заключается в том, КАК они обрабатывают данные:
Агрегатные функции сворачивают несколько строк в одну строку результата. Они выполняют операцию над набором строк, сгруппированных по определенным критериям, и возвращают единственное значение для каждой группы. Например, функции
Оконные функции, напротив, предоставляют результаты для каждой отдельной строки в наборе данных. Они выполняют агрегатную операцию над набором строк, но результат отображается как новое значение столбца в каждой строке. Оконные функции позволяют анализировать данные на уровне строк, не сворачивая их. Некоторые функции, такие как
Для наглядности, представьте себе задачу: вернуть название отдела и максимальную зарплату в каждом отделе.
Используем агрегатные функции:
Используем оконные функции:
Вопрос о разнице между оконными и агрегатными функциями часто встречается на собеседованиях. Уверены, теперь вы точно ответите на этот вопрос, если столкнетесь с ним 😎
#sql #interview_problems
Основное различие между оконными и агрегатными функциями заключается в том, КАК они обрабатывают данные:
Агрегатные функции сворачивают несколько строк в одну строку результата. Они выполняют операцию над набором строк, сгруппированных по определенным критериям, и возвращают единственное значение для каждой группы. Например, функции
SUM(), AVG(), MAX() и MIN() являются агрегатными функциями.Оконные функции, напротив, предоставляют результаты для каждой отдельной строки в наборе данных. Они выполняют агрегатную операцию над набором строк, но результат отображается как новое значение столбца в каждой строке. Оконные функции позволяют анализировать данные на уровне строк, не сворачивая их. Некоторые функции, такие как
SUM(), AVG(), MAX() и MIN(), могут использоваться как оконные функции.Для наглядности, представьте себе задачу: вернуть название отдела и максимальную зарплату в каждом отделе.
Используем агрегатные функции:
SELECT department,В этом случае мы получаем одну запись на каждый отдел (см. карточку 1).
MAX(salary) AS max_salary
FROM employee
GROUP BY department
Используем оконные функции:
SELECT employee_name,Здесь мы получим для каждой строки в исходных данных максимальную зарплату в соответствующем отделе (см. карточку 2).
salary,
department,
MAX(salary) OVER (PARTITION BY
department) AS max_salary
FROM employee
Вопрос о разнице между оконными и агрегатными функциями часто встречается на собеседованиях. Уверены, теперь вы точно ответите на этот вопрос, если столкнетесь с ним 😎
#sql #interview_problems
👍26🔥7❤4
📊 Работа с пропущенными данными - Восстановление и удаление данных
Пропущенные данные - распространенная проблема в анализе данных. Иногда значения отсутствуют, тогда они обозначаются в виде вопросительных знаков ❓, нулей 0️⃣ или пустых ячеек.
Например, в таблице нормализованных потерь есть пропущенное значение, обозначенное как
Давайте сначала создадим датафрейм для примера (см. в карточках под постом)
Как обработать пропущенные данные?
Каждая ситуация уникальна, и подход к ней должен быть индивидуальным. Давайте начнем с восстановления данных.
1 Способ: Восстановление данных
Самый лучший способ, конечно, восстановить данные, если у вас есть доступ к дополнительной информации. Этот способ обеспечивает наиболее точные результаты. Сделать это можно так:
2 Способ: Удаление данных
Но, к сожалению, не всегда данные можно восстановить из источника.
Тогда можно попробовать просто удалить строки или столбцы с пропущенными данными. Если вы анализируете цену и другие атрибуты вам не важны, то отсутствие информации о цене может повлиять на ваши выводы (например, при расчете среднего). В этом случае лучше удалить строки с отсутствующей ценой, чтобы не включать их в расчет.
Этот способ будет актуальным, если у вас много данных и небольшое количество пропусков.
Обработка пропущенных данных может быть сложной задачей, но правильный подход к ней позволяет извлечь более точную информацию из ваших данных.
Сегодня мы разобрали, как заполнять пропущенные данные и удалять их. А когда наберем 25 👍 , подробно расскажем вам про замену средним и случаи, когда стоит оставить пропуски 😉
#python #pandas
Пропущенные данные - распространенная проблема в анализе данных. Иногда значения отсутствуют, тогда они обозначаются в виде вопросительных знаков ❓, нулей 0️⃣ или пустых ячеек.
Например, в таблице нормализованных потерь есть пропущенное значение, обозначенное как
NaN.Давайте сначала создадим датафрейм для примера (см. в карточках под постом)
Как обработать пропущенные данные?
Каждая ситуация уникальна, и подход к ней должен быть индивидуальным. Давайте начнем с восстановления данных.
1 Способ: Восстановление данных
Самый лучший способ, конечно, восстановить данные, если у вас есть доступ к дополнительной информации. Этот способ обеспечивает наиболее точные результаты. Сделать это можно так:
# Заполнение пропущенных значений на основе дополнительной информацииРезультат смотрите в карточках
df.loc[df['Модель'] == 'Outback', 'Цена'] = 17625
df.loc[df['Модель'] == 'Civic', 'Потери'] = 150
df.loc[df['Модель'] == 'Mustang', 'Тип топлива'] = 'Дизель'
2 Способ: Удаление данных
Но, к сожалению, не всегда данные можно восстановить из источника.
Тогда можно попробовать просто удалить строки или столбцы с пропущенными данными. Если вы анализируете цену и другие атрибуты вам не важны, то отсутствие информации о цене может повлиять на ваши выводы (например, при расчете среднего). В этом случае лучше удалить строки с отсутствующей ценой, чтобы не включать их в расчет.
Этот способ будет актуальным, если у вас много данных и небольшое количество пропусков.
# Удаление строк с пропущенными значениями в столбце "Цена"Результат смотрите в карточках
df = df.dropna(subset=['Цена'])
Обработка пропущенных данных может быть сложной задачей, но правильный подход к ней позволяет извлечь более точную информацию из ваших данных.
Сегодня мы разобрали, как заполнять пропущенные данные и удалять их. А когда наберем 25 👍 , подробно расскажем вам про замену средним и случаи, когда стоит оставить пропуски 😉
#python #pandas
👍25🔥3😁2
А мы продолжаем разбор актуального теста от компании Kaspersky 🚀😊
Когда этот пост наберет 30 🔥огоньков, подкинем еще вопросов😉
Вопрос 1
* В таблице T1 больше строк, чем в T2.
* В таблице Т2 есть все значения из T1, а в Т1 не все из T2.
Выберите все варианты запросов, в результате которых будет выведено все содержимое таблицы T1 и количество строк в результате будет равняться количеству строк исходной T1.
1. SELECT * FROM T2 LEFT JOIN T1 ON (T1.key = T2.key);
2. SELECT * FROM T2 JOIN T1 ON (T1.key = T2.key);
3. SELECT * FROM T1 JOIN T2 ON (T1.key = T2.key);
4. SELECT * FROM T1;
5. SELECT * FROM T1 RIGHT JOIN T2 ON (T1.key = T2.key);
6. SELECT Т1.* FROM T2 JOIN T1 ON (T1.key = T2.key);
7. SELECT * FROM T1 LEFT JOIN T2 ON (T1.key = T2.key);
Ответы и объяснения:
1. SELECT * FROM T2 LEFT JOIN T1 ON (T1.key = T2.key);
Этот запрос не подходит, так как он начинает соединение с T2 и включает все строки из T2 и только совпадающие строки из T1. Он не возвращает все строки из T1.
2. SELECT * FROM T1 JOIN T2 ON (T1.key = T2.key);
Этот запрос не подходит, так как INNER JOIN выбирает только совпадающие строки из T1 и T2, но не возвращает все строки из T1.
3. SELECT * FROM T1 JOIN T2 ON (T1.key = T2.key);
Аналогично предыдущему.
✅ 4. SELECT * FROM T1;
Этот запрос подходит, так как он выбирает все строки из T1 без соединения с T2. Это то, что нам нужно, чтобы получить все содержимое таблицы T1.
5. SELECT * FROM T1 RIGHT JOIN T2 ON (T1.key = T2.key);
Этот запрос также не подходит. Он использует RIGHT JOIN, чтобы включить все строки из T2 и только совпадающие строки из T1. Остальные строки будут заполнены значениями NULL.
6. SELECT Т1.* FROM T2 JOIN T1 ON (T1.key = T2.key);
Не подходит аналогично 2 и 3.
✅ 7. SELECT * FROM T1 LEFT JOIN T2 ON (T1.key = T2.key);
Этот запрос подходит, так как это LEFT JOIN, который включает все строки из T1 и только совпадающие строки из T2.
Вопрос 2: В результате каких запросов выведутся строки, заканчивающиеся на "lab"?
1. SELECT Name FROM T1 WHERE RIGHT(Name, 3) = 'lab'
2. SELECT Name FROM T1 WHERE Name LIKE '%lab%'
3. SELECT Name FROM T1 WHERE Name LIKE '%lab'
4. SELECT Name FROM T1 WHERE RIGHT(Name, 5) LIKE '%lab%'
Ответы и объяснения:
✅ 1. SELECT Name FROM T1 WHERE RIGHT(Name, 3) = 'lab'
Подходит. Этот запрос выберет строки, в которых последние три символа в столбце `Name` равны "lab". Это подходящий вариант, если все имена завершаются на "lab". Например, "testlab" будет выбрано, но "laboratory" - нет.
2. SELECT Name FROM T1 WHERE Name LIKE '%lab%'
Не подходит. Этот запрос выберет строки, в которых в столбце `Name` есть подстрока "lab" в любой части строки.
✅ 3. SELECT Name FROM T1 WHERE Name LIKE '%lab'
Подходит. Этот запрос выберет строки, в которых столбец `Name` оканчивается на "lab". Это подходящий вариант, если вам нужны все строки, где имя заканчивается на "lab".
4. SELECT Name FROM T1 WHERE RIGHT(Name, 5) LIKE '%lab%'
Не подходит. Этот запрос выберет строки, в которых пять последних символов в столбце `Name` содержат подстроку "lab".
Вопрос 3: Расположите конструкции запроса на выдачу прав пользователю в правильном порядке
1. ON
2. GRANT
3. TO
Правильный порядок:
1. GRANT
2. ON
3. TO
Оператор GRANT в SQL используется для выдачи прав доступа к объектам базы данных, таким как таблицы, представления, процедуры и другие. Он предоставляет возможность управления безопасностью данных, определяя, какие действия могут выполнять определенные пользователи или роли в отношении этих объектов.
Пример использования оператора GRANT:
-- Выдача прав на чтение таблицы "employees" пользователю "user1"
GRANT SELECT ON employees TO user1;
Удачи на собеседованиях!
Не забудь нажать огонек 🔥, чтобы мы запостили продолжение.
#sql #Kaspersky #interview_problems
Когда этот пост наберет 30 🔥огоньков, подкинем еще вопросов😉
Вопрос 1
* В таблице T1 больше строк, чем в T2.
* В таблице Т2 есть все значения из T1, а в Т1 не все из T2.
Выберите все варианты запросов, в результате которых будет выведено все содержимое таблицы T1 и количество строк в результате будет равняться количеству строк исходной T1.
1. SELECT * FROM T2 LEFT JOIN T1 ON (T1.key = T2.key);
2. SELECT * FROM T2 JOIN T1 ON (T1.key = T2.key);
3. SELECT * FROM T1 JOIN T2 ON (T1.key = T2.key);
4. SELECT * FROM T1;
5. SELECT * FROM T1 RIGHT JOIN T2 ON (T1.key = T2.key);
6. SELECT Т1.* FROM T2 JOIN T1 ON (T1.key = T2.key);
7. SELECT * FROM T1 LEFT JOIN T2 ON (T1.key = T2.key);
Ответы и объяснения:
Этот запрос не подходит, так как он начинает соединение с T2 и включает все строки из T2 и только совпадающие строки из T1. Он не возвращает все строки из T1.
2. SELECT * FROM T1 JOIN T2 ON (T1.key = T2.key);
Этот запрос не подходит, так как INNER JOIN выбирает только совпадающие строки из T1 и T2, но не возвращает все строки из T1.
3. SELECT * FROM T1 JOIN T2 ON (T1.key = T2.key);
Аналогично предыдущему.
✅ 4. SELECT * FROM T1;
Этот запрос подходит, так как он выбирает все строки из T1 без соединения с T2. Это то, что нам нужно, чтобы получить все содержимое таблицы T1.
5. SELECT * FROM T1 RIGHT JOIN T2 ON (T1.key = T2.key);
Этот запрос также не подходит. Он использует RIGHT JOIN, чтобы включить все строки из T2 и только совпадающие строки из T1. Остальные строки будут заполнены значениями NULL.
6. SELECT Т1.* FROM T2 JOIN T1 ON (T1.key = T2.key);
Не подходит аналогично 2 и 3.
✅ 7. SELECT * FROM T1 LEFT JOIN T2 ON (T1.key = T2.key);
Этот запрос подходит, так как это LEFT JOIN, который включает все строки из T1 и только совпадающие строки из T2.
Вопрос 2: В результате каких запросов выведутся строки, заканчивающиеся на "lab"?
1. SELECT Name FROM T1 WHERE RIGHT(Name, 3) = 'lab'
2. SELECT Name FROM T1 WHERE Name LIKE '%lab%'
3. SELECT Name FROM T1 WHERE Name LIKE '%lab'
4. SELECT Name FROM T1 WHERE RIGHT(Name, 5) LIKE '%lab%'
Ответы и объяснения:
Подходит. Этот запрос выберет строки, в которых последние три символа в столбце `Name` равны "lab". Это подходящий вариант, если все имена завершаются на "lab". Например, "testlab" будет выбрано, но "laboratory" - нет.
2. SELECT Name FROM T1 WHERE Name LIKE '%lab%'
Не подходит. Этот запрос выберет строки, в которых в столбце `Name` есть подстрока "lab" в любой части строки.
✅ 3. SELECT Name FROM T1 WHERE Name LIKE '%lab'
Подходит. Этот запрос выберет строки, в которых столбец `Name` оканчивается на "lab". Это подходящий вариант, если вам нужны все строки, где имя заканчивается на "lab".
4. SELECT Name FROM T1 WHERE RIGHT(Name, 5) LIKE '%lab%'
Не подходит. Этот запрос выберет строки, в которых пять последних символов в столбце `Name` содержат подстроку "lab".
Вопрос 3: Расположите конструкции запроса на выдачу прав пользователю в правильном порядке
1. ON
2. GRANT
3. TO
Правильный порядок:
2. ON
3. TO
Оператор GRANT в SQL используется для выдачи прав доступа к объектам базы данных, таким как таблицы, представления, процедуры и другие. Он предоставляет возможность управления безопасностью данных, определяя, какие действия могут выполнять определенные пользователи или роли в отношении этих объектов.
Пример использования оператора GRANT:
-- Выдача прав на чтение таблицы "employees" пользователю "user1"
GRANT SELECT ON employees TO user1;
Удачи на собеседованиях!
Не забудь нажать огонек 🔥, чтобы мы запостили продолжение.
#sql #Kaspersky #interview_problems
🔥56😱2
🔥 Бесплатный курс по Pandas!
Мы уже написали множество постов для тех, кто работает с Pandas, и уже очевидно, что его польза неоспорима.
Но все ли вы владеете им свободно? Pandas необходимый инструмент для аналитика данных, и мы хотим, чтобы вы были экспертом в нем. Потому наша команда недавно запустила бесплатный онлайн-курс, где на практических примерах и задачах вы прокачаете навыки и знания по работе с данными с помощью библиотеки Pandas в Python.
Что вас ждет на курсе:
◾️ начнете работать с Pandas на примере реальных аналитических задач (проведете многомерный ABC-анализ, XYZ-анализ, рассчитаете динамику продаж и т.д.)
◾️ изучите все от самых азов до продвинутых функций (например, сложная агрегация, оконные функции и т.д.)
◾️ сделаете собственный проект — ваш итоговый кейс! (реальный кейс автоматизации обработки финансовой отчетности от крупной региональной аптечной сети и добавите его к себе в портфолио)
Если вы только начинаете путь в анализе данных и хотите научиться использовать современные инструменты, мы поможем сделать первый шаг 😉
👉🏻 Зарегистрироваться на курс: ссылка
Мы уже написали множество постов для тех, кто работает с Pandas, и уже очевидно, что его польза неоспорима.
Но все ли вы владеете им свободно? Pandas необходимый инструмент для аналитика данных, и мы хотим, чтобы вы были экспертом в нем. Потому наша команда недавно запустила бесплатный онлайн-курс, где на практических примерах и задачах вы прокачаете навыки и знания по работе с данными с помощью библиотеки Pandas в Python.
Что вас ждет на курсе:
◾️ начнете работать с Pandas на примере реальных аналитических задач (проведете многомерный ABC-анализ, XYZ-анализ, рассчитаете динамику продаж и т.д.)
◾️ изучите все от самых азов до продвинутых функций (например, сложная агрегация, оконные функции и т.д.)
◾️ сделаете собственный проект — ваш итоговый кейс! (реальный кейс автоматизации обработки финансовой отчетности от крупной региональной аптечной сети и добавите его к себе в портфолио)
Если вы только начинаете путь в анализе данных и хотите научиться использовать современные инструменты, мы поможем сделать первый шаг 😉
👉🏻 Зарегистрироваться на курс: ссылка
🔥10👍2❤1🎉1
🎩🐍 Одиночка в Python: Магия Singleton-паттерна✨🪄
Паттерн Singleton - это настоящий гений в мире проектирования классов. Он позволяет нам создать только один экземпляр класса и обеспечить глобальную точку доступа к этому экземпляру. Имея такую возможность, мы можем контролировать доступ к общему ресурсу и гарантировать, что всегда используется один и тот же объект.
Один из способов реализации Singleton в Python - использовать магический метод
Давайте посмотрим на пример:
В этом примере мы создали класс Singleton и объявили переменную
Метод
🤔 Для чего мы используем паттерн Singleton в нашей работе:
- чтобы гарантировать, что у нас есть только один экземпляр класса для доступа к общим ресурсам, таким как база данных, файловая система или настройки приложения,
- чтобы обеспечивать согласованное взаимодействие разных частей нашей системы, используя один единственный объект,
- чтобы управлять количеством создаваемых экземпляров класса и оптимизировать использование наших ресурсов.
❗️ Но будьте осторожны!
Иногда применение Singleton может быть нецелесообразным или даже привести к проблемам. Например Singleton может усложнить расширение функциональности класса, так как он предоставляет только одну точку доступа к объекту.
Подобные тонкости, лайфхаки и фишки мы более подробно разбираем у нас в Симуляторе "Аналитик данных" 🔥
🕵️ А если хотите посмотреть, как устроена наша флагманская обучающая программа изнутри и понять, как вы можете бустануть свою карьеру в аналитике на реальных бизнес-кейсах, то записывайтесь на индивидуальную бесплатную экскурсию!
#python #ООП
Паттерн Singleton - это настоящий гений в мире проектирования классов. Он позволяет нам создать только один экземпляр класса и обеспечить глобальную точку доступа к этому экземпляру. Имея такую возможность, мы можем контролировать доступ к общему ресурсу и гарантировать, что всегда используется один и тот же объект.
Один из способов реализации Singleton в Python - использовать магический метод
__new__. Метод __new__ вызывается при создании нового экземпляра класса и отвечает за его создание. Давайте посмотрим на пример:
class Singleton:
instance = None
def __new__(cls, *args, **kwargs):
if not cls.instance:
cls.instance = super().__new__(cls, *args, **kwargs)
return cls.instance
singleton1 = Singleton()
singleton2 = Singleton()
print(singleton1 is singleton2) # True
В этом примере мы создали класс Singleton и объявили переменную
instance, которая будет хранить единственный экземпляр класса.Метод
__new__ проверяет, существует ли экземпляр класса. Если нет, то он создает новый экземпляр и сохраняет его в переменную instance. При последующих вызовах Singleton() будет возвращаться тот же самый экземпляр. Таким образом, мы гарантируем, что всегда используется только один экземпляр класса.🤔 Для чего мы используем паттерн Singleton в нашей работе:
- чтобы гарантировать, что у нас есть только один экземпляр класса для доступа к общим ресурсам, таким как база данных, файловая система или настройки приложения,
- чтобы обеспечивать согласованное взаимодействие разных частей нашей системы, используя один единственный объект,
- чтобы управлять количеством создаваемых экземпляров класса и оптимизировать использование наших ресурсов.
❗️ Но будьте осторожны!
Иногда применение Singleton может быть нецелесообразным или даже привести к проблемам. Например Singleton может усложнить расширение функциональности класса, так как он предоставляет только одну точку доступа к объекту.
Подобные тонкости, лайфхаки и фишки мы более подробно разбираем у нас в Симуляторе "Аналитик данных" 🔥
🕵️ А если хотите посмотреть, как устроена наша флагманская обучающая программа изнутри и понять, как вы можете бустануть свою карьеру в аналитике на реальных бизнес-кейсах, то записывайтесь на индивидуальную бесплатную экскурсию!
#python #ООП
👍11❤4🔥2👎1
🧐 Хитрые вопросы c собеседований по SQL
Недавно мы проводили опрос среди наших читателей и выяснили, что у многих есть пробелы, казалось бы в решении простых задач по SQL. Знания есть, а навык применения их в контексте бизнеса — отсутствует. Поэтому от такого на интервью их бросает в дрожь, вводит в ступор и, как итог, — собеседование провалено.
Знакомое ощущение?
Запросы на такие каверзные вопросы растут, информации в свободном доступе нет, поэтому наши преподаватели решили поделиться с вами материалом по хитрым вопросам с собеседований по SQL!
🔗 Скачать материал: ссылка
Они помогут junior-аналитикам успешно подготовиться к собеседованиям, а кому то – расширить горизонт своих знаний.
Вот почему этот материал станет вашим незаменимым помощником:
◾️ Будете готовы к самым хитрым и сложным вопросам по SQL. Собрали максимально боевые вопросы — вы не встретите здесь воды и общих формулировок, только максимально “мясной” контент.
◾️ Объясняем все вопросы в контексте решения бизнес-задач с примерами ответов и пояснениями к ним.
◾️ Узнаете не просто объяснение всех вопросов, но и какую область знаний они проверяют, и найдете свои слабые места.
◾️ Доступность и удобство.
Команда Simulative настоятельно рекомендует вам скачать этот материал! И скоро у нас будет для вас новая полезная подборка 😉
🔗 Скачать материал: ссылка
#sql
Недавно мы проводили опрос среди наших читателей и выяснили, что у многих есть пробелы, казалось бы в решении простых задач по SQL. Знания есть, а навык применения их в контексте бизнеса — отсутствует. Поэтому от такого на интервью их бросает в дрожь, вводит в ступор и, как итог, — собеседование провалено.
Знакомое ощущение?
Запросы на такие каверзные вопросы растут, информации в свободном доступе нет, поэтому наши преподаватели решили поделиться с вами материалом по хитрым вопросам с собеседований по SQL!
🔗 Скачать материал: ссылка
Они помогут junior-аналитикам успешно подготовиться к собеседованиям, а кому то – расширить горизонт своих знаний.
Вот почему этот материал станет вашим незаменимым помощником:
◾️ Будете готовы к самым хитрым и сложным вопросам по SQL. Собрали максимально боевые вопросы — вы не встретите здесь воды и общих формулировок, только максимально “мясной” контент.
◾️ Объясняем все вопросы в контексте решения бизнес-задач с примерами ответов и пояснениями к ним.
◾️ Узнаете не просто объяснение всех вопросов, но и какую область знаний они проверяют, и найдете свои слабые места.
◾️ Доступность и удобство.
Команда Simulative настоятельно рекомендует вам скачать этот материал! И скоро у нас будет для вас новая полезная подборка 😉
🔗 Скачать материал: ссылка
#sql
❤10🔥2🎉2👍1
🔍 Ошибка в использовании алиасов в SQL-запросе
При написании SQL-запросов, мы часто руководствуемся не правилами синтаксиса SQL, а правилом «как думается, так и пишется» 😄
Например, мы хотим отобрать строки, где разница между старой и новой ценой (diff) больше
❌ Давайте посмотрим на наш «интуитивный» запрос:
Ошибка здесь заключается в том, что мы используем алиас столбца
Фильтр
✅ Правильный способ - использовать вычислимое выражение внутри
Теперь запрос отработает корректно!
❗️Имейте в виду, что внутри оператора
🤔 Какие ошибки в SQL вы совершали? Поделитесь своими вопросами и опытом в комментариях! 👇
#sql
При написании SQL-запросов, мы часто руководствуемся не правилами синтаксиса SQL, а правилом «как думается, так и пишется» 😄
Например, мы хотим отобрать строки, где разница между старой и новой ценой (diff) больше
100. Это звучит логично. Но в SQL не все так просто, и многие попадают в эту ловушку.❌ Давайте посмотрим на наш «интуитивный» запрос:
SELECT old_price - new_price AS diff
FROM goods
WHERE diff > 100
Ошибка здесь заключается в том, что мы используем алиас столбца
diff в операторе WHERE. Запрос кажется логичным, но порядок выполнения операторов в SQL-запросе не позволяет этого сделать. Фильтр
WHERE выполняется до оператора SELECT (и AS), поэтому столбец diff фактически не существует на момент выполнения WHERE. Это вызывает ошибку: "ERROR: column 'diff' does not exist."✅ Правильный способ - использовать вычислимое выражение внутри
WHERE:SELECT old_price - new_price AS diff
FROM goods
WHERE old_price - new_price > 100
Теперь запрос отработает корректно!
❗️Имейте в виду, что внутри оператора
ORDER BY, например, мы можем использовать алиасы, так как этот оператор выполняется после SELECT.🤔 Какие ошибки в SQL вы совершали? Поделитесь своими вопросами и опытом в комментариях! 👇
#sql
👍15🔥6❤1👎1
Разбор тестового задания на junior-аналитика - СБЕР, Ozon или Пятерочка? 🔥
Друзья, скоро мы планируем проводить большой вебинар, где будем разбирать очередное тестовое задание на позицию junior-аналитика. Но мы никак не можем выбрать - какую компанию разбирать, внутри нашей команды развязались настоящие баталии 😁
Помогите нам выбрать - проголосуйте за вариант, который вам больше всего нравится. Ваш голос будет решающим!
Друзья, скоро мы планируем проводить большой вебинар, где будем разбирать очередное тестовое задание на позицию junior-аналитика. Но мы никак не можем выбрать - какую компанию разбирать, внутри нашей команды развязались настоящие баталии 😁
Помогите нам выбрать - проголосуйте за вариант, который вам больше всего нравится. Ваш голос будет решающим!
👍10🔥4❤1
🔥 Тестовое какой компании будем разбирать на вебинаре?
Anonymous Poll
43%
СБЕР
46%
Ozon
11%
Пятерочка
🔥6👍2❤1
📊 Работа с пропущенными данными. Часть 2
А мы продолжаем обсуждение методов работы с пропущенными данными. Снова работаем с таблицей об автомобилях (см. под постом).
Замена пропущенных значений средним
Итак, один из стандартных методов - замена пропущенных значений средним значением по переменной.
Заменять данные часто лучше, чем удалять, так как информация не теряется. Но вы должны делать это осознанно и помнить, что результат будет менее точным, ведь вы заменяете недостающие данные на предполагаемые значения.
Но что, если эти значения нельзя усреднить, как в случае с категориальными переменными?
Для такой переменной, как тип топлива, не существует среднего типа топлива, поскольку значения переменных не являются числами. В этом случае можно попробовать использовать наиболее часто встречающееся значение (моду).
Результат замены смотрите под постом 👇
Самое часто встречающееся значение -
Оставить пропуски без изменений
В некоторых случаях оставление пропущенных данных без изменений тоже будет полезным.
🔹 Если пропущенные значения возникли случайно и не имеют системного характера, их можно оставить, если они не влияют на анализ.
🔹 Если данные собраны из разных источников, пропуски могут отражать различия в доступности информации. Замена или удаление может исказить реальное положение вещей.
🔹 Оставление пропущенных данных может служить сигналом о недостоверности данных, что может стимулировать дополнительный анализ.
🔹 Замена пропущенных значений может исказить структуру данных. Например, замена средним значением может создать ложное представление о распределении.
🔹 В некоторых случаях пропущенные значения важны для контекста данных, особенно в анализе текста или текстовых данных.
🔹 Замена пропущенных значений может потребовать дополнительных вычислений и ресурсов, а оставление данных без изменений может быть более эффективным.
Но при оставлении пропущенных данных важно понимать, как это влияет на анализ, и иногда требуется дополнительное исследование влияния пропусков на результаты анализа.
Конечно, каждая ситуация уникальна, и к ней следует относиться по-разному. Тем не менее, мы рассмотрели самые типичные варианты решения проблемы пропущенных данных, пользуйтесь!
_ _ _ _ _ _ _ _
А если хотите полностью прокачать свои навыки работы в Pandas, то присоединяйтесь к нашему бесплатному курсу!
Это часть нашей полноценной обучающей программы — Симулятора "Аналитик данных" — мы собрали здесь самое лучшее для вашего обучения:
🔸 задачи из реальной практики (провести многомерный ABC-анализ, XYZ-анализ, рассчитать динамику продаж и т.д.)
🔸 самые азы и подвинутые функции (сложная агрегация, оконные функции и т.д.)
🔸 итоговый проект (сделаете ваш первый кейс и добавите к себе в портфолио!)
Вы готовы бустануть свои знания и навыки в работе с Pandas? 😉
🔗 Ждем вас на бесплатном курсе — ссылка
А мы продолжаем обсуждение методов работы с пропущенными данными. Снова работаем с таблицей об автомобилях (см. под постом).
Замена пропущенных значений средним
Итак, один из стандартных методов - замена пропущенных значений средним значением по переменной.
Заменять данные часто лучше, чем удалять, так как информация не теряется. Но вы должны делать это осознанно и помнить, что результат будет менее точным, ведь вы заменяете недостающие данные на предполагаемые значения.
# Замена NaN средними значениями
df['Цена'].fillna(df['Цена'].mean(),
inplace=True)
df['Год'].fillna(
int(df['Год'].mean()),
inplace=True)
Но что, если эти значения нельзя усреднить, как в случае с категориальными переменными?
Для такой переменной, как тип топлива, не существует среднего типа топлива, поскольку значения переменных не являются числами. В этом случае можно попробовать использовать наиболее часто встречающееся значение (моду).
# Замена пропущенных значений модой
mode=df['Топливо'].mode()[0]
df['Топливо'].fillna(mode,
inplace=True)
Результат замены смотрите под постом 👇
Самое часто встречающееся значение -
Бензин, на него и заменилось пропущенное значение.Оставить пропуски без изменений
В некоторых случаях оставление пропущенных данных без изменений тоже будет полезным.
🔹 Если пропущенные значения возникли случайно и не имеют системного характера, их можно оставить, если они не влияют на анализ.
🔹 Если данные собраны из разных источников, пропуски могут отражать различия в доступности информации. Замена или удаление может исказить реальное положение вещей.
🔹 Оставление пропущенных данных может служить сигналом о недостоверности данных, что может стимулировать дополнительный анализ.
🔹 Замена пропущенных значений может исказить структуру данных. Например, замена средним значением может создать ложное представление о распределении.
🔹 В некоторых случаях пропущенные значения важны для контекста данных, особенно в анализе текста или текстовых данных.
🔹 Замена пропущенных значений может потребовать дополнительных вычислений и ресурсов, а оставление данных без изменений может быть более эффективным.
Но при оставлении пропущенных данных важно понимать, как это влияет на анализ, и иногда требуется дополнительное исследование влияния пропусков на результаты анализа.
Конечно, каждая ситуация уникальна, и к ней следует относиться по-разному. Тем не менее, мы рассмотрели самые типичные варианты решения проблемы пропущенных данных, пользуйтесь!
_ _ _ _ _ _ _ _
А если хотите полностью прокачать свои навыки работы в Pandas, то присоединяйтесь к нашему бесплатному курсу!
Это часть нашей полноценной обучающей программы — Симулятора "Аналитик данных" — мы собрали здесь самое лучшее для вашего обучения:
🔸 задачи из реальной практики (провести многомерный ABC-анализ, XYZ-анализ, рассчитать динамику продаж и т.д.)
🔸 самые азы и подвинутые функции (сложная агрегация, оконные функции и т.д.)
🔸 итоговый проект (сделаете ваш первый кейс и добавите к себе в портфолио!)
Вы готовы бустануть свои знания и навыки в работе с Pandas? 😉
🔗 Ждем вас на бесплатном курсе — ссылка
👍10🔥6