рдЙрджреНрдпрдо рдХрдВрдкрдирд┐рдпреЛрдВ рдореЗрдВ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ: рдЕрдЯрдХрд▓реЗрдВ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ред R рдХреЗ рд╕рд╛рде рд╢реЗрдб рд╢реЗрдб

"рдбрд┐рдЬрд┐рдЯрд▓ рдЯреНрд╡рд┐рди" рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдореЗрдВ рдмрдврд╝рддреА рд░реБрдЪрд┐ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЦрдирди рдкрд░ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд▓реЗрдЦред рдЗрд╕ рд╡рд┐рд╖рдп рдХреЗ рд╕рдордп-рд╕рдордп рдкрд░ рдЙрднрд░рдиреЗ рдХреЗ рдХрд╛рд░рдг, рдореИрдВ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЙрдЪрд┐рдд рдорд╛рдирддрд╛ рд╣реВрдВред


рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдмрдпрд╛рди


рд╕реНрдерд┐рддрд┐ рдЕрддреНрдпрдВрдд рд╕рд░рд▓ рд╣реИред


  • рдХрдВрдкрдиреА 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() 


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


рдореВрд▓ `data.frame` рдЧрдгрдирд╛ рдкрд░


рдФрд░ рд░рд╛рдЬреНрдп рд╡рд┐рддрд░рдг
рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди `bupaR` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░


рдереЛрдбрд╝рд╛ рдЙрддрд╛рд░-рдЪрдврд╝рд╛рд╡ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЗрд╕реЗ рдХреЛрдб рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ), рдФрд░ 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) 

рдХреБрдЫ рд╕реЗрдХрдВрдб рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдПрдХ рдкреБрдирд░реНрдирд┐рд░реНрдорд┐рдд рддрд╕реНрд╡реАрд░ рд╣реИред


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


рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдЪрд╛рд▓реЗрдВ рд▓рд╛рдЧреВ рдХрд░реЗрдВ


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


рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЗрд╕ рдХрд╛рд░реНрдп рдореЗрдВ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


  1. рдореБрдЦреНрдп рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП, рдХреЗрд╡рд▓ data.table (рдЧрддрд┐, рд▓рд┐рдВрдХ рдкрд░ рдХрд╛рдо), рдЖрдВрддрд░рд┐рдХ рдХреНрд╡реЗрд░реА рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП рд▓реЗрдЦрд╛рдВрдХрдиред
  2. POSIXct рдореЗрдВ рдорд┐рд▓реАрд╕реЗрдХрдВрдб рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди options(digits.secs=X) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ), рд╣рдо рдЙрдиреНрд╣реЗрдВ рд╡рд╣рд╛рдВ рдЫрд┐рдкрд╛рддреЗ рд╣реИрдВ, рддреБрд▓рдирд╛ рдХрд░рдирд╛ рдФрд░ рдХреНрд░рдордмрджреНрдз рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред
  3. рд╕рдореВрд╣реЛрдВ рдХреЗ рдЕрдВрджрд░ рднреМрддрд┐рдХ рдЫрдБрдЯрд╛рдИ рд╕реЗ рдмрдЪреЗрдВ! рд╕рдВрдкреВрд░реНрдг рд╡реЗрдХреНрдЯрд░ рдХреА рдПрдХрд▓ рднреМрддрд┐рдХ рдЫрдВрдЯрд╛рдИ рд╕рдореВрд╣реЛрдВ рдореЗрдВ рдбреЗрдЯрд╛ рдХреА рдЫрдВрдЯрд╛рдИ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреА рд╣реИред
  4. рд╕рдореВрд╣реЛрдВ рдХреЗ рднреАрддрд░ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рд╕реЗ рдмрдЪреЗрдВред рд╣рдо рд╡рд╣ рд╕рдм рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╕реНрд░реЛрдд рдбреЗрдЯрд╛ рдкрд░ рд╕рдВрднрд╡ рд╣реИ (рд╣рдо рд╡реЗрдХреНрдЯрд░рд╛рдЗрдЬреЗрд╢рди рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдЪрд╛рд▓рд╛рди рдХрдо рдХрд░рддреЗ рд╣реИрдВ)ред
  5. рд╣рдо рд╕рдордп рдЕрдВрддрд░рд╛рд▓ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓реЗрди-рджреЗрди рдЯрд╛рдЗрдордЖрдЙрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
  6. рд▓реЛрдл (рд▓рд╛рд╕реНрдЯ рдСрдмреНрдЬрд░реНрд╡реЗрд╢рди рдХреИрд░реА рдлреЙрд░рд╡рд░реНрдб) рдХреЗ рддрд░реАрдХреЗ рдзреАрдореЗ рд╣реИрдВред рдХрд┐рд╕реА рдЯрд╛рдЗрдорд▓рд╛рдЗрди рдкрд░ рдкреНрд░реЙрдкрд░реНрдЯреА рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, cummax , cummax рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВред
  7. рд╕рдордп рд▓реЗрдиреЗ рд╡рд╛рд▓реА рдХрд╛рд░реНрд░рд╡рд╛рдИ, рдЬреИрд╕реЗ рдХрд┐ POSIX -> рд╕реНрдЯреНрд░рд┐рдВрдЧ рд░реВрдкрд╛рдВрддрд░рдг, рдирд┐рдпрдорд┐рдд рдЦреЛрдЬ, рдЖрджрд┐ред рд╣рдо рдЗрд╕реЗ рддрддреНрд╡ рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рджреГрдврд╝ рд╕рдВрдХрд▓реНрдк рдкрд░ред рдЖрдВрддрд░рд┐рдХ рдЕрдиреБрдХреНрд░рдорд┐рдд рдФрд░ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХреНрд╖реЗрддреНрд░ рдХреЗ рд╕рдореВрд╣реАрдХрд░рдг рдкрд░ рдУрд╡рд░рд╣реЗрдб рдЕрддреБрд▓рдиреАрдп рд░реВрдк рд╕реЗ рдЫреЛрдЯреЗ рд╣реЛрддреЗ рд╣реИрдВред
  8. рд╣рдо рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ (рдЗрдВрдЯреНрд░рд╛-рдкреИрдХреЗрдЯ рд╕рд╣рд┐рдд) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
  9. 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 

рдкрд┐рдЫрд▓рд╛ рдкреЛрд╕реНрдЯ - рд╕реНрд╡рд┐рд╕ рдЬреЛрдВрд╕ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЪрд╛рдХреВ ред

Source: https://habr.com/ru/post/hi461463/


All Articles