Channel: Аналитика данных / Data Study
Эффективная загрузка данных в PostgreSQL с помощью Python
В этот раз на курсе ученица столкнулась с задачей загрузки своего датасета в базу данных PostgreSQL. Все бы ничего, это типичная задача, через которую проходят ученики, но здесь повлиял объем исходных данных. На входе был json файл объемом 150Мб, который если преобразовать в формат таблицы, то получится 8.9 млн строк. Не Big Data, но и не маленькая экселька на самом деле.
Мы сравнили разные методы загрузки такого датасета в одну и ту же базу данных в пустые таблицы и вот что получилось:
Самый быстрый метод -
Для COPY предварительно пришлось преобразовать датафрейм в .csv файл, чего например не нужно делать с удобным методом
Кстати, для всех остальных методов вставки которые помню нужно отдельно сначала создать таблицу с помощью
Но часто без
Результаты разных способом по длительности выполнения можете оценить на скрине. 👍 если возьмете себе на заметку
В этот раз на курсе ученица столкнулась с задачей загрузки своего датасета в базу данных PostgreSQL. Все бы ничего, это типичная задача, через которую проходят ученики, но здесь повлиял объем исходных данных. На входе был json файл объемом 150Мб, который если преобразовать в формат таблицы, то получится 8.9 млн строк. Не Big Data, но и не маленькая экселька на самом деле.
Мы сравнили разные методы загрузки такого датасета в одну и ту же базу данных в пустые таблицы и вот что получилось:
Самый быстрый метод -
COPY
(выполнился за 25 секунд). Если вкратце описать его особенность, то этот механизм специально предназначен для массовой вставки данных внутри одного запроса к серверу базы данных, в отличие от INSERT
команды, где каждая вставка будет обрабатываться сервером как отдельный запрос (или группы запросов) и проходить дополнительно разбор sql команды через планировщик базы данных, что также ест ресурсы.Для COPY предварительно пришлось преобразовать датафрейм в .csv файл, чего например не нужно делать с удобным методом
to_sql
. Кстати, для всех остальных методов вставки которые помню нужно отдельно сначала создать таблицу с помощью
CREATE TABLE
, потом уже выполнять вставку. Метод to_sql
сам создает таблицу, если ее в базе данных не существует. Но часто без
INSERT
не обойтись, когда например важно вставлять данные часто и небольшими частями, не сохраняя их при этом предварительно в виде файла. Результаты разных способом по длительности выполнения можете оценить на скрине. 👍 если возьмете себе на заметку
❤27👍18
На днях решал несложную одноразовую задачу по фрилансу. Суть в том, что данные были получены с помощью python и по датасету нужно было сделать несколько преобразований и вычислений метрик.
Преобразования сами по себе стандартные:
Но мне так стало лень писать несколько строк кода на python, что для меня было проще написать всю логику в одном select запросе на sql😁
Вы спросите
Нет, точнее не всегда) Данные остались в том же датафрейме, а обработку я сделал с помощью pandasql.
Простой пример применения и сравнения pandas VS pandasql👇
Я на работе настолько привык крутить все данные с помощью SQL, что в голове любые преобразования я продумываю на логике sql-запросов, а потом если все таки нужно могу переложить это на python скрипты.
Это как с разговорными языками. Если например переезжаете в другую страну и начинаете разговаривать/писать/слушать на другом языке, то у вас мозг со временем начинает мыслить на этом же языке. У меня так было с английским 🇬🇧, когда учеба и работа была полностью на английском, при этом жил в Москве, но все равно замечал что формулирую предложения сначала на английском, а потом уже осознаю что можно на русском)
P.S. sqldf применяет диалект SQLite, поэтому можно использовать все функции которые доступны для этой базы.
👍 если узнали новенькое для себя из поста
Преобразования сами по себе стандартные:
фильтрация
, агрегация
, сортировка
. Можно взять написать все эти операции с помощью pandas к уже имеющемуся датафрейму. Но мне так стало лень писать несколько строк кода на python, что для меня было проще написать всю логику в одном select запросе на sql
Вы спросите
"нафига так делать???" чтобы применить sql данные нужно положить в базу данных
Нет, точнее не всегда) Данные остались в том же датафрейме, а обработку я сделал с помощью pandasql.
Простой пример применения и сравнения pandas VS pandasql
import pandas as pd
from pandasql import sqldf
data = {
'product_id': [1, 2, 1, 3, 2, 3, 1],
'sale_date': ['2023-01-01', '2023-01-02', '2023-01-03', '2023-01-01', '2023-01-02', '2023-01-03', '2023-01-04'],
'amount': [100, 200, 150, 300, 250, 350, 400]
}
df = pd.DataFrame(data)
# логика с pandas (фильтруем по датам, группируем по product_id, считаем агрегат суммы по полю amount и сортируем по нему же)
result_df = (
df[df['sale_date'].between('2023-01-02', '2023-01-03')]
.groupby('product_id', as_index=False)['amount']
.sum()
.sort_values(by='amount', ascending=False)
)
# или применяя sqldf
query = """
SELECT product_id, SUM(amount) as total_amount
FROM df
WHERE sale_date BETWEEN '2023-01-02' AND '2023-01-03'
GROUP BY product_id
ORDER BY total_amount DESC
"""
sql_result = sqldf(query, globals())
Я на работе настолько привык крутить все данные с помощью SQL, что в голове любые преобразования я продумываю на логике sql-запросов, а потом если все таки нужно могу переложить это на python скрипты.
Это как с разговорными языками. Если например переезжаете в другую страну и начинаете разговаривать/писать/слушать на другом языке, то у вас мозг со временем начинает мыслить на этом же языке. У меня так было с английским 🇬🇧, когда учеба и работа была полностью на английском, при этом жил в Москве, но все равно замечал что формулирую предложения сначала на английском, а потом уже осознаю что можно на русском)
P.S. sqldf применяет диалект SQLite, поэтому можно использовать все функции которые доступны для этой базы.
👍 если узнали новенькое для себя из поста
Please open Telegram to view this post
VIEW IN TELEGRAM
👍59❤15
Опыт 🟰 Насмотренность
Каждый понимает, что для ведущего высокооплачиваемого специалиста важно быть опытным. Даже в резюме ключевым фокусом внимания всегда является блок "опыт работы" - что ты уже делал и как решал.
Про опыт
Когда ты джун, каждая задача - это что-то новое, то что ты никогда раньше не делал. В этот момент ты набираешься опыта. Получаешь свой опыт и перенимаешь опыт других коллег, перенимая процесс решения задач, алгоритм анализа, синтаксис скриптов/запросов и т.д., вплоть до привычек решать задачу А с помощью инструмента В, потому что до этого у тебя не было своего опыта и все вокруг тебя делают это так. Ну и ты также начнешь делать.
Опыт заключается в наработке собственных подходов или заимствовании доступных и известных тебе, применяя это здесь и сейчас. Опыт - то что ты приобрел и прошел это.
Про насмотренность
Но я задумался, что опыта на каком-то уровне может не хватать или опыт может быть не совсем правильным/релевантным/эффективным.
Ведь задумайтесь, в одной компании ту самую задачу А все решали инструментом В, а в другой компании эту же задачу А решают другие люди, но инструментами С, D и E. И вполне возможно что твой опыт с вариантом В не самый эффективный, но исходя из опыта ты знаком только с ним и можешь даже не задумываться о том, что есть другое.
Для себя насмотренность я понимаю как "узнать, как решают одну и ту же задачу разными вариантами/подходами/инструментами другие компании/специалисты". Важно понимать, что насмотренность отличается от опыта тем, что ты можешь только посмотреть вариант решения, но не применить его, тем самым не преобразовав это в опыт.
🔎 Насмотренность - знаешь как решать разными способами, опираясь на знания и опыт других, но мог не применять эти знания. Если применил, то получил свой опыт.
🔎 Опыт - прошел путь решения сам или путем заимствования другого опыта.
Мне кажется, что насмотренность более важна для специалистов синьерного уровня, и для этого есть несколько причин:
1️⃣ есть уже наработанный свой опыт и его можно сравнивать с другим опытом через насмотренность. (Типа "я знаю как решить эту задачу и решал ее много раз, но хочу узнать как ее решали другие и сравнить свой опыт)
2️⃣ синьеры как правило являются наставниками для более младших специалистов. и лучше будет сразу в наставничестве давать более широкий опыт: "можно сделать так, а можно иначе, а в другой компании ребята делают так и можешь также попробовать"
3️⃣ опытные специалисты могут быть драйверами роста, внедряя (или пытаясь внедрить) лучшие практики с рынка. а как увидеть эти практики - с помощью насмотренности.
4️⃣ появляется своя команда и часть задач выполняется не твоими руками, а руками твоих коллег. ты можешь повлиять на результат, но не своими руками, а через передачу знаний: "смотри, можем попробовать изобрести велосипед и получить свой опыт, а можем попробовать решить как ребята на конференции рассказывали - посмотрел их решение и предложил тебе попробовать также сделать".
Финализирую:
🔹если джун - нарабатывай собственный и перенимай опыт от своих наставников
🔹если есть базовый опыт - качай насмотренность, как то же самое делают на рынке другие спецы
Каждый понимает, что для ведущего высокооплачиваемого специалиста важно быть опытным. Даже в резюме ключевым фокусом внимания всегда является блок "опыт работы" - что ты уже делал и как решал.
Про опыт
Когда ты джун, каждая задача - это что-то новое, то что ты никогда раньше не делал. В этот момент ты набираешься опыта. Получаешь свой опыт и перенимаешь опыт других коллег, перенимая процесс решения задач, алгоритм анализа, синтаксис скриптов/запросов и т.д., вплоть до привычек решать задачу А с помощью инструмента В, потому что до этого у тебя не было своего опыта и все вокруг тебя делают это так. Ну и ты также начнешь делать.
Опыт заключается в наработке собственных подходов или заимствовании доступных и известных тебе, применяя это здесь и сейчас. Опыт - то что ты приобрел и прошел это.
Про насмотренность
Но я задумался, что опыта на каком-то уровне может не хватать или опыт может быть не совсем правильным/релевантным/эффективным.
Ведь задумайтесь, в одной компании ту самую задачу А все решали инструментом В, а в другой компании эту же задачу А решают другие люди, но инструментами С, D и E. И вполне возможно что твой опыт с вариантом В не самый эффективный, но исходя из опыта ты знаком только с ним и можешь даже не задумываться о том, что есть другое.
Для себя насмотренность я понимаю как "узнать, как решают одну и ту же задачу разными вариантами/подходами/инструментами другие компании/специалисты". Важно понимать, что насмотренность отличается от опыта тем, что ты можешь только посмотреть вариант решения, но не применить его, тем самым не преобразовав это в опыт.
🔎 Насмотренность - знаешь как решать разными способами, опираясь на знания и опыт других, но мог не применять эти знания. Если применил, то получил свой опыт.
🔎 Опыт - прошел путь решения сам или путем заимствования другого опыта.
Мне кажется, что насмотренность более важна для специалистов синьерного уровня, и для этого есть несколько причин:
Финализирую:
🔹если джун - нарабатывай собственный и перенимай опыт от своих наставников
🔹если есть базовый опыт - качай насмотренность, как то же самое делают на рынке другие спецы
Please open Telegram to view this post
VIEW IN TELEGRAM
❤20👍6🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
Уехал в отпуск, в процессе или после поделюсь впечатлениями о поездке длиной в 7+ тыс. км
Собирали вещи 3 вечера, пытался разложить все удобно в машине, но как можете видеть по моему лицу на видео это удалось сделать с трудом 😁
Можете проголосовать за канал, там кажется с 1-го уровня будет доступна 1 история в день. Если наберем 16 голосов, буду делиться с вами красивыми пейзажами Кавказа)
https://hottg.com/boost/data_study
Собирали вещи 3 вечера, пытался разложить все удобно в машине, но как можете видеть по моему лицу на видео это удалось сделать с трудом 😁
Можете проголосовать за канал, там кажется с 1-го уровня будет доступна 1 история в день. Если наберем 16 голосов, буду делиться с вами красивыми пейзажами Кавказа)
https://hottg.com/boost/data_study
🔥34❤6
Идеальный вид из окна 😍
P.S. код открыл на ноутбуке чисто для фотки) в отпуске же все таки
Сегодня приехали из Архыза в Домбай. Сходили по маршруту на Сурфуджинский водопад. Здесь заповедная зона, на КПП в заповедник сказали что водопады закрыты из-за сошедшего ледника, поэтому дошли только до «Чертовой Мельницы»
Скину фотку в комментарии оттуда 👇
P.S. код открыл на ноутбуке чисто для фотки) в отпуске же все таки
Сегодня приехали из Архыза в Домбай. Сходили по маршруту на Сурфуджинский водопад. Здесь заповедная зона, на КПП в заповедник сказали что водопады закрыты из-за сошедшего ледника, поэтому дошли только до «Чертовой Мельницы»
Скину фотку в комментарии оттуда 👇
🔥31❤12👍4
❓Как правильно проектировать и развивать хранилище данных (DWH), чтобы оно отвечало бизнес-задачам компании?
Приходи на авторский курс Руководство по DWH: Архитектура, Инструменты, Внедрение
📆 Дата: 21 июля – 1 августа 2025 г.
📍Формат: онлайн с ведущим экспертом. 32 ак.часа практического интенсива.
💲Стоимость: 93 000 р. (поможем оформить обучение от компании).
📌 Для тех, кто хочет говорить на одном языке с бизнесом и IT, определять необходимость внедрения DWH и его ценность для бизнеса.
📚Вы научитесь:
⏩Разбираться в архитектурных подходах к созданию DWH и понимать их эволюцию.
⏩ Выбирать правильную архитектуру в зависимости от задач компании.
⏩ Работать с современными инструментами и концепциями, такими как Data Mesh, Data Lakehouse, Apache Iceberg, Trino, dbt.
💡 В результате вы сможете участвовать в проектах по разработке и оптимизации DWH с учетом актуальных практик.
⚠️Также, если вы хотите освоить ключевые навыки, необходимые для установки, настройки и поддержки аналитической СУБД ClickHouse, ждем Вас на курсах:
Запросы в Clickhouse
📆 Даты: 21 – 23 июля 2025 г.
Разработка и поддержка в Clickhouse
📆 Даты: 28 – 30 июля 2025 г.
👉 оставляй заявку , расскажем, как будет организовано твое обучение.
Приходи на авторский курс Руководство по DWH: Архитектура, Инструменты, Внедрение
📆 Дата: 21 июля – 1 августа 2025 г.
📍Формат: онлайн с ведущим экспертом. 32 ак.часа практического интенсива.
💲Стоимость: 93 000 р. (поможем оформить обучение от компании).
📌 Для тех, кто хочет говорить на одном языке с бизнесом и IT, определять необходимость внедрения DWH и его ценность для бизнеса.
📚Вы научитесь:
⏩Разбираться в архитектурных подходах к созданию DWH и понимать их эволюцию.
⏩ Выбирать правильную архитектуру в зависимости от задач компании.
⏩ Работать с современными инструментами и концепциями, такими как Data Mesh, Data Lakehouse, Apache Iceberg, Trino, dbt.
💡 В результате вы сможете участвовать в проектах по разработке и оптимизации DWH с учетом актуальных практик.
⚠️Также, если вы хотите освоить ключевые навыки, необходимые для установки, настройки и поддержки аналитической СУБД ClickHouse, ждем Вас на курсах:
Запросы в Clickhouse
📆 Даты: 21 – 23 июля 2025 г.
Разработка и поддержка в Clickhouse
📆 Даты: 28 – 30 июля 2025 г.
👉 оставляй заявку , расскажем, как будет организовано твое обучение.
👍5❤1
🚙 Наш маршрут Road Trip
📍 Архыз
📍 Домбай
📍 Кисловодск
📍 урочище Джилы-Су
📍 Верхняя Балкария
📍 Северная Осетия
Я готовился к путешествию в основном по видео блогеров Своим Ходом, они путешествовали в автодоме по Кавказу в прошлом году. Я так вдохновился местами и красотами, что решил повторить частично маршрут и увидеть все своими глазами.
Расписывал маршрут по дням и времени когда и на какую точку нужно поехать, как передвигаться между локациями и где ночевать.
Топ 3 самых ярких впечатления и локации:
1️⃣ Софийские водопады в Архызе
Голову снесли пейзажи вокруг и сам трекинг до водопадов с кофе-брейком возле них
2️⃣ Домбай
Очумели от высоты и величестве гор вокруг курортного поселка, видом из отеля здесь уже делился. + живописный трекинг и подъем на канатной дороге.
3️⃣ Эльбрус и суслики
Ездили в урочище Джилы-Су с ночевкой. На рассвете нам открылся величественный Эльбрус. Завтрак и кофе на газовой горелке + все утро кормили милых и пугливых сусликов
Помимо этого мы посетили еще большое количество мест, одни переезды от локации к локации приносили уйму эмоций и новые пейзажи за окном.
Возможно вы тоже захотите посетить эти места 😉 Пишите, если захотите спросить что-то более детально
Я готовился к путешествию в основном по видео блогеров Своим Ходом, они путешествовали в автодоме по Кавказу в прошлом году. Я так вдохновился местами и красотами, что решил повторить частично маршрут и увидеть все своими глазами.
Расписывал маршрут по дням и времени когда и на какую точку нужно поехать, как передвигаться между локациями и где ночевать.
Топ 3 самых ярких впечатления и локации:
Голову снесли пейзажи вокруг и сам трекинг до водопадов с кофе-брейком возле них
Очумели от высоты и величестве гор вокруг курортного поселка, видом из отеля здесь уже делился. + живописный трекинг и подъем на канатной дороге.
Ездили в урочище Джилы-Су с ночевкой. На рассвете нам открылся величественный Эльбрус. Завтрак и кофе на газовой горелке + все утро кормили милых и пугливых сусликов
Помимо этого мы посетили еще большое количество мест, одни переезды от локации к локации приносили уйму эмоций и новые пейзажи за окном.
Возможно вы тоже захотите посетить эти места 😉 Пишите, если захотите спросить что-то более детально
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥32👍10❤6
Временные таблицы в базах данных
В ETL процессах часто возникает необходимость в промежуточном хранении данных. Одним из эффективных решений для этой задачи являются временные таблицы.
🔎 Временная таблица — это специальный тип таблицы в базе данных, которая существует только в течение сессии пользователя или до конца транзакции. Она создается для временного хранения данных и автоматически удаляется после завершения работы.
Чем они отличаются от обычных таблиц?
1️⃣ Временность: Временные таблицы существуют только в течение сессии или транзакции, тогда как обычные таблицы сохраняются в базе данных до тех пор, пока их не удалят вручную.
2️⃣ Изоляция: Временные таблицы видны только в пределах текущей сессии или транзакции, что обеспечивает изоляцию данных между разными пользователями или процессами.
3️⃣ Производительность: Временные таблицы часто хранятся в оперативной памяти, что позволяет значительно ускорить операции с данными.
Эти особенности и дают плюсы использования временных таблиц для оптимизации ETL
Пример создания временной таблицы в SQL из результата SELECT запроса:
Также хочу отметить, что временные таблицы позволяют оптимизировать выполнение запросов, если вам нужно преобразовывать и извлекать данные из множества разных таблиц в базе. Например, если из таблицы с продажами за все время вам нужны продажи только за последний месяц для разных видов расчетом, сохраните продажи за последний месяц во временную таблицу и обращайтесь к ней для ваших расчетов, чтобы не делать несколько тяжелых запросов к таблице всех продаж.
В ETL процессах часто возникает необходимость в промежуточном хранении данных. Одним из эффективных решений для этой задачи являются временные таблицы.
🔎 Временная таблица — это специальный тип таблицы в базе данных, которая существует только в течение сессии пользователя или до конца транзакции. Она создается для временного хранения данных и автоматически удаляется после завершения работы.
Чем они отличаются от обычных таблиц?
1️⃣ Временность: Временные таблицы существуют только в течение сессии или транзакции, тогда как обычные таблицы сохраняются в базе данных до тех пор, пока их не удалят вручную.
2️⃣ Изоляция: Временные таблицы видны только в пределах текущей сессии или транзакции, что обеспечивает изоляцию данных между разными пользователями или процессами.
3️⃣ Производительность: Временные таблицы часто хранятся в оперативной памяти, что позволяет значительно ускорить операции с данными.
Эти особенности и дают плюсы использования временных таблиц для оптимизации ETL
Пример создания временной таблицы в SQL из результата SELECT запроса:
CREATE TEMPORARY TABLE temp_table (
id INT,
name VARCHAR(50),
value DECIMAL(10, 2)
);
--либо создание из результата SELECT запроса
CREATE TEMPORARY TABLE temp_table AS
SELECT
id
, name
, value
FROM table
;
Также хочу отметить, что временные таблицы позволяют оптимизировать выполнение запросов, если вам нужно преобразовывать и извлекать данные из множества разных таблиц в базе. Например, если из таблицы с продажами за все время вам нужны продажи только за последний месяц для разных видов расчетом, сохраните продажи за последний месяц во временную таблицу и обращайтесь к ней для ваших расчетов, чтобы не делать несколько тяжелых запросов к таблице всех продаж.
❤14👍8🔥4
HTML Embed Code: