рдкрд╛рдпрдерди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рд╡рд░ рдмреАрдЖрдИ рдХреЙрд╣реЛрд░реНрдЯ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рджреЛрд╣рд░рд╛рдПрдВ

рд╢реБрдн рджреЛрдкрд╣рд░, рдкреНрд░рд┐рдп рдкрд╛рдардХреЛрдВ! рдЗрд╕ рдкреНрд░рдХрд╛рд╢рди рдХреЛ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдХрд╛рд░рдг рдПрдХ рд╡реЗрдмрд┐рдирд╛рд░ рдерд╛, рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ Youtube рдкрд░ рджреЗрдЦрд╛ред рд╡рд╣ рдмрд┐рдХреНрд░реА рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рдерд╛ред рд▓реЗрдЦрдХ рдиреЗ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Power BI рдбреЗрд╕реНрдХрдЯреЙрдк рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдореИрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╡реАрдбрд┐рдпреЛ рдХрд╛ рд▓рд┐рдВрдХ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рддрд╛рдХрд┐ рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдПрдХ рд╡рд┐рдЬреНрдЮрд╛рдкрди рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рдорд╛рдирд╛ рдЬрд╛рдП, рд▓реЗрдХрд┐рди рд╡рд░реНрдгрди рдХреЗ рджреМрд░рд╛рди рдореИрдВ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдирд┐рд░реНрдгрдп рдХреЗ рддрд░реНрдХ рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд╕рдордЭрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореВрд▓ рд╕реНрд░реЛрдд рдХреЛ рдмрд┐рдЧрд╛рдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛ред рдЗрд╕ рд╡реЗрдмрд┐рдирд╛рд░ рдиреЗ рдореБрдЭреЗ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рджрд┐рдпрд╛ рдХрд┐ рдкрдВрдбреЛрдВ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде DAX рд╕реВрддреНрд░реЛрдВ рдХреА рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреЛ рджреЛрд╣рд░рд╛рдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛ред

рджреЛ рдмрд┐рдВрджреБ рдЬрд┐рди рдкрд░ рдореИрдВ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рд╕рд╛рдордЧреНрд░реА рд╢реБрд░реБрдЖрддреА рд╡рд┐рд╢реНрд▓реЗрд╖рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдкреНрд░реЗрдд рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ рдкрд╛рдпрдерди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдЕрдкрдирд╛ рдкрд╣рд▓рд╛ рдХрджрдо рдЙрдард╛ рд░рд╣реЗ рд╣реИрдВред рдЖрджрд░реНрд╢ рдпрджрд┐ рдкрд╛рдардХ рдкрд╛рд╡рд░ рдмреАрдЖрдИ рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВред рджреВрд╕рд░реЗ, рдЪреВрдВрдХрд┐ DAX рдЧрдгрдирд╛ рдкреНрд░реЗрд░рдгрд╛ рд╕реНрд░реЛрдд рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддреА рд╣реИ, рдореИрдВ рдЬрд╣рд╛рдБ рддрдХ рд╕рдВрднрд╡ рд╣реЛ рд▓реЗрдЦрдХ рдХреЗ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреА "рдкреНрд░рддрд┐рд▓рд┐рдкрд┐" рдХрд░реЗрдЧрд╛, рдФрд░ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдореБрдЦреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдкреНрд░рддрд┐рдорд╛рдиреЛрдВ рд╕реЗ рдкреНрд░рд╕реНрдерд╛рди рд╣реЛрдЧрд╛ред

рдкрд░рд┐рдЪрдп рдХреЗ рд╕рд╛рде, рдмрд╕ рдЗрддрдирд╛ рд╣реАред рдЖрдУ рдпрд╛рддреНрд░рд╛ рд╢реБрд░реВ рдХрд░реЗрдВ!

рд╣рдо JupyterLab рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рд╕рднреА рдЧрдгрдирд╛ рдХрд░реЗрдВрдЧреЗред рд▓реИрдкрдЯреЙрдк рд╕рдорд╛рдзрд╛рди ( рд▓рд┐рдВрдХ ) рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

рдкрд╛рд╡рд░ рдХреНрд╡реЗрд░реА рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛ рдХреЛ Power BI рдореЗрдВ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдПрдХ рджреГрд╢реНрдп рд╕рдВрдкрд╛рджрдХ рд╣реИ рдЬреЛ M рднрд╛рд╖рд╛ рдореЗрдВ рдкреНрд░рд╢реНрди рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ)ред рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рдпрдо рдХрд╛ рдкрд╛рд▓рди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП: рд╕рднреА рдбреЗрдЯрд╛ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдкрд╛рд╡рд░ рдХреНрд╡реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдкрд╛рд╡рд░ рдзреБрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЧрдгрдирд╛ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░рд╛ рдореБрдЦреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкрдВрдбреЛрдВ рд╣реИ, рд╣рдо рддреБрд░рдВрдд рдЗрд╕рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

%%time
#   
path_to_data = "C:/Users/Pavel/Documents/Demo/"
# 
df = pd.read_csv(os.path.join(path_to_data, "ohortAnalysis_2016_2018.csv"), sep=";", parse_dates=["date"], dayfirst=True)

рд╣рдо рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рд▓реЗрдиреЗ рд╡рд╛рд▓реЗ рд╡рд░реНрдЧреЛрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рдирдЯрд╛рдЗрдо рдкрд░ рдХреЛрдб рдХреА рд▓рд╛рдЗрдиреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВрдЧреЗред рд░реАрдб рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рдкрде рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдУрдПрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рд▓реИрдкрдЯреЙрдк рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдбреЗрдЯрд╛рд╕реЗрдЯ рд╕реНрд╡рдпрдВ рдмреЗрддрд░рддреАрдм рдврдВрдЧ рд╕реЗ рдмрдирд╛ рд╣реИред CSV рдлрд╝рд╛рдЗрд▓ рдореЗрдВ 1,048,575 рд▓рд╛рдЗрдиреЗрдВ рд╣реИрдВред Read_csv () рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рдкрдврд╝рдирд╛ рдЖрдорддреМрд░ рдкрд░ рд╕реАрдзрд╛ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдХреЙрд▓рдо рд╡рд┐рднрд╛рдЬрдХ рдФрд░ рдХреЙрд▓рдо рдХреЛ рддрд┐рдерд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдпрджрд┐ рдХреЛрдИ рд╣реИ, рддреЛ рд╕рд░рдгреА рдореЗрдВред рдпрджрд┐ рдЬрд╛рдирдХрд╛рд░реА рдХреБрдЫ "рд╕реБрд╡рд┐рдзрд╛рдУрдВ" рдХреЗ рд╕рд╛рде рдЕрдкрд▓реЛрдб рдХреА рдЧрдИ рдереА, рддреЛ рдЖрдкрдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓рдо рдХреЗ рд▓рд┐рдП рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ред

рдбреЗрдЯрд╛ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдкреНрд░рдЧрддрд┐ рдХреЛ рдиреЗрддреНрд░рд╣реАрди рд░реВрдк рд╕реЗ рдореЙрдирд┐рдЯрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рд░ () рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдХреНрд╕рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╕рднреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдирд╣реАрдВ рдХрд╛рдЯрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реНрдкрд╖реНрдЯ рдЦрд╛рдорд┐рдпрд╛рдВ рдореМрдХреЗ рдкрд░ рд╣реА рддрдп рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВред

рдореЙрдбрд▓ рдореЗрдВ рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╡реЗрдмрд┐рдирд╛рд░ рдХреЗ рд▓реЗрдЦрдХ рдбреЗрдЯрд╛ рд╕рд░рдгреА рдХреЛ рд╕реЙрд░реНрдЯ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╣рд╛рдпрдХ рд╕реНрддрдВрдн рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕ рдХреЙрд▓рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдореЗрдВ рдлрд╝реАрд▓реНрдб рдХреА рд╕рд╣реА рдЧрдгрдирд╛ рдХреЛ рдЕрдзрд┐рдХ рдЖрд╕рд╛рдиреА рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдХреЛ рднреА рдХреНрд░рдордмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

%%time
#  ,      
df.sort_values(["user_id","date"], inplace = True)

рдЫрд╡рд┐

рдЕрдЧрд▓реЗ рдЪрд░рдг рдореЗрдВ, рдкрд╛рд╡рд░ рдмреАрдЖрдИ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рд╕рдорд╛рдзрд╛рди рдПрдХ рд╕рд╣рд╛рдпрдХ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдбреЗрдЯрд╛ рдореБрдЦреНрдп рд╕рд░рдгреА рдореЗрдВ рдЦреАрдВрдЪ рд▓рд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдирд╛ SUMMARIZE () рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЪрдпрдирд┐рдд рд╕рдореВрд╣реЛрдВ рдХреЗ рд▓рд┐рдП рдХреБрд▓ рдпреЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдкрд┐рд╡рдЯ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рддрд╛ рд╣реИ: df_groupby_user = SUMMARIZE(df;df[user_id];"first_date_transaction";MIN(df[date]);"total_amount_user";SUM(df[amount]);"count_transaction_user";COUNT(df[amount]))

рдкрдВрдбреЛрдВ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдЗрд╕рдХреЗ рд╕рдордХрдХреНрд╖ - рдЧреНрд░реБрдкрдмреА () рдлрд╝рдВрдХреНрд╢рди рд╣реИред рдЧреНрд░реБрдкрдмреА () рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдлреНрд░реЗрдо, рдЧреНрд░реБрдкреЗрдмрд▓ рдХреЙрд▓рдо рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдЕрдВрдд рдореЗрдВ рдЙрди рдХреЙрд▓рдореЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░реЗрдВ рдЬрд┐рдирдХреЗ рд▓рд┐рдП рдПрдХрддреНрд░реАрдХрд░рдг рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдкреНрд░рд╛рдкреНрдд рдкрд░рд┐рдгрд╛рдо reset_index () рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рд╕рд╛рдорд╛рдиреНрдп рдбреЗрдЯрд╛ рдлрд╝реНрд░реЗрдо рдХреЗ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдШрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдирд┐рд╖реНрдХрд░реНрд╖ рдореЗрдВ, рдЦреЗрддреЛрдВ рдХрд╛ рдирд╛рдо рдмрджрд▓реЗрдВред

%%time
#       user_id. 
df_groupby_user = df.groupby(by = ["user_id"]).agg({"date": "min", "amount": ["sum","count"]})
df_groupby_user.reset_index(inplace = True)
# 
new_columns = ["user_id","first_date_transaction", "total_amount_user","count_transaction_user"]
df_groupby_user.columns = new_columns

"рдкрд╣рд▓реА рдЦрд░реАрдж рдХреА рддрд╛рд░реАрдЦ" рдореАрдЯреНрд░рд┐рдХ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреНрд░рддрд┐ рдЧреНрд░рд╛рд╣рдХ рд▓реЗрдирджреЗрди рдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдкреВрд░реА рдЕрд╡рдзрд┐ рдХреЗ рд▓рд┐рдП рдЧреНрд░рд╛рд╣рдХ рдЦрд░реАрдж рдХреА рдХреБрд▓ рд░рд╛рд╢рд┐ рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред рдорд╛рдк рд▓реИрдкрдЯреЙрдк рдореЗрдВ рдЙрдирдХреЗ рдЖрд╡реЗрджрди рдХреЛ рдирд╣реАрдВ рдорд┐рд▓рд╛, рд▓реЗрдХрд┐рди рд╣рдо рдЙрдиреНрд╣реЗрдВ рдирд╣реАрдВ рд╣рдЯрд╛рдПрдВрдЧреЗред

рд╣рдо рд╡реЗрдмрд┐рдирд╛рд░ рдкрд░ рд▓реМрдЯрддреЗ рд╣реИрдВред рдирдП рдореАрдЯреНрд░рд┐рдХ "рдкрд╣рд▓реА рдЦрд░реАрдж рдХрд╛ рд╡рд░реНрд╖-рдорд╣реАрдирд╛" рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред DAX рд╕реВрддреНрд░: first_transaction = FORMAT(df_groupby_user[first_date_transaction];"YYYY-MM")

рдЫрд╡рд┐

рдкрд╛рдпрдерди рд╕рд┐рдВрдЯреИрдХреНрд╕ dt.strftime ('% Y-% m') рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЖрдк рдкрд╛рдпрдерди рдореЗрдВ рджрд┐рдирд╛рдВрдХ рдФрд░ рд╕рдордп рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдСрдирд▓рд╛рдЗрди рдкреНрд░рдХрд╛рд╢рдиреЛрдВ рдореЗрдВ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рдХрд╛ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рдорд┐рд▓реЗрдЧрд╛ред рдЗрд╕ рдХрджрдо рдкрд░, рдХреБрдЫ рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдСрдкрд░реЗрд╢рди рдХреЗ рд╕рдордп рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред

рдкрдВрдбреЛрдВ рдХреА рддрд░рд╣ рдкреНрд░рджрд░реНрд╢рди (24.8 рд╕реЗрдХрдВрдб) рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВред рдХреЛрдб рдХреА рд▓рд╛рдЗрди рдкрд┐рдЫрд▓реЗ рд╕рднреА рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдзреАрдореА рд╣реИред
рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рдХрд╛ рдпрд╣ рдЯреБрдХрдбрд╝рд╛ рд╕рдВрднрд╡ рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓рд╛ рдЙрдореНрдореАрджрд╡рд╛рд░ рдмрди рдЬрд╛рддрд╛ рд╣реИред

%%time
#  -
df_groupby_user["first_transaction"] = df_groupby_user["first_date_transaction"].dt.strftime('%Y-%m')

рдпрд╣ рдлрд┐рд░ рд╕реЗ рд╡реЗрдмрд┐рдирд╛рд░ рдкрд░ рд▓реМрдЯрдиреЗ рдХрд╛ рд╕рдордп рд╣реИред рдПрдХ рдкреНрд░рдореБрдЦ рдХреНрд╖реЗрддреНрд░ рджреНрд╡рд╛рд░рд╛ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХрд╛ рдПрдХ рд╕рдВрдШ рд╣реИред рддрдм рдЖрд╡рд╢реНрдпрдХ рдлрд╝реАрд▓реНрдб RELATED () рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореБрдЦреНрдп рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдЦреАрдВрдЪреА рдЬрд╛рддреА рд╣реИрдВред рдкрдВрдбреЛрдВ рдХреЗ рдкрд╛рд╕ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдорд░реНрдЬ (), рдЬреНрд╡рд╛рдЗрди (), рдХреЙрдиреНрдХреИрдЯ () рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкрд╣рд▓рд╛ рд╡рд┐рдХрд▓реНрдк рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИред

%%time
# 
df_final = pd.merge(df, df_groupby_user, how = "left", on = "user_id")

рдкрд╣рд▓реЗ рд▓реЗрдирджреЗрди рдХреА рддрд╛рд░реАрдЦ рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рдореБрдЦреНрдп рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдЧрд┐рд░ рдЧрдпрд╛, рддреЛ рдЖрдк рдбреЗрд▓реНрдЯрд╛ рдХреА рдЧрдгрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ (39.7 рд╕реЗрдХрдВрдб) рдХреЗ рд╕рдВрд╕рд╛рдзрди-рдЧрд╣рдирддрд╛ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдирд┐рд░реНрдорд╛рдг (рд▓реИрдореНрдмреНрдбрд╛ x: ...) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рдХреЛрдб рдкреБрдирд░реНрд▓реЗрдЦрди рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдЙрдореНрдореАрджрд╡рд╛рд░ рд╣реИред

%%time
#   "    "
df_final["delta_days"] = df_final["date"] - df_final["first_date_transaction"]
df_final["delta_days"] = df_final["delta_days"].apply(lambda x: x.days)

рдореБрдЦреНрдп рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рджрд┐рди рдХрд╛ рдбреЗрд▓реНрдЯрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдХреЙрд▓рдо рдбреЗрдЯрд╛ рдХреЛ рдХреЙрд╣реЛрд░реНрдЯреНрд╕ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕рд┐рджреНрдзрд╛рдВрдд: 0 (рдЬреЛ рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдкрд╣рд▓реА рдмрд┐рдХреНрд░реА рд╣реИ) - рдХреЙрд╣реЛрд░реНрдЯ 0; рдорд╛рди 0 рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ, рд▓реЗрдХрд┐рди 30 рд╕реЗ рдХрдо рдпрд╛ рдмрд░рд╛рдмрд░ 30 рд╣реИрдВ; рдорд╛рди 30 рд╕реЗ рдЕрдзрд┐рдХ, рд▓реЗрдХрд┐рди 90 рд╕реЗ рдХрдо рдпрд╛ рдмрд░рд╛рдмрд░ 90 рдЖрджрд┐ред рдЗрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, DAX рдореЗрдВ, рдЖрдк CEILING () рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдирд┐рдХрдЯрддрдо рдкреВрд░реНрдгрд╛рдВрдХ рддрдХ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЧреЛрд▓ рдХрд░рддрд╛ рд╣реИ, рджреВрд╕рд░реЗ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗ рдореВрд▓реНрдп рдХрд╛ рдПрдХ рдмрд╣реБред

рдЫрд╡рд┐

рдкрд╛рдпрдерди рдореЗрдВ, рдореБрдЭреЗ рдПрдХ рд╕рдорд╛рди рдЧрдгрд┐рддреАрдп рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рдорд┐рд▓рд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рдЧрдгрд┐рдд рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдЦреЛрдЬрдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ (рд╢рд╛рдпрдж рдореИрдВрдиреЗ рдЦрд░рд╛рдм рддрд░реАрдХреЗ рд╕реЗ рдЦреЛрдЬ рдХреА)ред рдЗрд╕рд▓рд┐рдП, рдореБрдЭреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдЬрд╛рдирд╛ рдкрдбрд╝рд╛ рдФрд░ рдХрдЯ () рдлрд╝рдВрдХреНрд╢рди рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдХреЛрд╣реЙрд░реНрдЯреНрд╕ рдореЗрдВ рдбреЗрдЯрд╛ рдлреИрд▓рд╛рдиреЗ рдХреЗ рдмрд╛рдж, NaN рдХреЛ 0 рдХреЗ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдорд╛рдиреЛрдВ рдореЗрдВ рдореИрдк рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╣рдо рдлрд╝рд┐рд▓рд░ () рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рд╢реНрд░реЗрдгреАрдмрджреНрдз рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рд╢реНрд░реЗрдгреА рдореЗрдВ рдПрдХ рдирдпрд╛ рдорд╛рди рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕ рдХреЛрдб рд╕реВрдЪреА рдХреЗ рдЕрдВрдд рдореЗрдВ, рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЗрдВрдЯ рдореЗрдВ рдмрджрд▓реЗрдВред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рдбреЗрдЯрд╛ рдлрд╝реНрд░реЗрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдкрд┐рд╡рдЯ рдЯреЗрдмрд▓ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╕рдордп, рдирдП рдХреЙрд╣реЛрд░реНрдЯ рдореВрд▓реНрдпреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдЕрдВрдд рдореЗрдВ рдкреНрд░рдХрдЯ рди рд╣реЛрдВред

%%time
#  . 
cut_labels_days = [x for x in range (30, 1230, 30)]
cut_bins_days = [x for x in range (0, 1230, 30)]
df_final["cohort_days"] = pd.cut(df_final["delta_days"], bins = cut_bins_days, labels=cut_labels_days, right = True)
%%time
#     .   fillna   !
df_final["cohort_days"] = df_final["cohort_days"].cat.add_categories([0])
df_final["cohort_days"].fillna(0, inplace = True)
%%time
#     .   fillna   !
df_final["cohort_days"] = df_final["cohort_days"].cat.add_categories([0])
df_final["cohort_days"].fillna(0, inplace = True)
#    .    ,  "0"        ,     
#    .
df_final["cohort_days"] = df_final["cohort_days"].astype(int)

Pivot_table () рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рдкрд┐рд╡рдЯ рддрд╛рд▓рд┐рдХрд╛ рдорд┐рд▓рддреА рд╣реИред рд╣рдореЗрдВ рдХрд╛рдлреА рд╕рд╛рд░реЗ рдХреЛрд╣рд░реНрдЯреНрд╕ рдорд┐рд▓рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдо рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдХреНрд░реАрди рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрдм рдХреЛрдИ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдорд╛рдорд▓рд╛ рд╕реБрд▓рдЭрддрд╛ рд╣реИ, рддреЛ рдЖрдк рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рд╕рдордп рдЕрдВрддрд░рд╛рд▓ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕рд╣рдпреЛрдЧрд┐рдпреЛрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреА рд╕реАрдорд╛ рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВред

%%time
#  
df_pivot_table = pd.pivot_table(df_final, values=["amount"], index=["first_transaction"], columns=["cohort_days"], aggfunc=np.sum, fill_value = 0)

рдЫрд╡рд┐

Power BI рдореЗрдВ, рдЗрд╕ рддрд░рд╣ рдХреЗ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдЫрд╡рд┐

рдЕрдЧрд▓реЗ рдЪрд░рдг рдХреА рд╕рд╛рдЬрд┐рд╢ рд╣реИред рд╕реНрдерд┐рддрд┐ рдХреА рдмрд╛рд░реАрдХрд┐рдпрд╛рдВ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдПрдХ рд░рд╛рд╢рд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд░рд╛рд╢рд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдкрд╛рд╡рд░ рдмреАрдЖрдИ рдореЗрдВ, рдмрд╕ рдЖрд╡рд╢реНрдпрдХ 'рддреНрд╡рд░рд┐рдд рдХрд╛рд░реНрд░рд╡рд╛рдИ' рдореЗрдиреВ рдЖрдЗрдЯрдо рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдбреАрдПрдПрдХреНрд╕ рд╕реВрддреНрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрдЧрд╛ред рдкрдВрдбреЛрдВ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕рд╛рде, рд╕реНрдерд┐рддрд┐ рдереЛрдбрд╝реА рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИред рд╣рдо рдореМрдЬреВрджрд╛ рдбреЗрдЯрд╛ рдлреНрд░реЗрдо рдХреЛ рдбрдмрд▓-рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рд╕рдореВрд╣рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХрдореНрд╕рдо () рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рдЪреВрдВрдХрд┐ рдкрд░рд┐рдгрд╛рдо рдЕрднреА рднреА рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЧреНрд░рд╛рдлрд╝ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдлрд╝реНрд░реЗрдо рдХреА рдПрдХ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдПрдВрдЧреЗред рд╕рдВрдЪрд┐рдд рдмрд┐рдХреНрд░реА рдореВрд▓реНрдп рдХрд╛рдлреА рдмрдбрд╝рд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рд╣рдо рдорд╛рдиреЛрдВ рдХреЛ 1,000,000 рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рджрд╢рдорд▓рд╡ рдмрд┐рдВрджреБ рдХреЗ рдмрд╛рдж рджреЛ рдЕрдВрдХреЛрдВ рдореЗрдВ рдЧреЛрд▓ рдХрд░рддреЗ рд╣реИрдВред

%%time
#     amount
df_pivot_table_cumsum = df_final.groupby(by = ["first_transaction","cohort_days"]).agg({"amount": ["sum"]}).groupby(level=0).cumsum().reset_index()
df_pivot_table_cumsum.columns = ["first_transaction","cohort_days","cumsum_amount"]
%%time
#     
df_pivot_table_cumsum_chart = copy.deepcopy(df_pivot_table_cumsum)
#     ,       Y.
df_pivot_table_cumsum_chart["cumsum_amount"]=round(df_pivot_table_cumsum_chart["cumsum_amount"]/1000000, 2)

рд╣рдо рдЧреНрд░рд╛рдлрд╝ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЖрд░реЗрдЦ рдХреЛрдб рдХреА рд╕рд┐рд░реНрдл рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд░рд┐рдгрд╛рдо рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рдирд╣реАрдВ рд╣реИред рдпрд╣ рдЧреНрд░рд╛рдл рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрд┐рд╕реА рднреА рдмреАрдЖрдИ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛ рдЦреЛ рджреЗрддрд╛ рд╣реИред рдЖрдк рдкреНрд▓реЙрдЯрд▓реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдРрдб-рдСрди рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реАрдбрд┐рдпреЛ рдореЗрдВ рджрд┐рдЦрд╛рдП рдЧрдП рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╢реНрд░рдо рд▓рд╛рдЧрдд рд╣реИред

%%time
df_pivot_table_cumsum_chart.pivot(index="cohort_days", columns="first_transaction", values="cumsum_amount").plot(figsize = (15,11))

рдЫрд╡рд┐

рдЖрдЗрдП рд╣рдо рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд┐рд╖реНрдХрд░реНрд╖ рджреЗрддреЗ рд╣реИрдВред

рдЧрдгрдирд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рдкрдВрдбрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкрд╛рд╡рд░ рдкрд┐рд╡рдЯ (DAX) рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреА рд╡реНрдпрд╡рд╣рд╛рд░реНрдпрддрд╛ рдмрд╛рддрдЪреАрдд рдХреЗ рдмрд╛рд╣рд░ рдмрдиреА рд╣реБрдИ рд╣реИред

рдкрд╛рдпрдерди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреА рддрд░рд╣ DAX, рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд╕рдВрдкреВрд░реНрдг рдХреНрд╖реЗрддреНрд░реЛрдВ рдкрд░ рд╕рдВрдЪрд╛рд▓рди рдХрд░рдиреЗ рдХрд╛ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдЧрддрд┐, рд╕рд░рд▓рддрд╛ рдФрд░ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдбрд┐рдЬрд╝рд╛рдЗрди рдореЗрдВ рдЖрд╕рд╛рдиреА рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рдкрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд╛рд╡рд░ рдмреАрдЖрдИ рдмреЗрд╣рддрд░ рд╣реИред рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЧреНрд░рд╛рдлрд╝ (рд╕рд╛рде рд╣реА рдореЗрдЯрдкреНрд▓реЛрдЯрд▓рд┐рдм, рд╕реАрдмреЛрд░реНрди рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдП рдЧрдП) рджреЛ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИрдВ: рдЖрдЙрдЯрд▓реЗрд░, рд╕реНрдерд╛рдиреАрдп рдорд┐рдиреАрдорд╛ / рдореИрдХреНрд╕рд┐рдорд╛ рдХреЗ рд▓рд┐рдП рдХрдИ рдбреЗрдЯрд╛ рдХрд╛ рдПрдХреНрд╕рдкреНрд░реЗрд╕ рд╡рд┐рд╢реНрд▓реЗрд╖рдг, рдпрд╛ рдкреНрд░рд╕реНрддреБрддрд┐ рдХреЗ рд▓рд┐рдП рд╕реНрд▓рд╛рдЗрдб рддреИрдпрд╛рд░ рдХрд░рдирд╛ред рдмреАрдЖрдИ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдХрдВрдЯреНрд░реЛрд▓ рдкреИрдирд▓ рдХрд╛ рд╡рд┐рдХрд╛рд╕ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдмрдЪрд╛ рд╣реИред

рдмрд╕ рдЗрддрдирд╛ рд╣реАред рд╕рднреА рд╕реНрд╡рд╛рд╕реНрдереНрдп, рд╢реБрднрдХрд╛рдордирд╛рдПрдВ рдФрд░ рдкреЗрд╢реЗрд╡рд░ рд╕рдлрд▓рддрд╛!

All Articles