Π₯абрастатистика: изслСдванС Π½Π° Π½Π°ΠΉ- ΠΈ Π½Π°ΠΉ-ΠΌΠ°Π»ΠΊΠΎ посСщаванитС сСкции Π½Π° сайта

Π₯Π΅ΠΉ Π₯Π°Π±Ρ€.

Π’ ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½Π° част Π’Ρ€Π°Ρ„ΠΈΠΊΡŠΡ‚ Π½Π° Habr бСшС Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ спорСд основнитС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ - броя Π½Π° статиитС, Ρ‚Π΅Ρ…Π½ΠΈΡ‚Π΅ ΠΏΡ€Π΅Π³Π»Π΅Π΄ΠΈ ΠΈ ΠΎΡ†Π΅Π½ΠΊΠΈ. НСразглСдан ΠΎΠ±Π°Ρ‡Π΅ остана Π²ΡŠΠΏΡ€ΠΎΡΡŠΡ‚ Π·Π° популярността Π½Π° сСкциитС Π½Π° сайта. Π‘Ρ‚Π°Π½Π° интСрСсно Π΄Π° Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ Ρ‚ΠΎΠ²Π° ΠΏΠΎ-ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΈ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΠΌ Π½Π°ΠΉ-популярнитС ΠΈ Π½Π°ΠΉ-нСпопулярнитС Ρ…ΡŠΠ±ΠΎΠ²Π΅. И накрая, Ρ‰Π΅ Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌ ΠΏΠΎ-ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Π΅Ρ„Π΅ΠΊΡ‚Π° Π½Π° geektimes, Π·Π°Π²ΡŠΡ€ΡˆΠ²Π°ΠΉΠΊΠΈ с Π½ΠΎΠ²Π° сСлСкция ΠΎΡ‚ Π½Π°ΠΉ-Π΄ΠΎΠ±Ρ€ΠΈΡ‚Π΅ статии, Π±Π°Π·ΠΈΡ€Π°Π½ΠΈ Π½Π° Π½ΠΎΠ²ΠΈ класации.

Π₯абрастатистика: изслСдванС Π½Π° Π½Π°ΠΉ- ΠΈ Π½Π°ΠΉ-ΠΌΠ°Π»ΠΊΠΎ посСщаванитС сСкции Π½Π° сайта

Π—Π° Ρ‚Π΅Π·ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ сС интСрСсуват ΠΎΡ‚ случилото сС, ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π΅ ΠΏΠΎΠ΄ Ρ€Π°Π·Ρ€Π΅Π·.

ΠžΡ‰Π΅ вСднъТ напомням, Ρ‡Π΅ статистиката ΠΈ Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ΠΈΡ‚Π΅ Π½Π΅ са ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π½ΠΈ, нямам Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π° информация. Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Π½Π΅ Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π°Π½ΠΎ, Ρ‡Π΅ някъдС Π½Π΅ съм ΡΠ±ΡŠΡ€ΠΊΠ°Π» ΠΈΠ»ΠΈ съм пропуснал Π½Π΅Ρ‰ΠΎ. Но всС ΠΏΠ°ΠΊ мисля, Ρ‡Π΅ сС ΠΏΠΎΠ»ΡƒΡ‡ΠΈ интСрСсно. ΠŸΡŠΡ€Π²ΠΎ Ρ‰Π΅ Π·Π°ΠΏΠΎΡ‡Π½Π΅ΠΌ с ΠΊΠΎΠ΄Π°; Ρ‚Π΅Π·ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ сС интСрСсуват ΠΎΡ‚ Ρ‚ΠΎΠ²Π°, ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° пропуснат ΠΏΡŠΡ€Π²ΠΈΡ‚Π΅ сСкции.

Π‘ΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ

Π’ ΠΏΡŠΡ€Π²Π°Ρ‚Π° вСрсия Π½Π° парсСра бяха Π²Π·Π΅Ρ‚ΠΈ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ само броят глСдания, ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΡ‚Π΅ ΠΈ ΠΎΡ†Π΅Π½ΠΊΠΈΡ‚Π΅ Π½Π° статиитС. Π’ΠΎΠ²Π° Π²Π΅Ρ‡Π΅ Π΅ Π΄ΠΎΠ±Ρ€Π΅, Π½ΠΎ Π½Π΅ Π²ΠΈ позволява Π΄Π° ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ ΠΏΠΎ-слоТни заявки. Π’Ρ€Π΅ΠΌΠ΅ Π΅ Π΄Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Ρ‚Π΅ Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΈΡ‚Π΅ Ρ€Π°Π·Π΄Π΅Π»ΠΈ Π½Π° сайта; Ρ‚ΠΎΠ²Π° Ρ‰Π΅ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ доста интСрСсни изслСдвания, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²ΠΈΠΆΡ‚Π΅ ΠΊΠ°ΠΊ популярността Π½Π° сСкцията β€ž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 onlyβ€œ Π² Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠ°Ρ‚Π°, Π·Π°Ρ‰ΠΎΡ‚ΠΎ Π•Π΄Π½Π° статия ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈ към Π΄Π²Π°Ρ‚Π° Ρ€Π°Π·Π΄Π΅Π»Π° Π΅Π΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ β€žΠΠ°ΠΏΡ€Π°Π²ΠΈ си ΡΠ°ΠΌβ€œ + β€žΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Ρ€ΠΈβ€œ + β€ž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 Π½Π° Π»ΠΈΠ΄Π΅Ρ€ΠΈΡ‚Π΅ Π²Π»ΠΈΠ·Π°Ρ‚ ΠΎΡ‰Π΅ β€žΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅β€œ ΠΈ β€žΠŸΠΎΠΏΡƒΠ»ΡΡ€Π½Π° Π½Π°ΡƒΠΊΠ°β€œ.

Antitop Π·Π°Π΅ΠΌΠ° Gtk ΠΈ Cocoa.

Π₯абрастатистика: изслСдванС Π½Π° Π½Π°ΠΉ- ΠΈ Π½Π°ΠΉ-ΠΌΠ°Π»ΠΊΠΎ посСщаванитС сСкции Π½Π° сайта

Π©Π΅ Π²ΠΈ ΠΊΠ°ΠΆΠ° Π΅Π΄Π½Π° Ρ‚Π°ΠΉΠ½Π°, Π³ΠΎΡ€Π½ΠΈΡ‚Π΅ Π³Π»Π°Π²ΠΈΠ½ΠΈ ΡΡŠΡ‰ΠΎ сС Π²ΠΈΠΆΠ΄Π°Ρ‚ Ρ‚ΡƒΠΊ, Π²ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ броят Π½Π° глСданията Π½Π΅ Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ Ρ‚Π°ΠΌ.

ΠžΡ†Π΅Π½ΠΊΠ°

И накрая, ΠΎΠ±Π΅Ρ‰Π°Π½Π°Ρ‚Π° ΠΎΡ†Π΅Π½ΠΊΠ°. Използвайки Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ Π°Π½Π°Π»ΠΈΠ· Π½Π° Ρ…ΡŠΠ±ΠΎΠ²Π΅, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ Π½Π°ΠΉ-популярнитС статии Π·Π° Π½Π°ΠΉ-популярнитС Ρ…ΡŠΠ±ΠΎΠ²Π΅ Π·Π° Ρ‚Π°Π·ΠΈ 2019 Π³.

Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Π° сигурност

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅

ΠŸΠΎΠΏΡƒΠ»ΡΡ€Π½Π° Π½Π°ΡƒΠΊΠ°

ΠΊΠ°Ρ€ΠΈΠ΅Ρ€Π°

ЗаконодатСлство Π² ИВ

Π£Π΅Π± Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°

GTK

И накрая, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π½ΠΈΠΊΠΎΠΉ Π΄Π° Π½Π΅ сС ΠΎΠ±ΠΈΠ΄ΠΈ, Ρ‰Π΅ Π΄Π°ΠΌ Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³Π° Π½Π° Π½Π°ΠΉ-ΠΌΠ°Π»ΠΊΠΎ посСщавания Ρ†Π΅Π½Ρ‚ΡŠΡ€ β€žgtkβ€œ. Π’ Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° Π΅Π΄Π½Π° Π³ΠΎΠ΄ΠΈΠ½Π° Ρ‚ΠΎΠΉ бСшС ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½ Π΅Π΄ΠΈΠ½ Бтатията, която ΡΡŠΡ‰ΠΎ β€žΠ°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎβ€œ Π·Π°Π΅ΠΌΠ° ΠΏΡŠΡ€Π²ΠΈΡ Ρ€Π΅Π΄ Π½Π° Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³Π°.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Няма Π΄Π° ΠΈΠΌΠ° Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅. ΠŸΡ€ΠΈΡΡ‚Π½ΠΎ Ρ‡Π΅Ρ‚Π΅Π½Π΅ Π½Π° всички.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: www.habr.com

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€