ஹப்ராஸ்டாடிஸ்டிக்ஸ்: தளத்தின் அதிகம் மற்றும் குறைவாகப் பார்வையிட்ட பகுதிகளை ஆராய்தல்

ஹே ஹப்ர்.

В முந்தைய பகுதி ஹப்ரின் போக்குவரத்து முக்கிய அளவுருக்களின்படி பகுப்பாய்வு செய்யப்பட்டது - கட்டுரைகளின் எண்ணிக்கை, அவற்றின் பார்வைகள் மற்றும் மதிப்பீடுகள். இருப்பினும், தளப் பிரிவுகளின் புகழ் பற்றிய பிரச்சினை ஆராயப்படாமல் இருந்தது. இதை இன்னும் விரிவாகப் பார்ப்பது மற்றும் மிகவும் பிரபலமான மற்றும் மிகவும் பிரபலமற்ற மையங்களைக் கண்டறிவது சுவாரஸ்யமானது. இறுதியாக, நான் கீக்டைம்ஸ் விளைவை இன்னும் விரிவாகப் பார்க்கிறேன், புதிய தரவரிசைகளின் அடிப்படையில் சிறந்த கட்டுரைகளின் புதிய தேர்வுடன் முடிவடையும்.

ஹப்ராஸ்டாடிஸ்டிக்ஸ்: தளத்தின் அதிகம் மற்றும் குறைவாகப் பார்வையிட்ட பகுதிகளை ஆராய்தல்

என்ன நடந்தது என்பதில் ஆர்வமுள்ளவர்களுக்கு, தொடர்ச்சி குறைகிறது.

புள்ளிவிவரங்கள் மற்றும் மதிப்பீடுகள் அதிகாரப்பூர்வமானவை அல்ல, என்னிடம் எந்த உள் தகவலும் இல்லை என்பதை மீண்டும் உங்களுக்கு நினைவூட்டுகிறேன். நான் எங்காவது தவறு செய்யவில்லை அல்லது எதையாவது தவறவிடவில்லை என்பதற்கும் உத்தரவாதம் இல்லை. ஆனாலும், அது சுவாரஸ்யமாக மாறியது என்று நினைக்கிறேன். முதலில் குறியீட்டுடன் தொடங்குவோம்; இதில் ஆர்வம் இல்லாதவர்கள் முதல் பகுதிகளைத் தவிர்க்கலாம்.

தரவு சேகரிப்பு

பாகுபடுத்தியின் முதல் பதிப்பில், பார்வைகளின் எண்ணிக்கை, கருத்துகள் மற்றும் கட்டுரை மதிப்பீடுகள் மட்டுமே கணக்கில் எடுத்துக்கொள்ளப்பட்டன. இது ஏற்கனவே நல்லது, ஆனால் இது மிகவும் சிக்கலான வினவல்களைச் செய்ய உங்களை அனுமதிக்காது. தளத்தின் கருப்பொருள் பிரிவுகளை பகுப்பாய்வு செய்ய வேண்டிய நேரம் இது; இது மிகவும் சுவாரஸ்யமான ஆராய்ச்சி செய்ய உங்களை அனுமதிக்கும், எடுத்துக்காட்டாக, "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'}

ஒப்பிடுகையில், கீக்டைம்ஸ் பிரிவுகள் மிகவும் சுமாரானவை:

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'}

மீதமுள்ள மையங்கள் அதே வழியில் பாதுகாக்கப்பட்டன. இப்போது கட்டுரை கீக்டைம்ஸ் அல்லது சுயவிவர மையத்திற்குச் சொந்தமானதா என்பதை முடிவுகளை வழங்கும் செயல்பாட்டை எழுதுவது எளிது.

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 ஐப் பயன்படுத்தி வெளியிடப்பட்ட கட்டுரைகளின் எண்ணிக்கையை நாங்கள் காண்பிக்கிறோம்:

ஹப்ராஸ்டாடிஸ்டிக்ஸ்: தளத்தின் அதிகம் மற்றும் குறைவாகப் பார்வையிட்ட பகுதிகளை ஆராய்தல்

விளக்கப்படத்தில் "கீக்டைம்கள்" மற்றும் "கீக்டைம்கள் மட்டும்" என்ற கட்டுரைகளை நான் பிரித்தேன் ஒரு கட்டுரை ஒரே நேரத்தில் இரண்டு பிரிவுகளுக்கும் சொந்தமானது (உதாரணமாக, "DIY" + "மைக்ரோகண்ட்ரோலர்கள்" + "C++"). தளத்தில் சுயவிவரக் கட்டுரைகளை முன்னிலைப்படுத்த “சுயவிவரம்” என்ற பெயரைப் பயன்படுத்தினேன்.

இந்த கோடையில் தொடங்கும் கீக்டைம்களுக்கான கட்டுரைகளுக்கான கட்டண விதிகளில் மாற்றத்துடன் தொடர்புடைய “கீக்டைம்ஸ் விளைவு” பற்றி முந்தைய பகுதியில் கேட்டோம். கீக்டைம்ஸ் கட்டுரைகளைத் தனித்தனியாகக் காண்பிப்போம்:

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()

முடிவு சுவாரஸ்யமானது. மொத்தத்தில் கீக்டைம்ஸ் கட்டுரைகளின் பார்வைகளின் தோராயமான விகிதம் 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 ஆம் ஆண்டிற்கான மிகவும் பிரபலமான மையங்களுக்கான மிகவும் பிரபலமான கட்டுரைகளைக் காட்டலாம்.

தகவல் பாதுகாப்பு

நிரலாக்க

பிரபலமான அறிவியல்

வாழ்க்கை

IT இல் சட்டம்

இணைய மேம்பாடு

ஜிடிகே

இறுதியாக, யாரும் புண்படாதபடி, மிகக் குறைவாகப் பார்வையிடப்பட்ட மையமான “gtk” மதிப்பீட்டை வழங்குவேன். ஒரு வருடத்தில் அது வெளியிடப்பட்டது одна கட்டுரை, "தானாகவே" மதிப்பீட்டின் முதல் வரியை ஆக்கிரமித்துள்ளது.

முடிவுக்கு

எந்த முடிவும் இருக்காது. அனைவரும் படிக்க மகிழ்ச்சி.

ஆதாரம்: www.habr.com

கருத்தைச் சேர்