{"id":17349,"date":"2024-05-08T23:05:22","date_gmt":"2024-05-08T19:35:22","guid":{"rendered":"https:\/\/rasanegaar.com\/blog\/%d8%aa%d8%ac%d8%b2%db%8c%d9%87-%d9%88-%d8%aa%d8%ad%d9%84%db%8c%d9%84-%d8%af%d8%a7%d8%af%d9%87-%d9%87%d8%a7-%d8%a8%d8%a7-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%86%da%af%d9%88%d9%86%d9%87-%d8%b9\/"},"modified":"2024-05-08T23:05:22","modified_gmt":"2024-05-08T19:35:22","slug":"%d8%aa%d8%ac%d8%b2%db%8c%d9%87-%d9%88-%d8%aa%d8%ad%d9%84%db%8c%d9%84-%d8%af%d8%a7%d8%af%d9%87-%d9%87%d8%a7-%d8%a8%d8%a7-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%86%da%af%d9%88%d9%86%d9%87-%d8%b9","status":"publish","type":"post","link":"https:\/\/rasanegaar.com\/blog\/%d8%aa%d8%ac%d8%b2%db%8c%d9%87-%d9%88-%d8%aa%d8%ad%d9%84%db%8c%d9%84-%d8%af%d8%a7%d8%af%d9%87-%d9%87%d8%a7-%d8%a8%d8%a7-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%86%da%af%d9%88%d9%86%d9%87-%d8%b9\/","title":{"rendered":"\u062a\u062c\u0632\u06cc\u0647 \u0648 \u062a\u062d\u0644\u06cc\u0644 \u062f\u0627\u062f\u0647 \u0647\u0627 \u0628\u0627 \u067e\u0627\u06cc\u062a\u0648\u0646 &#8211; \u0686\u06af\u0648\u0646\u0647 \u0639\u0645\u0644\u06a9\u0631\u062f \u0627\u062c\u0631\u0627\u06cc \u0627\u0645\u067e\u0627\u06cc\u0631 \u0627\u0633\u062a\u06cc\u062a \u0631\u0627 \u062a\u062c\u0632\u06cc\u0647 \u0648 \u062a\u062d\u0644\u06cc\u0644 \u06a9\u0631\u062f\u0645"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_85 counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\"><p class=\"ez-toc-title\" style=\"cursor:inherit\">\u0633\u0631\u0641\u0635\u0644\u0647\u0627\u06cc \u0645\u0637\u0644\u0628<\/p>\n<\/div><nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/rasanegaar.com\/blog\/%d8%aa%d8%ac%d8%b2%db%8c%d9%87-%d9%88-%d8%aa%d8%ad%d9%84%db%8c%d9%84-%d8%af%d8%a7%d8%af%d9%87-%d9%87%d8%a7-%d8%a8%d8%a7-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%86%da%af%d9%88%d9%86%d9%87-%d8%b9\/#%d9%81%d9%87%d8%b1%d8%b3%d8%aa_%d9%85%d8%b7%d8%a7%d9%84%d8%a8\" >\u0641\u0647\u0631\u0633\u062a \u0645\u0637\u0627\u0644\u0628<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/rasanegaar.com\/blog\/%d8%aa%d8%ac%d8%b2%db%8c%d9%87-%d9%88-%d8%aa%d8%ad%d9%84%db%8c%d9%84-%d8%af%d8%a7%d8%af%d9%87-%d9%87%d8%a7-%d8%a8%d8%a7-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%86%da%af%d9%88%d9%86%d9%87-%d8%b9\/#%da%86%da%af%d9%88%d9%86%d9%87_%d8%af%d8%b1_%d9%86%d9%87%d8%a7%db%8c%d8%aa_%d8%a8%d9%87_%d8%a8%d8%a7%d9%84%d8%a7%db%8c_%d8%b3%d8%a7%d8%ae%d8%aa%d9%85%d8%a7%d9%86_%d8%a7%d9%85%d9%be%d8%a7%db%8c%d8%b1_%d8%a7%d8%b3%d8%aa%db%8c%d8%aa_%d8%af%d9%88%db%8c%d8%af%d9%85\" >\u0686\u06af\u0648\u0646\u0647 \u062f\u0631 \u0646\u0647\u0627\u06cc\u062a \u0628\u0647 \u0628\u0627\u0644\u0627\u06cc \u0633\u0627\u062e\u062a\u0645\u0627\u0646 \u0627\u0645\u067e\u0627\u06cc\u0631 \u0627\u0633\u062a\u06cc\u062a \u062f\u0648\u06cc\u062f\u0645<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/rasanegaar.com\/blog\/%d8%aa%d8%ac%d8%b2%db%8c%d9%87-%d9%88-%d8%aa%d8%ad%d9%84%db%8c%d9%84-%d8%af%d8%a7%d8%af%d9%87-%d9%87%d8%a7-%d8%a8%d8%a7-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%86%da%af%d9%88%d9%86%d9%87-%d8%b9\/#%d8%a2%d9%86%da%86%d9%87_%d8%a8%d8%b1%d8%a7%db%8c_%d8%af%d9%86%d8%a8%d8%a7%d9%84_%da%a9%d8%b1%d8%af%d9%86_%d8%a7%db%8c%d9%86_%d8%a2%d9%85%d9%88%d8%b2%d8%b4_%d9%86%db%8c%d8%a7%d8%b2_%d8%af%d8%a7%d8%b1%db%8c%d8%af\" >\u0622\u0646\u0686\u0647 \u0628\u0631\u0627\u06cc \u062f\u0646\u0628\u0627\u0644 \u06a9\u0631\u062f\u0646 \u0627\u06cc\u0646 \u0622\u0645\u0648\u0632\u0634 \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u06cc\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/rasanegaar.com\/blog\/%d8%aa%d8%ac%d8%b2%db%8c%d9%87-%d9%88-%d8%aa%d8%ad%d9%84%db%8c%d9%84-%d8%af%d8%a7%d8%af%d9%87-%d9%87%d8%a7-%d8%a8%d8%a7-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%86%da%af%d9%88%d9%86%d9%87-%d8%b9\/#%d8%b1%d9%88%d8%b4_%d8%af%d8%b1%db%8c%d8%a7%d9%81%d8%aa_%d8%af%d8%a7%d8%af%d9%87_%d9%87%d8%a7_%d8%a8%d8%a7_%d8%a7%d8%b3%d8%aa%d9%81%d8%a7%d8%af%d9%87_%d8%a7%d8%b2_web_scraping\" >\u0631\u0648\u0634 \u062f\u0631\u06cc\u0627\u0641\u062a \u062f\u0627\u062f\u0647 \u0647\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Web Scraping<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/rasanegaar.com\/blog\/%d8%aa%d8%ac%d8%b2%db%8c%d9%87-%d9%88-%d8%aa%d8%ad%d9%84%db%8c%d9%84-%d8%af%d8%a7%d8%af%d9%87-%d9%87%d8%a7-%d8%a8%d8%a7-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%86%da%af%d9%88%d9%86%d9%87-%d8%b9\/#%d9%82%d9%88%d8%a7%d9%86%db%8c%d9%86_%d8%ae%d8%b1%d8%a7%d8%b4_%d8%af%d8%a7%d8%af%d9%86_%d9%88%d8%a8\" >\u0642\u0648\u0627\u0646\u06cc\u0646 \u062e\u0631\u0627\u0634 \u062f\u0627\u062f\u0646 \u0648\u0628<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/rasanegaar.com\/blog\/%d8%aa%d8%ac%d8%b2%db%8c%d9%87-%d9%88-%d8%aa%d8%ad%d9%84%db%8c%d9%84-%d8%af%d8%a7%d8%af%d9%87-%d9%87%d8%a7-%d8%a8%d8%a7-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%86%da%af%d9%88%d9%86%d9%87-%d8%b9\/#%d8%b1%d9%88%d8%b4_%d9%be%d8%a7%da%a9%d8%b3%d8%a7%d8%b2%db%8c_%d8%af%d8%a7%d8%af%d9%87_%d9%87%d8%a7\" >\u0631\u0648\u0634 \u067e\u0627\u06a9\u0633\u0627\u0632\u06cc \u062f\u0627\u062f\u0647 \u0647\u0627<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/rasanegaar.com\/blog\/%d8%aa%d8%ac%d8%b2%db%8c%d9%87-%d9%88-%d8%aa%d8%ad%d9%84%db%8c%d9%84-%d8%af%d8%a7%d8%af%d9%87-%d9%87%d8%a7-%d8%a8%d8%a7-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%86%da%af%d9%88%d9%86%d9%87-%d8%b9\/#%d8%b1%d9%88%d8%b4_%d8%aa%d8%ac%d8%b2%db%8c%d9%87_%d9%88_%d8%aa%d8%ad%d9%84%db%8c%d9%84_%d8%af%d8%a7%d8%af%d9%87_%d9%87%d8%a7\" >\u0631\u0648\u0634 \u062a\u062c\u0632\u06cc\u0647 \u0648 \u062a\u062d\u0644\u06cc\u0644 \u062f\u0627\u062f\u0647 \u0647\u0627<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/rasanegaar.com\/blog\/%d8%aa%d8%ac%d8%b2%db%8c%d9%87-%d9%88-%d8%aa%d8%ad%d9%84%db%8c%d9%84-%d8%af%d8%a7%d8%af%d9%87-%d9%87%d8%a7-%d8%a8%d8%a7-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%86%da%af%d9%88%d9%86%d9%87-%d8%b9\/#%d8%af%d9%88%d8%b1%d9%87_%d8%b3%d9%82%d9%88%d8%b7_%d8%b1%d9%88%db%8c_%d9%be%d8%a7%d9%86%d8%af%d8%a7%d9%87%d8%a7\" >\u062f\u0648\u0631\u0647 \u0633\u0642\u0648\u0637 \u0631\u0648\u06cc \u067e\u0627\u0646\u062f\u0627\u0647\u0627<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/rasanegaar.com\/blog\/%d8%aa%d8%ac%d8%b2%db%8c%d9%87-%d9%88-%d8%aa%d8%ad%d9%84%db%8c%d9%84-%d8%af%d8%a7%d8%af%d9%87-%d9%87%d8%a7-%d8%a8%d8%a7-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%86%da%af%d9%88%d9%86%d9%87-%d8%b9\/#%d8%aa%d8%b3%d8%aa%d8%8c_%d8%aa%d8%b3%d8%aa%d8%8c_%d9%88_%d8%a8%d8%b9%d8%af_%d8%a7%d8%b2_%d8%a2%d9%86_%e2%80%a6_%d8%aa%d8%b3%d8%aa_%d8%a8%db%8c%d8%b4%d8%aa%d8%b1\" >\u062a\u0633\u062a\u060c \u062a\u0633\u062a\u060c \u0648 \u0628\u0639\u062f \u0627\u0632 \u0622\u0646 &#8230; \u062a\u0633\u062a \u0628\u06cc\u0634\u062a\u0631<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/rasanegaar.com\/blog\/%d8%aa%d8%ac%d8%b2%db%8c%d9%87-%d9%88-%d8%aa%d8%ad%d9%84%db%8c%d9%84-%d8%af%d8%a7%d8%af%d9%87-%d9%87%d8%a7-%d8%a8%d8%a7-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%86%da%af%d9%88%d9%86%d9%87-%d8%b9\/#%d8%b1%d9%88%d8%b4_%d8%aa%d8%ac%d8%b3%d9%85_%d9%86%d8%aa%d8%a7%db%8c%d8%ac\" >\u0631\u0648\u0634 \u062a\u062c\u0633\u0645 \u0646\u062a\u0627\u06cc\u062c<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/rasanegaar.com\/blog\/%d8%aa%d8%ac%d8%b2%db%8c%d9%87-%d9%88-%d8%aa%d8%ad%d9%84%db%8c%d9%84-%d8%af%d8%a7%d8%af%d9%87-%d9%87%d8%a7-%d8%a8%d8%a7-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%86%da%af%d9%88%d9%86%d9%87-%d8%b9\/#%d8%b1%d8%a7%d8%a8%d8%b7_%d9%87%d8%a7%db%8c_%da%a9%d8%a7%d8%b1%d8%a8%d8%b1%db%8c_%d9%85%d8%aa%d9%86%db%8c_tui_%d8%a8%d8%a7_%d9%85%d8%aa%d9%86%db%8c\" >\u0631\u0627\u0628\u0637 \u0647\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631\u06cc \u0645\u062a\u0646\u06cc (TUI) \u0628\u0627 \u0645\u062a\u0646\u06cc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/rasanegaar.com\/blog\/%d8%aa%d8%ac%d8%b2%db%8c%d9%87-%d9%88-%d8%aa%d8%ad%d9%84%db%8c%d9%84-%d8%af%d8%a7%d8%af%d9%87-%d9%87%d8%a7-%d8%a8%d8%a7-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%86%da%af%d9%88%d9%86%d9%87-%d8%b9\/#%d9%86%d9%82%d8%b4%d9%87_%d9%87%d8%a7_%d8%a8%d8%a7_matplotlib\" >\u0646\u0642\u0634\u0647 \u0647\u0627 \u0628\u0627 Matplotlib<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/rasanegaar.com\/blog\/%d8%aa%d8%ac%d8%b2%db%8c%d9%87-%d9%88-%d8%aa%d8%ad%d9%84%db%8c%d9%84-%d8%af%d8%a7%d8%af%d9%87-%d9%87%d8%a7-%d8%a8%d8%a7-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%86%da%af%d9%88%d9%86%d9%87-%d8%b9\/#%d8%aa%d8%b3%d8%aa_%d8%b1%d8%a7%d8%a8%d8%b7_%d9%87%d8%a7%db%8c_%da%a9%d8%a7%d8%b1%d8%a8%d8%b1%db%8c\" >\u062a\u0633\u062a \u0631\u0627\u0628\u0637 \u0647\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631\u06cc<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/rasanegaar.com\/blog\/%d8%aa%d8%ac%d8%b2%db%8c%d9%87-%d9%88-%d8%aa%d8%ad%d9%84%db%8c%d9%84-%d8%af%d8%a7%d8%af%d9%87-%d9%87%d8%a7-%d8%a8%d8%a7-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%86%da%af%d9%88%d9%86%d9%87-%d8%b9\/#%d8%b1%d9%88%d8%b4_%d8%a7%d8%ac%d8%b1%d8%a7%db%8c_%d8%a8%d8%b1%d9%86%d8%a7%d9%85%d9%87_%d9%87%d8%a7\" >\u0631\u0648\u0634 \u0627\u062c\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/rasanegaar.com\/blog\/%d8%aa%d8%ac%d8%b2%db%8c%d9%87-%d9%88-%d8%aa%d8%ad%d9%84%db%8c%d9%84-%d8%af%d8%a7%d8%af%d9%87-%d9%87%d8%a7-%d8%a8%d8%a7-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%86%da%af%d9%88%d9%86%d9%87-%d8%b9\/#%d9%85%d8%b1%d9%88%d8%b1_%d8%a7%d8%b2_%d8%b7%d8%b1%db%8c%d9%82_%d8%af%d8%a7%d8%af%d9%87_%d9%87%d8%a7\" >\u0645\u0631\u0648\u0631 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u062f\u0627\u062f\u0647 \u0647\u0627<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/rasanegaar.com\/blog\/%d8%aa%d8%ac%d8%b2%db%8c%d9%87-%d9%88-%d8%aa%d8%ad%d9%84%db%8c%d9%84-%d8%af%d8%a7%d8%af%d9%87-%d9%87%d8%a7-%d8%a8%d8%a7-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%86%da%af%d9%88%d9%86%d9%87-%d8%b9\/#%da%af%d8%b2%d8%a7%d8%b1%d8%b4_%d9%87%d8%a7%db%8c_%d8%ae%d9%84%d8%a7%d8%b5%d9%87\" >\u06af\u0632\u0627\u0631\u0634 \u0647\u0627\u06cc \u062e\u0644\u0627\u0635\u0647<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/rasanegaar.com\/blog\/%d8%aa%d8%ac%d8%b2%db%8c%d9%87-%d9%88-%d8%aa%d8%ad%d9%84%db%8c%d9%84-%d8%af%d8%a7%d8%af%d9%87-%d9%87%d8%a7-%d8%a8%d8%a7-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%86%da%af%d9%88%d9%86%d9%87-%d8%b9\/#%db%8c%d8%a7%d9%81%d8%aa%d9%86_%d9%85%d9%88%d8%a7%d8%b1%d8%af_%d9%be%d8%b1%d8%aa\" >\u06cc\u0627\u0641\u062a\u0646 \u0645\u0648\u0627\u0631\u062f \u067e\u0631\u062a<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/rasanegaar.com\/blog\/%d8%aa%d8%ac%d8%b2%db%8c%d9%87-%d9%88-%d8%aa%d8%ad%d9%84%db%8c%d9%84-%d8%af%d8%a7%d8%af%d9%87-%d9%87%d8%a7-%d8%a8%d8%a7-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%86%da%af%d9%88%d9%86%d9%87-%d8%b9\/#%da%86%d9%86%d8%af_%d8%b7%d8%b1%d8%ad_%da%af%d8%b1%d8%a7%d9%81%db%8c%da%a9%db%8c_%d8%a8%d8%b1%d8%a7%db%8c_%d8%b4%d9%85%d8%a7\" >\u0686\u0646\u062f \u0637\u0631\u062d \u06af\u0631\u0627\u0641\u06cc\u06a9\u06cc \u0628\u0631\u0627\u06cc \u0634\u0645\u0627<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-19\" href=\"https:\/\/rasanegaar.com\/blog\/%d8%aa%d8%ac%d8%b2%db%8c%d9%87-%d9%88-%d8%aa%d8%ad%d9%84%db%8c%d9%84-%d8%af%d8%a7%d8%af%d9%87-%d9%87%d8%a7-%d8%a8%d8%a7-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%da%86%da%af%d9%88%d9%86%d9%87-%d8%b9\/#%da%86%d9%87_%da%86%db%8c%d8%b2_%d8%af%db%8c%da%af%d8%b1%db%8c_%d9%85%db%8c_%d8%aa%d9%88%d8%a7%d9%86%db%8c%d9%85_%db%8c%d8%a7%d8%af_%d8%a8%da%af%db%8c%d8%b1%db%8c%d9%85%d8%9f\" >\u0686\u0647 \u0686\u06cc\u0632 \u062f\u06cc\u06af\u0631\u06cc \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u0645 \u06cc\u0627\u062f \u0628\u06af\u06cc\u0631\u06cc\u0645\u061f<\/a><\/li><\/ul><\/nav><\/div>\n<span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">\u0632\u0645\u0627\u0646 \u0644\u0627\u0632\u0645 \u0628\u0631\u0627\u06cc \u0645\u0637\u0627\u0644\u0639\u0647: <\/span> <span class=\"rt-time\"> 24<\/span> <span class=\"rt-label rt-postfix\">\u062f\u0642\u06cc\u0642\u0647<\/span><\/span><p> <br \/>\n<\/p>\n<section class=\"post-content \" data-test-label=\"post-content\">\n<p>\u0645\u0633\u0627\u0628\u0642\u0647 \u062f\u0648\u06cc\u062f\u0646 \u0628\u0631\u062c \u0645\u0633\u0627\u0628\u0642\u0647\u200c\u0627\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0627\u0632 \u067e\u0644\u0647\u200c\u0647\u0627\u06cc \u0633\u0627\u062e\u062a\u0645\u0627\u0646 \u0628\u0627\u0644\u0627 \u0645\u06cc\u200c\u0631\u0648\u06cc\u062f.  \u0627\u06cc\u0646\u0647\u0627 \u062f\u0631 \u0633\u0631\u0627\u0633\u0631 \u062c\u0647\u0627\u0646 \u0627\u062a\u0641\u0627\u0642 \u0645\u06cc \u0627\u0641\u062a\u062f.  \u0645\u0646 \u0627\u06cc\u0646 \u0634\u0627\u0646\u0633 \u0631\u0627 \u062f\u0627\u0634\u062a\u0645 \u06a9\u0647 \u062f\u0631 \u0645\u0633\u0627\u0628\u0642\u0647 Empire State Run Up \u062f\u0631 \u0646\u06cc\u0648\u06cc\u0648\u0631\u06a9\u060c \u0646\u0633\u062e\u0647 1402 \u0634\u0631\u06a9\u062a \u06a9\u0646\u0645. <\/p>\n<blockquote><p>\u0645\u0633\u0627\u0628\u0642\u0647 \u062f\u0648 \u0628\u0631\u062c \u0627\u0645\u067e\u0627\u06cc\u0631 \u0627\u0633\u062a\u06cc\u062a (ESBRU) &#8211; \u0627\u0648\u0644\u06cc\u0646 \u0648 \u0645\u0634\u0647\u0648\u0631\u062a\u0631\u06cc\u0646 \u0645\u0633\u0627\u0628\u0642\u0647 \u0628\u0631\u062c \u062f\u0631 \u062c\u0647\u0627\u0646 &#8211; \u062f\u0648\u0646\u062f\u06af\u0627\u0646 \u0631\u0627 \u0627\u0632 \u062f\u0648\u0631 \u0648 \u0646\u0632\u062f\u06cc\u06a9 \u0628\u0647 \u0686\u0627\u0644\u0634 \u0645\u06cc \u06a9\u0634\u062f \u062a\u0627 86 \u067e\u0631\u0648\u0627\u0632 \u0645\u0639\u0631\u0648\u0641 \u062e\u0648\u062f \u0631\u0627 \u0637\u06cc \u06a9\u0646\u0646\u062f &#8211; 1576 \u067e\u0644\u0647.<\/p>\n<p>\u062f\u0631 \u062d\u0627\u0644\u06cc \u06a9\u0647 \u0628\u0627\u0632\u062f\u06cc\u062f\u06a9\u0646\u0646\u062f\u06af\u0627\u0646 \u0645\u06cc \u062a\u0648\u0627\u0646\u0646\u062f \u0627\u0632 \u0637\u0631\u06cc\u0642 \u0622\u0633\u0627\u0646\u0633\u0648\u0631 \u062f\u0631 \u06a9\u0645\u062a\u0631 \u0627\u0632 \u06cc\u06a9 \u062f\u0642\u06cc\u0642\u0647 \u0628\u0647 \u0631\u0635\u062f\u062e\u0627\u0646\u0647 \u0633\u0627\u062e\u062a\u0645\u0627\u0646 \u0628\u0631\u0633\u0646\u062f\u060c \u0633\u0631\u06cc\u0639 \u062a\u0631\u06cc\u0646 \u062f\u0648\u0646\u062f\u06af\u0627\u0646 86 \u0637\u0628\u0642\u0647 \u0631\u0627 \u0628\u0627 \u067e\u0627\u06cc \u067e\u06cc\u0627\u062f\u0647 \u062f\u0631 \u062d\u062f\u0648\u062f 10 \u062f\u0642\u06cc\u0642\u0647 \u0637\u06cc \u06a9\u0631\u062f\u0647 \u0627\u0646\u062f.<\/p>\n<p>\u0631\u0647\u0628\u0631\u0627\u0646 \u0648\u0631\u0632\u0634 \u0628\u0631\u062c\u200c\u062f\u0648\u0627\u0646\u06cc \u062d\u0631\u0641\u0647\u200c\u0627\u06cc \u062f\u0631 \u0633\u0627\u062e\u062a\u0645\u0627\u0646 \u0627\u0645\u067e\u0627\u06cc\u0631 \u0627\u0633\u062a\u06cc\u062a \u06af\u0631\u062f \u0647\u0645 \u0645\u06cc\u200c\u0622\u06cc\u0646\u062f \u0648 \u0628\u0631\u062e\u06cc \u0622\u0646 \u0631\u0627 \u0622\u0632\u0645\u0648\u0646 \u0646\u0647\u0627\u06cc\u06cc \u0627\u0633\u062a\u0642\u0627\u0645\u062a \u0645\u06cc\u200c\u062f\u0627\u0646\u0646\u062f.<\/p><\/blockquote>\n<p>\u0634\u0627\u0646\u0633 \u0622\u0648\u0631\u062f\u0645 \u0648 \u0645\u0648\u0641\u0642 \u0634\u062f\u0645 \u062f\u0631 \u0627\u06cc\u0646 \u0645\u0633\u0627\u0628\u0642\u0647 \u0634\u0631\u06a9\u062a \u06a9\u0646\u0645.  \u0686\u0646\u062f \u0631\u0648\u0632 \u067e\u0633 \u0627\u0632 \u067e\u0627\u06cc\u0627\u0646 \u0645\u0633\u0627\u0628\u0642\u0647\u060c \u0645\u062a\u0648\u062c\u0647 \u0634\u062f\u0645 \u06a9\u0647 \u0645\u06cc\u200c\u062e\u0648\u0627\u0647\u0645 \u062f\u0631\u0628\u0627\u0631\u0647 \u0639\u0645\u0644\u06a9\u0631\u062f\u0645 \u0628\u06cc\u0634\u062a\u0631 \u0628\u062f\u0627\u0646\u0645 \u0648 \u0686\u0647 \u06a9\u0627\u0631\u0647\u0627\u06cc\u06cc \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u0645 \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u0645 \u062a\u0627 \u0628\u0647\u062a\u0631 \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u0645.<\/p>\n<p>\u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0628\u0647 \u0637\u0648\u0631 \u0637\u0628\u06cc\u0639\u06cc \u0628\u0647 \u0648\u0628 \u0633\u0627\u06cc\u062a \u0628\u0631\u06af\u0632\u0627\u0631\u06a9\u0646\u0646\u062f\u0647 \u0645\u0633\u0627\u0628\u0642\u0647 \u0631\u0641\u062a\u0645 \u0648 \u0634\u0631\u0648\u0639 \u0628\u0647 \u0628\u0631\u0631\u0633\u06cc \u0627\u0639\u062f\u0627\u062f \u06a9\u0631\u062f\u0645.  \u0648 \u0622\u0647\u0633\u062a\u0647 \u0648 \u062e\u0633\u062a\u0647 \u06a9\u0646\u0646\u062f\u0647 \u0628\u0648\u062f\u060c \u0628\u0647 \u0639\u0644\u0627\u0648\u0647 \u0645\u0634\u06a9\u0644\u0627\u062a \u0628\u06cc\u0634\u062a\u0631\u06cc \u0631\u0627 \u0628\u0647 \u0647\u0645\u0631\u0627\u0647 \u062f\u0627\u0634\u062a:<\/p>\n<ol>\n<li>\u0628\u0647 \u062f\u0633\u062a \u0622\u0648\u0631\u062f\u0646 \u062f\u0627\u062f\u0647 \u0647\u0627 \u0628\u0631\u0627\u06cc \u062a\u062c\u0632\u06cc\u0647 \u0648 \u062a\u062d\u0644\u06cc\u0644 \u0622\u0641\u0644\u0627\u06cc\u0646 \u062f\u0634\u0648\u0627\u0631 \u0627\u0633\u062a.  \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0646\u062a\u0627\u06cc\u062c \u062e\u0648\u062f \u0648 \u0633\u0627\u06cc\u0631 \u0645\u0648\u0627\u0631\u062f \u0631\u0627 \u0628\u0631\u0627\u06cc \u0645\u0642\u0627\u06cc\u0633\u0647 \u0628\u0628\u06cc\u0646\u06cc\u062f\u060c \u0627\u0645\u0627 \u0645\u062a\u0648\u062c\u0647 \u0634\u062f\u0645 \u06a9\u0647 \u0627\u0628\u0632\u0627\u0631\u0647\u0627 \u06af\u0632\u06cc\u0646\u0647\u200c\u0627\u06cc \u0628\u0631\u0627\u06cc \u062f\u0627\u0646\u0644\u0648\u062f \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u062e\u0627\u0645 \u0627\u0631\u0627\u0626\u0647 \u0646\u0645\u06cc\u200c\u062f\u0647\u0646\u062f \u0648 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0622\u0646\u0647\u0627 \u0646\u0627\u0634\u06cc\u0627\u0646\u0647 \u0627\u0633\u062a.<\/li>\n<li>\u0627\u06a9\u062b\u0631 \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc \u0645\u0648\u062c\u0648\u062f \u0628\u0631\u0627\u06cc \u062a\u062c\u0632\u06cc\u0647 \u0648 \u062a\u062d\u0644\u06cc\u0644 \u0646\u062a\u0627\u06cc\u062c \u0645\u0633\u0627\u0628\u0642\u0647 \u067e\u0648\u0644\u06cc \u0647\u0633\u062a\u0646\u062f \u06cc\u0627 \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u0646\u0648\u0639 \u0645\u0633\u0627\u0628\u0642\u0647 \u06a9\u0627\u0631\u0628\u0631\u062f \u0646\u062f\u0627\u0631\u0646\u062f.  \u062f\u0627\u0646\u0633\u062a\u0646 \u0627\u06cc\u0646\u06a9\u0647 \u0686\u0647 \u0627\u0646\u062a\u0638\u0627\u0631\u06cc \u062f\u0627\u0631\u06cc\u062f \u0627\u0636\u0637\u0631\u0627\u0628 \u0634\u0645\u0627 \u0631\u0627 \u06a9\u0627\u0647\u0634 \u0645\u06cc \u062f\u0647\u062f\u060c \u0628\u0647 \u0634\u0645\u0627 \u0627\u0645\u06a9\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u0628\u0647\u062a\u0631 \u062a\u0645\u0631\u06cc\u0646 \u06a9\u0646\u06cc\u062f \u0648 \u0627\u0646\u062a\u0638\u0627\u0631\u0627\u062a \u0634\u0645\u0627 \u0631\u0627 \u06a9\u0646\u062a\u0631\u0644 \u0645\u06cc \u06a9\u0646\u062f.<\/li>\n<\/ol>\n<p>\u0627\u062d\u062a\u0645\u0627\u0644\u0627\u064b \u062a\u0627 \u0628\u0647 \u062d\u0627\u0644 \u062d\u062f\u0633 \u0632\u062f\u0647 \u0627\u06cc\u062f \u06a9\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0645\u0634\u06a9\u0644\u0627\u062a \u0628\u0627\u0632\u06cc\u0627\u0628\u06cc \u062f\u0627\u062f\u0647 \u0647\u0627 \u0648 \u062a\u062c\u0632\u06cc\u0647 \u0648 \u062a\u062d\u0644\u06cc\u0644 \u067e\u0633 \u0627\u0632 \u0645\u0633\u0627\u0628\u0642\u0647 \u0631\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Open \u06a9\u0645 \u0647\u0632\u06cc\u0646\u0647 \u062d\u0644 \u06a9\u0646\u06cc\u062f. Source \u0627\u0628\u0632\u0627\u0631.  \u0627\u06cc\u0646 \u0647\u0645\u0686\u0646\u06cc\u0646 \u0628\u0647 \u0634\u0645\u0627 \u0627\u0645\u06a9\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u062a\u06a9\u0646\u06cc\u06a9 \u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641\u06cc \u0631\u0627 \u0628\u0631\u0627\u06cc \u06cc\u0627\u062f\u06af\u06cc\u0631\u06cc \u062f\u0631 \u0645\u0648\u0631\u062f \u0645\u0633\u0627\u0628\u0642\u0647 \u0648 \u0628\u0633\u062a\u0647 \u0628\u0647 \u0622\u0646 \u0627\u0639\u0645\u0627\u0644 \u06a9\u0646\u06cc\u062f \u0631\u0648\u06cc \u06a9\u06cc\u0641\u06cc\u062a \u062f\u0627\u062f\u0647 \u0647\u0627\u060c \u062d\u062a\u06cc \u067e\u06cc\u0634 \u0628\u06cc\u0646\u06cc \u0639\u0645\u0644\u06a9\u0631\u062f.<\/p>\n<p>\u0627\u06cc\u0646 \u06cc\u06a9 \u0642\u0637\u0639\u0647 \u0628\u0633\u06cc\u0627\u0631 \u0634\u062e\u0635\u06cc \u0628\u0631\u0627\u06cc \u0645\u0646 \u0627\u0633\u062a.  \u0645\u0646 \u0646\u062a\u0627\u06cc\u062c \u0645\u0633\u0627\u0628\u0642\u0647 \u062e\u0648\u062f \u0631\u0627 \u0628\u0647 \u0627\u0634\u062a\u0631\u0627\u06a9 \u0645\u06cc \u06af\u0630\u0627\u0631\u0645 \u0648 \u0646\u0638\u0631 \u0645\u063a\u0631\u0636\u0627\u0646\u0647 \u062e\u0648\u062f \u0631\u0627 \u062f\u0631 \u0645\u0648\u0631\u062f \u0645\u0633\u0627\u0628\u0642\u0647 \u0628\u0647 \u0634\u0645\u0627 \u0645\u06cc \u062f\u0647\u0645.  \ud83d\ude01<\/p>\n<h2 id=\"table-of-contents\"><span class=\"ez-toc-section\" id=\"%d9%81%d9%87%d8%b1%d8%b3%d8%aa_%d9%85%d8%b7%d8%a7%d9%84%d8%a8\"><\/span>\u0641\u0647\u0631\u0633\u062a \u0645\u0637\u0627\u0644\u0628<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<ol>\n<li>\u0686\u06af\u0648\u0646\u0647 \u062f\u0631 \u0646\u0647\u0627\u06cc\u062a \u0628\u0647 \u0628\u0627\u0644\u0627\u06cc \u0633\u0627\u062e\u062a\u0645\u0627\u0646 \u0627\u0645\u067e\u0627\u06cc\u0631 \u0627\u0633\u062a\u06cc\u062a \u062f\u0648\u06cc\u062f\u0645<\/li>\n<li>\u0622\u0646\u0686\u0647 \u0628\u0631\u0627\u06cc \u062f\u0646\u0628\u0627\u0644 \u06a9\u0631\u062f\u0646 \u0627\u06cc\u0646 \u0622\u0645\u0648\u0632\u0634 \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u06cc\u062f <\/li>\n<li>\u0631\u0648\u0634 \u062f\u0631\u06cc\u0627\u0641\u062a \u062f\u0627\u062f\u0647 \u0647\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Web Scraping<\/li>\n<li>\u0631\u0648\u0634 \u067e\u0627\u06a9\u0633\u0627\u0632\u06cc \u062f\u0627\u062f\u0647 \u0647\u0627<\/li>\n<li>\u0631\u0648\u0634 \u062a\u062c\u0632\u06cc\u0647 \u0648 \u062a\u062d\u0644\u06cc\u0644 \u062f\u0627\u062f\u0647 \u0647\u0627<\/li>\n<li>\u0631\u0648\u0634 \u062a\u062c\u0633\u0645 \u0646\u062a\u0627\u06cc\u062c<\/li>\n<li>\u0631\u0648\u0634 \u0627\u062c\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627<\/li>\n<li>\u0686\u0647 \u0686\u06cc\u0632 \u062f\u06cc\u06af\u0631\u06cc \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u0645 \u06cc\u0627\u062f \u0628\u06af\u06cc\u0631\u06cc\u0645\u061f<\/li>\n<\/ol>\n<h2 id=\"how-i-ended-up-running-to-the-top-of-the-empire-state-building\"><span class=\"ez-toc-section\" id=\"%da%86%da%af%d9%88%d9%86%d9%87_%d8%af%d8%b1_%d9%86%d9%87%d8%a7%db%8c%d8%aa_%d8%a8%d9%87_%d8%a8%d8%a7%d9%84%d8%a7%db%8c_%d8%b3%d8%a7%d8%ae%d8%aa%d9%85%d8%a7%d9%86_%d8%a7%d9%85%d9%be%d8%a7%db%8c%d8%b1_%d8%a7%d8%b3%d8%aa%db%8c%d8%aa_%d8%af%d9%88%db%8c%d8%af%d9%85\"><\/span>\u0686\u06af\u0648\u0646\u0647 \u062f\u0631 \u0646\u0647\u0627\u06cc\u062a \u0628\u0647 \u0628\u0627\u0644\u0627\u06cc \u0633\u0627\u062e\u062a\u0645\u0627\u0646 \u0627\u0645\u067e\u0627\u06cc\u0631 \u0627\u0633\u062a\u06cc\u062a \u062f\u0648\u06cc\u062f\u0645<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0628\u0633\u06cc\u0627\u0631\u06cc \u0627\u0632 \u0645\u0627 \u062f\u0631 \u0645\u0642\u0637\u0639\u06cc \u0627\u0632 \u0632\u0646\u062f\u06af\u06cc \u062e\u0648\u062f \u06cc\u06a9 \u0645\u0633\u0627\u0628\u0642\u0647 \u0645\u0646\u0638\u0645 \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0631\u062f\u0647 \u0627\u06cc\u0645 &#8211; \u0645\u0633\u0627\u0641\u062a \u0647\u0627\u06cc \u0632\u06cc\u0627\u062f\u06cc \u0645\u0627\u0646\u0646\u062f \u0627\u06cc\u0646 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f <em>5K<\/em>\u060c <em>10 \u0647\u0632\u0627\u0631<\/em>\u060c <em>\u0646\u06cc\u0645<\/em> <em>\u0645\u0627\u0631\u0627\u062a\u0646<\/em>\u060c \u0648 <em>\u067e\u0631 \u0634\u062f\u0647<\/em> <em>\u0645\u0627\u0631\u0627\u062a\u0646<\/em>.  \u0627\u0645\u0627 \u0647\u06cc\u0686 \u0631\u0627\u0647\u06cc \u0628\u0631\u0627\u06cc \u0645\u0642\u0627\u06cc\u0633\u0647 \u0639\u0645\u0644\u06a9\u0631\u062f \u0634\u0645\u0627 \u062f\u0631 \u062d\u06cc\u0646 \u062f\u0648\u06cc\u062f\u0646 \u0627\u0632 \u067e\u0644\u0647\u200c\u0647\u0627 \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0631\u062f<br \/>\u0628\u0627\u0644\u0627\u06cc \u06cc\u06a9\u06cc \u0627\u0632 \u0645\u0639\u0631\u0648\u0641 \u062a\u0631\u06cc\u0646 \u0633\u0627\u062e\u062a\u0645\u0627\u0646 \u0647\u0627\u06cc \u062c\u0647\u0627\u0646.<\/p>\n<p>\u0627\u06af\u0631 \u062a\u0627 \u0628\u0647 \u062d\u0627\u0644 \u062f\u0631 \u067e\u0627\u06cc\u0647 \u0622\u0633\u0645\u0627\u0646 \u062e\u0631\u0627\u0634 \u0647\u0627 \u062f\u0631 \u0634\u0647\u0631 \u0646\u06cc\u0648\u06cc\u0648\u0631\u06a9 \u0628\u0648\u062f\u0647 \u0627\u06cc\u062f \u0648 \u0628\u0647 \u0628\u0627\u0644\u0627 \u0646\u06af\u0627\u0647 \u06a9\u0631\u062f\u0647 \u0627\u06cc\u062f\u060c \u0627\u06cc\u0646 \u0627\u06cc\u062f\u0647 \u0631\u0627 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0631\u062f\u0647 \u0627\u06cc\u062f.  \u062e\u0648\u062f\u062a\u0627\u0646 \u0631\u0627 \u062a\u0635\u0648\u0631 \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0628\u062f\u0648\u0646 \u062a\u0648\u0642\u0641 \u0627\u0632 \u067e\u0644\u0647\u200c\u0647\u0627\u060c \u062a\u0627 \u0628\u0627\u0644\u0627\u060c \u0628\u0627\u0644\u0627 \u0645\u06cc\u200c\u0631\u0648\u06cc\u062f.<\/p>\n<p>\u0642\u0628\u0648\u0644 \u0634\u062f\u0646 \u0633\u062e\u062a \u0627\u0633\u062a\u060c \u0632\u06cc\u0631\u0627 \u0628\u0631\u062e\u0644\u0627\u0641 \u0645\u0633\u0627\u0628\u0642\u0647\u200c\u0627\u06cc \u0645\u0627\u0646\u0646\u062f \u0645\u0627\u0631\u0627\u062a\u0646 \u0646\u06cc\u0648\u06cc\u0648\u0631\u06a9\u060c \u0633\u0627\u062e\u062a\u0645\u0627\u0646 \u0627\u0645\u067e\u0627\u06cc\u0631 \u0627\u0633\u062a\u06cc\u062a \u0641\u0642\u0637 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u062f \u062d\u062f\u0648\u062f 500 \u062f\u0648\u0646\u062f\u0647 \u0631\u0627 \u062f\u0631 \u062e\u0648\u062f \u062c\u0627\u06cc \u062f\u0647\u062f (\u06cc\u0627 \u0628\u0647\u062a\u0631 \u0627\u0633\u062a \u0628\u06af\u0648\u06cc\u0645). <em>\u06a9\u0648\u0647\u0646\u0648\u0631\u062f\u0627\u0646<\/em>\u061f).<\/p>\n<p>\u0628\u0647 \u0627\u06cc\u0646 \u0648\u0627\u0642\u0639\u06cc\u062a \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u062a\u0642\u0627\u0636\u0627 \u0628\u0631\u0627\u06cc \u0634\u0631\u06a9\u062a \u062f\u0631 \u0622\u0646 \u0632\u06cc\u0627\u062f \u0627\u0633\u062a\u060c \u0648 \u0633\u067e\u0633 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u0628\u06cc\u0646\u06cc\u062f \u06a9\u0647 \u0634\u0627\u0646\u0633 \u0634\u0645\u0627 \u0628\u0631\u0627\u06cc \u0634\u0631\u06a9\u062a \u062f\u0631 \u0642\u0631\u0639\u0647 \u06a9\u0634\u06cc \u0628\u0633\u06cc\u0627\u0631 \u0627\u0646\u062f\u06a9 \u0627\u0633\u062a (\u062f\u0631 \u062c\u0627\u06cc\u06cc \u062e\u0648\u0627\u0646\u062f\u0645 \u06a9\u0647 \u062a\u0646\u0647\u0627 50 \u0645\u0648\u0642\u0639\u06cc\u062a \u0644\u0627\u062a\u0627\u0631\u06cc \u0628\u0631\u0627\u06cc \u0628\u06cc\u0634 \u0627\u0632 5000 \u0645\u062a\u0642\u0627\u0636\u06cc \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f).<\/p>\n<p>\u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u062a\u0639\u062c\u0628 \u0645\u0646 \u0631\u0627 \u062a\u0635\u0648\u0631 \u06a9\u0646\u06cc\u062f \u0648\u0642\u062a\u06cc \u0627\u06cc\u0645\u06cc\u0644\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0631\u062f\u0645 \u06a9\u0647 \u0645\u06cc \u06af\u0641\u062a \u067e\u0633 \u0627\u0632 4 \u0633\u0627\u0644 \u062a\u0644\u0627\u0634 \u0645\u062a\u0648\u0627\u0644\u06cc \u0628\u0631\u0627\u06cc \u0634\u0631\u06a9\u062a \u0627\u0646\u062a\u062e\u0627\u0628 \u0634\u062f\u0647 \u0627\u0645.<\/p>\n<p>\u0648\u062d\u0634\u062a \u06a9\u0631\u062f\u0645.  \u0622\u06cc\u0627 \u062a\u0627 \u0628\u0647 \u062d\u0627\u0644 \u062f\u0631 \u067e\u0627\u06cc\u06af\u0627\u0647 \u0627\u0645\u067e\u0627\u06cc\u0631 \u0627\u0633\u062a\u06cc\u062a \u0628\u0648\u062f\u0647 \u0627\u06cc\u062f \u0648 \u0628\u0647 \u0628\u0627\u0644\u0627 \u0646\u06af\u0627\u0647 \u06a9\u0631\u062f\u0647 \u0627\u06cc\u062f\u061f  \u0628\u0639\u0636\u06cc \u0631\u0648\u0632\u0647\u0627 \u06a9\u0647 \u0647\u0648\u0627 \u0627\u0628\u0631\u06cc \u0627\u0633\u062a \u062d\u062a\u06cc \u0646\u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u0627\u0644\u0627\u06cc \u0633\u0627\u062e\u062a\u0645\u0627\u0646 \u0631\u0627 \u0628\u0628\u06cc\u0646\u06cc\u062f.  <\/p>\n<p>\u0645\u0646 \u0646\u0627\u0622\u0645\u0627\u062f\u0647 \u0646\u0628\u0648\u062f\u0645  \u0627\u0645\u0627 \u0645\u0646 \u0645\u062c\u0628\u0648\u0631 \u0634\u062f\u0645 \u0631\u0648\u0627\u0644 \u062a\u0645\u0631\u06cc\u0646\u06cc \u062e\u0648\u062f \u0631\u0627 \u0637\u0648\u0631\u06cc \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0646\u0645 \u06a9\u0647 \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u0686\u0627\u0644\u0634 \u0628\u0627 \u06cc\u06a9 \u067e\u0646\u062c\u0631\u0647 \u06a9\u0648\u0686\u06a9 \u062f\u0648 \u0645\u0627\u0647\u0647 \u0622\u0645\u0627\u062f\u0647 \u0628\u0627\u0634\u0645 \u0648 \u0647\u06cc\u0686 \u062a\u062c\u0631\u0628\u0647 \u0627\u06cc \u062f\u0631 \u062f\u0648\u06cc\u062f\u0646 \u0628\u0631\u062c \u0646\u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0645.<\/p>\n<p>\u0631\u0648\u0632 \u0645\u0633\u0627\u0628\u0642\u0647 \u0641\u0631\u0627 \u0631\u0633\u06cc\u062f \u0648 \u0628\u0631\u0627\u06cc \u0645\u0646 \u0627\u06cc\u0646\u06af\u0648\u0646\u0647 \u06af\u0630\u0634\u062a:<\/p>\n<ul>\n<li>\u0633\u062e\u062a \u0628\u0648\u062f.  \u0645\u06cc\u200c\u062f\u0627\u0646\u0633\u062a\u0645 \u06a9\u0647 \u0628\u0627\u06cc\u062f \u062e\u0648\u062f\u0645 \u0631\u0627 \u067e\u06cc\u0634 \u0628\u0628\u0631\u0645\u060c \u0648\u06af\u0631\u0646\u0647 \u0645\u0633\u0627\u0628\u0642\u0647 \u0628\u0631\u0627\u06cc \u0645\u0646 \u062a\u0645\u0627\u0645 \u0645\u06cc\u200c\u0634\u062f \u0631\u0648\u06cc \u0637\u0628\u0642\u0647 20 \u0628\u0631 \u062e\u0644\u0627\u0641 86.  \u0628\u0627\u06cc\u062f \u062a\u0645\u0631\u06a9\u0632 \u06a9\u0646\u06cc \u0631\u0648\u06cc \u06cc\u06a9 \u0630\u0647\u0646\u06cc\u062a &#8220;\u0627\u062f\u0627\u0645\u0647 \u062f\u0647\u06cc\u062f&#8221;\u060c \u0635\u0631\u0641 \u0646\u0638\u0631 \u0627\u0632 \u0627\u06cc\u0646\u06a9\u0647 \u0686\u0642\u062f\u0631 \u0627\u062d\u0633\u0627\u0633 \u062e\u0633\u062a\u06af\u06cc \u0645\u06cc \u06a9\u0646\u06cc\u062f.  \u0648 \u0628\u0639\u062f \u062a\u0645\u0627\u0645 \u0645\u06cc \u0634\u0648\u062f\u060c \u062f\u0631\u0633\u062a \u0645\u062b\u0644 \u0622\u0646.<\/li>\n<li>\u0634\u0645\u0627 \u062f\u0648\u06cc \u0633\u0631\u0639\u062a \u0646\u0645\u06cc\u200c\u06a9\u0646\u06cc\u062f\u060c \u0647\u0631 \u0628\u0627\u0631 2 \u067e\u0644\u0647 \u0631\u0627 \u0628\u0627 \u0633\u0631\u0639\u062a \u062b\u0627\u0628\u062a \u0628\u0627\u0644\u0627 \u0645\u06cc\u200c\u0631\u0648\u06cc\u062f \u0648 \u0627\u0632 \u0646\u0631\u062f\u0647\u200c\u0647\u0627 \u0628\u0631\u0627\u06cc \u0628\u0631\u062f\u0627\u0634\u062a\u0646 \u0648\u0632\u0646 \u0627\u0632 \u0631\u0648\u06cc \u067e\u0627\u0647\u0627\u06cc\u062a\u0627\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u062f.<\/li>\n<li>\u0628\u062f\u0648\u0646 \u0646\u06cc\u0627\u0632 \u0628\u0647 \u0628\u0627\u0631\u06af\u06cc\u0631\u06cc \u06a9\u0631\u0628\u0648\u0647\u06cc\u062f\u0631\u0627\u062a \u06cc\u0627 \u0647\u06cc\u062f\u0631\u0627\u062a\u0647 \u06a9\u0631\u062f\u0646 \u0628\u06cc\u0634 \u0627\u0632 \u062d\u062f.  \u0627\u06af\u0631 \u062e\u0648\u0628 \u0639\u0645\u0644 \u06a9\u0646\u06cc\u062f\u060c \u062f\u0631 \u062d\u062f\u0648\u062f 30 \u062f\u0642\u06cc\u0642\u0647 \u062a\u0645\u0627\u0645 \u062e\u0648\u0627\u0647\u06cc\u062f \u0634\u062f.<\/li>\n<li>\u06a9\u0633\u06cc \u0628\u0647 \u06a9\u0633\u06cc \u0641\u0634\u0627\u0631 \u0646\u0645\u06cc \u0622\u0648\u0631\u062f.  \u062d\u062f\u0627\u0642\u0644 \u0628\u0631\u0627\u06cc \u0645\u0633\u0627\u0628\u0642\u0647 \u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u063a\u06cc\u0631 \u0646\u062e\u0628\u0647 \u0645\u0627\u0646\u0646\u062f \u0645\u0646\u060c \u0645\u0646 \u062f\u0631 \u0628\u06cc\u0634\u062a\u0631 \u0645\u0633\u0627\u0628\u0642\u0627\u062a \u062a\u0646\u0647\u0627 \u0628\u0648\u062f\u0645.<\/li>\n<li>\u0645\u0646 \u0642\u0628\u0648\u0644 \u0634\u062f\u0645 \u0648 \u0627\u0632 \u0627\u0641\u0631\u0627\u062f \u0632\u06cc\u0627\u062f\u06cc \u0639\u0628\u0648\u0631 \u06a9\u0631\u062f\u0645 \u06a9\u0647 \u0642\u0627\u0646\u0648\u0646 &#8220;\u062e\u0648\u062f\u062a \u0633\u0631\u0639\u062a&#8221; \u0631\u0627 \u0641\u0631\u0627\u0645\u0648\u0634 \u06a9\u0631\u062f\u0646\u062f.  \u0627\u06af\u0631 \u062f\u0648\u06cc \u0633\u0631\u0639\u062a \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f\u060c \u0645\u0637\u0645\u0626\u0646\u0627\u064b \u0642\u0628\u0644 \u0627\u0632 \u0637\u0628\u0642\u0647 25 \u0628\u0631\u0634\u062a\u0647 \u0645\u06cc \u0634\u0648\u06cc\u062f.<\/li>\n<\/ul>\n<p>\u0645\u0646 \u062e\u06cc\u0644\u06cc \u062e\u0648\u0634\u062d\u0627\u0644 \u0634\u062f\u0645 \u0648 \u0627\u0632 \u0627\u06cc\u0646\u06a9\u0647 \u0627\u06cc\u0646 \u0645\u0633\u0627\u0628\u0642\u0647 \u0627\u0632 \u0644\u06cc\u0633\u062a \u0633\u0637\u0644 \u0645\u0646 \u062d\u0630\u0641 \u0634\u062f\u060c \u0628\u0633\u06cc\u0627\u0631 \u0631\u0636\u0627\u06cc\u062a \u062f\u0627\u0634\u062a\u0645\u060c \u0647\u0645\u0627\u0646 \u0686\u06cc\u0632\u06cc \u06a9\u0647 \u0628\u0639\u062f \u0627\u0632 \u062f\u0648\u06cc\u062f\u0646 \u062f\u0631 \u0645\u0627\u0631\u0627\u062a\u0646 \u0646\u06cc\u0648\u06cc\u0648\u0631\u06a9 \u0627\u062d\u0633\u0627\u0633 \u06a9\u0631\u062f\u0645.<\/p>\n<p>\u0627\u06a9\u0646\u0648\u0646 \u0632\u0645\u0627\u0646 \u0622\u0646 \u0631\u0633\u06cc\u062f\u0647 \u0628\u0648\u062f \u06a9\u0647 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0686\u0646\u062f\u06cc\u0646 \u0645\u0648\u0631\u062f \u0627\u0632 \u0627\u0648\u067e\u0646 \u0645\u0648\u0631\u062f \u0639\u0644\u0627\u0642\u0647 \u062e\u0648\u062f\u060c \u06cc\u06a9 \u062a\u062d\u0644\u06cc\u0644 \u067e\u0633 \u0627\u0632 \u0645\u0633\u0627\u0628\u0642\u0647 \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u0645 Source \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u062f\u0631 \u0642\u0633\u0645\u062a \u0628\u0639\u062f\u06cc \u062a\u0648\u0636\u06cc\u062d \u062e\u0648\u0627\u0647\u0645 \u062f\u0627\u062f.<\/p>\n<h2 id=\"what-you-need-to-follow-this-tutorial\"><span class=\"ez-toc-section\" id=\"%d8%a2%d9%86%da%86%d9%87_%d8%a8%d8%b1%d8%a7%db%8c_%d8%af%d9%86%d8%a8%d8%a7%d9%84_%da%a9%d8%b1%d8%af%d9%86_%d8%a7%db%8c%d9%86_%d8%a2%d9%85%d9%88%d8%b2%d8%b4_%d9%86%db%8c%d8%a7%d8%b2_%d8%af%d8%a7%d8%b1%db%8c%d8%af\"><\/span>\u0622\u0646\u0686\u0647 \u0628\u0631\u0627\u06cc \u062f\u0646\u0628\u0627\u0644 \u06a9\u0631\u062f\u0646 \u0627\u06cc\u0646 \u0622\u0645\u0648\u0632\u0634 \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u06cc\u062f <span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0645\u0627\u0646\u0646\u062f \u0645\u0633\u0627\u0628\u0642\u0647\u060c \u0628\u06cc\u0634\u062a\u0631 \u0686\u0627\u0644\u0634\u200c\u0647\u0627\u06cc \u0646\u0648\u0634\u062a\u0646 \u0627\u06cc\u0646 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0630\u0647\u0646\u06cc \u0628\u0648\u062f.  \u0634\u0645\u0627 \u0641\u0642\u0637 \u0628\u0627\u06cc\u062f \u0645\u0634\u06a9\u0644 \u0627\u0635\u0644\u06cc \u0631\u0627 \u0628\u0647 \u0642\u0637\u0639\u0627\u062a \u06a9\u0648\u0686\u06a9\u062a\u0631 \u062a\u0642\u0633\u06cc\u0645 \u06a9\u0646\u06cc\u062f \u0648 \u0633\u067e\u0633 \u0647\u0631 \u06cc\u06a9 \u0631\u0627 \u062f\u0631 \u06cc\u06a9 \u0632\u0645\u0627\u0646 \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u06cc\u062f:<\/p>\n<ol>\n<li>\u062f\u0627\u062f\u0647 \u0647\u0627 \u0631\u0627 \u0628\u0627 \u062e\u0631\u0627\u0634 \u062f\u0627\u062f\u0646 \u0648\u0628 \u0633\u0627\u06cc\u062a \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u06cc\u062f (\u0633\u0627\u06cc\u062a \u0647\u0627\u06cc \u0628\u0633\u06cc\u0627\u0631 \u06a9\u0645\u06cc \u0628\u0647 \u0634\u0645\u0627 \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc \u062f\u0647\u0646\u062f export \u0646\u062a\u0627\u06cc\u062c \u0645\u0633\u0627\u0628\u0642\u0647 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 CSV).<\/li>\n<li>\u062f\u0627\u062f\u0647 \u0647\u0627 \u0631\u0627 \u067e\u0627\u06a9 \u06a9\u0646\u06cc\u062f\u060c \u0646\u0631\u0645\u0627\u0644 \u06a9\u0646\u06cc\u062f \u0648 \u0628\u0631\u0627\u06cc \u067e\u0631\u062f\u0627\u0632\u0634 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0622\u0645\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.<\/li>\n<li>\u0633\u0648\u0627\u0644 \u0628\u067e\u0631\u0633.  \u0633\u067e\u0633 \u0622\u0646 \u0633\u0648\u0627\u0644\u0627\u062a \u0631\u0627 \u0628\u0647 \u06a9\u062f \u0648 \u062a\u0633\u062a \u062a\u0631\u062c\u0645\u0647 \u06a9\u0646\u06cc\u062f\u060c \u062f\u0631 \u062d\u0627\u0644\u062a \u0627\u06cc\u062f\u0647 \u0622\u0644 \u0627\u0632 \u0622\u0645\u0627\u0631 \u0628\u0631\u0627\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a \u067e\u0627\u0633\u062e \u0647\u0627\u06cc \u0642\u0627\u0628\u0644 \u0627\u0639\u062a\u0645\u0627\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.<\/li>\n<li>\u0646\u062a\u0627\u06cc\u062c \u0631\u0627 \u0627\u0631\u0627\u0626\u0647 \u062f\u0647\u06cc\u062f.  \u06cc\u06a9 \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc (\u0645\u062a\u0646 \u06cc\u0627 \u06af\u0631\u0627\u0641\u06cc\u06a9) \u0628\u0647 \u062f\u0644\u06cc\u0644 \u0645\u0635\u0631\u0641 \u06a9\u0645\u0634 \u0645\u0639\u062c\u0632\u0647 \u0645\u06cc \u06a9\u0646\u062f\u060c \u0627\u0645\u0627 \u0646\u0645\u0648\u062f\u0627\u0631\u0647\u0627 \u0646\u06cc\u0632 \u06af\u0648\u06cc\u0627\u06cc \u062e\u0648\u0628\u06cc \u0647\u0633\u062a\u0646\u062f.<\/li>\n<\/ol>\n<p>\u0628\u0631\u0627\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0628\u06cc\u0634\u062a\u0631 \u0627\u0632 \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647 \u0628\u0627\u06cc\u062f \u062f\u0631 \u06cc\u06a9 \u0632\u0628\u0627\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0648\u06cc\u0633\u06cc \u062a\u062c\u0631\u0628\u0647 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f.  \u06a9\u062f \u0645\u0646 \u062f\u0631 \u067e\u0627\u06cc\u062a\u0648\u0646 \u0646\u0648\u0634\u062a\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a (\u0628\u0647 \u0646\u0633\u062e\u0647 3.8 \u0648 \u0628\u0627\u0644\u0627\u062a\u0631 \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u06cc\u062f) \u0648 \u0627\u062c\u0631\u0627 \u0645\u06cc \u0634\u0648\u062f \u0631\u0648\u06cc \u0644\u06cc\u0646\u0648\u06a9\u0633 (\u0645\u0646 \u0627\u0632 \u062a\u0648\u0632\u06cc\u0639 \u0641\u062f\u0648\u0631\u0627 37 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0631\u062f\u0645).<\/p>\n<p>\u0628\u0647 \u0637\u0648\u0631 \u062e\u0644\u0627\u0635\u0647\u060c \u0645\u06cc \u062e\u0648\u0627\u0647\u0645 \u0646\u0634\u0627\u0646 \u062f\u0647\u0645 \u06a9\u0647 \u0627\u0646\u062c\u0627\u0645 \u062a\u0645\u0627\u0645 \u0645\u0648\u0627\u0631\u062f \u0628\u0627\u0644\u0627 \u0628\u0627 Open \u0627\u0645\u06a9\u0627\u0646 \u067e\u0630\u06cc\u0631 \u0627\u0633\u062a Source \u0641\u0646 \u0622\u0648\u0631\u06cc \u0647\u0627  \u0633\u067e\u0633 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u0632 \u0627\u06cc\u0646 \u062f\u0627\u0646\u0634 \u0628\u0631\u0627\u06cc \u067e\u0631\u0648\u0698\u0647 \u0647\u0627\u06cc \u062f\u06cc\u06af\u0631\u060c \u0646\u0647 \u0641\u0642\u0637 \u0628\u0631\u0627\u06cc \u062a\u062c\u0632\u06cc\u0647 \u0648 \u062a\u062d\u0644\u06cc\u0644 \u0645\u0633\u0627\u0628\u0642\u0647 \u0628\u0631\u062c\u060c \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u062c\u062f\u062f \u06a9\u0646\u06cc\u062f.  \ud83d\ude05<\/p>\n<p>\u0645\u0646 \u0642\u0648\u06cc\u0627\u064b \u062a\u0648\u0635\u06cc\u0647 \u0645\u06cc \u06a9\u0646\u0645 \u06a9\u0647 \u06a9\u062f \u0645\u0646\u0628\u0639 \u0631\u0627 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u06cc\u062f (\u0628\u0627\u0632 \u0627\u0633\u062a Source!).  \u062f\u0633\u062a \u0647\u0627\u06cc\u062a\u0627\u0646 \u0631\u0627 \u06a9\u062b\u06cc\u0641 \u06a9\u0646\u06cc\u062f\u060c \u0641\u06cc\u0644\u0645\u0646\u0627\u0645\u0647 \u0647\u0627 \u0631\u0627 \u0628\u0634\u06a9\u0646\u06cc\u062f \u0648 \u0644\u0630\u062a \u0628\u0628\u0631\u06cc\u062f.  \u0628\u0631\u0627\u06cc \u06a9\u0644\u0648\u0646 \u06a9\u0631\u062f\u0646 \u0645\u062e\u0632\u0646 \u0628\u0647 Git \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u06cc\u062f:<\/p>\n<pre><code class=\"language-shell\">git clone https:\/\/github.com\/josevnz\/tutorials.git\ncd tutorials\/docs\/EmpireStateRunUp\/\npython -m ~\/virtualenv\/EmpireStateRunUp\n. ~\/virtualenv\/EmpireStateRunUp\/bin\/activate\npip install --upgrade pip\npip install --upgrade build\npip install --upgrade wheel\npip install --editable .\n<\/code><\/pre>\n<p>\u06cc\u0627 \u0627\u06af\u0631 \u0641\u0642\u0637 \u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u062f \u06a9\u062f \u0631\u0627 \u0647\u0646\u06af\u0627\u0645 \u062e\u0648\u0627\u0646\u062f\u0646 \u0627\u06cc\u0646 \u0622\u0645\u0648\u0632\u0634 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f (\u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0622\u062e\u0631\u06cc\u0646 \u0646\u0633\u062e\u0647 \u0645\u0646 \u0627\u0632 Pypi):<\/p>\n<pre><code class=\"language-shell\">python -m ~\/virtualenv\/EmpireStateRunUp\n. ~\/virtualenv\/EmpireStateRunUp\/bin\/activate \npip install --upgrade EmpireStateRunUp\n<\/code><\/pre>\n<p>\u0627\u06a9\u0646\u0648\u0646 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u0645 \u0628\u0647 \u0645\u0631\u062d\u0644\u0647 \u0628\u0639\u062f\u06cc \u0628\u0631\u0648\u06cc\u0645: \u062f\u0631\u06cc\u0627\u0641\u062a \u062f\u0627\u062f\u0647\u200c\u0647\u0627.<\/p>\n<h2 id=\"how-to-get-the-data-using-web-scraping\"><span class=\"ez-toc-section\" id=\"%d8%b1%d9%88%d8%b4_%d8%af%d8%b1%db%8c%d8%a7%d9%81%d8%aa_%d8%af%d8%a7%d8%af%d9%87_%d9%87%d8%a7_%d8%a8%d8%a7_%d8%a7%d8%b3%d8%aa%d9%81%d8%a7%d8%af%d9%87_%d8%a7%d8%b2_web_scraping\"><\/span>\u0631\u0648\u0634 \u062f\u0631\u06cc\u0627\u0641\u062a \u062f\u0627\u062f\u0647 \u0647\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Web Scraping<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0633\u0627\u06cc\u062a \u0646\u062a\u0627\u06cc\u062c \u0645\u0633\u0627\u0628\u0642\u0647 \u0646\u062f\u0627\u0631\u062f export \u0648\u06cc\u0698\u06af\u06cc\u060c \u0648 \u0645\u0646 \u0647\u0631\u06af\u0632 \u0627\u0632 \u062a\u06cc\u0645 \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0622\u0646\u0647\u0627 \u0646\u0634\u0646\u06cc\u062f\u0647 \u0627\u0645 \u062a\u0627 \u0628\u0628\u06cc\u0646\u0645 \u0622\u06cc\u0627 \u0631\u0627\u0647 \u062f\u06cc\u06af\u0631\u06cc \u0628\u0631\u0627\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u0645\u0633\u0627\u0628\u0642\u0647 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f \u06cc\u0627 \u062e\u06cc\u0631.  \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u062a\u0646\u0647\u0627 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u0628\u0627\u0642\u06cc \u0645\u0627\u0646\u062f\u0647 \u0627\u0646\u062c\u0627\u0645 \u0628\u0631\u062e\u06cc \u0627\u0632 \u062e\u0631\u0627\u0634 \u062f\u0627\u062f\u0646 \u0648\u0628 \u0628\u0648\u062f.<\/p>\n<p>\u0627\u06cc\u0646 \u0648\u0628\u200c\u0633\u0627\u06cc\u062a \u0628\u0633\u06cc\u0627\u0631 \u0627\u0628\u062a\u062f\u0627\u06cc\u06cc \u0627\u0633\u062a \u0648 \u0641\u0642\u0637 \u0627\u0645\u06a9\u0627\u0646 \u067e\u06cc\u0645\u0627\u06cc\u0634 \u062f\u0631 \u0647\u0631 \u0631\u06a9\u0648\u0631\u062f \u0631\u0627 \u0645\u06cc\u200c\u062f\u0647\u062f\u060c \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u062a\u0635\u0645\u06cc\u0645 \u06af\u0631\u0641\u062a\u0645 \u06a9\u0647 \u0648\u0628\u200c\u0633\u0627\u06cc\u062a \u0631\u0627 \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u0645 \u062a\u0627 \u0646\u062a\u0627\u06cc\u062c \u0631\u0627 \u0628\u0647 \u0642\u0627\u0644\u0628\u06cc \u0628\u0631\u0633\u0627\u0646\u0645 \u06a9\u0647 \u0628\u062a\u0648\u0627\u0646\u0645 \u0628\u0639\u062f\u0627\u064b \u0628\u0631\u0627\u06cc \u062a\u062c\u0632\u06cc\u0647 \u0648 \u062a\u062d\u0644\u06cc\u0644 \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0627\u0632 \u0622\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u0645.<\/p>\n<h3 id=\"the-rules-of-web-scraping\"><span class=\"ez-toc-section\" id=\"%d9%82%d9%88%d8%a7%d9%86%db%8c%d9%86_%d8%ae%d8%b1%d8%a7%d8%b4_%d8%af%d8%a7%d8%af%d9%86_%d9%88%d8%a8\"><\/span>\u0642\u0648\u0627\u0646\u06cc\u0646 \u062e\u0631\u0627\u0634 \u062f\u0627\u062f\u0646 \u0648\u0628<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>3 \u0642\u0627\u0646\u0648\u0646 \u0628\u0633\u06cc\u0627\u0631 \u0633\u0627\u062f\u0647 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f:<\/p>\n<ol>\n<li>\u0642\u0627\u0646\u0648\u0646 \u0634\u0645\u0627\u0631\u0647 1: <strong>\u0627\u0646\u062c\u0627\u0645\u0634 \u0646\u062f\u0647<\/strong>.  \u062c\u0631\u06cc\u0627\u0646 \u062f\u0627\u062f\u0647 \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc\u200c\u06a9\u0646\u062f\u060c \u0648 \u0627\u0633\u06a9\u0631\u0627\u067e\u0631 \u0634\u0645\u0627 \u062f\u0631 \u062f\u0642\u06cc\u0642\u0647\u200c\u0627\u06cc \u06a9\u0647 \u062f\u0631\u06cc\u0627\u0641\u062a \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0631\u0627 \u062a\u0645\u0627\u0645 \u06a9\u0631\u062f\u06cc\u062f\u060c \u062e\u0631\u0627\u0628 \u0645\u06cc\u200c\u0634\u0648\u062f.  \u0646\u06cc\u0627\u0632 \u0628\u0647 \u0632\u0645\u0627\u0646 \u0648 \u062a\u0644\u0627\u0634 \u062e\u0648\u0627\u0647\u062f \u062f\u0627\u0634\u062a. <em>\u0645\u0642\u062f\u0627\u0631 \u0632\u06cc\u0627\u062f\u06cc \u0627\u0632 \u0622\u0646<\/em>.<\/li>\n<li>\u0642\u0627\u0646\u0648\u0646 \u0634\u0645\u0627\u0631\u0647 2: <strong>\u0642\u0627\u0646\u0648\u0646 \u0634\u0645\u0627\u0631\u0647 1 \u0631\u0627 \u062f\u0648\u0628\u0627\u0631\u0647 \u0628\u062e\u0648\u0627\u0646\u06cc\u062f<\/strong>.  \u0627\u06af\u0631 \u0646\u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u062f\u0627\u062f\u0647 \u0647\u0627 \u0631\u0627 \u062f\u0631 \u0642\u0627\u0644\u0628 \u062f\u06cc\u06af\u0631\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u06cc\u062f\u060c \u0628\u0647 \u0642\u0627\u0646\u0648\u0646 \u0634\u0645\u0627\u0631\u0647 3 \u0628\u0631\u0648\u06cc\u062f<\/li>\n<li>\u0642\u0627\u0646\u0648\u0646 \u0634\u0645\u0627\u0631\u0647 3: <strong>\u06cc\u06a9 \u0686\u0627\u0631\u0686\u0648\u0628 \u062e\u0648\u0628 \u0628\u0631\u0627\u06cc \u062e\u0648\u062f\u06a9\u0627\u0631\u0633\u0627\u0632\u06cc \u0622\u0646\u0686\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u06cc\u062f<\/strong> \u0648 \u0622\u0645\u0627\u062f\u0647 \u0634\u062f\u0646 \u0628\u0631\u0627\u06cc \u067e\u0627\u06a9\u0633\u0627\u0632\u06cc \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u0633\u0646\u06af\u06cc\u0646 (\u0647\u0645\u0686\u0646\u06cc\u0646 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 &#8220;\u0628\u0631\u0627\u06cc \u0686\u06cc\u0632\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u0646\u0645\u06cc \u062a\u0648\u0627\u0646\u0645 \u06a9\u0646\u062a\u0631\u0644 \u06a9\u0646\u0645\u060c \u0645\u0627\u0646\u0646\u062f HTML \u0648 CSS \u0636\u0639\u06cc\u0641 \u0627\u0646\u062c\u0627\u0645 \u0634\u062f\u0647\u060c \u0628\u0647 \u0645\u0646 \u0635\u0628\u0631 \u0628\u062f\u0647&#8221;).<\/li>\n<\/ol>\n<p>\u0645\u0646 \u062a\u0635\u0645\u06cc\u0645 \u06af\u0631\u0641\u062a\u0645 \u0627\u0632 Selenium Web Driver \u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u06cc\u06a9 \u0645\u0631\u0648\u0631\u06af\u0631 \u0648\u0627\u0642\u0639\u06cc \u0645\u0627\u0646\u0646\u062f \u0641\u0627\u06cc\u0631\u0641\u0627\u06a9\u0633 \u0645\u06cc \u0646\u0627\u0645\u062f \u0628\u0631\u0627\u06cc \u067e\u06cc\u0645\u0627\u06cc\u0634 \u062f\u0631 \u0648\u0628 \u0633\u0627\u06cc\u062a \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u0645.  \u0633\u0644\u0646\u06cc\u0648\u0645 \u0628\u0647 \u0634\u0645\u0627 \u0627\u0645\u06a9\u0627\u0646 \u0645\u06cc\u200c\u062f\u0647\u062f \u062a\u0627 \u0639\u0645\u0644\u06a9\u0631\u062f\u0647\u0627\u06cc \u0645\u0631\u0648\u0631\u06af\u0631 \u0631\u0627 \u062e\u0648\u062f\u06a9\u0627\u0631 \u06a9\u0646\u06cc\u062f \u062f\u0631 \u062d\u0627\u0644\u06cc \u06a9\u0647 \u0647\u0645\u0627\u0646 HTML \u0631\u0646\u062f\u0631 \u0634\u062f\u0647\u200c\u0627\u06cc \u0631\u0627 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0647\u0646\u06af\u0627\u0645 \u067e\u06cc\u0645\u0627\u06cc\u0634 \u062f\u0631 \u0633\u0627\u06cc\u062a \u0645\u0634\u0627\u0647\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u0633\u0644\u0646\u06cc\u0648\u0645 <em>\u06cc\u06a9 \u0627\u0628\u0632\u0627\u0631 \u067e\u06cc\u0686\u06cc\u062f\u0647 \u0627\u0633\u062a<\/em> \u0648 \u0627\u0632 \u0634\u0645\u0627 \u0645\u06cc\u200c\u062e\u0648\u0627\u0647\u062f \u06a9\u0647 \u0645\u062f\u062a\u06cc \u0631\u0627 \u0635\u0631\u0641 \u0622\u0632\u0645\u0627\u06cc\u0634 \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0686\u0647 \u0686\u06cc\u0632\u06cc \u0645\u0624\u062b\u0631 \u0627\u0633\u062a \u0648 \u0686\u0647 \u0686\u06cc\u0632\u06cc \u0646\u06cc\u0633\u062a.  \u062f\u0631 \u0632\u06cc\u0631 \u06cc\u06a9 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0633\u0627\u062f\u0647 \u0627\u0633\u062a \u06a9\u0647 \u0645\u0646 \u0646\u0648\u0634\u062a\u0645 \u062a\u0627 \u0647\u0645\u0647 \u0627\u0633\u0627\u0645\u06cc \u062f\u0648\u0646\u062f\u06af\u0627\u0646 \u0648 \u067e\u06cc\u0648\u0646\u062f\u0647\u0627\u06cc \u062c\u0632\u0626\u06cc\u0627\u062a \u0645\u0633\u0627\u0628\u0642\u0647 \u0631\u0627 \u062f\u0631 \u06cc\u06a9 \u0627\u062c\u0631\u0627 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u0645:<\/p>\n<pre><code class=\"language-python\">import re\nfrom time import sleep\n\nfrom selenium import webdriver\nfrom selenium.webdriver.common.by import By\nfrom selenium.webdriver.firefox.options import Options\nfrom selenium.webdriver.firefox.webdriver import WebDriver\nfrom selenium.webdriver.support.wait import WebDriverWait\nfrom selenium.webdriver.support import expected_conditions\n# AthLinks is nice enough to post the race results and their interface is very human-friendly. Not so machine parsing friendly.\nRESULTS = \"https:\/\/www.athlinks.com\/event\/382111\/results\/Event\/1062909\/Course\/2407855\/Results\"\nLINKS = {}\n\n\ndef print_links(web_driver: WebDriver, page: int) -&gt; None:\n    for a in web_driver.find_elements(By.TAG_NAME, \"a\"):\n        href = a.get_attribute('href')\n        if re.search('Bib', href):\n            name = a.text.strip().title()\n            print(f\"Page={page}, {name}={href.strip()}\")\n            LINKS[name] = href.strip()\n\n\ndef click(level: int) -&gt; None:\n    button = WebDriverWait(driver, 20).until(\n        expected_conditions.element_to_be_clickable((By.CSS_SELECTOR, f\"div:nth-child({level}) &gt; button\")))\n    driver.execute_script(\"arguments[0].click();\", button)\n    sleep(2.5)\n\n\noptions = Options()\noptions.add_argument(\"--headless\")\ndriver = webdriver.Firefox(options=options)\ndriver.get(RESULTS)\nsleep(2.5)\nprint_links(driver, 1)\nclick(6)\nprint_links(driver, 2)\nclick(7)\nprint_links(driver, 3)\nclick(7)\nprint_links(driver, 4)\nclick(9)\nprint_links(driver, 5)\nclick(9)\nprint_links(driver, 6)\nclick(7)\nprint_links(driver, 7)\nclick(7)\nprint_links(driver, 8)\nprint(len(LINKS))\n<\/code><\/pre>\n<p>\u06a9\u062f \u0628\u0627\u0644\u0627 \u0628\u0647 \u0633\u062e\u062a\u06cc \u0642\u0627\u0628\u0644 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u062c\u062f\u062f \u0627\u0633\u062a\u060c \u0627\u0645\u0627 \u0628\u0627 \u0627\u0646\u062c\u0627\u0645 \u06a9\u0627\u0631\u0647\u0627\u06cc \u0632\u06cc\u0631 \u06a9\u0627\u0631 \u0631\u0627 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc \u062f\u0647\u062f:<\/p>\n<ol>\n<li>\u0648\u0628 \u0627\u0635\u0644\u06cc \u0631\u0627 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc \u06a9\u0646\u062f -page \u0628\u0627 <code>driver.get(...)<\/code> \u0631\u0648\u0634<\/li>\n<li>\u0633\u067e\u0633 \u0645\u06cc \u0634\u0648\u062f <code>&lt;a href<\/code> \u062a\u06af \u0645\u06cc \u06a9\u0646\u062f \u0648 \u06a9\u0645\u06cc \u0645\u06cc \u062e\u0648\u0627\u0628\u062f \u062a\u0627 \u0641\u0631\u0635\u062a\u06cc \u0628\u0631\u0627\u06cc \u0631\u0646\u062f\u0631 HTML \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u062f<\/li>\n<li>\u0633\u067e\u0633 \u0622\u0646 \u0631\u0627 \u067e\u06cc\u062f\u0627 \u06a9\u0631\u062f\u0647 \u0648 \u06a9\u0644\u06cc\u06a9 \u0645\u06cc \u06a9\u0646\u062f <code>&gt;<\/code> (\u0628\u0639\u062f page) \u062f\u06a9\u0645\u0647<\/li>\n<li>\u0627\u06cc\u0646 \u0645\u0631\u0627\u062d\u0644 \u0631\u0627 \u062f\u0631 \u0645\u062c\u0645\u0648\u0639 8 \u0628\u0627\u0631 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc \u062f\u0647\u062f\u060c \u0632\u06cc\u0631\u0627 \u0627\u06cc\u0646 \u062a\u0639\u062f\u0627\u062f \u0635\u0641\u062d\u0627\u062a\u06cc \u0627\u0632 \u0646\u062a\u0627\u06cc\u062c \u0645\u0648\u062c\u0648\u062f \u0627\u0633\u062a (\u0647\u0631 \u06a9\u062f\u0627\u0645 page \u062f\u0627\u0631\u0627\u06cc 50 \u062f\u0648\u0646\u062f\u0647)<\/li>\n<\/ol>\n<p>\u0628\u0631\u0627\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a \u0646\u062a\u0627\u06cc\u062c \u06a9\u0627\u0645\u0644 \u0645\u0633\u0627\u0628\u0642\u0647\u060c \u0627\u0633\u06a9\u0631\u0627\u067e\u0631 \u0631\u0627 \u0646\u0648\u0634\u062a\u0645.py \u06a9\u062f  \u0627\u06cc\u0646 \u06a9\u062f \u0628\u0627 \u067e\u06cc\u0645\u0627\u06cc\u0634 \u0686\u0646\u062f\u06cc\u0646 \u0635\u0641\u062d\u0647 \u0648 \u0627\u0633\u062a\u062e\u0631\u0627\u062c \u062f\u0627\u062f\u0647 \u0647\u0627 \u0633\u0631\u0648\u06a9\u0627\u0631 \u062f\u0627\u0631\u062f.  \u062a\u0638\u0627\u0647\u0631\u0627\u062a \u0632\u06cc\u0631:<\/p>\n<pre><code class=\"language-shell\">(EmpireStateRunUp) [josevnz@dmaf5 EmpireStateRunUp]$ esru_scraper \/home\/josevnz\/temp\/raw_data.csv\n1402-12-30 14:05:00,987 Saving results to \/home\/josevnz\/temp\/raw_data.csv\n1402-12-30 14:05:53,091 Got 377 racer results\n1402-12-30 14:05:53,091 Processing BIB: 19, will fetch: https:\/\/www.athlinks.com\/event\/382111\/results\/Event\/1062909\/Course\/2407855\/Bib\/19\n1402-12-30 14:06:02,207 Wrote: name=Wai Ching Soh, position=1, {'name': 'Wai Ching Soh', 'url': 'https:\/\/www.athlinks.com\/event\/382111\/results\/Event\/1062909\/Course\/2407855\/Bib\/19', 'overall position': '1', 'gender': 'M', 'age': 29, 'city': 'Kuala Lumpur', 'state': '-', 'country': 'MYS', 'bib': 19, '20th floor position': '1', '20th floor gender position': '1', '20th floor division position': '1', '20th floor pace': '42:30', '20th floor time': '1:42', '65th floor position': '1', '65th floor gender position': '1', '65th floor division position': '1', '65th floor pace': '54:03', '65th floor time': '7:34', 'gender position': '1', 'division position': '1', 'pace': '53:00', 'time': '10:36', 'level': 'Full Course'}\n...\n<\/code><\/pre>\n<p>\u0627\u06cc\u0646 \u0641\u0642\u0637 \u062d\u062f\u0627\u0642\u0644 \u062f\u0633\u062a\u06a9\u0627\u0631\u06cc \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u0648\u0628 \u0631\u0627 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc \u062f\u0647\u062f page.  \u0647\u062f\u0641 \u0627\u06cc\u0646 \u06a9\u062f \u0641\u0642\u0637 \u062f\u0631\u06cc\u0627\u0641\u062a \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062f\u0631 \u0633\u0631\u06cc\u0639 \u062a\u0631\u06cc\u0646 \u0632\u0645\u0627\u0646 \u0645\u0645\u06a9\u0646 \u0642\u0628\u0644 \u0627\u0632 \u062a\u063a\u06cc\u06cc\u0631 \u0642\u0627\u0644\u0628 \u0627\u0633\u062a.<\/p>\n<p>\u0647\u0646\u0648\u0632 \u0646\u0645\u06cc \u062a\u0648\u0627\u0646 \u0627\u0632 \u062f\u0627\u062f\u0647 \u0647\u0627 \u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u0647\u0633\u062a \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0631\u062f &#8211; \u0646\u06cc\u0627\u0632 \u0628\u0647 \u062a\u0645\u06cc\u0632 \u06a9\u0631\u062f\u0646 \u062f\u0627\u0631\u062f.  \u0648 \u0627\u06cc\u0646 \u0645\u0631\u062d\u0644\u0647 \u0628\u0639\u062f\u06cc \u062f\u0631 \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647 \u0627\u0633\u062a.<\/p>\n<h2 id=\"how-to-clean-up-the-data\"><span class=\"ez-toc-section\" id=\"%d8%b1%d9%88%d8%b4_%d9%be%d8%a7%da%a9%d8%b3%d8%a7%d8%b2%db%8c_%d8%af%d8%a7%d8%af%d9%87_%d9%87%d8%a7\"><\/span>\u0631\u0648\u0634 \u067e\u0627\u06a9\u0633\u0627\u0632\u06cc \u062f\u0627\u062f\u0647 \u0647\u0627<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u062f\u0631\u06cc\u0627\u0641\u062a \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0627\u0648\u0644\u06cc\u0646 \u0646\u0628\u0631\u062f \u0627\u0632 \u0628\u0633\u06cc\u0627\u0631\u06cc \u062f\u06cc\u06af\u0631 \u0627\u0633\u062a.  \u0645\u062a\u0648\u062c\u0647 \u0646\u0627\u0647\u0645\u0627\u0647\u0646\u06af\u06cc \u062e\u0648\u0627\u0647\u06cc\u062f \u0634\u062f \u0631\u0648\u06cc \u062f\u0627\u062f\u0647 \u0647\u0627 \u0648 \u0645\u0642\u0627\u062f\u06cc\u0631 \u0627\u0632 \u062f\u0633\u062a \u0631\u0641\u062a\u0647  \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646\u06a9\u0647 \u0646\u062a\u0627\u06cc\u062c \u0639\u062f\u062f\u06cc \u062e\u0648\u062f \u0631\u0627 \u062e\u0648\u0628 \u06a9\u0646\u06cc\u062f\u060c \u0628\u0627\u06cc\u062f \u0641\u0631\u0636\u06cc\u0627\u062a\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f.<\/p>\n<p>\u062e\u0648\u0634\u0628\u062e\u062a\u0627\u0646\u0647 \u0628\u0631\u0627\u06cc \u0645\u0646\u060c \u0645\u062c\u0645\u0648\u0639\u0647 \u062f\u0627\u062f\u0647 \u0628\u0633\u06cc\u0627\u0631 \u06a9\u0648\u0686\u06a9 \u0627\u0633\u062a (\u0628\u06cc\u0634 \u0627\u0632 375 \u0631\u06a9\u0648\u0631\u062f\u060c \u06cc\u06a9 \u0631\u06a9\u0648\u0631\u062f \u0628\u0631\u0627\u06cc \u0647\u0631 \u062f\u0648\u0646\u062f\u0647) \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0645\u0646 \u062a\u0648\u0627\u0646\u0633\u062a\u0645 \u0686\u0646\u062f \u0642\u0627\u0646\u0648\u0646 \u0628\u0631\u0627\u06cc \u0645\u0631\u062a\u0628 \u06a9\u0631\u062f\u0646 \u0641\u0627\u06cc\u0644 \u062f\u0627\u062f\u0647 \u0627\u06cc \u06a9\u0647 \u0642\u0631\u0627\u0631 \u0628\u0648\u062f \u062f\u0631 \u0637\u0648\u0644 \u062a\u062c\u0632\u06cc\u0647 \u0648 \u062a\u062d\u0644\u06cc\u0644 \u062e\u0648\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u0645\u060c \u0627\u0631\u0627\u0626\u0647 \u062f\u0647\u0645.<\/p>\n<p>\u0645\u0646 \u0647\u0645\u0686\u0646\u06cc\u0646 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u062e\u0648\u062f \u0631\u0627 \u0628\u0627 \u0645\u062c\u0645\u0648\u0639\u0647 \u062f\u0627\u062f\u0647 \u062f\u06cc\u06af\u0631\u06cc \u06a9\u0647 \u062f\u0627\u0631\u0627\u06cc \u06a9\u062f\u0647\u0627\u06cc 3 \u0631\u0642\u0645\u06cc \u06a9\u0634\u0648\u0631 \u0648 \u0647\u0645\u0686\u0646\u06cc\u0646 \u0633\u0627\u06cc\u0631 \u062c\u0632\u0626\u06cc\u0627\u062a \u0627\u0633\u062a\u060c \u062a\u06a9\u0645\u06cc\u0644 \u06a9\u0631\u062f\u0645 \u062a\u0627 \u0627\u0631\u0627\u0626\u0647 \u0628\u0647\u062a\u0631\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0645.<\/p>\n<p>\u0627\u06cc\u0646 <a><code>data_normalizer.raw_read(raw_file: Path) -&gt; Iterable[Dict[str, Any]]<\/code>  \u0631\u0648\u0634 \u06a9\u0627\u0631 \u0633\u0646\u06af\u06cc\u0646 \u0631\u0641\u0639 \u0646\u0627\u0633\u0627\u0632\u06af\u0627\u0631\u06cc \u062f\u0627\u062f\u0647 \u0647\u0627 \u0631\u0627 \u0642\u0628\u0644 \u0627\u0632 \u0630\u062e\u06cc\u0631\u0647 \u062f\u0631 \u0642\u0627\u0644\u0628 CSV \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc \u062f\u0647\u062f.<\/p>\n<p>\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0647\u06cc\u0686 \u0642\u0627\u0646\u0648\u0646 \u0633\u062e\u062a\u06cc \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0631\u062f\u060c \u0632\u06cc\u0631\u0627 \u067e\u0627\u06a9\u0633\u0627\u0632\u06cc \u0628\u0627 \u0645\u062c\u0645\u0648\u0639\u0647 \u062f\u0627\u062f\u0647 \u0647\u0627 \u0647\u0645\u0628\u0633\u062a\u06af\u06cc \u0628\u0627\u0644\u0627\u06cc\u06cc \u062f\u0627\u0631\u062f.  \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062b\u0627\u0644\u060c \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646\u06a9\u0647 \u0628\u0641\u0647\u0645\u0645 \u0647\u0631 \u062f\u0648\u0646\u062f\u0647 \u0628\u0647 \u06a9\u062f\u0627\u0645 \u0645\u0648\u062c \u0627\u062e\u062a\u0635\u0627\u0635 \u062f\u0627\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a\u060c \u0628\u0627\u06cc\u062f \u0641\u0631\u0636\u06cc\u0627\u062a\u06cc \u0631\u0627 \u0628\u0631 \u0627\u0633\u0627\u0633 \u0622\u0646 \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u0645 \u0631\u0648\u06cc \u0686\u06cc\u0632\u06cc \u06a9\u0647 \u0631\u0648\u0632 \u0645\u0633\u0627\u0628\u0642\u0647 \u062f\u06cc\u062f\u0645<\/p>\n<p>\u0627\u062c\u0627\u0632\u0647 \u062f\u0647\u06cc\u062f \u0645\u0646\u0638\u0648\u0631\u0645 \u0631\u0627 \u0628\u0627 \u0686\u0646\u062f \u06a9\u062f \u0628\u0647 \u0634\u0645\u0627 \u0646\u0634\u0627\u0646 \u062f\u0647\u0645:<\/p>\n<pre><code class=\"language-python\">import datetime\nfrom enum import Enum\nfrom typing import Dict\n\n\"\"\"\nRunners started \u0631\u0648\u06cc waves, but for basic analysis, we will assume all runners were able to run\nat the same time.\n\"\"\"\nBASE_RACE_DATETIME = datetime.datetime(\n    year=1402,\n    month=9,\n    day=4,\n    hour=20,\n    minute=0,\n    second=0,\n    microsecond=0\n)\n\nclass Waves(Enum):\n    \"\"\"\n    22 Elite male\n    17 Elite female\n    There are some holes, so either some runners did not show up or there was spare capacity.\n    https:\/\/runsignup.com\/Race\/EmpireStateBuildingRunUp\/Page-4\n    https:\/\/runsignup.com\/Race\/EmpireStateBuildingRunUp\/Page-5\n    I guessed who went into which category, based \u0631\u0648\u06cc the BIB numbers I saw that day\n    \"\"\"\n    ELITE_MEN = [\"Elite Men\", [1, 25], BASE_RACE_DATETIME]\n    ELITE_WOMEN = [\"Elite Women\", [26, 49], BASE_RACE_DATETIME + datetime.timedelta(minutes=2)]\n    PURPLE = [\"Specialty\", [100, 199], BASE_RACE_DATETIME + datetime.timedelta(minutes=10)]\n    GREEN = [\"Sponsors\", [200, 299], BASE_RACE_DATETIME + datetime.timedelta(minutes=20)]\n    \"\"\"\n    The date people applied for the lottery determined the colors. Let's assume that\n    General Lottery Open: 7\/17 9AM- 7\/28 11:59PM\n    General Lottery Draw Date: 8\/1\n    \"\"\"\n    ORANGE = [\"Tenants\", [300, 399], BASE_RACE_DATETIME + datetime.timedelta(minutes=30)]\n    GREY = [\"General 1\", [400, 499], BASE_RACE_DATETIME + datetime.timedelta(minutes=40)]\n    GOLD = [\"General 2\", [500, 599], BASE_RACE_DATETIME + datetime.timedelta(minutes=50)]\n    BLACK = [\"General 3\", [600, 699], BASE_RACE_DATETIME + datetime.timedelta(minutes=60)]\n\n\"\"\"\nInterested only in people who completed the 86 floors. So is it either a full course or dnf\n\"\"\"\nclass Level(Enum):\n    FULL = \"Full Course\"\n    DNF = \"DNF\"\n\n# Fields are sorted by interest\nclass RaceFields(Enum):\n    BIB = \"bib\"\n    NAME = \"name\"\n    OVERALL_POSITION = \"overall position\"\n    TIME = \"time\"\n    GENDER = \"gender\"\n    GENDER_POSITION = \"gender position\"\n    AGE = \"age\"\n    DIVISION_POSITION = \"division position\"\n    COUNTRY = \"country\"\n    STATE = \"state\"\n    CITY = \"city\"\n    PACE = \"pace\"\n    TWENTY_FLOOR_POSITION = \"20th floor position\"\n    TWENTY_FLOOR_GENDER_POSITION = \"20th floor gender position\"\n    TWENTY_FLOOR_DIVISION_POSITION = \"20th floor division position\"\n    TWENTY_FLOOR_PACE = '20th floor pace'\n    TWENTY_FLOOR_TIME = '20th floor time'\n    SIXTY_FLOOR_POSITION = \"65th floor position\"\n    SIXTY_FIVE_FLOOR_GENDER_POSITION = \"65th floor gender position\"\n    SIXTY_FIVE_FLOOR_DIVISION_POSITION = \"65th floor division position\"\n    SIXTY_FIVE_FLOOR_PACE = '65th floor pace'\n    SIXTY_FIVE_FLOOR_TIME = '65th floor time'\n    WAVE = \"wave\"\n    LEVEL = \"level\"\n    URL = \"url\"\n\nFIELD_NAMES = [x.value for x in RaceFields if x != RaceFields.URL]\nFIELD_NAMES_FOR_SCRAPING = [x.value for x in RaceFields]\nFIELD_NAMES_AND_POS: Dict[RaceFields, int] = {}\npos = 0\nfor field in RaceFields:\n    FIELD_NAMES_AND_POS[field] = pos\n    pos += 1\n\ndef get_wave_from_bib(bib: int) -&gt; Waves:\n    for wave in Waves:\n        (lower, upper) = wave.value[1]\n        if lower &lt;= bib &lt;= upper:\n            return wave\n    return Waves.BLACK\n\ndef get_description_for_wave(wave: Waves) -&gt; str:\n    return wave.value[0]\n<\/code><\/pre>\n<p>\u0645\u0646 \u0627\u0632 enums \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0631\u062f\u0645 \u062a\u0627 \u0645\u0634\u062e\u0635 \u06a9\u0646\u0645 \u0628\u0627 \u0686\u0647 \u0646\u0648\u0639 \u062f\u0627\u062f\u0647 \u0627\u06cc \u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u0645 on\u0645\u062e\u0635\u0648\u0635\u0627\u064b \u0628\u0631\u0627\u06cc \u0646\u0627\u0645 \u0641\u06cc\u0644\u062f\u0647\u0627.  \u0633\u0627\u0632\u06af\u0627\u0631\u06cc \u06a9\u0644\u06cc\u062f\u06cc \u0627\u0633\u062a.<\/p>\n<p>\u062f\u0631 \u0645\u0648\u0631\u062f \u062a\u0645\u06cc\u0632 \u06a9\u0631\u062f\u0646 \u062f\u0627\u062f\u0647 \u0647\u0627\u060c \u0628\u0631\u062e\u06cc \u0627\u0632 \u0627\u0635\u0644\u0627\u062d\u0627\u062a \u0648\u0627\u0636\u062d \u0648\u062c\u0648\u062f \u062f\u0627\u0634\u062a \u06a9\u0647 \u0628\u0627\u06cc\u062f \u0627\u0639\u0645\u0627\u0644 \u0645\u06cc \u06a9\u0631\u062f\u0645 \u0645\u0627\u0646\u0646\u062f:<\/p>\n<ol>\n<li>\u0641\u0631\u0645\u062a \u0632\u0645\u0627\u0646 \u0647\u0627 \u0645\u0627\u0646\u0646\u062f \u0633\u0631\u0639\u062a\u060c \u0632\u0645\u0627\u0646 \u0645\u0633\u0627\u0628\u0642\u0647 \u0648 \u063a\u06cc\u0631\u0647 \u0631\u0648\u06cc \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0645\u06cc \u062a\u0648\u0627\u0646 \u0622\u0646 \u0631\u0627 \u0628\u0639\u062f\u0627 \u062a\u062c\u0632\u06cc\u0647 \u06a9\u0631\u062f<\/li>\n<li>\u0628\u0631\u062e\u06cc \u0627\u0632 \u0645\u0642\u0627\u062f\u06cc\u0631 \u0631\u0627 \u0628\u0627 \u062d\u0631\u0648\u0641 \u0628\u0632\u0631\u06af \u0628\u0646\u0648\u06cc\u0633\u06cc\u062f \u062a\u0627 \u062e\u0648\u0627\u0646\u062f\u0646 \u0622\u0646\u0647\u0627 \u0622\u0633\u0627\u0646 \u062a\u0631 \u0634\u0648\u062f<\/li>\n<li>\u062a\u0628\u062f\u06cc\u0644 \u0631\u0634\u062a\u0647 \u0627\u0648\u0644\u06cc\u0647 \u0628\u0647 \u0639\u062f\u062f \u0635\u062d\u06cc\u062d \u0628\u0631\u0627\u06cc \u0645\u0642\u0627\u062f\u06cc\u0631\u06cc \u0645\u0627\u0646\u0646\u062f \u0633\u0646\u060c \u0645\u0648\u0642\u0639\u06cc\u062a \u0648 \u063a\u06cc\u0631\u0647 \u0631\u0648\u06cc.  \u0627\u06af\u0631 \u0634\u06a9\u0633\u062a \u062e\u0648\u0631\u062f\u060c \u00ab\u0639\u062f\u062f \u0646\u06cc\u0633\u062a\u00bb \u0631\u0627 \u0627\u062e\u062a\u0635\u0627\u0635 \u062f\u0647\u06cc\u062f.<\/li>\n<\/ol>\n<p>\u0628\u0647 \u0647\u0631 \u062d\u0627\u0644\u060c \u0645\u0627 \u0645\u0627\u0633\u0627\u0698 \u062f\u0627\u062f\u0647 \u0647\u0627 \u0631\u0627 \u062a\u0645\u0627\u0645 \u0646\u06a9\u0631\u062f\u0647 \u0627\u06cc\u0645.  \u06cc\u06a9 \u062a\u0627\u0628\u0639 \u0633\u0627\u062f\u0647 \u0627\u0632 \u0627\u06cc\u0646 \u0645\u0631\u062d\u0644\u0647 \u062f\u0631 \u062f\u0627\u062e\u0644 \u0645\u0627\u0698\u0648\u0644 \u062f\u0627\u062f\u0647 \u0645\u0631\u0627\u0642\u0628\u062a \u0645\u06cc \u06a9\u0646\u062f:<\/p>\n<pre><code class=\"language-python\"># Omitted imports and Enum declarations as they were shown early \u0631\u0648\u06cc. \n# Check the source code for 'data.py' for more details\ndef raw_csv_read(raw_file: Path) -&gt; Iterable[Dict[str, Any]]:\n    record = {}\n    with open(raw_file, 'r') as raw_csv_file:\n        reader = csv.DictReader(raw_csv_file)\n        row: Dict[str, Any]\n        for row in reader:\n            try:\n                csv_field: str\n                for csv_field in FIELD_NAMES_FOR_SCRAPING:\n                    column_val = row[csv_field].strip()\n                    if csv_field == RaceFields.BIB.value:\n                        bib = int(column_val)\n                        record[csv_field] = bib\n                    elif csv_field in [ RaceFields.GENDER_POSITION.value, RaceFields.DIVISION_POSITION.value, RaceFields.OVERALL_POSITION.value,  RaceFields.TWENTY_FLOOR_POSITION.value,\n                        RaceFields.TWENTY_FLOOR_DIVISION_POSITION.value, RaceFields.TWENTY_FLOOR_GENDER_POSITION.value, RaceFields.SIXTY_FLOOR_POSITION.value, RaceFields.SIXTY_FIVE_FLOOR_DIVISION_POSITION.value,\n                        RaceFields.SIXTY_FIVE_FLOOR_GENDER_POSITION.value, RaceFields.AGE.value ]:\n                        try:\n                            record[csv_field] = int(column_val)\n                        except ValueError:\n                            record[csv_field] = math.nan\n                    elif csv_field == RaceFields.WAVE.value:\n                        record[csv_field] = get_description_for_wave(get_wave_from_bib(bib)).upper()\n                    elif csv_field in [RaceFields.GENDER.value, RaceFields.COUNTRY.value]:\n                        record[csv_field] = column_val.upper()\n                    elif csv_field in [RaceFields.CITY.value, RaceFields.STATE.value,\n\n                    ]:\n                        record[csv_field] = column_val.capitalize()\n                    elif csv_field in [RaceFields.SIXTY_FIVE_FLOOR_PACE.value, RaceFields.SIXTY_FIVE_FLOOR_TIME.value, RaceFields.TWENTY_FLOOR_PACE.value,\n                        RaceFields.TWENTY_FLOOR_TIME.value, RaceFields.PACE.value, RaceFields.TIME.value ]:\n                        parts = column_val.strip().split(':')\n                        for idx in range(0, len(parts)):\n                            if len(parts[idx]) == 1:\n                                parts[idx] = f\"0{parts[idx]}\"\n                        if len(parts) == 2:\n                            parts.insert(0, \"00\")\n                        record[csv_field] = \":\".join(parts)\n                    else:\n                        record[csv_field] = column_val\n                if record[csv_field] in ['-', '--']:\n                    record[csv_field] = \"\"\n                yield record\n            except IndexError:\n                raise\n<\/code><\/pre>\n<p>\u0627\u06cc\u0646 <code>esru_csv_cleaner<\/code> \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0645\u062c\u0645\u0648\u0639 \u062a\u0644\u0627\u0634 \u0647\u0627\u06cc \u067e\u0627\u06a9\u0633\u0627\u0632\u06cc \u0645\u0631\u062d\u0644\u0647 \u0627\u0648\u0644 \u0627\u0633\u062a \u06a9\u0647 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u062e\u0627\u0645 \u06af\u0631\u0641\u062a\u0647 \u0634\u062f\u0647 \u0631\u0627 \u0645\u06cc \u06af\u06cc\u0631\u062f \u0648 \u06cc\u06a9 \u0641\u0627\u06cc\u0644 CSV \u0628\u0627 \u0628\u0631\u062e\u06cc \u0627\u0635\u0644\u0627\u062d\u0627\u062a \u0645\u0647\u0645 \u0645\u06cc \u0646\u0648\u06cc\u0633\u062f:<\/p>\n<pre><code class=\"language-shell\">esru_csv_cleaner --rawfile \/home\/josevnz\/temp\/raw_data.csv \/home\/josevnz\/tutorials\/docs\/EmpireStateRunUp\/empirestaterunup\/results-full-level-1402.csv\n<\/code><\/pre>\n<p>\u0627\u06a9\u0646\u0648\u0646 \u0628\u0627 \u0622\u0645\u0627\u062f\u0647 \u0634\u062f\u0646 \u062f\u0627\u062f\u0647 \u0647\u0627\u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u0645 \u0628\u0647 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u062f\u0627\u062f\u0647 \u0647\u0627 \u0648 \u067e\u0631\u0633\u06cc\u062f\u0646 \u0686\u0646\u062f \u0633\u0648\u0627\u0644 \u062f\u0631 \u0645\u0648\u0631\u062f \u0645\u0633\u0627\u0628\u0642\u0647 \u0627\u0642\u062f\u0627\u0645 \u06a9\u0646\u06cc\u0645.<\/p>\n<h2 id=\"how-to-analyze-the-data\"><span class=\"ez-toc-section\" id=\"%d8%b1%d9%88%d8%b4_%d8%aa%d8%ac%d8%b2%db%8c%d9%87_%d9%88_%d8%aa%d8%ad%d9%84%db%8c%d9%84_%d8%af%d8%a7%d8%af%d9%87_%d9%87%d8%a7\"><\/span>\u0631\u0648\u0634 \u062a\u062c\u0632\u06cc\u0647 \u0648 \u062a\u062d\u0644\u06cc\u0644 \u062f\u0627\u062f\u0647 \u0647\u0627<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0647\u0646\u06af\u0627\u0645\u06cc \u06a9\u0647 \u062f\u0627\u062f\u0647 \u0647\u0627 \u067e\u0627\u06a9 \u0634\u062f\u0646\u062f (\u06cc\u0627 \u062a\u0627 \u062d\u062f\u06cc \u06a9\u0647 \u0628\u062a\u0648\u0627\u0646\u06cc\u0645 \u0622\u0646 \u0647\u0627 \u0631\u0627 \u062a\u0645\u06cc\u0632 \u06a9\u0646\u06cc\u0645)\u060c \u0632\u0645\u0627\u0646 \u0622\u0646 \u0627\u0633\u062a \u06a9\u0647 \u0628\u0647 \u0627\u062c\u0631\u0627\u06cc \u0628\u0631\u062e\u06cc \u0627\u0639\u062f\u0627\u062f \u0628\u067e\u0631\u062f\u0627\u0632\u06cc\u0645.  \u0642\u0628\u0644 \u0627\u0632 \u0646\u0648\u0634\u062a\u0646 \u06a9\u062f \u0628\u06cc\u0634\u062a\u0631\u060c \u06cc\u06a9 \u062a\u06a9\u0647 \u06a9\u0627\u063a\u0630 \u0628\u0631\u062f\u0627\u0634\u062a\u0645 \u0648 \u0627\u0632 \u062e\u0648\u062f\u0645 \u0686\u0646\u062f \u0633\u0648\u0627\u0644 \u062f\u0631 \u0645\u0648\u0631\u062f \u0645\u0633\u0627\u0628\u0642\u0647 \u067e\u0631\u0633\u06cc\u062f\u0645:<\/p>\n<ul>\n<li>\u0647\u06cc\u0686 \u0633\u0637\u0644\/\u062e\u0648\u0634\u0647 \u062c\u0627\u0644\u0628\u06cc \u0628\u0631\u0627\u06cc \u0633\u0646\u060c \u0632\u0645\u0627\u0646 \u0645\u0633\u0627\u0628\u0642\u0647\u060c \u0645\u0648\u062c \u0648 \u0645\u0634\u0627\u0631\u06a9\u062a \u06a9\u0634\u0648\u0631\u06cc \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f\u061f<\/li>\n<li>\u062f\u06cc\u062f\u0646 \u06cc\u06a9 \u0647\u06cc\u0633\u062a\u0648\u06af\u0631\u0627\u0645 \u0628\u0631\u0627\u06cc \u0633\u0646 \u0648 \u06a9\u0634\u0648\u0631 \u062e\u0648\u0628 \u0627\u0633\u062a<\/li>\n<li>\u062f\u0627\u062f\u0647 \u0647\u0627 \u0631\u0627 \u0634\u0631\u062d \u062f\u0647\u06cc\u062f!  (\u0645\u06cc\u0627\u0646\u06af\u06cc\u0646\u060c \u0635\u062f\u06a9 \u0648 \u063a\u06cc\u0631\u0647 \u0631\u0648\u06cc)<\/li>\n<li>\u0645\u0648\u0627\u0631\u062f \u067e\u0631\u062a \u0631\u0627 \u067e\u06cc\u062f\u0627 \u06a9\u0646\u06cc\u062f  \u0631\u0627\u0647\u06cc \u0628\u0631\u0627\u06cc \u0627\u0639\u0645\u0627\u0644 \u0627\u0645\u062a\u06cc\u0627\u0632 Z \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f\u061f<\/li>\n<\/ul>\n<p>\u062a\u0635\u0645\u06cc\u0645 \u06af\u0631\u0641\u062a\u0645 \u0627\u0632 \u067e\u0627\u06cc\u062a\u0648\u0646 \u067e\u0627\u0646\u062f\u0627 \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u0645.  \u0627\u06cc\u0646 \u0628\u0627\u0632 \u0634\u0648\u062f Source \u0686\u0627\u0631\u0686\u0648\u0628 \u062f\u0627\u0631\u0627\u06cc \u0632\u0631\u0627\u062f\u062e\u0627\u0646\u0647 \u0627\u06cc \u0627\u0632 \u0627\u0628\u0632\u0627\u0631\u0647\u0627 \u0628\u0631\u0627\u06cc \u062f\u0633\u062a\u06a9\u0627\u0631\u06cc \u062f\u0627\u062f\u0647 \u0647\u0627 \u0648 \u0645\u062d\u0627\u0633\u0628\u0647 \u0622\u0645\u0627\u0631 \u0627\u0633\u062a.  \u0647\u0645\u0686\u0646\u06cc\u0646 \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc \u062e\u0648\u0628\u06cc \u0628\u0631\u0627\u06cc \u0627\u0646\u062c\u0627\u0645 \u067e\u0627\u06a9\u0633\u0627\u0632\u06cc \u0627\u0636\u0627\u0641\u06cc \u062f\u0631 \u0635\u0648\u0631\u062a \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u062f.<\/p>\n<p>\u067e\u0633 \u067e\u0627\u0646\u062f\u0627\u0647\u0627 \u0686\u06af\u0648\u0646\u0647 \u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u0646\u062f\u061f<\/p>\n<h3 id=\"crash-course-on-pandas\"><span class=\"ez-toc-section\" id=\"%d8%af%d9%88%d8%b1%d9%87_%d8%b3%d9%82%d9%88%d8%b7_%d8%b1%d9%88%db%8c_%d9%be%d8%a7%d9%86%d8%af%d8%a7%d9%87%d8%a7\"><\/span>\u062f\u0648\u0631\u0647 \u0633\u0642\u0648\u0637 \u0631\u0648\u06cc \u067e\u0627\u0646\u062f\u0627\u0647\u0627<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0627\u06a9\u06cc\u062f\u0627\u064b \u062a\u0648\u0635\u06cc\u0647 \u0645\u06cc \u06a9\u0646\u0645 \u0627\u06af\u0631 \u0628\u0627 \u0627\u06cc\u0646 \u0627\u0628\u0632\u0627\u0631 \u0622\u0634\u0646\u0627\u06cc\u06cc \u0646\u062f\u0627\u0631\u06cc\u062f\u060c 10 \u062f\u0642\u06cc\u0642\u0647 \u0628\u0647 \u067e\u0627\u0646\u062f\u0627\u0647\u0627 \u0645\u0631\u0627\u062c\u0639\u0647 \u06a9\u0646\u06cc\u062f.  \u0628\u0631\u0627\u06cc DataFrame \u062e\u0648\u062f\u060c BIB \u0631\u0627 \u0628\u0647 \u062f\u0644\u06cc\u0644 \u0645\u0646\u062d\u0635\u0631\u0628\u0647\u200c\u0641\u0631\u062f \u0628\u0648\u062f\u0646 \u0622\u0646 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u0634\u0627\u062e\u0635 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u062f\u0645\u060c \u0648 \u0627\u0631\u0632\u0634 \u062e\u0627\u0635\u06cc \u0628\u0631\u0627\u06cc \u062a\u0648\u0627\u0628\u0639 \u062a\u062c\u0645\u0639 \u0646\u062f\u0627\u0631\u062f \u2013 \u0627\u0645\u0627 \u0648\u06cc\u0698\u06af\u06cc \u00abid\u00bb \u0645\u0646\u062d\u0635\u0631\u0628\u0647\u200c\u0641\u0631\u062f \u0627\u0633\u062a. <\/p>\n<p>\u062a\u0648\u062c\u0647 \u0628\u0647 \u0627\u06cc\u0646 \u0646\u06a9\u062a\u0647 \u0645\u0647\u0645 \u0627\u0633\u062a \u06a9\u0647 \u062f\u0631 \u0627\u06cc\u0646 \u0645\u0631\u062d\u0644\u0647 \u0646\u06cc\u0632 \u0628\u0627\u06cc\u062f \u062f\u0627\u062f\u0647 \u0647\u0627 \u0631\u0627 \u0639\u0627\u062f\u06cc \u0633\u0627\u0632\u06cc \u06a9\u0646\u0645 \u06a9\u0647 \u0628\u0647 \u0632\u0648\u062f\u06cc \u062a\u0648\u0636\u06cc\u062d \u062e\u0648\u0627\u0647\u0645 \u062f\u0627\u062f:<\/p>\n<pre><code class=\"language-python\"># Omitted imports and Enum declarations as they were shown early \u0631\u0648\u06cc. \n# Check the source code for 'data.py' for more details\ndef load_data(data_file: Path = None, remove_dnf: bool = True) -&gt; DataFrame:\n    \"\"\"\n    * The code removes by default the DNF runners to avoid distortion \u0631\u0648\u06cc the results.\n    * Replace unknown\/ nan values with the median, to make analysis easier and avoid distortions\n    \"\"\"\n    if data_file:\n        def_file = data_file\n    else:\n        def_file = RACE_RESULTS_FULL_LEVEL\n    df = pandas.read_csv(\n        def_file\n    )\n    for time_field in [\n        RaceFields.PACE.value,\n        RaceFields.TIME.value,\n        RaceFields.TWENTY_FLOOR_PACE.value,\n        RaceFields.TWENTY_FLOOR_TIME.value,\n        RaceFields.SIXTY_FIVE_FLOOR_PACE.value,\n        RaceFields.SIXTY_FIVE_FLOOR_TIME.value\n    ]:\n        try:\n            df[time_field] = pandas.to_timedelta(df[time_field])\n        except ValueError as ve:\n            raise ValueError(f'{time_field}={df[time_field]}', ve)\n    df['finishtimestamp'] = BASE_RACE_DATETIME + df[RaceFields.TIME.value]\n    if remove_dnf:\n        df.drop(df[df.level == 'DNF'].index, inplace=True)\n\n    # Normalize Age\n    median_age = df[RaceFields.AGE.value].median()\n    df[RaceFields.AGE.value].fillna(median_age, inplace=True)\n    df[RaceFields.AGE.value] = df[RaceFields.AGE.value].astype(int)\n\n    # Normalize state and city\n    df.replace({RaceFields.STATE.value: {'-': ''}}, inplace=True)\n    df[RaceFields.STATE.value].fillna('', inplace=True)\n    df[RaceFields.CITY.value].fillna('', inplace=True)\n\n    # Normalize overall position, 3 levels\n    median_pos = df[RaceFields.OVERALL_POSITION.value].median()\n    df[RaceFields.OVERALL_POSITION.value].fillna(median_pos, inplace=True)\n    df[RaceFields.OVERALL_POSITION.value] = df[RaceFields.OVERALL_POSITION.value].astype(int)\n    median_pos = df[RaceFields.TWENTY_FLOOR_POSITION.value].median()\n    df[RaceFields.TWENTY_FLOOR_POSITION.value].fillna(median_pos, inplace=True)\n    df[RaceFields.TWENTY_FLOOR_POSITION.value] = df[RaceFields.TWENTY_FLOOR_POSITION.value].astype(int)\n    median_pos = df[RaceFields.SIXTY_FLOOR_POSITION.value].median()\n    df[RaceFields.SIXTY_FLOOR_POSITION.value].fillna(median_pos, inplace=True)\n    df[RaceFields.SIXTY_FLOOR_POSITION.value] = df[RaceFields.SIXTY_FLOOR_POSITION.value].astype(int)\n\n    # Normalize gender position, 3 levels\n    median_gender_pos = df[RaceFields.GENDER_POSITION.value].median()\n    df[RaceFields.GENDER_POSITION.value].fillna(median_gender_pos, inplace=True)\n    df[RaceFields.GENDER_POSITION.value] = df[RaceFields.GENDER_POSITION.value].astype(int)\n    median_gender_pos = df[RaceFields.TWENTY_FLOOR_GENDER_POSITION.value].median()\n    df[RaceFields.TWENTY_FLOOR_GENDER_POSITION.value].fillna(median_gender_pos, inplace=True)\n    df[RaceFields.TWENTY_FLOOR_GENDER_POSITION.value] = df[RaceFields.TWENTY_FLOOR_GENDER_POSITION.value].astype(int)\n    median_gender_pos = df[RaceFields.SIXTY_FIVE_FLOOR_GENDER_POSITION.value].median()\n    df[RaceFields.SIXTY_FIVE_FLOOR_GENDER_POSITION.value].fillna(median_gender_pos, inplace=True)\n    df[RaceFields.SIXTY_FIVE_FLOOR_GENDER_POSITION.value] = df[\n        RaceFields.SIXTY_FIVE_FLOOR_GENDER_POSITION.value].astype(int)\n\n    # Normalize age\/ division position, 3 levels\n    median_div_pos = df[RaceFields.DIVISION_POSITION.value].median()\n    df[RaceFields.DIVISION_POSITION.value].fillna(median_div_pos, inplace=True)\n    df[RaceFields.DIVISION_POSITION.value] = df[RaceFields.DIVISION_POSITION.value].astype(int)\n    median_div_pos = df[RaceFields.TWENTY_FLOOR_DIVISION_POSITION.value].median()\n    df[RaceFields.TWENTY_FLOOR_DIVISION_POSITION.value].fillna(median_div_pos, inplace=True)\n    df[RaceFields.TWENTY_FLOOR_DIVISION_POSITION.value] = df[RaceFields.TWENTY_FLOOR_DIVISION_POSITION.value].astype(int)\n    median_div_pos = df[RaceFields.SIXTY_FIVE_FLOOR_DIVISION_POSITION.value].median()\n    df[RaceFields.SIXTY_FIVE_FLOOR_DIVISION_POSITION.value].fillna(median_div_pos, inplace=True)\n    df[RaceFields.SIXTY_FIVE_FLOOR_DIVISION_POSITION.value] = df[\n        RaceFields.SIXTY_FIVE_FLOOR_DIVISION_POSITION.value].astype(int)\n\n    # Normalize 65th floor pace and time\n    sixty_five_floor_pace_median = df[RaceFields.SIXTY_FIVE_FLOOR_PACE.value].median()\n    sixty_five_floor_time_median = df[RaceFields.SIXTY_FIVE_FLOOR_TIME.value].median()\n    df[RaceFields.SIXTY_FIVE_FLOOR_PACE.value].fillna(sixty_five_floor_pace_median, inplace=True)\n    df[RaceFields.SIXTY_FIVE_FLOOR_TIME.value].fillna(sixty_five_floor_time_median, inplace=True)\n\n    # Normalize BIB and make it the index\n    df[RaceFields.BIB.value] = df[RaceFields.BIB.value].astype(int)\n    df.set_index(RaceFields.BIB.value, inplace=True)\n\n    # URL was useful during scraping, not needed for analysis\n    df.drop([RaceFields.URL.value], axis=1, inplace=True)\n\n    return df\n<\/code><\/pre>\n<p>\u0645\u0646 \u0686\u0646\u062f \u06a9\u0627\u0631 \u0631\u0627 \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u067e\u0633 \u0627\u0632 \u0628\u0627\u0632\u06af\u0631\u062f\u0627\u0646\u062f\u0646 CSV \u062a\u0628\u062f\u06cc\u0644 \u0634\u062f\u0647 \u0628\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 DataFrame \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc \u062f\u0647\u0645:<\/p>\n<ul>\n<li>\u0628\u0631\u0627\u06cc \u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u0627\u0632 \u062a\u0623\u062b\u06cc\u0631\u06af\u0630\u0627\u0631\u06cc \u0628\u0631 \u0646\u062a\u0627\u06cc\u062c \u062a\u062c\u0645\u0639\u060c \u0645\u0642\u0627\u062f\u06cc\u0631 \u00ab\u0639\u062f\u062f \u0646\u06cc\u0633\u062a\u00bb (nan) \u0631\u0627 \u0628\u0627 \u0645\u06cc\u0627\u0646\u0647 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u06a9\u0631\u062f.  \u0627\u06cc\u0646 \u0627\u0645\u0631 \u062a\u062c\u0632\u06cc\u0647 \u0648 \u062a\u062d\u0644\u06cc\u0644 \u0631\u0627 \u0622\u0633\u0627\u0646 \u062a\u0631 \u0645\u06cc \u06a9\u0646\u062f.<\/li>\n<li>\u0631\u062f\u06cc\u0641\u200c\u0647\u0627\u06cc \u0631\u0647\u0627 \u0634\u062f\u0647 \u0628\u0631\u0627\u06cc \u062f\u0648\u0646\u062f\u06af\u0627\u0646\u06cc \u06a9\u0647 \u0628\u0647 \u0637\u0628\u0642\u0647 86 \u0646\u0631\u0633\u06cc\u062f\u0647\u200c\u0627\u0646\u062f. \u062a\u062c\u0632\u06cc\u0647 \u0648 \u062a\u062d\u0644\u06cc\u0644 \u0631\u0627 \u0622\u0633\u0627\u0646\u200c\u062a\u0631 \u0645\u06cc\u200c\u06a9\u0646\u062f \u0648 \u062a\u0639\u062f\u0627\u062f \u0622\u0646\u0647\u0627 \u0628\u0633\u06cc\u0627\u0631 \u06a9\u0645 \u0627\u0633\u062a.<\/li>\n<li>\u0628\u0631\u062e\u06cc \u0627\u0632 \u0633\u062a\u0648\u0646 \u0647\u0627\u06cc \u0631\u0634\u062a\u0647 \u0631\u0627 \u0628\u0647 \u0627\u0646\u0648\u0627\u0639 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u0628\u0648\u0645\u06cc \u0645\u0627\u0646\u0646\u062f \u0627\u0639\u062f\u0627\u062f \u0635\u062d\u06cc\u062d\u060c \u0645\u0647\u0631\u0647\u0627\u06cc \u0632\u0645\u0627\u0646\u06cc \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0646\u06cc\u062f<\/li>\n<li>\u062a\u0639\u062f\u0627\u062f \u06a9\u0645\u06cc \u0627\u0632 \u0648\u0631\u0648\u062f\u06cc \u0647\u0627 \u062c\u0646\u0633\u06cc\u062a \u062a\u0639\u0631\u06cc\u0641 \u0646\u0634\u062f\u0647 \u0628\u0648\u062f\u0646\u062f.  \u0627\u06cc\u0646 \u0628\u0631 \u0632\u0645\u06cc\u0646\u0647\u200c\u0647\u0627\u06cc \u062f\u06cc\u06af\u0631\u06cc \u0645\u0627\u0646\u0646\u062f &#8220;\u062c\u0646\u0633_\u0645\u0648\u0642\u0639\u06cc\u062a&#8221; \u062a\u0623\u062b\u06cc\u0631 \u06af\u0630\u0627\u0634\u062a.  \u0628\u0631\u0627\u06cc \u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u0627\u0632 \u062a\u062d\u0631\u06cc\u0641\u060c \u0627\u06cc\u0646\u0647\u0627 \u0628\u0627 \u0645\u06cc\u0627\u0646\u0647 \u067e\u0631 \u0634\u062f\u0646\u062f.<\/li>\n<\/ul>\n<p>\u062f\u0631 \u067e\u0627\u06cc\u0627\u0646\u060c \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc DataFrame \u0645\u0646 \u0628\u0647 \u0627\u06cc\u0646 \u0635\u0648\u0631\u062a \u0628\u0648\u062f:<\/p>\n<pre><code class=\"language-shell\">(EmpireStateRunUp) [josevnz@dmaf5 EmpireStateRunUp]$ python3\nPython 3.11.6 (main, Oct  3 1402, 00:00:00) [GCC 12.3.1 20230508 (Red Hat 12.3.1-1)] \u0631\u0648\u06cc linux\nType \"help\", \"copyright\", \"credits\" or \"license\" for more information.\n<\/code><\/pre>\n<p>\u0648 \u062d\u0627\u0635\u0644 \u0622\u0646 <strong>DataFrame<\/strong> \u0646\u0645\u0648\u0646\u0647\u060c \u0645\u062b\u0627\u0644:<\/p>\n<pre><code class=\"language-shell\">&gt;&gt;&gt; # Using custom load_data function that returns a Panda DataFrame\n&gt;&gt;&gt; from empirestaterunup.data import load_data\n&gt;&gt;&gt; load_data('empirestaterunup\/results-full-level-1402.csv')\n                    name  overall position            time gender  gender position  age  ...  65th floor division position 65th floor pace 65th floor time       wave        level     finishtimestamp\nbib                                                                                      ...                                                                                                          \n19         Wai Ching Soh                 1 0 days 00:10:36      M                1   29  ...                             1 0 days 00:54:03 0 days 00:07:34  ELITE MEN  Full Course 1402-09-04 20:10:36\n22        Ryoji Watanabe                 2 0 days 00:10:52      M                2   40  ...                             1 0 days 00:54:31 0 days 00:07:38  ELITE MEN  Full Course 1402-09-04 20:10:52\n16            Fabio Ruga                 3 0 days 00:11:14      M                3   42  ...                             2 0 days 00:57:09 0 days 00:08:00  ELITE MEN  Full Course 1402-09-04 20:11:14\n11        Emanuele Manzi                 4 0 days 00:11:28      M                4   45  ...                             3 0 days 00:59:17 0 days 00:08:18  ELITE MEN  Full Course 1402-09-04 20:11:28\n249             Alex Cyr                 5 0 days 00:11:52      M                5   28  ...                             2 0 days 01:01:19 0 days 00:08:35   SPONSORS  Full Course 1402-09-04 20:11:52\n..                   ...               ...             ...    ...              ...  ...  ...                           ...             ...             ...        ...          ...                 ...\n555     Caroline Edwards               372 0 days 00:55:17      F              143   47  ...                            39 0 days 04:57:23 0 days 00:41:38  GENERAL 2  Full Course 1402-09-04 20:55:17\n557        Sarah Preston               373 0 days 00:55:22      F              144   34  ...                            41 0 days 04:58:20 0 days 00:41:46  GENERAL 2  Full Course 1402-09-04 20:55:22\n544  Christopher Winkler               374 0 days 01:00:10      M              228   40  ...                            18 0 days 01:49:53 0 days 00:15:23  GENERAL 2  Full Course 1402-09-04 21:00:10\n545          Jay Winkler               375 0 days 01:05:19      U               93   33  ...                            18 0 days 05:28:56 0 days 00:46:03  GENERAL 2  Full Course 1402-09-04 21:05:19\n646           Dana Zajko               376 0 days 01:06:48      F              145   38  ...                            42 0 days 05:15:14 0 days 00:44:08  GENERAL 3  Full Course 1402-09-04 21:06:48\n\n[375 rows x 24 columns]\n<\/code><\/pre>\n<p>\u067e\u0633 \u0627\u0632 \u0628\u0627\u0631\u06af\u06cc\u0631\u06cc \u062f\u0627\u062f\u0647 \u0647\u0627\u060c \u0645\u0646 \u062a\u0648\u0627\u0646\u0633\u062a\u0645 \u0634\u0631\u0648\u0639 \u0628\u0647 \u0633\u0624\u0627\u0644 \u06a9\u0631\u062f\u0646 \u06a9\u0646\u0645.  \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062b\u0627\u0644\u060c \u0628\u0631\u0627\u06cc \u062a\u0634\u062e\u06cc\u0635 \u0646\u0642\u0627\u0637 \u067e\u0631\u062a\u060c \u0627\u0632 \u0627\u0645\u062a\u06cc\u0627\u0632 Z \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0631\u062f\u0645.<\/p>\n<p>\u062a\u0645\u0627\u0645 \u0645\u0646\u0637\u0642 \u062a\u062c\u0632\u06cc\u0647 \u0648 \u062a\u062d\u0644\u06cc\u0644 \u0628\u0627 \u0647\u0645 \u0646\u06af\u0647 \u062f\u0627\u0634\u062a\u0647 \u0634\u062f \u0631\u0648\u06cc \u06cc\u06a9 \u0645\u0627\u0698\u0648\u0644 \u0648\u0627\u062d\u062f \u0628\u0647 \u0646\u0627\u0645 \u00ab\u062a\u062c\u0632\u06cc\u0647 \u0648 \u062a\u062d\u0644\u06cc\u0644\u00bb\u060c \u062c\u062f\u0627 \u0627\u0632 \u0627\u0631\u0627\u0626\u0647\u060c \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u062f\u0627\u062f\u0647 \u06cc\u0627 \u06af\u0632\u0627\u0631\u0634\u060c \u0628\u0631\u0627\u06cc \u062a\u0631\u0648\u06cc\u062c \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u062c\u062f\u062f.<\/p>\n<pre><code class=\"language-python\">from pandas import DataFrame\nimport numpy as np\ndef get_zscore(df: DataFrame, column: str):\n    filtered = df<div class=\"column col-lg-12\"><\/div>\n    return filtered.sub(filtered.mean()).div(filtered.std(ddof=0))\n\ndef get_outliers(df: DataFrame, column: str, std_threshold: int = 3) -&gt; DataFrame:\n    \"\"\"\n    Use the z-score, anything further away than 3 standard deviations is considered an outlier.\n    \"\"\"\n    filtered_df = df<div class=\"column col-lg-12\"><\/div>\n    z_scores = get_zscore(df=df, column=column)\n    is_over = np.abs(z_scores) &gt; std_threshold\n    return filtered_df[is_over]\n<\/code><\/pre>\n<p>\u0647\u0645\u0686\u0646\u06cc\u0646\u060c \u062f\u0631\u06cc\u0627\u0641\u062a \u0622\u0645\u0627\u0631 \u0631\u0627\u06cc\u062c \u0641\u0642\u0637 \u0628\u0627 \u062a\u0645\u0627\u0633 \u0628\u0633\u06cc\u0627\u0631 \u0633\u0627\u062f\u0647 \u0627\u0633\u062a <code>describe<\/code> \u0631\u0648\u06cc  \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u0645\u0627:<\/p>\n<pre><code class=\"language-python\">from pandas import DataFrame\ndef get_5_number(criteria: str, data: DataFrame) -&gt; DataFrame:\n    return data[criteria].describe()\n<\/code><\/pre>\n<p>\u0628\u0631\u0627\u06cc \u0645\u062b\u0627\u0644\u060c \u0627\u062c\u0627\u0632\u0647 \u062f\u0647\u06cc\u062f \u0645\u0639\u06cc\u0627\u0631\u0647\u0627\u06cc \u062e\u0644\u0627\u0635\u0647 \u0628\u0631\u0627\u06cc \u062c\u0646\u0628\u0647\u200c\u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 \u0645\u0633\u0627\u0628\u0642\u0647 \u0631\u0627 \u0628\u0647 \u0634\u0645\u0627 \u0646\u0634\u0627\u0646 \u062f\u0647\u0645:<\/p>\n<pre><code class=\"language-shell\">&gt;&gt;&gt; from empirestaterunup.data import load_data\n&gt;&gt;&gt; df = load_data('empirestaterunup\/results-full-level-1402.csv')\n&gt;&gt;&gt; from empirestaterunup.analyze import get_5_number\n&gt;&gt;&gt; from empirestaterunup.analyze import SUMMARY_METRICS\n&gt;&gt;&gt; print(SUMMARY_METRICS)\n('age', 'time', 'pace')\n&gt;&gt;&gt; for key in SUMMARY_METRICS:\n...     ndf = get_5_number(criteria=key, data=df)\n...     print(ndf)\n... \ncount    375.000000\nmean      41.309333\nstd       11.735968\nmin       11.000000\n25%       33.000000\n50%       40.000000\n75%       49.000000\nmax       78.000000\nName: age, dtype: float64\ncount                          375\nmean     0 days 00:23:03.461333333\nstd      0 days 00:08:06.313479117\nmin                0 days 00:10:36\n25%                0 days 00:18:09\n50%                0 days 00:21:20\n75%         0 days 00:25:13.500000\nmax                0 days 01:06:48\nName: time, dtype: object\ncount                          375\nmean     0 days 01:55:17.306666666\nstd      0 days 00:40:31.567395588\nmin                0 days 00:53:00\n25%                0 days 01:30:45\n50%                0 days 01:46:40\n75%         0 days 02:06:07.500000\nmax                0 days 05:34:00\nName: pace, dtype: object\n<\/code><\/pre>\n<p>\u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u0627\u0632 \u06a9\u0627\u0631\u06a9\u0631\u062f \u062e\u0648\u0628 \u062e\u0631\u0627\u0634 \u062f\u0627\u062f\u0646 \u0648\u0628\u060c \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u062f\u0627\u062f\u0647 \u0647\u0627 \u0648 \u062a\u062c\u0632\u06cc\u0647 \u0648 \u062a\u062d\u0644\u06cc\u0644 \u062f\u0627\u062f\u0647 \u0647\u0627 \u0636\u0631\u0648\u0631\u06cc \u0627\u0633\u062a.  \u062a\u0633\u062a \u0628\u062e\u0634\u06cc \u062c\u062f\u0627\u06cc\u06cc \u0646\u0627\u067e\u0630\u06cc\u0631 \u0627\u0632 \u0646\u0648\u0634\u062a\u0646 \u06a9\u062f \u0627\u0633\u062a\u060c \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0645\u0646 \u0628\u0647 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u0628\u06cc\u0634\u062a\u0631 \u0622\u0646 \u0627\u062f\u0627\u0645\u0647 \u062f\u0627\u062f\u0645 \u0648 \u0628\u0647 \u0646\u0648\u0634\u062a\u0646 \u062a\u0633\u062a \u0647\u0627\u06cc \u0648\u0627\u062d\u062f \u0628\u0627\u0632\u06af\u0634\u062a\u0645.<\/p>\n<p>\u0628\u06cc\u0627\u06cc\u06cc\u062f \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u0645 \u06a9\u0647 \u0686\u06af\u0648\u0646\u0647 \u06a9\u062f \u062e\u0648\u062f \u0631\u0627 \u0622\u0632\u0645\u0627\u06cc\u0634 \u06a9\u0646\u06cc\u0645 (\u0627\u06af\u0631 \u0628\u0627 \u062a\u0633\u062a \u0648\u0627\u062d\u062f \u0622\u0634\u0646\u0627 \u0647\u0633\u062a\u06cc\u062f\u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u062e\u0634 \u0628\u0639\u062f\u06cc \u0631\u0627 \u0631\u062f \u06a9\u0646\u06cc\u062f)<\/p>\n<h3 id=\"testing-testing-and-after-that-more-testing\"><span class=\"ez-toc-section\" id=\"%d8%aa%d8%b3%d8%aa%d8%8c_%d8%aa%d8%b3%d8%aa%d8%8c_%d9%88_%d8%a8%d8%b9%d8%af_%d8%a7%d8%b2_%d8%a2%d9%86_%e2%80%a6_%d8%aa%d8%b3%d8%aa_%d8%a8%db%8c%d8%b4%d8%aa%d8%b1\"><\/span>\u062a\u0633\u062a\u060c \u062a\u0633\u062a\u060c \u0648 \u0628\u0639\u062f \u0627\u0632 \u0622\u0646 &#8230; \u062a\u0633\u062a \u0628\u06cc\u0634\u062a\u0631<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0645\u0646 \u0641\u0631\u0636 \u0645\u06cc \u06a9\u0646\u0645 \u06a9\u0647 \u0634\u0645\u0627 \u0628\u0627 \u0646\u0648\u0634\u062a\u0646 \u06a9\u062f\u0647\u0627\u06cc \u06a9\u0648\u0686\u06a9 \u0648 \u0645\u0633\u062a\u0642\u0644 \u0628\u0631\u0627\u06cc \u0622\u0632\u0645\u0627\u06cc\u0634 \u06a9\u062f \u062e\u0648\u062f \u0622\u0634\u0646\u0627 \u0647\u0633\u062a\u06cc\u062f.  \u0628\u0647 \u0627\u06cc\u0646 \u0622\u0632\u0645\u0627\u06cc\u0634\u0627\u062a \u0648\u0627\u062d\u062f \u0645\u06cc \u06af\u0648\u06cc\u0646\u062f.<\/p>\n<blockquote><p>\u0686\u0627\u0631\u0686\u0648\u0628 \u0648\u0627\u062d\u062f \u062a\u0633\u062a \u0648\u0627\u062d\u062f \u062f\u0631 \u0627\u0635\u0644 \u0627\u0632 JUnit \u0627\u0644\u0647\u0627\u0645 \u06af\u0631\u0641\u062a\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a \u0648 \u0637\u0639\u0645\u06cc \u0645\u0634\u0627\u0628\u0647 \u0686\u0627\u0631\u0686\u0648\u0628\u200c\u0647\u0627\u06cc \u062a\u0633\u062a \u0648\u0627\u062d\u062f \u0627\u0635\u0644\u06cc \u062f\u0631 \u0632\u0628\u0627\u0646\u200c\u0647\u0627\u06cc \u062f\u06cc\u06af\u0631 \u062f\u0627\u0631\u062f.  \u0627\u0632 \u0627\u062a\u0648\u0645\u0627\u0633\u06cc\u0648\u0646 \u062a\u0633\u062a\u060c \u0628\u0647 \u0627\u0634\u062a\u0631\u0627\u06a9 \u06af\u0630\u0627\u0631\u06cc \u06a9\u062f \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u0648 \u062e\u0627\u0645\u0648\u0634 \u0634\u062f\u0646 \u0628\u0631\u0627\u06cc \u062a\u0633\u062a \u0647\u0627\u060c \u062a\u062c\u0645\u06cc\u0639 \u062a\u0633\u062a \u0647\u0627 \u062f\u0631 \u0645\u062c\u0645\u0648\u0639\u0647 \u0647\u0627 \u0648 \u0627\u0633\u062a\u0642\u0644\u0627\u0644 \u062a\u0633\u062a \u0647\u0627 \u0627\u0632 \u0686\u0627\u0631\u0686\u0648\u0628 \u06af\u0632\u0627\u0631\u0634 \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0645\u06cc \u06a9\u0646\u062f.  (\u0627\u0632 \u0627\u0633\u0646\u0627\u062f \u067e\u0627\u06cc\u062a\u0648\u0646)<\/p><\/blockquote>\n<p>\u0633\u0639\u06cc \u06a9\u0631\u062f\u0645 \u0628\u0631\u0627\u06cc \u0647\u0631 \u0631\u0648\u0634\u06cc \u06a9\u0647 \u0646\u0648\u0634\u062a\u0645 \u06cc\u06a9 \u062a\u0633\u062a \u0648\u0627\u062d\u062f \u0633\u0627\u062f\u0647 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0645 \u0631\u0648\u06cc \u06a9\u062f.  \u0627\u06cc\u0646 \u0645\u0646 \u0631\u0627 \u0627\u0632 \u0633\u0631\u062f\u0631\u062f\u0647\u0627\u06cc \u0632\u06cc\u0627\u062f\u06cc \u062f\u0631 \u062c\u0627\u062f\u0647 \u0646\u062c\u0627\u062a \u062f\u0627\u062f.  \u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u06a9\u062f \u0631\u0627 \u0645\u062c\u062f\u062f\u0627\u064b \u0627\u0635\u0644\u0627\u062d \u06a9\u0631\u062f\u0645\u060c \u0631\u0627\u0647 \u0647\u0627\u06cc \u0628\u0647\u062a\u0631\u06cc \u0628\u0631\u0627\u06cc \u0628\u062f\u0633\u062a \u0622\u0648\u0631\u062f\u0646 \u0647\u0645\u0627\u0646 \u0646\u062a\u0627\u06cc\u062c \u067e\u06cc\u062f\u0627 \u06a9\u0631\u062f\u0645 \u0648 \u0627\u0639\u062f\u0627\u062f \u062f\u0631\u0633\u062a \u0631\u0627 \u062a\u0648\u0644\u06cc\u062f \u06a9\u0631\u062f\u0645.<\/p>\n<p>\u0622\u0632\u0645\u0648\u0646 \u0648\u0627\u062d\u062f \u062f\u0631 \u0627\u06cc\u0646 \u0632\u0645\u06cc\u0646\u0647 \u06a9\u0644\u0627\u0633\u06cc \u0627\u0633\u062a \u06a9\u0647 \u06af\u0633\u062a\u0631\u0634 \u0645\u06cc \u06cc\u0627\u0628\u062f <code>unittest.TestCase<\/code>.  \u0647\u0631 \u0631\u0648\u0634\u06cc \u06a9\u0647 \u0628\u0627 <code>test_<\/code> \u0622\u0632\u0645\u0648\u0646\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0628\u0627\u06cc\u062f \u0686\u0646\u062f\u06cc\u0646 \u0627\u062f\u0639\u0627 \u0631\u0627 \u0628\u06af\u0630\u0631\u0627\u0646\u062f.<\/p>\n<p>\u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062b\u0627\u0644\u060c \u0628\u0631\u0627\u06cc \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u0627\u0632 \u0627\u06cc\u0646\u06a9\u0647 \u062a\u062c\u0632\u06cc\u0647 \u0648 \u062a\u062d\u0644\u06cc\u0644 \u0647\u0627 \u0645\u0637\u0627\u0628\u0642 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u0646\u062f\u060c \u06cc\u06a9 \u0645\u0627\u0698\u0648\u0644 \u062a\u0633\u062a \u0646\u0648\u0634\u062a\u0645 \u0628\u0647 \u0646\u0627\u0645 <a><code>test_analyze<\/code>:<\/p>\n<pre><code class=\"language-python\"># Not all test cases are shown, please check the full code of 'test\/test_analyze.py'\nimport unittest\nfrom pandas import DataFrame\nfrom empirestaterunup.analyze import get_country_counts\nfrom empirestaterunup.data import load_data\n\nclass AnalyzeTestCase(unittest.TestCase):\n    df: DataFrame\n\n    @classmethod\n    def setUpClass(cls) -&gt; None:\n        cls.df = load_data()\n\n    def test_get_country_counts(self):\n        country_counts, min_countries, max_countries = get_country_counts(df=AnalyzeTestCase.df)\n        self.assertIsNotNone(country_counts)\n        self.assertEqual(2, country_counts['JPN'])\n        self.assertIsNotNone(min_countries)\n        self.assertEqual(3, min_countries.shape[0])\n        self.assertIsNotNone(max_countries)\n        self.assertEqual(14, max_countries.shape[0])\n\n\nif __name__ == '__main__':\n    unittest.main()\n<\/code><\/pre>\n<p>\u062a\u0627 \u0627\u06cc\u0646\u062c\u0627 \u0645\u0627 \u062f\u0627\u062f\u0647 \u0647\u0627 \u0631\u0627 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0631\u062f\u06cc\u0645 \u0648 \u0645\u0637\u0645\u0626\u0646 \u0634\u062f\u06cc\u0645 \u06a9\u0647 \u0627\u0646\u062a\u0638\u0627\u0631\u0627\u062a \u0631\u0627 \u0628\u0631\u0622\u0648\u0631\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f.  \u0645\u0646 \u062a\u0633\u062a \u0647\u0627\u06cc \u062c\u062f\u0627\u06af\u0627\u0646\u0647 \u0627\u06cc \u0628\u0631\u0627\u06cc \u06a9\u062f \u062a\u062c\u0632\u06cc\u0647 \u0648 \u062a\u062d\u0644\u06cc\u0644 \u0648 \u0647\u0645\u0686\u0646\u06cc\u0646 \u0628\u0631\u0627\u06cc \u0627\u0633\u06a9\u0631\u0627\u067e\u0631 \u0646\u0648\u0634\u062a\u0645.<\/p>\n<p>\u0622\u0632\u0645\u0627\u06cc\u0634 \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0628\u0647 \u0631\u0648\u06cc\u06a9\u0631\u062f \u0645\u062a\u0641\u0627\u0648\u062a\u06cc \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u062f\u060c \u0632\u06cc\u0631\u0627 \u0628\u0627\u06cc\u062f \u06a9\u0644\u06cc\u06a9\u200c\u0647\u0627 \u0631\u0627 \u0634\u0628\u06cc\u0647\u200c\u0633\u0627\u0632\u06cc \u06a9\u0646\u062f \u0648 \u0645\u0646\u062a\u0638\u0631 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0635\u0641\u062d\u0647 \u0646\u0645\u0627\u06cc\u0634 \u0628\u0627\u0634\u062f.  \u06af\u0627\u0647\u06cc \u0627\u0648\u0642\u0627\u062a \u062e\u0631\u0627\u0628\u06cc \u0647\u0627 \u0628\u0647 \u0631\u0627\u062d\u062a\u06cc \u0642\u0627\u0628\u0644 \u062a\u0634\u062e\u06cc\u0635 \u0647\u0633\u062a\u0646\u062f (\u0645\u0627\u0646\u0646\u062f \u062e\u0631\u0627\u0628\u06cc \u0647\u0627)\u060c \u0627\u0645\u0627 \u06af\u0627\u0647\u06cc \u0627\u0648\u0642\u0627\u062a \u0645\u0634\u06a9\u0644\u0627\u062a \u0628\u0633\u06cc\u0627\u0631 \u0638\u0631\u06cc\u0641 \u062a\u0631 \u0647\u0633\u062a\u0646\u062f (\u0622\u06cc\u0627 \u0645\u0627 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u0645\u0646\u0627\u0633\u0628 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a\u061f).<\/p>\n<p>\u067e\u0633 \u0627\u0632 \u0627\u06cc\u0646\u06a9\u0647 \u0627\u0628\u062a\u062f\u0627 \u0631\u0648\u0634 \u062a\u062c\u0633\u0645 \u0646\u062a\u0627\u06cc\u062c \u0631\u0627 \u0645\u0639\u0631\u0641\u06cc \u06a9\u0631\u062f\u06cc\u0645\u060c \u0645\u062c\u062f\u062f\u0627\u064b \u0627\u06cc\u0646 \u0631\u0648\u0634 \u0622\u0632\u0645\u0627\u06cc\u0634\u06cc \u062e\u0627\u0635 \u0631\u0627 \u0628\u0631\u0631\u0633\u06cc \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f.<\/p>\n<h2 id=\"how-to-visualize-the-results\"><span class=\"ez-toc-section\" id=\"%d8%b1%d9%88%d8%b4_%d8%aa%d8%ac%d8%b3%d9%85_%d9%86%d8%aa%d8%a7%db%8c%d8%ac\"><\/span>\u0631\u0648\u0634 \u062a\u062c\u0633\u0645 \u0646\u062a\u0627\u06cc\u062c<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0645\u0646 \u0645\u06cc\u062e\u0648\u0627\u0633\u062a\u0645 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u0645 terminal \u062a\u0627 \u062d\u062f \u0627\u0645\u06a9\u0627\u0646 \u06cc\u0627\u0641\u062a\u0647 \u0647\u0627\u06cc\u0645 \u0631\u0627 \u062a\u062c\u0633\u0645 \u06a9\u0646\u0645 \u0648 \u0627\u0644\u0632\u0627\u0645\u0627\u062a \u0631\u0627 \u0628\u0647 \u062d\u062f\u0627\u0642\u0644 \u0628\u0631\u0633\u0627\u0646\u0645.  \u0645\u0646 \u062a\u0635\u0645\u06cc\u0645 \u06af\u0631\u0641\u062a\u0645 \u0627\u0632 \u0686\u0627\u0631\u0686\u0648\u0628 \u0645\u062a\u0646\u06cc \u0628\u0631\u0627\u06cc \u0627\u0646\u062c\u0627\u0645 \u0622\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u0645.<\/p>\n<p>\u0627\u06cc\u0646 \u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9 \u0628\u0633\u06cc\u0627\u0631 \u06a9\u0627\u0645\u0644 \u0627\u0633\u062a \u0648 \u0628\u0647 \u0634\u0645\u0627 \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc \u062f\u0647\u062f \u062a\u0627 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u0645\u062a\u0646\u06cc \u0628\u0633\u0627\u0632\u06cc\u062f \u06a9\u0647 \u0648\u0627\u06a9\u0646\u0634 \u06af\u0631\u0627 \u0648 \u0632\u06cc\u0628\u0627 \u0647\u0633\u062a\u0646\u062f.<\/p>\n<p>\u0646\u0648\u0634\u062a\u0646 \u0622\u0646\u200c\u0647\u0627 \u0646\u06cc\u0632 \u0622\u0633\u0627\u0646 \u0627\u0633\u062a\u060c \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0642\u0628\u0644 \u0627\u0632 \u0627\u06cc\u0646\u06a9\u0647 \u0628\u0647 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc \u0628\u0647\u200c\u062f\u0633\u062a\u200c\u0622\u0645\u062f\u0647 \u0639\u0645\u06cc\u0642\u200c\u062a\u0631 \u0628\u0631\u0648\u06cc\u0645\u060c \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0628\u0631\u0627\u06cc \u06cc\u0627\u062f\u06af\u06cc\u0631\u06cc \u062f\u0631 \u0645\u0648\u0631\u062f Textual \u0645\u06a9\u062b \u06a9\u0646\u06cc\u0645.<\/p>\n<h3 id=\"text-user-interfaces-tui-with-textual\"><span class=\"ez-toc-section\" id=\"%d8%b1%d8%a7%d8%a8%d8%b7_%d9%87%d8%a7%db%8c_%da%a9%d8%a7%d8%b1%d8%a8%d8%b1%db%8c_%d9%85%d8%aa%d9%86%db%8c_tui_%d8%a8%d8%a7_%d9%85%d8%aa%d9%86%db%8c\"><\/span>\u0631\u0627\u0628\u0637 \u0647\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631\u06cc \u0645\u062a\u0646\u06cc (TUI) \u0628\u0627 \u0645\u062a\u0646\u06cc<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u067e\u0631\u0648\u0698\u0647 Textual \u06cc\u06a9 \u0622\u0645\u0648\u0632\u0634 \u062e\u0648\u0628 \u062f\u0627\u0631\u062f \u06a9\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0622\u0646 \u0631\u0627 \u0628\u062e\u0648\u0627\u0646\u06cc\u062f \u062a\u0627 \u0628\u0647 \u0633\u0631\u0639\u062a \u0639\u0645\u0644 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u0628\u06cc\u0627\u06cc\u06cc\u062f \u06a9\u062f\u06cc \u0631\u0627 \u0628\u0628\u06cc\u0646\u06cc\u0645.  \u06cc\u06a9\u06cc \u0627\u0632 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627 \u0646\u0627\u0645 \u062f\u0627\u0631\u062f <code>esru_outlier<\/code>.  \u06a9\u062f TUI \u0632\u0646\u062f\u0647 \u0627\u0633\u062a \u0631\u0648\u06cc \u0631\u0627 <a>\u0645\u0627\u0698\u0648\u0644 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627 \u06a9\u0647 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 z-score \u0686\u0646\u062f\u06cc\u0646 \u062c\u062f\u0648\u0644 \u0631\u0627 \u0628\u0647 \u0647\u0645\u0631\u0627\u0647 \u0645\u0648\u0627\u0631\u062f \u067e\u0631\u062a \u06a9\u0647 \u0642\u0628\u0644\u0627\u064b \u067e\u06cc\u062f\u0627 \u06a9\u0631\u062f\u06cc\u0645 \u0646\u0634\u0627\u0646 \u0645\u06cc\u200c\u062f\u0647\u062f.<\/p>\n<p>OutlierApp (\u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0627 \u06af\u0633\u062a\u0631\u0634 \u0645\u06cc \u062f\u0647\u062f) \u062a\u0645\u0627\u0645 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0627\u0648\u0644\u06cc\u0647 \u0631\u0627 \u062c\u0645\u0639 \u0622\u0648\u0631\u06cc \u0645\u06cc \u06a9\u0646\u062f \u0631\u0648\u06cc \u06cc\u06a9 \u062c\u062f\u0648\u0644 \u0628\u0631\u0627\u06cc \u0647\u0631 \u06af\u0631\u0648\u0647 \u067e\u0631\u062a \u0648 \u0633\u067e\u0633 \u0622\u0646 \u0631\u0627 \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u0645\u06cc \u06a9\u0646\u062f <code>RunnerDetailScreen<\/code> \u0628\u0631\u0627\u06cc \u0646\u0645\u0627\u06cc\u0634 \u062c\u0632\u0626\u06cc\u0627\u062a \u06cc\u06a9 \u062f\u0648\u0646\u062f\u0647<\/p>\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img decoding=\"async\" src=\"https:\/\/rasanegaar.com\/blog\/wp-content\/uploads\/2024\/05\/esrm_outlier_first_screen.png\" class=\"kg-image\" alt=\"\u062a\u0635\u0648\u06cc\u0631\u06cc \u0627\u0632 \u062c\u062f\u0648\u0644 OutlierApp \u06a9\u0647 \u0645\u0648\u0627\u0631\u062f \u067e\u0631\u062a \u0631\u0627 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f on \u0646\u062a\u0627\u06cc\u062c \u0645\u0633\u0627\u0628\u0642\u0647\" width=\"644\" height=\"457\" loading=\"lazy\" title=\"\"><figcaption>\u0635\u0641\u062d\u0647 \u0627\u0648\u0644 \u067e\u0631\u062a (\u0628\u0631 \u0627\u0633\u0627\u0633 \u0633\u0646\u060c \u0632\u0645\u0627\u0646 \u0627\u062c\u0631\u0627 \u0648 \u0633\u0631\u0639\u062a)<\/figcaption><\/figure>\n<p>\u06a9\u062f \u0628\u0639\u062f\u06cc \u0628\u0627 \u062a\u0648\u0636\u06cc\u062d\u0627\u062a\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0631\u0648\u0634 \u0633\u0627\u062e\u062a \u0627\u06cc\u0646 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f:<\/p>\n<pre><code class=\"language-python\"># Only the code of the application shown here\n# This application shows 3 tables: SUMMARY_METRICS = (RaceFields.AGE.value, RaceFields.TIME.value, RaceFields.PACE.value)\n# Every application in Textual extends the App class\nclass OutlierApp(App):\n    DF: DataFrame = None\n    BINDINGS = [ (\"q\", \"quit_app\", \"Quit\"), ]  # Bind 'q' to 'quit_app' method `action_quit_app`, which in turn exists the app\n    CSS_PATH = \"outliers.tcss\"  # Styling can be done externally, similar to using CSS\n    ENABLE_COMMAND_PALETTE = False\n\n    def action_quit_app(self):\n        self.exit(0)\n\n    def compose(self) -&gt; ComposeResult:\n        \"\"\"\n        Here we 'Yield' Widgets\/ components that will be rendered in order \u0631\u0648\u06cc the TUI\n        How do the components get their layout \u0631\u0648\u06cc the screen? They use a cascading style sheet (CSS): outliers.tcss and\n        some explicit layout containers like the class `Vertical` that can contain other Widgets\n        Here we have a header, tables, and a footer \n        \"\"\"\n        yield Header(show_clock=True)\n        for column_name in SUMMARY_METRICS:\n            table = DataTable(id=f'{column_name}_outlier')\n            table.cursor_type=\"row\"\n            table.zebra_stripes = True\n            table.tooltip = \"Get runner details\"\n            if column_name == RaceFields.AGE.value:\n                label = Label(f\"{column_name} (older) outliers:\".title())\n            else:\n                label = Label(f\"{column_name} (slower) outliers:\".title())\n            yield Vertical(\n                label,\n                table\n            )\n        yield Footer()\n\n    def on_mount(self) -&gt; None:\n        \"\"\"\n        Here we populate each table with data from the DataFrame. Each table has outliers of different types.\n        All can be obtained with the `get_outliers` method.\n        \"\"\"\n        for column in SUMMARY_METRICS:\n            table = self.get_widget_by_id(f'{column}_outlier', expect_type=DataTable)\n            columns = [x.title() for x in ['bib', column]]\n            table.add_columns(*columns)\n            table.add_rows(*[get_outliers(df=OutlierApp.DF, column=column).to_dict().items()])\n\n    @\u0631\u0648\u06cc(DataTable.HeaderSelected)\n    def on_header_clicked(self, event: DataTable.HeaderSelected):\n        \"\"\"\n        When the user selects a column header it generates a 'HeaderSelected' event.\n        The annotation \u0631\u0648\u06cc this method tells Textual that we will handle this event here\n        We can extract the table, the selected column, and then sort the table contents.\n        \"\"\"\n        table = event.data_table\n        table.sort(event.column_key)\n\n    @\u0631\u0648\u06cc(DataTable.RowSelected)\n    def on_row_clicked(self, event: DataTable.RowSelected) -&gt; None:\n        \"\"\"\n        Similarly, when the user selects a row it generates a RowSelected method\n        What we do \u0631\u0648\u06cc the 'on_row_clicked' method is capture the event, get the row contents, and construct\n        a new modal screen (RunnerDetailScreen) which we push \u0631\u0648\u06cc top of the regular screen.\n        There we show the runner details differently. \n        \"\"\"\n        table = event.data_table\n        row = table.get_row(event.row_key)\n        runner_detail = RunnerDetailScreen(df=OutlierApp.DF, row=row)\n        self.push_screen(runner_detail)\n<\/code><\/pre>\n<p>\u06a9\u0644\u0627\u0633 <code>RunnerDetailScreen<\/code> (\u062a\u0645\u062f\u06cc\u062f \u0645\u06cc \u0634\u0648\u062f <code>ModalScreen<\/code>) \u062f\u0633\u062a\u06af\u06cc\u0631\u0647 \u0647\u0627\u06cc\u06cc \u0627\u0633\u062a \u06a9\u0647 \u062c\u0632\u0626\u06cc\u0627\u062a \u0645\u0633\u0627\u0628\u0642\u0647 \u0631\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Markdown \u0641\u0631\u0645\u062a \u0634\u062f\u0647 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f\u060c \u06a9\u0647 \u0628\u0627 \u06a9\u0644\u06cc\u06a9 \u06a9\u0631\u062f\u0646 \u0646\u0634\u0627\u0646 \u062f\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f \u0631\u0648\u06cc \u062c\u062f\u0648\u0644\u06cc \u06a9\u0647 \u0642\u0628\u0644\u0627 \u0631\u0646\u062f\u0631 \u0634\u062f\u0647 \u0628\u0648\u062f:<\/p>\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img decoding=\"async\" src=\"https:\/\/rasanegaar.com\/blog\/wp-content\/uploads\/2024\/05\/esrm_outlier_runner_detail.png\" class=\"kg-image\" alt=\"\u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u062a \u0627\u0632 \u062c\u0632\u0626\u06cc\u0627\u062a \u062f\u0648\u0646\u062f\u0647 OutlierApp \u06a9\u0647 \u0645\u0648\u0627\u0631\u062f \u067e\u0631\u062a \u0631\u0627 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f on \u0646\u062a\u0627\u06cc\u062c \u0645\u0633\u0627\u0628\u0642\u0647\" width=\"572\" height=\"864\" loading=\"lazy\" title=\"\"><figcaption>Markdown \u0628\u0627 \u062c\u0632\u0626\u06cc\u0627\u062a \u062f\u0631 \u0645\u0648\u0631\u062f \u062f\u0648\u0646\u062f\u0647 \u0627\u0646\u062a\u062e\u0627\u0628 \u0634\u062f\u0647 \u0627\u0631\u0627\u0626\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a<\/figcaption><\/figure>\n<p>\u0648 \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u06a9\u062f\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0628\u0627 \u062a\u0648\u0636\u06cc\u062d\u0627\u062a \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc \u062f\u0647\u062f:<\/p>\n<pre><code class=\"language-python\"># Omitted imports and helper methods, only showing TUI-related code. See the 'apps.py' file for full code\nclass RunnerDetailScreen(ModalScreen):\n    ENABLE_COMMAND_PALETTE = False  # Disable the search bar, it is active by default and is not needed here\n    CSS_PATH = \"runner_details.tcss\"  # Handle the styles using external CSS\n\n    def __init__(\n            self,\n            name: str | None = None,\n            ident: str | None = None,\n            classes: str | None = None,\n            row: List[Any] | None = None,\n            df: DataFrame = None,\n            country_df: DataFrame = None\n    ):\n        \"\"\"\n        Override the constructor and load useful data like country ISO codes\n        We get the Pandas DataFrame with the details that will be shown to the user\n        \"\"\"\n        super().__init__(name, ident, classes)\n        self.row = row\n        self.df = df\n        if not country_df:\n            self.country_df = load_country_details()\n        else:\n            self.country_df = country_df\n\n    def compose(self) -&gt; ComposeResult:\n        \"\"\"\n        In compose we prepare the markdown, and we let the MarkdownViewer handle details like \n        a nice automatic table of contents.\n        Notice that we call `self.log.info('xxx'). We use that for debugging when this application\n        is called using 'textual'.\n        \"\"\"\n        bib_idx = FIELD_NAMES_AND_POS[RaceFields.BIB]\n        bibs = [self.row[bib_idx]]\n        columns, details = df_to_list_of_tuples(self.df, bibs)\n        self.log.info(f\"Columns: {columns}\")\n        self.log.info(f\"Details: {details}\")\n        row_markdown = \"\"\n        position_markdown = {}\n        split_markdown = {}\n        for legend in ['full', '20th', '65th']:\n            position_markdown[legend] = ''\n            split_markdown[legend] = ''\n        for i in range(0, len(columns)):\n            column = columns[i]\n            detail = details[0][i]\n            if re.search('pace|time', column):\n                if re.search('20th', column):\n                    split_markdown['20th'] += f\"\\n* **{column.title()}:** {detail}\"\n                elif re.search('65th', column):\n                    split_markdown['65th'] += f\"\\n* **{column.title()}:** {detail}\"\n                else:\n                    split_markdown['full'] += f\"\\n* **{column.title()}:** {detail}\"\n            elif re.search('position', column):\n                if re.search('20th', column):\n                    position_markdown['20th'] += f\"\\n* **{column.title()}:** {detail}\"\n                elif re.search('65th', column):\n                    position_markdown['65th'] += f\"\\n* **{column.title()}:** {detail}\"\n                else:\n                    position_markdown['full'] += f\"\\n* **{column.title()}:** {detail}\"\n            elif re.search('url|bib', column):\n                pass  # Skip uninteresting columns\n            else:\n                row_markdown += f\"\\n* **{column.title()}:** {detail}\"\n        yield MarkdownViewer(f\"\"\"# Full Course Race details     \n## Runner BIO (BIB: {bibs[0]})\n{row_markdown}\n## Positions\n### 20th floor        \n{position_markdown['20th']}\n### 65th floor        \n{position_markdown['65th']}\n### Full course        \n{position_markdown['full']}                \n## Race time split   \n### 20th floor        \n{split_markdown['20th']}\n### 65th floor        \n{split_markdown['65th']}\n### Full course        \n{split_markdown['full']}         \n        \"\"\")\n        # This button is used to close this screen and send the user to the previous screen\n        btn = Button(\"Close\", variant=\"primary\", id=\"close\")\n        btn.tooltip = \"Back to main screen\"\n        yield btn\n\n    @\u0631\u0648\u06cc(Button.Pressed, \"#close\")\n    def on_button_pressed(self, _) -&gt; None:\n        \"\"\"\n        Simple logic, pop the previous screen and make this one disappear\n        \"\"\"\n        self.app.pop_screen()\n<\/code><\/pre>\n<p>\u0627\u06cc\u0646 \u06a9\u0644\u0627\u0633 \u0642\u0627\u0628\u0644 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u062c\u062f\u062f \u0627\u0633\u062a.  \u06a9\u0644\u0627\u0633 \u0647\u0627\u06cc \u062f\u06cc\u06af\u0631\u06cc \u0646\u06cc\u0632 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f (\u0645\u0627\u0646\u0646\u062f <code>BrowserApp<\/code> \u062f\u0631 \u0627\u06cc\u0646 \u0622\u0645\u0648\u0632\u0634) \u06a9\u0647 \u0647\u0646\u06af\u0627\u0645 \u06a9\u0644\u06cc\u06a9 \u06a9\u0627\u0631\u0628\u0631 \u0646\u06cc\u0632 \u062f\u0627\u062f\u0647 \u0647\u0627 \u0631\u0627 \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc \u06a9\u0646\u062f \u0631\u0648\u06cc \u06cc\u06a9 \u0631\u062f\u06cc\u0641 \u062c\u062f\u0648\u0644\u060c \u0648 \u0622\u0646 \u062c\u0632\u0626\u06cc\u0627\u062a \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0627\u06cc\u0646 \u0635\u0641\u062d\u0647 \u0646\u0645\u0627\u06cc\u0634 \u0645\u062f\u0627\u0644 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f.<\/p>\n<p>\u0645\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u0645 \u0638\u0627\u0647\u0631 \u0631\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 CSS \u0633\u0641\u0627\u0631\u0634\u06cc \u06a9\u0646\u06cc\u0645 (\u0628\u0644\u0647\u060c \u0645\u0627\u0646\u0646\u062f \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u0648\u0628).  \u0628\u0647 \u0646\u0638\u0631 \u0628\u0633\u06cc\u0627\u0631 \u0634\u0628\u06cc\u0647 CSS \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u0648\u0628 \u0627\u0633\u062a (\u0627\u0645\u0627 \u062f\u0642\u06cc\u0642\u0627\u064b \u06cc\u06a9\u0633\u0627\u0646 \u0646\u06cc\u0633\u062a).  \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062b\u0627\u0644 \u0628\u0631\u0627\u06cc \u0627\u0641\u0632\u0648\u062f\u0646 \u0633\u0628\u06a9 \u0628\u0647 \u06cc\u06a9 \u062f\u06a9\u0645\u0647\u060c \u06a9\u062f \u0632\u06cc\u0631 \u0627\u0633\u062a:<\/p>\n<pre><code class=\"language-text\">Button {\n    dock: bottom;\n    width: 100%;\n    height: auto;\n}\n<\/code><\/pre>\n<p>\u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u0645\u06cc \u0628\u06cc\u0646\u06cc\u062f\u060c Textual \u06cc\u06a9 \u0686\u0627\u0631\u0686\u0648\u0628 \u0628\u0633\u06cc\u0627\u0631 \u0642\u062f\u0631\u062a\u0645\u0646\u062f \u0627\u0633\u062a.  \u0645\u0646 \u0631\u0627 \u0628\u0647 \u06cc\u0627\u062f \u062c\u0627\u0648\u0627 Swing \u0645\u06cc \u0627\u0646\u062f\u0627\u0632\u062f\u060c \u0627\u0645\u0627 \u0628\u062f\u0648\u0646 \u067e\u06cc\u0686\u06cc\u062f\u06af\u06cc \u0627\u0636\u0627\u0641\u06cc.<\/p>\n<p>\u0627\u0645\u0627 \u0622\u06cc\u0627 \u0627\u06cc\u0646 \u0641\u0642\u0637 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062f\u0631 \u0642\u0627\u0644\u0628 \u062c\u062f\u0648\u0644 \u0627\u0633\u062a\u061f  \u0645\u0646 \u0647\u0645\u0686\u0646\u06cc\u0646 \u0645\u06cc\u200c\u062e\u0648\u0627\u0633\u062a\u0645 \u0627\u0646\u0648\u0627\u0639 \u0646\u0645\u0648\u062f\u0627\u0631\u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0645 \u06a9\u0647 \u0628\u062a\u0648\u0627\u0646\u062f \u0631\u0641\u062a\u0627\u0631\u0647\u0627\u06cc\u06cc \u0645\u0627\u0646\u0646\u062f \u062e\u0648\u0634\u0647 \u0633\u0646\u06cc \u0648 \u062a\u0648\u0632\u06cc\u0639 \u062c\u0646\u0633\u06cc\u062a\u06cc \u0631\u0627 \u062a\u0648\u0636\u06cc\u062d \u062f\u0647\u062f.  \u0628\u0631\u0627\u06cc \u0622\u0646 \u0686\u0646\u062f \u06a9\u0644\u0627\u0633 \u0646\u0648\u0634\u062a\u0645 \u0631\u0648\u06cc \u0645\u0627\u0698\u0648\u0644 &#8220;\u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627&#8221; \u0628\u0627 \u06a9\u0645\u06a9 Matplotlib.<\/p>\n<h3 id=\"plots-with-matplotlib\"><span class=\"ez-toc-section\" id=\"%d9%86%d9%82%d8%b4%d9%87_%d9%87%d8%a7_%d8%a8%d8%a7_matplotlib\"><\/span>\u0646\u0642\u0634\u0647 \u0647\u0627 \u0628\u0627 Matplotlib<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0645\u0646 \u0645\u06cc \u062e\u0648\u0627\u0633\u062a\u0645 \u0627\u0632 \u0686\u0646\u062f \u0646\u0645\u0648\u062f\u0627\u0631 \u0628\u0631\u0627\u06cc \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0647\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u0645 \u0648 \u0622\u0646\u0647\u0627 \u0631\u0627 \u0628\u0627 matplotlib \u0633\u0627\u062e\u062a\u0645.  \u06a9\u062f \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u062c\u0639\u0628\u0647 \u0646\u0645\u0648\u062f\u0627\u0631 \u0633\u0646\u060c \u06a9\u0647 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u062f\u0648\u0646\u062f\u06af\u0627\u0646 \u0634\u0631\u06a9\u062a \u06a9\u0646\u0646\u062f\u0647 \u0686\u0646\u062f \u0633\u0627\u0644 \u062f\u0627\u0634\u062a\u0646\u062f\u060c \u0628\u0633\u06cc\u0627\u0631 \u0633\u0627\u062f\u0647 \u0627\u0633\u062a.<\/p>\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img decoding=\"async\" src=\"https:\/\/rasanegaar.com\/blog\/wp-content\/uploads\/2024\/05\/esru_age_box_plot.png\" class=\"kg-image\" alt=\"\u0646\u0645\u0648\u062f\u0627\u0631 \u062c\u0639\u0628\u0647 \u0627\u06cc \u06a9\u0647 \u062a\u0648\u0632\u06cc\u0639 \u0633\u0646\u06cc \u0631\u0627 \u062f\u0631 \u0628\u06cc\u0646 \u0645\u0633\u0627\u0628\u0642\u0647 \u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f\" width=\"639\" height=\"575\" loading=\"lazy\" title=\"\"><figcaption>\u0646\u0645\u0648\u062f\u0627\u0631 \u062c\u0639\u0628\u0647 \u0633\u0646\u06cc \u062f\u0631 Matplotlib \u06a9\u0647 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u0628\u06cc\u0634\u062a\u0631 \u062f\u0648\u0646\u062f\u06af\u0627\u0646 \u062f\u0631 \u0645\u062d\u062f\u0648\u062f\u0647 \u0633\u0646\u06cc 40-50 \u0633\u0627\u0644 \u0642\u0631\u0627\u0631 \u062f\u0627\u0634\u062a\u0646\u062f.<\/figcaption><\/figure>\n<p>\u0648 \u06a9\u062f\u06cc \u06a9\u0647 \u0627\u06cc\u0646 \u0646\u0645\u0648\u062f\u0627\u0631 \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0631\u062f\u0647 \u0627\u0633\u062a:<\/p>\n<pre><code class=\"language-python\"># Not all code is shown here (helper methods, imports)\n# Please check the apps.py module to see all missing code\nclass Plotter:\n    def plot_gender(self):\n        \"\"\"\n        In this method, we get our data frame filtering by gender and get counts\n        Then we create a pie plot\n        \"\"\"\n        series = self.df[RaceFields.GENDER.value].value_counts()\n        fig, ax = plt.subplots(layout=\"constrained\")\n        wedges, texts, auto_texts = ax.pie(\n            series.values,\n            labels=series.keys(),\n            autopct=\"%%%.2f\",\n            shadow=True,\n            startangle=90,\n            explode=(0.1, 0, 0)\n        )\n        ax.set_title = \"Gender participation\"\n        ax.set_xlabel('Gender distribution')\n        \n        # Legend with the fastest runners by gender\n        fastest = find_fastest(self.df, FastestFilters.Gender)\n        fastest_legend = [f\"{fastest[gender]['name']} - {beautify_race_times(fastest[gender]['time'])}\" for gender in\n                          series.keys()]\n        ax.legend(wedges, fastest_legend,\n                  title=\"Fastest by gender\",\n                  loc=\"center left\",\n                  bbox_to_anchor=(1, 0, 0.5, 1))\n<\/code><\/pre>\n<p>\u062c\u0627\u0644\u0628 \u0627\u0633\u062a &#8211; \u0628\u06cc\u0634\u062a\u0631 \u062f\u0648\u0646\u062f\u06af\u0627\u0646 \u0628\u06cc\u0646 40 \u062a\u0627 50 \u0633\u0627\u0644 \u0633\u0646 \u062f\u0627\u0634\u062a\u0646\u062f.<\/p>\n<p>\u062d\u0627\u0644\u0627 \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0628\u0647 \u0622\u0632\u0645\u0627\u06cc\u0634 TUI \u0628\u0631\u06af\u0631\u062f\u06cc\u0645.<\/p>\n<h3 id=\"testing-the-user-interfaces\"><span class=\"ez-toc-section\" id=\"%d8%aa%d8%b3%d8%aa_%d8%b1%d8%a7%d8%a8%d8%b7_%d9%87%d8%a7%db%8c_%da%a9%d8%a7%d8%b1%d8%a8%d8%b1%db%8c\"><\/span>\u062a\u0633\u062a \u0631\u0627\u0628\u0637 \u0647\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631\u06cc<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0648\u0642\u062a\u06cc \u0634\u0631\u0648\u0639 \u0628\u0647 \u06a9\u0627\u0631 \u06a9\u0631\u062f\u0645 \u0631\u0648\u06cc \u0627\u06cc\u0646 \u067e\u0631\u0648\u0698\u0647 \u06a9\u0648\u0686\u06a9\u060c \u0645\u0646 \u0645\u06cc \u062f\u0627\u0646\u0633\u062a\u0645 \u06a9\u0647 \u0642\u0631\u0627\u0631 \u0627\u0633\u062a \u0622\u0632\u0645\u0627\u06cc\u0634 \u0647\u0627\u06cc \u0632\u06cc\u0627\u062f\u06cc \u0627\u0646\u062c\u0627\u0645 \u0634\u0648\u062f.  \u0686\u06cc\u0632\u06cc \u06a9\u0647 \u0645\u0646 \u062f\u0631 \u0645\u0648\u0631\u062f \u0622\u0646 \u0645\u0637\u0645\u0626\u0646 \u0646\u0628\u0648\u062f\u0645 \u0627\u06cc\u0646 \u0628\u0648\u062f \u06a9\u0647 \u0686\u06af\u0648\u0646\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u0645 TUI \u0631\u0627 \u0622\u0632\u0645\u0627\u06cc\u0634 \u06a9\u0646\u0645.<\/p>\n<p>\u0645\u0646 \u062d\u062f\u0633 \u0632\u062f\u0645 \u06a9\u0647 \u062d\u062f\u0627\u0642\u0644 \u062f\u0648 \u0631\u0627\u0647 \u0628\u0631\u0627\u06cc Textual \u0645\u0641\u06cc\u062f \u0627\u0633\u062a: \u06cc\u06a9\u06cc \u0627\u06cc\u0646\u06a9\u0647 \u0628\u062a\u0648\u0627\u0646\u06cc\u0645 \u062c\u0631\u06cc\u0627\u0646 \u067e\u06cc\u0627\u0645 \u0631\u0627 \u0628\u06cc\u0646 \u0645\u0624\u0644\u0641\u0647\u200c\u0647\u0627 \u0628\u0628\u06cc\u0646\u06cc\u0645 \u0648 \u062f\u06cc\u06af\u0631\u06cc \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u062a\u0633\u062a\u200c\u0647\u0627\u06cc \u0648\u0627\u062d\u062f \u0628\u0627 \u0686\u0631\u062e\u0634:<\/p>\n<h4 id=\"following-the-message-flow-with-textual\">\u062f\u0646\u0628\u0627\u0644 \u06a9\u0631\u062f\u0646 \u062c\u0631\u06cc\u0627\u0646 \u067e\u06cc\u0627\u0645 \u0628\u0627 Textual<\/h4>\n<p>Textual \u0627\u0632 \u06cc\u06a9 \u062d\u0627\u0644\u062a \u062a\u0648\u0633\u0639\u0647 \u062c\u0627\u0644\u0628 \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0645\u06cc \u06a9\u0646\u062f \u06a9\u0647 \u0628\u0647 \u0634\u0645\u0627 \u0627\u0645\u06a9\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f CSS \u0631\u0627 \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0647\u06cc\u062f \u0648 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0631\u0627 \u0645\u0634\u0627\u0647\u062f\u0647 \u06a9\u0646\u06cc\u062f \u0631\u0648\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0634\u0645\u0627 \u0628\u062f\u0648\u0646 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u0645\u062c\u062f\u062f  \u0647\u0645\u0686\u0646\u06cc\u0646\u060c \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0631\u0648\u0634 \u0627\u0646\u062a\u0634\u0627\u0631 \u0631\u0648\u06cc\u062f\u0627\u062f\u0647\u0627\u06cc TUI \u0631\u0627 \u0645\u0634\u0627\u0647\u062f\u0647 \u06a9\u0646\u06cc\u062f\u060c \u06a9\u0647 \u0628\u0631\u0627\u06cc \u0627\u0634\u06a9\u0627\u0644\u200c\u0632\u062f\u0627\u06cc\u06cc \u0628\u0633\u06cc\u0627\u0631 \u0627\u0631\u0632\u0634\u0645\u0646\u062f \u0627\u0633\u062a.<\/p>\n<p>\u062f\u0631 \u06cc\u06a9 terminal\u060c \u0634\u0631\u0648\u0639 \u06a9\u0646\u06cc\u062f console:<\/p>\n<pre><code class=\"language-shell\">(EmpireStateRunUp) [josevnz@dmaf5 EmpireStateRunUp]$ . ~\/virtualenv\/EmpireStateRunUp\/bin\/activate\n(EmpireStateRunUp) [josevnz@dmaf5 EmpireStateRunUp]$ textual console\n\u258cTextual Development Console v0.46.0                                                                                                                                             \n\u258cRun a Textual app with textual run --dev my_app.py to connect.                                                                                                                  \n\u258cPress Ctrl+C to quit.\n<\/code><\/pre>\n<p>\u0633\u067e\u0633 \u062f\u0631 \u062f\u06cc\u06af\u0631\u06cc terminal\u060c \u0628\u0631\u0646\u0627\u0645\u0647 \u062e\u0648\u062f \u0631\u0627 \u0634\u0631\u0648\u0639 \u06a9\u0646\u06cc\u062f \u0627\u0645\u0627 \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0648\u0633\u0639\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f:<\/p>\n<pre><code class=\"language-shell\">(EmpireStateRunUp) [josevnz@dmaf5 EmpireStateRunUp]$ textual run --dev --command esru_browser\n<\/code><\/pre>\n<p>\u0627\u06af\u0631 \u062f\u0648\u0628\u0627\u0631\u0647 \u0686\u06a9 \u06a9\u0646\u06cc\u062f \u0631\u0648\u06cc \u0634\u0645\u0627 console terminal\u060c \u0647\u0631 \u067e\u06cc\u0627\u0645\u06cc \u0631\u0627 \u06a9\u0647 \u0628\u0627 App.log \u0627\u0631\u0633\u0627\u0644 \u06a9\u0631\u062f\u0647 \u0627\u06cc\u062f \u0647\u0645\u0631\u0627\u0647 \u0628\u0627 \u0631\u0648\u06cc\u062f\u0627\u062f\u0647\u0627 \u062e\u0648\u0627\u0647\u06cc\u062f \u062f\u06cc\u062f:<\/p>\n<pre><code class=\"language-shell\">\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Client '127.0.0.1' connected \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n[18:28:17] SYSTEM                                                                                                                                                        app.py:2188\nConnected to devtools ( ws:\/\/127.0.0.1:8081 )\n[18:28:17] SYSTEM                                                                                                                                                        app.py:2192\n---\n[18:28:17] SYSTEM                                                                                                                                                        app.py:2194\ndriver=&lt;class 'textual.drivers.linux_driver.LinuxDriver'&gt;\n[18:28:17] SYSTEM                                                                                                                                                        app.py:2195\nloop=&lt;_UnixSelectorEventLoop running=True closed=False debug=False&gt;\n[18:28:17] SYSTEM                                                                                                                                                        app.py:2196\nfeatures=frozenset({'debug', 'devtools'})\n[18:28:17] SYSTEM                                                                                                                                                        app.py:2228\nSTARTED FileMonitor({PosixPath('\/home\/josevnz\/EmpireStateCleanup\/docs\/EmpireStateRunUp\/empirestaterunup\/browser.tcss')})\n[18:28:17] EVENT                                                                                                                                                 message_pump.py:706\nLoad() &gt;&gt;&gt; BrowserApp(title=\"Race Runners\", classes={'-dark-mode'}) method=None\n[18:28:17] EVENT                                                                                                                                                 message_pump.py:697\nMount() &gt;&gt;&gt; DataTable(id='runners') method=&lt;ScrollView.on_mount&gt;\n[18:28:17] EVENT                                                                                                                                                 message_pump.py:697\nMount() &gt;&gt;&gt; DataTable(id='runners') method=&lt;Widget.on_mount&gt;\n[18:28:17] EVENT                                                                                                                                                 message_pump.py:697\nMount() &gt;&gt;&gt; Footer() method=&lt;Footer.on_mount&gt;\n[18:28:17] EVENT                                                                                                                                                 message_pump.py:697\nMount() &gt;&gt;&gt; Footer() method=&lt;Widget.on_mount&gt;\n[18:28:17] EVENT                                                                                                                                                 message_pump.py:697\nMount() &gt;&gt;&gt; ToastRack(id='textual-toastrack') method=&lt;Widget.on_mount&gt;\n...\nRowHighlighted(cursor_row=0, row_key=&lt;textual.widgets._data_table.RowKey object at 0x7fc8d98800d0&gt;) &gt;&gt;&gt; BrowserApp(title=\"Race Runners\", classes={'-dark-mode'}) method=None\n[18:28:17] EVENT                                                                                                                                                 message_pump.py:697\nMount() &gt;&gt;&gt; ScrollBarCorner() method=&lt;Widget.on_mount&gt;\n[18:28:17] EVENT                                                                                                                                                 message_pump.py:706\nResize(size=Size(width=2, height=1), virtual_size=Size(width=178, height=47), container_size=Size(width=178, height=47)) &gt;&gt;&gt; ScrollBarCorner() method=None\n[18:28:17] EVENT                                                                                                                                                 message_pump.py:706\nShow() &gt;&gt;&gt; ScrollBarCorner() method=None\n<\/code><\/pre>\n<h4 id=\"using-unittest-and-pilot\">\u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 unittest \u0648 Pilot<\/h4>\n<p>\u0627\u06cc\u0646 \u0686\u0627\u0631\u0686\u0648\u0628 \u062f\u0627\u0631\u0627\u06cc \u06a9\u0644\u0627\u0633 Pilot \u0627\u0633\u062a \u06a9\u0647 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u0632 \u0622\u0646 \u0628\u0631\u0627\u06cc \u0628\u0631\u0642\u0631\u0627\u0631\u06cc \u062a\u0645\u0627\u0633 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0628\u0627 \u0627\u0628\u0632\u0627\u0631\u06a9\u200c\u0647\u0627\u06cc \u0645\u062a\u0646\u06cc \u0648 \u0645\u0646\u062a\u0638\u0631 \u0631\u0648\u06cc\u062f\u0627\u062f\u0647\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.  \u0627\u06cc\u0646 \u0628\u062f\u0627\u0646 \u0645\u0639\u0646\u0627\u0633\u062a \u06a9\u0647 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u062a\u0639\u0627\u0645\u0644 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0627 \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0627 \u0634\u0628\u06cc\u0647\u200c\u0633\u0627\u0632\u06cc \u06a9\u0646\u06cc\u062f \u062a\u0627 \u062a\u0623\u06cc\u06cc\u062f \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0637\u0628\u0642 \u0627\u0646\u062a\u0638\u0627\u0631 \u0639\u0645\u0644 \u0645\u06cc\u200c\u06a9\u0646\u062f.  \u0627\u06cc\u0646 \u0642\u062f\u0631\u062a\u0645\u0646\u062f\u062a\u0631 \u0627\u0632 \u062a\u0633\u062a \u0647\u0627\u06cc \u0648\u0627\u062d\u062f \u0645\u0639\u0645\u0648\u0644\u06cc \u0627\u0633\u062a \u0632\u06cc\u0631\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u062a\u0639\u0627\u0645\u0644\u0627\u062a UI \u0631\u0627 \u0628\u0627 \u0646\u062a\u0627\u06cc\u062c \u0645\u0648\u0631\u062f \u0627\u0646\u062a\u0638\u0627\u0631 \u067e\u0648\u0634\u0634 \u062f\u0647\u06cc\u062f:<\/p>\n<pre><code class=\"language-python\">import unittest\nfrom textual.widgets import DataTable, MarkdownViewer\nfrom empirestaterunup.apps import BrowserApp\n\n\nclass AppTestCase(unittest.IsolatedAsyncioTestCase):\n    async def test_browser_app(self):\n        app = BrowserApp()\n        self.assertIsNotNone(app)\n        async with app.run_test() as pilot:\n\n            \"\"\"\n            Test the command palette\n            \"\"\"\n            await pilot.press(\"ctrl+\\\\\")\n            for char in \"jose\".split():\n                await pilot.press(char)\n            await pilot.press(\"enter\")\n            # This returns the runner screen. Check that it has some contents\n            markdown_viewer = app.screen.query(MarkdownViewer).first()\n            self.assertTrue(markdown_viewer.document)\n            await pilot.click(\"#close\")  # Close the new screen, pop the original one\n            # Go back to the main screen, now select a runner but using the table\n            table = app.screen.query(DataTable).first()\n            coordinate = table.cursor_coordinate\n            self.assertTrue(table.is_valid_coordinate(coordinate))\n            await pilot.press(\"enter\")\n            await pilot.pause()\n            markdown_viewer = app.screen.query(MarkdownViewer).first()\n            self.assertTrue(markdown_viewer)\n            # After validating the markdown one more time, close the app\n            # Quit the app by pressing q\n            await pilot.press(\"q\")\n\nif __name__ == '__main__':\n    unittest.main()\n<\/code><\/pre>\n<p>\u0627\u06cc\u0646 \u0628\u0633\u06cc\u0627\u0631 \u0628\u0627\u0627\u0631\u0632\u0634 \u0627\u0633\u062a\u060c \u0648 \u0686\u06cc\u0632\u06cc \u06a9\u0647 \u0628\u0627\u0631\u0647\u0627 \u0628\u0631\u0627\u06cc \u062a\u0623\u06cc\u06cc\u062f \u0627\u0639\u062a\u0628\u0627\u0631 \u0628\u0647 \u06cc\u06a9 \u0645\u062c\u0645\u0648\u0639\u0647 \u0627\u0628\u0632\u0627\u0631 \u062e\u0627\u0631\u062c\u06cc \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u062f (\u0645\u062b\u0644\u0627\u064b \u062f\u0631 \u062c\u0627\u0648\u0627 \u06a9\u0644\u0627\u0633 Robot \u0631\u0627 \u062f\u0627\u0631\u06cc\u062f).<\/p>\n<h2 id=\"how-to-run-the-applications\"><span class=\"ez-toc-section\" id=\"%d8%b1%d9%88%d8%b4_%d8%a7%d8%ac%d8%b1%d8%a7%db%8c_%d8%a8%d8%b1%d9%86%d8%a7%d9%85%d9%87_%d9%87%d8%a7\"><\/span>\u0631\u0648\u0634 \u0627\u062c\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u062f\u0631 \u0646\u0647\u0627\u06cc\u062a\u060c \u0632\u0645\u0627\u0646 \u0622\u0634\u0646\u0627\u06cc\u06cc \u0628\u0627 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0648\u0686\u06a9 \u0641\u0631\u0627 \u0631\u0633\u06cc\u062f\u0647 \u0627\u0633\u062a (\u0634\u0645\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u06cc\u06a9 \u0646\u0645\u0627\u06cc\u0634 \u0645\u062a\u062d\u0631\u06a9 \u0627\u0632 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631\u062f\u06cc TUI \u0631\u0627 \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0645\u0634\u0627\u0647\u062f\u0647 \u06a9\u0646\u06cc\u062f).<\/p>\n<h3 id=\"browsing-through-the-data\"><span class=\"ez-toc-section\" id=\"%d9%85%d8%b1%d9%88%d8%b1_%d8%a7%d8%b2_%d8%b7%d8%b1%db%8c%d9%82_%d8%af%d8%a7%d8%af%d9%87_%d9%87%d8%a7\"><\/span>\u0645\u0631\u0648\u0631 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u062f\u0627\u062f\u0647 \u0647\u0627<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0627\u06cc\u0646 <code>esru_browser<\/code> \u06cc\u06a9 \u0645\u0631\u0648\u0631\u06af\u0631 \u0633\u0627\u062f\u0647 \u0627\u0633\u062a \u06a9\u0647 \u0628\u0647 \u0634\u0645\u0627 \u0627\u0645\u06a9\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u062f\u0631 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u062e\u0627\u0645 \u0645\u0633\u0627\u0628\u0642\u0647 \u067e\u06cc\u0645\u0627\u06cc\u0634 \u06a9\u0646\u06cc\u062f.<\/p>\n<pre><code class=\"language-shell\">esru_browser\n<\/code><\/pre>\n<p>\u0627\u06cc\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u062a\u0645\u0627\u0645 \u062c\u0632\u0626\u06cc\u0627\u062a \u0645\u0633\u0627\u0628\u0642\u0647 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0647\u0631 \u062f\u0648\u0646\u062f\u0647 \u062f\u0631 \u062c\u062f\u0648\u0644\u06cc \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u06a9\u0647 \u0627\u0645\u06a9\u0627\u0646 \u0645\u0631\u062a\u0628 \u0633\u0627\u0632\u06cc \u0628\u0631 \u0627\u0633\u0627\u0633 \u0633\u062a\u0648\u0646 \u0631\u0627 \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<figure class=\"kg-card kg-image-card kg-width-wide kg-card-hascaption\"><img decoding=\"async\" src=\"https:\/\/rasanegaar.com\/blog\/wp-content\/uploads\/2024\/05\/esru_browser.png\" class=\"kg-image\" alt=\"\u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u062e\u0627\u0645 \u062f\u0648\u0646\u062f\u0647 \u062f\u0631 \u06cc\u06a9 \u062c\u062f\u0648\u0644\" width=\"1362\" height=\"812\" loading=\"lazy\" title=\"\"><figcaption>\u067e\u0646\u062c\u0631\u0647 esru_browser \u0646\u062a\u0627\u06cc\u062c \u0647\u0645\u0647 \u062f\u0648\u0646\u062f\u06af\u0627\u0646 \u0631\u0627 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f.  \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0645\u0631\u062a\u0628 \u0633\u0627\u0632\u06cc \u06a9\u0646\u06cc\u062f\u060c \u062f\u0648\u0646\u062f\u0647 \u0647\u0627 \u0631\u0627 \u062c\u0633\u062a\u062c\u0648 \u06a9\u0646\u06cc\u062f \u0648 \u0628\u0631\u0627\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a \u062c\u0632\u0626\u06cc\u0627\u062a \u0628\u06cc\u0634\u062a\u0631 \u06a9\u0644\u06cc\u06a9 \u06a9\u0646\u06cc\u062f<\/figcaption><\/figure>\n<p>\u0648 \u067e\u0627\u0644\u062a \u0641\u0631\u0645\u0627\u0646 \u0627\u0645\u06a9\u0627\u0646 \u062c\u0633\u062a\u062c\u0648\u06cc \u062f\u0648\u0646\u062f\u0647 \u0647\u0627 \u0628\u0631 \u0627\u0633\u0627\u0633 \u0646\u0627\u0645 \u0631\u0627 \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc \u06a9\u0646\u062f (\u0627\u06cc\u0646 \u0627\u0633\u0627\u0633\u0627\u064b \u06cc\u06a9 \u0646\u0648\u0627\u0631 \u062c\u0633\u062a\u062c\u0648 \u0628\u0627 \u0645\u0646\u0637\u0642 \u0641\u0627\u0632\u06cc \u0627\u0633\u062a):<\/p>\n<figure class=\"kg-card kg-image-card kg-width-wide kg-card-hascaption\"><img decoding=\"async\" src=\"https:\/\/rasanegaar.com\/blog\/wp-content\/uploads\/2024\/05\/race_runners_2023-12-31T18_35_53_558956.svg.svg+xml\" class=\"kg-image\" alt=\"race_runners_2023-12-31T18_35_53_558956.svg\u060c \u062c\u0633\u062a\u062c\u0648\u06cc \u062f\u0648\u0646\u062f\u06af\u0627\u0646 \u0628\u0631 \u0627\u0633\u0627\u0633 \u0646\u0627\u0645\" width=\"2214\" height=\"1343.1999999999998\" loading=\"lazy\" title=\"\"><figcaption>\u0645\u0633\u0627\u0628\u0642\u0627\u062a \u0646\u0634\u0627\u0646 \u062f\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f \u0631\u0648\u06cc \u067e\u0627\u0644\u062a \u0631\u0627 \u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u062a\u0627\u06cc\u067e \u0645\u06cc \u06a9\u0646\u06cc\u062f<\/figcaption><\/figure>\n<h3 id=\"summary-reports\"><span class=\"ez-toc-section\" id=\"%da%af%d8%b2%d8%a7%d8%b1%d8%b4_%d9%87%d8%a7%db%8c_%d8%ae%d9%84%d8%a7%d8%b5%d9%87\"><\/span>\u06af\u0632\u0627\u0631\u0634 \u0647\u0627\u06cc \u062e\u0644\u0627\u0635\u0647<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0628\u0631\u0627\u06cc \u0628\u0647 \u062f\u0633\u062a \u0622\u0648\u0631\u062f\u0646 \u0628\u06cc\u0646\u0634 \u062f\u0631 \u0645\u0648\u0631\u062f \u0631\u0641\u062a\u0627\u0631 \u0645\u0633\u0627\u0628\u0642\u0647\u200c\u062f\u0647\u0646\u062f\u0647\u060c \u0628\u0647 \u06af\u0632\u0627\u0631\u0634\u200c\u0647\u0627\u06cc \u062e\u0644\u0627\u0635\u0647 \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u06cc\u062f (\u0628\u0631\u062e\u0644\u0627\u0641 \u0628\u0631\u0631\u0633\u06cc \u062c\u0632\u0626\u06cc\u0627\u062a \u0647\u0631 \u0645\u0633\u0627\u0628\u0642\u0647). <\/p>\n<p>\u0627\u06cc\u0646 \u0646\u0631\u0645 \u0627\u0641\u0632\u0627\u0631 \u062c\u0632\u0626\u06cc\u0627\u062a \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u0645\u0648\u0627\u0631\u062f \u0632\u06cc\u0631 \u0631\u0627 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u062f:<\/p>\n<ul>\n<li>\u062a\u0639\u062f\u0627\u062f\u060c \u0627\u0646\u062d\u0631\u0627\u0641 \u0645\u0639\u06cc\u0627\u0631\u060c \u0645\u06cc\u0627\u0646\u06af\u06cc\u0646\u060c \u062d\u062f\u0627\u0642\u0644\u060c \u062d\u062f\u0627\u06a9\u062b\u0631 45%\u060c 50% \u0648 75% \u0628\u0631\u0627\u06cc \u0633\u0646\u060c \u0632\u0645\u0627\u0646 \u0648 \u0633\u0631\u0639\u062a<\/li>\n<li>\u062a\u0648\u0632\u06cc\u0639 \u06af\u0631\u0648\u0647 \u0648 \u062a\u0639\u062f\u0627\u062f \u0628\u0631\u0627\u06cc \u0633\u0646\u060c \u0645\u0648\u062c \u0648 \u062c\u0646\u0633\u06cc\u062a<\/li>\n<\/ul>\n<pre><code class=\"language-shell\">esru_numbers\n<\/code><\/pre>\n<p>\u0686\u0646\u062f \u0648\u0627\u0642\u0639\u06cc\u062a \u062c\u0627\u0644\u0628 \u062f\u0631 \u0645\u0648\u0631\u062f \u0645\u0633\u0627\u0628\u0642\u0647:<\/p>\n<ul>\n<li>\u0645\u06cc\u0627\u0646\u06af\u06cc\u0646 \u0633\u0646\u06cc 41 \u0633\u0627\u0644 \u0648 40 \u0633\u0627\u0644 \u0628\u0632\u0631\u06af\u062a\u0631\u06cc\u0646 \u06af\u0631\u0648\u0647 \u0633\u0646\u06cc \u0628\u0648\u062f.<\/li>\n<li>\u0627\u06a9\u062b\u0631\u06cc\u062a \u0627\u0641\u0631\u0627\u062f \u0645\u062a\u0639\u0644\u0642 \u0628\u0647 \u00ab\u0645\u0648\u062c \u0633\u06cc\u0627\u0647\u00bb \u0628\u0648\u062f\u0646\u062f.<\/li>\n<li>\u0627\u06a9\u062b\u0631\u06cc\u062a \u0645\u0631\u062f\u0645 \u0645\u0633\u0627\u0628\u0642\u0647 \u0631\u0627 \u0628\u06cc\u0646 20 \u062a\u0627 30 \u062f\u0642\u06cc\u0642\u0647 \u0628\u0647 \u067e\u0627\u06cc\u0627\u0646 \u0631\u0633\u0627\u0646\u062f\u0646\u062f.<\/li>\n<li>\u062c\u0648\u0627\u0646\u062a\u0631\u06cc\u0646 \u062f\u0648\u0646\u062f\u0647 11 \u0633\u0627\u0644\u0647 \u0648 \u0645\u0633\u0646 \u062a\u0631\u06cc\u0646 \u0622\u0646\u0647\u0627 78 \u0633\u0627\u0644 \u0633\u0646 \u062f\u0627\u0634\u062a.<\/li>\n<\/ul>\n<figure class=\"kg-card kg-image-card kg-width-wide kg-card-hascaption\"><img decoding=\"async\" src=\"https:\/\/rasanegaar.com\/blog\/wp-content\/uploads\/2024\/05\/esru_numbers.svg.svg+xml\" class=\"kg-image\" alt=\"\u0622\u0645\u0627\u0631\u0647\u0627\u06cc \u0645\u0648\u0631\u062f \u0639\u0644\u0627\u0642\u0647\u060c \u0645\u0627\u0646\u0646\u062f \u0645\u06cc\u0627\u0646\u06af\u06cc\u0646 \u0633\u0646\u06cc\u060c \u0645\u0648\u062c \u062a\u0639\u0644\u0642 \u0622\u0646\u0647\u0627\u060c \u0632\u0645\u0627\u0646 \u067e\u0627\u06cc\u0627\u0646\" width=\"1995\" height=\"1050.4\" loading=\"lazy\" title=\"\"><figcaption>esru_numbers \u0646\u0645\u0627\u06cc \u067e\u0631\u0646\u062f\u0647 \u0627\u06cc \u0627\u0632 \u0647\u0645\u0647 \u0645\u0633\u0627\u0628\u0642\u0647 \u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u0631\u0627 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f\u060c \u062f\u0633\u062a\u0647 \u0628\u0646\u062f\u06cc \u0634\u062f\u0647 \u0628\u0631 \u0627\u0633\u0627\u0633 \u0633\u0637\u0644<\/figcaption><\/figure>\n<h3 id=\"finding-outliers\"><span class=\"ez-toc-section\" id=\"%db%8c%d8%a7%d9%81%d8%aa%d9%86_%d9%85%d9%88%d8%a7%d8%b1%d8%af_%d9%be%d8%b1%d8%aa\"><\/span>\u06cc\u0627\u0641\u062a\u0646 \u0645\u0648\u0627\u0631\u062f \u067e\u0631\u062a<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0627\u06cc\u0646 \u0646\u0631\u0645 \u0627\u0641\u0632\u0627\u0631 \u0627\u0632 <em>\u0627\u0645\u062a\u06cc\u0627\u0632 Z<\/em> \u0628\u0631\u0627\u06cc \u067e\u06cc\u062f\u0627 \u06a9\u0631\u062f\u0646 \u0646\u0642\u0627\u0637 \u067e\u0631\u062a \u0628\u0631\u0627\u06cc \u0686\u0646\u062f\u06cc\u0646 \u0645\u0639\u06cc\u0627\u0631 \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u0646\u0698\u0627\u062f:<\/p>\n<pre><code class=\"language-shell\">esru_outlier\n<\/code><\/pre>\n<figure class=\"kg-card kg-image-card kg-width-wide kg-card-hascaption\"><img decoding=\"async\" src=\"https:\/\/rasanegaar.com\/blog\/wp-content\/uploads\/2024\/05\/esru_outlier-1.svg.svg+xml\" class=\"kg-image\" alt=\"\u062c\u062f\u0648\u0644 \u0628\u0627 \u062c\u0632\u0626\u06cc\u0627\u062a \u067e\u0631\u062a\" width=\"1995\" height=\"1050.4\" loading=\"lazy\" title=\"\"><figcaption>\u0635\u0641\u062d\u0647 \u0627\u0635\u0644\u06cc esru_outlier \u0645\u0633\u0627\u0628\u0642\u0647\u200c\u0647\u0627\u06cc\u06cc \u0631\u0627 \u0628\u0647 \u0634\u0645\u0627 \u0646\u0634\u0627\u0646 \u0645\u06cc\u200c\u062f\u0647\u062f \u06a9\u0647 \u0627\u0632 \u0627\u0644\u06af\u0648\u0647\u0627\u06cc \u0645\u0639\u0645\u0648\u0644\u06cc \u067e\u06cc\u0631\u0648\u06cc \u0646\u06a9\u0631\u062f\u0647\u200c\u0627\u0646\u062f<\/figcaption><\/figure>\n<p>\u0627\u0632 \u0622\u0646\u062c\u0627 \u06a9\u0647 \u0627\u06cc\u0646 \u0646\u062a\u0627\u06cc\u062c \u0628\u0647 \u0634\u0645\u0627\u0631\u0647 BIB \u062e\u0644\u0627\u0635\u0647 \u0645\u06cc \u0634\u0648\u062f\u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u06a9\u0644\u06cc\u06a9 \u06a9\u0646\u06cc\u062f \u0631\u0648\u06cc \u06cc\u06a9 \u0631\u062f\u06cc\u0641 \u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u062c\u0632\u0626\u06cc\u0627\u062a \u0628\u06cc\u0634\u062a\u0631 \u062f\u0631 \u0645\u0648\u0631\u062f \u06cc\u06a9 \u062f\u0648\u0646\u062f\u0647:<\/p>\n<figure class=\"kg-card kg-image-card kg-width-wide kg-card-hascaption\"><img decoding=\"async\" src=\"https:\/\/rasanegaar.com\/blog\/wp-content\/uploads\/2024\/05\/esru_outlier-2.svg.svg+xml\" class=\"kg-image\" alt=\"\u062c\u0632\u0626\u06cc\u0627\u062a \u0645\u0633\u0627\u0628\u0642\u0647 \u067e\u0631\u062a\u060c \u0627\u0632 \u062c\u0645\u0644\u0647 BIB\" width=\"1995\" height=\"1050.4\" loading=\"lazy\" title=\"\"><figcaption>\u0648 \u0634\u0645\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u062c\u0632\u0626\u06cc\u0627\u062a \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u0647\u0631 \u0646\u0642\u0637\u0647 \u0631\u0627 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u06cc\u062f.  \u0628\u0644\u0647\u060c \u06a9\u062f \u0642\u0627\u0628\u0644 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u062c\u062f\u062f \u0627\u0633\u062a \u0648 \u0628\u0631\u0627\u06cc \u0646\u0645\u0627\u06cc\u0634 \u062c\u0632\u0626\u06cc\u0627\u062a \u0628\u0631\u0627\u06cc \u0647\u0631 \u062f\u0648\u0646\u062f\u0647 \u06cc\u06a9\u0633\u0627\u0646 \u0627\u0633\u062a<\/figcaption><\/figure>\n<p>Textual \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0639\u0627\u0644\u06cc \u0628\u0631\u0627\u06cc \u0631\u0646\u062f\u0631 Markdown \u0648 \u0647\u0645\u0686\u0646\u06cc\u0646 \u0632\u0628\u0627\u0646 \u0647\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0648\u06cc\u0633\u06cc \u062f\u0627\u0631\u062f.  \u0628\u0647 \u06a9\u062f \u0646\u06af\u0627\u0647 \u06a9\u0646\u06cc\u062f \u062a\u0627 \u062e\u0648\u062f\u062a\u0627\u0646 \u0645\u062a\u0648\u062c\u0647 \u0634\u0648\u06cc\u062f.<\/p>\n<h3 id=\"a-few-plot-graphics-for-you\"><span class=\"ez-toc-section\" id=\"%da%86%d9%86%d8%af_%d8%b7%d8%b1%d8%ad_%da%af%d8%b1%d8%a7%d9%81%db%8c%da%a9%db%8c_%d8%a8%d8%b1%d8%a7%db%8c_%d8%b4%d9%85%d8%a7\"><\/span>\u0686\u0646\u062f \u0637\u0631\u062d \u06af\u0631\u0627\u0641\u06cc\u06a9\u06cc \u0628\u0631\u0627\u06cc \u0634\u0645\u0627<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0628\u0631\u0646\u0627\u0645\u0647 esru_plot \u0686\u0646\u062f \u0646\u0645\u0648\u062f\u0627\u0631 \u06af\u0631\u0627\u0641\u06cc\u06a9\u06cc \u0628\u0631\u0627\u06cc \u06a9\u0645\u06a9 \u0628\u0647 \u062a\u062c\u0633\u0645 \u062f\u0627\u062f\u0647 \u0647\u0627 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u062f.  \u062f\u0627\u062e\u0644\u060c \u06a9\u0644\u0627\u0633 <code>Plotter<\/code> \u062a\u0645\u0627\u0645 \u06a9\u0627\u0631\u0647\u0627\u06cc \u0633\u0646\u06af\u06cc\u0646 \u0631\u0627 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc \u062f\u0647\u062f<\/p>\n<h4 id=\"age-plots\">\u0646\u0645\u0648\u062f\u0627\u0631\u0647\u0627\u06cc \u0633\u0646\u06cc<\/h4>\n<p>\u0627\u06cc\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u062f\u0648 \u0637\u0639\u0645 \u0631\u0627 \u0628\u0631\u0627\u06cc \u06cc\u06a9 \u062f\u0627\u062f\u0647 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u062f\u060c \u06cc\u06a9\u06cc \u0646\u0645\u0648\u062f\u0627\u0631 \u062c\u0639\u0628\u0647 \u0627\u0633\u062a:<\/p>\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img decoding=\"async\" src=\"https:\/\/rasanegaar.com\/blog\/wp-content\/uploads\/2024\/05\/esru_age_box_plot-1.png\" class=\"kg-image\" alt=\"\u0646\u0645\u0648\u062f\u0627\u0631 \u0633\u0646\u06cc\u060c \u0646\u0645\u0648\u062f\u0627\u0631 \u062f\u0627\u06cc\u0631\u0647 \u0627\u06cc\" width=\"639\" height=\"575\" loading=\"lazy\" title=\"\"><figcaption>\u0646\u0645\u0648\u062f\u0627\u0631 \u062c\u0639\u0628\u0647 \u0633\u0646\u06cc \u06a9\u0647 \u0642\u0628\u0644\u0627 \u062f\u06cc\u062f\u06cc\u0645<\/figcaption><\/figure>\n<p>\u062f\u0648\u0645\u06cc \u06cc\u06a9 \u0647\u06cc\u0633\u062a\u0648\u06af\u0631\u0627\u0645 \u0645\u0646\u0638\u0645 \u0627\u0633\u062a:<\/p>\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img decoding=\"async\" src=\"https:\/\/rasanegaar.com\/blog\/wp-content\/uploads\/2024\/05\/age_histogram.png\" class=\"kg-image\" alt=\"\u0647\u06cc\u0633\u062a\u0648\u06af\u0631\u0627\u0645 \u0633\u0646\" width=\"725\" height=\"499\" loading=\"lazy\" title=\"\"><figcaption>\u0647\u06cc\u0633\u062a\u0648\u06af\u0631\u0627\u0645 \u0633\u0646 \u0645\u0627\u0646\u0646\u062f \u0646\u0645\u0648\u062f\u0627\u0631 \u062c\u0639\u0628\u0647 \u0631\u0627 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u0627\u0645\u0627 \u0633\u0637\u0644 \u0647\u0627 \u0628\u06cc\u0634\u062a\u0631 \u0642\u0627\u0628\u0644 \u0645\u0634\u0627\u0647\u062f\u0647 \u0647\u0633\u062a\u0646\u062f.  \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u0645\u0634\u0627\u0628\u0647\u060c \u0631\u0627\u0647 \u0647\u0627\u06cc \u0632\u06cc\u0627\u062f\u06cc \u0628\u0631\u0627\u06cc \u062a\u0648\u0636\u06cc\u062d \u062c\u0645\u0639\u06cc\u062a \u0634\u0646\u0627\u0633\u06cc \u0645\u0633\u0627\u0628\u0642\u0647.<\/figcaption><\/figure>\n<p>\u0627\u0632 \u0647\u0631 \u062f\u0648 \u0646\u0645\u0648\u062f\u0627\u0631 \u0645\u0634\u0627\u0647\u062f\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0633\u0646 \u06af\u0631\u0648\u0647\u06cc \u06a9\u0647 \u0628\u06cc\u0634\u062a\u0631\u06cc\u0646 \u0634\u0631\u06a9\u062a \u06a9\u0646\u0646\u062f\u0647 \u0631\u0627 \u062f\u0627\u0631\u062f\u060c \u0628\u0631\u0627\u06a9\u062a 40 \u062a\u0627 45 \u0633\u0627\u0644 \u0648 \u0646\u0642\u0627\u0637 \u067e\u0631\u062a \u062f\u0631 \u06af\u0631\u0648\u0647 \u0647\u0627\u06cc 10 \u062a\u0627 20 \u0648 70 \u062a\u0627 80 \u0633\u0627\u0644 \u0627\u0633\u062a.<\/p>\n<h4 id=\"participants-per-country-plot\">\u0634\u0631\u06a9\u062a \u06a9\u0646\u0646\u062f\u06af\u0627\u0646 \u062f\u0631 \u0647\u0631 \u0637\u0631\u062d \u06a9\u0634\u0648\u0631<\/h4>\n<figure class=\"kg-card kg-image-card kg-width-wide kg-card-hascaption\"><img decoding=\"async\" src=\"https:\/\/rasanegaar.com\/blog\/wp-content\/uploads\/2024\/05\/participants_per_country.png\" class=\"kg-image\" alt=\"\u0647\u06cc\u0633\u062a\u0648\u06af\u0631\u0627\u0645\" width=\"1139\" height=\"521\" loading=\"lazy\" title=\"\"><figcaption>\u0627\u06cc\u0646 \u0646\u0645\u0648\u062f\u0627\u0631 \u062a\u0645\u0627\u0645 \u06a9\u0634\u0648\u0631\u0647\u0627 \u0631\u0627 \u0628\u0627 \u062a\u0639\u062f\u0627\u062f \u0634\u0631\u06a9\u062a \u06a9\u0646\u0646\u062f\u06af\u0627\u0646\u060c \u0628\u0627 \u0628\u0647\u062a\u0631\u06cc\u0646 \u062f\u0648\u0646\u062f\u0647 \u0627\u0632 \u0647\u0631 \u06a9\u062f\u0627\u0645 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f.<\/figcaption><\/figure>\n<p>\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u062c\u0627\u06cc \u062a\u0639\u062c\u0628 \u0646\u06cc\u0633\u062a: \u0627\u06a9\u062b\u0631\u06cc\u062a \u0642\u0631\u06cc\u0628 \u0628\u0647 \u0627\u062a\u0641\u0627\u0642 \u0645\u0633\u0627\u0628\u0642\u0627\u062a \u0627\u062a\u0648\u0645\u0628\u06cc\u0644\u0631\u0627\u0646\u06cc \u0627\u0632 \u0627\u06cc\u0627\u0644\u0627\u062a \u0645\u062a\u062d\u062f\u0647 \u0648 \u067e\u0633 \u0627\u0632 \u0622\u0646 \u0645\u06a9\u0632\u06cc\u06a9 \u0647\u0633\u062a\u0646\u062f.  \u062c\u0627\u0644\u0628 \u0627\u06cc\u0646\u062c\u0627\u0633\u062a \u06a9\u0647 \u0628\u0631\u0646\u062f\u0647 \u0645\u0633\u0627\u0628\u0642\u0647 1402 \u0627\u0647\u0644 \u0645\u0627\u0644\u0632\u06cc \u0627\u0633\u062a \u0648 \u062a\u0646\u0647\u0627 2 \u062f\u0648\u0646\u062f\u0647 \u062f\u0631 \u0622\u0646 \u0634\u0631\u06a9\u062a \u0645\u06cc \u06a9\u0646\u0646\u062f.<\/p>\n<h4 id=\"gender-distribution\">\u062a\u0648\u0632\u06cc\u0639 \u062c\u0646\u0633\u06cc\u062a\u06cc<\/h4>\n<figure class=\"kg-card kg-image-card kg-width-wide kg-card-hascaption\"><img decoding=\"async\" src=\"https:\/\/rasanegaar.com\/blog\/wp-content\/uploads\/2024\/05\/gender_distribution.png\" class=\"kg-image\" alt=\"\u067e\u0627\u06cc \u062c\u0646\u0633\u06cc\u062a\" width=\"683\" height=\"471\" loading=\"lazy\" title=\"\"><figcaption>\u067e\u0627\u06cc \u062a\u0648\u0632\u06cc\u0639 \u062c\u0646\u0633\u06cc\u062a\u06cc \u06a9\u0647 \u0628\u0647\u062a\u0631\u06cc\u0646 \u0645\u0633\u0627\u0628\u0642\u0647 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0647\u0631 \u062f\u0633\u062a\u0647 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f<\/figcaption><\/figure>\n<p>\u0627\u06a9\u062b\u0631 \u062f\u0648\u0646\u062f\u06af\u0627\u0646 \u062e\u0648\u062f \u0631\u0627 \u0645\u0631\u062f \u0648 \u0628\u0647 \u062f\u0646\u0628\u0627\u0644 \u0622\u0646 \u0632\u0646 \u0645\u0639\u0631\u0641\u06cc \u06a9\u0631\u062f\u0646\u062f.<\/p>\n<h2 id=\"what-else-can-we-learn\"><span class=\"ez-toc-section\" id=\"%da%86%d9%87_%da%86%db%8c%d8%b2_%d8%af%db%8c%da%af%d8%b1%db%8c_%d9%85%db%8c_%d8%aa%d9%88%d8%a7%d9%86%db%8c%d9%85_%db%8c%d8%a7%d8%af_%d8%a8%da%af%db%8c%d8%b1%db%8c%d9%85%d8%9f\"><\/span>\u0686\u0647 \u0686\u06cc\u0632 \u062f\u06cc\u06af\u0631\u06cc \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u0645 \u06cc\u0627\u062f \u0628\u06af\u06cc\u0631\u06cc\u0645\u061f<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img decoding=\"async\" src=\"https:\/\/rasanegaar.com\/blog\/wp-content\/uploads\/2024\/05\/esru2023_nyc-1.JPG\" class=\"kg-image\" alt=\"esru2023_nyc-1\" width=\"2000\" height=\"2667\" loading=\"lazy\" title=\"\"><figcaption>\u0646\u06cc\u0648\u06cc\u0648\u0631\u06a9 \u0628\u0647 \u062e\u0648\u0628\u06cc \u0646\u0645\u0627\u06cc\u0646\u062f\u0647 \u0628\u0648\u062f \u0631\u0648\u06cc \u0631\u0648\u06cc\u062f\u0627\u062f  \u0628\u0644\u0647\u060c \u0645\u0646 \u062f\u0631 \u0645\u0648\u0631\u062f \u0627\u062f\u0627\u0631\u0647 \u067e\u0644\u06cc\u0633 \u0646\u06cc\u0648\u06cc\u0648\u0631\u06a9 \u0635\u062d\u0628\u062a \u0645\u06cc \u06a9\u0646\u0645 \u06a9\u0647 \u0628\u0627 \u062a\u062c\u0647\u06cc\u0632\u0627\u062a \u06a9\u0627\u0645\u0644 \u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u062f\u060c \u0646\u0647 \u0645\u0646 \u0631\u0648\u06cc \u0686\u067e \u061b-)<\/figcaption><\/figure>\n<p>\u0634\u0631\u06a9\u062a \u062f\u0631 \u0627\u06cc\u0646 \u0645\u0633\u0627\u0628\u0642\u0647 \u062a\u062c\u0631\u0628\u0647 \u0628\u0633\u06cc\u0627\u0631 \u062e\u0648\u0628\u06cc \u0628\u0648\u062f.  \u0628\u0647\u062a\u0631\u06cc\u0646 \u0628\u062e\u0634 \u0627\u06cc\u0646 \u0628\u0648\u062f \u06a9\u0647 \u0628\u0647 \u06a9\u0646\u062c\u06a9\u0627\u0648\u06cc \u0645\u0646 \u062f\u0627\u0645\u0646 \u0632\u062f \u0648 \u0628\u0627\u0639\u062b \u0634\u062f \u0627\u06cc\u0646 \u06a9\u062f \u0631\u0627 \u0628\u0646\u0648\u06cc\u0633\u0645 \u062a\u0627 \u062d\u0642\u0627\u06cc\u0642 \u062c\u0627\u0644\u0628 \u062a\u0631\u06cc \u062f\u0631 \u0645\u0648\u0631\u062f \u0645\u0633\u0627\u0628\u0642\u0647 \u0628\u0647 \u062f\u0633\u062a \u0628\u06cc\u0627\u0648\u0631\u0645.<\/p>\n<p>\u0686\u06cc\u0632\u0647\u0627\u06cc \u0628\u06cc\u0634\u062a\u0631\u06cc \u0628\u0631\u0627\u06cc \u06cc\u0627\u062f\u06af\u06cc\u0631\u06cc \u062f\u0631 \u0645\u0648\u0631\u062f \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u0628\u0647 \u062a\u0627\u0632\u06af\u06cc \u062f\u0631 \u0627\u06cc\u0646 \u0622\u0645\u0648\u0632\u0634 \u062f\u06cc\u062f\u06cc\u062f \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f:<\/p>\n<ul>\n<li>\u0645\u062c\u0645\u0648\u0639\u0647 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0639\u0645\u0648\u0645\u06cc \u0646\u0698\u0627\u062f\u06cc \u0632\u06cc\u0627\u062f\u06cc \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f\u060c \u0648 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u0632 \u0622\u0646\u0647\u0627 \u0628\u0631\u0627\u06cc \u0627\u0639\u0645\u0627\u0644 \u0622\u0646\u0686\u0647 \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u06cc\u0627\u062f \u06af\u0631\u0641\u062a\u0647\u200c\u0627\u06cc\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.  \u0641\u0642\u0637 \u0646\u06af\u0627\u0647\u06cc \u0628\u0647 \u0627\u06cc\u0646 \u0645\u062c\u0645\u0648\u0639\u0647 \u062f\u0627\u062f\u0647 \u0645\u0627\u0631\u0627\u062a\u0646 \u0634\u0647\u0631 \u0646\u06cc\u0648\u06cc\u0648\u0631\u06a9\u060c \u062f\u0648\u0631\u0647 1970-2018 \u0628\u06cc\u0646\u062f\u0627\u0632\u06cc\u062f.  \u0686\u0647 \u0633\u0648\u0627\u0644\u0627\u062a \u062f\u06cc\u06af\u0631\u06cc \u062f\u0631 \u0645\u0648\u0631\u062f \u062f\u0627\u062f\u0647 \u0647\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u067e\u0631\u0633\u06cc\u062f\u061f<\/li>\n<li>\u0634\u0645\u0627 \u0641\u0642\u0637 \u0646\u06a9\u062a\u0647 \u06a9\u0627\u0631\u06cc \u0631\u0627 \u06a9\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u0627 Textual \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u06cc\u062f \u0631\u0627 \u062f\u06cc\u062f\u06cc\u062f.  \u0645\u0646 \u0634\u0645\u0627 \u0631\u0627 \u062a\u0634\u0648\u06cc\u0642 \u0645\u06cc \u06a9\u0646\u0645 \u06a9\u0647 \u062f\u0631 \u0645\u0648\u0631\u062f \u0622\u0646 \u06a9\u0627\u0648\u0634 \u06a9\u0646\u06cc\u062f <a>\u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627py \u0645\u062f\u0648\u0644.  \u0628\u0647 \u0646\u0645\u0648\u0646\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627 \u0646\u06cc\u0632 \u0646\u06af\u0627\u0647\u06cc \u0628\u06cc\u0646\u062f\u0627\u0632\u06cc\u062f.<\/li>\n<li>\u062f\u0631\u0627\u06cc\u0648\u0631 \u0648\u0628 \u0633\u0644\u0646\u06cc\u0648\u0645 \u0641\u0642\u0637 \u0627\u0628\u0632\u0627\u0631\u06cc \u0628\u0631\u0627\u06cc \u062e\u0631\u0627\u0634 \u062f\u0627\u062f\u0646 \u0648\u0628 \u0646\u06cc\u0633\u062a\u060c \u0628\u0644\u06a9\u0647 \u0628\u0631\u0627\u06cc \u0622\u0632\u0645\u0627\u06cc\u0634 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631\u062f\u06cc \u0648\u0628 \u0627\u0633\u062a.  \u0628\u0647\u062a\u0631 \u0627\u0632 \u0627\u06cc\u0646 \u0646\u06cc\u0633\u062a \u06a9\u0647 \u0645\u0631\u0648\u0631\u06af\u0631 \u0634\u0645\u0627 \u062a\u0633\u062a \u062e\u0648\u062f\u06a9\u0627\u0631 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0634\u0645\u0627 \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u062f.  \u0627\u06cc\u0646 \u06cc\u06a9 \u0686\u0627\u0631\u0686\u0648\u0628 \u0628\u0632\u0631\u06af \u0627\u0633\u062a\u060c \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0628\u0631\u0627\u06cc \u062e\u0648\u0627\u0646\u062f\u0646 \u0648 \u0627\u062c\u0631\u0627\u06cc \u062a\u0633\u062a \u0647\u0627\u06cc \u062e\u0648\u062f \u0622\u0645\u0627\u062f\u0647 \u0628\u0627\u0634\u06cc\u062f.  \u0627\u06a9\u06cc\u062f\u0627\u064b \u067e\u06cc\u0634\u0646\u0647\u0627\u062f \u0645\u06cc \u06a9\u0646\u0645 \u0628\u0647 \u0646\u0645\u0648\u0646\u0647 \u0647\u0627 \u0646\u06af\u0627\u0647 \u06a9\u0646\u06cc\u062f.  \u0622\u0632\u0645\u0627\u06cc\u0634 \u06cc\u06a9 \u062e\u0637\u0627 \u0628\u0647 \u0634\u0645\u0627 \u0646\u062a\u0627\u06cc\u062c \u0628\u0647\u062a\u0631\u06cc \u0645\u06cc \u062f\u0647\u062f.<\/li>\n<li>\u0627\u06af\u0631 \u0627\u06cc\u0646 \u0646\u0648\u0639 \u0645\u0633\u0627\u0628\u0642\u0647 \u0631\u0627 \u062f\u0648\u0633\u062a \u062f\u0627\u0631\u06cc\u062f\u060c \u0628\u0631\u0627\u06cc \u0642\u0631\u0639\u0647 \u06a9\u0634\u06cc Empire Estate Run Up \u0627\u0642\u062f\u0627\u0645 \u06a9\u0646\u06cc\u062f \u06cc\u0627 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u06cc\u06a9 \u0645\u0648\u0633\u0633\u0647 \u062e\u06cc\u0631\u06cc\u0647 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f.  \u0686\u0647 \u06a9\u0633\u06cc \u06af\u0641\u062a\u0647 \u0627\u0633\u062a \u06a9\u0647 \u06a9\u06cc\u0646\u06af \u06a9\u0648\u0646\u06af \u062a\u0646\u0647\u0627 \u06a9\u0633\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0628\u0647 \u0627\u0648\u062c \u0628\u0631\u0633\u062f\u061f<\/li>\n<li>\u0645\u062a\u0623\u0633\u0641\u0627\u0646\u0647\u060c \u0645\u0646 \u062f\u0631 \u0645\u0648\u0642\u0639\u06cc\u062a\u06cc \u0646\u06cc\u0633\u062a\u0645 \u06a9\u0647 \u0628\u062a\u0648\u0627\u0646\u0645 \u062a\u0648\u0635\u06cc\u0647 \u0622\u0645\u0648\u0632\u0634\u06cc \u0628\u0647 \u0634\u0645\u0627 \u0627\u0631\u0627\u0626\u0647 \u062f\u0647\u0645.  \u0647\u0631 \u0641\u0631\u062f\u06cc \u0645\u062a\u0641\u0627\u0648\u062a \u0627\u0633\u062a.  \u0645\u0646 \u062a\u0648\u0635\u06cc\u0647 \u0645\u06cc \u06a9\u0646\u0645 \u0642\u0628\u0644 \u0627\u0632 \u0634\u0631\u06a9\u062a \u062f\u0631 \u0645\u0633\u0627\u0628\u0642\u0647 \u0627\u06cc \u0645\u0627\u0646\u0646\u062f \u0627\u06cc\u0646 \u0628\u0627 \u067e\u0632\u0634\u06a9 \u062e\u0648\u062f \u0645\u0634\u0648\u0631\u062a \u06a9\u0646\u06cc\u062f \u0648 \u0627\u0632 \u06cc\u06a9 \u0645\u0631\u0628\u06cc \u062f\u0648\u0646\u062f\u0647 \u0645\u0634\u0627\u0648\u0631\u0647 \u062d\u0631\u0641\u0647 \u0627\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u06cc\u062f.<\/li>\n<li>\u0627\u0645\u0627 \u0645\u0647\u0645\u062a\u0631 \u0627\u0632 \u0647\u0645\u0647\u060c \u0628\u0627\u0648\u0631 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f \u06a9\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0631\u0627 \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u06cc\u062f (\u0645\u0633\u0627\u0628\u0642\u0647 \u0648 \u0646\u0648\u0634\u062a\u0646 \u0628\u0631\u062e\u06cc \u0627\u0628\u0632\u0627\u0631\u0647\u0627 \u0628\u0631\u0627\u06cc process \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u0645\u0633\u0627\u0628\u0642\u0647) \u0648 \u062f\u0631 \u062d\u06cc\u0646 \u0627\u0646\u062c\u0627\u0645 \u0622\u0646 \u0627\u0632 \u0622\u0646 \u0644\u0630\u062a \u0628\u0628\u0631\u06cc\u062f.  \u0627\u06cc\u0646 \u06cc\u06a9 \u067e\u06cc\u0634 \u0646\u06cc\u0627\u0632 \u0628\u0631\u0627\u06cc \u0647\u0631 \u067e\u0631\u0648\u0698\u0647 \u0627\u0633\u062a.<\/li>\n<\/ul>\n<\/section>\n<p><br \/>\n<br \/>\u0645\u0646\u062a\u0634\u0631 \u0634\u062f\u0647 \u062f\u0631 1403-05-08 23:05:06<br \/>\n<\/p>\n\n\n<div class=\"kk-star-ratings kksr-auto kksr-align-center kksr-valign-bottom\"\n    data-payload='{&quot;align&quot;:&quot;center&quot;,&quot;id&quot;:&quot;17349&quot;,&quot;slug&quot;:&quot;default&quot;,&quot;valign&quot;:&quot;bottom&quot;,&quot;ignore&quot;:&quot;&quot;,&quot;reference&quot;:&quot;auto&quot;,&quot;class&quot;:&quot;&quot;,&quot;count&quot;:&quot;0&quot;,&quot;legendonly&quot;:&quot;&quot;,&quot;readonly&quot;:&quot;&quot;,&quot;score&quot;:&quot;0&quot;,&quot;starsonly&quot;:&quot;&quot;,&quot;best&quot;:&quot;5&quot;,&quot;gap&quot;:&quot;5&quot;,&quot;greet&quot;:&quot;\u0627\u0645\u062a\u06cc\u0627\u0632 \u0634\u0645\u0627 \u0628\u0647 \u0627\u06cc\u0646 \u0645\u0637\u0644\u0628&quot;,&quot;legend&quot;:&quot;0\\\/5 (0 \u0631\u0627\u06cc)&quot;,&quot;size&quot;:&quot;30&quot;,&quot;title&quot;:&quot;\u062a\u062c\u0632\u06cc\u0647 \u0648 \u062a\u062d\u0644\u06cc\u0644 \u062f\u0627\u062f\u0647 \u0647\u0627 \u0628\u0627 \u067e\u0627\u06cc\u062a\u0648\u0646 - \u0686\u06af\u0648\u0646\u0647 \u0639\u0645\u0644\u06a9\u0631\u062f \u0627\u062c\u0631\u0627\u06cc \u0627\u0645\u067e\u0627\u06cc\u0631 \u0627\u0633\u062a\u06cc\u062a \u0631\u0627 \u062a\u062c\u0632\u06cc\u0647 \u0648 \u062a\u062d\u0644\u06cc\u0644 \u06a9\u0631\u062f\u0645&quot;,&quot;width&quot;:&quot;0&quot;,&quot;_legend&quot;:&quot;{score}\\\/{best} ({count} \u0631\u0627\u06cc)&quot;,&quot;font_factor&quot;:&quot;1.25&quot;}'>\n            \n<div class=\"kksr-stars\">\n    \n<div class=\"kksr-stars-inactive\">\n            <div class=\"kksr-star\" data-star=\"1\" style=\"padding-left: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"2\" style=\"padding-left: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"3\" style=\"padding-left: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"4\" style=\"padding-left: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"5\" style=\"padding-left: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n    <\/div>\n    \n<div class=\"kksr-stars-active\" style=\"width: 0px;\">\n            <div class=\"kksr-star\" style=\"padding-left: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-left: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-left: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-left: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-left: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n    <\/div>\n<\/div>\n                \n\n<div class=\"kksr-legend\" style=\"font-size: 24px;\">\n            <span class=\"kksr-muted\">\u0627\u0645\u062a\u06cc\u0627\u0632 \u0634\u0645\u0627 \u0628\u0647 \u0627\u06cc\u0646 \u0645\u0637\u0644\u0628<\/span>\n    <\/div>\n    <\/div>\n","protected":false},"excerpt":{"rendered":"<p><span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">\u0632\u0645\u0627\u0646 \u0644\u0627\u0632\u0645 \u0628\u0631\u0627\u06cc \u0645\u0637\u0627\u0644\u0639\u0647: <\/span> <span class=\"rt-time\"> 24<\/span> <span class=\"rt-label rt-postfix\">\u062f\u0642\u06cc\u0642\u0647<\/span><\/span>\u0645\u0633\u0627\u0628\u0642\u0647 \u062f\u0648\u06cc\u062f\u0646 \u0628\u0631\u062c \u0645\u0633\u0627\u0628\u0642\u0647\u200c\u0627\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0627\u0632 \u067e\u0644\u0647\u200c\u0647\u0627\u06cc \u0633\u0627\u062e\u062a\u0645\u0627\u0646 \u0628\u0627\u0644\u0627 \u0645\u06cc\u200c\u0631\u0648\u06cc\u062f. \u0627\u06cc\u0646\u0647\u0627 \u062f\u0631 \u0633\u0631\u0627\u0633\u0631 \u062c\u0647\u0627\u0646 \u0627\u062a\u0641\u0627\u0642 \u0645\u06cc \u0627\u0641\u062a\u062f. \u0645\u0646 \u0627\u06cc\u0646 \u0634\u0627\u0646\u0633 \u0631\u0627 \u062f\u0627\u0634\u062a\u0645 \u06a9\u0647 \u062f\u0631 \u0645\u0633\u0627\u0628\u0642\u0647 Empire State Run Up \u062f\u0631 \u0646\u06cc\u0648\u06cc\u0648\u0631\u06a9\u060c \u0646\u0633\u062e\u0647 1402 \u0634\u0631\u06a9\u062a \u06a9\u0646\u0645. \u0645\u0633\u0627\u0628\u0642\u0647 \u062f\u0648 \u0628\u0631\u062c \u0627\u0645\u067e\u0627\u06cc\u0631 \u0627\u0633\u062a\u06cc\u062a (ESBRU) &#8211; \u0627\u0648\u0644\u06cc\u0646 \u0648 \u0645\u0634\u0647\u0648\u0631\u062a\u0631\u06cc\u0646 \u0645\u0633\u0627\u0628\u0642\u0647 \u0628\u0631\u062c \u062f\u0631 \u062c\u0647\u0627\u0646 &#8211; \u062f\u0648\u0646\u062f\u06af\u0627\u0646 \u0631\u0627 \u0627\u0632 \u062f\u0648\u0631 [&hellip;]<\/p>\n","protected":false},"author":6,"featured_media":17352,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1743],"tags":[1748,1925,1920,1931,5069,5068,1916,1779,1744,2361,2362,1822,1796,1803,2002,3180,1937,1765,1745],"class_list":["post-17349","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-python","tag-python-hosting","tag----django","tag-1920","tag-1931","tag-5069","tag-5068","tag-1916","tag-1779","tag-1744","tag-2361","tag-2362","tag-1822","tag-1796","tag-1803","tag-python","tag-3180","tag-1937","tag-1765","tag-1745"],"acf":[],"_links":{"self":[{"href":"https:\/\/rasanegaar.com\/blog\/wp-json\/wp\/v2\/posts\/17349","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rasanegaar.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rasanegaar.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rasanegaar.com\/blog\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/rasanegaar.com\/blog\/wp-json\/wp\/v2\/comments?post=17349"}],"version-history":[{"count":0,"href":"https:\/\/rasanegaar.com\/blog\/wp-json\/wp\/v2\/posts\/17349\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/rasanegaar.com\/blog\/wp-json\/wp\/v2\/media\/17352"}],"wp:attachment":[{"href":"https:\/\/rasanegaar.com\/blog\/wp-json\/wp\/v2\/media?parent=17349"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rasanegaar.com\/blog\/wp-json\/wp\/v2\/categories?post=17349"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rasanegaar.com\/blog\/wp-json\/wp\/v2\/tags?post=17349"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}