[PYTHON] I tried to visualize the spacha information of VTuber

Stacked bar graph goodwill

Samari

I collected and looked at the amount of spacha from 2020/1/1 to 2020/6/30

--Office unit --Most of the spachas are in Japanese yen, which is common to all offices ――Most of the total amount of Japanese Yen spacha is for Nijisanji and hololive. ――The total amount for Nijisanji and the total amount for hololive are about the same. --Most of the total amount of foreign currency spacha is spacha to hololive distributors ――However, when converted to Japanese yen, the total amount of spacha in foreign currencies is very small compared to the total amount of spacha in Japanese yen. --The most foreign currencies are dollars, New Taiwan dollars, and Hong Kong dollars. ――Personal opinion: Hololive has an image of focusing on overseas expansion, but the impression that this also appeared in Spacha --Distributor unit --Looking at the total amount of spacha, there are many hololive distributors in the top --Kiryu Coco Chairman, Uruha Rushia, etc. ――When it comes to Nijisanji, Mr. Kuzunoha and Mr. Mirei Gunmichi are ranked high in total. ――However, most of these two are Japanese yen, for example, if it is dollar, the ranking will be lower than other rivers --In the case of hololive, Kiryu Coco Chairman, Uruha Rushia, and Usada Pekora are in the top total. ――However, in dollars, the ranking of Mr. Toru Shia decreased, and others decreased slightly ――On the other hand, Korone-san, Akua-san, Matsuri-san, and Towa-san have a higher percentage of foreign currencies than other rivers. ――Mr. Kagura had the highest overseas ratio of the total amount. ――For overseas distributors, there are many currencies of that country ――For example, Nijisanji KR ₩

Organize YouTube comment data

Acquisition of spacha data

For the method of acquiring comment data, please refer to the reference article listed in the past article. The structure of the comment data is described in detail in the following article. https://zetta777.hatenablog.com/entry/2019/11/09/200816

According to this structure, the data of the spacha amount is acquired.

Foreign currency conversion

Many currencies other than the Japanese yen are thrown at Spacha. Here, for the currency that existed on the data I used, specify the currency rate with ** fixed value **.

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}

Of course, since it is a fixed value, I think there is a discrepancy with the rate at the time when the spacha was thrown, but I do not consider this effect here. The amount of spacha is described in purchaseAmountText of the json file of YouTube comment, and it is expressed by "currency information + amount" such as "¥ 100" for yen and "$ 5" for dollar. If you disassemble this and apply the above currency rate, you can convert it to Japanese yen value.

#Remove extra strings
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)

Analysis of YouTube comment data

Analysis target

--Time: 2020/1/1 ~ 2020/6/30 --Target channel: Same as the previous article. Specifically, VTuber belonging to the following offices --Nijisanji - hololive - 74 inc. - upd8 --Nori Pro - Kizuna AI - ZERO Project - AVATAR 2.0 Project --Other individuals --Sana Channel --Shigure Ui --Gatchman V --Ito Life --Tenso Hiyo --Kohanai --Kagura Mea --Saint Relia --Kazenomiya Festival / Matsuri Channel --Target video --All videos that Spacha can get ――However, please note that we have not validated whether the comment information can be obtained correctly from the video. ――In addition, you have not acquired or cannot acquire spachas such as comment hiding, video deletion, private broadcasting and men's limited broadcasting.

result of analysis

Stacked bar graphs are stacked for each office and distributor, and each bar corresponds to currency. In addition, the number under the currency is the total amount of the spacha of that currency after conversion to Japanese yen. Basically, the unit of the total amount is yen, and it is displayed in units of M ¥ (million yen = 1 million yen) on the graph.

Office unit

What I found

――The whole and Japanese yen (two on the right of the bar graph) are about the same as Nijisanji (blue) and hololive (orange). --Hololive occupies most of the other bars (foreign currency) ――However, the ratio of foreign currency to spacha is small (Japanese yen is about 1700M, and even the most foreign currency dollar is about 54M). --In foreign currencies, there are many dollars, NT \ $ (New Taiwan dollars), and HK \ $ (Hong Kong dollars).

jimusyo.png

Distributor unit

Total amount of spacha

What I found --Looking at the total amount of spacha, there are many hololive distributors in the top

Top 10 distributors of spacha amount

ChannelName Kind JPY Ccy
Kanata Ch.Amane Kanata Hololive Japan 37343515.3 ALL
Miko Ch.Sakuramiko Hololive Japan 38886890.4 ALL
Korone Ch.Inugami Korone Hololive Japan 44731483.4 ALL
Aqua Ch.Minato Aqua Hololive Japan 45809937.8 ALL
Marine Ch.Treasure bell marine Hololive Japan 50261733.4 ALL
Kuzuha Channel Nijisanji Japan 51129800.4 ALL
Flare Ch.Shiranui flare Hololive Japan 54643720.4 ALL
Pekora Ch.Usada Pekora Hololive Japan 64229276.1 ALL
Rushia Ch.Uruha Rushia Hololive Japan 65885208.3 ALL
Coco Ch.Kiryu Coco Hololive Japan 92221894.7 ALL

Foreign currency rate

The foreign currency rate is the total amount of Spacha foreign currency / the total amount of all Spacha currencies.

What I found

――Mr. Kagura had the highest overseas ratio of the total amount. --Foreign currency rate is high for overseas distributors ――For overseas distributors, there are many currencies of that country ――For example, Nijisanji KR ₩

Top 10 distributors of Spacha's foreign currency rate

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

Among distributors with a total amount of spacha of 1 million yen or more, the top 10 distributors with a foreign currency rate of spacha

ChannelName Foreign ForeignRate
Kana Sukoya [Nijisanji] Kana Sukoya 2179453.4 15367825 0.1242
Suisei Channel 3675447.1 25509246 0.1259
Mel Channel Night sky Mel channel 364995.4 1847979 0.1649
Korone Ch.Inugami Korone 8400464.4 36331019 0.1878
Aqua Ch.Minato Aqua 10832336.8 34977601 0.2365
Haato Channel Akai Haato 4379706.3 11658443 0.2731
Choco Ch.Choco Heitsuki 1756487.1 4350998 0.2876
Towa Ch.Everlasting Towa 6427437.7 13784228 0.3180
Matsuri Channel Summer Color Festival 9173428.3 18616230 0.3301
Kagura Mea/ KaguraMea 3249724.1 3817314 0.4598

By office

What I found

――When it comes to Nijisanji, Kuzunoha (lower blue) and Mirei Gunmichi (lower orange) rank high in total. ――However, most of these two are Japanese yen, for example, if it is dollar, the ranking will be lower than other rivers --In the case of hololive, Kiryu Coco Chairman (lower blue), Uruha Rushia (lower orange), and Usada Pekora (lower green) are ranked high in total. ――However, the dollar is down, and the ranking is down, and others are down slightly. ――On the other hand, Korone-san (lower tea), Akua-san (lower yellow), Matsuri-san (upper pink), and Towa-san (upper yellow) have a higher percentage of foreign currencies than other rivers.

--Nijisanji nijisanji.png

Impressions

――Overall, the foreign currency rate is still low compared to the Japanese yen ――Still, hololive is higher than others. Will overseas profits continue to grow? ――Is there more chance that other offices will get the spill? ――I'm looking forward to the growth of overseas markets. --Overall, there was a tendency for a large number of spachas to be thrown on major announcements and birthday broadcasts. --Mae Kagura's mysterious high foreign currency rate is what? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??

Ichibu of python code

The aggregation is almost the same as the link destination of the previous article, and the visualization is omitted because it only organizes the data. .. ..

How to get spacha information

The comment data of YouTube is described in detail in the following article. https://zetta777.hatenablog.com/entry/2019/11/09/200816

There seem to be many types of Renderers, but to get the spacha amount, you can roughly get it with the following code (I have not checked it in detail ...). Here item corresponds to the item under addChatitemAction in the structure described in the link above. All we are doing is to be able to see the information that describes the amount of spacha for each renderer. .. ..

#Message only
if 'liveChatTextMessageRenderer' in item.keys():
    renderer_type = 'liveChatTextMessageRenderer'
    renderer = item[renderer_type]
#Spacha only
elif 'liveChatPaidMessageRenderer' in item.keys():
    renderer_type = 'liveChatPaidMessageRenderer'
    renderer = item[renderer_type]
#Both message and spacha(In some cases)
elif 'liveChatTickerPaidMessageItemRenderer' in item.keys():
    renderer_type = 'liveChatTickerPaidMessageItemRenderer'
    renderer = item[renderer_type]['showItemEndpoint']['showLiveChatItemEndpoint']['renderer']['liveChatPaidMessageRenderer']
#New member
elif 'liveChatMembershipItemRenderer' in item.keys():
    renderer_type = 'liveChatMembershipItemRenderer'
    renderer = item[renderer_type]
#New member(I don't know the difference with liveChatMembershipItemRenderer I haven't investigated)
elif 'liveChatTickerSponsorItemRenderer' in item.keys():
    renderer_type = 'liveChatTickerSponsorItemRenderer'
    renderer = item[renderer_type]['showItemEndpoint']['showLiveChatItemEndpoint']['renderer']['liveChatMembershipItemRenderer']
#I don't know anymore
elif 'liveChatPaidStickerRenderer' in item.keys():
    renderer_type = 'liveChatPaidStickerRenderer'
    renderer = item[renderer_type]
#I don't know anymore
elif 'liveChatTickerPaidStickerItemRenderer' in item.keys():
    renderer_type = 'liveChatTickerPaidStickerItemRenderer'
    renderer = item[renderer_type]['showItemEndpoint']['showLiveChatItemEndpoint']['renderer']['liveChatPaidStickerRenderer']
#I don't know anymore
elif 'liveChatPlaceholderItemRenderer' in item.keys():
    renderer_type = 'liveChatPlaceholderItemRenderer'
    renderer = item[renderer_type]
#I don't know anymore
elif 'liveChatModeChangeMessageRenderer' in item.keys():
    renderer_type = 'liveChatModeChangeMessageRenderer'
    renderer = item[renderer_type]

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

Stacked bar graph

def plot_stacked_bar(df, ax, title):
    #Standardization
    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

I tried to visualize the spacha information of VTuber
I tried to visualize the common condition of VTuber channel viewers
I tried to get the location information of Odakyu Bus
[Python] I tried to visualize the follow relationship of Twitter
I tried to visualize the characteristics of new coronavirus infected person information with wordcloud
I tried to touch the API of ebay
I tried to correct the keystone of the image
I tried to predict the price of ETF
I tried to vectorize the lyrics of Hinatazaka46!
I tried to visualize the text of the novel "Weathering with You" with WordCloud
I tried to get the movie information of TMDb API with Python
I tried to summarize the basic form of GPLVM
I tried to erase the negative part of Meros
I tried to classify the voices of voice actors
I tried to summarize the string operations of Python
I tried to easily visualize the tweets of JAWS DAYS 2017 with Python + ELK
I tried to move the ball
I tried to estimate the interval.
I tried to find the entropy of the image with python
[Horse Racing] I tried to quantify the strength of racehorses
I tried to notify the train delay information with LINE Notify
I want to get the operation information of yahoo route
[TF] I tried to visualize the learning result using Tensorboard
[Machine learning] I tried to summarize the theory of Adaboost
I tried to fight the Local Minimum of Goldstein-Price Function
I tried to get various information from the codeforces API
Python practice 100 knocks I tried to visualize the decision tree of Chapter 5 using graphviz
[First data science ⑥] I tried to visualize the market price of restaurants in Tokyo
I tried to visualize the running data of the racing game (Assetto Corsa) with Plotly
[Linux] I tried to summarize the command of resource confirmation system
I tried the asynchronous server of Django 3.0
I tried to summarize the umask command
I tried to get the index of the list using the enumerate function
I tried to automate the watering of the planter with Raspberry Pi
I tried to recognize the wake word
I tried to visualize the power consumption of my house with Nature Remo E lite
I tried to build the SD boot image of LicheePi Nano
I tried to visualize the Beverage Preference Dataset by tensor decomposition.
I looked at the meta information of BigQuery & tried using it
I tried to summarize the graphical modeling.
I tried to estimate the pi stochastically
I tried to touch the COTOHA API
I tried to expand the size of the logical volume with LVM
I tried to visualize Boeing of violin performance by pose estimation
I tried to summarize the frequently used implementation method of pytest-mock
I tried to improve the efficiency of daily work with Python
[Natural language processing] I tried to visualize the remarks of each member in the Slack community
PhytoMine-I tried to get the genetic information of plants with Python
I tried to make a site that makes it easy to see the update information of Azure
[Python] I tried to visualize the prize money of "ONE PIECE" over 100 million characters with matplotlib.
I tried to transform the face image using sparse_image_warp of TensorFlow Addons
[Python] I tried to visualize the night on the Galactic Railroad with WordCloud!
I tried to get the batting results of Hachinai using image processing
I tried transcribing the news of the example business integration to Amazon Transcribe
I tried to estimate the similarity of the question intent using gensim's Doc2Vec
I tried how to improve the accuracy of my own Neural Network
I tried to solve the 2020 version of 100 language processing [Chapter 3: Regular expressions 25-29]
I tried to automatically extract the movements of PES players with software
I tried to summarize the logical way of thinking about object orientation.
I tried to find the optimal path of the dreamland by (quantum) annealing
I tried to extract and illustrate the stage of the story using COTOHA