Untitled
unknown
plain_text
2 years ago
2.5 kB
6
Indexable
import pandas as pd
import numpy as np
import plotly.graph_objs as go
from plotly.offline import iplot
# Предполагается, что df уже содержит нужные данные, здесь будет симулирована часть работы с данными
# Симулируем данные DataFrame, так как исходные данные недоступны
np.random.seed(0)
dates = pd.date_range(start="2020-01-01", end="2020-12-31", freq="D")
data = {
"transaction_date": np.random.choice(dates, size=100),
"MO_dealer_monthly_ton_GZPN": np.random.rand(100) * 1000,
"client_inn_dil": np.random.randint(10000, 99999, size=100),
"label": np.random.choice(['dil_MO', 'dil_MO+KP', 'dil_KP'], size=100),
}
df = pd.DataFrame(data)
# Фильтруем данные по кластеру label
filtered_df = df[df['label'].isin(['dil_MO', 'dil_MO+KP'])]
# Группируем данные по дате транзакции для суммарного объема MO_dealer_monthly_ton_GZPN
mo_tons_by_date = filtered_df.groupby('transaction_date')['MO_dealer_monthly_ton_GZPN'].sum()
# Группируем данные по дате транзакции для подсчета уникальных client_inn_dil внутри фильтрованных кластеров
unique_clients_by_date_mo = filtered_df.groupby('transaction_date')['client_inn_dil'].nunique()
# Объединяем обе серии в один DataFrame
mo_df = pd.DataFrame({
'MO_dealer_monthly_ton_GZPN': mo_tons_by_date,
'unique_client_inn_dil_mo': unique_clients_by_date_mo
}).reset_index()
# Создаем трассировки для визуализации данных
trace0_mo = go.Scatter(
x = mo_df['transaction_date'],
y = mo_df['MO_dealer_monthly_ton_GZPN'],
name = 'MO Dealer Monthly Ton GZPN',
yaxis = 'y1'
)
trace1_mo = go.Scatter(
x = mo_df['transaction_date'],
y = mo_df['unique_client_inn_dil_mo'],
name = 'Unique Client INNs (MO)',
yaxis = 'y2'
)
# Настройка макета графика
layout_mo = go.Layout(
title='Статистика по MO дилерам',
yaxis=dict(title='MO дилерский месячный объем (GZPN)'),
yaxis2=dict(title='Число уникальных клиентов (MO)', overlaying='y', side='right')
)
# Создаем объект Figure и визуализируем его
fig_mo = go.Figure(data=[trace0_mo, trace1_mo], layout=layout_mo)
iplot(fig_mo)
Editor is loading...
Leave a Comment