"рдбрд┐рдЬрд┐рдЯрд▓ рдЯреНрд╡рд┐рди" рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдореЗрдВ рдмрдврд╝рддреА рд░реБрдЪрд┐ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЦрдирди рдкрд░ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд▓реЗрдЦред рдЗрд╕ рд╡рд┐рд╖рдп рдХреЗ рд╕рдордп-рд╕рдордп рдкрд░ рдЙрднрд░рдиреЗ рдХреЗ рдХрд╛рд░рдг, рдореИрдВ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЙрдЪрд┐рдд рдорд╛рдирддрд╛ рд╣реВрдВред
рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдмрдпрд╛рди
рд╕реНрдерд┐рддрд┐ рдЕрддреНрдпрдВрдд рд╕рд░рд▓ рд╣реИред
- рдХрдВрдкрдиреА X (Y, Z, ...) рд╣реИред
- рдХрдВрдкрдиреА рдХреЗ рдкрд╛рд╕ рд╡рд┐рднрд┐рдиреНрди рдЖрдИрдЯреА рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рд╣реИрдВред
- рдРрд╕реЗ рд╡реНрдпрд╛рдкрд╛рд░рд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЗрди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП bpmn рдЖрд░реЗрдЦ рддреИрдпрд╛рд░ рдХрд┐рдП рд╣реИрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЗрди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдХреИрд╕реЗ рджреЗрдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рдХрд╛ рдЕрдкрдирд╛ "рдмреАрдкреАрдПрди рд╡рд┐рдЪрд╛рд░" рд╣реИред
- рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ (KPI) рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рд╕рдЪреНрдЪрд╛рдИ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдФрд░ рдЗрди рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдХреИрд╕реЗ рдЧрд┐рдиреЗрдВ?
рдпрд╣ рдкрд┐рдЫрд▓реЗ рдкреНрд░рдХрд╛рд╢рдиреЛрдВ рдХрд╛ рдПрдХ рд╕рд┐рд▓рд╕рд┐рд▓рд╛ рд╣реИред
рдореВрд▓ рдЖрд╕рди:
- рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдЗрд╡реЗрдВрдЯ рд▓реЙрдЧ (рдЖрдИрдЯреА рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд▓реЙрдЧ, рд╕реАрдбреАрдЖрд░ \ xdr, рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдШрдЯрдирд╛рдУрдВ рдХреЗ рд╕рд┐рд░реНрдл рд░рд┐рдХреЙрд░реНрдб) рд╢реБрджреНрдзрддрд╛, рдкреВрд░реНрдгрддрд╛ рдФрд░ рд╕реНрдерд┐рд░рддрд╛ рдХреА рдбрд┐рдЧреНрд░реА рдмрджрд▓рддреА рд╣реИред
- рдЖрдИрдЯреА рд╕рд┐рд╕реНрдЯрдо рдПрдХ рд░рд╛рдЬреНрдп рдорд╢реАрди рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдЙрди рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╡рд┐рднрд┐рдиреНрди рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рдмреАрдЪ "рдЪрд▓рдирд╛" рдХрд░рддрд╛ рд╣реИред
- рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рд╕рд╣рднрд╛рдЧрд┐рддрд╛ рд╡реНрдпрд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рднреМрддрд┐рдХ рджреБрдирд┐рдпрд╛ рд╕реБрдзрд╛рд░:
- рдЖрдИрдЯреА рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдореЗрдВ рдХрд┐рдП рдЧрдП рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдРрд╕реА рд╣реИ рдХрд┐ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХреЛрдВ рдХреЗ рдмреАрдкреАрдПрди рдЖрд░реЗрдЦреЛрдВ рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИред
- рдбреЗрдЯрд╛ рдмрд╣реБрдд рдЕрд╕рдВрд░рдЪрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдЧ)ред
- "рд▓реЗрди-рджреЗрди" рдПрдХ рддрд╛рд░реНрдХрд┐рдХ рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИред рдИрд╡реЗрдВрдЯ рд░рд┐рдХреЙрд░реНрдбреНрд╕ рдореЗрдВ рд╕реНрд╡рдпрдВ рдЗрд╕ рд░рд╛рдЬреНрдп рдореЗрдВ рдирд┐рд╣рд┐рдд рдЧреБрдг рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдХреЛрдИ рдЕрдВрдд-рдЯреВ-рдПрдВрдб рд▓реЗрдирджреЗрди рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
- рдкреНрд░рддрд┐ рджрд┐рди рд░рд┐рдХреЙрд░реНрдб рдХреА рд╕рдВрдЦреНрдпрд╛ рджрд╕рд┐рдпреЛрдВ, рд╕реИрдХрдбрд╝реЛрдВ, рд╣рдЬрд╛рд░реЛрдВ рд▓рд╛рдЦреЛрдВ рдЯреБрдХрдбрд╝реЗ рд╣реИрдВ ред
рд╕реЗрдЯ-рдХрд╛рдЙрдВрдЯ рд╕реЙрд▓реНрдпреВрд╢рди
рдРрд╕реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ:
- рд▓реЗрди-рджреЗрди рдХрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВ
- рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡реНрдпрд╛рдкрд╛рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВ
- рдЧрдгрдирд╛ рдХрд░реЗрдВ;
- рдорд╛рдирд╡-рдкрдардиреАрдп рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВред
рдЖрдк рд╡рд┐рдХреНрд░реЗрддрд╛ рд╕рдорд╛рдзрд╛рди рдвреВрдВрдврдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд▓рд╛рдЦреЛрдВ рдХрд╛ рднреБрдЧрддрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рд╣рд╛рде рдореЗрдВ рдЖрд░ рд╣реИред рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рдореЗрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдиреАрдЪреЗ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд┐рдЪрд╛рд░ред
рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд▓рдЧрддрд╛ рд╣реИ рдФрд░ рдЖрд░ рдХреЗ рдкрд╛рд╕ рдмреВрдкрд╛рдЖрд░ рдкреИрдХреЗрдЬ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕реБрд╕рдВрдЧрдд рд╕реЗрдЯ рд╣реИред рд▓реЗрдХрд┐рди рдорд░рд╣рдо рдореЗрдВ рдПрдХ рдордХреНрдЦреА рдореМрдЬреВрдж рд╣реИ рдФрд░ рдпрд╣ рд╕рдм рдХреБрдЫ рдЬрд╣рд░ рджреЗрддреА рд╣реИред рдпрд╣ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╕рдордп рдореЗрдВ рд╕реЗрдЯ рдХреЗрд╡рд▓ рдШрдЯрдирд╛рдУрдВ рдХреА рдПрдХ рдЫреЛрдЯреА рд╕рдВрдЦреНрдпрд╛ (рд╕реИрдХрдбрд╝реЛрдВ рд╣рдЬрд╛рд░реЛрдВ - рдХрдИ рдорд┐рд▓рд┐рдпрди) рдХреЗ рд╕рд╛рде рд╕рд╛рдордирд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдмрдбрд╝реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП, рдЕрдиреНрдп рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЧрддрд┐ рдЬреЛрдбрд╝реЗрдВ!
рдПрдХ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛рд╕реЗрдЯ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░реЗрдВ
рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛ рд╕реЗрдЯ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЪрд▓реЛ рдЧрдгрд┐рддреАрдп рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рднреМрддрд┐рдХ рд╕реНрд░реЛрдд рдХреЗ рд░реВрдк рдореЗрдВ рджреБрдХрд╛рдиреЛрдВ рдХреА рд╕рдВрдШреАрдп рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд▓реЗрддреЗ рд╣реИрдВред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рд╕рднреА рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдпрджреНрдпрдкрд┐ рдЙрд╕реА рд╕рдлрд▓рддрд╛ рдХреЗ рд╕рд╛рде рдпрд╣ рдПрдЯреАрдПрдо, рдХреЙрд▓ рд╕реЗрдВрдЯрд░, рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдкрд░рд┐рд╡рд╣рди, рдЬрд▓ рдЖрдкреВрд░реНрддрд┐ рдЖрджрд┐ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
- рд╡рд┐рднрд┐рдиреНрди рдЖрдХрд╛рд░реЛрдВ (рдЫреЛрдЯреЗ, рдордзреНрдпрдо рдФрд░ рдмрдбрд╝реЗ) рдХреА рджреБрдХрд╛рдиреЗрдВ рд╣реИрдВред
- рджреБрдХрд╛рдиреЛрдВ рдореЗрдВ рдХреИрд╢ рдбреЗрд╕реНрдХ (рдкреЙрдЬрд╝ рдЯрд░реНрдорд┐рдирд▓) рд╣реИрдВред
- рд╕реНрдЯреЛрд░ рдирдВрдмрд░ рдЕрд▓реНрдлрд╝рд╛рдиреНрдпреВрдореЗрд░рд┐рдХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ; рдЯрд░реНрдорд┐рдирд▓ рдирдВрдмрд░ рдбрд┐рдЬрд┐рдЯрд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
- рджреБрдХрд╛рдирджрд╛рд░ рджреБрдХрд╛рдиреЛрдВ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдХрд╛рд░реНрдб рд╕реЗ рднреБрдЧрддрд╛рди рдХрд░рддреЗ рд╕рдордп рдХреБрдЫ рдЦрд░реАрджрддреЗ рд╣реИрдВред
- рдХрд╛рд░реНрдб рдФрд░ рдмреИрдВрдХ рдХреЗ рд╕рд╛рде рдкреЙрдЬрд╝ рдЯрд░реНрдорд┐рдирд▓ рдХреА рдмрд╛рддрдЪреАрдд рдХреЛ рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдореВрд╣ рдФрд░ рдЙрдирдХреЗ рдмреАрдЪ рд╕рдВрдХреНрд░рдордг рдХреЗ рдирд┐рдпрдореЛрдВ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
- рд▓реЗрдирджреЗрди рд╕рдлрд▓, рдЕрд╕рдлрд▓, рд╕реНрдердЧрд┐рдд рдФрд░ рдЕрдкреВрд░реНрдг рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдмреИрдВрдХ рдЕрдиреБрдкрд▓рдмреНрдз рд╣реИ)ред
- рд▓реЗрди-рджреЗрди рдореЗрдВ рдЯрд╛рдЗрдордЖрдЙрдЯ рд╣реЛрддрд╛ рд╣реИред
рд╡реНрдпрд╛рдкрд╛рд░ рд▓реЗрдирджреЗрди рдкреИрдЯрд░реНрди рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реЗрдЯ рд▓реЗрдВ:
"INIT-REQUEST-RESPONSE-SUCCESS" "INIT-REQUEST-RESPONSE-ERROR" "INIT-REQUEST-RESPONSE-DEFFERED" "INIT-REQUEST" "INIT"
рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдирдореВрдирд╛ рдмрдирд╛рдПрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рднреА рдЕрд░рдмреЛрдВ рд░рд┐рдХреЙрд░реНрдбреЛрдВ рдкрд░ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рд╕реБрдкрд░рджреАрдк рдЕрдиреБрдХреВрд▓рди рдХреЗ рдмрд┐рдирд╛ рдРрд╕реА рдорд╛рддреНрд░рд╛ рдХреЗ рд▓рд┐рдП, рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕рдордп рдХреЛ рдмрд╣реБрдд рд╣реА рдФрд╕рдд рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдПрдХрд▓ рд╕рд░реНрд╡рд░ рдкрд░ рдХреЗрд╡рд▓ рд╕реИрдХрдбрд╝реЛрдВ рд╕реЗрдХрдВрдб рдореЗрдВ рдорд╛рдкрд╛ рдЬрд╛рддрд╛ рд╣реИ )ред
рдмрдбрд╝реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдбрд╛рдпрд░реЗрдХреНрдЯ рд╕реНрдкреЙрдЗрд▓рд░:
- рдХрдИ рд╕реНрдерд╛рдиреЛрдВ рдкрд░,
tidyverse
рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ tidyverse
рдЬрд╡рд╛рдм рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ; - рдорд╛рдЗрдХреНрд░реЛрд╕реНрдЯреЗрдкреНрд╕ рдХрд╛ рдЕрдиреБрдХреВрд▓рди рднреА рдЙрдкрдпреЛрдЧреА рд╣реИ рдФрд░ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдпреЛрдЧрджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдирдореВрдирд╛ рд╕рд┐рдореБрд▓реЗрд╢рди рдХреЛрдб library(tidyverse) library(datapasta) library(tictoc) library(data.table) library(stringi) library(anytime) library(rTRNG) data.table::setDTthreads(0) # data.table data.table::getDTthreads() # set.seed(46572) RcppParallel::setThreadOptions(numThreads = parallel::detectCores() - 1) # -- -, # 5 -, 2 -- bo_pattern <- tibble::tribble( # , , ~pattern, ~prob, ~mean_duration, "INIT-REQUEST-RESPONSE-SUCCESS", 0.7, 5, "INIT-REQUEST-RESPONSE-ERROR", 0.15, 5, "INIT-REQUEST-RESPONSE-DEFFERED", 0.07, 8, "INIT-REQUEST", 0.05, 2, "INIT", 0.03, 0.5 ) # + checkmate::assertTRUE(sum(bo_pattern$prob) == 1) df <- bo_pattern %>% separate_rows(pattern) %>% # mutate(coeff = sum(prob)) %>% group_by(pattern) %>% # summarise(event_prob = sum(prob/coeff)*100) %>% ungroup() checkmate::assertTRUE(sum(df$event_prob) == 100) # 3 : (4 ), (12 ), (30 ) df1 <- tribble( ~type, ~n_pos, ~n_store, "small", 4, 10, "medium", 12, 5, "large", 30, 2 ) %>% # mutate(store = map2(row_number(), n_store, ~sample(x = .x * 1000 + 1:.y, size = .y, replace = FALSE))) %>% unnest(store) %>% # mutate(pos = map(n_pos, ~sample(x = .x, size = .x, replace = FALSE))) %>% unnest(pos) %>% mutate(pattern = sample(bo_pattern$pattern, n(), replace = TRUE, prob = bo_pattern$prob)) tic("Generate transactions") # , # , df2 <- df1 %>% # select(-matches("duration")) %>% left_join(bo_pattern, by = "pattern") %>% # sample_frac(size = 200, replace = TRUE) %>% mutate(duration = rnorm(n(), mean = mean_duration, sd = mean_duration * .25)) %>% select(-prob, -mean_duration) %>% # , > # 30 filter(duration > 0.5 & duration < 30) %>% # POS mutate(session_id = row_number()) %>% # , separate_rows(pattern) %>% rename(event = pattern) toc() tic("Generate time markers, data.table way") samples_tbl <- data.table::as.data.table(df2) %>% # setkey(session_id, duration, physical = FALSE) %>% # # 1- , , 5 # .[, ticks := base::sort(runif(.N, 5, 5 + duration)), by = .(session_id, duration)] %>% # match.arg base::order!! # # 0 1 # # .[, tshift := runif(.N, 0, 1)] %>% # trng ( ) # , .[, trand := runif_trng(.N, 0, 1, parallelGrain = 100L) * duration] %>% # , # .[, ticks := sort(tshift), by = .(session_id)] %>% # , session_id, , .[, t_idx := session_id + trand / max(trand)/10] %>% # # session_id . .[, tshift := (sort(t_idx) - session_id) * 10 * max(trand)] %>% # , POS (60 ) .[event == "INIT", tshift := tshift + runif_trng(.N, 0, 60, parallelGrain = 100L)] %>% # .[, `:=`(duration = NULL, trand = NULL, t_idx = NULL, n_store = NULL, n_pos = NULL, timestamp = as.numeric(anytime("2019-03-11 08:00:00 MSK")))] %>% # , 01.03.2019 .[, timestamp := timestamp + cumsum(tshift), by = .(store, pos)] %>% # .[timestamp <= as.numeric(anytime("2019-04-11 23:00:00 MSK")), ] %>% # .[, timestamp := anytime(timestamp, tz = "Europe/Moscow")] %>% as_tibble() %>% select(store, pos, event, timestamp, session_id) toc()
рдкреНрд░рдпреЛрдЧ рдХреА рд╢реБрджреНрдзрддрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдо рдХреЗрд╡рд▓ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рд╕рдм рдХреБрдЫ рдорд┐рд▓рд╛рддреЗ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреАрд╡рди рдореЗрдВ, рдЦрдВрдбреЛрдВ (рд╕рдВрднрд╡рддрдГ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдордп рдмреНрд▓реЙрдХреЛрдВ рдореЗрдВ) рдХреЛ рдмреЗрддрд░рддреАрдм рдврдВрдЧ рд╕реЗ рдлреЗрдВрдХрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рдиреБрдХрд╕рд╛рди рд╣реЛрддрд╛ рд╣реИред
# log_tbl <- samples_tbl %>% select(store, pos, state = event, timestamp_msk = timestamp) %>% sample_n(n()) # log_tbl %>% mutate(timegroup = lubridate::ceiling_date(timestamp_msk, unit = "10 mins")) %>% ggplot(aes(timegroup)) + # geom_bar(width = 0.7*600) + geom_bar(colour = "white", size = 1.3) + theme_bw()

рд╣рдо рдПрдХ рдЪрд┐рддреНрд░ рдХреЗ рд╕рд╛рде рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЖрд░реЗрдЦ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ

рдФрд░ рд░рд╛рдЬреНрдп рд╡рд┐рддрд░рдг

рдереЛрдбрд╝рд╛ рдЙрддрд╛рд░-рдЪрдврд╝рд╛рд╡ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЗрд╕реЗ рдХреЛрдб рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ), рдФрд░ bupaR::process_map
рдиреЗ рдЕрдВрдд рдореЗрдВ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрдм рдХреБрдЫ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рдбреЗрдЯрд╛ рдЬреЛ bupaR::process_map
рдмрд╛рдзрд╛рдУрдВ рдХреЛ рдлрд┐рдЯ рдирд╣реАрдВ рдХрд░рддреЗ рдереЗ рдЙрдиреНрд╣реЗрдВ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рддрддреНрд╡реЛрдВ рджреНрд╡рд╛рд░рд╛ рдХрд╛рдЯ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рд▓реЗрди-рджреЗрди рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг
рдкрд╣рд▓реА рдЪреАрдЬ рдЬреЛ рдЖрдо рддреМрд░ рдкрд░ рдкреЗрд╢ рдХреА рдЬрд╛рддреА рд╣реИ рдЬрдм рдЖрдкрдХреЛ рд╕рдордп рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рдЗрдХрдЯреНрдард╛ / рддреБрд▓рдирд╛ рдХрд░рдирд╛ / рд╕рдореВрд╣рдмрджреНрдз рдХрд░рдирд╛ рдФрд░ рдЪрдХреНрд░реЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдирд╛ рд╣реЛрддрд╛ рд╣реИред 100 рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдбреЗрдореЛ рдореЗрдВ, рдпрд╣ рдмрдврд╝реЛрддрд░реА рдХрд╛рдо рдХрд░реЗрдЧреА, рд▓реЗрдХрд┐рди рд▓рд╛рдЦреЛрдВ рд╕реВрдЪрд┐рдпрд╛рдВ рдирд╣реАрдВ рд╣реЛрдВрдЧреАред рдЗрд╕ рдХрд╛рд░реНрдп рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕рдордп рдХреА рд╣рд╛рдирд┐ рдмрд┐рдВрджреБрдУрдВ (рдЖрдВрддрд░рд┐рдХ рдЫреЛрд░реЛрдВ, рдордзреНрдпрд╡рд░реНрддреА рд╕реНрдореГрддрд┐ рдЖрд╡рдВрдЯрди рдФрд░ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐) рдХреЛ рд╕реНрдерд╛рдиреАрдп рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХрдо рд╕реЗ рдХрдо рдЦрддреНрдо рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред
рдирддреАрдЬрддрди, рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рджрд╕ рд▓рд╛рдЗрдиреЛрдВ рддрдХ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд▓реЗрди-рджреЗрди рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХреЛрдб clean_dt <- as.data.table(log_tbl) %>% # INIT .[, start := (state == "INIT")] %>% # session_id , # .[, event_date := lubridate::as_date(timestamp_msk)] %>% .[, date_str := format(.BY[[1]], "%y%m%d"), by = event_date] %>% # # timestamp_msk setorder(store, pos, timestamp_msk) %>% # -- .[, session_id := paste(date_str, store, pos, cumsum(start), sep = "_")] %>% # ( 30 ) # .[, time_shift := timestamp_msk - shift(timestamp_msk), by = .(store, pos)] %>% # , INIT .[, time_locf := cummax(as.numeric(timestamp_msk) * as.numeric(start)), by = .(store, pos)] %>% .[, time_shift := as.numeric(timestamp_msk) - time_locf] %>% # , 30 .[, lost_chain := time_shift > 30] %>% # .[, time_shift := as.numeric(!start) * as.numeric(timestamp_msk - shift(timestamp_msk, fill = 0))] %>% # INIT # .[, time_accu := cumsum(time_shift)] %>% .[, date_str := NULL] # # tidyverse , dt <- as.data.table(clean_dt) %>% # !!! .[lost_chain != TRUE] %>% # 1- .[order(timestamp_msk, store, pos)] %>% .[, bp_pattern := stri_join(state, collapse = "-"), by = session_id] # as_tibble(dt) %>% distinct(session_id, bp_pattern) %>% count(session_id, sort = TRUE)
рдХреБрдЫ рд╕реЗрдХрдВрдб рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдПрдХ рдкреБрдирд░реНрдирд┐рд░реНрдорд┐рдд рддрд╕реНрд╡реАрд░ рд╣реИред
рдФрд░ (рдЬрд┐рд╕рдиреЗ рд╕реЛрдЪрд╛ рд╣реЛрдЧрд╛ !!!) рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдЖрдИрдЯреА рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдореЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╡реНрдпрд╛рдкрд╛рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рдХреБрдЫ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИрдВ (рдпрд╛ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ) рдХреНрдпреЛрдВрдХрд┐ рд╡реНрдпрд╛рдкрд╛рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХреЛрдВ рдиреЗ рд╕рднреА рдХреЛ рдЖрд╢реНрд╡рд╕реНрдд рдХрд┐рдпрд╛ рд╣реИред "рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдорд╛рд▓рд┐рдХреЛрдВ" рдХреЗ рдЪрдорддреНрдХрд╛рд░ рдФрд░ рддрд░реНрдХ рдЕрдВрддрд┐рдо рддрд╕реНрд╡реАрд░ рдХреЗ рдЕрдзреНрдпрдпрди рдХреЗ рд╕рд╛рде рд╣реЛрдВрдЧреЗред
рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдЪрд╛рд▓реЗрдВ рд▓рд╛рдЧреВ рдХрд░реЗрдВ
рдЬрдм рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдЧрддрд┐ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдорд╛рддреНрд░рд╛ рдмрди рдЬрд╛рддреА рд╣реИ, рддреЛ рдХрд╛рдо рдХреЛрдб рд▓рд┐рдЦрдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред рд╕рднреА рд╕реНрддрд░реЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдХрдИ рдПрд▓реНрдЧреЛрд░рд┐рдердо рдЪрд╛рд▓реЗрдВ рднреА рд╣реИрдВ рдЬреЛ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдХреЛ рдХрд╛рдлреА рдХрдо рдХрд░ рд╕рдХрддреА рд╣реИрдВред
рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЗрд╕ рдХрд╛рд░реНрдп рдореЗрдВ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
- рдореБрдЦреНрдп рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП, рдХреЗрд╡рд▓
data.table
(рдЧрддрд┐, рд▓рд┐рдВрдХ рдкрд░ рдХрд╛рдо), рдЖрдВрддрд░рд┐рдХ рдХреНрд╡реЗрд░реА рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП рд▓реЗрдЦрд╛рдВрдХрдиред POSIXct
рдореЗрдВ рдорд┐рд▓реАрд╕реЗрдХрдВрдб рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди options(digits.secs=X)
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ), рд╣рдо рдЙрдиреНрд╣реЗрдВ рд╡рд╣рд╛рдВ рдЫрд┐рдкрд╛рддреЗ рд╣реИрдВ, рддреБрд▓рдирд╛ рдХрд░рдирд╛ рдФрд░ рдХреНрд░рдордмрджреНрдз рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред- рд╕рдореВрд╣реЛрдВ рдХреЗ рдЕрдВрджрд░ рднреМрддрд┐рдХ рдЫрдБрдЯрд╛рдИ рд╕реЗ рдмрдЪреЗрдВ! рд╕рдВрдкреВрд░реНрдг рд╡реЗрдХреНрдЯрд░ рдХреА рдПрдХрд▓ рднреМрддрд┐рдХ рдЫрдВрдЯрд╛рдИ рд╕рдореВрд╣реЛрдВ рдореЗрдВ рдбреЗрдЯрд╛ рдХреА рдЫрдВрдЯрд╛рдИ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреА рд╣реИред
- рд╕рдореВрд╣реЛрдВ рдХреЗ рднреАрддрд░ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рд╕реЗ рдмрдЪреЗрдВред рд╣рдо рд╡рд╣ рд╕рдм рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╕реНрд░реЛрдд рдбреЗрдЯрд╛ рдкрд░ рд╕рдВрднрд╡ рд╣реИ (рд╣рдо рд╡реЗрдХреНрдЯрд░рд╛рдЗрдЬреЗрд╢рди рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдЪрд╛рд▓рд╛рди рдХрдо рдХрд░рддреЗ рд╣реИрдВ)ред
- рд╣рдо рд╕рдордп рдЕрдВрддрд░рд╛рд▓ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓реЗрди-рджреЗрди рдЯрд╛рдЗрдордЖрдЙрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
- рд▓реЛрдл (рд▓рд╛рд╕реНрдЯ рдСрдмреНрдЬрд░реНрд╡реЗрд╢рди рдХреИрд░реА рдлреЙрд░рд╡рд░реНрдб) рдХреЗ рддрд░реАрдХреЗ рдзреАрдореЗ рд╣реИрдВред рдХрд┐рд╕реА рдЯрд╛рдЗрдорд▓рд╛рдЗрди рдкрд░ рдкреНрд░реЙрдкрд░реНрдЯреА рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,
cummax
, cummax
рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВред - рд╕рдордп рд▓реЗрдиреЗ рд╡рд╛рд▓реА рдХрд╛рд░реНрд░рд╡рд╛рдИ, рдЬреИрд╕реЗ рдХрд┐ POSIX -> рд╕реНрдЯреНрд░рд┐рдВрдЧ рд░реВрдкрд╛рдВрддрд░рдг, рдирд┐рдпрдорд┐рдд рдЦреЛрдЬ, рдЖрджрд┐ред рд╣рдо рдЗрд╕реЗ рддрддреНрд╡ рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рджреГрдврд╝ рд╕рдВрдХрд▓реНрдк рдкрд░ред рдЖрдВрддрд░рд┐рдХ рдЕрдиреБрдХреНрд░рдорд┐рдд рдФрд░ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХреНрд╖реЗрддреНрд░ рдХреЗ рд╕рдореВрд╣реАрдХрд░рдг рдкрд░ рдУрд╡рд░рд╣реЗрдб рдЕрддреБрд▓рдиреАрдп рд░реВрдк рд╕реЗ рдЫреЛрдЯреЗ рд╣реЛрддреЗ рд╣реИрдВред
- рд╣рдо рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ (рдЗрдВрдЯреНрд░рд╛-рдкреИрдХреЗрдЯ рд╕рд╣рд┐рдд) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
- Microoptimization рдХреА рдЙрдкреЗрдХреНрд╖рд╛ рди рдХрд░реЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
stri_c
рд╕реЗ рдХрдИ рдЧреБрдирд╛ рддреЗрдЬ рд╣реИред
# 1 log <- getLog(fileName) bench::mark( paste0 = paste0(log$value, collapse = "\n"), stringi = stri_c(log$value, collapse = "\n") ) # # A tibble: 2 x 13 # expression min median `itr/sec` mem_alloc `gc/sec` n_itr n_gc total_time # <bch:expr> <bch:> <bch:> <dbl> <bch:byt> <dbl> <int> <dbl> <bch:tm> # 1 paste0 58ms 59.1ms 16.9 496KB 0 9 0 533ms # 2 stringi 16.9ms 17.5ms 57.1 0B 0 29 0 508ms
рдкрд┐рдЫрд▓рд╛ рдкреЛрд╕реНрдЯ - рд╕реНрд╡рд┐рд╕ рдЬреЛрдВрд╕ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЪрд╛рдХреВ ред