{"id":89206,"date":"2020-07-20T07:41:57","date_gmt":"2020-07-20T05:41:57","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/chto-mozhet-pojti-ne-tak-s-data-science-sbor-dannyh"},"modified":"2020-07-20T07:41:57","modified_gmt":"2020-07-20T05:41:57","slug":"chto-mozhet-pojti-ne-tak-s-data-science-sbor-dannyh","status":"publish","type":"post","link":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/chto-mozhet-pojti-ne-tak-s-data-science-sbor-dannyh","title":{"rendered":"Qu'est-ce qui pourrait mal se passer avec la Data Science ? Collecte de donn\u00e9es","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/ruvds\/blog\/510944\/\"><img decoding=\"async\" alt=\"Qu&#039;est-ce qui pourrait mal se passer avec la Data Science ? Collecte de donn\u00e9es\" src=\"\/wp-content\/uploads\/2020\/07\/49fb91fc3e45754e437b2c1fc4fec12f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><br \/>\nAujourd'hui, il existe 100500 cours sur le Data Science et il est bien connu que le plus d'argent dans ce domaine provient justement des cours de Data Science (pourquoi creuser quand on peut vendre des pelles ?). Le principal inconv\u00e9nient de ces cours est qu'ils n'ont rien \u00e0 voir avec le travail r\u00e9el : personne ne vous fournira des donn\u00e9es propres, trait\u00e9es au format souhait\u00e9. Et quand vous terminez un cours et commencez \u00e0 r\u00e9soudre un probl\u00e8me r\u00e9el, de nombreux nuances \u00e9mergent.<\/p>\n<p>C'est pourquoi nous commen\u00e7ons une s\u00e9rie de notes intitul\u00e9e \u00ab Qu'est-ce qui peut mal tourner avec le Data Science \u00bb, bas\u00e9es sur des \u00e9v\u00e9nements r\u00e9els qui se sont produits avec moi, mes amis et coll\u00e8gues. Nous allons examiner \u00e0 travers des exemples concrets des t\u00e2ches typiques en Data Science : comment cela se passe r\u00e9ellement. Commen\u00e7ons aujourd'hui par la t\u00e2che de collecte de donn\u00e9es.<\/p>\n<p>Et le premier obstacle que rencontrent les gens en commen\u00e7ant \u00e0 travailler avec des donn\u00e9es r\u00e9elles est justement la collecte de ces donn\u00e9es pertinentes. Le message cl\u00e9 de cet article :<\/p>\n<blockquote><p><b>Nous sous-estimons syst\u00e9matiquement le temps, les ressources et les efforts n\u00e9cessaires \u00e0 la collecte, au nettoyage et \u00e0 la pr\u00e9paration des donn\u00e9es.<\/b><\/p><\/blockquote>\n<p>\nEt surtout, nous discuterons de ce qu'il faut faire pour \u00e9viter cela.<\/p>\n<p>Selon diff\u00e9rentes estimations, le nettoyage, la transformation, le traitement des donn\u00e9es, l'ing\u00e9nierie des caract\u00e9ristiques, etc., prennent 80 \u00e0 90 % du temps, tandis que l'analyse ne repr\u00e9sente que 10 \u00e0 20 %, alors que tout le mat\u00e9riel \u00e9ducatif se concentre exclusivement sur l'analyse.<\/p>\n<p>Analysons, \u00e0 titre d'exemple, une t\u00e2che analytique simple en trois variantes et voyons quelles peuvent \u00eatre les \u00ab circonstances aggravantes \u00bb.<\/p>\n<p>Et pour l'exemple, nous allons encore examiner de telles variations de la t\u00e2che de collecte de donn\u00e9es et de comparaison entre communaut\u00e9s pour :<\/p>\n<ol>\n<li>Deux sous-reddits Reddit<\/li>\n<li>Deux sections de Habr<\/li>\n<li>Deux groupes Odnoklassniki<\/li>\n<\/ol>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Approche conditionnelle en th\u00e9orie<\/h2>\n<p>\nOuvrir le site et lire des exemples, si c'est clair, consacrer quelques heures \u00e0 lire, quelques heures \u00e0 coder selon les exemples et \u00e0 d\u00e9boguer. Ajouter plusieurs heures pour la collecte. Pr\u00e9voir quelques heures suppl\u00e9mentaires (multiplier par deux et ajouter N heures).<\/p>\n<p><b>Point cl\u00e9 : l'estimation temporelle repose sur des hypoth\u00e8ses et des conjectures sur le temps que cela prendra.<\/b><\/p>\n<p>Commencer l'analyse temporelle n\u00e9cessite d'\u00e9valuer les param\u00e8tres suivants pour la t\u00e2che conditionnelle d\u00e9crite ci-dessus :<\/p>\n<ul>\n<li>Quelle est la taille des donn\u00e9es et combien il faut les collecter physiquement (*voir ci-dessous*).<\/li>\n<li>Quel temps de collecte est n\u00e9cessaire pour un enregistrement et combien de temps faut-il attendre avant de pouvoir en collecter un second.<\/li>\n<li>Pr\u00e9voir l'\u00e9criture d'un code qui sauvegarde l'\u00e9tat et red\u00e9marre lorsque (et non si) tout \u00e9choue.<\/li>\n<li>D\u00e9terminer si nous avons besoin d'une autorisation et pr\u00e9voir le temps d'acc\u00e8s via l'API.<\/li>\n<li>Pr\u00e9voir le nombre d'erreurs comme une fonction de la complexit\u00e9 des donn\u00e9es \u2014 \u00e9valuer en fonction de la t\u00e2che sp\u00e9cifique : la structure, le nombre de transformations, ce que nous extrayons et comment.<\/li>\n<li>Pr\u00e9voir les erreurs r\u00e9seau et les probl\u00e8mes de comportement anormal du projet.<\/li>\n<li>\u00c9valuer si les fonctions n\u00e9cessaires sont dans la documentation et si non, combien de temps et comment il faudra pour un contournement.<\/li>\n<\/ul>\n<p>\nLe plus important pour \u00e9valuer le temps est que vous devez r\u00e9ellement consacrer du temps et des efforts \u00e0 une 'reconnaissance' \u2014 ce n'est qu'alors que votre planification sera ad\u00e9quate. Donc, peu importe combien on vous pousse \u00e0 dire 'combien de temps faut-il pour collecter les donn\u00e9es' \u2014 accordez-vous du temps pour une analyse pr\u00e9liminaire et argumentez par rapport au fait que le temps variera en fonction des param\u00e8tres r\u00e9els de la t\u00e2che.<\/p>\n<p>Et maintenant, nous allons pr\u00e9senter des exemples concrets o\u00f9 ces param\u00e8tres changeront.<\/p>\n<p><b>Point cl\u00e9 : l'\u00e9valuation est bas\u00e9e sur l'analyse des facteurs cl\u00e9s influen\u00e7ant le volume et la complexit\u00e9 du travail.<\/b><\/p>\n<p>Une \u00e9valuation bas\u00e9e sur des hypoth\u00e8ses est une bonne approche lorsque les \u00e9l\u00e9ments fonctionnels sont assez petits et qu'il n'y a pas beaucoup de facteurs pouvant influencer significativement la structure de la t\u00e2che. Mais dans le cas de certaines t\u00e2ches de Data Science, ces facteurs deviennent extr\u00eamement nombreux et cette approche devient inad\u00e9quate.<\/p>\n<h2>Comparaison des communaut\u00e9s Reddit<\/h2>\n<p>\nCommen\u00e7ons par le cas le plus simple (comme il s'av\u00e9rera par la suite). En fait, si nous parlons honn\u00eatement, nous avons pratiquement un cas id\u00e9al, v\u00e9rifions notre liste de contr\u00f4le de complexit\u00e9 :<\/p>\n<ul>\n<li>Il existe une API soign\u00e9e, claire et document\u00e9e.<\/li>\n<li>Le token est extr\u00eamement simple \u00e0 obtenir et, surtout, s'obtient automatiquement.<\/li>\n<li>Oui <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/praw-dev\/praw\">wrapping Python<\/a><\/noindex> \u2014 avec de nombreux exemples.<\/li>\n<li>La communaut\u00e9 qui s'occupe de l'analyse et de la collecte de donn\u00e9es sur Reddit (jusqu'\u00e0 des vid\u00e9os YouTube expliquant comment utiliser le wrapping Python) <noindex><a rel=\"nofollow\" href=\"https:\/\/www.programcreek.com\/python\/example\/86599\/praw.Reddit\">par exemple, voici<\/a><\/noindex>.<\/li>\n<li>Les m\u00e9thodes dont nous avons besoin existent probablement dans l'API. De plus, le code semble compact et propre, ci-dessous un exemple de fonction collectant les commentaires d'un post.<\/li>\n<\/ul>\n<p><\/p>\n<pre><code class=\"python\">def get_comments(submission_id):\n    reddit = Reddit(check_for_updates=False, user_agent=AGENT)\n    submission = reddit.submission(id=submission_id)\n    more_comments = submission.comments.replace_more()\n    if more_comments:\n        skipped_comments = sum(x.count for x in more_comments)\n        logger.debug('Skipped %d MoreComments (%d comments)',\n                     len(more_comments), skipped_comments)\n    return submission.comments.list()\n<\/code><\/pre>\n<p><i>Extrait de <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/timendum\/reddit-utilities\/blob\/master\/thread-export.py\">celui-ci<\/a><\/noindex> une s\u00e9lection d'outils pratiques pour l'encapsulation.<\/i><\/p>\n<p>Bien que nous soyons devant le meilleur des cas, il convient cependant de prendre en compte plusieurs facteurs importants de la vie r\u00e9elle :<\/p>\n<ul>\n<li>Limites de l'API \u2014 nous sommes contraints de prendre des donn\u00e9es par lots (faire des pauses entre les requ\u00eates, etc.).<\/li>\n<li>Temps de collecte \u2014 pour une analyse et une comparaison compl\u00e8tes, il faudra pr\u00e9voir un temps consid\u00e9rable simplemente pour que le crawler parcourt le subreddit.<\/li>\n<li>Le bot doit tourner sur un serveur \u2014 vous ne pouvez pas simplement le lancer sur un ordinateur portable, le mettre dans un sac \u00e0 dos et partir faire vos affaires. C'est pourquoi j'ai tout lanc\u00e9 sur un VPS. Avec le code promo habrahabr10, vous pouvez \u00e9conomiser encore 10 % du co\u00fbt.<\/li>\n<li>Inaccessibilit\u00e9 physique de certaines donn\u00e9es (elles sont visibles pour les admins ou sont trop difficiles \u00e0 collecter) \u2014 cela doit \u00eatre pris en compte, toutes les donn\u00e9es ne peuvent pas \u00eatre collect\u00e9es dans un temps raisonnable.<\/li>\n<li>Erreurs de fonctionnement du r\u00e9seau : travailler avec le r\u00e9seau est compliqu\u00e9.<\/li>\n<li>Ce sont des donn\u00e9es r\u00e9elles et vivantes \u2014 elles ne sont jamais propres.<\/li>\n<\/ul>\n<p>\nBien s\u00fbr, il est n\u00e9cessaire de prendre en compte ces nuances dans le d\u00e9veloppement. Les heures\/jours sp\u00e9cifiques d\u00e9pendent de l'exp\u00e9rience en d\u00e9veloppement ou de l'exp\u00e9rience sur des t\u00e2ches similaires, n\u00e9anmoins nous voyons que cette t\u00e2che est purement technique et ne n\u00e9cessite pas de mouvements suppl\u00e9mentaires pour \u00eatre r\u00e9solue \u2014 tout peut \u00eatre bien \u00e9valu\u00e9, d\u00e9crit et r\u00e9alis\u00e9.<\/p>\n<h2>Comparaison des sections de Habr<\/h2>\n<p>\nPassons \u00e0 un cas plus int\u00e9ressant et non trivial, la comparaison des flux et\/ou des sections de Habr.<\/p>\n<p>V\u00e9rifions notre liste de contr\u00f4le de la complexit\u00e9 \u2014 ici, pour comprendre chaque point, il faudra d\u00e9j\u00e0 un peu s'essayer \u00e0 la t\u00e2che elle-m\u00eame et exp\u00e9rimenter.<\/p>\n<ul>\n<li>Au d\u00e9but, vous pensez qu'il existe une API, mais il n'y en a pas. Oui, Habr a une API, mais elle n'est accessible qu'aux admins (ou peut-\u00eatre qu'elle ne fonctionne pas du tout).<\/li>\n<li>Ensuite, vous commencez simplement \u00e0 parser le html \u2014 \u00abimport requests\u00bb, que peut-il mal se passer ?<\/li>\n<li>Et comment parser, en fait ? L'approche la plus simple et la plus couramment utilis\u00e9e consiste \u00e0 it\u00e9rer par ID, \u00e0 noter que ce n'est pas forc\u00e9ment la plus efficace et qu'il faudra g\u00e9rer diff\u00e9rents cas \u2014 voici par exemple la densit\u00e9 des ID r\u00e9els parmi tous les ID existants.\n<p><img decoding=\"async\" alt=\"Qu&#039;est-ce qui pourrait mal se passer avec la Data Science ? Collecte de donn\u00e9es\" src=\"\/wp-content\/uploads\/2020\/07\/2c67fc14f672e92979edd617314210da.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Extrait de <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/218607\/\">celui-ci<\/a><\/noindex> articles.<\/i><\/li>\n<li>Les donn\u00e9es brutes envelopp\u00e9es dans du HTML sur le r\u00e9seau sont un vrai casse-t\u00eate. Par exemple, si vous souhaitez collecter et sauvegarder la note d'un article : vous extrayez le score du HTML et d\u00e9cidez de le conserver comme un nombre pour un traitement ult\u00e9rieur.\u00a0\n<p>1) int(score) g\u00e9n\u00e8re une erreur : sur Habr, le signe moins, comme dans la cha\u00eene &quot;\u20135&quot; \u2014 c'est un tiret court, et non un signe n\u00e9gatif (surprenant, n'est-ce pas ?), donc \u00e0 un moment donn\u00e9, il a fallu r\u00e9veiller le parser avec un correctif aussi horrible.<\/p>\n<pre><code class=\"python\">try:\n      score_txt = post.find(class_=&quot;score&quot;).text.replace(u&quot;\u2013&quot;,&quot;-&quot;).replace(u&quot;+&quot;,&quot;+&quot;)\n      score = int(score_txt)\n      if check_date(date):\n        post_score += score\n<\/code><\/pre>\n<p>\nLes dates, les plus et les moins peuvent totalement manquer (comme nous le voyons ci-dessus avec la fonction check_date, et cela s'est produit).<\/p>\n<p>2) Les caract\u00e8res sp\u00e9ciaux non \u00e9chapp\u00e9s \u2014 ils arriveront, il faut \u00eatre pr\u00eat.<\/p>\n<p>3) La structure varie en fonction du type de post.<\/p>\n<p>4) Les anciens posts peuvent avoir une **structure \u00e9trange**.<\/li>\n<li>En r\u00e9alit\u00e9, le traitement des erreurs et ce qui peut ou ne peut pas se produire devront \u00eatre g\u00e9r\u00e9s et il est impossible de pr\u00e9voir avec certitude ce qui peut mal tourner et quelle pourrait \u00eatre la structure, et o\u00f9 cela pourrait \u00e9chouer \u2014 il faudra juste essayer et prendre en compte les erreurs que le parseur renvoie.<\/li>\n<li>Puis vous comprenez qu'il faut parser en plusieurs threads sinon le parsing en un seul prendra 30+ heures (c'est purement le temps d'ex\u00e9cution d'un parseur \u00e0 thread unique, qui dort et n'encourt aucune interdiction). Dans <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/276383\/\">celui-ci<\/a><\/noindex> l'article, cela a conduit \u00e0 un moment donn\u00e9 \u00e0 sch\u00e9mas comme celui-ci :<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"Qu&#039;est-ce qui pourrait mal se passer avec la Data Science ? Collecte de donn\u00e9es\" src=\"\/wp-content\/uploads\/2020\/07\/9ad1853f3ee2c9321ee9f1a5e3efea7d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAu final, une checklist par rapport \u00e0 la complexit\u00e9 :<\/p>\n<ul>\n<li>Travailler avec le r\u00e9seau et le parsing HTML avec it\u00e9ration et parcours par ID.<\/li>\n<li>Documents de structure h\u00e9t\u00e9rog\u00e8ne.<\/li>\n<li>De nombreux endroits o\u00f9 le code peut facilement \u00e9chouer.<\/li>\n<li>Il est n\u00e9cessaire d'\u00e9crire || du code.<\/li>\n<li>Documentation manquante, exemples de code et\/ou communaut\u00e9.<\/li>\n<\/ul>\n<p>\nL'\u00e9valuation conditionnelle du temps pour cette t\u00e2che sera de 3 \u00e0 5 fois plus \u00e9lev\u00e9e que pour la collecte de donn\u00e9es sur Reddit.<\/p>\n<h2>Comparaison des groupes de Odnoklassniki<\/h2>\n<p>\nPassons au cas techniquement le plus int\u00e9ressant parmi ceux d\u00e9crits. Pour moi, il \u00e9tait fascinant en raison du fait qu'\u00e0 premi\u00e8re vue, il semble assez trivial, mais il ne l'est pas du tout \u2014 d\u00e8s que vous le poussez avec un b\u00e2ton.<\/p>\n<p>Commen\u00e7ons avec notre checklist de complexit\u00e9 et notons que beaucoup d'entre elles se r\u00e9v\u00e9leront beaucoup plus compliqu\u00e9es qu'elles n'en ont l'air au d\u00e9part :<\/p>\n<ul>\n<li>L'API existe, mais elle est presque enti\u00e8rement d\u00e9pourvue des fonctions n\u00e9cessaires.<\/li>\n<li>Pour certaines fonctions, il faut demander un acc\u00e8s par e-mail, ce qui signifie que l'octroi d'acc\u00e8s n'est pas instantan\u00e9.<\/li>\n<li>Il est horriblement document\u00e9 (pour commencer, les termes russes et anglais s'entrem\u00ealent partout, de mani\u00e8re totalement incoh\u00e9rente \u2014 parfois, il faut simplement deviner ce qui est attendu) et, de plus, il n'est pas con\u00e7u pour obtenir des donn\u00e9es, par exemple, <noindex><a rel=\"nofollow\" href=\"https:\/\/apiok.ru\/dev\/methods\/rest\/discussions\/discussions.getComments\">la fonction dont nous avons besoin.<\/a><\/noindex>.<\/li>\n<li>Il n\u00e9cessite une session dans la documentation, mais dans les faits, elle n'est pas utilis\u00e9e \u2014 et il n'y a aucun moyen de comprendre les subtilit\u00e9s des modes d'API, sauf \u00e0 t\u00e2tonner et esp\u00e9rer que quelque chose fonctionne.<\/li>\n<li>Il manque des exemples et une communaut\u00e9, le seul point de r\u00e9f\u00e9rence pour recueillir des informations \u00e9tant un petit <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/alternativshik\/python-odnoklassniki\">wrapper<\/a><\/noindex> en Python (avec peu d'exemples d'utilisation).<\/li>\n<li>La solution la plus efficace semble \u00eatre Selenium, car de nombreuses donn\u00e9es n\u00e9cessaires sont sous cl\u00e9.<br \/>\n1) Cela signifie qu'une authentification est effectu\u00e9e via un utilisateur fictif (et une inscription manuelle).<\/p>\n<p>2) Cependant, avec Selenium, aucune garantie de fonctionnement correct et r\u00e9p\u00e9table (en tout cas dans le cas de ok.ru, c'est s\u00fbr).<\/p>\n<p>3) Le site ok.ru contient des erreurs JavaScript et se comporte parfois de mani\u00e8re \u00e9trange et incoh\u00e9rente.<\/p>\n<p>4) Il faut g\u00e9rer la pagination, le chargement des \u00e9l\u00e9ments, etc.<\/p>\n<p>5) Les erreurs d'API renvoy\u00e9es par le wrapper devront \u00eatre trait\u00e9es de mani\u00e8re artisanale, par exemple, comme ceci (un extrait de code exp\u00e9rimental) :<\/p>\n<pre><code class=\"python\">def get_comments(args, context, discussions):\n    pause = 1\n    if args.extract_comments:\n        all_comments = set()\n#il est logique de garder une trace des discussions d\u00e9j\u00e0 trait\u00e9es\n        for discussion in tqdm(discussions): \n            try:\n                comments = get_comments_from_discussion_via_api(context, discussion)\n            except odnoklassniki.api.OdnoklassnikiError as e:\n                if &quot;NOT_FOUND&quot; in str(e):\n                    comments = set()\n                else:\n                    print(e)\n                    bp()\n                    pass\n            all_comments |= comments\n            time.sleep(pause)\n        return all_comments\n<\/code><\/pre>\n<p>\nMon erreur pr\u00e9f\u00e9r\u00e9e \u00e9tait :<\/p>\n<p><code>OdnoklassnikiError(&quot;Erreur(code : 'None', description : 'Erreur HTTP', m\u00e9thode : 'discussions.getComments', params : \u2026)\u201d<\/code><\/p>\n<p>6) En fin de compte, la combinaison Selenium + API semble \u00eatre l'option la plus rationnelle.<\/li>\n<li>Un \u00e9tat de conservation et un red\u00e9marrage du syst\u00e8me sont n\u00e9cessaires, le traitement de nombreuses erreurs, y compris le comportement incoh\u00e9rent du site \u2014 ces erreurs \u00e9tant assez difficiles \u00e0 imaginer (si vous ne r\u00e9digez pas des parseurs de mani\u00e8re professionnelle, bien s\u00fbr).<\/li>\n<\/ul>\n<p>\nL'\u00e9valuation conditionnelle du temps pour cette t\u00e2che sera de 3 \u00e0 5 fois plus \u00e9lev\u00e9e que pour la collecte de donn\u00e9es depuis Habr. Bien que dans le cas de Habr, nous utilisions une approche directe avec le parsing HTML, alors que dans le cas de OK, nous pouvons intervenir avec l'API dans des endroits critiques.<\/p>\n<h2>Conclusions<\/h2>\n<p>\nPeu importe la mani\u00e8re dont on vous demande une estimation des d\u00e9lais \u00ab sur place \u00bb (apr\u00e8s tout, nous sommes en phase de planification aujourd'hui !), \u00e9valuer le temps de r\u00e9alisation d'un module volumineux de pipeline de traitement de donn\u00e9es est pratiquement impossible, m\u00eame qualitativement, sans une analyse approfondie des param\u00e8tres de la t\u00e2che. <\/p>\n<p>Pour parler de mani\u00e8re un peu plus philosophique, les strat\u00e9gies d'\u00e9valuation en agile conviennent assez bien aux t\u00e2ches d'ing\u00e9nierie, mais lorsqu'il s'agit de t\u00e2ches plus exp\u00e9rimentales et, en quelque sorte, \u00ab cr\u00e9atives \u00bb et de recherche, c'est-\u00e0-dire, moins pr\u00e9visibles, des difficult\u00e9s apparaissent, comme dans les exemples que nous avons analys\u00e9s ici. <\/p>\n<p>Bien s\u00fbr, la collecte de donn\u00e9es est un exemple illustratif \u00e9vident \u2014 cette t\u00e2che para\u00eet habituellement incroyablement simple et techniquement peu complexe, et c'est l\u00e0 que se cache le diable, dans les d\u00e9tails. C'est pr\u00e9cis\u00e9ment dans cette t\u00e2che que l'on peut d\u00e9montrer tout le spectre des sc\u00e9narios o\u00f9 les choses peuvent mal tourner et combien le travail peut r\u00e9ellement s'\u00e9terniser. <\/p>\n<p>Si l'on jette un \u0153il aux caract\u00e9ristiques de la t\u00e2che sans exp\u00e9rimentations suppl\u00e9mentaires, Reddit et OK semblent similaires : il y a une API, un wrapper python, mais en r\u00e9alit\u00e9, la diff\u00e9rence est \u00e9norme. Sur la base de ces param\u00e8tres, parser Habr para\u00eet plus complexe que OK \u2014 alors qu'en pratique, c'est tout le contraire, et cela peut \u00eatre d\u00e9termin\u00e9 en menant de simples exp\u00e9rimentations sur l'analyse des param\u00e8tres de la t\u00e2che.<\/p>\n<p>D'apr\u00e8s mon exp\u00e9rience, l'approche la plus efficace est de faire une estimation approximative du temps n\u00e9cessaire pour la pr\u00e9-analyse et les premi\u00e8res exp\u00e9rimentations, ainsi que pour la lecture de la documentation \u2014 c'est cela qui vous permettra de donner une estimation pr\u00e9cise pour l'ensemble du travail. En termes de m\u00e9thodologie agile populaire, je demande \u00e0 ouvrir un ticket pour \u00ab l'\u00e9valuation des param\u00e8tres de la t\u00e2che \u00bb, sur la base duquel je peux fournir une estimation de ce qui peut \u00eatre r\u00e9alis\u00e9 dans le cadre d'un \u00ab sprint \u00bb et donner une estimation plus pr\u00e9cise pour chaque t\u00e2che.<\/p>\n<p>Par cons\u00e9quent, l'argument qui semble le plus efficace est celui qui montre \u00e0 un sp\u00e9cialiste \u00ab non technique \u00bb \u00e0 quel point le temps et les ressources varieront en fonction des param\u00e8tres qui restent \u00e0 \u00e9valuer.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"http:\/\/ruvds.com\/ru-rub?utm_source=habr&amp;utm_medium=article&amp;utm_campaign=param&amp;utm_content=datascience1#order\"><img decoding=\"async\" alt=\"Qu&#039;est-ce qui pourrait mal se passer avec la Data Science ? Collecte de donn\u00e9es\" src=\"\/wp-content\/uploads\/2020\/07\/2ca567a078c8500d37dfcf982e76252c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><br \/>\n<br \/>Source : <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/ruvds\/blog\/510944\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 100500 \u043a\u0443\u0440\u0441\u043e\u0432 \u043f\u043e Data Science \u0438 \u0434\u0430\u0432\u043d\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u0447\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u0434\u0435\u043d\u0435\u0433 \u0432 Data Science \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u043a\u0443\u0440\u0441\u0430\u043c\u0438 \u043f\u043e Data Science (\u0437\u0430\u0447\u0435\u043c \u043a\u043e\u043f\u0430\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0434\u0430\u0432\u0430\u0442\u044c \u043b\u043e\u043f\u0430\u0442\u044b?). \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043c\u0438\u043d\u0443\u0441 \u044d\u0442\u0438\u0445 \u043a\u0443\u0440\u0441\u043e\u0432 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043e\u043d\u0438 \u043d\u0435 \u0438\u043c\u0435\u044e\u0442 \u043d\u0438\u0447\u0435\u0433\u043e \u043e\u0431\u0449\u0435\u0433\u043e \u0441 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u043e\u0439: \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0434\u0430\u0441\u0442 \u0432\u0430\u043c \u0447\u0438\u0441\u0442\u044b\u0435, \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043d\u0443\u0436\u043d\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435. [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":89207,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-89206","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\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\/fr\/blog\/administrirovanie\/chto-mozhet-pojti-ne-tak-s-data-science-sbor-dannyh\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\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\udd47\u0427\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0439\u0442\u0438 \u043d\u0435 \u0442\u0430\u043a \u0441 Data Science? \u0421\u0431\u043e\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 | ProHoster\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/chto-mozhet-pojti-ne-tak-s-data-science-sbor-dannyh\" \/>\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=\"2020-07-20T05:41:57+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-07-20T05:41:57+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\udd47Que peut-il mal se passer avec la Data Science ? Collecte de donn\u00e9es | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/chto-mozhet-pojti-ne-tak-s-data-science-sbor-dannyh","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"fr_FR","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\udd47\u0427\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0439\u0442\u0438 \u043d\u0435 \u0442\u0430\u043a \u0441 Data Science? \u0421\u0431\u043e\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 | ProHoster","og:url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/chto-mozhet-pojti-ne-tak-s-data-science-sbor-dannyh","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":"2020-07-20T05:41:57+00:00","article:modified_time":"2020-07-20T05:41:57+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"89206","title":null,"description":null,"keywords":null,"keyphrases":{"focus":[],"additional":[]},"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":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 10:51:09","updated":"2026-08-11 12:50:12","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/89206","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=89206"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/89206\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media\/89207"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=89206"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=89206"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=89206"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}