Расписание и стоимость
Зачем на странице код?
Это пример, как программирование помогает сделать страницу с данными из API за считанные минуты. Разработка сайта затягивалась, а показать программу курсов давно пора. Чтобы не откладывать запуски соорудил скрипт, который обращается по API к Coda. io (что-то между Google Sheets и Notion) и выдает HTML содержимое тела страницы. Ниже приведен весь код, необходимый для генерации в Jupyter+ проработанная версия. Можете оценить простоту или даже повторить. Кстати, на техническую реализацию я потратил не более 40 минут!
Дима Р.
Преподаватели
Дмитрий Родин
10 лет в индустрии маркетинговых технологий. Создатель CDP платформы Rockstat, которая распространяется бесплатно и с открытым исходным кодом, основатель Digital God. Ранее CEO Xeteq, CTO Блондинка.ру, Nectarin, Adventum; CMO Plazius (Сбербанк).
Алексей Куличевский
Я аналитик — помогаю бизнесам принимать правильные решения на основе данных. Сейчас я работаю главным по данным в компании Osome. Ранее я основал аналитический сервис Oh My Stats, работал в Гетт, Групоне и Островке. Преподаю в Физтехе, пишу блог.
Алексей Макаров
Продуктовый аналитик в сервисе CoMagic, автор блога datalytics.ru и канала Datalytics. Большой фанат автоматизации, анализа данных. Давно забыл про Excel и перешёл на Pandas
Примеры программ обучения от новичка до профи
DG-Map
In [15]:
print(f'Дата генерации содержимого: {datetime.now().strftime("%d.%m.%Y")}')

for r in courses:
    print_row(r)
Дата генерации содержимого: 13.08.2019

Дивный мир Python для не-программистов.

A | Преподаватели: Дмитрий Родин, Алексей Макаров

Запланирован 11.08.2019 | Цена: очно 15,000₽, online 10,000₽.

4 по 4 ак.ч. 2/неделя [СР 19:30, ВС 17:00] => всего 16 ак.ч. + самостоятельная работа не менее 8 ак.ч.

Курс для тех, кто никогда не сталкивался с программированием. Здесь практически нет теории. Обучение производится на реальных данных, полученных из CRM и систем-веб аналитики.

Заявка на участие Подробнее


Python для маркетинга и аналитики

MAT | Преподаватели: Дмитрий Родин, Алексей Макаров

Запланирован 27.08.2019 | Цена: очно 21,000₽, online 14,000₽.

7 по 4 ак.ч. 2/неделя [ВС 13:00, ВТ 19:30] => всего 28 ак.ч. + самостоятельная работа не менее 14 ак.ч.

Этот курс - лучшее начало для изучения прикладного применения Python. На курсе научитесь читать и писать CSV/JSON файлы, взаимодействовать с сервисами по API, анализировать данные используя Pandas, автоматически отправлять результаты конечным потребителям.

Заявка на участие Подробнее


Сквозная аналитика / End-to-End

MEE | Преподаватели: Дмитрий Родин

Прием заявок | Цена: очно 27,000₽, online 21,000₽.

6 по 4 ак.ч. 1.5/неделя [] => всего 24 ак.ч. + самостоятельная работа не менее 12 ак.ч.

Одна из важнейших тем последних лет. Готовые инструменты не решают всех потребностей и приходится изобретать свое решение. Какими путями совмещать данные, как пересчитывать атрибуцию рассказывается на этом курсе.

Заявка на участие


Автоматизация сбора данных с основных систем

MDC | Преподаватели: Дмитрий Родин, Алексей Макаров

Прием заявок | Цена: очно 28,000₽, online 21,000₽.

8 по 4 ак.ч. 1.5/неделя [] => всего 32 ак.ч. + самостоятельная работа не менее 16 ак.ч.

Получать данные с основных рекламных систем Yandex Direct, Google AdWords, Facebook, Vk и аналитических сервисов Google Analytics, Yandex Metrika. Сохранение в ClickHouse и BigQuery. Автоматизировать при помощи Airflow и Papermill

Заявка на участие Подробнее


Продуктовая аналитика на Python

PA | Преподаватели: #r6

Прием заявок | Цена: очно 27,000₽, online 21,000₽.

6 по 4 ак.ч. 1.5/неделя [] => всего 24 ак.ч. + самостоятельная работа не менее 12 ак.ч.

Настроить сбор сбор событий, продуктовые метрики, кластеризация пользователей.

Заявка на участие


Визуализация данных и отчеты

VIS | Преподаватели: Алексей Куличевский

Прием заявок | Цена: очно 18,000₽, online 12,000₽.

4 по 4 ак.ч. 1.5/неделя [] => всего 16 ак.ч. + самостоятельная работа не менее 8 ак.ч.

Вы узнаете, как правильно выбирать графики, какие палитры для каких целей. Будет использоваться визуализация в Jupyter и Metabase

Заявка на участие


Data Warehouse на ClickHouse

CH | Преподаватели: Дмитрий Родин

Прием заявок | Цена: очно 27,000₽, online 18,000₽.

6 по 4 ак.ч. 2/неделя [] => всего 24 ак.ч. + самостоятельная работа не менее 12 ак.ч.

Использование движков таблиц MergeTree, CollapsingMergeTree Кластеризация серверов ClickHouse. ReplicatedMergeTree Специальный табличные движки: Buffer Справочники Dictionary, кейсы использования

Заявка на участие


Продвинутый невидимый парсинг

SCR | Преподаватели: Дмитрий Родин

Прием заявок | Цена: очно 27,000₽, online 18,000₽.

6 по 4 ак.ч. 1.5/неделя [] => всего 24 ак.ч. + самостоятельная работа не менее 12 ак.ч.

Если по каким-то причинам нет возможности использовать API, этот курс научит собирать (scraping) данные с ресурсов в интернете без использования API.

Полноценная эмуляция пользователей используя Puppeter. Масштабирование: параллельный запуск в контейнерах, оптимальные способы получения большого кол-ва ip адресов. Классический подход, используя Scrapy и его недостатки.

Заявка на участие


Повелитель триггерных коммуникаций

MRC | Преподаватели: Дмитрий Родин

Прием заявок | Цена: очно 36,000₽, online 24,000₽.

8 по 4 ак.ч. 1/неделя [] => всего 32 ак.ч. + самостоятельная работа не менее 16 ак.ч.

Курс научит самостоятельно строить цепочки действий пользователя, находить в них паттерны и мгновенно реагировать на них используя Email, Web-Push, SMS коммуникации. Организация обработки потока событий в реальном времени, проверка соответствия шаблону Подключение подключение Email транспорта Счетчики в письмах: сервер пиксель-трекинга, запись и аггрегация данных из событий. Устройство Web-Push, самостоятельный сбор и сохранение подписок. WebWorker для обработки сообщений на стороне браузера, организация отправки триггерных сообщеницй Интеграция с поставщиком SMS сообщений, организация отправки триггерных SMS

Заявка на участие


Заклинатель мессенджров

MB | Преподаватели: Дмитрий Родин

Прием заявок | Цена: очно 36,000₽, online 24,000₽.

8 по 4 ак.ч. 1/неделя [] => всего 32 ак.ч. + самостоятельная работа не менее 16 ак.ч.

Продвинутый уровень использования мессенджеров в качестве интерфейсов ботов, рассылки оповещений, автоматизации сложных маркетинговых стратегий используя автоматизацию обычных пользовательских действий. WhatsApp, Telegram, VK

Заявка на участие


ML & AI для маркетинга

MML | Преподаватели: Алексей Куличевский

Прием заявок | Цена: очно 27,000₽, online 21,000₽.

6 по 4 ак.ч. 1.5/неделя [] => всего 24 ак.ч. + самостоятельная работа не менее 12 ак.ч.

Сила Machine Learning (ML) и Artificial Intelligence (AI) для эффективного решения маркетинговых задач

Заявка на участие


Классический SQL

SQL | Преподаватели: Алексей Куличевский

Прием заявок | Цена: очно 18,000₽, online 12,000₽.

4 по 4 ак.ч. 1.5/неделя [] => всего 16 ак.ч. + самостоятельная работа не менее 8 ак.ч.

Реляционные базы данных и классический SQL на примере PostgreSQL. Колоночные базы данных, их специфика на примере Google BigQuery

Заявка на участие


Мобильная аналитика: разметка, трекинг, end-to-end

MA | Преподаватели: Дмитрий Родин

Прием заявок | Цена: очно 36,000₽, online 28,000₽.

8 по 4 ак.ч. 1.5/неделя [] => всего 32 ак.ч. + самостоятельная работа не менее 16 ак.ч.

Используя специально подготовленные тренажеры-конструкторы будет пройден полный цикл организации системы мобильной аналитики : начиная от установки событий и определения источника установки, заканчивая связью с внутренней бД

Заявка на участие


Rockstat Essentials

RST | Преподаватели: Дмитрий Родин

Прием заявок | Цена: очно 150,000₽.

30 по 4 ак.ч. 2.5/неделя [] => всего 120 ак.ч. + самостоятельная работа не менее 60 ак.ч.

Курс сосредоточенный на изучении основных возможностей Rockstat для построения собственной платформы автоматизации маркетинга. Создание конфигурации "под себя". Внедрение дополнительных сервисов с полной интеграцией в платформу. Особенности и предусмотренные пользовательские параметры. Архитектура платформы, возможности для межсервисной коммуникации. Жизненный цикл запросов, служебные роли и роли пользовательских сервисов. Создание собственных сервисов для реактивной обработки событий по отдельности.

Заявка на участие


Digital Rockstar

DR | Преподаватели: Дмитрий Родин, Алексей Куличевский

Прием заявок | Цена: очно 75,000₽.

20 по ак.ч. 2/неделя [] => всего 0 ак.ч. + самостоятельная работа не менее 0 ак.ч.

Вы научитесь автоматизировать взаимодействие с рекламными и аналитическими сервисами, строить dashboard-ы и автоматически создавать сложные отчеты с данными из нескольких источников. Курс для маркетологов, продактов и аналитиков.

Заявка на участие Подробнее


Скидки для увлеченных
Если вам приглянулись несколько модулей, это здорово и похвально! А чтобы поддержать вас в этом начинании дарим скидку 10% на 3-й модуль и 20% на 4-й и все последующие. Курс Digital Rockstar считается за 3 модуля. Распространяется только на физлиц. Статус может быть отозван, если в течение полугода им не пользовались.
Скидка 10% на 3-й модуль
Скидка 20% на 4-й модуль и все последующие
...
3
4+

Код для генерации страницы

Сперва приведу пример "простого" кода, именно в таком стиле учатся программировать.

In [3]:
# Импортируем необходимые библиотеки.
import requests
import orjson
from datetime import datetime
import arrow
from IPython.display import display, Markdown
from jinja2 import Environment, Template


# Устанавливаем константы
# CODA_API_KEY = '....'
COURSES_DOC_NAME = 'DG Main'
CODA_ENDPOINT = 'https://coda.io/apis/v1beta1'
COURSES_TBL='Courses & Modules'


# Функция для сортировки курсов по приоритету запуска
def sort_cources(cources):
    return [*sorted(cources, key=lambda x: x['priority'], reverse=True)]

def format_money(amount):
    return '{:0,.0f}₽'.format(int(amount))

jenv = Environment()
jenv.filters['format_money'] = format_money
course_template = jenv.from_string("""<a name="to_{{key_lower}}"></a>

#### {{title}}<br>{{key}} | Преподаватели: {{lectors}}

{% if start_date %}**{{state}} {{start_date}}**{% else %}{{state}}{% endif %} | Цена: очно {{price|format_money}}{% if price_online %}, online {{price_online|format_money}}{% endif %}. 

{{lessons}} по {{lesson_duration}} ак.ч. {{per_week}}/неделя [{{days}}]  => 
всего {{total_ahours}} ак.ч. + самостоятельная работа не менее {{homework_ahours}} ак.ч.


{{description}}

[Заявка на участие](/join?course={{key}})

---

""")

def print_row(row):
    row['start_date'] = arrow.get(row['start_date']).to('Europe/Moscow').format('DD.MM.YYYY') if row['start_date'] else ''
    row['key_lower'] = row['key'].lower()
    display(Markdown(course_template.render(**row)))
In [4]:
auth_headers = {
    'Authorization': 'Bearer ' + CODA_API_KEY
}
docs = requests.get(f'{CODA_ENDPOINT}/docs', headers=auth_headers)
In [5]:
doc_id = None
for doc in docs.json()['items']:
    if doc['name'] == COURSES_DOC_NAME:
        doc_id = doc['id']
In [6]:
tables = requests.get(f'{CODA_ENDPOINT}/docs/{doc_id}/tables', headers=auth_headers)
table_id = None
for table in tables.json()['items']:
    if table['name'] == COURSES_TBL:
        table_id = table['id']
In [7]:
rows_resp = requests.get(f'{CODA_ENDPOINT}/docs/{doc_id}/tables/{table_id}/rows', headers=auth_headers).json()['items']
cols = {}
for col in requests.get(f'{CODA_ENDPOINT}/docs/{doc_id}/tables/{table_id}/columns', headers=auth_headers).json()['items']:
    cols[col.get('id')] = col.get('name')
In [8]:
courses = [{cols[k]: v for k, v in row['values'].items()} for row in rows_resp]
In [9]:
courses = [e for e in sort_cources(courses) if e['enabled']]
for r in courses:
    print_row(r)
    break # чтобы только одну строку напечатать, нам тут больше не надо

Python для не-программистов. Вводный курс
A| Преподаватели: Дмитрий Родин, Алексей Макаров

Запланирован 11.08.2019 | Цена: очно 15,000₽, online 10,000₽.

4 по 4 ак.ч. 2/неделя [СР 19:30, ВС 17:00] => всего 16 ак.ч. + самостоятельная работа не менее 8 ак.ч.

Курс для тех, кто никогда не сталкивался с программированием. Здесь практически нет теории и . Обучение производится на реальных данных, полученных из CRM и систем-веб аналитики.

Заявка на участие


Будьте в курсе
Канал с оповещениями
Новости и оповещения в канале @digitalgods, дополнительная информация по руководствам в канале @kissmystat
Чат для вопросов
Чат для практических вопросов в т. ч. из руководств TG @kissmystats. Отдельный чат для мероприятий @digitalgodhub
Сервисный бот
Схема проезда, feedback, запрос доступа, регистрация на будущие мероприятия у бота в TG @digitalgodbot

А как написали бы программисты?

Код написанный с помощью классов поддерживающий запросы на изменение данных и пр. Но так просто вы его не узанете, отправьте заявку на интересующий вас курс, мы откроем вам раздел, как только проверим ее.

Будет что-то вроде

class CodaClient:
    """..."""
In [10]:
coda = CodaClient(CODA_API_KEY)
coda.set_doc(COURSES_DOC_NAME)
courses = coda.get_table(COURSES_TBL)

Код для отображения данных неизменен. Вывод данных ничем не отличается

In [11]:
courses = [e for e in sort_cources(courses) if e['enabled']]
for r in courses:
    print_row(r)
    break # чтобы только одну строку напечатать, нам тут больше не надо

Python для не-программистов. Вводный курс
A| Преподаватели: Дмитрий Родин, Алексей Макаров

Запланирован 11.08.2019 | Цена: очно 15,000₽, online 10,000₽.

4 по 4 ак.ч. 2/неделя [СР 19:30, ВС 17:00] => всего 16 ак.ч. + самостоятельная работа не менее 8 ак.ч.

Курс для тех, кто никогда не сталкивался с программированием. Здесь практически нет теории и . Обучение производится на реальных данных, полученных из CRM и систем-веб аналитики.

Заявка на участие


Так как же этого добиться?

Прямо тут скрыт продвинутый вариант руководства, как сделать универсальный класс, для изменения данных и автоматического обхода таблица. Как только удастся придумать не слишком сложную но и не простую задачку, в чате @kissmystats, появится оповещение. Защита снимется для тех, кто разберется с задачкой.