แƒฐแƒแƒ‘แƒ แƒแƒกแƒขแƒแƒขแƒ˜แƒกแƒขแƒ˜แƒ™แƒ: แƒกแƒแƒ˜แƒขแƒ˜แƒก แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒ›แƒ”แƒขแƒแƒ“ แƒ“แƒ แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒœแƒแƒ™แƒšแƒ”แƒ‘แƒแƒ“ แƒ›แƒแƒœแƒแƒฎแƒฃแƒšแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒœแƒแƒ™แƒ•แƒ”แƒ—แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒฌแƒแƒ•แƒšแƒ

แƒฐแƒ”แƒ˜ แƒฐแƒแƒ‘แƒ .

ะ’ แƒฌแƒ˜แƒœแƒ แƒœแƒแƒฌแƒ˜แƒšแƒ˜ 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โ€œ แƒฉแƒแƒ แƒขแƒจแƒ˜, แƒ แƒแƒ“แƒ’แƒแƒœ แƒกแƒขแƒแƒขแƒ˜แƒ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ”แƒ™แƒฃแƒ—แƒ•แƒœแƒแƒ“แƒ”แƒก แƒแƒ แƒ˜แƒ•แƒ” แƒ’แƒแƒœแƒงแƒแƒคแƒ˜แƒšแƒ”แƒ‘แƒแƒก แƒ”แƒ แƒ—แƒ“แƒ แƒแƒฃแƒšแƒแƒ“ (แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, โ€žDIYโ€œ + โ€žแƒ›แƒ˜แƒ™แƒ แƒแƒ™แƒแƒœแƒขแƒ แƒแƒšแƒ”แƒ แƒ”แƒ‘แƒ˜โ€œ + โ€ž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()

แƒจแƒ”แƒ“แƒ”แƒ’แƒ˜:

แƒฐแƒแƒ‘แƒ แƒแƒกแƒขแƒแƒขแƒ˜แƒกแƒขแƒ˜แƒ™แƒ: แƒกแƒแƒ˜แƒขแƒ˜แƒก แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒ›แƒ”แƒขแƒแƒ“ แƒ“แƒ แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒœแƒแƒ™แƒšแƒ”แƒ‘แƒแƒ“ แƒ›แƒแƒœแƒแƒฎแƒฃแƒšแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒœแƒแƒ™แƒ•แƒ”แƒ—แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒฌแƒแƒ•แƒšแƒ

แƒ’แƒแƒกแƒแƒ™แƒ•แƒ˜แƒ แƒ˜แƒ, แƒ แƒแƒ› แƒœแƒแƒฎแƒ•แƒ”แƒ‘แƒ˜แƒก แƒ—แƒ•แƒแƒšแƒกแƒแƒ–แƒ แƒ˜แƒกแƒ˜แƒ— แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒžแƒแƒžแƒฃแƒšแƒแƒ แƒฃแƒšแƒ˜ แƒ™แƒ”แƒ แƒ แƒ˜แƒงแƒ โ€žแƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒฃแƒšแƒ˜ แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒแƒ”แƒ‘แƒโ€œ, แƒšแƒ˜แƒ“แƒ”แƒ แƒ—แƒ แƒฎแƒฃแƒ—แƒ”แƒฃแƒšแƒจแƒ˜ แƒแƒกแƒ”แƒ•แƒ” แƒ›แƒแƒฎแƒ•แƒ“แƒœแƒ”แƒœ โ€žแƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒ แƒ”แƒ‘แƒโ€œ แƒ“แƒ โ€žแƒžแƒแƒžแƒฃแƒšแƒแƒ แƒฃแƒšแƒ˜ แƒ›แƒ”แƒชแƒœแƒ˜แƒ”แƒ แƒ”แƒ‘แƒโ€œ.

แƒแƒœแƒขแƒ˜แƒขแƒแƒžแƒ˜ แƒ˜แƒ™แƒแƒ•แƒ”แƒ‘แƒก แƒ’แƒขแƒ™แƒก แƒ“แƒ แƒ™แƒแƒ™แƒแƒแƒก.

แƒฐแƒแƒ‘แƒ แƒแƒกแƒขแƒแƒขแƒ˜แƒกแƒขแƒ˜แƒ™แƒ: แƒกแƒแƒ˜แƒขแƒ˜แƒก แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒ›แƒ”แƒขแƒแƒ“ แƒ“แƒ แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒœแƒแƒ™แƒšแƒ”แƒ‘แƒแƒ“ แƒ›แƒแƒœแƒแƒฎแƒฃแƒšแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒœแƒแƒ™แƒ•แƒ”แƒ—แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒฌแƒแƒ•แƒšแƒ

แƒกแƒแƒ˜แƒ“แƒฃแƒ›แƒšแƒแƒก แƒ’แƒ”แƒขแƒงแƒ•แƒ˜แƒ—, แƒขแƒแƒž แƒฐแƒแƒ‘แƒ”แƒ‘แƒ˜แƒช แƒฉแƒแƒœแƒก แƒแƒฅ, แƒ—แƒฃแƒ›แƒชแƒ แƒœแƒแƒฎแƒ•แƒ”แƒ‘แƒ˜แƒก แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ แƒ˜แƒฅ แƒแƒ  แƒแƒ แƒ˜แƒก แƒœแƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ˜.

แƒ แƒ”แƒ˜แƒขแƒ˜แƒœแƒ’แƒ˜

แƒ“แƒ แƒ‘แƒแƒšแƒแƒก, แƒ“แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ แƒ”แƒ˜แƒขแƒ˜แƒœแƒ’แƒ˜. แƒฐแƒแƒ‘แƒ”แƒ‘แƒ˜แƒก แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—, แƒฉแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ•แƒ˜แƒซแƒšแƒ˜แƒ แƒ’แƒแƒ›แƒแƒ•แƒแƒฉแƒ˜แƒœแƒแƒ— แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒžแƒแƒžแƒฃแƒšแƒแƒ แƒฃแƒšแƒ˜ แƒกแƒขแƒแƒขแƒ˜แƒ”แƒ‘แƒ˜ แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒžแƒแƒžแƒฃแƒšแƒแƒ แƒฃแƒšแƒ˜ แƒฐแƒแƒ‘แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒแƒ› 2019 แƒฌแƒšแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก.

แฒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ˜แƒก แƒ“แƒแƒชแƒ•แƒ

แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒ แƒ”แƒ‘แƒแƒจแƒ˜

แƒžแƒแƒžแƒฃแƒšแƒแƒ แƒฃแƒšแƒ˜ แƒ›แƒ”แƒชแƒœแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ

แƒ™แƒแƒ แƒ˜แƒ”แƒ แƒ

แƒ™แƒแƒœแƒแƒœแƒ›แƒ“แƒ”แƒ‘แƒšแƒแƒ‘แƒ IT-แƒจแƒ˜

แƒ•แƒ”แƒ‘ แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ›แƒ”แƒœแƒขแƒ˜

GTK

แƒ“แƒ แƒ‘แƒแƒšแƒแƒก, แƒ แƒแƒ› แƒแƒ แƒแƒ•แƒ˜แƒก แƒ”แƒฌแƒงแƒ˜แƒœแƒแƒก, แƒ›แƒ˜แƒ•แƒชแƒ”แƒ› แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒœแƒแƒ™แƒšแƒ”แƒ‘แƒแƒ“ แƒ›แƒแƒœแƒแƒฎแƒฃแƒšแƒ”แƒ‘แƒฃแƒš แƒฐแƒแƒ‘แƒก "gtk"-แƒ˜แƒก แƒ แƒ”แƒ˜แƒขแƒ˜แƒœแƒ’แƒก. แƒ”แƒ แƒ— แƒฌแƒ”แƒšแƒ˜แƒฌแƒแƒ“แƒจแƒ˜ แƒ’แƒแƒ›แƒแƒ˜แƒชแƒ แƒ”แƒ แƒ—-แƒ”แƒ แƒ—แƒ˜ แƒกแƒขแƒแƒขแƒ˜แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒกแƒ”แƒ•แƒ” โ€žแƒแƒ•แƒขแƒแƒ›แƒแƒขแƒฃแƒ แƒแƒ“โ€œ แƒ˜แƒ™แƒแƒ•แƒ”แƒ‘แƒก แƒ แƒ”แƒ˜แƒขแƒ˜แƒœแƒ’แƒ˜แƒก แƒžแƒ˜แƒ แƒ•แƒ”แƒš แƒฎแƒแƒ–แƒก.

แƒ“แƒแƒกแƒ™แƒ•แƒœแƒ

แƒ“แƒแƒกแƒ™แƒ•แƒœแƒ แƒแƒ  แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ. แƒ’แƒ˜แƒšแƒแƒชแƒแƒ•แƒ— แƒงแƒ•แƒ”แƒšแƒแƒก แƒ™แƒ˜แƒ—แƒฎแƒ•แƒแƒก.

แƒฌแƒงแƒแƒ แƒ: www.habr.com

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ