Хабрамегарейтинг: лучшие статьи и статистика Хабра за 12 лет. Часть 2/2

    Привет, Хабр.

    В первой части были рассмотрены некоторые закономерности развития такого интересного ресурса, как habrahabr. Материал получился длинный, так что продолжение здесь. В этой части мы заодно посмотрим как строить такие картинки, и наконец, завершим нашу статистику и рейтинг.



    Кому интересны результаты, прошу под кат.

    Названия статей (word cloud)


    Перед выводом рейтинга статей стало интересно посмотреть, какие же ключевые слова наиболее популярны в заголовках. Вполне очевидно что популярность разных технологий со временем меняется, хочется увидеть это в наглядном виде.

    Это несложно сделать с помощью Python:

    from wordcloud import WordCloud
    
    def split_words(s):
        try:
            words = re.split('[:?., "''()<>-\[\]|!]', s)
            return map(to_ascii, words)
        except:
            return []
    
    def filter_words(s):
        s = s.decode('utf-8').encode("ascii", errors="ignore").decode()
        return len(s) > 2
    
    def to_ascii(s):
        s = s.replace("'", '').replace("-", '').replace("|", '')
        return s.decode('utf-8').encode("ascii", errors="ignore").decode()
    
    titles = df['title'].str.lower()
    ts = titles.apply(lambda x: pd.value_counts(filter(filter_words, split_words(x)))).sum(axis = 0)
    ts = ts.sort_values(ascending=False)
    print(ts[:50])
    print()
    
    s_all = ""
    for p in range(min(ts.shape[0], 200)):
        s_all += (ts.index[p] + ' ') * int(ts.values[p])
    
    wc = WordCloud(width=1600, height=1200, background_color="white",
                   relative_scaling=1.0, collocations=False,
                   ).generate(s_all)
    plt.figure(figsize=(9,6))
    plt.title("%d" % year)
    plt.xticks([])
    plt.yticks([])
    plt.tight_layout()
    file_name = 'habr-words-%d.png' % year
    plt.savefig(file_name)
    

    Однако выводить «простыню» из 12 картинок, было бы неудобно — сделаем все это в виде gif-анимации. Вынесем код в отдельную функцию и запустим ее циклически для нужного диапазона лет.

    import imageio
    
    images = []
    for y in range(2006, 2019+1):
        file_name = make_words_cloud(df, y)
        images.append(imageio.imread(file_name))
    imageio.mimsave('habr-words.gif', images, duration=2)
    

    И последний момент: чтобы слова было удобнее сравнивать, сделаем так, чтобы одинаковым словам всегда соответствовали одинаковые цвета.

    colors_dict = dict()
    
    def random_color_func_(word=None, font_size=None, position=None, orientation=None, font_path=None, random_state=None):
        if word in colors_dict:
            return colors_dict[word]
        else:
            c = random_color_func(word, font_size, position, orientation, font_path, random_state)
            colors_dict[word] = c
            return c
    
    wc = WordCloud(width=2600, height=2200, background_color="white", relative_scaling=1.0, collocations=False, color_func=random_color_func_).generate(text)
    ...
    

    Окончательный результат в виде GIF:



    И размер слов (он пропорционален количеству вхождений) и их разнообразие говорят сами за себя. Некоторые закономерности интересны — незыблимо остался на первом месте лишь Google, ушли в прошлое Flash, Opera и Yahoo, про Amazon 10 лет назад никто еще не писал, да и не было таких названий как Tesla, Kotlin или GDPR.

    Была сделана аналогичная попытка создать распределение для русских слов, однако она закончилась полным провалом — из-за склонений приставок и окончаний в русском языке результат больше напоминал генератор случайных чисел. Попытка «нормализации» всего этого, выделения существительных, приведения их к именительному падежу и пр, наверно потребовала бы не этой статьи, а объема диссертации. А было бы заманчиво посмотреть, насколько например поднялось в рейтинге цитируемости слово «Роскомнадзор» или «Дума» (но не будем о грустном).

    На этом мы наконец-таки закончим с программированием, и перейдем к собственно рейтингу.

    Рейтинг


    Еще раз повторюсь, что рейтинг неофициальный, и абсолютной достоверности не гарантируется. Если например, сервер на какой-то статье вернул timeout, то такая статья в список не попадет. Возможно существуют еще какие-то скрытые индексы, про которые я не знаю. Проверить вручную 206тыс статей с 2006 по 2019 год довольно сложно. Если кто-то из авторов не нашел себя в рейтинге, но уверен что должен там быть, пишите, добавлю вручную. Какие-то статьи 10-летней давности возможно, уже устарели, ну впрочем, тем и интереснее — какие-то забытые моменты можно вспомнить.

    Поехали :) Ну и всех авторов, заочно поздравляю с попаданием в супер-топ. Хотя имена не анализировались при парсинге и не записаны в рейтинг, но думаю, те кто создавал статьи, «себя» наверно, узнают.

    Правка: как заметили некоторые пользователи, пара статей повторяется дважды. Это не ошибка парсинга, эти статьи действительно выкладывались повторно — ссылки разные, а редирект ведет на ту же самую статью.

    Топ-20 статей по числу просмотров


    Взломать Wi-Fi за… 3 секунды 2000000 просмотров, 63 комментария, рейтинг +112.0/-21.0
    Скрытые смайлы в Skype 1655000 просмотров, 69 комментариев, рейтинг +173.0/-74.0
    Пишем своё первое приложение на Android 1535000 просмотров, 95 комментариев, рейтинг +123.0/-15.0
    300 потрясающих бесплатных сервисов 1482000 просмотров, 104 комментария, рейтинг +325.0/-16.0
    Взломать Wi-Fi за 10 часов 1416000 просмотров, 164 комментария, рейтинг +294.0/-10.0
    Сети для самых маленьких. Часть нулевая. Планирование 1388000 просмотров, 133 комментария, рейтинг +100.0/-4.0
    Wi-Fi: неочевидные нюансы (на примере домашней сети) 1186000 просмотров, 138 комментариев, рейтинг +231.0/-3.0
    Учим Python качественно 1181000 просмотров, 87 комментариев, рейтинг +59.0/-27.0
    Начинающим Java программистам 1084000 просмотров, 58 комментариев, рейтинг +113.0/-7.0
    1000+ часов видео по Java на русском 1076000 просмотров, 38 комментариев, рейтинг +111.0/-9.0
    Программирование под Android для начинающих. Часть 1 1043000 просмотров, 29 комментариев, рейтинг +50.0/-34.0
    Практика настройки Mikrotik для чайников 1006000 просмотров, 114 комментариев, рейтинг +34.0/-5.0
    5 практических советов по эксплуатации литий-ионных аккумуляторов 999000 просмотров, 34 комментария, рейтинг +21.0/-2.0
    Еще раз про IP-адреса, маски подсетей и вообще 972000 просмотров, 203 комментария, рейтинг +261.0/-25.0
    Как начать работать с GitHub: быстрый старт 948000 просмотров, 50 комментариев, рейтинг +165.0/-17.0
    27+ ресурсов для онлайн-обучения 939000 просмотров, 68 комментариев, рейтинг +163.0/-11.0
    Памятка пользователям ssh 925000 просмотров, 135 комментариев, рейтинг +352.0/-8.0
    Что такое CRM-системы и как их правильно выбирать? 916000 просмотров, 30 комментариев, рейтинг +21.0/-7.0
    Простая стратегия игры 2048 897000 просмотров, 43 комментария, рейтинг +63.0/-20.0
    Откровенные фото Дженнифер Лоуренс и еще десятков знаменитостей утекли через iCloud 895000 просмотров, 328 комментариев, рейтинг +183.0/-23.0

    Топ-20 статей по рейтингу


    Делаем приватный монитор из старого LCD монитора, 320 комментариев, рейтинг +1466.0/-18.0, 486000 просмотров
    Были получены исходники 3300 глобальных интернет-проектов, 909 комментариев, рейтинг +1190.0/-36.0, 240000 просмотров
    История игрушки. Поле Чудес, 302 комментария, рейтинг +923.0/-10.0, 150000 просмотров
    Как Денис Крючков выкупил Хабр у Mail.ru, 337 комментариев, рейтинг +817.0/-35.0, 275000 просмотров
    Воронежец заключил с банком договор, внеся свои правки, и собирается отсудить 24 миллиона рублей, 860 комментариев, рейтинг +778.0/-25.0, 397000 просмотров
    За что конкретно я ненавижу некоторых отдельно взятых маркетологов — или как айтишник по магазинам ходил, 777 комментариев, рейтинг +769.0/-45.0, 591000 просмотров
    Стив Джобс умер, 648 комментариев, рейтинг +783.0/-75.0, 22700 просмотров
    Принцип цикады и почему он важен для веб-дизайнеров, 119 комментариев, рейтинг +682.0/-14.0, 172000 просмотров
    Как мы искали Марс-3, 169 комментариев, рейтинг +669.0/-8.0, 225000 просмотров
    Прекратите скручивать!, 337 комментариев, рейтинг +667.0/-15.0, 865000 просмотров
    История интернет-магазина, ставшего мировым монополистом за $5 000, 189 комментариев, рейтинг +641.0/-5.0, 81800 просмотров
    Спать мало, но правильно?, 420 комментариев, рейтинг +670.0/-43.0, 464000 просмотров
    Что не так с редизайном Хабрахабра, 361 комментарий, рейтинг +673.0/-62.0, 143000 просмотров
    Читаем QR код, 103 комментария, рейтинг +612.0/-9.0, 490000 просмотров
    Уязвимость на Habrahabr или как украсть инвайт, 138 комментариев, рейтинг +600.0/-19.0, 160000 просмотров
    Деревянная мышь. История проекта, 440 комментариев, рейтинг +574.0/-6.0, 137000 просмотров
    Нифига себе сходил за хлебушком, или история одного взлома, 147 комментариев, рейтинг +576.0/-16.0, 102000 просмотров
    30 копеек для Михалкова, 295 комментариев, рейтинг +588.0/-29.0, 28700 просмотров
    Как я наказал Firaxis или история о том, как перебрать бинарный движок через глушитель, 176 комментариев, рейтинг +547.0/-4.0, 95100 просмотров
    Бейджи для Хабра, версия, 143 комментария, рейтинг +552.0/-10.0, 18500 просмотров

    Топ-20 статей по относительному рейтингу


    Обновление версий Android: печальная статистика 10000 просмотров, рейтинг +412.0/-46.0
    Расписание выхода статей на Хабре (на любую неделю) 12000 просмотров, рейтинг +418.0/-14.0
    Поможем Сбербанку 12300 просмотров, рейтинг +424.0/-18.0
    С Днем программиста! 13100 просмотров, рейтинг +0.0/-0.0
    Стив Джобс умер 22700 просмотров, рейтинг +783.0/-75.0
    QIP — Минутка ненависти (хистори на сервере) 12100 просмотров, рейтинг +413.0/-44.0
    Прогрессивные технологии, как способ выжать из сервера максимум 10300 просмотров, рейтинг +314.0/-4.0
    Бейджи для Хабра, версия 18500 просмотров, рейтинг +552.0/-10.0
    Про системного администратора, обыск в его квартире и незаконное изъятие компьютерной техники 10800 просмотров, рейтинг +344.0/-37.0
    Про системного администратора, обыск в его квартире и незаконное изъятие компьютерной техники 10800 просмотров, рейтинг +344.0/-37.0
    Как был взломан Вконтакте.ру 11300 просмотров, рейтинг +381.0/-71.0
    Медиамагия: Приходишь домой, берёшь пульт и выбираешь, чтобы посмотреть с трекера 11700 просмотров, рейтинг +318.0/-12.0
    Русский Наебизнес 12500 просмотров, рейтинг +355.0/-31.0
    Русский Наебизнес 12500 просмотров, рейтинг +355.0/-31.0
    Мысли вслух о протоколе X 10600 просмотров, рейтинг +283.0/-11.0
    Грустная статистика или никогда не надейтесь на фрилансеров 12400 просмотров, рейтинг +365.0/-49.0
    Что же яблофилы и яблофобы так и не поняли? 16700 просмотров, рейтинг +0.0/-0.0
    Мал, да удал: Trojan-Downloader.Win32.Tiny 13300 просмотров, рейтинг +351.0/-14.0
    Это Вы купили программу? Да ладно... 13000 просмотров, рейтинг +371.0/-42.0
    IT-эмиграция в Страну Улыбок, в Тайланд 10400 просмотров, рейтинг +271.0/-11.0
    Боитесь что снова закроют ex.ua? Не стоит — все можно скачать на сервере Министерства внутренних дел Украины 13000 просмотров, рейтинг +332.0/-7.0
    Живая каркасная модель мотоцикла 11200 просмотров, рейтинг +302.0/-24.0

    Топ-20 по числу закладок


    300 потрясающих бесплатных сервисов 1482000 просмотров, 9119 закладок
    Памятка пользователям ssh 925000 просмотров, 5822 закладки
    27+ ресурсов для онлайн-обучения 939000 просмотров, 4851 закладка
    Сети для самых маленьких. Часть нулевая. Планирование 1388000 просмотров, 4347 закладок
    Прекратите скручивать! 865000 просмотров, 4330 закладок
    Спать мало, но правильно? 464000 просмотров, 3946 закладок
    1000+ часов видео по Java на русском 1076000 просмотров, 3616 закладок
    Знай сложности алгоритмов 522000 просмотров, 3563 закладки
    Делаем приватный монитор из старого LCD монитора 486000 просмотров, 3539 закладок
    Принцип цикады и почему он важен для веб-дизайнеров 172000 просмотров, 3511 закладок
    Ускорение загрузки Windows for fun and profit 448000 просмотров, 3497 закладок
    Взломать Wi-Fi за 10 часов 1416000 просмотров, 3405 закладок
    Руководство по оформлению HTML/CSS кода от Google 266000 просмотров, 3349 закладок
    Шпаргалка по шаблонам проектирования 785000 просмотров, 3344 закладки
    Несколько полезных сервисов 121000 просмотров, 3319 закладок
    Топ-5 самых впечатляющих книг, которые должен прочесть каждый разработчик ПО 319000 просмотров, 3277 закладок
    Много бесплатных книг по программированию 282000 просмотров, 3203 закладки
    Подборка полезного для любителей Twitter Bootstrap 248000 просмотров, 3079 закладок
    Wi-Fi: неочевидные нюансы (на примере домашней сети) 1186000 просмотров, 3070 закладок
    Хочешь быть iOS разработчиком? Будь им! 377000 просмотров, 2980 закладок

    Топ-20 по отношению числа закладок к просмотрам


    Шпаргалки для тех, кто делает первые шаги 1114 закладок, 15900 просмотров
    Упражнения по взлому Linux-систем 876 закладок, 13300 просмотров
    Анатомия шрифта 1495 закладок, 22700 просмотров
    38 статей о создании закругленных углов на сайтах 677 закладок, 10400 просмотров
    Где погрызть гранит науки 830 закладок, 13200 просмотров
    Прогрессивные технологии, как способ выжать из сервера максимум 646 закладок, 10300 просмотров
    Торрент лекций Лекториум 947 закладок, 16200 просмотров
    Полезные ссылки для изучения CSS анимации 1280 закладок, 22300 просмотров
    Новые бесплатные онлайн курсы от Stanford 623 закладки, 11300 просмотров
    UICloud: Самая большая база пользовательских интерфейсов 1780 закладок, 32400 просмотров
    Подборка html/javascript/css инструментов и библиотек от SmashingMagazine 1000 закладок, 18400 просмотров
    8 полезных сервисов для веб-разработчика и дизайнера 1658 закладок, 33800 просмотров
    Лекториум записал почти тысячу лекций за год 2516 закладок, 54200 просмотров
    IPO for dummies. Часть I: акции, мажоритарии, контроль над компанией 564 закладки, 12200 просмотров
    Кроссбраузерная одноцветная полупрозрачность 499 закладок, 11000 просмотров
    Медиамагия: Приходишь домой, берёшь пульт и выбираешь, чтобы посмотреть с трекера 518 закладок, 11700 просмотров
    Скринкасты о том, как резать и натягивать 448 закладок, 10300 просмотров
    Noty — необычайно гибкий плагин jQuery для вывода уведомлений 1099 закладок, 26200 просмотров
    Визуализация данных 491 закладка, 12200 просмотров
    9 статей на тему круглых кнопок 396 закладок, 10100 просмотров

    Топ-20 самых «спорных» статей


    Первый пост, 667 комментариев, рейтинг +596.0/-445.0
    Дискриминация пользователей ВКонтакте, 319 комментариев, рейтинг +399.0/-258.0
    Почему упал Вконтакте, 380 комментариев, рейтинг +306.0/-255.0
    Пора завязывать использовать символы табуляции в коде, 217 комментариев, рейтинг +258.0/-234.0
    И чтец, и на дуде игрец, 175 комментариев, рейтинг +337.0/-233.0
    Прощай, карма или Кому нужен iPad?, 520 комментариев, рейтинг +661.0/-223.0
    Неюзабельные продукты от Apple, 504 комментария, рейтинг +397.0/-218.0
    Бессмысленная 'Операционная Система', 325 комментариев, рейтинг +394.0/-215.0
    Чо! Мейл.ру. Чо?, 497 комментариев, рейтинг +316.0/-205.0
    Пепяка, 255 комментариев, рейтинг +239.0/-204.0
    Костюм лисички-Firefox [фото], 105 комментариев, рейтинг +285.0/-204.0
    Давайте поговорим о Microsoft, 990 комментариев, рейтинг +261.0/-201.0
    OpenSource-курсач, или заставляем преподавателя выпасть в осадок, 538 комментариев, рейтинг +276.0/-200.0
    Браузер Yandex, 825 комментариев, рейтинг +266.0/-199.0
    Merchant API, 136 комментариев, рейтинг +231.0/-198.0
    Бог — бестолковый гейм-дизайнер, 531 комментарий, рейтинг +351.0/-195.0
    Почему я отказался от Mozilla Firefox, 324 комментария, рейтинг +225.0/-193.0
    'Тайна' журнала Vogue, 199 комментариев, рейтинг +225.0/-189.0
    Орден Белых Рыцарей Хабра, 553 комментария, рейтинг +213.0/-188.0
    Весь PHP в двух строчках, 322 комментария, рейтинг +240.0/-187.0

    Топ-20 самых комментируемых статей


    Моё разочарование в софте 2435 комментариев, 278000 просмотров
    Как раздавать инвайты на Google+ 2266 комментариев, 17600 просмотров
    Hello, world! 2194 комментария, 10300 просмотров
    Лучшие компьютерные игры всех времен и народов по версии хабрасообщества 2013 года 1887 комментариев, 163000 просмотров
    Про рынок ИТ в России по-честному 1834 комментария, 128000 просмотров
    Раздача слонов или инвайты на Google+ 1829 комментариев, 1500 просмотров
    Ещё +2Гб для вашего DropBox аккаунта. На сей раз, промо-акция DropBox и Three.com.hk 1729 комментариев, 13600 просмотров
    Праздничная раздача инвайтов! 1663 комментария, 1300 просмотров
    Slack банит аккаунты из Крыма 1660 комментариев, 64200 просмотров
    Первая версия Opera 15 для компьютеров 1585 комментариев, 187000 просмотров
    Хватит подозревать разрабов в самозванстве. Научитесь лучше собеседовать 1579 комментариев, 111000 просмотров
    Завершено самое масштабное исследование влияния ГМО на здоровье человека 1579 комментариев, 224000 просмотров
    Инвайты на Google Wave 1476 комментариев, 408 просмотров
    Зачем нужны попы в ВУЗе? 1475 комментариев, 157000 просмотров
    Чего вам не хватает для полного перехода с windows на linux? 1381 комментарий, 17600 просмотров
    Ракета 9М729. Несколько слов о «нарушителе» Договора РСМД 1371 комментарий, 83000 просмотров
    Инвайты на Турбофильм! 1313 комментариев, 2200 просмотров
    Приверженцы статической и динамической типизаций никогда не поймут друг друга. И TypeScript им не поможет 1301 комментарий, 49300 просмотров
    Иди-ка ты на !@# со своей 'токсичностью' 1300 комментариев, 176000 просмотров
    Amazon сдался и повысил зарплаты сотрудникам 1288 комментариев, 63600 просмотров

    Антитоп-20 статей с самым большим числом дизлайков


    Первый пост, 667 комментариев, рейтинг +596.0/-445.0
    Дискриминация пользователей ВКонтакте, 319 комментариев, рейтинг +399.0/-258.0
    Почему упал Вконтакте, 380 комментариев, рейтинг +306.0/-255.0
    Пора завязывать использовать символы табуляции в коде, 217 комментариев, рейтинг +258.0/-234.0
    И чтец, и на дуде игрец, 175 комментариев, рейтинг +337.0/-233.0
    Прощай, карма или Кому нужен iPad?, 520 комментариев, рейтинг +661.0/-223.0
    Неюзабельные продукты от Apple, 504 комментария, рейтинг +397.0/-218.0
    Бессмысленная 'Операционная Система', 325 комментариев, рейтинг +394.0/-215.0
    Чо! Мейл.ру. Чо?, 497 комментариев, рейтинг +316.0/-205.0
    Пепяка, 255 комментариев, рейтинг +239.0/-204.0
    Костюм лисички-Firefox [фото], 105 комментариев, рейтинг +285.0/-204.0
    Давайте поговорим о Microsoft, 990 комментариев, рейтинг +261.0/-201.0
    OpenSource-курсач, или заставляем преподавателя выпасть в осадок, 538 комментариев, рейтинг +276.0/-200.0
    Браузер Yandex, 825 комментариев, рейтинг +266.0/-199.0
    Merchant API, 136 комментариев, рейтинг +231.0/-198.0
    Бог — бестолковый гейм-дизайнер, 531 комментарий, рейтинг +351.0/-195.0
    Почему я отказался от Mozilla Firefox, 324 комментария, рейтинг +225.0/-193.0
    'Тайна' журнала Vogue, 199 комментариев, рейтинг +225.0/-189.0
    Орден Белых Рыцарей Хабра, 553 комментария, рейтинг +213.0/-188.0
    Весь PHP в двух строчках, 322 комментария, рейтинг +240.0/-187.0

    Бонус


    И небольшой бонус для тех, кто дочитал до сюда — выложим мини-рейтинг статей, написанных на английском. Этот рейтинг по сути за один год, т.к. раньше из просто не было, но что есть, то есть. Чтобы его получить, достаточно добавить одну строчку кода — выбрать в фильтре статьи, имеющие "/en/" в поле link:

    df = df[df['link'].str.contains("/en/")]

    Результаты приведены ниже. Все категории приводить не буду, т.к. англоязычных статей пока мало, и многое повторяется.

    Топ англоязычных статей по числу просмотров


    I ruin developers' lives with my code reviews and I'm sorry 164000 просмотров, 12 комментариев, рейтинг +33.0/-3.0
    A small notebook for a system administrator 98300 просмотров, 56 комментариев, рейтинг +88.0/-3.0
    Flightradar24 — how it works? 91000 просмотров, 12 комментариев, рейтинг +74.0/-1.0
    I lost faith in the industry, burned out, but the cult of the tool saved me 30400 просмотров, 2 комментария, рейтинг +21.0/-2.0
    PC Speaker To Eleven 24600 просмотров, 0 комментариев, рейтинг +31.0/-2.0
    Making a DIY text laser projector 22900 просмотров, 5 комментариев, рейтинг +25.0/-1.0
    A bot for Starcraft in Rust, C or any other language 21200 просмотров, 3 комментария, рейтинг +44.0/-1.0
    Hello world! Or Habr in English, v1.0 21000 просмотров, 249 комментариев, рейтинг +178.0/-2.0
    Running image viewer from Windows XP on modern Windows 8900 просмотров, 1 комментарий, рейтинг +25.0/-2.0
    Yet another plea against using public WiFi 8000 просмотров, 0 комментариев, рейтинг +17.0/-1.0
    Real-time edge detection using FPGA 7500 просмотров, 45 комментариев, рейтинг +41.0/-14.0
    Stack-based calculator on the Cyclone IV FPGA board 7200 просмотров, 27 комментариев, рейтинг +58.0/-17.0
    On higher education, programmers and blue-collar job 7100 просмотров, 7 комментариев, рейтинг +22.0/-1.0
    I am a useless idiot, so I want to quit my job: 10 questions to a software developer, a pilot episode 7000 просмотров, 6 комментариев, рейтинг +24.0/-0.0
    Vim for beginners 6400 просмотров, 2 комментария, рейтинг +19.0/-0.0
    Do more with patterns in C# 8.0 5700 просмотров, 5 комментариев, рейтинг +18.0/-2.0
    Naive Math: the Mendocino motor and Earnshaw's theorem 5300 просмотров, 1 комментарий, рейтинг +44.0/-1.0
    ?Wanna Play a Detective? Find the Bug in a Function from Midnight Commander 5100 просмотров, 0 комментариев, рейтинг +31.0/-0.0
    How does a barcode work? 4500 просмотров, 0 комментариев, рейтинг +20.0/-2.0
    How to learn English 4400 просмотров, 17 комментариев, рейтинг +15.0/-1.0

    Топ англоязычных статей по числу закладок


    Flightradar24 — how it works? 91000 просмотров, 28 закладок
    How to learn English 4400 просмотров, 21 закладка
    A small notebook for a system administrator 98300 просмотров, 19 закладок
    Vue, Storybook, TypeScript-starting a new project with the best practices in mind 2700 просмотров, 17 закладок
    Hello world! Or Habr in English, v1.0 21000 просмотров, 16 закладок
    Vim for beginners 6400 просмотров, 15 закладок
    A bot for Starcraft in Rust, C or any other language 21200 просмотров, 14 закладок
    Kalman Filter 2000 просмотров, 11 закладок
    Things you need to know should you want to switch from PHP to Python 2700 просмотров, 11 закладок
    Isometric Plugin for Unity3D 1500 просмотров, 10 закладок
    Ternary computing: basics 2100 просмотров, 10 закладок
    I ruin developers' lives with my code reviews and I'm sorry 164000 просмотров, 9 закладок
    Currying and partial application in C++14 1300 просмотров, 9 закладок
    Time Series Modelling 1100 просмотров, 8 закладок
    Generic Methods in Rust: How Exonum Shifted from Iron to Actix-web 3300 просмотров, 8 закладок
    .NET Reference Types vs Value Types. Part 1 1400 просмотров, 8 закладок
    How do technical indicators on stock market actually work? 791 просмотров, 7 закладок
    Making a DIY text laser projector 22900 просмотров, 7 закладок
    Send an email with attachements by JavaMailSender from SpringFramework 563 просмотров, 7 закладок
    Low-budget stereo rendering in few lines of code (stereogram, anaglyph, stereoscope) 1100 просмотров, 7 закладок

    Выводы


    Выводов не будет. Всем спасибо за внимание, и приятного чтения :)
    Поделиться публикацией

    Комментарии 39

      +5
      Вот бы в в топе статей была статья про топ статей.
        0

        Рассел бы поставил лайк

        0

        Для нормализации можно использовать один из существующих стеммеров
        Проще всего установить стеммер от Яндекса (yandex mystem), который достаточно хорошо работает с русскими словами и работает как сервис (все вычисления происходят на сервере)

          +1
          Спасибо, поэкспериментирую. Хотя сомневаюсь, что они дадут сделать 200тыс запросов «без регистрации и SMS» :)

          Если кому интересно попробовать, исходник в CSV тут: cloud.mail.ru/public/GgYT/KEXDzixsS
            +1

            Mystem.exe я вызываю локально из R. Вполне хорошо работает. Для питона рекомендую pymorphy2. Это вообще огонь.

              +1

              А я раньше дергал из R питоновский pymorphy2, но потом обнаружил udpipe, который очень прилично работает с русским языком.

                0
                Почему-то моя попытка использовать udpipe показала, что леммы получаются для некоторых слов странные, с опечатками. Я повторю, для некоторых. Но если эти странные словоформы увидят главные редактора (лингвисты и гуманитарии), мне будет очень не удобно.

                Еще один нюанс. Оказалось, что вызов основного лемматизирующего метода в udpipe не параллелится, потому что модель факт. лежит на диске и к ней осуществляется вызов по ссылке, получается ошибка. А это очень жаль, потому что хотелось бы параллельное исполнение, ибо материала очень много. Я пробовал это с помощью doParallel если что.
              0

              Не быстро, но дадут)

                +1
                Спасибо за файлик ) Теперь когда я хочу что то найти на хабре я делаю например так:
                awk -F "," 'BEGIN {i=0} {if ($3 ~ /Redis/) {print $1 " " $3 " " $2;i++}} END {print "Total: " i "/" NR}' habr_all.txt
                  +1
                  pymorphy2 весьма неплох

                  Заголовок спойлера
                  # coding: utf-8
                  import pymorphy2
                  import string
                  
                  class Normalizer(object):
                  
                      def __init__(self, space_chars='\t\n\r', strip_chars=string.punctuation, min_word_len=3):                
                          self.min_word_len = min_word_len
                          self.parser = pymorphy2.MorphAnalyzer()
                          self.translator = str.maketrans(space_chars, ' '*len(space_chars), strip_chars)
                      
                      def normalize(self, sentense):
                          sentense = sentense.translate(self.translator)
                          words = sentense.split(' ')
                          norm_words = [
                              self.parser.parse(word)[0].normal_form for word in words 
                              if len(word) >= self.min_word_len
                          ]
                          return norm_words
                  
                  norm = Normalizer()
                  print(norm.normalize('Хабрамегарейтинг: лучшие статьи и статистика Хабра за 12 лет. Часть 2/2'))
                  
                  # >>> ['хабрамегарейтинг', 'хороший', 'статья', 'статистика', 'хабра', 'год', 'часть']
                  

                    0
                    Спасибо. Уже попробовал, вполне неплохо работает.
                  0
                  Набрал в гугле «программа анализа текста» и получил кучу ссылок. Задача очень востребованная. Есть он-лайн и офф-лайн ПО, есть бесплатное, есть с бесплатным пробным периодом. Похоже есть что выбрать для данного исследования.
                  +2

                  Давайте 3 часть: предсказание рейтинга публикации по тексту публикации, с токенизайией, ембеддингом и deep learning ом.

                    0
                    Отличная идея! Было бы интересно: загрузить в прогу черновик статьи и получить прогноз по рейтингу, а потом сравнить с реальностью. А если кроме прогноза будут советы по улучшению, то будет вообще бесценный инструмент. Выдают ведь компиляторы «варнинги» на строки в исходном коде, где высокая вероятность ошибки, м.б. и для естественного языка что-то подобное (пусть и несложное) возможно?
                      0

                      It's doable. Я реализовал эту идею в ТАССе: модель предсказывает рейтинг статей. Про остальное попозже отвечу.

                        0
                        В теории точно возможно, а на практике как сделать не вполне понятно. Вот если бы была простая модель, типа линейной регрессии или несложной полносвязной нейронки, можно после ее обучения получить ответ на вопрос, какие входы модели максимизируют выхлоп. Для этого берется производная не по параметрам, а по входам и делается градиентное восхождение до максимизации.

                        С текстом посложнее. Как вариант текст будет многомерным временным рядом и обучаться будет рекурр.сеть. Как там оптимизировать входы это вопрос. Даже если все получится, не факт, что «оптимальный» с тчк.зр. нейронки текст вообще будет читаться. Но вопрос интересный, да. Как минимум, можно написать класс «новость» (хе хе я уже мыслю как на работе), который будет содержать метод перестановки абзацев и предложений, да и слов в предложении. Рекуррентная сетка будет давать разный отклик на один и тот же текст с разным позиционированнием слов.
                          0
                          Если я правильно понял, то есть модель, которая предсказывает рейтинг статей, но объяснить почему получился низкий или высокий рейтинг она не может. Это открытая проблема ИИ, на Хабре был ряд публиказий на эту тему. ИМХО цель не чтобы программа переписала статью, а чтобы она показала что конкретно ей понравилось и не понравилось в статье. Как компилятор сообщает «данная переменная нигде не используется», «функция может вернуть неопределенный результат». Чекер в Ворде пытается улучшать тексты, но получается у него не очень. ИМХО тут нужно найти золотую сердину не замахиваясь на слишком многое.
                            0
                            Ну, да. Проблема открытая, она жутко сложная по реализации, даже если понятны примитивы.

                            Ну, вот, пользователь читает ПРЕДЛОЖЕНИЯ. Например, «ии от компании х выиграл у людей в игре z. Тут все важно, комбинация слов важна, то есть, предложение. Сама по себе тема ИИ уже оскомину набила. Компания какая-то мало кому известна, игре уже 20 лет, а игроки сотнями партий проигрывают. Но в связке, можно сказать, максимизирует счастья энтропия предложения. Вот как это выделить в виде фактора требующего улучшения вопрос хороший.
                              0
                              Но в связке, можно сказать, максимизирует счастья энтропия предложения. Вот как это выделить в виде фактора требующего улучшения вопрос хороший.
                              А как существующая модель предсказания рейтинга выделяет? Или она не учитывает такую энтропию, а делает прогноз по другим параметрам и другим предложениям?

                              И не менее интересный вопрос: от чего в основном зависит рейтинг? Если смотреть по комментам, то у меня с большим отрывом от прочих моих комментов идет:

                              > как вы проверите?
                              Подключим центрифугу и посмотрим нормально ли она работает:)


                              Ну, удачно пошутил и не более того. Может удачная шутка в статье гораздо важнее оскомины от темы?
                                0
                                А как существующая модель предсказания рейтинга выделяет? Или она не учитывает такую энтропию, а делает прогноз по другим параметрам и другим предложениям?


                                моя модель работает на векторном представлении СЛОВ, которые образуют естественные последовательности, обрабатываются как обычный временной ряд рекурретной сетью. Интуиция здесь отпадает потому что это просто игра в цифирь. Нейронка видит например вектор слов (которые сами вектора) длиной 300 пропускает это дело через рекуррентный слой, а на выходе решает регрессионную задачу минимизации СКО ошибок. То есть тут нет мега крутой философии и логики, просто текста как оказалось содержат информацию о своем рейтинге )))

                                Если подставлять разные последовательности слов и предложений НС выдает разный результат даже для текстов с одним и тем же смыслом. То есть это более гибкий подход, чем, например, старый добрый мешок слов, где поф. на последовательность, а важна частота термина.
                                  0
                                  Интуиция здесь отпадает потому что это просто игра в цифирь. Нейронка видит например вектор слов (которые сами вектора) длиной 300 пропускает это дело через рекуррентный слой, а на выходе решает регрессионную задачу минимизации СКО ошибок. То есть тут нет мега крутой философии и логики
                                  Философия однако есть — интересный философский вопрос: почему предсказывает правильно (м.б. не всегда), если «просто игра в цифирь»? Если логически труднообъяснимо, то философски еще более интересно ;)
                                    +1
                                    Это черный ящик, раз предсказывает хорошо, значит тексты несут в себе ту изюминку, которая разрастается в популярность. Я хотел попробовать подход прозрачный ящик, в ходе которого токенам присваивались бы веса значимости и тогда все становится понятно. Пример на новостях — текст содержит слова «самолет», «взрыв», «теракт». Можно сделать регрессионную модель, которая посчитает вклад каждого слова в финальный коэффициент популярности текста. И тогда все ясно- чем больше определенных слов, тем популярнее текст. А с нейронкой не так просто. Там очень сложная вложенная формула с сотнями нелинейных функций и тысячами параметров. Сложно разобрать.
                                      0
                                      А с нейронкой не так просто. Там очень сложная вложенная формула с сотнями нелинейных функций и тысячами параметров. Сложно разобрать.

                                      Ok. Ожидаемый ответ. Часто отмечают:
                                      Нейросети известны своей непостижимостью – компьютер может выдать хороший ответ, но не сможет объяснить, что привело его к такому заключению.

                                      Вики пишет:
                                      Иску́сственная нейро́нная се́ть (ИНС) — математическая модель, а также её программное или аппаратное воплощение, построенная по принципу организации и функционирования биологических нейронных сетей — сетей нервных клеток живого организма.
                                      Однако строго не доказано, что это достаточно полная и адекватная модель, и что мозг человека работает так, как модельная нейросеть. Просто мы недостаточно знаем, как он работает.

                                      Многие задачи могут быть решены разными способами. Нпр, тут я привел не-ИИ решение задачи, которую ранее решали генетическим алгоритмом.

                                      Другой более известный пример на эту тему. М.М.Ботвинник безуспешно пытался научить ЭВМ игре в шахматы. Так как играет он сам. Потом это удалось с помощью альфа-бета алгоритма. Но не один живой шахматист не использует альфа-бету.
                                      Я хотел попробовать подход прозрачный ящик
                                      Непросто будет найти такой эффективный подход.
                                        0

                                        Не все обязательно решать НС. Но ее мощь велика. Точной теории почему она работает нет, но ясно, что там моделируются нелинейные зависимости, а градиентный спуск почти всегда даёт приемлемый ответ.

                                          0
                                          Но ее мощь велика.

                                          Да.
                                          Точной теории почему она работает нет

                                          Важное замечание.
                                          градиентный спуск почти всегда даёт приемлемый ответ
                                          Ключевое слово "почти всегда". Действительно, если модель не всегда, а в 90 случаев из 100 будет давать верный прогноз рейтинга статьи — это будет отличный результат. И вопрос
                                          почему нейронным сетям повсюду мерещатся овцы
                                          будет выглядеть скорее теоретически-философским, чем практическим. От десятка неверных прогнозов катастрофы не произойдет. Но вот если робомобиль в 10 случаев из 100 не сможет объехать пешехода, то такой результат вряд ли стоит считать приемлемым. Ситуацию можно сравнить с эвристическими алгоритмами (не обязательно из области ИИ): для многих задач приемлемо, если алгоритм не всегда, но достаточно часто дает верное решение. При этом корректность такого алгоритма не доказывается: может потому, что автор не смог придумать доказательства (может оно и в принципе невозможно), а может и потому, что автору просто лень возиться с доказательством ;)
                      +3
                      Отдельный вопрос: интересно, а сколько процентов от этих «топовых» статей сохранили актуальность?
                      Обсуждение QIP, инвайтов на Google+, множество других устаревших материалов…
                        0
                        Я думаю так — модель будет опираться не на сами ключевые термины (хотя отчасти и на них), а на контекст их использования. Поэтому некоторую обобщающую способность можно выжать, типа если речь про сетевые технологии, то средненько, а если про большие компании, то побольше.

                        Вот лично мне реально интересно, сможет ли НС научиться меняющимся моде и духу самого сообщества, включая также меняющийся лексикон и просто привычки. Юмор туда же. Думаю, хорошая статья, набравшая много лайков, затрагивает глубинные чувства людей (масс) и разговаривает на их языке. По этому принципу можно наклепать до черта материалов, которые будут просто приятным чтивом.

                        Если нейронка сможет обобщать эти абстракции то это будет большой вин для машин.обуч.
                        0
                        Вопрос.
                        А код запросов на синхронном питоне?
                        Просто для такого кол-ва запросов было бы неплохо асинхронный Python(aiohttp) или вообще на чем-нибудь быстрее питоне
                          0
                          Запросы специально делались в один поток, чтобы не нагружать сервер.
                          0
                          Интересно посмотреть на топ-n комментариев за все время
                            0
                            Спасибо, только сейчас узнал, что есть хабрастатьи на английском. При подписке на узкий список хабов можно что-то упустить.

                            Кстати, заметил два дубликата в списке по относительному рейтингу: «Про системного администратора, обыски...» и «Русский н##бизнес».
                              0
                              Это не ошибка парсинга, эти статьи действительно выкладывались повторно — ID разные, а редирект ведет на ту же самую статью.
                                0
                                Логично было бы оставить только таргет-статью, а в топ включить следующую по сортировке (21-ю в случае с одним дублем в топе).
                                  0
                                  Да, в рейтинг добавлена 21я статья, если внимательно посмотрите :)

                                  Я оставил дубль т.к. сам эффект мне показался интересным, я например не знаю как редирект со статьи на статью сделать. Возможно некоторые популярные статьи перевыкладываются редакцией периодически.
                                    0
                                    Прошу прощения, проглядел этот момент.
                              0
                              Жаль, тот самый коммент, собравший больше +1000, окончательно выпилили. Раньше он был доступен из закладок, но увы.
                                0
                                Жаль, тот самый коммент, собравший больше +1000, окончательно выпилили.

                                На bash.im его тоже нет?
                                +1
                                Символично, что в топах статей на русском нет ни одной (я не нашёл), которая была бы посвящена алгоритмам, математике и прочим «серьёзным» вещам. Зато есть про фотографии Лоуренс, «IT-эмиграцию» и «русский наебизнес».
                                В то же время на английском есть про фильтры Калмана и каринг в C++14, хотя статьи на английском появились относительно недавно.
                                  0
                                  Технически самые полезные статьи, имхо, в топе по числу закладок.

                                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                Самое читаемое