рд╣рд╛рдп рд╣рдорд░!
рд╕рд╛рдЗрдЯ рдХреЗ рдХрдИ рдирд┐рдпрдорд┐рдд рдкрд╛рдардХреЛрдВ рдФрд░ рд▓реЗрдЦрдХреЛрдВ рдиреЗ рд╢рд╛рдпрдж рдпрд╣рд╛рдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рд▓реЗрдЦреЛрдВ рдХреЗ рдЬреАрд╡рди рдЪрдХреНрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛ред рдФрд░ рдпрджреНрдпрдкрд┐ рд╕рд╣рдЬ рд░реВрдк рд╕реЗ рдпрд╣ рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рд╕реНрдкрд╖реНрдЯ рд╣реИ (рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд┐ рдкрд╣рд▓реЗ рдкреГрд╖реНрда рдкрд░ рд▓реЗрдЦ рдореЗрдВ рдЕрдзрд┐рдХрддрдо рджреГрд╢реНрдп рд╣реИрдВ), рд▓реЗрдХрд┐рди рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХрд┐рддрдирд╛?

рдЖрдВрдХрдбрд╝реЗ рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкрд╛рдпрдерди, рдкрдВрдбреЛрдВ, рдорд╛рдЯрдкреНрд▓реЛрдЯрд▓рд┐рдм рдФрд░ рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
рдЬреЛ рд▓реЛрдЧ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рд╡реЗ рдмрд┐рд▓реНрд▓реА рдХреЗ рдиреАрдЪреЗ рдХреГрдкрдпрд╛ред
рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдЯреНрд░рд┐рдХреНрд╕ рдкрд░ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ - рд╣рдо рдЬреЛ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рд▓реЗрдЦ рдореЗрдВ рдкреГрд╖реНрда рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд 4 рдореБрдЦреНрдп рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ - рдпрд╣ рд╡рд┐рдЪрд╛рд░реЛрдВ, рдкрд╕рдВрдж, рдмреБрдХрдорд╛рд░реНрдХ рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИред рд╣рдо рдЙрдирдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗред
рдЬреЛ рд▓реЛрдЧ рддреБрд░рдВрдд рдкрд░рд┐рдгрд╛рдо рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╡реЗ рддреАрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдм рдпрд╣ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реЛрдЧрд╛ред
рд╕рд╛рдорд╛рдиреНрдп рдпреЛрдЬрдирд╛: рд╣рдо рд╡реЗрдм рдкреЗрдЬ рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░реЗрдВрдЧреЗ, рдЗрд╕реЗ рд╕реАрдПрд╕рд╡реА рдХреЗ рд╕рд╛рде рд╕рд╣реЗрдЬреЗрдВ, рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рд╣рдореЗрдВ рдХрдИ рджрд┐рдиреЛрдВ рддрдХ рдХреНрдпрд╛ рдорд┐рд▓рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд▓реЗрдЦ рдХрд╛ рдкрд╛рда рд▓реЛрдб рдХрд░реЗрдВ (рдЕрдкрд╡рд╛рдж рдХреЛ рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛):
link = "https://habr.com/ru/post/000001/" f = urllib.urlopen(link) data_str = f.read()
рдЕрдм рд╣рдореЗрдВ data_str рд▓рд╛рдЗрди (HTML рдореЗрдВ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ) рд╕реЗ рдбреЗрдЯрд╛ рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд╕реНрд░реЛрдд рдХреЛрдб рдЦреЛрд▓реЗрдВ (рд╣рдЯрд╛рдП рдЧрдП рдЕрдкреНрд░рдХрд╛рд╢рд┐рдд рддрддреНрд╡):
<ul class="post-stats post-stats_post js-user_" id="infopanel_post_438514"> <li class="post-stats__item post-stats__item_voting-wjt"> <span class="voting-wjt__counter voting-wjt__counter_positive js-score" title=" 448: тЖС434 тЖУ14">+420</span> </li> <span class="btn_inner"><svg class="icon-svg_bookmark" width="10" height="16"><use xlink:href="https://habr.com/images/1550155671/common-svg-sprite.svg#book" /></svg><span class="bookmark__counter js-favs_count" title=" , ">320</span></span> <li class="post-stats__item post-stats__item_views"> <div class="post-stats__views" title=" "> <span class="post-stats__views-count">219k</span> </div> </li> <li class="post-stats__item post-stats__item_comments"> <a href="https://habr.com/ru/post/438514/#comments" class="post-stats__comments-link" <span class="post-stats__comments-count" title=" ">577</span> </a> </li> <li class="post-stats__item"> <span class="icon-svg_report"><svg class="icon-svg" width="32" height="32" viewBox="0 0 32 32" aria-hidden="true" version="1.1" role="img"><path d="M0 0h32v32h-32v-32zm14 6v12h4v-12h-4zm0 16v4h4v-4h-4z"/></svg> </span> </li> </ul>
рдпрд╣ рджреЗрдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЬрд┐рд╕ рдкрд╛рда рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рд╡рд╣ рдмреНрд▓реЙрдХ '<ul class = "рдХреЗ рдмрд╛рдж рдХрд╛ рд╣реИ, рдкреЛрд╕реНрдЯ-рд╕реНрдЯреИрдЯрд┐рд╕реНрдЯрд┐рдХреНрд╕ рдкреЛрд╕реНрдЯ-рд╕реНрдЯреИрдЯрд┐рд╕реНрдЯрд┐рдХреНрд╕_рдкреЛрд╕реНрдЯ js-user_>' рдФрд░ рдЖрд╡рд╢реНрдпрдХ рддрддреНрд╡ рдмреНрд▓реЙрдХ рдореЗрдВ рд╣реИрдВ рдЬрд┐рдирдХреЗ рдирд╛рдо рд╡реЛрдЯрд┐рдВрдЧ- wtt__counter, bookmark__counter, рдкреЛрд╕реНрдЯ-рд╕реНрдЯреИрдЯрд┐рд╕реНрдЯрд┐рдХреНрд╕-рдЗрдВрдЯрд░рд╡реНрдпреВ-рдХрд╛рдЙрдВрдЯ рдФрд░ рдкреЛрд╕реНрдЯ- рдкреЛрд╕реНрдЯ stats__comments рдЧрд┐рдирддреАред рдирд╛рдо рд╕реЗ, рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рд╕реНрдкрд╖реНрдЯ рд╣реИред
рд╣рдо рд╕реНрдЯреНрд░реЙрдЧ рдХреНрд▓рд╛рд╕ рдХреЛ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЗрд╕рдореЗрдВ рджреЛ рдЯреИрдЧреНрд╕ рдХреЗ рдмреАрдЪ рд╕реНрдерд┐рдд рд╕рдмрд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВрдЧреЗ:
class Str(str): def find_between(self, first, last): try: start = self.index(first) + len(first) end = self.index(last, start) return Str(self[start:end]) except ValueError: return Str("")
рдЖрдк рд╡рд┐рд░рд╛рд╕рдд рдХреЗ рдмрд┐рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЖрдкрдХреЛ рдЕрдзрд┐рдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рдЗрд╕рдХреЗ рд╕рд╛рде, рд╕рднреА рдбреЗрдЯрд╛ рдирд┐рд╖реНрдХрд░реНрд╖рдг 4 рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рдлрд┐рдЯ рд╣реЛрддреЗ рд╣реИрдВ:
votes = data_str.find_between('span class="voting-wjt__counter voting-wjt__counter_positive js-score"', 'span').find_between('>', '<') bookmarks = data_str.find_between('span class="bookmark__counter js-favs_count"', 'span').find_between('>', '<') views = data_str.find_between('span class="post-stats__views-count"', 'span').find_between('>', '<') comments = data_str.find_between('span class="post-stats__comments-count"', 'span').find_between('>', '<')
рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдм рдирд╣реАрдВ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдпрд╛ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ "12.1k" рдХреА рддрд░рд╣ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╕реАрдзреЗ рдЗрдВрдЯ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝реЗрдВ:
def to_int(self): s = self.lower().replace(",", ".") if s[-1:] == "k":
рдпрд╣ рдХреЗрд╡рд▓ рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИ, рдФрд░ рдЖрдк рдбреЗрдЯрд╛ рдХреЛ рд╕реАрдПрд╕рд╡реА рдореЗрдВ рд╕рд╣реЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ:
timestamp = strftime("%Y-%m-%dT%H:%M:%S.000", gmtime()) str_out = "{},votes:{},bookmarks:{},views:{},comments:{};".format(timestamp, votes.to_int(), bookmarks.to_int(), views.to_int(), comments.to_int())
рдЪреВрдВрдХрд┐ рд╣рдо рдХрдИ рд▓реЗрдЦреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рд╣рдо рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд▓рд┐рдВрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рд╣рдо рд▓реЗрдЦ рдЖрдИрдбреА рджреНрд╡рд╛рд░рд╛ рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рднреА рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВрдЧреЗ:
link = sys.argv[1]
рдФрд░ рдмрд╣реБрдд рдЖрдЦрд┐рд░реА рдХрджрдоред рд╣рдо рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдХреЛрдб рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВ, рд▓реВрдк рдореЗрдВ рд╣рдо рдбреЗрдЯрд╛ рдХреЛ рдкрд░рд╛рдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд▓реЙрдЧ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рд▓рд┐рдЦрддреЗ рд╣реИрдВред
delay_s = 5*60 while True:
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдбреЗрдЯрд╛ рд╣рд░ 5 рдорд┐рдирдЯ рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рддрд╛рдХрд┐ рд╕рд░реНрд╡рд░ рдкрд░ рд▓реЛрдб рди рдмрдирд╛рдпрд╛ рдЬрд╛рдПред рдореИрдВрдиреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдлрд╝рд╛рдЗрд▓ рдХреЛ habr_parse.py рдирд╛рдо рд╕реЗ рд╕рд╣реЗрдЬрд╛ рд╣реИ, рдЬрдм рдпрд╣ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмрдВрдж рд╣реЛрдиреЗ рддрдХ рдбреЗрдЯрд╛ рдмрдЪрд╛рдПрдЧрд╛ред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рджрд┐рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреА рдЬрд╛рддреА рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдХрдВрдкреНрдпреВрдЯрд░ рдХреЛ рдХрдИ рджрд┐рдиреЛрдВ рддрдХ рдЪрд╛рд▓реВ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдирд┐рдЪреНрдЫреБрдХ рд╣реИрдВ, рд╣рдо рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рд▓реЗрддреЗ рд╣реИрдВ - рдпрд╣ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╢рдХреНрддрд┐ рд╣реИ, рдФрд░ рдПрдХ рдкреАрд╕реА рдХреЗ рд╡рд┐рдкрд░реАрдд, рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рд╢реЛрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд▓рдЧрднрдЧ рдХреЛрдИ рдмрд┐рдЬрд▓реА рдирд╣реАрдВ рд▓реЗрддрд╛ рд╣реИред рд╣рдо SSH рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдиреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рддреЗ рд╣реИрдВ:
nohup python habr_parse.py https://habr.com/ru/post/0000001/ &
рдиреЙрд╣реВрдк рдХрдорд╛рдВрдб рдХрдВрд╕реЛрд▓ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдореЗрдВ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред
рдПрдХ рдмреЛрдирд╕ рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдк "nuhup python -m SimpleHTTPServer 8000 &" рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░рдХреЗ рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдореЗрдВ рдПрдХ http рд╕рд░реНрд╡рд░ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЖрдкрдХреЛ рдХрд┐рд╕реА рднреА рд╕рдордп рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд╕реАрдзреЗ рдкрд░рд┐рдгрд╛рдо рджреЗрдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛, рдлреЙрд░реНрдо рдХрд╛ рдПрдХ рд▓рд┐рдВрдХ рдЦреЛрд▓рддреЗ рд╣реБрдП
http://192.168.1.101:8000 (рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкрддрд╛ рдЕрд▓рдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред
рдЕрдм рдЖрдк рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдХреЛ рдЪрд╛рд▓реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХреБрдЫ рджрд┐рдиреЛрдВ рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рд▓реМрдЯ рд╕рдХрддреЗ рд╣реИрдВред
рдбреЗрдЯрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг
рдпрджрд┐ рд╕рдм рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдЖрдЙрдЯрдкреБрдЯ рдЗрд╕ рд▓реЙрдЧ рдХреА рддрд░рд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
2019-02-12T22:26:28.000,votes:12,bookmarks:0,views:448,comments:1; 2019-02-12T22:31:29.000,votes:12,bookmarks:0,views:467,comments:1; 2019-02-12T22:36:30.000,votes:14,bookmarks:1,views:482,comments:1; 2019-02-12T22:41:30.000,votes:14,bookmarks:2,views:497,comments:1; 2019-02-12T22:46:31.000,votes:14,bookmarks:2,views:513,comments:1; 2019-02-12T22:51:32.000,votes:14,bookmarks:2,views:527,comments:1; 2019-02-12T22:56:32.000,votes:14,bookmarks:2,views:543,comments:1; 2019-02-12T23:01:33.000,votes:14,bookmarks:2,views:557,comments:2; 2019-02-12T23:06:34.000,votes:14,bookmarks:2,views:567,comments:3; 2019-02-12T23:11:35.000,votes:13,bookmarks:2,views:590,comments:4; ... 2019-02-13T02:47:03.000,votes:15,bookmarks:3,views:1100,comments:20; 2019-02-13T02:52:04.000,votes:15,bookmarks:3,views:1200,comments:20;
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, csv рдХреЛ рдПрдХ рдкрд╛рдВрдбрд╛ рдбреЗрдЯрд╛рдлрд╝реНрд░реЗрдо рдореЗрдВ рд▓реЛрдб рдХрд░реЗрдВ:
import pandas as pd import numpy as np import datetime log_path = "habr_data.txt" df = pd.read_csv(log_path, header=None, names=['datetime', 'votes', 'bookmarks', 'views', 'comments'])
рд░реВрдкрд╛рдВрддрд░рдг рдФрд░ рдФрд╕рдд рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рдВрд╕ рдЬреЛрдбрд╝реЗрдВ, рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдирд┐рдХрд╛рд▓реЗрдВ:
def to_float(s):
рдПрд╡рд░реЗрдЬрд┐рдВрдЧ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕рд╛рдЗрдЯ рдкрд░ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ 100 рдХреА рд╡реГрджреНрдзрд┐ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддреА рд╣реИ, рдЬреЛ "рдлрд╛рдбрд╝рд╛" рдЕрдиреБрд╕реВрдЪреА рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдФрд╕рдд рдХреЗ рд╕рд╛рде рдпрд╣ рдмреЗрд╣рддрд░ рджрд┐рдЦрддрд╛ рд╣реИред рдореЙрд╕реНрдХреЛ рд╕рдордп рдХреНрд╖реЗрддреНрд░ рдХреЛ рдХреЛрдб рдореЗрдВ рднреА рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ (рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдкрд░ рд╕рдордп рдЬреАрдПрдордЯреА рдирд┐рдХрд▓рд╛)ред
рдЕрдВрдд рдореЗрдВ, рдЖрдк рдЧреНрд░рд╛рдлрд╝ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реБрдЖред
import matplotlib.pyplot as plt
рдкрд░рд┐рдгрд╛рдо
рдкреНрд░рддреНрдпреЗрдХ рдЧреНрд░рд╛рдл рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдПрдХ рдЦрд╛рд▓реА рдЬрдЧрд╣ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕реЗ рдмрд╕ рд╕рдордЭрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдЬрдм рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓реЙрдиреНрдЪ рдХреА рдЧрдИ рдереА, рддреЛ рд▓реЗрдЦ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдП рдЧрдП рдереЗ, рдЗрд╕рд▓рд┐рдП рдбреЗрдЯрд╛ рдХреЛ рдЦрд░реЛрдВрдЪ рд╕реЗ рдПрдХрддреНрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред "рд╢реВрдиреНрдп" рдмрд┐рдВрджреБ рдХреЛ рд▓реЗрдЦ рдХреЗ рдкреНрд░рдХрд╛рд╢рди рд╕рдордп рдХреЗ рд╡рд┐рд╡рд░рдг рд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ред
рд╕рднреА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдЪрд╛рд░реНрдЯ рдореИрдЯрдкреНрд▓реЛрдЯрд▓рд┐рдм рдФрд░ рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВред
рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдореИрдВрдиреЗ рдЬрд╛рдВрдЪ рдХрд┐рдП рдЧрдП рд▓реЗрдЦреЛрдВ рдХреЛ 3 рд╕рдореВрд╣реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рд╣реИред рд╡рд┐рднрд╛рдЬрди рд╕рд╢рд░реНрдд рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдореЗрдВ рдЕрднреА рднреА рдХреБрдЫ рд╕рдордЭ рд╣реИред
рдЧрд░реНрдо рд▓реЗрдЦ
рдпрд╣ рд▓реЗрдЦ рдХреБрдЫ рд▓реЛрдХрдкреНрд░рд┐рдп рдФрд░ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╡рд┐рд╖рдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ, рдЬреИрд╕реЗ рд╢реАрд░реНрд╖рдХ рдХреЗ рд╕рд╛рде "рдХреИрд╕реЗ рдПрдордЯреАрдПрд╕ рдзрди рдореЗрдВ рдХрдЯреМрддреА рдХрд░рддрд╛ рд╣реИ" рдпрд╛ "рд░реЛрд╕рдХреЛрдореНрдирд╛рдбрдЬрд╝реЛрд░ рдиреЗ
рдкреЛрд░реНрди рдЧрд┐рдЯ рд╣рдм рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд┐рдпрд╛"ред
рдЗрд╕ рддрд░рд╣ рдХреЗ рд▓реЗрдЦреЛрдВ рдореЗрдВ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рд╣реЛрддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди "рдкреНрд░рдЪрд╛рд░" рдЕрдзрд┐рдХрддрдо рдХрдИ рджрд┐рдиреЛрдВ рддрдХ рд░рд╣рддрд╛ рд╣реИред рдЖрдк рджрд┐рди рдФрд░ рд░рд╛рдд рдХреЗ рджреМрд░рд╛рди рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдореЗрдВ рдорд╛рдореВрд▓реА рдЕрдВрддрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ (рд▓реЗрдХрд┐рди рдпрд╣ рдЙрддрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ рдЬрд┐рддрдирд╛ рдХрд┐ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИ - рдЬрд╛рд╣рд┐рд░ рд╣реИ, рд╣реИрдмрд░ рд▓рдЧрднрдЧ рд╕рднреА рд╕рдордп рдХреНрд╖реЗрддреНрд░реЛрдВ рд╕реЗ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ)ред


"рдкрд╕рдВрдж" рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдХрд╛рдлреА рд╡реГрджреНрдзрд┐ рд╣реЛ рд░рд╣реА рд╣реИ, рдЬрдмрдХрд┐ рдмреБрдХрдорд╛рд░реНрдХ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдХрд╛рдлреА рдзреАрдореА рд╡реГрджреНрдзрд┐ рд╣реЛ рд░рд╣реА рд╣реИред рдпрд╣ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рд▓реЗрдЦ рдХреЛ рдкрд╕рдВрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд╛рда рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдРрд╕реА рд╣реИ рдХрд┐ рдЗрд╕реЗ рдмреБрдХрдорд╛рд░реНрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рд╡рд┐рдЪрд╛рд░реЛрдВ рдФрд░ рдкрд╕рдВрджреЛрдВ рдХрд╛ рдЕрдиреБрдкрд╛рдд рд▓рдЧрднрдЧ рд╕рдорд╛рди рд╣реИ рдФрд░ рд▓рдЧрднрдЧ 400: 1 рд╣реИ:

"рддрдХрдиреАрдХреА" рд▓реЗрдЦ
рдпрд╣ рдЕрдзрд┐рдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд▓реЗрдЦ рд╣реИ, рдЬреИрд╕реЗ "рдиреЛрдб рдЬреЗрдПрд╕ рдХреЗ рд▓рд┐рдП рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛"ред рдЗрд╕ рддрд░рд╣ рдХреЗ рд▓реЗрдЦ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, "рд╣реЙрдЯ" рдПрдХ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдИ рдмрд╛рд░ рдХрдо рд╡рд┐рдЪрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рднреА рдХрд╛рдлреА рдХрдо рд╣реИ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреЗрд╡рд▓ 4 рдереЗ)ред


рд▓реЗрдХрд┐рди рдЕрдЧрд▓рд╛ рдмрд┐рдВрджреБ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ: рдРрд╕реЗ рд▓реЗрдЦреЛрдВ рдХреЗ рд▓рд┐рдП "рдкрд╕рдВрдж" рдХреА рд╕рдВрдЦреНрдпрд╛ "рдирд┐рд╢рд╛рди" рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрд╛рдлреА рдзреАрдореА рдЧрддрд┐ рд╕реЗ рдмрдврд╝ рд░рд╣реА рд╣реИред рдпрд╣рд╛рдВ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдпрд╣ рджреВрд╕рд░рд╛ рддрд░реАрдХрд╛ рд╣реИ - рдХрдИ рд▓реЗрдЦ рднрд╡рд┐рд╖реНрдп рдХреЗ рд▓рд┐рдП рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкрд╛рдардХ рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рднреА "рдкрд╕рдВрдж" рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИред

рд╡реИрд╕реЗ, рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдореИрдВ рд╕рд╛рдЗрдЯ рдкреНрд░рд╢рд╛рд╕рдХреЛрдВ рдХрд╛ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ - рдЬрдм рд▓реЗрдЦ рдХреА рд░реЗрдЯрд┐рдВрдЧ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдкрд╕рдВрдж рдХреЗ рд╕рд╛рде рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдмреБрдХрдорд╛рд░реНрдХ рдЧрд┐рдирдирд╛ рдЪрд╛рд╣рд┐рдП (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, OR рджреНрд╡рд╛рд░рд╛ рд╕реЗрдЯ рдХрд╛ рд╕рдВрдпреЛрдЬрди)ред рдЕрдиреНрдпрдерд╛, рдпрд╣ рд░реЗрдЯрд┐рдВрдЧ рдореЗрдВ рдПрдХ рдкреВрд░реНрд╡рд╛рдЧреНрд░рд╣ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдм рдПрдХ рдкреНрд░рд╕рд┐рджреНрдз рд▓реЗрдЦ рдореЗрдВ рдХрдИ рдмреБрдХрдорд╛рд░реНрдХ рд╣реЛрддреЗ рд╣реИрдВ (рдЕрд░реНрдерд╛рдд, рдкрд╛рдардХреЛрдВ рдиреЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдкрд╕рдВрдж рдХрд┐рдпрд╛ рд╣реИ), рд▓реЗрдХрд┐рди рдпреЗ рд▓реЛрдЧ "рдЬреИрд╕реЗ" рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреВрд▓ рдЧрдП рдпрд╛ рдмрд╣реБрдд рдЖрд▓рд╕реА рдереЗред
рдФрд░ рдЕрдВрдд рдореЗрдВ, рд╡рд┐рдЪрд╛рд░реЛрдВ рдФрд░ рдкрд╕рдВрдж рдХрд╛ рдЕрдиреБрдкрд╛рдд: рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рдЕрд╡рддрд╛рд░ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрд╛рдлреА рдЕрдзрд┐рдХ рд╣реИ рдФрд░ рд▓рдЧрднрдЧ 150: 1 рд╣реИ, рдЕрд░реНрдерд╛рддреНред рд╕рд╛рдордЧреНрд░реА рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдХреЛ рднреА рдкрд░реЛрдХреНрд╖ рд░реВрдк рд╕реЗ рдЙрдЪреНрдЪ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

"рд╕рдВрджрд┐рдЧреНрдз" рд▓реЗрдЦ (рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдЯреАрдХ рдирд╣реАрдВ рд╣реИ)
рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдХреА рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП, 5 рдорд┐рдирдЯ рдХреЗ рдЕрдВрддрд░рд╛рд▓ рдореЗрдВ "рдкрд╕рдВрдж" рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдПрдХ рддрд┐рд╣рд╛рдИ рдХреА рд╡реГрджреНрдзрд┐ рд╣реБрдИ (рддреБрд░рдВрдд 10 рд╕реЗ рд╕рднреА 30 рджрд┐рдиреЛрдВ рдХреЗ рдХреБрд▓ рд╕реНрдХреЛрд░ рдХреЗ рд╕рд╛рде)ред

рдХрд┐рд╕реА рдХреЛ рдзреЛрдЦрд╛ рджреЗрдиреЗ рдХрд╛ рд╕рдВрджреЗрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд┐рджреНрдзрд╛рдВрдд рдореЗрдВ "рдХрддрд╛рд░ рд╕рд┐рджреНрдзрд╛рдВрдд" рдЗрд╕ рддрд░рд╣ рдХреЗ рдЙрдЫрд╛рд▓ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд▓реЗрдЦрдХ рдиреЗ рдЕрдкрдиреЗ рд╕рднреА 10 рджреЛрд╕реНрддреЛрдВ рдХреЛ рд▓рд┐рдВрдХ рднреЗрдЬрд╛ рд╣реЛ, рдЬреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдирд┐рдпрдореЛрдВ рджреНрд╡рд╛рд░рд╛ рдирд┐рд╖рд┐рджреНрдз рдирд╣реАрдВ рд╣реИред
рдирд┐рд╖реНрдХрд░реНрд╖
рдореБрдЦреНрдп рдирд┐рд╖реНрдХрд░реНрд╖ рдпрд╣ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рдХреНрд╖рдп рдФрд░ рдорд╛рдпрд╛ рд╣реИред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рд╕рд╛рдордЧреНрд░реА, рд╣рдЬрд╛рд░реЛрдВ рджреГрд╢реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛, рдХреЗрд╡рд▓ 3-4 рджрд┐рдиреЛрдВ рдореЗрдВ "рдЕрддреАрдд рдореЗрдВ" рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рддрд░рд╣, рдЕрдлрд╕реЛрд╕, рдЖрдзреБрдирд┐рдХ рдЗрдВрдЯрд░рдиреЗрдЯ рдХреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ, рдФрд░ рд╢рд╛рдпрдж рдкреВрд░реЗ рдЖрдзреБрдирд┐рдХ рдореАрдбрд┐рдпрд╛ рдЙрджреНрдпреЛрдЧ рдХреЗ рд░реВрдк рдореЗрдВред рдФрд░ рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рджрд┐рдЦрд╛рдП рдЧрдП рдЖрдВрдХрдбрд╝реЗ рди рдХреЗрд╡рд▓ рд╣рдмрд░ рдХреЗ рд▓рд┐рдП, рдмрд▓реНрдХрд┐ рдХрд┐рд╕реА рднреА рд╕рдорд╛рди рдЗрдВрдЯрд░рдиреЗрдЯ рд╕рдВрд╕рд╛рдзрди рдХреЗ рд▓рд┐рдП рднреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИрдВред
рдЕрдиреНрдпрдерд╛, рдпрд╣ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдкреНрд░рдХреГрддрд┐ рдореЗрдВ "рд╢реБрдХреНрд░рд╡рд╛рд░" рд╣реЛрдиреЗ рдХреА рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдПрдХ рдЧрдВрднреАрд░ рдЕрдзреНрдпрдпрди рд╣реЛрдиреЗ рдХрд╛ рджрд┐рдЦрд╛рд╡рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рдпрд╣ рднреА рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдХреЛ рдкрдВрдбреЛрдВ рдФрд░ рдорд╛рдЯрдкреНрд▓реЛрдЯрд▓рд┐рдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдХреБрдЫ рдирдпрд╛ рдорд┐рд▓рд╛ред
рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред