EasyData
925 subscribers
149 photos
10 videos
22 files
76 links
Добро пожаловать!
Меня зовут Мария Жарова, и это мой блог про науку о данных

Лайфхаки из будней MLщика, полезности по Data Science и ответы на вопросы, которые волнуют новичков и не только🌝

Автор @NaNCat
加入频道
Алгоритмы_с_примерами_на_Python.pdf
13.6 MB
Доброго вечера, друзья!
Как думаете, нужно ли в Data Science знание алгоритмов и структур данных? Наверное, первое, что приходит в голову - это, конечно, собеседования😁 Во многих компаниях обязательным этапом в процессе найма является та самая секция лайф-кодинга.
А вообще, знание алгоритмов и структур данных помогает лучше понимать, как работают различные методы машинного обучения (например, те же «деревянные» модели) + практика и привычка писать оптимальный код пригодится в анализе и при обработке данных.

Ловите новую книгу издательства O’Reilly «Алгоритмы с примерами на Python», в ней автор понятно рассказывает про самые известные структуры данных и алгоритмы над ними, разбирает их сложность - и всё это, конечно, с примерами на питоне(!)🥰 В книге также есть задачи для самостоятельного решения.

Хорошего вечера!❄️☃️

#python@data_easy
Please open Telegram to view this post
VIEW IN TELEGRAM
🤩116
Обещали мемы, но ещё ни разу их не скидывали - исправляемся!🙈
Только это не простые шутки, а из питоновской библиотеки pyjokes😁
Всего в пару строчек кода можно получить случайный анекдот не выходя из редактора кода. Смотрите пример на скрине, а кому лень перепечатывать - подробнее в файле с кодом:)

PS: за идею и хорошее настроение спасибо студенту курса по Data Science, которые поделился этой забавной штукой в своём дипломе😊

#мем@data_easy
#python@data_easy
10🔥4👍2
Добрый вечер, друзья!
Бывало такое, что запустили цикл, а он никак не завершается и когда закончится непонятно? Или применяете функцию, и ячейка зависает на неопределённый срок? Не очень здорово, когда код превращается в "чёрный ящик" с неизвестным временем выполнения☹️
К счастью, эту проблему можно решить при помощи библиотеки tqdm🔮 Вот несколько примеров её самых полезных возможностей:
➡️ for i in tqdm(range(1000)):
Если итерируемый объект в цикле for обернуть в tqdm, мы увидим прогресс-бар, который покажет продвижение по итерациям цикла и оставшееся время выполнения.
➡️ df['col'_1] = df['col'].progress_apply(func_1)
При работе с pandas-датафреймами обычный apply можно заменить на progress_apply, тогда также будет показываться прогресс-бар. Это бывает полезно при больших размерах датасета.
➡️ df['col_2'] = process_map(
func_2,
df['col'],
max_workers=8,
chunksize=64,
desc='Description',
colour='green'
)
А это "прогрессивный" аналог map, только здесь ещё можно распараллелить процесс при помощи аргументов max_workers и chunksize + везде можно добавлять подпись для прогресс-бара и его цвет💚

Ещё больше интересных приёмов можно узнать из официальной документации🦋

Хорошего вечера и быстрого кода!

#python@data_easy
#лайфхаки@data_easy
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🔥61
Доброго вечера всем любителям Jupyter-ноутбуков и не только!
Приходилось ли вам писать отдельный py-модуль, а функциями из него пользоваться в ноутбуке?
Проблема в том, что при каждом обновлении py-файла, чтобы оно активировалось внутри Jupyter-ноутбука, необходимо перезагружать ядро☄️
Это не только трата времени, но и потеря всех локальных переменных текущей сессии:(

Эту проблему исправит метод importlib из библиотеки reload🌟Предположим, наш модуль называется my_module, тогда нам понадобится следующий код:


from importlib import reload
import my_module

my_module = reload(my_module)


Запустив эти строки после обновления файла с модулем, все последние изменения станут доступны в Jupyter-ноутбуке😊

Хорошего вечера!🌆

#python@data_easy
#лайфхаки@data_easy
🔥146😍6👏3
Plotly.pdf
623.7 KB
«О нет, только не графики!» - часто слышу подобное от студентов. Действительно, построение графиков в питоне может показаться довольно муторным занятием: куча разных библиотек, везде свои названия методов и своеобразный синтаксис, в котором легко запутаться🙈
Главное преимущество - то что в питоне мы можем легко обработать и собрать нужные данные. И на самом деле, если один раз разобраться с библиотеками и иметь под рукой шпаргалку основных типов графиков в любимой библиотеке, это сильно упростит работу и избавит от необходимости выгружать данные и строить визуализации в сторонних программах. К тому же, при помощи некоторых библиотек можно легко построить очень оригинальные картинки, включая анимации:)

Итак, библиотеки для построения графиков в питоне:
🌟 pandas (да-да, и это самый простой и быстрый способ что-то нарисовать);
🌟 plotly (преимущество этой библиотеки - интерактивность);
🌟 matplotlib (классическая библиотека, графики - статичные изображения);
🌟 seaborn (более высокоуровневая надстройка над matplotlib).

Копировать шаблонный код для построения графиков откуда-либо нормально: в некоторых случаях он, действительно, бывает громоздким. И даже если выучили все методы и аргументы функций наизусть, писать с нуля одно и тоже не всегда эффективно😁

А пока ловите небольшую шпаргалку по plotly - в ней несколько примеров построения самых популярных видов графиков + парочка нестандартных визуализаций. Сам код и его копия в пдф во вложениях, в ноутбуке можно запустить интерактив:)

Всем красивых графиков!💅

#python@data_easy
#аналитика@data_easy
🔥199👍3
This media is not supported in your browser
VIEW IN TELEGRAM
Доброго летнего вечера!🌅
Представьте, что вам дали некоторый датасет и попросили его проанализировать/обучить модель на этих данных. Что бы вы сделали в самую первую очередь? Большинство ответят прочитали бы и вывели head😁
В целом, это верный ответ, здесь же можно добавить info() и describe().

Но есть кое-что получше: библиотека ydata-profiling для первичного анализа данных и проверки их качества.
С помощью неё можно автоматически получить подробный и красивый отчёт, который позволит быстро ознакомиться с основными характеристиками данных и сразу выявить возможные проблемы.

За несколько минут можно создать отчёт, включающий:
⛵️ общий анализ датасета с разделом предупреждений, на которые стоит обратить внимание в первую очередь
⛵️ детальный отчёт по каждой переменной, включая наглядное представление дубликатов, выбросов и статистических характеристик
⛵️ распределения для числовых признаков и "облако слов" для категориальных
⛵️ взаимные зависимости числовых признаков
⛵️ наличие пропусков
⛵️ и, конечно, аналог head и tail

Создать отчёт очень просто!
1. Для начала установите библиотеку:

pip install ydata-profiling

2. Далее загрузите ваш датафрейм и сгенерируйте отчет, это займёт всего несколько минут:

import pandas as pd
from ydata_profiling import ProfileReport

# Загружаем данные
data = pd.read_csv("data.csv")

# Генерируем отчёт
profile = ProfileReport(data, title="Мой_первый_отчёт")

3. Готовый отчёт можно вывести и посмотреть прямо в ноутубке или сохранить в html:

profile.to_notebook_iframe()

# Или сохраняем отчет вx HTML файл
profile.to_file("Мой_первый_отчёт.html")


На всякий случай, официальная документация тут.
В видео трейлер с демонстрацией основных возможностей библиотеки💫

Удачной недели!🙂

#аналитика@data_easy
#classic_ml@data_easy
#python@data_easy
Please open Telegram to view this post
VIEW IN TELEGRAM
14🔥7👍1🐳1
Всем привет, друзья!
Как вы обычно ускоряете вычисления, если Python показывает ожидаемое время работы кода несколько часов или дней?😄
Есть простой способ сократить время и заставить процессор работать на полную мощность при помощи библиотеки joblib😎
Она умеет не только (де-)сериализовать объекты, но ещё и упрощает использование нескольких процессов или потоков на Python без необходимости углубляться в тонкости теории.

Ключевой инструмент для параллельного выполнения задач — Parallel. Попробуйте сравнить два варианта кода:


import time
from tqdm import tqdm

def slow_function(x):
time.sleep(1)
return x**2
results = [slow_function(x) for x in tqdm(range(100))]

и

from joblib import Parallel, delayed

# Обертка для распараллеливания
results = Parallel(n_jobs=4)(delayed(slow_function)(x) for x in tqdm(range(100)))


Как это работает:

🌟 Parallel(n_jobs) указывает, сколько процессов или потоков использовать. Например, при n_jobs=4 будут использоваться 4 ядра процессора, а при n_jobs=-1 — все доступные. Так что, если точно не знаете, какое число указать, попробуйте -1, т.к. если переборщить, код может не сработать🙈
🌟 delayed превращает функцию в "ленивую", откладывая её выполнение до тех пор, пока Parallel не передаст её в пул процессов.

Полезные ссылки:
🔗 Документация joblib
🔗 Репозиторий GitHub

Хорошей недели!❄️

#python@data_easy
🔥11👍97
Привет, друзья!
Поздравляю всех причастных с Днём студента!🤩
Держите небольшую подборку бесплатных курсов, которые помогут в изучении DS - как для начинающих, так и для продолжающих🤓

📚Для совсем новичков открытый курс по Python на Stepic.
С него можно начинать изучение программирования в принципе, подойдёт не только для будущих дата-саентистов, но и для разработчиков.
➡️ Ссылка на Stepik и на дублирующий плейлист на youtube.

📚Для погружения в классический ML можно начать с курса лекций и семинаров от МФТИ.
➡️ Ссылка на плейлист youtube.

📚 Для тех, кто уже знаком с основами ML, есть продолжение предыдущего курса от МФТИ, который знакомит с DL.
➡️ Ссылка на плейлист youtube.

📚Также в качестве дополнения можно ознакомиться с материалами годового курса от DeepLearning School.
➡️ Здесь найдёте материалы базового потока, а здесь - продвинутого.

📚Для погружения в NLP можете посмотреть материалы курса с ODS.
➡️ Ссылка на курс (нужна регистрация).

📚Для любителей рекомендательных систем есть два мини курса, также с ODS.
➡️ Ссылка на первую часть и на вторую.

📚По CV хороший курс на Hugging Face. Единственный возможный минус - он на английском.
➡️ Ссылка на материалы.

Успехов в учёбе и хороших выходных!🍀

#python@data_easy
#classic_ml@data_easy
#cv@data_easy
#nlp@data_easy
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2714👍5
➡️НАВИГАЦИЯ ⬅️
Добавила хэштеги ко всем актуальным постам канала🤩

🖱 Технические посты по направлениям:

#python@data_easy
#математика@data_easy
#аналитика@data_easy
#classic_ml@data_easy
#dl@data_easy
#cv@data_easy
#nlp@data_easy
#аудио@data_easy
#mlops@data_easy

🖱Маленькие технические полезности, которые не попали в предыдущие рубрики:
#лайфхаки@data_easy

🖱 Всё про поиск работы - лайфхаки, каналы с вакансиями, задачи для собеседований:
#карьера@data_easy

🖱Новости в сфере ИИ и обзоры на полезные нейросети:
#полезный_ии@data_easy

🖱Важная рубрика, которой оказалось очень мало в канале, будем исправлять
ситуацию!

#мем@data_easy

🖱Уютный чат для общения:
https://yangx.top/+v1fdmoHV3JwyYTJi

🖱YouTube канал EasyData:
https://youtube.com/@data_easy
Please open Telegram to view this post
VIEW IN TELEGRAM
8🔥4👍1
Привет, друзья!
Конечно, предыдущий пост был шуткой😄
Я снова в деле и сегодня поделюсь подборкой полезных приёмов в Pandas, которые помогут сэкономить время при написании кода, а некоторые ещё и ускорят его🚀

➡️Для удобства все материалы смотрите в статье.

Всем красивого кода и с Праздником!🕊️

#лайфхаки@data_easy
#python@data_easy
#аналитика@data_easy
Please open Telegram to view this post
VIEW IN TELEGRAM
😍108🔥7👍2
Всем привет!
Когда в последний раз вы удивлялись Python? Держите несколько коварных вопросов на внимательность и знание тонкостей языка😏

🐍 изменяемые аргументы по умолчанию (1 и 2),
🐍 dict с ключами разного типа (3),
🐍 логика работы логических операторов (4), с and, кстати, всё работает по тому же принципу,
🐍 is и магия чисел (5, 6).

Листайте условия в карточках, в конце недели подведём итоги👀

#python@data_easy
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥71
Привет, друзья!
Пришло время подводить итоги прошлых задачек для разминки по Python. Ниже разбор правильных ответов⚠️

1.
print(magic_func(25)) # [50]
print(magic_func(30)) # [50, 55]

Причина в том, что аргумент lst=[] - изменяемый объект. Он сохраняется между вызовами функции. Поэтому при втором вызове к списку добавляется второй элемент.

2.
print(extend_list(1)) # [1]
print(extend_list(2)) # [1, 2]
print(extend_list(3, [])) # [3]
print(extend_list(4)) # [1, 2, 4]

Демонстрация того же эффекта, что и в прошлом задании: используем изменяемый аргумент по умолчанию - список lst. Он сохраняет своё состояние между вызовами, если не передать другой. В третьем вызове передан новый список, поэтому результат уже не связан с предыдущими:)

3.
d = {1: 1, 1.0: 1.0, '1': '1', True: True}
print(d) # {1: True, '1': '1'}

Ключи 1, 1.0 и True считаются равными в словаре, потому что 1 == 1.0 == True (можете проверить это отдельно). Поэтому остаётся последний по порядку ключ из этой группы (True), и он перезаписывает предыдущие.

4.
print(tricky_or([], 'fallback')) # 'fallback'
print(tricky_or({}, 0)) # 0
print(tricky_or('', None)) # None

Оператор or возвращает первое "истинное" значение или последнее, если все ложные. [], {}, '' считаются ложными, 'fallback' - истинное, 0 и None - тоже ложные, но 0 возвращается, потому что он второй аргумент. По аналогии можете подумать, как ведет себя в подобных ситуациях and.

5.
print(x == y) # True
print(x is y) # False

== сравнивает значения, по этому принципу списки равны. is сравнивает идентичность объектов - а у нас два разных списка в памяти, находящихся по разным адресам.

6.
a = 256
b = 256
print(a is b) # True

a = 257
b = 257
print(a is b) # False

Числа от -5 до 256 кэшируются в Python, и переменные с такими значениями могут ссылаться на один и тот же объект. Значения вне этого диапазона не кэшируются, поэтому a is b даёт False.

Кто верно догадался во всех задачах - ставьте 😇

Успехов в диалогах с питоном!🐍

#python@data_easy
9👍4😇1
Привет, друзья!

Сегодня поговорим про Numba - инструмент, который превращает обычный Python-код в "почти C" по скорости🏃‍♂️

Numba - это JIT-компилятор (Just-In-Time) для Python. Если вкратце, то он анализирует функции и компилирует их в машинный код прямо во время исполнения. То есть, вместо интерпретируемого Python код исполняется как скомпилированный.

Воспользоваться возможностями Numba крайне легко - нужно просто добавить декоратор @njit к функции, и всё! 🧑‍💻

@njit
def sigmoid_numba(x):
return 1 / (1 + np.exp(-x))


Но пара нюансов всё же есть:
➡️ Во-первых, не все операции могут быть ускорены таким способом. Общий рецепт таков: "чем проще и численно интенсивнее функция, тем лучше". Вот несколько типичных примеров, которые хороши для Numba:
1. численные циклы (циклы for, while)
2. операции с массивами numpy
3. алгоритмы оптимизации, матричные вычисления
4. генерация чисел и математические функции (sin, exp, sqrt, и т.д.)
5. фильтрация, агрегация и другие различные манипуляции над массивами
6. простые симуляции (например, метод Монте-Карло)

➡️ А во-вторых, при первом запуске функция с Numba может работать даже медленнее обычной Python-версии🙂 Всё потому, что в первый раз Numba не просто выполняет код, а сначала компилирует его в машинный код - и это занимает время. Но уже со второго вызова скомпилированный вариант готов и работает в разы быстрее, как настоящий нативный код.

А насколько быстрым получается код с добавлением Numba - смотрите на скринах:) Замеры проведены на втором запуске😉

Документация библиотеки +:
➡️ с список Python-операций, которые могут быть ускорены
➡️ с аналогичный список для Numpy-функций

Хорошей недели и гармоничных распределений! ☀️

#python@data_easy
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥159👍5