Ինչպես վերլուծեցի Habr-ը, մաս 1. միտումներ

Երբ ավարտվեց ամանորյա Օլիվիեն, ես անելիք չունեի, և ես որոշեցի ներբեռնել բոլոր հոդվածները Habrahabr-ից (և հարակից հարթակներից) իմ համակարգիչ և ուսումնասիրել:

Մի քանի հետաքրքիր պատմություններ կային. Դրանցից առաջինը կայքի գոյության 12 տարիների ընթացքում հոդվածների ձևաչափի և թեմաների մշակումն է։ Օրինակ, որոշ թեմաների դինամիկան բավականին ցուցիչ է։ Շարունակություն - կտրվածքի տակ:

Ինչպես վերլուծեցի Habr-ը, մաս 1. միտումներ

Վերլուծման գործընթաց

Հասկանալու համար, թե ինչպես է զարգացել Հաբրը, անհրաժեշտ էր անցնել նրա բոլոր հոդվածները և դրանցից քաղել մետատեղեկատվություն (օրինակ՝ տարեթվեր)։ Շրջանցումը հեշտ էր, քանի որ բոլոր հոդվածների հղումները նման են «habrahabr.ru/post/337722/», իսկ թվերը տրվում են խիստ հերթականությամբ։ Իմանալով, որ վերջին գրառման թիվն ունի 350 հազարից մի փոքր փոքր թիվ, ես պարզապես անցա ամբողջ հնարավոր փաստաթղթի id-ն օղակով (Python կոդը).

import numpy as np
from multiprocessing import Pool
with Pool(100) as p:
    docs = p.map(download_document, np.arange(350000))

Ֆունկցիա download_document փորձում է բեռնել էջը համապատասխան id-ով և փորձում է իմաստալից տեղեկատվություն կորզել html կառուցվածքից։

import requests
from bs4 import BeautifulSoup

def download_document(pid):
    """ Download and process a Habr document and its comments """
    # выгрузка документа
    r = requests.get('https://habrahabr.ru/post/' +str(pid) + '/')
    # парсинг документа
    soup = BeautifulSoup(r.text, 'html5lib') # instead of html.parser
    doc = {}
    doc['id'] = pid
    if not soup.find("span", {"class": "post__title-text"}):
        # такое бывает, если статья не существовала или удалена
        doc['status'] = 'title_not_found'
    else:
        doc['status'] = 'ok'
        doc['title'] = soup.find("span", {"class": "post__title-text"}).text
        doc['text'] = soup.find("div", {"class": "post__text"}).text
        doc['time'] = soup.find("span", {"class": "post__time"}).text
        # create other fields: hubs, tags, views, comments, votes, etc.
        # ...
    # сохранение результата в отдельный файл
    fname = r'files/' + str(pid) + '.pkl'
    with open(fname, 'wb') as f:
        pickle.dump(doc, f)

Վերլուծության ընթացքում ես հայտնաբերեցի մի քանի նոր բաներ:

Նախ ասում են, որ պրոցեսորում ավելի շատ պրոցեսներ ստեղծելը, քան միջուկներ կան, անօգուտ է։ Բայց իմ դեպքում պարզվեց, որ սահմանափակող ռեսուրսը ոչ թե պրոցեսորն է, այլ ցանցը, ու 100 պրոցես ավելի արագ են աշխատում, քան 4-ը կամ ասենք 20-ը։

Երկրորդ, որոշ գրառումներում կային հատուկ նիշերի համակցություններ, օրինակ՝ «%&#@»-ի նման էվֆեմիզմներ։ Պարզվեց, որ html.parser, որը ես օգտագործել եմ առաջինը, արձագանքում է համակցությանը &# ցավալիորեն, դա համարելով html էության սկիզբ: Ես արդեն պատրաստվում էի սև մոգություն անել, բայց ֆորումն առաջարկեց, որ կարող ես ուղղակի փոխել վերլուծիչը։

Երրորդ՝ ինձ հաջողվեց բեռնաթափել բոլոր հրապարակումները, բացի երեքից։ 65927, 162075 և 275987 համարներով փաստաթղթերն ակնթարթորեն ջնջվել են իմ հակավիրուսով: Սրանք հոդվածներ են, համապատասխանաբար, Javascript-ի շղթայի մասին, որը ներբեռնում է վնասակար pdf, SMS-ի փրկագինը՝ զննարկիչի պլագինների մի շարքի տեսքով, և CrashSafari.com կայքի մասին, որը iPhone-ներն ուղարկում է վերաբեռնման: Հակավիրուսը հայտնաբերեց ևս մեկ հոդված ավելի ուշ՝ համակարգի սկանավորման ժամանակ՝ տեղադրել 338586 սկրիպտների մասին կենդանիների խանութի կայքում, որոնք օգտագործում են օգտատիրոջ պրոցեսորը՝ կրիպտոարժույթը հանելու համար: Այսպիսով, մենք կարող ենք համարել հակավիրուսային աշխատանքը բավականին համարժեք:

«Ուղիղ եթեր» հոդվածները պոտենցիալ առավելագույնի միայն կեսն են՝ 166307 հատ։ Մնացածի մասին Habr-ը տարբերակներ է տալիս «էջը հնացել է, ջնջվել է կամ ընդհանրապես գոյություն չունի»։ Դե, ամեն ինչ կարող է պատահել:

Հոդվածների վերբեռնմանը հաջորդել է տեխնիկական աշխատանք. օրինակ՝ հրապարակման ամսաթվերը պետք է փոխարկվեն «21թ. դեկտեմբերի 2006, ժամը 10:47» ձևաչափից ստանդարտի։ datetime, իսկ «12,8k» դիտումներ՝ 12800 թվականին։ Այս փուլում ևս մի քանի միջադեպ տեղի ունեցավ։ Ամենազավեշտալին կապված է ձայների հաշվարկի և տվյալների տեսակների հետ. հին գրառումներից մի քանիսն ունեին int-ի արտահոսք և ստացան 65535-ական ձայն:

Ինչպես վերլուծեցի Habr-ը, մաս 1. միտումներ

Արդյունքում հոդվածների տեքստերը (առանց նկարների) ինձ տարան 1.5 գիգաբայթ, մետատեղեկատվությամբ մեկնաբանությունները՝ ևս 3, և մոտ հարյուր մեգաբայթ՝ հոդվածների մասին մետատեղեկատվություն։ Սա կարելի է ամբողջությամբ պահել RAM-ում, ինչն ինձ համար հաճելի անակնկալ էր։

Հոդվածների վերլուծությունը սկսել եմ ոչ թե բուն տեքստերից, այլ մետատեղեկատվությունից՝ ամսաթվեր, պիտակներ, հանգույցներ, դիտումներ և հավանումներ։ Պարզվեց, որ նա շատ բան կարող էր պատմել։

Habrahabr զարգացման միտումները

Կայքում հոդվածները հրապարակվում են 2006 թվականից; առավել ինտենսիվ՝ 2008-2016 թթ.

Ինչպես վերլուծեցի Habr-ը, մաս 1. միտումներ

Թե որքան ակտիվորեն են կարդացվել այս հոդվածները տարբեր ժամանակներում, այնքան էլ հեշտ չէ գնահատել։ 2012 թվականի և ավելի երիտասարդների տեքստերն ավելի շատ մեկնաբանություններ և գնահատականներ են ստացել, սակայն ավելի նոր տեքստերն ավելի շատ դիտումներ և էջանիշեր ունեն: Այս չափիչները նույն կերպ են վարվել (կրճատվել են) միայն մեկ անգամ՝ 2015թ. Թերևս տնտեսական և քաղաքական ճգնաժամի պայմաններում ընթերցողների ուշադրությունը ՏՏ բլոգերից տեղափոխվել է ավելի ցավոտ հարցերի վրա։

Ինչպես վերլուծեցի Habr-ը, մաս 1. միտումներ

Բացի բուն հոդվածներից, ես ներբեռնեցի ավելի շատ մեկնաբանություններ նրանց համար: Եղել է 6 միլիոն մեկնաբանություն, սակայն դրանցից 240 հազարն արգելվել է («ՉԹՕ թռավ և հրապարակեց այս մակագրությունը այստեղ»)։ Մեկնաբանությունների օգտակար հատկությունն այն է, որ դրանք ունեն ժամանակի կնիք: Մեկնաբանությունների ժամանակը ուսումնասիրելով՝ կարելի է մոտավորապես հասկանալ, թե երբ են ընդհանրապես հոդվածները կարդում։

Պարզվեց, որ հոդվածների մեծ մասը և՛ գրված է, և՛ մեկնաբանվում է ինչ-որ տեղ առավոտյան 10-ից մինչև երեկոյան 20-ը, այսինքն. սովորական մոսկովյան աշխատանքային օրը: Սա կարող է նշանակել, որ Հաբրը կարդում են մասնագիտական ​​նպատակներով, և դա լավ միջոց է աշխատանքում հետաձգելու համար: Ի դեպ, օրվա այս բաշխումը կայուն է Հաբրի հիմնադրումից մինչև մեր օրերը։

Ինչպես վերլուծեցի Habr-ը, մաս 1. միտումներ

Այնուամենայնիվ, մեկնաբանության ժամանակի հիմնական առավելությունը ոչ թե օրվա ժամը է, այլ հոդվածի «ակտիվ կյանքի» տևողությունը։ Ես հաշվարկեցի, թե ինչպես է բաշխվում հոդվածի հրապարակումից մինչև մեկնաբանության ժամանակը։ Պարզվեց, որ հիմա միջին մեկնաբանությունը (կանաչ գիծը) գալիս է մոտ 20 ժամից, այսինքն. Հրապարակումից հետո առաջին օրը միջինում մնում է հոդվածի բոլոր մեկնաբանությունների կեսից մի փոքր ավելին։ Եվ երկու օրում թողնում են բոլոր մեկնաբանությունների 75%-ը։ Միևնույն ժամանակ, ավելի վաղ հոդվածներն ավելի արագ էին ընթերցվում, օրինակ՝ 2010 թվականին մեկնաբանությունների կեսը առաջին 6 ժամում էր։

Ինչպես վերլուծեցի Habr-ը, մաս 1. միտումներ

Ինձ համար անսպասելի էր, որ մեկնաբանությունները երկարացել են. մեկնաբանության մեջ նիշերի միջին թիվը գրեթե կրկնապատկվել է Habr-ի կյանքի ընթացքում:

Ինչպես վերլուծեցի Habr-ը, մաս 1. միտումներ

Ավելի հեշտ արձագանքը, քան մեկնաբանությունները, ձայներ են: Ի տարբերություն շատ այլ ռեսուրսների, Habré-ում դուք կարող եք տեղադրել ոչ միայն պլյուսներ, այլև մինուսներ: Այնուամենայնիվ, ընթերցողներն այդքան հաճախ չեն օգտվում վերջին հնարավորությունից. հակակրանքների ներկայիս մասնաբաժինը կազմում է տրված բոլոր ձայների մոտ 15%-ը: Նախկինում ավելի շատ էր, բայց ժամանակի ընթացքում ընթերցողներն ավելի բարի են դարձել։

Ինչպես վերլուծեցի Habr-ը, մաս 1. միտումներ

Ինքնին տեքստերը ժամանակի ընթացքում փոխվել են։ Օրինակ, տեքստի բնորոշ երկարությունը չի դադարում կայուն աճել կայքի հենց մեկնարկից ի վեր՝ չնայած ճգնաժամերին: Մեկ տասնամյակի ընթացքում տեքստերը դարձել են գրեթե տասն անգամ ավելի երկար:

Ինչպես վերլուծեցի Habr-ը, մաս 1. միտումներ

Փոխվել է նաև տեքստերի ոճը (առաջին մոտավորությամբ)։ Հաբրի գոյության առաջին տարիներին, օրինակ, կոդի և թվերի մասնաբաժինը տեքստերում աճել է.

Ինչպես վերլուծեցի Habr-ը, մաս 1. միտումներ

Կայքի ընդհանուր դինամիկան հասկանալուց հետո ես որոշեցի չափել, թե ինչպես է փոխվել տարբեր թեմաների ժողովրդականությունը: Թեմաները կարող են ավտոմատ կերպով ընտրվել տեքստերից, բայց սկզբի համար դուք չեք կարող նորից հորինել անիվը, այլ օգտագործել պատրաստի պիտակներ, որոնք փակցված են յուրաքանչյուր հոդվածի հեղինակների կողմից: Ես գծել եմ չորս բնորոշ միտումներ գծապատկերում: «Google» թեման ի սկզբանե գերիշխում էր (գուցե հիմնականում SEO-ի պատճառով), բայց տարիների ընթացքում նիհարում է։ Javascript-ը հայտնի թեմա է եղել և շարունակում է դանդաղ աճել, սակայն մեքենայական ուսուցումը սկսել է արագորեն ժողովրդականություն ձեռք բերել միայն վերջին տարիներին: Մյուս կողմից, Linux-ը նույնքան արդիական է մնացել տասնամյակի ընթացքում:

Ինչպես վերլուծեցի Habr-ը, մաս 1. միտումներ

Իհարկե, ինձ հետաքրքրեց, թե որ թեմաներն են ավելի շատ գրավում ընթերցողների ակտիվությունը: Ես հաշվարկել եմ յուրաքանչյուր թեմայում դիտումների, ձայների և մեկնաբանությունների միջին թիվը: Ահա թե ինչ է տեղի ունեցել.

  • Ամենաշատ դիտված թեմաները` arduino, վեբ դիզայն, վեբ մշակում, digest, հղումներ, css, html, html5, nginx, ալգորիթմներ:
  • Ամենա «հավանած» թեմաները՝ vkontakte, հումոր, jquery, օպերա, c, html, վեբ մշակում, html5, css, վեբ դիզայն։
  • Ամենաշատ քննարկվող թեմաները՝ օպերա, skype, freelance, vkontakte, ubuntu, աշխատանք, nokia, nginx, arduino, firefox:

Ի դեպ, քանի որ ես թեմաներ եմ համեմատում, կարող եք դրանք դասակարգել ըստ հաճախականության (և արդյունքները համեմատել նմանատիպ հոդված 2013թ).

  • Habr-ի գոյության բոլոր տարիների ընթացքում ամենահայտնի պիտակները (նվազման կարգով) են google, android, javascript, microsoft, linux, php, apple, java, python, ծրագրավորում, ստարտափներ, զարգացում, ios, startup, սոցիալական ցանցեր:
  • 2017-ին ամենատարածվածներն էին javascript, python, java, android, մշակում, linux, c++, ծրագրավորում, php, c#, ios, մեքենայական ուսուցում, տեղեկատվական անվտանգություն, microsoft, react:

Այս վարկանիշները համեմատելիս կարելի է ուշադրություն դարձնել, օրինակ, Python-ի հաղթական երթին ու php-ի վերացմանը կամ ստարտափ թեմաների «մայրամուտին» ու մեքենայական ուսուցման վերելքին։

Habré-ի ոչ բոլոր թեգերն ունեն այդքան ակնհայտ թեմատիկ գունավորում: Օրինակ, ահա մի տասնյակ պիտակներ, որոնք հանդիպել են միայն մեկ անգամ, բայց ինձ պարզապես ծիծաղելի են թվացել։ Այսպիսով՝ «գաղափարը առաջընթացի շարժիչ ուժն է», «կոշիկ անգործունյա պատկերից», «Այովայի նահանգ», «դրամա», «սուպերալեշ», «շոգեմեքենա», «շաբաթ օրը անելիքներ», «ես ունեմ». աղվես մսաղացի մեջ», «ինչպես միշտ պարզվեց», «զվարճալի պիտակներ չկարողացանք գալ». Նման հոդվածների թեման որոշելու համար պիտակները բավարար չեն. դուք ստիպված կլինեք թեմատիկ մոդելավորում իրականացնել հոդվածների տեքստերի վրա:

Հոդվածների բովանդակության ավելի մանրամասն վերլուծությունը կլինի հաջորդ գրառման մեջ։ Նախ, ես պատրաստվում եմ կառուցել մի մոդել, որը կանխատեսում է հոդվածի էջերի դիտումների քանակը՝ հիմնվելով դրա բովանդակության վրա: Երկրորդ, ես ուզում եմ նեյրոնային ցանցին սովորեցնել տեքստեր ստեղծել նույն ոճով, ինչ Habr-ի հեղինակները: Ուրեմն բաժանորդագրվեք 🙂

Հ.Գ. Եվ ահա ձայնային ազդանշանը տվյալների բազա.

Source: www.habr.com

Добавить комментарий