Канал для поиска исполнителей для разных задач и организации мини конкурсов
Last updated 3 months ago
Новые и перспективные Web3 игры с добычей токенов.
Чат: https://t.me/Crypto_Wolf_Chat
Правила чата смотрите в описании чата.
Все свои вопросы направляйте в чат или главному модератору чата: @Exudna_118
По теме сотрудничества: @Zombini
Last updated 2 months, 2 weeks ago
? ⚡️Хитрая задачка с работы. Возвращение. ?
??Наконец удалось выкроить время, чтобы поэкспериментировать с этой хитрой задачей, и теперь у меня есть решение, которое не использует циклы! Всё сделано исключительно с помощью Pandas!
Давайте разберем его пошагово:
1️⃣Генерация данных как и в прошлый раз?
Здесь мы создаем список словарей, где каждый словарь содержит client_id и строку value с информацией о рассрочках.
```
import pandas as pd
data = [
{ 'client_id': 111,
'value': 'installment_0_0_3_7,59 Срок рассрочки 3 мес.'
'installment_0_0_4_8,42 Срок рассрочки 4 мес.'
'installment_0_0_6_10,84 Срок рассрочки 6 мес.'
},
{
'client_id': 222,
'value': 'installment_0_0_3_4,93 Срок рассрочки 3 мес.'
},
{
'client_id': 333,
'value': 'installment_0_0_4_5,64 Срок рассрочки 4 мес.'
'installment_0_0_6_6,05 Срок рассрочки 6 мес.'
},
{
'client_id': 444,
'value': 'installment_0_0_3_7,78 Срок рассрочки 3 мес.'
'installment_0_0_6_9,60 Срок рассрочки 6 мес.'
},
{
'client_id': 555,
'value': 'installment_0_0_4_8,57 Срок рассрочки 4 мес.'
'installment_0_0_6_8 Срок рассрочки 6 мес.'
}
]
df = pd.DataFrame(data)
```
2️⃣Извлечение данных (сроков рассрочки и ставок из строки value) с использованием регулярного выражения ?
extracted = df.set\_index('client\_id')['value'].str.extractall(r'installment\_0\_0\_(\d+)\_([\d,]+)')
extracted = extracted.reset\_index(level=1, drop=True).reset\_index()
extracted.columns = ['client\_id', 'term', 'rate']
3️⃣ Преобразование данных в нужный формат ? Преобразуем строковые значения в числовой формат и добавляем текстовое описание к срокам рассрочки.
extracted['rate'] = extracted['rate'].str.replace(',', '.').astype(float)
extracted['term'] = 'Срок рассрочки ' + extracted['term'] + ' мес.'
4️⃣Определение условий фильтрации ?️♂️
Задаем условия для фильтрации данных по срокам рассрочки и максимальным допустимым ставкам.
conditions = {
"Срок рассрочки 3 мес.": 5.93,
"Срок рассрочки 4 мес.": 6.64,
"Срок рассрочки 6 мес.": 7.05
}
5️⃣Фильтрация данных ?
filtered\_df = extracted[extracted.apply(
lambda row: row['term'] in conditions and row['rate'] <= conditions[row['term']], axis=1
)]
? Вот ссылка на обновленный Jupyter Notebook. В нём вы найдёте ещё дополнительные варианты решения, которые прислал Дмитрий в комментариях. Спасибо ему за это! ?
⚡️Хитрая задачка с работы.
Попросили меня выгрузить всех клиентов, у которых ставка кредита меньше или равно указанных. Должны быть меньше вот этих (как пример, цифры придуманные):
? Срок рассрочки 3 мес.: 5.93%
? Срок рассрочки 4 мес.: 6.64%
? Срок рассрочки 6 мес.: 7.05%
В базе данные хранятся у каждого клиента в параметре value просто как текст:
installment_0_0_3_7,59 Срок рассрочки 3 мес. installment_0_0_4_8,42 Срок рассрочки 4 мес. installment_0_0_6_10,84 Срок рассрочки 6 мес.Сравнить нужно не только ставку, но и соотнести с продолжительностью кредита.
Решение ?
✔️Генерация данных. ? Создадим небольшой датафрейм:
data = [
{
'client\_id': 111,
'value': 'installment\_0\_0\_3\_7,59 Срок рассрочки 3 мес.'
'installment\_0\_0\_4\_8,42 Срок рассрочки 4 мес.'
'installment\_0\_0\_6\_10,84 Срок рассрочки 6 мес.'
},
{
'client\_id': 222,
'value': 'installment\_0\_0\_3\_4,93 Срок рассрочки 3 мес.'
},
{
'client\_id': 333,
'value': 'installment\_0\_0\_4\_5,64 Срок рассрочки 4 мес.'
'installment\_0\_0\_6\_6,05 Срок рассрочки 6 мес.'
},
{
'client\_id': 444,
'value': 'installment\_0\_0\_3\_7,78 Срок рассрочки 3 мес.'
'installment\_0\_0\_6\_9,60 Срок рассрочки 6 мес.'
},
{
'client\_id': 555,
'value': 'installment\_0\_0\_4\_8,57 Срок рассрочки 4 мес.'
'installment\_0\_0\_6\_8 Срок рассрочки 6 мес.'
}
]
\# Создание DataFrame
df = pd.DataFrame(data)
Обработка данных ?*
✔️*** Создаем пустой список для хранения обработанных данных.
processed\_data = []
*✔️*Извлечение данных с помощью iterrows() ?****
Для каждой строки извлекаем client_id, сроки рассрочки и процентные ставки из столбца value. Используем регулярное выражение для поиска всех совпадений в value, которые соответствуют шаблону installment_0_0__.
*?Как работает iterrows() ?* Метод iterrows() проходит по строкам DataFrame и возвращает пары (index, row) для каждой строки. Здесь index - это индекс строки, а row - это Series, представляющая данные строки.
То есть я извлекаю сроки рассрочки и процентные ставки из колонки value и потом добавляю их в новый DataFrame.
```
for index, row in df.iterrows():
client_id = row['client_id']
value = row['value']
\# Извлечение сроков и ставок с помощью регулярного выражения
matches = re.findall(r'installment\_0\_0\_(\d+)\_([\d,\.]+)', value)
for match in matches:
term = f"Срок рассрочки {match[0]} мес."
rate\_str = match[1].replace(',', '.')
rate\_str = re.sub(r'\.$', '', rate\_str)
rate = float(rate\_str)
processed\_data.append({
'client\_id': client\_id,
'rate': rate,
'term': term
})
# Создание нового DataFrame из обработанных данных
processed_df = pd.DataFrame(processed_data)
```
Регулярное выражение для извлечения данных ?*
Разберем *matches = re.findall(r'installment_0_0_(\d+)_([\d,.]+)', value) подробно:
1. Ищет буквальный текст "installment_0_0_" в строке.
(\d+): Находит одну или более цифр и сохраняет их как первую группу захвата (срок кредитования).
Ищет символ подчеркивания _.
4.([\d,.]+): Находит одну или более цифр, запятых или точек и сохраняет их как вторую группу захвата (ставка кредита).
У нас получился датафрейм с колонками client_id, rate и term. Вуаля! А теперь можно отфильтровать нужное.
✔️Фильтрация данных ?
Далее я фильтрую данные по заданным условиям. Проценты не должны превышать определенных значений для каждого срока рассрочки
\# Определение условий фильтрации
conditions = {
"Срок рассрочки 3 мес.": 5.93,
"Срок рассрочки 4 мес.": 6.64,
"Срок рассрочки 6 мес.": 7.05
}
filtered\_df = processed\_df[processed\_df.apply(
lambda row: row['term'] in conditions and row['rate'] <= conditions[row['term']], axis=1)]
?Так как код большой, то я оставлю ссылку на юпитер ноутбук. Тестируйте, модифицируйте.
*? Новая Задачка с Работы*
Недавно столкнулась с интересной задачей. У каждого клиента client_id есть параметр - подсчет чего-либо. Назовем эту колонку count.
✅ Быстренько создадим датафремчик с примером:
```
import pandas as pd
data = {
"client_id": [111, 222, 111, 333, 333, 444, 444],
"info": ['AAA', 'AAA', 'BBB', 'CCC', 'DDD', 'DDD', 'EEE'],
"count": [10, 1, 9, 8, 6, 0, 1]
}
df = pd.DataFrame(data)
```
?Нужно для каждого клиента найти максимальное значение в колонке count с помощью метода idxmax.
Казалось бы, можно использовать просто max(), но есть нюансы.
✅Группировка и нахождение индексов с максимальным значением.
Группируем по client_id и находим строки с максимальным значением count для каждой группы (client_id).
idx = df.groupby('client\_id')['count'].idxmax()
✅Фильтрация: Используем эти индексы для фильтрации исходного DataFrame, оставляя только строки с максимальными значениями count для каждого client_id.
df\_filtered = df.loc[idx] \#выбирает строки по индексам из idx.
Результат - df_filtered видим на картинке.
❓ А теперь поясню про вариант с max():
Да, задачу можно решить с помощью функции max() при группировке. Этот подход подходит для нахождения максимального значения count для каждого клиента, но не возвращает строку полностью! А мне нужно было видеть всю инфу по строке, так как там много колонок было.
df.groupby('client\_id',as\_index=False)['count'].max()
Эта строчка кода вернет только две колонки: client_id и count
Смоделируем бизнес ситуацию, где такое можно было бы использовать:
? Вы работаете в розничной сети, которая имеет программу лояльности для своих клиентов ?. Клиенты могут иметь несколько аккаунтов (например, основной аккаунт и семейные аккаунты). В каждом аккаунте фиксируется активность клиента (покупки, участие в акциях и т.д.). Вам необходимо анализировать наиболее активные аккаунты для предоставления специальных предложений и акций.
Вот такой интересный случай из практики ?
✅ Всем привет!
Я участвую в классной инициативе с другими аналитическими каналами! ? Андрон из Simulative обратился ко мне с предложением добавить этот канал в специальную папку. Всего участвуют 15 каналов, где эксперты делятся своим опытом и знаниями. На большинство из них я уже была подписана, поэтому сразу согласилась.
Здесь представлены каналы про Data Science, «хардовые» советы для аналитиков ?, каналы о развитии софт-скиллов ?, а также каналы про визуализацию. ? То, что в подборке есть каналы Бабушкина и Михайлова, уже говорит о многом. Эти ребята действительно крутые! ?
Ссылка на папку: https://t.me/addlist/dMeiok8FCdA3ZTMy
Мне для обзора выпал канал Юрия Борзило https://t.me/y_borzilo, который я давно знаю и очень рекомендую всем, кто интересуется аналитикой! Юра – действующий продуктовый аналитик, и у него много информации про А/Б тесты.
Вот подборка его постов про А/Б тесты за год: https://t.me/y_borzilo/477
Признавайтесь, у кого есть опыт A/Б тестов? В одном из постов Юра писал о двух крайностях:
1️⃣ Давайте ничего не будем АБ тестировать.
2️⃣Давайте АБ тестировать вообще все.
Как всегда, нужна золотая середина. Сам по себе этот инструмент не хороший и не плохой, но у него есть ряд ограничений, которые надо учитывать при применении.
Сейчас так много информации, что учиться и совершенствовать свои навыки стало проще, чем когда-либо. Правда, со временем всё так же сложно ?
Telegram
Борзило
Пишу про аналитику, продукты, маркетинг @borzilo\_y - по всем вопросам
? У нас теперь есть бот для анонимных сообщений!
Если у вас есть вопросы или что-то, чем вы хотите поделиться, но не хотите раскрывать свою личность, просто напишите боту. Я постараюсь честно ответить (если это не будет под NDA) или как-то прокомментирую.
? Пишите сюда: t.me/anonaskbot?start=UwPGvL1G1RVzcgu
У меня много кода в блоге, но иногда хочется и порассуждать. ?
? Анализ Поисковых Запросов в Яндекс.Метрике
Продолжаю изучение Яндекс.Метрики и делюсь выводами:
? Кто посещает сайт?
География: Основная аудитория из России, но были случаи и из Аргентины!
(Отчеты - Аудитория - География.)
Пол: Преобладают женщины.
(Отчеты - Аудитория - Пол. )
Возраст: Большая часть — это люди в возрасте 25-34 года.
(Отчеты - Аудитория - Возраст. )
? Откуда приходят посетители? Отчеты - Источники - Поисковые запросы
Этот отчет предоставляет информацию о том, какие конкретные запросы пользователи вводили в поисковые системы (например, Яндекс или Google), которые впоследствии привели их на ваш сайт. Изучение этих данных помогает адаптировать контент под популярные запросы и улучшить SEO. Например, слова "собеседование", "питон", "пандас" и "аналитика" часто приводили пользователей на мой сайт в Дзене.
? Зачем это нужно?
Инсайты и SEO: Понимание популярных запросов и оптимизация сайта под них помогает улучшить видимость в поисковиках и сделать контент релевантным для аудитории.
Улучшение сайта: Анализ запросов позволяет совершенствовать навигацию и структуру сайта, делая его более удобным для пользователей.
? Пример использования данных:
Если вы обнаружили, что многие пользователи ищут "лучшие способы сохранения данных", можно создать соответствующий контент, который не только отвечает на их запросы, но и повышает лояльность аудитории.
Мне, походу, надо сосредоточиться на статьях с разбором тестовых ?
*✅*Открытый доступ к статистике:
Хочу предоставить Вам возможность самостоятельно ознакомиться с отчетами и статистикой. Я сделала доступ к моему счетчику открытым!
Используйте эту ссылку: https://metrika.yandex.ru/dashboard?id=96707090 ?
Пользуйтесь на здоровье!
☝️? Важное объявление для тех кто хочет попасть на .. последний поток по SQL и Python! Заявка на мой курс тут.
? Подошел к концу текущий поток моего обучающего курса по SQL и Python(Pandas). Я сама не верю, что провела уже два потока. Когда я писала этот курс, то потратила огромное количество сил и энергии и когда вела его, то тоже старалась много отдать, быть на связи, помогать даже с резюме и отвечать на разные вопросы иногда даже просто "за жизнь".
Это крутое время, проведенное вместе! Тем не менее, как говорится, "все хорошее - когда-то заканчивается". И вот, я хочу объявить, что сейчас будет последний поток в обозримом будущем, так как летом я буду занята собственным обучением и проектами.
*? Так что стартует набор на крайний поток обучения!
?* Дата потока открытая. Начнем, как только наберется достаточное количество участников.
???? Если вы хотите присоединиться к потоку и расширить свои знания SQL и Python, не упустите эту возможность! Присоединяйтесь к нашей группе и начнем это захватывающее образовательное путешествие вместе!
? Спасибо за ваш интерес и участие! Многие просили программу обучения. ? Подробная программа, вот она. Там в конце еще отзывы есть.
Оставляйте заявку в гугл-форме на курс, ну или пишите напрямую @Valeria_Shuvaeva
Вы тоже сможете вырасти до хардового аналитика уровня Middle+. Как?
Добавьте к своим скилам навыки в проектировании архитектуры и интеграций веб-сервисов!
Пять месяцев назад я уже писала про этот курс. Сейчас пишу еще раз, потому что у курса вышло полезное обновление, уже доступное ученикам, независимо от того, когда они его купили.
—————
? Первое: в портфолио включили примеры интеграций от крупных BigTech-компаний. Это позволит вам понять, как технологии применяются в реальных бизнес-контекстах.
? Второе: обновили портфолио. Теперь в нём есть задания повышенного уровня сложности для каждой темы. Это небольшие реальные проекты, с помощью которых можно не только проверить, но и улучшить свои навыки!
✔️Третье: вышел новый модуль про проектирование баз данных - нормализация, транзакции, основы DWH, индексы.
—————
• Результат после прохождения курса: 15 рабочих проектов в портфолио-резюме
• Доступ к урокам и всем обновлениям останется навсегда
• Фундаментальная база
• Всю программу и отзывы смотрите в боте курса
Когда перейдете в бот курса, то получите бесплатные открытые уроки по архитектуре и интеграциям. Польза ?
https://t.me/studyit_help_bot?start=worr
Скидка на курс от канала
— 1 000₽ на Stepik по промокоду WORR до 30 апреля.
✅ Тестовое. Задачка по SQL. Просматривала я аналитические каналы и вижу интересное тестовое. У меня мозг на автомате начал накидывать варианты и уже прям не терпелось написать скрипт.
Думаю это будет полезным для всех.
Итак, есть две таблички: с отделами и данными по зарплате у сотрудников и их начальников.
Создадим быстренько датафреймы, на котором потренируемся прям в юпитер ноутбуке с помощью библиотеки pandasql. Про эту библиотеку пост тут.
data = {'id': [1,2,3,4,5,6],
'name': ['Финансы','Риски','Розница','Безопасность','ДКК','Аналитика']}
Departament = pd.DataFrame(data)
data = { 'id': [1,2,3,4,5,6],
'id\_head': [1, 1,2,4,5,3],
'id\_dep':[2,2,3,3,8,4],
'sal': [45000,80000,100000,65000,35000,50000] }
Personal = pd.DataFrame(data)
?Задание 1. Вывести отдел с наибольшим числом сотрудников.
Самый простой способ:
select d.name as Department,
count(p.id) as count\_personal
from Personal p
join Departament d on d.id = p.id\_dep
group by 1
order by 1 desc
limit 1
Но в случае если у нескольких отделов одинаковое количество сотрудников, то результат выдаст один отдел, а не два.
Поэтому рекомендую сделать второй вариант через подзапрос. Можете потренироваться - написать сами.
?Задание 2. Вывести список сотрудников, получающих заработную плату выше, чем у руководителя. Вот тут уже интересненько.
Это можно реализовать соединив таблицу с этой же модифицированной таблицей. Сделаем табличку с помощью группировки, чтобы был уникальный сотрудник и его з/пл. И присоединим ее с помощью left join к основной по ключу p1.id_head = p2.id.
Тогда в одной строке будет и з/пл сотрудника и з/пл его руководителя. И потом оставляем тех, у кого sal>sal_head
select p1.id
from Personal p1
join (select id,sal as sal\_head
from Personal
group by 1) p2 on p1.id\_head = p2.id
where sal>sal\_head
? Тут ноутбук с решением.
Канал для поиска исполнителей для разных задач и организации мини конкурсов
Last updated 3 months ago
Новые и перспективные Web3 игры с добычей токенов.
Чат: https://t.me/Crypto_Wolf_Chat
Правила чата смотрите в описании чата.
Все свои вопросы направляйте в чат или главному модератору чата: @Exudna_118
По теме сотрудничества: @Zombini
Last updated 2 months, 2 weeks ago