рд╣реЗрд░ Habr.
╨Т
рдХреЗ рднрдпреЛ рднрдиреЗрд░ рдЪрд╛рд╕реЛ рд░рд╛рдЦреНрдиреЗрд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐, рдирд┐рд░рдиреНрддрд░рддрд╛ рдХрдЯ рдЕрдиреНрддрд░реНрдЧрдд рдЫред
рдо рддрдкрд╛рдИрдВрд▓рд╛рдИ рдПрдХ рдкрдЯрдХ рдлреЗрд░рд┐ рд╕рдореНрдЭрд╛рдЙрди рдЪрд╛рд╣рдиреНрдЫреБ рдХрд┐ рддрдереНрдпрд╛рдЩреНрдХ рд░ рдореВрд▓реНрдпрд╛рдЩреНрдХрди рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╣реЛрдЗрди, рдорд╕рдБрдЧ рдХреБрдиреИ рднрд┐рддреНрд░реА рдЬрд╛рдирдХрд╛рд░реА рдЫреИрдиред рдпреЛ рдкрдирд┐ рдЧреНрдпрд╛рд░реЗрдиреНрдЯреА рдЫреИрди рдХрд┐ рдореИрд▓реЗ рдХрддреИ рдЧрд▓реНрддреА рдЧрд░реЗрди рд╡рд╛ рдХреЗрд╣рд┐ рдЫреБрдЯреЗрдХреЛ рдЫреИрдиред рддрд░ рдЕрдЭреИ, рдорд▓рд╛рдИ рд▓рд╛рдЧреНрдЫ рдХрд┐ рдпреЛ рд░реЛрдЪрдХ рднрдпреЛред рд╣рд╛рдореА рдкрд╣рд┐рд▓реЗ рдХреЛрдбрдмрд╛рдЯ рд╕реБрд░реБ рдЧрд░реНрдиреЗрдЫреМрдВ; рдпрд╕рдорд╛ рд░реБрдЪрд┐ рдирднрдПрдХрд╛рд╣рд░реВрд▓реЗ рдкрд╣рд┐рд▓реЛ рдЦрдгреНрдбрд╣рд░реВ рдЫреЛрдбреНрди рд╕рдХреНрдЫрдиреНред
рддрдереНрдпрд╛рдВрдХ рд╕рдВрдХрд▓рди
рдкрд╛рд░реНрд╕рд░рдХреЛ рдкрд╣рд┐рд▓реЛ рд╕рдВрд╕реНрдХрд░рдгрдорд╛, рдХреЗрд╡рд▓ рд╣реЗрд░рд╛рдЗ, рдЯрд┐рдкреНрдкрдгреА рд░ рд▓реЗрдЦ рдореВрд▓реНрдпрд╛рдЩреНрдХрдирд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛рд▓рд╛рдИ рдзреНрдпрд╛рдирдорд╛ рд░рд╛рдЦрд┐рдПрдХреЛ рдерд┐рдпреЛред рдпреЛ рдкрд╣рд┐рд▓реЗ рдиреИ рд░рд╛рдореНрд░реЛ рдЫ, рддрд░ рдпрд╕рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдердк рдЬрдЯрд┐рд▓ рдкреНрд░рд╢реНрдирд╣рд░реВ рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдБрджреИрдиред рдпреЛ рд╕рд╛рдЗрдЯрдХреЛ рд╡рд┐рд╖рдпрдЧрдд рдЦрдгреНрдбрд╣рд░реВ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЧрд░реНрдиреЗ рд╕рдордп рд╣реЛ; рдпрд╕рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдзреЗрд░реИ рд░реЛрдЪрдХ рдЕрдиреБрд╕рдиреНрдзрд╛рди рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреЗрдЫ, рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рд╣реЗрд░реНрдиреБрд╣реЛрд╕реН "C++" рдЦрдгреНрдбрдХреЛ рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рдзреЗрд░реИ рд╡рд░реНрд╖рд╣рд░реВрдорд╛ рдХрд╕рд░реА рдкрд░рд┐рд╡рд░реНрддрди рднрдПрдХреЛ рдЫред
рд▓реЗрдЦ рдкрд╛рд░реНрд╕рд░ рд╕реБрдзрд╛рд░ рдЧрд░рд┐рдПрдХреЛ рдЫ, рдЕрдм рдпрд╕рд▓реЗ рд▓реЗрдЦ рд╕рдореНрдмрдиреНрдзрд┐рдд рд╣рдмрд╣рд░реВ, рд╕рд╛рдереИ рд▓реЗрдЦрдХрдХреЛ рдЙрдкрдирд╛рдо рд░ рдЙрдирдХреЛ рдореВрд▓реНрдпрд╛рдЩреНрдХрди рдлрд┐рд░реНрддрд╛ рдЧрд░реНрджрдЫ (рдпрд╣рд╛рдБ рдкрдирд┐ рдзреЗрд░реИ рд░реЛрдЪрдХ рдЪреАрдЬрд╣рд░реВ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ, рддрд░ рддреНрдпреЛ рдкрдЫрд┐ рдЖрдЙрдиреЗрдЫ)ред рдбрд╛рдЯрд╛ csv рдлрд╛рдЗрд▓рдорд╛ рдмрдЪрдд рдЧрд░рд┐рдПрдХреЛ рдЫ рдЬреБрди рдпреЛ рдЬрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫ:
2018-12-18T12:43Z,https://habr.com/ru/post/433550/,"╨Ь╨╡╤Б╤Б╨╡╨╜╨┤╨╢╨╡╤А Slack тАФ ╨┐╤А╨╕╤З╨╕╨╜╤Л ╨▓╤Л╨▒╨╛╤А╨░, ╨║╨╛╤Б╤П╨║╨╕ ╨┐╤А╨╕ ╨▓╨╜╨╡╨┤╤А╨╡╨╜╨╕╨╕ ╨╕ ╨╛╤Б╨╛╨▒╨╡╨╜╨╜╨╛╤Б╤В╨╕ ╤Б╨╡╤А╨▓╨╕╤Б╨░, ╨╛╨▒╨╗╨╡╨│╤З╨░╤О╤Й╨╕╨╡ ╨╢╨╕╨╖╨╜╤М",votes:7,votesplus:8,votesmin:1,bookmarks:32,
views:8300,comments:10,user:ReDisque,karma:5,subscribers:2,hubs:productpm+soft
...
рд╣рд╛рдореАрд▓реЗ рд╕рд╛рдЗрдЯрдХреЛ рдореБрдЦреНрдп рд╡рд┐рд╖рдпрдЧрдд рдХреЗрдиреНрджреНрд░рд╣рд░реВрдХреЛ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреЗрдЫреМрдВред
def get_as_str(link: str) -> Str:
try:
r = requests.get(link)
return Str(r.text)
except Exception as e:
return Str("")
def get_hubs():
hubs = []
for p in range(1, 12):
page_html = get_as_str("https://habr.com/ru/hubs/page%d/" % p)
# page_html = get_as_str("https://habr.com/ru/hubs/geektimes/page%d/" % p) # Geektimes
# page_html = get_as_str("https://habr.com/ru/hubs/develop/page%d/" % p) # Develop
# page_html = get_as_str("https://habr.com/ru/hubs/admin/page%d" % p) # Admin
for hub in page_html.split("media-obj media-obj_hub"):
info = Str(hub).find_between('"https://habr.com/ru/hub', 'list-snippet__tags')
if "*</span>" in info:
hub_name = info.find_between('/', '/"')
if len(hub_name) > 0 and len(hub_name) < 32:
hubs.append(hub_name)
print(hubs)
Find_between рдкреНрд░рдХрд╛рд░реНрдп рд░ Str рд╡рд░реНрдЧрд▓реЗ рджреБрдИ рдЯреНрдпрд╛рдЧрд╣рд░реВ рдмреАрдЪрдХреЛ рд╕реНрдЯреНрд░рд┐рдЩ рдЪрдпрди рдЧрд░реНрдпреЛ, рдореИрд▓реЗ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрдВ
get_hubs рдкреНрд░рдХрд╛рд░реНрдпрдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдПрдХрджрдо рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рд╕реВрдЪреА рд╣реЛ, рдЬреБрди рд╣рд╛рдореАрд▓реЗ рд╢рдмреНрджрдХреЛрд╢рдХреЛ рд░реВрдкрдорд╛ рдмрдЪрдд рдЧрд░реНрдЫреМрдВред рдо рд╡рд┐рд╢реЗрд╖ рд░реВрдкрдорд╛ рд╕реВрдЪреАрд▓рд╛рдИ рдкреВрд░реНрдг рд░реВрдкрдорд╛ рдкреНрд░рд╕реНрддреБрдд рдЧрд░реНрджреИрдЫреБ рддрд╛рдХрд┐ рддрдкрд╛рдИрдВ рдпрд╕рдХреЛ рдорд╛рддреНрд░рд╛ рдЕрдиреБрдорд╛рди рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред
hubs_profile = {'infosecurity', 'programming', 'webdev', 'python', 'sys_admin', 'it-infrastructure', 'devops', 'javascript', 'open_source', 'network_technologies', 'gamedev', 'cpp', 'machine_learning', 'pm', 'hr_management', 'linux', 'analysis_design', 'ui', 'net', 'hi', 'maths', 'mobile_dev', 'productpm', 'win_dev', 'it_testing', 'dev_management', 'algorithms', 'go', 'php', 'csharp', 'nix', 'data_visualization', 'web_testing', 's_admin', 'crazydev', 'data_mining', 'bigdata', 'c', 'java', 'usability', 'instant_messaging', 'gtd', 'system_programming', 'ios_dev', 'oop', 'nginx', 'kubernetes', 'sql', '3d_graphics', 'css', 'geo', 'image_processing', 'controllers', 'game_design', 'html5', 'community_management', 'electronics', 'android_dev', 'crypto', 'netdev', 'cisconetworks', 'db_admins', 'funcprog', 'wireless', 'dwh', 'linux_dev', 'assembler', 'reactjs', 'sales', 'microservices', 'search_technologies', 'compilers', 'virtualization', 'client_side_optimization', 'distributed_systems', 'api', 'media_management', 'complete_code', 'typescript', 'postgresql', 'rust', 'agile', 'refactoring', 'parallel_programming', 'mssql', 'game_promotion', 'robo_dev', 'reverse-engineering', 'web_analytics', 'unity', 'symfony', 'build_automation', 'swift', 'raspberrypi', 'web_design', 'kotlin', 'debug', 'pay_system', 'apps_design', 'git', 'shells', 'laravel', 'mobile_testing', 'openstreetmap', 'lua', 'vs', 'yii', 'sport_programming', 'service_desk', 'itstandarts', 'nodejs', 'data_warehouse', 'ctf', 'erp', 'video', 'mobileanalytics', 'ipv6', 'virus', 'crm', 'backup', 'mesh_networking', 'cad_cam', 'patents', 'cloud_computing', 'growthhacking', 'iot_dev', 'server_side_optimization', 'latex', 'natural_language_processing', 'scala', 'unreal_engine', 'mongodb', 'delphi', 'industrial_control_system', 'r', 'fpga', 'oracle', 'arduino', 'magento', 'ruby', 'nosql', 'flutter', 'xml', 'apache', 'sveltejs', 'devmail', 'ecommerce_development', 'opendata', 'Hadoop', 'yandex_api', 'game_monetization', 'ror', 'graph_design', 'scada', 'mobile_monetization', 'sqlite', 'accessibility', 'saas', 'helpdesk', 'matlab', 'julia', 'aws', 'data_recovery', 'erlang', 'angular', 'osx_dev', 'dns', 'dart', 'vector_graphics', 'asp', 'domains', 'cvs', 'asterisk', 'iis', 'it_monetization', 'localization', 'objectivec', 'IPFS', 'jquery', 'lisp', 'arvrdev', 'powershell', 'd', 'conversion', 'animation', 'webgl', 'wordpress', 'elm', 'qt_software', 'google_api', 'groovy_grails', 'Sailfish_dev', 'Atlassian', 'desktop_environment', 'game_testing', 'mysql', 'ecm', 'cms', 'Xamarin', 'haskell', 'prototyping', 'sw', 'django', 'gradle', 'billing', 'tdd', 'openshift', 'canvas', 'map_api', 'vuejs', 'data_compression', 'tizen_dev', 'iptv', 'mono', 'labview', 'perl', 'AJAX', 'ms_access', 'gpgpu', 'infolust', 'microformats', 'facebook_api', 'vba', 'twitter_api', 'twisted', 'phalcon', 'joomla', 'action_script', 'flex', 'gtk', 'meteorjs', 'iconoskaz', 'cobol', 'cocoa', 'fortran', 'uml', 'codeigniter', 'prolog', 'mercurial', 'drupal', 'wp_dev', 'smallbasic', 'webassembly', 'cubrid', 'fido', 'bada_dev', 'cgi', 'extjs', 'zend_framework', 'typography', 'UEFI', 'geo_systems', 'vim', 'creative_commons', 'modx', 'derbyjs', 'xcode', 'greasemonkey', 'i2p', 'flash_platform', 'coffeescript', 'fsharp', 'clojure', 'puppet', 'forth', 'processing_lang', 'firebird', 'javame_dev', 'cakephp', 'google_cloud_vision_api', 'kohanaphp', 'elixirphoenix', 'eclipse', 'xslt', 'smalltalk', 'googlecloud', 'gae', 'mootools', 'emacs', 'flask', 'gwt', 'web_monetization', 'circuit-design', 'office365dev', 'haxe', 'doctrine', 'typo3', 'regex', 'solidity', 'brainfuck', 'sphinx', 'san', 'vk_api', 'ecommerce'}
рддреБрд▓рдирд╛рдХреЛ рд▓рд╛рдЧрд┐, geektimes рдЦрдгреНрдбрд╣рд░реВ рдЕрдзрд┐рдХ рдорд╛рдореВрд▓реА рджреЗрдЦрд┐рдиреНрдЫрдиреН:
hubs_gt = {'popular_science', 'history', 'soft', 'lifehacks', 'health', 'finance', 'artificial_intelligence', 'itcompanies', 'DIY', 'energy', 'transport', 'gadgets', 'social_networks', 'space', 'futurenow', 'it_bigraphy', 'antikvariat', 'games', 'hardware', 'learning_languages', 'urban', 'brain', 'internet_of_things', 'easyelectronics', 'cellular', 'physics', 'cryptocurrency', 'interviews', 'biotech', 'network_hardware', 'autogadgets', 'lasers', 'sound', 'home_automation', 'smartphones', 'statistics', 'robot', 'cpu', 'video_tech', 'Ecology', 'presentation', 'desktops', 'wearable_electronics', 'quantum', 'notebooks', 'cyberpunk', 'Peripheral', 'demoscene', 'copyright', 'astronomy', 'arvr', 'medgadgets', '3d-printers', 'Chemistry', 'storages', 'sci-fi', 'logic_games', 'office', 'tablets', 'displays', 'video_conferencing', 'videocards', 'photo', 'multicopters', 'supercomputers', 'telemedicine', 'cybersport', 'nano', 'crowdsourcing', 'infographics'}
рдмрд╛рдБрдХреА рд╣рдмрд╣рд░реВ рддреНрдпрд╕реИ рдЧрд░реА рд╕рдВрд░рдХреНрд╖рд┐рдд рдЧрд░рд┐рдпреЛред рдЕрдм рдПрдЙрдЯрд╛ рдкреНрд░рдХрд╛рд░реНрдп рд▓реЗрдЦреНрди рд╕рдЬрд┐рд▓реЛ рдЫ рдЬрд╕рд▓реЗ рдкрд░рд┐рдгрд╛рдо рдлрд░реНрдХрд╛рдЙрдБрдЫ рдХрд┐ рд▓реЗрдЦ geektimes рд╡рд╛ рдкреНрд░реЛрдлрд╛рдЗрд▓ рд╣рдмрдХреЛ рд╣реЛред
def is_geektimes(hubs: List) -> bool:
return len(set(hubs) & hubs_gt) > 0
def is_geektimes_only(hubs: List) -> bool:
return is_geektimes(hubs) is True and is_profile(hubs) is False
def is_profile(hubs: List) -> bool:
return len(set(hubs) & hubs_profile) > 0
рдЕрдиреНрдп рдЦрдгреНрдбрд╣рд░реВ ("рд╡рд┐рдХрд╛рд╕", "рдкреНрд░рд╢рд╛рд╕рди" рдЗрддреНрдпрд╛рджрд┐) рдХреЛ рд▓рд╛рдЧрд┐ рд╕рдорд╛рди рдкреНрд░рдХрд╛рд░реНрдпрд╣рд░реВ рдмрдирд╛рдЗрдпреЛред
рдкреНрд░рд╢реЛрдзрди рдЧрд░реНрджреИ
рдпреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╕реБрд░реБ рдЧрд░реНрдиреЗ рд╕рдордп рд╣реЛред рд╣рд╛рдореА рдбреЗрдЯрд╛рд╕реЗрдЯ рд▓реЛрдб рдЧрд░реНрдЫреМрдВ рд░ рд╣рдм рдбреЗрдЯрд╛ рдкреНрд░рд╢реЛрдзрди рдЧрд░реНрдЫреМрдВред
def to_list(s: str) -> List[str]:
# "user:popular_science+astronomy" => [popular_science, astronomy]
return s.split(':')[1].split('+')
def to_date(dt: datetime) -> datetime.date:
return dt.date()
df = pd.read_csv("habr_2019.csv", sep=',', encoding='utf-8', error_bad_lines=True, quotechar='"', comment='#')
dates = pd.to_datetime(df['datetime'], format='%Y-%m-%dT%H:%MZ')
dates += datetime.timedelta(hours=3)
df['date'] = dates.map(to_date, na_action=None)
hubs = df["hubs"].map(to_list, na_action=None)
df['hubs'] = hubs
df['is_profile'] = hubs.map(is_profile, na_action=None)
df['is_geektimes'] = hubs.map(is_geektimes, na_action=None)
df['is_geektimes_only'] = hubs.map(is_geektimes_only, na_action=None)
df['is_admin'] = hubs.map(is_admin, na_action=None)
df['is_develop'] = hubs.map(is_develop, na_action=None)
рдЕрдм рд╣рд╛рдореА рдбреЗрдЯрд╛рд▓рд╛рдИ рджрд┐рдирдорд╛ рд╕рдореВрд╣рдмрджреНрдз рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ рд░ рд╡рд┐рднрд┐рдиреНрди рд╣рдмрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд░рдХрд╛рд╢рдирд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ рджреЗрдЦрд╛рдЙрди рд╕рдХреНрдЫреМрдВред
g = df.groupby(['date'])
days_count = g.size().reset_index(name='counts')
year_days = days_count['date'].values
grouped = g.sum().reset_index()
profile_per_day_avg = grouped['is_profile'].rolling(window=20, min_periods=1).mean()
geektimes_per_day_avg = grouped['is_geektimes'].rolling(window=20, min_periods=1).mean()
geektimesonly_per_day_avg = grouped['is_geektimes_only'].rolling(window=20, min_periods=1).mean()
admin_per_day_avg = grouped['is_admin'].rolling(window=20, min_periods=1).mean()
develop_per_day_avg = grouped['is_develop'].rolling(window=20, min_periods=1).mean()
рд╣рд╛рдореА Matplotlib рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рд▓реЗрдЦрд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ рджреЗрдЦрд╛рдЙрдБрдЫреМрдВ:
рдореИрд▓реЗ рдЪрд╛рд░реНрдЯрдорд╛ рд▓реЗрдЦрд╣рд░реВ "geektimes" рд░ "geektimes рдорд╛рддреНрд░" рд╡рд┐рднрд╛рдЬрд┐рдд рдЧрд░реЗрдВ, рдХрд┐рдирднрдиреЗ рдПрдЙрдЯрд╛ рд▓реЗрдЦ рдПрдХреИ рд╕рдордпрдорд╛ рджреБрд╡реИ рдЦрдгреНрдбрд╣рд░реВрд╕рдБрдЧ рд╕рдореНрдмрдиреНрдзрд┐рдд рд╣реБрди рд╕рдХреНрдЫ (рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, тАЬDIYтАЭ + тАЬmicrocontrollersтАЭ + тАЬC++тАЭ)ред рдореИрд▓реЗ рд╕рд╛рдЗрдЯрдорд╛ рдкреНрд░реЛрдлрд╛рдЗрд▓ рд▓реЗрдЦрд╣рд░реВ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдЧрд░реНрди рдкрджрдирд╛рдо "рдкреНрд░реЛрдлрд╛рдЗрд▓" рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрдВ, рдпрджреНрдпрдкрд┐ рдпрд╕рдХреЛ рд▓рд╛рдЧрд┐ рдЕрдВрдЧреНрд░реЗрдЬреА рд╢рдмреНрдж рдкреНрд░реЛрдлрд╛рдЗрд▓ рдкреВрд░реНрдг рд░реВрдкрдорд╛ рд╕рд╣реА рдЫреИрдиред
рдЕрдШрд┐рд▓реНрд▓реЛ рднрд╛рдЧрдорд╛ рд╣рд╛рдореАрд▓реЗ рдпрд╕ рдЧрд░реНрдореАрдорд╛ рд╕реБрд░реБ рд╣реБрдиреЗ geektimes рдХреЛ рд▓рд╛рдЧрд┐ рд▓реЗрдЦрд╣рд░реВрдХреЛ рднреБрдХреНрддрд╛рдиреА рдирд┐рдпрдорд╣рд░реВрдорд╛ рдкрд░рд┐рд╡рд░реНрддрдирд╕рдБрдЧ рд╕рдореНрдмрдиреНрдзрд┐рдд "geektimes рдкреНрд░рднрд╛рд╡" рдмрд╛рд░реЗ рд╕реЛрдзреНрдпреМрдВред geektimes рд▓реЗрдЦ рдЕрд▓рдЧ рджреЗрдЦрд┐ рдкреНрд░рджрд░реНрд╢рди рдЧрд░реМрдВ:
df_gt = df[(df['is_geektimes_only'] == True)]
group_gt = df_gt.groupby(['date'])
days_count_gt = group_gt.size().reset_index(name='counts')
grouped = group_gt.sum().reset_index()
year_days_gt = days_count_gt['date'].values
view_gt_per_day_avg = grouped['views'].rolling(window=20, min_periods=1).mean()
рдирддрд┐рдЬрд╛ рд░реЛрдЪрдХ рдЫред geektimes рд▓реЗрдЦрд╣рд░реВрдХреЛ рдХреБрд▓рдорд╛ рд╣реЗрд░рд╛рдЗрдХреЛ рдЕрдиреБрдорд╛рдирд┐рдд рдЕрдиреБрдкрд╛рдд рдХрддреИ 1:5 рд╡рд░рдкрд░ рдЫред рддрд░ рд╣реЗрд░рд╛рдЗрдХреЛ рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд░реВрдкрдорд╛ рдЙрддрд╛рд░-рдЪрдврд╝рд╛рд╡ рд╣реБрдБрджрд╛, "рдордиреЛрд░рдЮреНрдЬрди" рд▓реЗрдЦрд╣рд░реВрдХреЛ рдЕрд╡рд▓реЛрдХрди рд▓рдЧрднрдЧ рд╕рдорд╛рди рд╕реНрддрд░рдорд╛ рд░рд╣реНрдпреЛред
рддрдкрд╛рдИрдВрд▓реЗ рдпреЛ рдкрдирд┐ рдпрд╛рдж рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рдХрд┐ "geektimes" рдЦрдгреНрдбрдорд╛ рд▓реЗрдЦрд╣рд░реВрдХреЛ рдХреБрд▓ рд╣реЗрд░рд╛рдЗрдХреЛ рд╕рдВрдЦреНрдпрд╛ рдЕрдЭреИ рдкрдирд┐ рдирд┐рдпрдорд╣рд░реВ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реЗрдкрдЫрд┐ рдкрдирд┐ рдШрдЯреЗрдХреЛ рдЫ, рддрд░ "рдЖрдБрдЦрд╛рджреНрд╡рд╛рд░рд╛", рдХреБрд▓ рдорд╛рдирд╣рд░реВрдХреЛ 5% рднрдиреНрджрд╛ рдмрдвреА рдЫреИрдиред
рдпреЛ рдкреНрд░рддрд┐ рд▓реЗрдЦ рд╣реЗрд░рд╛рдЗ рдХреЛ рдФрд╕рдд рд╕рдВрдЦреНрдпрд╛ рд╣реЗрд░реНрди рд░реЛрдЪрдХ рдЫ:
"рдордиреЛрд░рдЮреНрдЬрди" рд▓реЗрдЦрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдпреЛ рдФрд╕рдд рднрдиреНрджрд╛ 40% рдорд╛рдерд┐ рдЫред рдпреЛ рд╕рд╛рдпрдж рдЕрдЪрдореНрдордХреЛ рдХреБрд░рд╛ рд╣реЛрдЗрдиред рдЕрдкреНрд░рд┐рд▓рдХреЛ рд╕реБрд░реБрдорд╛ рдЕрд╕рдлрд▓рддрд╛ рдорд▓рд╛рдИ рдЕрд╕реНрдкрд╖реНрдЯ рдЫ, рд╣реБрдирд╕рдХреНрдЫ рдпреЛ рдХреЗ рднрдпреЛ, рд╡рд╛ рдпреЛ рдХреЗрд╣рд┐ рдкреНрд░рдХрд╛рд░рдХреЛ рдкрд╛рд░реНрд╕рд┐рдЩ рддреНрд░реБрдЯрд┐ рд╣реЛ, рд╡рд╛ рд╣реБрдирд╕рдХреНрдЫ geektimes рд▓реЗрдЦрдХрд╣рд░реВ рдордзреНрдпреЗ рдПрдХ рдЫреБрдЯреНрдЯреАрдорд╛ рдЧрдПрдХреЛ рдерд┐рдпреЛ;)ред
рд╡реИрд╕реЗ, рдЧреНрд░рд╛рдлрд▓реЗ рд▓реЗрдЦрд╣рд░реВрдХреЛ рд╣реЗрд░рд╛рдЗрдХреЛ рд╕рдВрдЦреНрдпрд╛рдорд╛ рджреБрдИ рдердк рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╢рд┐рдЦрд░рд╣рд░реВ рджреЗрдЦрд╛рдЙрдБрджрдЫ - рдирдпрд╛рдБ рд╡рд░реНрд╖ рд░ рдордИ рдмрд┐рджрд╛рд╣рд░реВред
рд╣рдмреНрд╕
рд╣рдмрд╣рд░реВрдХреЛ рдкреНрд░рддрд┐рдЬреНрдЮрд╛ рдЧрд░рд┐рдПрдХреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрдорд╛ рдЬрд╛рдФрдВред рд╣реЗрд░реМрдВ рд╕рдВрдЦреНрдпрд╛рдХреЛ рдЖрдзрд╛рд░рдорд╛ рд╢реАрд░реНрд╖ 20 рд╣рдмрд╣рд░реВ рд╕реВрдЪреАрдмрджреНрдз рдЧрд░реМрдВ:
hubs_info = []
for hub_name in hubs_all:
mask = df['hubs'].apply(lambda x: hub_name in x)
df_hub = df[mask]
count, views = df_hub.shape[0], df_hub['views'].sum()
hubs_info.append((hub_name, count, views))
# Draw hubs
hubs_top = sorted(hubs_info, key=lambda v: v[2], reverse=True)[:20]
top_views = list(map(lambda x: x[2], hubs_top))
top_names = list(map(lambda x: x[0], hubs_top))
plt.rcParams["figure.figsize"] = (8, 6)
plt.bar(range(0, len(top_views)), top_views)
plt.xticks(range(0, len(top_names)), top_names, rotation=90)
plt.ticklabel_format(style='plain', axis='y')
plt.tight_layout()
plt.show()
рдкрд░рд┐рдгрд╛рдо:
рдЕрдЪрдореНрдордХреЛ рдХреБрд░рд╛, рд╡рд┐рдЪрд╛рд░рдХреЛ рд╕рдиреНрджрд░реНрднрдорд╛ рд╕рдмреИрднрдиреНрджрд╛ рд▓реЛрдХрдкреНрд░рд┐рдп рд╣рдм "рд╕реВрдЪрдирд╛ рд╕реБрд░рдХреНрд╖рд╛" рдерд┐рдпреЛ; рд╢реАрд░реНрд╖ 5 рдиреЗрддрд╛рд╣рд░реВрдорд╛ "рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ" рд░ "рд▓реЛрдХрдкреНрд░рд┐рдп рд╡рд┐рдЬреНрдЮрд╛рди" рдкрдирд┐ рд╕рдорд╛рд╡реЗрд╢ рдерд┐рдпреЛред
рдПрдиреНрдЯрд┐рдЯрдкрд▓реЗ Gtk рд░ рдХреЛрдХреЛ рдУрдЧрдЯреЗрдХреЛ рдЫред
рдо рддрд┐рдореАрд▓рд╛рдИ рдПрдЙрдЯрд╛ рдЧреЛрдкреНрдп рдХреБрд░рд╛ рднрдиреНрдЫреБ, рд╢реАрд░реНрд╖ рд╣рдмрд╣рд░реВ рдкрдирд┐ рджреЗрдЦреНрди рд╕рдХрд┐рдиреНрдЫ
рдореВрд▓реНрдпрд╛рдЩреНрдХрди
рд░ рдЕрдиреНрддрдорд╛, рдкреНрд░рддрд┐рдЬреНрдЮрд╛ рдЧрд░рд┐рдПрдХреЛ рдореВрд▓реНрдпрд╛рдЩреНрдХрдиред рд╣рдм рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдбреЗрдЯрд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░, рд╣рд╛рдореА рдпрд╕ рд╡рд░реНрд╖ 2019 рдХреЛ рд▓рд╛рдЧрд┐ рд╕рдмреИрднрдиреНрджрд╛ рд▓реЛрдХрдкреНрд░рд┐рдп рд╣рдмрд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐ рд╕рдмреИрднрдиреНрджрд╛ рд▓реЛрдХрдкреНрд░рд┐рдп рд▓реЗрдЦрд╣рд░реВ рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрди рд╕рдХреНрдЫреМрдВред
рд╕реВрдЪрдирд╛ рд╕реБрд░рдХреНрд╖рд╛
рдХрд╕рд░реА рдореИрд▓реЗ рдПрдХ рд╡рд░реНрд╖рдХреЛ рд▓рд╛рдЧрд┐ Sberbank рдорд╛ рдХрд╛рдо рдЧрд░реЗрди 304000 рднреНрдпреВрд╣рд░реВ, 599 рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рд░реЗрдЯрд┐рдВрдЧ +457.0/-14.0рдЦрд╛рд░реЗрдЬ рдЧрд░рд┐рдПрдХрд╛ рд╕реНрдорд╛рд░реНрдЯ рд▓рд╛рдЗрдЯ рдмрд▓реНрдмрд╣рд░реВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЬрд╛рдирдХрд╛рд░реАрдХреЛ рдмрд╣реБрдореВрд▓реНрдп рд╕реНрд░реЛрдд рд╣реБрдиреН 232000 рднреНрдпреВрд╣рд░реВ, 147 рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рд░реЗрдЯрд┐рдВрдЧ +75.0/-11.0рдзреЛрдЦрд╛рдзрдбреА рд░ рдбрд┐рдЬрд┐рдЯрд▓ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ - рд╕рдмреИ рдзреЗрд░реИ рдЦрд░рд╛рдм рдЫ 176000 рднреНрдпреВрд╣рд░реВ, 778 рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рд░реЗрдЯрд┐рдВрдЧ +356.0/-0.0рдХрд╕рд░реА рдореЗрдЧрд╛рдлреЛрди рдореЛрдмрд╛рдЗрд▓ рд╕рджрд╕реНрдпрддрд╛рд╣рд░реВрдорд╛ рдЬрд▓реНрдпреЛ 166000 рднреНрдпреВрд╣рд░реВ, 676 рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рд░реЗрдЯрд┐рдВрдЧ +624.0/-2.0рд╣реНрдпрд╛рдХрд┐рдВрдЧ VK, рджреБрдИ-рдХрд╛рд░рдХ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдмрдЪрдд рд╣реБрдиреЗрдЫреИрди 148000 рднреНрдпреВрд╣рд░реВ, 332 рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рд░реЗрдЯрд┐рдВрдЧ +124.0/-17.0рдХрд╕рд░реА рдмреНрд░рд╛рдЙрдЬрд░рд▓реЗ рдХрдорд░реЗрдб рдкреНрд░рдореБрдЦрд▓рд╛рдИ рдорджреНрджрдд рдЧрд░реНрдЫ 132000 рднреНрдпреВрд╣рд░реВ, 321 рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рд░реЗрдЯрд┐рдВрдЧ +246.0/-19.0рдЗрддрд┐рд╣рд╛рд╕рдорд╛ рд╕рдмреИрднрдиреНрджрд╛ рдареВрд▓реЛ рдбрдореНрдк: 2,7 рдмрд┐рд▓рд┐рдпрди рдЦрд╛рддрд╛рд╣рд░реВ, рдЬрд╕рдордзреНрдпреЗ 773 рдорд┐рд▓рд┐рдпрди рдЕрджреНрд╡рд┐рддреАрдп рдЫрдиреН 123000 рднреНрдпреВрд╣рд░реВ, 154 рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рд░реЗрдЯрд┐рдВрдЧ +86.0/-5.0рдкреНрд░рд┐рдп, рд╣рд╛рдореА рдЗрдиреНрдЯрд░рдиреЗрдЯ рдорд╛рд░реНрджреИ рдЫреМрдВ 121000 рднреНрдпреВрд╣рд░реВ, 933 рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рд░реЗрдЯрд┐рдВрдЧ +392.0/-83.0'рдореЛрдмрд╛рдЗрд▓ рд╕рд╛рдордЧреНрд░реА' рдирд┐рдГрд╢реБрд▓реНрдХ рдЫ, рдПрд╕рдПрдордПрд╕ рд╡рд╛ рджрд░реНрддрд╛ рдмрд┐рдирд╛ред Megafon рдмрд╛рдЯ рдзреЛрдЦрд╛рдзрдбреА рдХреЛ рд╡рд┐рд╡рд░рдг 114000 рднреНрдпреВрд╣рд░реВ, 478 рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рд░реЗрдЯрд┐рдВрдЧ +488.0/-8.0рддрдкрд╛рдИрдВрдХреЛ Rostelecom рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЦрд╛рддрд╛рдорд╛ рдкреЛрд░реНрдЯ рд╕реНрдХреНрдпрд╛рдирд░ 111000 рднреНрдпреВрд╣рд░реВ, 194 рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рд░реЗрдЯрд┐рдВрдЧ +300.0/-8.0
рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ
рд▓рдЧрднрдЧ рдПрдХ рдЬрдирд╛ рдХреЗрдЯрд╛ 167000 рднреНрдпреВрд╣рд░реВ, 249 рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рд░реЗрдЯрд┐рдВрдЧ +239.0/-33.0рдЬрддрд┐ рдЪрд╛рдБрдбреЛ рддрдкрд╛рдИрдВрд▓реЗ OOP рдмрд┐рд░реНрд╕рдиреБрд╣реБрдиреНрдЫ, рддрдкрд╛рдИрдВ рд░ рддрдкрд╛рдИрдВрдХреЛ рдХрд╛рд░реНрдпрдХреНрд░рдорд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд░рд╛рдореНрд░реЛ 129000 рднреНрдпреВрд╣рд░реВ, 1271 рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рд░реЗрдЯрд┐рдВрдЧ +131.0/-63.0рдХрд┐рди рд╡рд░рд┐рд╖реНрда рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВрд▓реЗ рдХрд╛рдо рдкрд╛рдЙрди рд╕рдХреНрджреИрдирдиреН 119000 рднреНрдпреВрд╣рд░реВ, 901 рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рд░реЗрдЯрд┐рдВрдЧ +151.0/-14.0рдХреЗ рдпреЛ рдмреВрдвреЛ рдорд╛рдиреНрдЫреЗ рдХреЛ рд▓рд╛рдЧрд┐ рдард╛рдЙрдБ рдЫреИрди? рдкреИрдВрддреАрд╕ рдкрдЫрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ 116000 рднреНрдпреВрд╣рд░реВ, 649 рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рд░реЗрдЯрд┐рдВрдЧ +222.0/-16.0рдирдпрд╛рдБ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ рднрд╛рд╖рд╛рд╣рд░реВ рдЪреБрдкрдЪрд╛рдк рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛рд╕рдБрдЧ рд╣рд╛рдореНрд░реЛ рд╕рдореНрдмрдиреНрдзрд▓рд╛рдИ рдорд╛рд░реНрджреИ рдЫрдиреН 106000 рднреНрдпреВрд╣рд░реВ, 764 рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рд░реЗрдЯрд┐рдВрдЧ +164.0/-52.0рдореИрд▓реЗ рдХрдард┐рди рддрд░рд┐рдХрд╛рд▓реЗ рдХреЗ рд╕рд┐рдХреЗрдВ (рд╕рдлреНрдЯрд╡реЗрдпрд░ рд╡рд┐рдХрд╛рд╕рдорд╛ 30 рд╡рд░реНрд╖ рднрдиреНрджрд╛ рдмрдвреА) 101000 рднреНрдпреВрд╣рд░реВ, 128 рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рд░реЗрдЯрд┐рдВрдЧ +178.0/-9.0рджреБрд░реНрд▓рдн рд░ рд╕рдмреИрднрдиреНрджрд╛ рдорд╣рдБрдЧреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ рднрд╛рд╖рд╛рд╣рд░реВ 82900 рднреНрдпреВрд╣рд░реВ, 119 рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рд░реЗрдЯрд┐рдВрдЧ +38.0/-10.0KPI рдорд╛ JavaScript рд░ Node.js рдорд╛ рд╡реНрдпрд╛рдЦреНрдпрд╛рди рдХреЛ рдкрд╛рдареНрдпрдХреНрд░рдо 80300 рднреНрдпреВрд╣рд░реВ, 14 рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рд░реЗрдЯрд┐рдВрдЧ +34.0/-2.0IT рд╕рд░реНрддрд╣рд░реВ рдмрдвреНрджреЛ рдЖрд▓реБ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдХреЛ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ 78000 рднреНрдпреВрд╣рд░реВ, 86 рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рд░реЗрдЯрд┐рдВрдЧ +84.0/-14.0рдмреЗрдпрд░ C++ рдХреЛ 256 рд▓рд╛рдЗрдирд╣рд░реВ: рдХреЗрд╣реА рдШрдгреНрдЯрд╛рдорд╛ рд╕реНрдХреНрд░реНрдпрд╛рдЪрдмрд╛рдЯ рд░реЗ рдЯреНрд░реЗрд╕рд░ рд▓реЗрдЦреНрджреИ 77600 рднреНрдпреВрд╣рд░реВ, 124 рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рд░реЗрдЯрд┐рдВрдЧ +241.0/-0.0
рд▓реЛрдХрдкреНрд░рд┐рдп рд╡рд┐рдЬреНрдЮрд╛рди
рдбрд┐рдЬрд╛рдЗрдирд░рд▓реЗ рдХреЗ рдзреВрдореНрд░рдкрд╛рди рдЧрд░реЗ: рдЕрд╕рд╛рдорд╛рдиреНрдп рдмрдиреНрджреБрдХ 236000 рднреНрдпреВрд╣рд░реВ, 123 рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рд░реЗрдЯрд┐рдВрдЧ +119.0/-9.0рд╡реИрдЬреНрдЮрд╛рдирд┐рдХрд╣рд░реВрд▓реЗ рдкреГрдереНрд╡реАрдорд╛ рд╕рдмреИрднрдиреНрджрд╛ рдкреБрд░рд╛рдиреЛ рдЬреАрд╡рд┐рдд рдХрд╢реЗрд░реБрдХрд╛ рднреЗрдЯреНрдЯрд╛рдПрдХрд╛ рдЫрдиреН 234000 рднреНрдпреВрд╣рд░реВ, 212 рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рд░реЗрдЯрд┐рдВрдЧ +82.0/-14.0рдЯрд┐рднреА рд╢реНрд░реГрдВрдЦрд▓рд╛ 'рдЪреЗрд░реНрдиреЛрдмрд┐рд▓': рд╣реЗрд░реНрдиреБрд╣реЛрд╕реН рд░ рд╕реЛрдЪреНрдиреБрд╣реЛрд╕реН 173000 рднреНрдпреВрд╣рд░реВ, 803 рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рд░реЗрдЯрд┐рдВрдЧ +164.0/-25.0резреи рд╡рд░реНрд╖реАрдп рдХрд┐рд╢реЛрд░рд▓реЗ рдЖрдлреНрдиреЛ рдШрд░рдХреЛ рдкреНрд░рдпреЛрдЧрд╢рд╛рд▓рд╛рдорд╛ рдкрд░рдорд╛рдгреБ рдлреНрдпреБрдЬрди рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЧрд░реЗред 145000 рднреНрдпреВрд╣рд░реВ, 280 рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рд░реЗрдЯрд┐рдВрдЧ +126.0/-29.0рдж рдЯреЗрд▓ рдЕрдл рдж рдЕрд▓реЙрдп рд░реЛрдЬ рдПрдиреНрдб рдж рдлрд▓реЗрди рдХреНрд░реЗрдиреНрдХрд╛ 134000 рднреНрдпреВрд╣рд░реВ, 244 рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рд░реЗрдЯрд┐рдВрдЧ +217.0/-1.0рдпрд╕рд▓рд╛рдИ рдареВрд▓реЛ рдмрдирд╛рдЙрдиреБрд╣реЛрд╕реН! рдЖрдзреБрдирд┐рдХ рд╕рдВрдХрд▓реНрдк рд╡реГрджреНрдзрд┐ 134000 рднреНрдпреВрд╣рд░реВ, 235 рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рд░реЗрдЯрд┐рдВрдЧ +377.0/-1.0Boeing 737 Max рдХреЛ рд▓рд╛рдЧрд┐ рд╕рдлреНрдЯрд╡реЗрдпрд░ $9 рдкреНрд░рддрд┐ рдШрдгреНрдЯрд╛ рдХрдорд╛рдЙрдиреЗ рдЖрдЙрдЯрд╕реЛрд░реНрд╕рд░рд╣рд░реБ рджреНрд╡рд╛рд░рд╛ рд▓реЗрдЦрд┐рдПрдХреЛ рдерд┐рдпреЛ 126000 рднреНрдпреВрд╣рд░реВ, 560 рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рд░реЗрдЯрд┐рдВрдЧ +153.0/-6.0рдирд░реНрднрд╕ рдирд╣реБрдиреБрд╣реЛрд╕реН, рд╣рддрд╛рд░ рдирдЧрд░реНрдиреБрд╣реЛрд╕реН, рдЕрд╡рд░реЛрдз рдирдЧрд░реНрдиреБрд╣реЛрд╕реН: рдПрдХ рддреНрд░рд╛рд╕рджреАрдХреЛ рдХрдерд╛ 121000 рднреНрдпреВрд╣рд░реВ, 384 рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рд░реЗрдЯрд┐рдВрдЧ +242.0/-4.0рдЧрдгрд┐рддрдЬреНрдЮрд╣рд░реВрд▓реЗ рд╕рдВрдЦреНрдпрд╛рд╣рд░реВ рдЧреБрдгрди рдЧрд░реНрдиреЗ рдЙрддреНрддрдо рддрд░рд┐рдХрд╛ рдкрддреНрддрд╛ рд▓рдЧрд╛рдПрдХрд╛ рдЫрдиреН 108000 рднреНрдпреВрд╣рд░реВ, 222 рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рд░реЗрдЯрд┐рдВрдЧ +173.0/-10.0рдирдпрд╛рдБ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ рднрд╛рд╖рд╛рд╣рд░реВ рдЪреБрдкрдЪрд╛рдк рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛рд╕рдБрдЧ рд╣рд╛рдореНрд░реЛ рд╕рдореНрдмрдиреНрдзрд▓рд╛рдИ рдорд╛рд░реНрджреИ рдЫрдиреН 106000 рднреНрдпреВрд╣рд░реВ, 764 рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рд░реЗрдЯрд┐рдВрдЧ +164.0/-52.0
рдХреНрдпрд╛рд░рд┐рдпрд░
рдХрд╕рд░реА рдореИрд▓реЗ рдПрдХ рд╡рд░реНрд╖рдХреЛ рд▓рд╛рдЧрд┐ Sberbank рдорд╛ рдХрд╛рдо рдЧрд░реЗрди 304000 рднреНрдпреВрд╣рд░реВ, 599 рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рд░реЗрдЯрд┐рдВрдЧ +457.0/-14.0рдореИрд▓реЗ рдореЗрд░реЛ рдХреЛрдб рд╕рдореАрдХреНрд╖рд╛рд╣рд░реВрдХреЛ рд╕рд╛рде рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВрдХреЛ рдЬреАрд╡рди рдмрд░реНрдмрд╛рдж рдЧрд░реНрдЫреБ рд░ рдо рдорд╛рдлреА рдЪрд╛рд╣рдиреНрдЫреБ 187000 рднреНрдпреВрд╣рд░реВ, 21 рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рд░реЗрдЯрд┐рдВрдЧ +37.0/-3.0рд╡рд┐рдХрд╛рд╕рдХрд╛ рд░рд╛рдЬрд╛ 179000 рднреНрдпреВрд╣рд░реВ, 668 рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рд░реЗрдЯрд┐рдВрдЧ +315.0/-60.0рд▓рдЧрднрдЧ рдПрдХ рдЬрдирд╛ рдХреЗрдЯрд╛ 167000 рднреНрдпреВрд╣рд░реВ, 249 рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рд░реЗрдЯрд┐рдВрдЧ +239.0/-33.022 рдорд╛ рд░рд┐рдЯрд╛рдпрд░ 158000 рднреНрдпреВрд╣рд░реВ, 927 рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рд░реЗрдЯрд┐рдВрдЧ +259.0/-100.0рддрдкрд╛рдИрдХреЛ рдХрд╛рд░реНрдпрд╕реНрдерд▓рдорд╛ рд▓рд╛рдЗрдЯ рдмрд▓реНрдм рдХрд╕рд░реА рд╣рдЯрд╛рдЙрдиреЗ рдмрд┐рдирд╛ рдирд┐рдХрд╛рд▓реНрдиреЗ? 139000 рднреНрдпреВрд╣рд░реВ, 762 рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рд░реЗрдЯрд┐рдВрдЧ +200.0/-20.0рд░реВрд╕реА рдорд╛ рдирд╡реАрдирддрд╛ 128000 рднреНрдпреВрд╣рд░реВ, 612 рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рд░реЗрдЯрд┐рдВрдЧ +480.0/-33.0рдХрд┐рди рд╡рд░рд┐рд╖реНрда рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВрд▓реЗ рдХрд╛рдо рдкрд╛рдЙрди рд╕рдХреНрджреИрдирдиреН 119000 рднреНрдпреВрд╣рд░реВ, 901 рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рд░реЗрдЯрд┐рдВрдЧ +151.0/-14.0'рдЬрд▓реЗрдХрд╛' рдХрд░реНрдордЪрд╛рд░реА: рдирд┐рдХрд╛рд╕рдХреЛ рдмрд╛рдЯреЛ рдЫ ? 117000 рднреНрдпреВрд╣рд░реВ, 398 рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рд░реЗрдЯрд┐рдВрдЧ +210.0/-14.0рдХреЗ рдпреЛ рдмреВрдвреЛ рдорд╛рдиреНрдЫреЗ рдХреЛ рд▓рд╛рдЧрд┐ рдард╛рдЙрдБ рдЫреИрди? рдкреИрдВрддреАрд╕ рдкрдЫрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ 116000 рднреНрдпреВрд╣рд░реВ, 649 рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рд░реЗрдЯрд┐рдВрдЧ +222.0/-16.0
рдЖрдИрдЯреА рдорд╛ рдХрд╛рдиреВрди
рдзреЛрдЦрд╛рдзрдбреА рд░ рдбрд┐рдЬрд┐рдЯрд▓ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ - рд╕рдмреИ рдзреЗрд░реИ рдЦрд░рд╛рдм рдЫ 176000 рднреНрдпреВрд╣рд░реВ, 778 рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рд░реЗрдЯрд┐рдВрдЧ +356.0/-0.0рдХрд╕рд░реА рдореЗрдЧрд╛рдлреЛрди рдореЛрдмрд╛рдЗрд▓ рд╕рджрд╕реНрдпрддрд╛рд╣рд░реВрдорд╛ рдЬрд▓реНрдпреЛ 166000 рднреНрдпреВрд╣рд░реВ, 676 рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рд░реЗрдЯрд┐рдВрдЧ +624.0/-2.0рд░реВрд╕реА рдорд╛ рдирд╡реАрдирддрд╛ 128000 рднреНрдпреВрд╣рд░реВ, 612 рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рд░реЗрдЯрд┐рдВрдЧ +480.0/-33.0'рдореЛрдмрд╛рдЗрд▓ рд╕рд╛рдордЧреНрд░реА' рдирд┐рдГрд╢реБрд▓реНрдХ рдЫ, рдПрд╕рдПрдордПрд╕ рд╡рд╛ рджрд░реНрддрд╛ рдмрд┐рдирд╛ред Megafon рдмрд╛рдЯ рдзреЛрдЦрд╛рдзрдбреА рдХреЛ рд╡рд┐рд╡рд░рдг 114000 рднреНрдпреВрд╣рд░реВ, 478 рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рд░реЗрдЯрд┐рдВрдЧ +488.0/-8.0рдХрд╕рд░реА рдХрдЬрд╛рдЦ рдЕрдзрд┐рдХрд╛рд░реАрд╣рд░реВрд▓реЗ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрди рдЕрд╕рдлрд▓рддрд╛ рдврд╛рдХреНрди рдЦреЛрдЬрд┐рд░рд╣реЗрдХрд╛ рдЫрдиреН 111000 рднреНрдпреВрд╣рд░реВ, 77 рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рд░реЗрдЯрд┐рдВрдЧ +122.0/-14.0рдХрд╕рд░реА Protonmail рд░реВрд╕ рдорд╛ рдЕрд╡рд░реБрджреНрдз рдЫ 102000 рднреНрдпреВрд╣рд░реВ, 398 рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рд░реЗрдЯрд┐рдВрдЧ +418.0/-7.0Runet рдХреЛ рдЕрд▓рдЧрд╛рд╡ рдорд╛ рдХрд╛рдиреВрди рддреАрди рдкрдарди рдорд╛ рд░рд╛рдЬреНрдп рдбреНрдпреВрдорд╛ рджреНрд╡рд╛рд░рд╛ рдЕрдкрдирд╛рдИрдПрдХреЛ рдерд┐рдпреЛ 88200 рднреНрдпреВрд╣рд░реВ, 878 рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рд░реЗрдЯрд┐рдВрдЧ +73.0/-18.0рдХрд╕рд░реА рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░рд▓реЗ рдмреИрдВрдХ рдЫрдиреЛрдЯ рдЧрд░реНрдЫ рд░ рд╕рдореНрдЭреМрддрд╛рд╣рд░реВ рдкрдвреНрдЫ 87200 рднреНрдпреВрд╣рд░реВ, 611 рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рд░реЗрдЯрд┐рдВрдЧ +166.0/-9.0рджреВрд░рд╕рдЮреНрдЪрд╛рд░ рддрдерд╛ рдЖрдорд╕рдЮреНрдЪрд╛рд░ рдордиреНрддреНрд░рд╛рд▓рдпрд▓реЗ рд░реБрдиреЗрдЯ рдЖрдЗрд╕реЛрд▓реЗрд╕рдирд╕рдореНрдмрдиреНрдзреА рд╡рд┐рдзреЗрдпрдХ рд╕реНрд╡реАрдХреГрдд рдЧрд░реЗрдХреЛ рд╣реЛ 83600 рднреНрдпреВрд╣рд░реВ, 364 рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рд░реЗрдЯрд┐рдВрдЧ +79.0/-9.0рдЯрд┐рдкреНрдкрдгреАрдХреЛ рд╡рд┐рд╕реНрддреГрдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛, рд╕рд╛рдереИ рд░реВрд╕реА рд╕рдВрдШрдорд╛ рдкреНрд░рджрд╛рдпрдХрд╣рд░реВрдХреЛ рдЬреАрд╡рдирдХреЛ рдмрд╛рд░реЗрдорд╛ рдереЛрд░реИ 74700 рднреНрдпреВрд╣рд░реВ, 389 рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рд░реЗрдЯрд┐рдВрдЧ +290.0/-1.0
рд╡реЗрдм рд╡рд┐рдХрд╛рд╕
рдХреЗ рдпреЛ рдмреВрдвреЛ рдорд╛рдиреНрдЫреЗ рдХреЛ рд▓рд╛рдЧрд┐ рдард╛рдЙрдБ рдЫреИрди? рдкреИрдВрддреАрд╕ рдкрдЫрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ 116000 рднреНрдпреВрд╣рд░реВ, 649 рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рд░реЗрдЯрд┐рдВрдЧ +222.0/-16.02019 рдорд╛ рд╡реЗрдмрд╕рд╛рдЗрдЯрд╣рд░реВ рдХрд╕рд░реА рдмрдирд╛рдЙрдиреЗ 110000 рднреНрдпреВрд╣рд░реВ, 278 рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рд░реЗрдЯрд┐рдВрдЧ +233.0/-11.0рд╕рд┐рдХреНрдиреЗ рдбрдХрд░ рднрд╛рдЧ рез: рдЖрдзрд╛рд░рднреВрдд рдХреБрд░рд╛рд╣рд░реВ 91300 рднреНрдпреВрд╣рд░реВ, 24 рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рд░реЗрдЯрд┐рдВрдЧ +52.0/-10.0KPI рдорд╛ JavaScript рд░ Node.js рдорд╛ рд╡реНрдпрд╛рдЦреНрдпрд╛рди рдХреЛ рдкрд╛рдареНрдпрдХреНрд░рдо 80300 рднреНрдпреВрд╣рд░реВ, 14 рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рд░реЗрдЯрд┐рдВрдЧ +34.0/-2.0рдкреНрд░рд╢рд┐рдХреНрд╖рд╛рд░реНрдереА рд╡рд╛рд╕реНрдп рд░ API idempotency рдХреЛ рдмрд╛рд░реЗ рдорд╛ рдЙрдирдХреЛ рдХрдерд╛рд╣рд░реБ 68900 рднреНрдпреВрд╣рд░реВ, 160 рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рд░реЗрдЯрд┐рдВрдЧ +216.0/-3.0рдЬреЛрдбреНрдиреЗ рд╕рдордЭ рдЯреБрдЯреЗрдХреЛ рдЫред рдпреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдкрдорд╛ рд╕рд░реНрдХрд▓рд╣рд░реВрдХреЛ рдкреНрд░рддрд┐рдЪреНрдЫреЗрджрди рд╣реЛрдЗрди, рдЗрдорд╛рдирджрд╛рд░реАрдкреВрд░реНрд╡рдХ 65900 рднреНрдпреВрд╣рд░реВ, 223 рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рд░реЗрдЯрд┐рдВрдЧ +138.0/-41.0рдХрд┐рди рддрдкрд╛рдИрдВрд▓реЗ рдЖрд▓рд╛ рд╡рд┐рд╖рдпрдЧрдд рд╡реЗрдмрд╕рд╛рдЗрдЯрд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рдЖрдлреНрдиреЛ рд╕рдордп рдмрд░реНрдмрд╛рдж рдЧрд░реНрдиреБ рд╣реБрдБрджреИрди 62700 рднреНрдпреВрд╣рд░реВ, 243 рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рд░реЗрдЯрд┐рдВрдЧ +179.0/-13.0рд╕реНрдХреНрд░реНрдпрд╛рдЪрдмрд╛рдЯ рдЖрдзреБрдирд┐рдХ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдмрдирд╛рдЙрдБрджреИ 62200 рднреНрдпреВрд╣рд░реВ, 122 рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рд░реЗрдЯрд┐рдВрдЧ +56.0/-8.0Vue.js рдХрд╛ рд▓рд╛рдЧрд┐ рдХрд╛рд▓реЛ рджрд┐рди 60800 рднреНрдпреВрд╣рд░реВ, 133 рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рд░реЗрдЯрд┐рдВрдЧ +77.0/-6.0рдХрд┐рди рдЖрдзреБрдирд┐рдХ рд╡реЗрдм рд╡рд┐рдХрд╛рд╕ рдпрддрд┐ рдЬрдЯрд┐рд▓ рдЫ? рднрд╛рдЧ 1 57700 рднреНрдпреВрд╣рд░реВ, 319 рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рд░реЗрдЯрд┐рдВрдЧ +101.0/-6.0
GTK
рд░ рдЕрдиреНрддрдорд╛, рддрд╛рдХрд┐ рдХреЛрд╣реА рдкрдирд┐ рдЕрдкрдорд╛рдирд┐рдд рдирд╣реЛрд╕реН, рдо рд╕рдмреИрднрдиреНрджрд╛ рдХрдо рднреНрд░рдордг рдЧрд░рд┐рдПрдХреЛ рд╣рдм "gtk" рдХреЛ рдореВрд▓реНрдпрд╛рдЩреНрдХрди рджрд┐рдиреЗрдЫреБред рдПрдХ рд╡рд░реНрд╖ рднрд┐рддреНрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рднрдпреЛ рдПрдХ рд▓реЗрдЦ, рдЬрд╕рд▓реЗ "рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдкрдорд╛" рдореВрд▓реНрдпрд╛рдЩреНрдХрдирдХреЛ рдкрд╣рд┐рд▓реЛ рд░реЗрдЦрд╛ рдУрдЧрдЯреЗрдХреЛ рдЫред
GtkApplication рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИред librsvg рд░реЗрдиреНрдбрд░рд┐рдЩ рд╕реБрд╡рд┐рдзрд╛рд╣рд░реВ 1700 рднреНрдпреВрд╣рд░реВ, 9 рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рд░реЗрдЯрд┐рдВрдЧ +9.0/-1.0
рдирд┐рд╖реНрдХрд░реНрд╖рдорд╛
рдХреБрдиреИ рдирд┐рд╖реНрдХрд░реНрд╖ рд╣реБрдиреЗрдЫреИрдиред рд╕рдмреИрд▓рд╛рдИ рдкрдвреЗрд░ рдЦреБрд╢реАред
рд╕реНрд░реЛрдд: www.habr.com