{"id":38424,"date":"2019-10-31T22:23:40","date_gmt":"2019-10-31T19:23:40","guid":{"rendered":"https:\/\/prohoster.info\/blog\/retentioneering-kak-my-open-source-instrumenty-dlya-produktovoj-analitiki-na-python-i-pandas-napisali\/"},"modified":"2026-07-06T16:02:25","modified_gmt":"2026-07-06T14:02:25","slug":"retentioneering-kak-my-open-source-instrumenty-dlya-produktovoj-analitiki-na-python-i-pandas-napisali","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pt\/blog\/news\/retentioneering-kak-my-open-source-instrumenty-dlya-produktovoj-analitiki-na-python-i-pandas-napisali","title":{"rendered":"Retentioneering: como escrevemos ferramentas open-source para an\u00e1lise de produtos em Python e Pandas.","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Ol\u00e1, Habr. Este artigo \u00e9 dedicado aos resultados de quatro anos de desenvolvimento de um conjunto de m\u00e9todos e ferramentas para o processamento de trajet\u00f3rias de movimento de usu\u00e1rios em aplicativos ou sites. O autor do desenvolvimento \u00e9 <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/mgodzi\/\">Maxim Godzi<\/a><\/noindex>, que est\u00e1 \u00e0 frente da equipe de criadores do produto, e ele tamb\u00e9m \u00e9 o autor do artigo. O produto recebeu o nome de Retentioneering, agora foi transformado em uma biblioteca open-source e hospedado no Github, para que qualquer pessoa interessada possa utiliz\u00e1-lo. Tudo isso pode ser interessante para quem est\u00e1 relacionado \u00e0 an\u00e1lise de produtos e marketing, promo\u00e7\u00e3o e desenvolvimento de produtos. A prop\u00f3sito, no Habr <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/binarydistrict\/blog\/437534\/\">j\u00e1 foi publicada uma artigo sobre um dos casos de uso do Retentioneering<\/a><\/noindex>. O novo material descreve do que o produto \u00e9 capaz e como pode ser utilizado.<\/p>\n<p>Ao ler o artigo, voc\u00ea ser\u00e1 capaz de criar seu pr\u00f3prio Retentioneering; qualquer m\u00e9todo padronizado de processamento de trajet\u00f3rias de usu\u00e1rios em um aplicativo e fora dele pode se tornar isso, permitindo uma vis\u00e3o detalhada das caracter\u00edsticas do comportamento e extraindo insights para o crescimento das m\u00e9tricas de neg\u00f3cios. <br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>O que \u00e9 Retentioneering e por que isso \u00e9 necess\u00e1rio?<\/h3>\n<p>\nInicialmente, nosso objetivo era traduzir o Growth Hacking do mundo da \"magia digital\" para o mundo dos n\u00fameros, da an\u00e1lise e das previs\u00f5es. Como consequ\u00eancia, a an\u00e1lise de produtos foi reduzida a matem\u00e1tica pura e programa\u00e7\u00e3o para aqueles que, ao inv\u00e9s de hist\u00f3rias fant\u00e1sticas, preferem n\u00fameros, e f\u00f3rmulas a palavras sofisticadas como \"rebranding\", \"reposicionamento\" e assim por diante, que soam bem, mas na pr\u00e1tica ajudam pouco. <\/p>\n<p>Para resolver essas quest\u00f5es, foi necess\u00e1rio um framework para an\u00e1lise atrav\u00e9s de grafos e trajet\u00f3rias, e ao mesmo tempo uma biblioteca que simplificasse as rotinas t\u00edpicas dos analistas, como uma forma de descrever tarefas regulares de an\u00e1lise de produto, que fosse compreens\u00edvel tanto para pessoas quanto para rob\u00f4s. A biblioteca permite descrever o comportamento dos usu\u00e1rios e conect\u00e1-lo \u00e0s m\u00e9tricas de neg\u00f3cios do produto em uma linguagem t\u00e3o formal e clara, que simplifica e automatiza as tarefas rotineiras dos desenvolvedores e analistas, facilitando sua comunica\u00e7\u00e3o com os neg\u00f3cios.<\/p>\n<p><b>Retentioneering \u00e9 um m\u00e9todo e ferramentas anal\u00edticas de software que podem ser adaptadas e integradas em qualquer produto digital (e n\u00e3o apenas). <\/b><\/p>\n<p>Come\u00e7amos a desenvolver o produto em 2015. Agora, j\u00e1 \u00e9 um conjunto de ferramentas pronto, embora ainda n\u00e3o ideal, em Python e Pandas para trabalhar com dados, modelos de aprendizado de m\u00e1quina com API semelhante ao sklearn, ferramentas de interpreta\u00e7\u00e3o dos resultados de modelos de aprendizado de m\u00e1quina eli5 e shap. <\/p>\n<p>Tudo isso est\u00e1 embrulhado <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/retentioneering\/retentioneering-tools\">em uma biblioteca open-source conveniente no reposit\u00f3rio aberto do Github \u2014 retentioneering-tools<\/a><\/noindex>. Usar a biblioteca n\u00e3o \u00e9 dif\u00edcil; praticamente qualquer pessoa que gosta de an\u00e1lise de produto, mas que nunca programou antes, pode aplicar nossos m\u00e9todos de an\u00e1lise aos seus dados de forma independente e sem gastar muito tempo. <\/p>\n<p>Um programador, o criador do aplicativo ou um membro da equipe de desenvolvimento ou teste, que nunca antes lidou com an\u00e1lise, pode come\u00e7ar a brincar com esse c\u00f3digo e ver padr\u00f5es de uso de seu aplicativo sem ajuda externa. <\/p>\n<h3>A trajet\u00f3ria do usu\u00e1rio como elemento b\u00e1sico da an\u00e1lise e m\u00e9todos de seu processamento<\/h3>\n<p>\n<b>A trajet\u00f3ria do usu\u00e1rio \u00e9 a sequ\u00eancia de estados do usu\u00e1rio em determinados pontos temporais.<\/b> Al\u00e9m disso, os eventos podem vir de diferentes fontes de dados, tanto online quanto offline. Os eventos que aconteceram com o usu\u00e1rio s\u00e3o parte de sua trajet\u00f3ria. Exemplos:<br \/>\n\u2022 clicou no bot\u00e3o<br \/>\n\u2022 viu a imagem<br \/>\n\u2022 chegou \u00e0 tela<br \/>\n\u2022 recebeu um e-mail<br \/>\n\u2022 recomendou o produto a um amigo<br \/>\n\u2022 preencheu o formul\u00e1rio<br \/>\n\u2022 tocou na tela<br \/>\n\u2022 rolou<br \/>\n\u2022 chegou ao caixa<br \/>\n\u2022 pediu um burrito<br \/>\n\u2022 comeu o burrito<br \/>\n\u2022 ficou doente ap\u00f3s comer o burrito<br \/>\n\u2022 entrou no caf\u00e9 pela porta dos fundos<br \/>\n\u2022 entrou pela porta da frente<br \/>\n\u2022 fechou o aplicativo<br \/>\n\u2022 recebeu uma notifica\u00e7\u00e3o push<br \/>\n\u2022 ficou encarando a tela por mais tempo<br \/>\n\u2022 pagou o pedido<br \/>\n\u2022 retirou o pedido<br \/>\n\u2022 teve o pedido de cr\u00e9dito negado<\/p>\n<p>Se pegarmos os dados das trajet\u00f3rias de um grupo de usu\u00e1rios e estudarmos como ocorrem as transi\u00e7\u00f5es, podemos acompanhar como se constr\u00f3i seu comportamento no aplicativo. Isso \u00e9 conveniente de fazer atrav\u00e9s de um gr\u00e1fico, onde estados s\u00e3o n\u00f3s, e transi\u00e7\u00f5es entre estados s\u00e3o arestas:<\/p>\n<p><img decoding=\"async\" alt=\"Retentioneering: como escrevemos ferramentas open-source para an\u00e1lise de produtos em Python e Pandas.\" src=\"\/wp-content\/uploads\/2019\/09\/07d7a7cf4f023f5d42ef9b31ed07a0ff.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\nA \"trajet\u00f3ria\" \u00e9 um conceito muito conveniente \u2014 ela cont\u00e9m informa\u00e7\u00f5es detalhadas sobre todas as a\u00e7\u00f5es do usu\u00e1rio, com a possibilidade de adicionar quaisquer dados adicionais na descri\u00e7\u00e3o dessas a\u00e7\u00f5es. Isso a torna um objeto universal. Se voc\u00ea possui ferramentas bonitas e pr\u00e1ticas que permitem trabalhar com trajet\u00f3rias, pode encontrar semelhan\u00e7as e segment\u00e1-las.<\/p>\n<p>A segmenta\u00e7\u00e3o de trajet\u00f3rias pode parecer algo muito complicado a princ\u00edpio. Em uma situa\u00e7\u00e3o normal, realmente \u00e9 \u2014 \u00e9 necess\u00e1rio usar compara\u00e7\u00e3o de matrizes de conectividade ou alinhamento de sequ\u00eancias. Conseguimos encontrar uma maneira mais simples \u2014 estudar um grande n\u00famero de trajet\u00f3rias e segment\u00e1-las por meio de clusteriza\u00e7\u00e3o.<\/p>\n<p>Como se descobriu, \u00e9 poss\u00edvel transformar uma trajet\u00f3ria em um ponto utilizando representa\u00e7\u00f5es cont\u00ednuas, por exemplo, <noindex><a rel=\"nofollow\" href=\"http:\/\/datameetsmedia.com\/bag-of-words-tf-idf-explained\/\">TF-IDF<\/a><\/noindex>. Ap\u00f3s a transforma\u00e7\u00e3o, a trajet\u00f3ria se torna um ponto no espa\u00e7o, onde os eixos representam a frequ\u00eancia normalizada de diferentes eventos e transi\u00e7\u00f5es na trajet\u00f3ria. Essa representa\u00e7\u00e3o, que vem de um espa\u00e7o enorme de mil e mais dimens\u00f5es (dimS=soma(tipos de eventos)+soma(tipos de ngrams_2)), pode ser projetada em um plano usando <noindex><a rel=\"nofollow\" href=\"https:\/\/www.quora.com\/How-does-t-SNE-work-in-simple-words\">TSNE<\/a><\/noindex>. O TSNE \u2014 uma transforma\u00e7\u00e3o que reduz a dimensionalidade do espa\u00e7o a 2 e, na medida do poss\u00edvel, preserva as dist\u00e2ncias relativas entre os pontos. Consequentemente, torna-se poss\u00edvel, em um mapa plano, um mapa de proje\u00e7\u00e3o imag\u00e9tica das trajet\u00f3rias, estudar como os pontos de diferentes trajet\u00f3rias se posicionam entre si. Analisa-se o quanto eles eram pr\u00f3ximos ou distintos entre si, se formavam clusters ou se dispersavam pelo mapa, etc.:<\/p>\n<p><img decoding=\"async\" alt=\"Retentioneering: como escrevemos ferramentas open-source para an\u00e1lise de produtos em Python e Pandas.\" src=\"\/wp-content\/uploads\/2019\/09\/3f0386c33885cb842aec8ec01a5f47ff.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAs ferramentas anal\u00edticas do Retentioneering permitem transformar um conjunto de dados complexos e trajet\u00f3rias em uma representa\u00e7\u00e3o que pode ser comparada entre si, e, em seguida, investigar e interpretar o resultado da transforma\u00e7\u00e3o.<\/p>\n<p>Falando sobre m\u00e9todos padr\u00e3o de processamento de trajet\u00f3rias, referimo-nos a tr\u00eas ferramentas principais que implementamos no Retentioneering \u2014 grafos, matrizes de passo e mapas de proje\u00e7\u00e3o de trajet\u00f3rias. <\/p>\n<p>Trabalhar com Google Analytics, Firebase e sistemas de an\u00e1lise semelhantes \u00e9 bastante complicado e n\u00e3o 100% eficaz. O problema reside em uma s\u00e9rie de limita\u00e7\u00f5es para o usu\u00e1rio, resultando em uma an\u00e1lise que se limita a cliques do mouse e sele\u00e7\u00e3o de cortes. Retentioneering permite trabalhar com trajet\u00f3rias de usu\u00e1rios, e n\u00e3o apenas com funis, como no Google Analytics, onde o n\u00edvel de detalhamento muitas vezes se resume a um funil, mesmo que seja constru\u00eddo para um segmento espec\u00edfico. <\/p>\n<h3>Retentioneering e casos de uso<\/h3>\n<p>\nComo exemplo do uso da ferramenta desenvolvida, podemos citar o caso de um grande servi\u00e7o de nicho na R\u00fassia. Esta empresa possui um aplicativo m\u00f3vel para Android, que \u00e9 bem popular entre os clientes. O faturamento anual do aplicativo m\u00f3vel era de cerca de 7 milh\u00f5es de rublos, com flutua\u00e7\u00f5es sazonais entre 60-130 mil. A mesma empresa tamb\u00e9m possui um aplicativo para iOS, e o ticket m\u00e9dio do usu\u00e1rio do aplicativo 'da ma\u00e7\u00e3' foi superior ao ticket m\u00e9dio do cliente que utilizava o aplicativo Android \u2014 1080 rublos contra 1300 rublos.<\/p>\n<p>A empresa decidiu aumentar a efic\u00e1cia do aplicativo Android, para o qual realizou uma an\u00e1lise minuciosa. Foram formadas v\u00e1rias dezenas de hip\u00f3teses para aumentar a efic\u00e1cia do aplicativo. Ap\u00f3s o uso do Retentioneering, ficou claro que o problema estava nas mensagens exibidas para novos usu\u00e1rios. Eles recebiam informa\u00e7\u00f5es sobre a marca, vantagens da empresa e pre\u00e7os. No entanto, como se revelou, as mensagens deveriam ajudar os usu\u00e1rios a aprender a usar o aplicativo. <\/p>\n<p><img decoding=\"async\" alt=\"Retentioneering: como escrevemos ferramentas open-source para an\u00e1lise de produtos em Python e Pandas.\" src=\"\/wp-content\/uploads\/2019\/09\/9e6718eb967ae65d047605e4b8a92b3e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIsso foi realizado, resultando em uma diminui\u00e7\u00e3o nas desinstala\u00e7\u00f5es do aplicativo e um aumento de 23% na convers\u00e3o em pedidos. Inicialmente, 20% do tr\u00e1fego de entrada foi alocado para o teste, mas ap\u00f3s alguns dias, ao analisar os primeiros resultados e avaliar a tend\u00eancia \u2014 as propor\u00e7\u00f5es foram invertidas e, ao contr\u00e1rio, 20% foram deixados para o grupo de controle, enquanto 80% foram colocados no teste. Uma semana depois, foi decidido adicionar progressivamente o teste de mais duas hip\u00f3teses. Em apenas sete semanas, o faturamento do aplicativo Android aumentou em 1,5 vezes em rela\u00e7\u00e3o ao n\u00edvel anterior.<\/p>\n<h3>Como trabalhar com Retentioneering?<\/h3>\n<p>\nOs primeiros passos s\u00e3o bastante simples \u2014 carregamos a biblioteca com o comando pip install retentioneering. No pr\u00f3prio reposit\u00f3rio, h\u00e1 exemplos prontos e casos de tratamento de dados para algumas tarefas de an\u00e1lise de produtos. O conjunto est\u00e1 constantemente se expandindo, mas j\u00e1 \u00e9 suficiente para uma primeira familiariza\u00e7\u00e3o. Qualquer pessoa pode pegar m\u00f3dulos prontos e aplic\u00e1-los imediatamente \u00e0s suas tarefas \u2014 isso permite configurar rapidamente o processo de an\u00e1lise mais detalhada e otimiza\u00e7\u00e3o das trajet\u00f3rias dos usu\u00e1rios de forma eficiente. Tudo isso possibilita encontrar padr\u00f5es de uso do aplicativo atrav\u00e9s de um c\u00f3digo claro e transmitir essa experi\u00eancia aos colegas.<\/p>\n<p>Retentioneering \u2014 uma ferramenta que deve ser usada durante toda a vida \u00fatil do aplicativo, e aqui est\u00e1 o porqu\u00ea:<\/p>\n<ul>\n<li>Retentioneering \u00e9 eficaz para rastrear e otimizar continuamente as trajet\u00f3rias dos usu\u00e1rios e melhorar os indicadores de neg\u00f3cios. Por exemplo, em aplicativos de ecommerce, frequentemente s\u00e3o adicionadas novas funcionalidades, cujo impacto no produto nem sempre pode ser previsto corretamente. Em alguns casos, surgem problemas de compatibilidade entre funcionalidades novas e antigas \u2014 por exemplo, novas funcionalidades \u201ccanibalizam\u201d as j\u00e1 existentes. E, nessa situa\u00e7\u00e3o, uma an\u00e1lise constante das trajet\u00f3rias \u00e9 necess\u00e1ria. <\/li>\n<li>A mesma situa\u00e7\u00e3o se aplica ao trabalho com canais de publicidade: novas fontes de tr\u00e1fego e criativos publicit\u00e1rios est\u00e3o sempre sendo testados, \u00e9 necess\u00e1rio rastrear sazonalidade, tend\u00eancias e o impacto de outros eventos, o que resulta no surgimento de novas classes de problemas. Aqui tamb\u00e9m \u00e9 preciso um monitoramento constante e a interpreta\u00e7\u00e3o das mec\u00e2nicas dos usu\u00e1rios. <\/li>\n<li>H\u00e1 uma s\u00e9rie de fatores que influenciam constantemente o funcionamento do aplicativo. Por exemplo, novos lan\u00e7amentos dos desenvolvedores: ao resolver um problema relevante, eles involuntariamente reintroduzem ou criam um problema antigo. Com o tempo, o n\u00famero de novos lan\u00e7amentos aumenta, e o processo de rastreamento de erros precisa ser automatizado \u2014 inclusive, por meio da an\u00e1lise das trajet\u00f3rias dos usu\u00e1rios.<\/li>\n<\/ul>\n<p>\nNo geral, Retentioneering \u00e9 uma ferramenta eficaz. Mas n\u00e3o h\u00e1 limites para a perfei\u00e7\u00e3o \u2014 ela pode e deve ser aprimorada, desenvolvida e servir como base para novos produtos interessantes. Quanto mais ativa for a comunidade do projeto, mais forks surgir\u00e3o, e novas op\u00e7\u00f5es interessantes de uso aparecer\u00e3o.<\/p>\n<p>Informa\u00e7\u00f5es adicionais sobre as ferramentas Retentioneering:<\/p>\n<ul>\n<li>Nosso site: <noindex><a rel=\"nofollow\" href=\"http:\/\/retentioneering.com\">retentioneering.com<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/retentioneering.tilda.ws\/#rec89053099\">Agenda de meetups<\/a><\/noindex> e inscri\u00e7\u00e3o para participa\u00e7\u00e3o<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/t-do.ru\/retentioneering_meetups\">Chat de produtos e analistas no Telegram<\/a><\/noindex><\/li>\n<li>Gratuito <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/retentioneering\/retentioneering-tools\">reposit\u00f3rio Retentioneering no GitHub<\/a><\/noindex> <\/li>\n<\/ul>\n<p>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/468721\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440. \u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0430 \u0438\u0442\u043e\u0433\u0430\u043c \u0447\u0435\u0442\u044b\u0440\u0435\u0445\u043b\u0435\u0442\u043d\u0435\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u0430\u0431\u043e\u0440\u0430 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0442\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u0439 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0438\u043b\u0438 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435. \u0410\u0432\u0442\u043e\u0440 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u2014 \u041c\u0430\u043a\u0441\u0438\u043c \u0413\u043e\u0434\u0437\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0442\u043e\u0438\u0442 \u0432\u043e \u0433\u043b\u0430\u0432\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u0435\u043b\u0435\u0439 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430, \u043e\u043d \u0436\u0435 \u2014 \u0430\u0432\u0442\u043e\u0440 \u0441\u0442\u0430\u0442\u044c\u0438. \u0421\u0430\u043c \u043f\u0440\u043e\u0434\u0443\u043a\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 Retentioneering, \u0441\u0435\u0439\u0447\u0430\u0441 \u043e\u043d \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d \u0432 open-source \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0438 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d \u043d\u0430 Github, \u0447\u0442\u043e\u0431\u044b \u043b\u044e\u0431\u043e\u0439 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":28843,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[702],"tags":[],"class_list":["post-38424","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440. \u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0430 \u0438\u0442\u043e\u0433\u0430\u043c \u0447\u0435\u0442\u044b\u0440\u0435\u0445\u043b\u0435\u0442\u043d\u0435\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u0430\u0431\u043e\u0440\u0430 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0442\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u0439 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0438\u043b\u0438 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pt\/blog\/news\/retentioneering-kak-my-open-source-instrumenty-dlya-produktovoj-analitiki-na-python-i-pandas-napisali\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"pt_PT\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Retentioneering: \u043a\u0430\u043a \u043c\u044b open-source \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432\u043e\u0439 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438 \u043d\u0430 Python \u0438 Pandas \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440. \u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0430 \u0438\u0442\u043e\u0433\u0430\u043c \u0447\u0435\u0442\u044b\u0440\u0435\u0445\u043b\u0435\u0442\u043d\u0435\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u0430\u0431\u043e\u0440\u0430 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0442\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u0439 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0438\u043b\u0438 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pt\/blog\/news\/retentioneering-kak-my-open-source-instrumenty-dlya-produktovoj-analitiki-na-python-i-pandas-napisali\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:23:40+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2026-07-06T14:02:25+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Retentioneering: como escrevemos ferramentas open-source para an\u00e1lise de produtos em Python e Pandas | ProHoster","description":"Ol\u00e1, Habr. Este artigo \u00e9 dedicado aos resultados de quatro anos de desenvolvimento de um conjunto de m\u00e9todos e ferramentas para processamento de trajet\u00f3rias de movimento de usu\u00e1rios em aplicativos ou sites.","canonical_url":"https:\/\/prohoster.info\/pt\/blog\/news\/retentioneering-kak-my-open-source-instrumenty-dlya-produktovoj-analitiki-na-python-i-pandas-napisali","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pt_PT","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Retentioneering: \u043a\u0430\u043a \u043c\u044b open-source \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432\u043e\u0439 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438 \u043d\u0430 Python \u0438 Pandas \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438 | ProHoster","og:description":"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440. \u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0430 \u0438\u0442\u043e\u0433\u0430\u043c \u0447\u0435\u0442\u044b\u0440\u0435\u0445\u043b\u0435\u0442\u043d\u0435\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u0430\u0431\u043e\u0440\u0430 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0442\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u0439 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0438\u043b\u0438 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435.","og:url":"https:\/\/prohoster.info\/pt\/blog\/news\/retentioneering-kak-my-open-source-instrumenty-dlya-produktovoj-analitiki-na-python-i-pandas-napisali","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:23:40+00:00","article:modified_time":"2026-07-06T14:02:25+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"38424","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-23 22:00:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:09:23","updated":"2026-01-23 22:00:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/38424","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/comments?post=38424"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/38424\/revisions"}],"predecessor-version":[{"id":182486,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/38424\/revisions\/182486"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media\/28843"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media?parent=38424"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/categories?post=38424"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/tags?post=38424"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}