📘 Сегодня, 20 февраля 2024 года, язык программирования Python отмечает свой 34-й день рождения
Python был создан голландским программистом Гвидо ван Россумом в конце 1980-х годов. Работа над языком началась в декабре 1989 года, а первый релиз состоялся 20 февраля 1991 года.
Интересные факты:
🌠Python используется в таких компаниях, как Google, NASA, Instagram, Spotify и Netflix.
📟В 2020 году Гвидо ван Россум вышел из состава руководящего совета Python, но язык продолжает развиваться благодаря активному сообществу.
🔮Python 2 официально завершил свою поддержку в 2020 году, и теперь все разработчики перешли на Python 3.
🏠 Оконные функции в SQL — это инструмент для выполнения вычислений над набором строк, связанных с текущей строкой
Они позволяют выполнять сложные аналитические запросы без необходимости использования подзапросов или временных таблиц.
🔘RANK() — присваивает ранг каждой строке в разделе на основе указанного столбца или значения, при этом могут быть пропуски в рангах, если есть одинаковые значения.
🔘DENSE_RANK() — присваивает ранг каждой строке, не пропуская значения ранга, даже если есть одинаковые значения.
🔘ROW_NUMBER() — присваивает уникальное целое число каждой строке в разделе на основе порядка строк, без пропусков.
🔘LEAD() — извлекает значение из следующей строки в том же разделе, основываясь на указанном столбце или выражении.
🔘LAG() — извлекает значение из предыдущей строки в том же разделе, основываясь на указанном столбце или выражении.
🔘NTH_VALUE() — извлекает n-ное значение в разделе по указанному порядку, при этом может возвращать NULL, если n больше, чем количество строк.
🔘FIRST_VALUE() — извлекает первое значение в разделе на основании указанного порядка.
🟠 Процесс доставки программного обеспечения в продакшн
Процесс доставки кода в продакшн может варьироваться в зависимости от компании и использованных инструментов, но в большинстве случаев он включает следующие шаги:
Шаг 🌸: Сбор требований Владелец продукта формулирует требования и создает пользовательские истории, которые отражают потребности клиентов и бизнес-цели.
Шаг 🌸: Приоритизация и планирование Команда разработчиков определяет приоритеты для пользовательских историй и планирует спринты, в течение которых будут реализованы эти требования.
Шаг 🌸: Коммит кода Разработчики выполняют коммиты кода в систему контроля версий (например, Git), что позволяет отслеживать изменения и сотрудничать более эффективно.
Шаг 🌸: Автоматизация сборки и тестирования Сервер непрерывной интеграции автоматически собирает код и запускает тесты. Проводятся проверки покрытия кода и анализ качества, чтобы убедиться, что все изменения соответствуют стандартам.
Шаг 🌸: Сохранение артефактов Если сборка успешна, результаты (артефакты) сохраняются в репозитории артефактов. После этого сборка разворачивается в среде разработчиков для дальнейшего тестирования.
Шаг 🌸: Изолированное тестирование Функции тестируются независимо в нескольких изолированных средах, чтобы гарантировать, что они не влияют на другие части системы.
Шаг 🌸: Тестирование качества Команда контроля качества (QA) проводит тестирование функций в специализированных средах, используя различные виды тестирования (функциональное, регрессионное, нагрузочное и т.д.).
Шаг 🌸: Тестирование на этапе пользовательского принятия После успешного прохождения всех проверок, сборка разворачивается в среду для тестирования пользовательского принятия (UAT), где конечные пользователи могут валидировать функциональность перед релизом.
Шаг 🌸: Развертывание в продакшн Кандидаты на релиз, которые успешно прошли все тесты, могут быть развернуты в продакшне в соответствии с графиком выпуска. Для управления рисками применяются фиче-флаги и методы постепенного развертывания.
Шаг 🌸: Мониторинг и управление инцидентами Команда по надежности сайта (SRE) мониторит продакшен для выявления возможных проблем и сообщает о них. Команды приоритизируют и устраняют неполадки в соответствии с установленными политиками.
🤔Если вы работаете с большими наборами данных, формат CSV может оказаться не лучшим вариантом
Формат CSV отлично подходит для обработки небольших наборов данных, однако, при работе с большими объемами информация может стать проблемой.
✅ Здесь в игру вступают бинарные форматы. Эти файлы состоят из нулей и единиц и не могут быть прочитаны человеком, но они обеспечивают высокую эффективность для программ.
Преимущество бинарных форматов в том, что они занимают меньше места и обеспечивают более высокую скорость обработки по сравнению с CSV.
✅ Одним из известных бинарных форматов является Parquet. Этот формат значительно эффективнее использует память по сравнению с CSV.
Например, если запись данных в CSV-файл может занять почти 2 минуты, то процесс записи в Parquet может завершиться всего за 8 секунд.
✅ Используйте Python, чтобы превратить неструктурированные данные в полезную информацию
Вот основные функции, которые вам нужно знать:
🔢𝗱𝗿𝗼𝗽𝗻𝗮(): очистите свой набор данных, удалив пропущенные значения. Используйте df.dropna(), чтобы исключить строки или столбцы с NaN и сохранить чистоту данных.
🔢 𝗳𝗶𝗹𝗹𝗻𝗮(): замените пропущенные значения указанным значением или методом. С помощью df.fillna(value) вы поддерживаете целостность данных, не теряя ценную информацию.
🔢 𝗱𝗿𝗼𝗽_𝗱𝘂𝗽𝗹𝗶𝗰𝗮𝘁𝗲𝘀(): убедитесь, что ваши данные уникальны и точны. Используйте df.drop_duplicates(), чтобы удалить дубликаты строк и избежать искажения анализа из-за агрегации избыточных данных.
🔢 𝗿𝗲𝗽𝗹𝗮𝗰𝗲(): замените определенные значения во всем наборе данных. Функция df.replace(to_replace, value) позволяет эффективно исправлять ошибки и стандартизировать данные.
🔢 𝗮𝘀𝘁𝘆𝗽𝗲(): преобразуйте типы данных для обеспечения согласованности и точности. Используйте функцию приведения df['column'].astype(dtype), чтобы убедиться, что столбцы данных находятся в правильном формате, необходимом для анализа.
🔢 𝗮𝗽𝗽𝗹𝘆(): применяйте пользовательские функции к своим данным. df['column'].apply(func) позволяет выполнять сложные преобразования и вычисления. Работает как со стандартными, так и с лямбда-функциями.
🔢 𝘀𝘁𝗿.𝘀𝘁𝗿𝗶𝗽(): Очищает текстовые данные, удаляя начальные и конечные пробелы. Использование df['column'].str.strip() помогает избежать труднообнаружимых ошибок при сравнении строк.
🔢 𝘃𝗮𝗹𝘂𝗲_𝗰𝗼𝘂𝗻𝘁𝘀(): Получает краткую сводку частоты значений в столбце. df['column'].value_counts() помогает понять распределение ваших данных.
🔢 𝗽𝗱.𝘁𝗼_𝗱𝗮𝘁𝗲𝘁𝗶𝗺𝗲(): преобразует строки в объекты datetime для точной обработки даты и времени. Для анализа временных рядов использование pd.to_datetime(df['column']) часто будет одним из ваших первых шагов в подготовке данных.
🔢🔢 𝗴𝗿𝗼𝘂𝗽𝗯𝘆(): агрегирует данные на основе определенных столбцов. Используйте df.groupby('column') для выполнения таких операций, как сумма, среднее значение или подсчет сгруппированных данных.
⚠️Чтобы использовать указанные функции для обработки и анализа данных в Python, вам нужна библиотека Pandas.
Оба оператора UNION и UNION ALL используются для объединения результатов двух или более запросов SELECT, но они по-разному обрабатывают дублирующиеся записи.
😃UNION (удаляет дубликаты) Оператор UNION автоматически объединяет наборы результатов и удаляет дубликаты строк. Это приводит к тому, что в итоговом наборе данных остаются только уникальные записи. Он выполняет неявную операцию DISTINCT, что может повлиять на производительность, особенно при большом объеме данных.
SELECT employee_id, department_id FROM employees UNION SELECT employee_id, department_id FROM managers;
😄UNION ALL (сохраняет дубликаты) В отличие от UNION, оператор UNION ALL объединяет наборы результатов, не удаляя дубликаты. Это делает его более быстрым, так как не нужно выполнять операцию по исключению дубликатов.
SELECT employee_id, department_id FROM employees UNION ALL SELECT employee_id, department_id FROM managers;
Основные отличия: 😫 UNION удаляет дубликаты, что может привести к снижению производительности, особенно при работе с большими объемами данных. 😫 UNION ALL сохраняет все записи, включая дубликаты, что делает его более эффективным и быстрым вариантом для объединения данных.
Рефакторинг в Python — это процесс улучшения структуры вашего кода без изменения его функциональности. Это помогает сделать код более читабельным, поддерживаемым и оптимизированным.
Вот несколько общих советов и техник для рефакторинга:
🌸Избегайте дублирования кода:
Если вы заметили, что один и тот же код повторяется в разных частях программы, подумайте о том, чтобы вынести его в отдельную функцию или класс.
🌸Используйте понятные имена переменных и функций:
Имена должны быть описательными, чтобы другие программисты могли быстро понять, что делает ваш код.
🌸Разделяйте большие функции:
Если функция становится слишком большой, попробуйте разбить ее на несколько меньших, каждая из которых выполняет одну конкретную задачу.
🌸Убирайте "магические числа":
Заменяйте числа, которые используются в коде, на константы с понятными именами. Это делает код более читабельным.
🌸Используйте библиотеки стандартной библиотеки:
Python имеет мощную стандартную библиотеку, которая может упростить ваш код. Старайтесь использовать уже готовые решения вместо написания собственного кода.
🌸Применяйте тестирование:
Реализуйте модульные тесты, чтобы убедиться, что при рефакторинге функциональность не была нарушена. Это позволит вам безопаснее вносить изменения.
🌸Следите за стилем кода:
Соблюдайте PEP 8 — стиль кодирования для Python, чтобы ваш код был более согласованным и структурированным.