Чат поддержки

Практикум
Привет! Это поддержка Практикума 👋 Если что-то не получается — постараемся помочь. Пишите в чат или выберите другой способ связи

пт, 2 декабряв 17:21

Мы уже начали заниматься вашим вопросом, ответим в ближайшее время

Практикум

Здравствуйте!

Поддержка не сможет помочь с вопросами, связанными с теорией или задачам из курса «Системный аналитик» — в этой ситуации рекомендуем вам обратиться к вашему преподавателю в чате в Slack.

Если же у вас возникнут иные вопросы — обязательно пишите, будем рады помочь :)

17:24

Выбрать способ связи

Перейти в профиль Практикума

Поменять когорту

Выйти из профиля

Добавить аккаунт

Дополнительные материалы

спринт Дополнительные материалы

Как учиться на курсе

4/4

К проекту 2

0/1

К спринту "Реализация системы"

2/2

К спринту "Поддержка, обслуживание и оценка результатов"

1/1

SQL и системы визуализации

11/11

Введение

Несколько вопросов перед началом обучения

Техническое задание

Интерфейс программы DataLens

Подключение к базе данных

Строим круговую диаграмму

Строим линейный график

Строим прочие диаграммы

Собираем всё вместе

Заключение

Обратная связь

SQL и Python

7/10

Введение

Установка Jupyter Notebook

База данных

Библиотека SQLAlchemy

Пример исследования. Гистограмма

Пример исследования. Самые долгие интернет-сессии

Пример исследования. Выручка по месяцам

Мини-проект для самопроверки

Заключение

Обратная связь

Мягкие навыки аналитика. Коммуникация и активное слушание

4/4

Мягкие навыки аналитика. Постановка задач

5/5

Мягкие навыки аналитика. Планирование

4/4

Пригласить друзей

Пример исследования. Выручка по месяцам

Задание: изучите, как менялась сумма выручки по месяцам.

Подключитесь к базе, как в предыдущем уроке:

Скопировать кодPYTHON

# Импортируем библиотеки
import pandas as pd
from sqlalchemy import create_engine

# Задаём параметры подключения к БД,
# их можно узнать у администратора БД.
db_config = {
'user': 'praktikum_student', # имя пользователя
'pwd': 'Sdf4$2;d-d30pp', # пароль, который был задан при создании подключения
'host': 'rc1b-wcoijxj3yxfsf3fs.mdb.yandexcloud.net', # адрес сервера
'port': 6432, # порт подключения
'db': 'data-analyst-telecom', # название базы данных
}

# Формируем строку соединения с БД
connection_string = 'postgresql://{}:{}@{}:{}/{}'.format(
db_config['user'],
db_config['pwd'],
db_config['host'],
db_config['port'],
db_config['db']
)
# Подключаемся к БД
engine = create_engine(connection_string)

В подзапросе сформируйте месяц и посчитайте для каждого месяца выручку. Но тут нужно сформировать не самый простой запрос — высчитать выручку на пользователя по месяцам.

Скопировать кодPYTHON

query = '''
WITH agr_calls AS (SELECT user_id,
DATE_TRUNC('month', call_date::timestamp) AS mo,
CEILING(SUM(duration)) AS agr_duration
FROM calls
GROUP BY 1,2),
agr_mess AS (SELECT user_id,
DATE_TRUNC('month', message_date::timestamp) AS mo,
COUNT(id) AS agr_message
FROM messages
GROUP BY 1,2),
agr_int AS (SELECT user_id,
DATE_TRUNC('month', session_date::timestamp) AS mo,
CEILING(SUM(mb_used)/2014) AS agr_gb
FROM internet
GROUP BY 1,2),
raw_1 AS (SELECT agr_calls.user_id,
agr_calls.mo,
agr_duration,
agr_message,
agr_gb
FROM agr_calls FULL JOIN agr_mess ON agr_calls.user_id = agr_mess.user_id
AND agr_calls.mo = agr_mess.mo
FULL JOIN agr_int ON agr_calls.user_id = agr_int.user_id
AND agr_calls.mo = agr_int.mo),
raw_relis AS (SELECT raw_1.user_id,
raw_1.mo,
SUM(CASE WHEN agr_duration > minutes_included THEN rub_per_minute*(agr_duration - minutes_included)+rub_monthly_fee ELSE rub_monthly_fee END)
+SUM(CASE WHEN agr_message > messages_included THEN rub_per_message*(agr_message - messages_included)+rub_monthly_fee ELSE rub_monthly_fee END)
+SUM(CASE WHEN agr_gb > mb_per_month_included THEN rub_per_gb*(agr_gb - mb_per_month_included)+rub_monthly_fee ELSE rub_monthly_fee END) AS revenue
FROM raw_1 JOIN users ON raw_1.user_id = users.user_id
JOIN tariffs ON users.tariff = tariffs.tariff_name
GROUP BY 1,2)
SELECT mo,
SUM(revenue)
FROM raw_relis
GROUP BY mo
ORDER BY mo
'''
df = pd.io.sql.read_sql(query, con=engine)
display(df)

Получаем результат:

Теперь можно строить итоговый график. Для отображения динамики во времени подойдёт линейный график.

Скопировать кодPYTHON

plt.figure(figsize=(15,5), dpi= 80)
plt.plot('mo', 'sum', data=df, color='tab:red', linestyle='--', marker='o')
plt.xticks(ticks=df['mo'], labels=df['mo'],
rotation=45, fontsize=12, horizontalalignment='center', alpha=.7)
plt.yticks(fontsize=12, alpha=.7)
plt.xticks(fontsize=12, alpha=.7)
plt.title("Изменение выручки помесячно", fontsize=16)
plt.grid(axis='both', alpha=.3)
plt.show()

Задание выполнено.

К следующему уроку
Краткий пересказ урока
beta

Курсы

Вводный модуль

Понимание профессии системного аналитика

Разработка требований

Проект 1. Спецификация требований ко второму релизу Chatty

SQL для аналитиков

Моделирование данных

Проект 2. Моделирование данных и работа с базой данных интернет-магазина «Накарабине»

Моделирование процессов

Пользовательские интерфейсы

Agile-практики

Проект 3. Бэклог приложения для сети клиник «Вита»

Трудоустройство

Архитектура системы

Программные интерфейсы

Проект 4

Реализация системы

Поддержка, обслуживание и оценка результатов

Дипломный проект

Дополнительные материалы

x