Habrastatistics: د سایټ ډیری او لږ لیدل شوي برخې سپړنه

اې حبر

В پخوانۍ برخه د هابر ترافیک د اصلي پیرامیټونو سره سم تحلیل شوی - د مقالو شمیر ، د دوی نظرونه او درجه بندي. په هرصورت، د سایټ برخو د شهرت مسله ناڅاپه پاتې شوه. دا په زړه پوري شوه چې دې ته په ډیر تفصیل سره وګورو او خورا مشهور او خورا غیر مشهور مرکزونه ومومئ. په نهایت کې ، زه به د geektimes اغیز په ډیر تفصیل سره وګورم ، د نوي درجې پراساس د غوره مقالو نوي انتخاب سره پای ته ورسیدم.

Habrastatistics: د سایټ ډیری او لږ لیدل شوي برخې سپړنه

د هغو کسانو لپاره چې لیوالتیا لري هغه څه چې پیښ شوي، دوام د کټ لاندې دی.

اجازه راکړئ یو ځل بیا تاسو ته یادونه وکړم چې احصایې او درجه بندي رسمي ندي، زه هیڅ داخلي معلومات نلرم. دا هم تضمین نه دی چې ما په کوم ځای کې خطا نه ده کړې یا یو څه له لاسه ورکړی. مګر بیا هم، زه فکر کوم چې دا په زړه پورې شو. موږ به لومړی د کوډ سره پیل وکړو؛ هغه څوک چې پدې کې علاقه نلري کولی شي لومړۍ برخې پریږدي.

د معلوماتو راټولول

د پارسر په لومړۍ نسخه کې، یوازې د نظرونو شمیر، تبصرې او د مقالې درجه بندي په پام کې نیول شوي. دا لا دمخه ښه دی، مګر دا تاسو ته اجازه نه ورکوي چې ډیرې پیچلې پوښتنې وکړي. دا وخت دی چې د سایټ موضوعي برخې تحلیل کړئ؛ دا به تاسو ته اجازه درکړي چې خورا په زړه پورې څیړنې ترسره کړئ، د بیلګې په توګه، وګورئ چې څنګه د "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 په کارولو سره د خپرو شویو مقالو شمیر ښکاره کوو:

Habrastatistics: د سایټ ډیری او لږ لیدل شوي برخې سپړنه

ما په چارټ کې "جیکټایمز" او "یوازې geektimes" مقالې ویشلې، ځکه یوه مقاله کولی شي په ورته وخت کې دواړه برخې پورې اړه ولري (د مثال په توګه ، "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 په شاوخوا کې ده. مګر پداسې حال کې چې د لیدونو ټولټال شمیر د پام وړ بدلون موندلی، د "تفریحی" مقالو لیدل نږدې په ورته کچه پاتې دي.

Habrastatistics: د سایټ ډیری او لږ لیدل شوي برخې سپړنه

تاسو دا هم لیدلی شئ چې د "geektimes" برخه کې د مقالو ټول نظرونه لاهم د مقرراتو له بدلولو وروسته راټیټ شوي، مګر "د سترګو په واسطه"، د ټول ارزښتونو له 5٪ څخه ډیر نه.

دا په زړه پورې ده چې په هره مقاله کې د لیدونو اوسط شمیر وګورئ:

Habrastatistics: د سایټ ډیری او لږ لیدل شوي برخې سپړنه

د "تفریحی" مقالو لپاره دا د اوسط څخه شاوخوا 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()

پایلې:

Habrastatistics: د سایټ ډیری او لږ لیدل شوي برخې سپړنه

په حیرانتیا سره، د نظرونو په برخه کې ترټولو مشهور مرکز "د معلوماتو امنیت" و؛ د 5 لوړ پوړو مشرانو کې "پروګرامینګ" او "مشهور ساینس" هم شامل وو.

انټيټوپ Gtk او کوکو قبضه کوي.

Habrastatistics: د سایټ ډیری او لږ لیدل شوي برخې سپړنه

یو راز به درته ووایم، پورته حبونه هم لیدلی شي دلتهکه څه هم د لیدونو شمیر هلته ندی ښودل شوی.

درجه

او په پای کې، ژمنه شوې درجه بندي. د مرکز تحلیل ډیټا په کارولو سره ، موږ کولی شو د دې کال 2019 لپاره خورا مشهور مرکزونو لپاره خورا مشهور مقالې وښیو.

د معلوماتو امنیت

پروګرامونې

مشهور ساینس

کارګر

په IT کې قانون جوړونه

د ویب پراختیا

GTK

او په نهایت کې ، د دې لپاره چې هیڅوک ناراض نشي ، زه به د لږترلږه لیدل شوي مرکز "gtk" درجه ورکړم. د یو کال په موده کې خپور شو یو مقاله، کوم چې "په اتوماتيک ډول" د درجه بندي لومړۍ کرښه هم نیسي.

پایلې

هیڅ پایله به ونه لري. د ټولو لوستلو خوشحاله.

سرچینه: www.habr.com

Add a comment