рдЕрд╣реЛ рд╣рдмреНрд░.
╨Т
рдЬреЗ рдШрдбрд▓реЗ рддреНрдпрд╛рдордзреНрдпреЗ рд╕реНрд╡рд╛рд░рд╕реНрдп рдЕрд╕рд▓реЗрд▓реНрдпрд╛рдВрд╕рд╛рдареА, рдирд┐рд░рдВрддрд░рддрд╛ рдХрдЯ рдЕрдВрддрд░реНрдЧрдд рдЖрд╣реЗ.
рдореА рддреБрдореНрд╣рд╛рд▓рд╛ рдкреБрдиреНрд╣рд╛ рдПрдХрджрд╛ рдЖрдард╡рдг рдХрд░реВрди рджреЗрддреЛ рдХреА рдЖрдХрдбреЗрд╡рд╛рд░реА рдЖрдгрд┐ рд░реЗрдЯрд┐рдВрдЧ рдЕрдзрд┐рдХреГрдд рдирд╛рд╣реАрдд, рдорд╛рдЭреНрдпрд╛рдХрдбреЗ рдХреЛрдгрддреАрд╣реА рдЖрдВрддрд░рд┐рдХ рдорд╛рд╣рд┐рддреА рдирд╛рд╣реА. рдореА рдХреБрдареЗрддрд░реА рдЪреВрдХ рдХреЗрд▓реА рдирд╛рд╣реА рдХрд┐рдВрд╡рд╛ рдХрд╛рд╣реАрддрд░реА рдЪреБрдХрд▓реЗ рдирд╛рд╣реА рдпрд╛рдЪреАрд╣реА рдЦрд╛рддреНрд░реА рдирд╕рддреЗ. рдкрдг рддрд░реАрд╣реА, рдорд▓рд╛ рд╡рд╛рдЯрддреЗ рдХреА рддреЗ рдордиреЛрд░рдВрдЬрдХ рдЭрд╛рд▓реЗ. рдЖрдореНрд╣реА рдкреНрд░рдердо рдХреЛрдбрд╕рд╣ рдкреНрд░рд╛рд░рдВрдн рдХрд░реВ; рдЬреНрдпрд╛рдВрдирд╛ рдпрд╛рдд рд╕реНрд╡рд╛рд░рд╕реНрдп рдирд╛рд╣реА рддреЗ рдкрд╣рд┐рд▓реЗ рд╡рд┐рднрд╛рдЧ рд╡рдЧрд│реВ рд╢рдХрддрд╛рдд.
рдорд╛рд╣рд┐рддреА рд╕рдВрдХрд▓рди
рдкрд╛рд░реНрд╕рд░рдЪреНрдпрд╛ рдкрд╣рд┐рд▓реНрдпрд╛ рдЖрд╡реГрддреНрддреАрдордзреНрдпреЗ, рдХреЗрд╡рд│ рджреГрд╢реНрдпреЗ, рдЯрд┐рдкреНрдкрдгреНрдпрд╛ рдЖрдгрд┐ рд▓реЗрдЦ рд░реЗрдЯрд┐рдВрдЧрдЪреА рд╕рдВрдЦреНрдпрд╛ рд╡рд┐рдЪрд╛рд░рд╛рдд рдШреЗрддрд▓реА рдЧреЗрд▓реА. рд╣реЗ рдЖрдзреАрдЪ рдЪрд╛рдВрдЧрд▓реЗ рдЖрд╣реЗ, рдкрд░рдВрддреБ рддреЗ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдкреНрд░рд╢реНрди рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрдд тАЛтАЛтАЛтАЛрдирд╛рд╣реА. рд╕рд╛рдЗрдЯрдЪреНрдпрд╛ рдереАрдореЕрдЯрд┐рдХ рд╡рд┐рднрд╛рдЧрд╛рдВрдЪреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдгреНрдпрд╛рдЪреА рд╣реА рд╡реЗрд│ рдЖрд╣реЗ; рд╣реЗ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдмрд░реЗрдЪ рдордиреЛрд░рдВрдЬрдХ рд╕рдВрд╢реЛрдзрди рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрдИрд▓, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, тАЬC++тАЭ рд╡рд┐рднрд╛рдЧрд╛рдЪреА рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рдЕрдиреЗрдХ рд╡рд░реНрд╖рд╛рдВрдордзреНрдпреЗ рдХрд╢реА рдмрджрд▓рд▓реА рдЖрд╣реЗ рддреЗ рдкрд╣рд╛.
рд▓реЗрдЦ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╕реБрдзрд╛рд░рд▓рд╛ рдЧреЗрд▓рд╛ рдЖрд╣реЗ, рдЖрддрд╛ рддреЛ рд▓реЗрдЦ рдЬреНрдпрд╛ рд╣рдмрд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдЖрд╣реЗ, рддрд╕реЗрдЪ рд▓реЗрдЦрдХрд╛рдЪреЗ рдЯреЛрдкрдгрдирд╛рд╡ рдЖрдгрд┐ рддреНрдпрд╛рдЪреЗ рд░реЗрдЯрд┐рдВрдЧ рдкрд░рдд рдХрд░рддреЛ (рдмрд░реНтАНрдпрд╛рдЪ рдордиреЛрд░рдВрдЬрдХ рдЧреЛрд╖реНрдЯреА рдпреЗрдереЗ рджреЗрдЦреАрд▓ рдХреЗрд▓реНрдпрд╛ рдЬрд╛рдК рд╢рдХрддрд╛рдд, рдкрд░рдВрддреБ рддреНрдпрд╛ рдирдВрддрд░ рдпреЗрддреАрд▓). рдбреЗрдЯрд╛ рд╕реАрдПрд╕рд╡реНрд╣реА рдлрд╛рдЗрд▓рдордзреНрдпреЗ рд╕реЗрд╡реНрд╣ рдХреЗрд▓рд╛ рдЬрд╛рддреЛ рдЬреЛ рдпрд╛рд╕рд╛рд░рдЦрд╛ рджрд┐рд╕рддреЛ:
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()
рдЖрдореНрд╣реА рдореЕрдЯрдкреНрд▓реЙрдЯрд▓рд┐рдм рд╡рд╛рдкрд░реВрди рдкреНрд░рдХрд╛рд╢рд┐рдд рд▓реЗрдЦрд╛рдВрдЪреА рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЛ:
рдореА рдЪрд╛рд░реНрдЯрдордзреАрд▓ тАЬрдЧреАрдХрдЯрд╛рдЗрдореНрд╕тАЭ рдЖрдгрд┐ тАЬрдлрдХреНрдд рдЧреАрдХрдЯрд╛рдЗрдореНрд╕тАЭ рдЕрд╕реЗ рд▓реЗрдЦ рд╡рд┐рднрд╛рдЧрд▓реЗ рдЖрд╣реЗрдд, рдХрд╛рд░рдг рд▓реЗрдЦ рдПрдХрд╛рдЪ рд╡реЗрд│реА рджреЛрдиреНрд╣реА рд╡рд┐рднрд╛рдЧрд╛рдВрдЪрд╛ рдЕрд╕реВ рд╢рдХрддреЛ (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, тАЬDIYтАЭ + тАЬрдорд╛рдпрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░тАЭ + тАЬC++тАЭ). рд╕рд╛рдЗрдЯрд╡рд░реАрд▓ рдкреНрд░реЛрдлрд╛рдЗрд▓ рд▓реЗрдЦ рд╣рд╛рдпрд▓рд╛рдЗрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдореА рдкрджрдирд╛рдо "рдкреНрд░реЛрдлрд╛рдЗрд▓" рд╡рд╛рдкрд░рд▓реЗ, рдЬрд░реА рдХрджрд╛рдЪрд┐рдд рдпрд╛рд╕рд╛рдареА рдЗрдВрдЧреНрд░рдЬреА рд╕рдВрдЬреНрдЮрд╛ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдкреВрд░реНрдгрдкрдгреЗ рдпреЛрдЧреНрдп рдирд╛рд╣реА.
рдорд╛рдЧреАрд▓ рднрд╛рдЧрд╛рдд рдЖрдореНрд╣реА рдпрд╛ рдЙрдиреНрд╣рд╛рд│реНрдпрд╛рдд рд╕реБрд░реВ рд╣реЛрдгрд╛рд░реНтАНрдпрд╛ рдЧреАрдХрдЯрд╛рдЗрдореНрд╕рдЪреНрдпрд╛ рд▓реЗрдЦрд╛рдВрд╕рд╛рдареА рдкреЗрдореЗрдВрдЯ рдирд┐рдпрдорд╛рдВрдордзреАрд▓ рдмрджрд▓рд╛рд╢реА рд╕рдВрдмрдВрдзрд┐рдд тАЬрдЧреАрдХрдЯрд╛рдЗрдореНрд╕ рдЗрдлреЗрдХреНрдЯтАЭ рдмрджреНрджрд▓ рд╡рд┐рдЪрд╛рд░рд▓реЗ. рдЪрд▓рд╛ 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 рдЪреНрдпрд╛ рдЖрд╕рдкрд╛рд╕ рдЖрд╣реЗ. рдкрд░рдВрддреБ рдПрдХреВрдг рджреГрд╢реНрдпрд╛рдВрдЪреНрдпрд╛ рд╕рдВрдЦреНрдпреЗрдд рд▓рдХреНрд╖рдгреАрдп рдЪрдв-рдЙрддрд╛рд░ рд╣реЛрдд рдЕрд╕рддрд╛рдирд╛, "рдордиреЛрд░рдВрдЬрди" рд▓реЗрдЦ рдкрд╛рд╣рдгреЗ рдЕрдВрджрд╛рдЬреЗ рд╕рдорд╛рди рдкрд╛рддрд│реАрд╡рд░ рд░рд╛рд╣рд┐рд▓реЗ.
рддреБрдореНрд╣реА рд╣реЗ рджреЗрдЦреАрд▓ рд▓рдХреНрд╖рд╛рдд рдШреЗрдК рд╢рдХрддрд╛ рдХреА "рдЧреАрдХрдЯрд╛рдЗрдореНрд╕" рд╡рд┐рднрд╛рдЧрд╛рддреАрд▓ рд▓реЗрдЦрд╛рдВрдЪреНрдпрд╛ рдПрдХреВрдг рджреГрд╢реНрдпрд╛рдВрдЪреА рд╕рдВрдЦреНрдпрд╛ рдирд┐рдпрдо рдмрджрд▓рд▓реНрдпрд╛рдирдВрддрд░рд╣реА рдХрдореА рдЭрд╛рд▓реА рдЖрд╣реЗ, рдкрд░рдВрддреБ "рдбреЛрд│реНрдпрд╛рджреНрд╡рд╛рд░реЗ", рдПрдХреВрдг рдореВрд▓реНрдпрд╛рдВрдЪреНрдпрд╛ 5% рдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рдирд╛рд╣реА.
рдкреНрд░рддреНрдпреЗрдХ рд▓реЗрдЦрд╛рдЪреНрдпрд╛ рджреГрд╢реНрдпрд╛рдВрдЪреА рд╕рд░рд╛рд╕рд░реА рд╕рдВрдЦреНрдпрд╛ рдкрд╛рд╣рдгреЗ рдордиреЛрд░рдВрдЬрдХ рдЖрд╣реЗ:
"рдордиреЛрд░рдВрдЬрди" рд▓реЗрдЦрд╛рдВрд╕рд╛рдареА рддреЗ рд╕рд░рд╛рд╕рд░реА 40% рдЬрд╛рд╕реНрдд рдЖрд╣реЗ. рд╣реЗ рдХрджрд╛рдЪрд┐рдд рдЖрд╢реНрдЪрд░реНрдпрдХрд╛рд░рдХ рдирд╛рд╣реА. рдПрдкреНрд░рд┐рд▓рдЪреНрдпрд╛ рд╕реБрд░реБрд╡рд╛рддреАрд▓рд╛ рдЖрд▓реЗрд▓реЗ рдЕрдкрдпрд╢ рдорд╛рдЭреНрдпрд╛рд╕рд╛рдареА рдЕрд╕реНрдкрд╖реНрдЯ рдЖрд╣реЗ, рдХрджрд╛рдЪрд┐рдд рддреЗрдЪ рдШрдбрд▓реЗ рдЕрд╕реЗрд▓, рдХрд┐рдВрд╡рд╛ рд╣реА рдПрдХ рдкреНрд░рдХрд╛рд░рдЪреА рдкрд╛рд░реНрд╕рд┐рдВрдЧ рддреНрд░реБрдЯреА рдЕрд╕реЗрд▓ рдХрд┐рдВрд╡рд╛ рдХрджрд╛рдЪрд┐рдд рдЧреАрдХрдЯрд╛рдЗрдо рд▓реЗрдЦрдХрд╛рдВрдкреИрдХреА рдПрдХ рд╕реБрдЯреНрдЯреАрд╡рд░ рдЧреЗрд▓рд╛ рдЕрд╕реЗрд▓;).
рддрд╕реЗ, рдЖрд▓реЗрдЦ рд▓реЗрдЦрд╛рдВрдЪреНрдпрд╛ рджреГрд╢реНрдпрд╛рдВрдЪреНрдпрд╛ рд╕рдВрдЦреНрдпреЗрдд рдЖрдгрдЦреА рджреЛрди рд▓рдХреНрд╖рдгреАрдп рд╢рд┐рдЦрд░реЗ рджрд░реНрд╢рд╡рд┐рддреЛ - рдирд╡реАрди рд╡рд░реНрд╖ рдЖрдгрд┐ рдореЗрдЪреНрдпрд╛ рд╕реБрдЯреНрдЯреНрдпрд╛.
рд╣рдм
рд╣рдмрдЪреНрдпрд╛ рд╡рдЪрдирдмрджреНрдз рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рдХрдбреЗ рд╡рд│реВрдпрд╛. рджреГрд╢реНрдпрд╛рдВрдЪреНрдпрд╛ рд╕рдВрдЦреНрдпреЗрдиреБрд╕рд╛рд░ рд╢реАрд░реНрд╖ 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рд╡реНрд╣реАрдХреЗ рд╣реЕрдХрд┐рдВрдЧ, рджреНрд╡рд┐-рдШрдЯрдХ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдЬрддрди рдХрд░рдгрд╛рд░ рдирд╛рд╣реА 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'рдореЛрдмрд╛рдЗрд▓ рд╕рд╛рдордЧреНрд░реА' рд╡рд┐рдирд╛рдореВрд▓реНрдп рдЖрд╣реЗ, рдПрд╕рдПрдордПрд╕ рдХрд┐рдВрд╡рд╛ рдиреЛрдВрджрдгреАрд╢рд┐рд╡рд╛рдп. рдореЗрдЧрд╛рдлреЛрдирдХрдбреВрди рдлрд╕рд╡рдгреБрдХреАрдЪреЗ рддрдкрд╢реАрд▓ 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.0рдмрдЯрд╛рдЯреЗ рд╡рд╛рдврд╡рдгреНрдпрд╛рдЪреНрдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпреЗрдЪреЗ рдЙрджрд╛рд╣рд░рдг рд╡рд╛рдкрд░реВрди рдЖрдпрдЯреА рд╕рдВрдЬреНрдЮрд╛ 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.012 рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдХрд┐рд╢реЛрд░рд╡рдпреАрди рдореБрд▓рд╛рдиреЗ рддреНрдпрд╛рдЪреНрдпрд╛ рдШрд░рд╛рддреАрд▓ рдкреНрд░рдпреЛрдЧрд╢рд╛рд│реЗрдд рдиреНрдпреВрдХреНрд▓рд┐рдпрд░ рдлреНрдпреВрдЬрди рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗрд▓реА. 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'рдореЛрдмрд╛рдЗрд▓ рд╕рд╛рдордЧреНрд░реА' рд╡рд┐рдирд╛рдореВрд▓реНрдп рдЖрд╣реЗ, рдПрд╕рдПрдордПрд╕ рдХрд┐рдВрд╡рд╛ рдиреЛрдВрджрдгреАрд╢рд┐рд╡рд╛рдп. рдореЗрдЧрд╛рдлреЛрдирдХрдбреВрди рдлрд╕рд╡рдгреБрдХреАрдЪреЗ рддрдкрд╢реАрд▓ 114000 рджреГрд╢реНрдпреЗ, 478 рдЯрд┐рдкреНрдкрдгреНрдпрд╛, рд░реЗрдЯрд┐рдВрдЧ +488.0/-8.0рдХрдЭрд╛рдХ рдЕрдзрд┐рдХрд╛рд░реА рдкреНрд░рдорд╛рдгрдкрддреНрд░рд╛рдЪреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рдХрд░рдгреНрдпрд╛рдд рдЖрд▓реЗрд▓реЗ рдЕрдкрдпрд╢ рдХрд╕реЗ рдЭрд╛рдХрдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рдд рдЖрд╣реЗрдд 111000 рджреГрд╢реНрдпреЗ, 77 рдЯрд┐рдкреНрдкрдгреНрдпрд╛, рд░реЗрдЯрд┐рдВрдЧ +122.0/-14.0рд░рд╢рд┐рдпрд╛рдордзреНрдпреЗ рдкреНрд░реЛрдЯреЛрдирдореЗрд▓ рдХрд╕реЗ рдЕрд╡рд░реЛрдзрд┐рдд рдХреЗрд▓реЗ рдЖрд╣реЗ 102000 рджреГрд╢реНрдпреЗ, 398 рдЯрд┐рдкреНрдкрдгреНрдпрд╛, рд░реЗрдЯрд┐рдВрдЧ +418.0/-7.0рд░реБрдиреЗрдЯрдЪреНрдпрд╛ рдЕрд▓рдЧрд╛рд╡рд╡рд░реАрд▓ рдХрд╛рдпрджрд╛ рд░рд╛рдЬреНрдп рдбреНрдпреВрдорд╛рдиреЗ рддреАрди рд╡рд╛рдЪрдирд╛рдВрдордзреНрдпреЗ рд╕реНрд╡реАрдХрд╛рд░рд▓рд╛ 88200 рджреГрд╢реНрдпреЗ, 878 рдЯрд┐рдкреНрдкрдгреНрдпрд╛, рд░реЗрдЯрд┐рдВрдЧ +73.0/-18.0рдкреНрд░реЛрдЧреНрд░рд╛рдорд░рдиреЗ рдмрдБрдХ рдХрд╢реА рдирд┐рд╡рдбрд▓реА рдЖрдгрд┐ рдХрд░рд╛рд░ рдХрд╕реЗ рд╡рд╛рдЪрд▓реЗ 87200 рджреГрд╢реНрдпреЗ, 611 рдЯрд┐рдкреНрдкрдгреНрдпрд╛, рд░реЗрдЯрд┐рдВрдЧ +166.0/-9.0рджреВрд░рд╕рдВрдЪрд╛рд░ рдЖрдгрд┐ рдорд╛рд╕ рдХрдореНрдпреБрдирд┐рдХреЗрд╢рди рдордВрддреНрд░рд╛рд▓рдпрд╛рдиреЗ RuNet рд╡реЗрдЧрд│реЗ рдХрд░рдгреНрдпрд╛рдмрд╛рдмрддрдЪреНрдпрд╛ рд╡рд┐рдзреЗрдпрдХрд╛рд▓рд╛ рдордВрдЬреБрд░реА рджрд┐рд▓реА 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рдкреНрд░рд╢рд┐рдХреНрд╖рдгрд╛рд░реНрдереА рд╡рд╕реНрдп рдЖрдгрд┐ рдПрдкреАрдЖрдп рдЗрдбрдореНрдкреЛрдЯреЗрдиреНрд╕реАрдмрджреНрджрд▓рдЪреНрдпрд╛ рддреНрдпрд╛рдЪреНрдпрд╛ рдХрдерд╛ 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" рдЪреЗ рд░реЗрдЯрд┐рдВрдЧ рджреЗрдИрди. рд╡рд░реНрд╖рднрд░рд╛рдд рддреЗ рдкреНрд░рдХрд╛рд╢рд┐рдд рдЭрд╛рд▓реЗ рдПрдХ рд▓реЗрдЦ, рдЬреЛ "рд╕реНрд╡рдпрдВрдЪрд▓рд┐рддрдкрдгреЗ" рд░реЗрдЯрд┐рдВрдЧрдЪреА рдкрд╣рд┐рд▓реА рдУрд│ рджреЗрдЦреАрд▓ рд╡реНрдпрд╛рдкрддреЛ.
GtkApplication рд╡рд╛рдкрд░рдгреЗ. librsvg рдкреНрд░рд╕реНрддреБрддреАрдХрд░рдг рд╡реИрд╢рд┐рд╖реНрдЯреНрдпреЗ 1700 рджреГрд╢реНрдпреЗ, 9 рдЯрд┐рдкреНрдкрдгреНрдпрд╛, рд░реЗрдЯрд┐рдВрдЧ +9.0/-1.0
рдирд┐рд╖реНрдХрд░реНрд╖
рдХреЛрдгрддрд╛рд╣реА рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдШрдгрд╛рд░ рдирд╛рд╣реА. рд╕рд░реНрд╡рд╛рдВрдирд╛ рд╡рд╛рдЪреВрди рдЖрдирдВрдж рдЭрд╛рд▓рд╛.
рд╕реНрддреНрд░реЛрдд: www.habr.com