Untitled
unknown
plain_text
a year ago
2.5 kB
3
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