[PYTHON] J'ai essayé de visualiser les informations spacha de VTuber

Goodwill de graphique à barres empilées

Samari

J'ai collecté la quantité de spacha du 2020/1/1 au 2020/6/30 et je l'ai regardée

--Unité de bureau

Organiser les données de commentaires YouTube

Acquisition de données spacha

Veuillez consulter les articles de référence répertoriés dans les articles précédents pour savoir comment obtenir des données de commentaires. La structure des données de commentaire est décrite en détail dans les articles suivants. https://zetta777.hatenablog.com/entry/2019/11/09/200816

Selon cette structure, les données de la quantité d'espaces sont acquises.

Conversion de devises étrangères

De nombreuses devises autres que le yen japonais sont lancées sur Spacha. Ici, pour la devise qui existait sur les données que j'ai utilisées, spécifiez le taux de change avec ** valeur fixe **.

currency_to_rate = {'¥': 1, 'SGD': 80, 'CA$': 80, 'NT$': 3.65, '$': 110, 'A$': 75, '€': 125, 'PHP': 2.15, 'MX$': 5, \
    'HK$': 14, '₩': 0.1, 'RUB': 1.5, 'NZ$': 70, 'ARS': 1.5, 'CHF': 114, '£': 134, 'PEN': 30, 'CLP': 0.13, 'PLN': 27.5, \
    'HUF': 0.35, 'R$': 20, 'RON': 25, '₹': 1.43, 'SEK': 11.5, 'NOK': 11.5, 'UYU': 2.5, 'BOB': 15.5, 'BYN': 45, \
    'CRC': 0.185, 'ZAR': 6.5, 'ISK': 0.77, 'COP': 0.0295, 'DKK': 16.25, 'PYG': 0.0156, 'CZK': 4.55, 'GTQ': 13.94, \
    'HRK': 16.29, 'HNL': 4.3, 'UGX': 0.029, 'RSD': 1.04, 'BGN': 62, 'NIO': 3.1, 'DOP': 1.82}

Bien sûr, puisqu'il s'agit d'une valeur fixe, je pense qu'il y a un décalage avec le taux au moment où le spacha a été lancé, mais je ne considère pas cet effet ici. Le montant de spacha est décrit dans purchaseAmountText du fichier json du commentaire YouTube, et il est exprimé par "information sur la devise + montant" comme "100 ¥" pour le yen et "5 $" pour le dollar. Si vous le démontez et appliquez le taux de change ci-dessus, vous pouvez le convertir en yen japonais.

#Supprimer les chaînes supplémentaires
def remove(string, remove_targets=[',', '\xa0']):
    tmp = str(string)
    for target in remove_targets:
        tmp = tmp.replace(target, '')
    return tmp

repatter = re.compile(r'[^0-9]*')
df['tmp'] = df.purchaseAmountText.map(remove)
df['Ccy'] = df.tmp.apply(lambda price: repatter.match(price).group())
df['LocalPrice'] = df.apply(lambda row: float(row.tmp.replace(row.Ccy, '')), axis=1)
df['JPY'] = df.LocalPrice * channel_to_df[key].Ccy.map(currency_to_rate)

Analyse des données de commentaires YouTube

Cible d'analyse

--Heure: 2020/1/1 ~ 2020/6/30

résultat de l'analyse

Des graphiques à barres empilés sont empilés pour chaque bureau et distributeur, et chaque barre correspond à la devise. En outre, le nombre sous la devise correspond au montant total de l'espace de cette devise après conversion en yen japonais. Fondamentalement, l'unité du montant total est le yen, et il est affiché en unités de M ¥ (million de yens = 1 million de yens) sur le graphique.

Unité de bureau

Ce que j'ai trouvé

―― Le yen entier et le yen japonais (deux à droite du graphique à barres) sont à peu près les mêmes que Nijisanji (bleu) et hololive (orange) --Holive occupe la plupart des autres bars (devises étrangères) ――Cependant, le ratio de devises étrangères pouvant être utilisé pour le spacha est faible (le yen japonais est d'environ 1700 millions d'euros, et même la plupart des devises étrangères sont d'environ 54 millions d'euros). --Dans les devises étrangères, il y a beaucoup de dollars, NT \ $ (nouveaux dollars de Taiwan) et HK \ $ (dollars de Hong Kong).

jimusyo.png

Unité de distribution

Quantité totale de spacha

Ce que j'ai trouvé

Top 10 distributeurs de quantité de spacha

ChannelName Kind JPY Ccy
Kanata Ch.Kanata Amane Hololive Japan 37343515.3 ALL
Miko Ch.Sakura Miko Hololive Japan 38886890.4 ALL
Korone Ch.Korone Hololive Japan 44731483.4 ALL
Aqua Ch.Minato Akua Hololive Japan 45809937.8 ALL
Marine Ch.Cloche au trésor marine Hololive Japan 50261733.4 ALL
Kuzuha Channel Nijisanji Japan 51129800.4 ALL
Flare Ch.Éclat de Shiranui Hololive Japan 54643720.4 ALL
Pekora Ch.Lapin Pekora Hololive Japan 64229276.1 ALL
Rushia Ch.Junba Rushia Hololive Japan 65885208.3 ALL
Coco Ch.Kiryu Coco Hololive Japan 92221894.7 ALL

Taux de change

Le taux de change est le montant total de la devise étrangère Spacha / le montant total de toutes les devises Spacha.

Ce que j'ai trouvé

«M. Kagura avait le ratio outre-mer le plus élevé du montant total.

Top 10 des distributeurs du taux de change du Spacha

ChannelName Foreign ForeignRate
Japanese HANJO! TV 181921.1 93910 0.6595
신유야 / Yuya Shin 【NIJISANJI KR】 107003.8 47060 0.6945
Aadya【NIJISANJI EN】 35494.7 11728 0.7516
채아라 / Ara Chae 【NIJISANJI KR】 298770.0 91438 0.7657
Moona Hoshinova hololive-ID 373024.2 76940 0.8290
Ayunda Risu Ch. hololive-ID 1065439.7 190670 0.8482
이시우 / Siu Lee 【NIJISANJI KR】 198800.0 26668 0.8817
KITSUNEKON 447854.0 58960 0.8837
위피 / Wiffy 【NIJISANJI KR】 42911.5 3500 0.9246
유루리 / Ruri Yu 【NIJISANJI KR】 7829.5 400 0.9514

Parmi les distributeurs avec un montant total de spacha de 1 million de yens ou plus, les 10 premiers distributeurs avec un taux de change de spacha

ChannelName Foreign ForeignRate
Kana Sukoya [Nijisanji] Kana Sukoya 2179453.4 15367825 0.1242
Suisei Channel 3675447.1 25509246 0.1259
Mel Channel Ciel nocturne Mel channel 364995.4 1847979 0.1649
Korone Ch.Korone 8400464.4 36331019 0.1878
Aqua Ch.Minato Akua 10832336.8 34977601 0.2365
Haato Channel Akai est après 4379706.3 11658443 0.2731
Choco Ch.Choco Heitsuki 1756487.1 4350998 0.2876
Towa Ch.Towa éternel 6427437.7 13784228 0.3180
Festival des couleurs d'été de Matsuri Channel 9173428.3 18616230 0.3301
Kagura Mea/ KaguraMea 3249724.1 3817314 0.4598

Par bureau

Ce que j'ai trouvé

--M. Kuzunoha (en bas en bleu) et Mme Mirei Gunmichi (en bas en orange) sont les premiers totaux ――Cependant, la plupart de ces deux sont des yens japonais, par exemple, s'il s'agit du dollar, le classement sera inférieur à celui des autres rivières

--Nijisanji nijisanji.png

Impressions

―― Dans l'ensemble, le taux de change reste faible par rapport au yen japonais «Pourtant, hololive est plus élevé que les autres. Les bénéfices à l'étranger continueront-ils d'augmenter? ―― Y a-t-il plus de chances que d'autres bureaux soient victimes du déversement? «J'ai hâte de voir la croissance des marchés étrangers.

Ichibu du code python

L'agrégation est presque la même que la destination du lien de l'article précédent et la visualisation est omise car elle organise uniquement les données. .. ..

Comment obtenir des informations spacha

Vous pouvez en savoir plus sur les données de commentaires YouTube dans les articles suivants. https://zetta777.hatenablog.com/entry/2019/11/09/200816

Il semble y avoir de nombreux types de Renderers, mais pour obtenir le montant de spacha, vous pouvez l'obtenir en gros avec le code suivant (je ne l'ai pas vérifié en détail ...). Ici, l'élément correspond à l'élément sous addChatitemAction dans la structure décrite dans le lien ci-dessus. Tout ce que nous faisons est de permettre de voir les informations sur la quantité d'espace pour chaque moteur de rendu. .. ..

#Message seulement
if 'liveChatTextMessageRenderer' in item.keys():
    renderer_type = 'liveChatTextMessageRenderer'
    renderer = item[renderer_type]
#Spacha uniquement
elif 'liveChatPaidMessageRenderer' in item.keys():
    renderer_type = 'liveChatPaidMessageRenderer'
    renderer = item[renderer_type]
#Message et spacha(Dans certains cas)
elif 'liveChatTickerPaidMessageItemRenderer' in item.keys():
    renderer_type = 'liveChatTickerPaidMessageItemRenderer'
    renderer = item[renderer_type]['showItemEndpoint']['showLiveChatItemEndpoint']['renderer']['liveChatPaidMessageRenderer']
#Nouveau membre
elif 'liveChatMembershipItemRenderer' in item.keys():
    renderer_type = 'liveChatMembershipItemRenderer'
    renderer = item[renderer_type]
#Nouveau membre(Je ne connais pas la différence avec liveChatMembershipItemRenderer Je n'ai pas enquêté)
elif 'liveChatTickerSponsorItemRenderer' in item.keys():
    renderer_type = 'liveChatTickerSponsorItemRenderer'
    renderer = item[renderer_type]['showItemEndpoint']['showLiveChatItemEndpoint']['renderer']['liveChatMembershipItemRenderer']
#Je ne sais plus
elif 'liveChatPaidStickerRenderer' in item.keys():
    renderer_type = 'liveChatPaidStickerRenderer'
    renderer = item[renderer_type]
#Je ne sais plus
elif 'liveChatTickerPaidStickerItemRenderer' in item.keys():
    renderer_type = 'liveChatTickerPaidStickerItemRenderer'
    renderer = item[renderer_type]['showItemEndpoint']['showLiveChatItemEndpoint']['renderer']['liveChatPaidStickerRenderer']
#Je ne sais plus
elif 'liveChatPlaceholderItemRenderer' in item.keys():
    renderer_type = 'liveChatPlaceholderItemRenderer'
    renderer = item[renderer_type]
#Je ne sais plus
elif 'liveChatModeChangeMessageRenderer' in item.keys():
    renderer_type = 'liveChatModeChangeMessageRenderer'
    renderer = item[renderer_type]

purchaseAmountText = renderer['purchaseAmountText']['simpleText'] if 'purchaseAmountText' in renderer.keys() else ''

Graphique à barres empilées

def plot_stacked_bar(df, ax, title):
    #Standardisation
    for col in df.columns:
        df[col] /= df[col].sum()
    for i in range(len(df)):
        ax.bar(df.columns, df.iloc[i], bottom=df.iloc[:i].sum())
    ax.set_title(title)

Recommended Posts

J'ai essayé de visualiser les informations spacha de VTuber
J'ai essayé de visualiser la condition commune des téléspectateurs de la chaîne VTuber
J'ai essayé d'obtenir les informations de localisation du bus Odakyu
[Python] J'ai essayé de visualiser la relation de suivi de Twitter
J'ai essayé de visualiser les caractéristiques des nouvelles informations sur les personnes infectées par le virus corona avec wordcloud
J'ai essayé de corriger la forme trapézoïdale de l'image
J'ai essayé de vectoriser les paroles de Hinatazaka 46!
J'ai essayé de visualiser le texte du roman "Weather Child" avec Word Cloud
J'ai essayé d'obtenir les informations sur le film de l'API TMDb avec Python
J'ai essayé de résumer la forme de base de GPLVM
J'ai essayé d'effacer la partie négative de Meros
J'ai essayé de classer les voix des acteurs de la voix
J'ai essayé de résumer les opérations de chaîne de Python
J'ai essayé de visualiser facilement les tweets de JAWS DAYS 2017 avec Python + ELK
J'ai essayé de déplacer le ballon
J'ai essayé d'estimer la section.
J'ai essayé de trouver l'entropie de l'image avec python
[Courses de chevaux] J'ai essayé de quantifier la force du cheval de course
J'ai essayé de notifier les informations de retard de train avec LINE Notify
Je veux obtenir des informations sur le fonctionnement de Yahoo Route
[TF] J'ai essayé de visualiser le résultat de l'apprentissage en utilisant Tensorboard
[Apprentissage automatique] J'ai essayé de résumer la théorie d'Adaboost
J'ai essayé de combattre le minimum local de la fonction Goldstein-Price
J'ai essayé d'obtenir diverses informations de l'API codeforces
Python pratique 100 coups J'ai essayé de visualiser l'arbre de décision du chapitre 5 en utilisant graphviz
[First data science ⑥] J'ai essayé de visualiser le prix du marché des restaurants à Tokyo
J'ai essayé de visualiser les données de course du jeu de course (Assetto Corsa) avec Plotly
[Linux] J'ai essayé de résumer les commandes de confirmation des ressources
J'ai essayé le serveur asynchrone de Django 3.0
J'ai essayé de résumer la commande umask
J'ai essayé d'obtenir l'index de la liste en utilisant la fonction énumérer
J'ai essayé d'automatiser l'arrosage du pot avec Raspberry Pi
J'ai essayé de reconnaître le mot de réveil
J'ai essayé de visualiser la consommation électrique de ma maison avec Nature Remo E lite
J'ai essayé de créer l'image de démarrage SD de LicheePi Nano
J'ai essayé de visualiser l'ensemble de données de préférence de boisson par décomposition tenseur.
J'ai regardé les méta-informations de BigQuery et essayé de les utiliser
J'ai essayé de résumer la modélisation graphique.
J'ai essayé d'estimer le rapport de circonférence π de manière probabiliste
J'ai essayé de toucher l'API COTOHA
J'ai essayé d'agrandir la taille du volume logique avec LVM
J'ai essayé de visualiser Boeing de la performance du violon par estimation de pose
J'ai essayé de résumer la méthode de mise en œuvre fréquemment utilisée de pytest-mock
J'ai essayé d'améliorer l'efficacité du travail quotidien avec Python
[Traitement du langage naturel] J'ai essayé de visualiser les remarques de chaque membre de la communauté Slack
PhytoMine-I a essayé d'obtenir les informations génétiques de la plante avec Python
J'ai essayé de créer un site qui permet de voir facilement les informations mises à jour d'Azure
[Python] J'ai essayé de visualiser le prix en argent de "ONE PIECE" plus de 100 millions de caractères avec matplotlib.
J'ai essayé de transformer l'image du visage en utilisant sparse_image_warp de TensorFlow Addons
[Python] J'ai essayé de visualiser la nuit du chemin de fer de la galaxie avec WordCloud!
J'ai essayé d'obtenir les résultats de Hachinai en utilisant le traitement d'image
J'ai essayé de transcrire les actualités de l'exemple d'intégration commerciale sur Amazon Transcribe
J'ai essayé d'estimer la similitude de l'intention de la question en utilisant Doc2Vec de gensim
J'ai essayé d'améliorer la précision de mon propre réseau neuronal
J'ai essayé de résoudre 100 traitements linguistiques Knock version 2020 [Chapitre 3: Expressions régulières 25-29]
J'ai essayé d'extraire automatiquement les mouvements des joueurs Wiire avec un logiciel
J'ai essayé de résumer la manière logique de penser l'orientation objet.
J'ai essayé de trouver l'itinéraire optimal du pays des rêves par recuit (quantique)
J'ai essayé d'extraire et d'illustrer l'étape de l'histoire à l'aide de COTOHA