Исследование статистики эмодзи (Яп. えもじ)

в эмодзи-клавиатуре EmojiXpress для iOS и в социальных сетях: instagram и twitter

Общее количество эмодзи в статистике EmojiXpress (emojistats.org) и Twitter (emojitracker.com) сохраним в переменные emostats_all и emotrack_all. Также сохраним данные о 12 самых популярных эмодзи в словари, где ключ – сокращенное название эмодзи, а значение – количество в миллионах. Ключи одинаковые для всех словарей.

emostats_all = 1987.8
emostats = {'joy': 305,'heavy heart': 156.5, 'face kiss': 112.4,
    'heart-shaped': 81.2, 'rolling': 43.5, 'loudly': 33.3,
    'thumbs': 30.7, 'smiling': 29, 'kiss mark': 28.5,
    'unamused': 7.3, 'black heart suit': 4.3, 'recycle': 0.0407
}

emoinst = {'joy': 8.916,'heavy heart': 33.623, 'face kiss': 5.793,
    'heart-shaped': 13.227, 'rolling': 1.314, 'loudly': 1.685,
    'thumbs': 4.353, 'smiling': 4.815, 'kiss mark': 3.26,
    'unamused': 0.253, 'black heart suit': 2.798, 'recycle': 0.0883
}

emotrack_all = 27294
emotrack = {'joy': 2594, 'heavy heart': 1248, 'recycle': 965,
    'heart-shaped': 939, 'loudly': 781, 'black heart suit': 733,
    'smiling': 619, 'unamused': 494, 'face kiss': 466,
    'kiss mark': 106, 'thumbs': 263.7, 'rolling': 0.00001
}

frac = round(emotrack_all/emostats_all, 2)
print("Эмодзи в", frac, "раз больше в твиттере, чем в сообщениях, набранных пользователями iOS")

for name in emotrack:
    print(name, emostats[name], emoinst[name], emotrack[name])

Сделаем перевод названий на русский язык, вычислим соотношения для каждого эмодзи:

RU_NAMES = {'joy': 'Слёзы радости', 'heavy heart': 'Сердце', 'recycle': 'Переработка',
    'heart-shaped': 'Глаза-сердца', 'loudly': 'Громко плачу', 'black heart suit': 'Червы',
    'smiling': 'Счастлив', 'unamused': 'Равнодушие', 'face kiss': 'Целую',
    'kiss mark': 'След от поцелуя', 'thumbs': 'Класс', 'rolling': 'Катаюсь от смеха'
}

for name, count in emotrack.items():
    twitter_to_inst = round(count / emoinst.get(name), 3)
    twitter_to_xpress = round(count / emostats.get(name), 3)
    xpress_to_inst = round(emostats.get(name) / emoinst.get(name), 3)
    print('{:<16}'.format(RU_NAMES[name]), '{:>9.3f}'.format(twitter_to_inst), \
          '{:>9.3f}'.format(twitter_to_xpress), xpress_to_inst)

Доступ к данным emojitracker по API (см. github.com/emojitracker/emojitrack-rest-api).
Так мы получаем статистику эмодзи с сайта emojitracker.com не через окно браузера в человекочитаемом виде, а через специально созданный интерфейс, API, в машиночитаемом виде. Файл можно сохранить на диск вручную.

Для хранения данных используется формат JSON. Сохранение данных на диске для последующего использования называется сериализацией.
Загружаем данные по сети при помощи библиотеки urllib.request:

import json
import urllib.request

JSON_RANKINGS_URL = 'https://api.emojitracker.com/v1/rankings'
rankings_obj = urllib.request.urlopen(JSON_RANKINGS_URL)
json_rankings = json.load(rankings_obj)
print(type(json_rankings), len(json_rankings), json_rankings[0])

JSON_FILENAME = "emotracker_rankings.json"
# Открытие файла sample.json в режиме записи ('w'), работа с ним через переменную myfile
with open(JSON_FILENAME, 'w') as myfile:
    json.dump(json_rankings, myfile)

# Открытие файла emotracker_rankings.json в режиме чтения ('r') и в кодировке utf-8:
with open(JSON_FILENAME, 'r', encoding="utf-8") as myfile:
    json_rankings_load = json.load(myfile)
print(type(json_rankings_load), len(json_rankings_load), json_rankings_load[0])
print("Списки одинаковы?", json_rankings == json_rankings_load)

Весь код в отдельном файле.

Ссылки

WRT Яндекс Практикум.