ニコニコ動画の再生回数が多い動画について

目次

0.研究背景

 今年日本では映像分野のエンターテイメントはYoutubeやニコニコ動画を代表とした動画共有サイトが躍進しており、広告収入などによって収入を得られるなど動画投稿者にとって、再生数を多く得る動画は非常に価値があり、再生回数が多い動画の特徴がわかれば動画制作者にとって非常に役にたつと思われる。  そこで、本研究では、ニコニコ動画の再生回数がとても多い動画と、そこそこ再生回数とマイリスト数が多い動画のコメントデータから動画再生時間ごとのコメントの表示量の増減を抽出し、それぞれの特徴を比較する。

1.実行環境

本研究で使用したパソコンについて表1、使用ソフトウェアについて表2に示す。

表1 使用パソコン

OSwindows10 Home 1909
CPUCPU Intel(R) Core(TM) i7-8700K
メモリ容量48GB
GPUNVIDIA GeForce GTX 1060 6GB

表2 使用ソフトウェア

ソフト名バージョン用途
RapidMiner9.2.001データの解析に用いる
Google Chrome79.0.3945.88データの収集に用いる
Visual Studio Code1.41.0Pythonプログラムのコード作成に用いる
Python2019.11.50794データの解析の補助として用いる
Advanced REST client10.0.12データの収集に用いる

2.準備

本文中の用語や基礎知識について述べる。

2.1. ニコニコ動画

 ニコニコ動画は、日本最大級の動画共有サイトである。再生中の動画上にコメントを付加し共有できるという特徴がある。

図1 ニコニコ動画の動画再生時の画面

図1 ニコニコ動画の動画再生時の画面

図2 ニコニコ動画サイトトップ画面

図2 ニコニコ動画サイトトップ画面

2.2.マイリスト数

 マイリストとはニコニコ動画内にあるお気に入りの動画をブックマークとして保存することができる機能のことである[1]。  マイリスト数は各動画にある情報の一つでその動画がいくつマイリストされているかを表す数のことである。有料会員では25500件登録でき、無料会員では200件である[1]。  マイリストはフォルダのように名前を付けて分別することができる。しかし一つのマイリストには有料会員であっても500件までしか登録できない。マイリスト一覧を開いている様子を図3に示す。

図3 登録したマイリスト一覧の画面

図3 登録したマイリスト一覧の画面

 無料会員の登録上限と、マイリストは視聴者の気に入ったというサインの側面からマイリスト数が多い動画は面白い動画であることが多い。

2.3.コメント

 コメントは視聴者が動画につける文字列のことである。コメントは通常5秒間動画上に図4のように表示される。

図4 コメントが動画上に表示されている様子

図4 コメントが動画上に表示されている様子

コメントの打たれた動画再生時間の位置を本文ではコメント表示位置と呼ぶ。

2.4.動画ID

 ニコニコ動画では各動画に一意のアルファベットと数字から成るIDが振られている。  本文ではこのIDのことを動画IDと呼ぶ。

2.5.コメント表示量

 本文では動画のある再生時間で動画画面に表示されているコメントの数のことをコメント表示量と呼ぶ。本研究では、ある時刻tのコメント表示量をt-5からtの間のコメント数とする。

2.6.弾幕

 同じようなコメント表示位置にコメントが集中することをニコニコ動画では弾幕と呼ぶ。

図5 弾幕の例

図5 弾幕の例[2]

2.7.vpos

 コメントデータに含まれている、コメント表示位置を1/100[秒]単位で表すデータである。

2.8.Rapidminer

 Rapidminerはデータを前処理、加工、評価、運用を一つのプラットフォームで行うことができるソフトウェアである[3]。プロセスと呼ばれる単位で実行をして結果を出し、プロセス上にオペレータを配置し、いくつかの種類のオペレータを組み合わせることで複雑なデータ処理を行える。

3.実験方法

3.1.データの収集

 本実験では2018/12/22 00:00から2019/12/21 23:59の期間に投稿された,ニコニコ動画が定めているジャンルごとの再生回数がとても多い動画と,そこそこ再生回数とマイリスト数の多い動画のコメントデータと動画情報データを対象に解析を行う.なおここでいうそこそこ再生回数とマイリスト数の多い動画とはジャンルごとの再生回数が3万以下かつマイリスト数が300以下の動画の中で再生回数が10位以上の動画のことである.

3.1.1.対象動画IDを取得

 対象の動画IDの収集方法について述べる。動画IDを取得するために https://api.search.nicovideo.jp/api/v2/video/contents/searchへリクエストをする。 Advanced REST clientを起動して図6のようパラメータを入力する[4]。

図6 Advanced REST clientへの入力例

図6 Advanced REST clientへの入力例

 ParametersのBodyのqにはニコニコ動画の各ジャンル名を記入する。各ジャンルの数だけ入力を繰り返し、SENDボタンを押す。入力する各ジャンル名は表3に示す。

表3 使用ソフトウェア

ジャンル名
アニメ
エンターテイメント
ゲーム
スポーツ
その他
ダンス
ラジオ
音楽・サウンド
解説・講座
技術・工作
自然
社会・政治・時事
乗り物
動物
旅行・アウトドア
料理

 正しくパラメータが入力された状態でSENDボタンを押すと図7のような動画IDのリストが返る。

図7 返り値の例

図7 返り値の例

3.1.2.コメントデータの取得

 コメントデータの収集方法について述べる。コメントデータはブラウザのディベロッパーツールを用いて取り出す。ニコニコ動画で動画を開いたとき、通信データの中にコメントデータが「api.json」として存在するのでそれを見つける。ここではGoogleChoromeを用いる。 まず、GoogleChoromeのディベロッパーツールを開き、Networkを選択したうえで、「Disable cache」にチェックをつけ、コメントを取得したい動画を開く。 有料動画等でなければ「api.json」が読まれているので「Filter」にapi.jsonと入力するとコメントデータがjson形式で取得可能な状態のファイルを見つけることができる。この様子を図3に示す。 api.jsonをクリックし、Responseをクリックすると内容が表示されるので、コピーし、テキストエディタなどにペーストして保存をすれば一つの動画のコメントデータを取得できる。この作業を必要な取得したい動画の数だけ繰り返す。

図8 コメントデータを取得する様子

図8 コメントデータを取得する様子

図9 取得できるコメントデータ例

図9 取得できるコメントデータ例

3.1.3.動画情報データの取得

 動画情報データの取得方法について述べる。動画情報データとは動画時間やタイトル、再生回数やタグ情報などのデータを指す。 動画情報データは3.1.1.で取得した動画IDを{動画ID}へあてはめて https://ext.nicovideo.jp/api/getthumbinfo/{動画ID}へアクセスすればxmlファイル形式のデータが表示される[5]ので、4.2.と同じようにテキストエディタにコピーアンドペーストをして保存する。

図10 動画情報を取得した様子

図10 動画情報を取得した様子

3.2.入力データの準備

 3.1.2.と3.1.3を調べたい動画の数繰り返して取得した、複数の動画情報のxmlファイルと複数のコメント情報のjsonファイルをPythonコードで一つのcsvファイルにする。csvファイルの内容は表4に示す。

表4 入力データcsvの内容

列名データ内容ファイル元
video_id一意の動画のID動画情報xml
title動画のタイトル動画情報xml
description動画の説明文動画情報xml
first_retrieve動画投稿時間動画情報xml
length動画の長さ[1/100秒]動画情報xml
view_counter再生回数動画情報xml
comment_numコメント数動画情報xml
mylist_counterマイリスト数動画情報xml
tag_numつけられているタグの数動画情報xml
tag1つけられているタグ1動画情報xml
tag2つけられているタグ2動画情報xml
tag3つけられているタグ3動画情報xml
tag4つけられているタグ4動画情報xml
tag5つけられているタグ5動画情報xml
tag6つけられているタグ6動画情報xml
tag7つけられているタグ7動画情報xml
tag8つけられているタグ8動画情報xml
tag9つけられているタグ9動画情報xml
tag10つけられているタグ10動画情報xml
genre動画のジャンル動画情報xml
contributor_user_id投稿者ID動画情報xml
contributor_user_nickname投稿者の名前動画情報xml
contributor_typeユーザ動画かチャンネル動画か、の識別データ動画情報xml
comment_messageコメント文字列コメントデータ
comment_dateコメント投稿時間コメントデータ
comment_commandコメントのコマンドコメントデータ
vposコメント表示位置[1/100秒]コメントデータ
comment_noコメント番号コメントデータ
comment_user_idコメント投稿者のIDコメントデータ
nicoruコメントのニコるの数コメントデータ
additional_types読み込んだデータの任意の名前Python側で作成

このcsvを作成するプログラムは8.1.に示す。

3.3.コメント表示量の算出

3.2.で作成したcsvファイルをRapidminerに読み込み、各動画の1秒ごとのコメント表示量をPythonのコードで求める。具体的には下記の方法で求める。

 ・列を追加し、コメント一つ一つに1から始まる一意のidを振る。この列名を「comment_address」とする。

 ・comment_addressとvpos以外の列を取り除く。

 ・動画IDごとに表を分け、vposを基準に昇順に並び替える。

 ・それぞれのvposから500足し算した値の間にvposの値があるデータの個数を数える。これがコメント表示量である。数えた結果を「display_comment_count」とする。

 ・ふたたび元のcsvから読み込んだデータに1から始まる一意のidを振り、comment_addressをもとにdisplay_comment_countを結合し、「001data.csv」として出力する。

 これらの処理を行うRapidminerのオペレータの配置等は8.2.と8.4.に示し、 Pythonのソースコードは8.3.に示す。

3.4.弾幕の抽出

 本実験では弾幕をコメント表示量がある値a超えたときの部分とする。  弾幕とみなすコメント表示量は図11から25を超えていればだいたい弾幕とみなせる。

図11 コメント表示量25の時の画面の例

図11 コメント表示量25の時の画面の例[6]

 よってaを25と定めたいが、コメントデータはコメント数が十分のとき0.6秒に1コメントとなるはずだが、今回のコメント取得方法では動画の長さにきちんと比例した個数が取得できない。そのためaを定数とすると他の動画の弾幕と単純に比較できなくなってしまう。そこでaを次のように定義する.

aを求める式

ただし,

    コメント数=取得コメント数

となっている場合はa=25とする.

3.5.弾幕面積

 判別値aを超えたコメント表示量の合計値を弾幕面積とする。また判別値aをコメント表示量が超した回数を弾幕の個数とする。図2のデータから抽出する例を図12に示す。

図12 弾幕面積と弾幕の抽出

図12 弾幕面積と弾幕の抽出[7]

各動画のコメントについて弾幕の個数と弾幕面積を求め、再生回数がとても多い動画と、そこそこ再生回数とマイリスト数の多い動画とで比較をする。 3.4.と3.5.の処理を行うRapidminerのオペレータの配置等は8.5.に示す。

4.実験結果

 弾幕の個数を横軸、弾幕面積を縦軸とした結果を以下に示す。

図13 全データの弾幕面積と弾幕個数

図13 全データの弾幕面積と弾幕個数

図14 再生数別弾幕面積と弾幕個数

図14 再生数別弾幕面積と弾幕個数

図15再生回数50万以上でジャンル別弾幕面積と弾幕個数

図15再生回数50万以上でジャンル別弾幕面積と弾幕個数

表5 弾幕個数と弾幕面積の表

弾幕個数弾幕面積再生数タイトルジャンル
00202553【CM】ニチレイ『本格炒め炒飯R』「Still No.1」ダンス
0028548【大谷翔平】今シーズン第9号3ランホームランスポーツ
0029208アニソン2on2ダンスバトル『あきばっか~のvol.19』ベスト16第五試合ダンス
001043424ヘラジカ様のかわいい!!煽りグルメレース!!アニメ
0029575セブンイレブン presents 佐倉としたい大西2019年5月21日第164回ラジオ
001559069アンヘル / 鳴花ミコト音楽・サウンド
0029884【結萌さつき】アユミ☆マジカルショータイム【踊ってみた】ダンス
00131110ルンバ「ゴミですね」猫「エサ消えた」動物
0029570ジオウ夏映画が全く気付かないうちに品性を疑う音楽・サウンド
00478844クッキー☆グランドバトル3!ED集その他
00123280平成に代わる新元号「令和(れいわ)」発表の瞬間社会・政治・時事
002996230秒でわかる浦島太郎朗読で華麗なラップを披露する夢追翔(字幕あり)エンターテイメント
0029573アニソン2on2ダンスバトル『あきばっか~のvol.19』ベスト16第四試合ダンス
0029907昨日食ったジンギスカンに敗北しためめめUCエンターテイメント
0024901ハチの巣からハチの幼虫を強奪するアリの集団自然
0029854落下するキュルルRB +使用例アニメ
0073740【猫転送装置】猫に罠を仕掛けてみた動物
00296167アル中パウダー作ってみた料理
0026765HG ガンダムザラキエル 双動 仮面ライダーWゆっくりプラモ動画技術・工作
00291935/17 第12節 浦和vs湘南 大誤審からの劇的大逆転スポーツ
0029239東住吉区観光。旅行・アウトドア
0028494【伝説の歴史激闘】18-19CLマンチェスターシティ 対 トッテナムスポーツ
0029242立ちながら水を飲む猫動物
0029702わがままボディをさらけ出すにゃんこ動物
00113993猫先生の厳しすぎるピアノレッスン動物
0028427LAWSONいちご大福甘酒あんを食べてみた。料理
0029943愛園愛美にドハマりした小4ショタ「スパチャ投げたい!」エンターテイメント
0029048「関西電気保安グルーヴ」│関西電気保安協会音楽・サウンド
0029416コツメカワウソのターン動物
0027169世話が焼けすぎたフェネック自然
0029668ニコカラ『テレストテレス』かいりきベア《on vocal》※修正版音楽・サウンド
0096149平成最後の狩猟生活(その83)自然
0029375カラフル【NNI】音楽・サウンド
0029999セブンイレブン presents 佐倉としたい大西2019年4月16日第159回ラジオ
0029374タッチセンサーを使ってamazonの箱を作ってみた。技術・工作
0029592【RAB】ゾンビランドサガOP 踊ってみた【リアルアキバボーイズ】ダンス
00121862第二のフロントガラス男現る社会・政治・時事
0029993【スマブラSP】パックンフラワーに対するパルテナ様とピットの反応ゲーム
0029344【色松】彗星ハネムーン【踊ってみた】ダンス
00413222【放送事故】畳と話し出す天開司エンターテイメント
0029907【朗報】マスクドいちからの使用用途、見つかるエンターテイメント
0029702スターラジオーシャン アナムネシス #165 (通算#206) (2019.12.11)ラジオ
00297975【ラグビーワールドカップ2019】ニュージーランド代表 ハカ対南アフリカ - カパオパンゴスポーツ
0023801【グラブル】某天上人ツーラー疑惑問題自然
00551856プロパガンダ(本物)技術・工作
0029924『ダンベル何キロ持てる?』特別トレーニング動画#4アニメ
00498772ワザップの嘘技に騙された一般人、自分のことを野原ひろしだと思い込んでしまうその他
00118919ダンボールでBEA(フランス航空事故調査局)を作ってみた技術・工作
00279919令和れいわレイワれいワレいわレイわれイワれいわ令和であります社会・政治・時事
0028003サイコフレームの試料技術・工作
0028184おでんで呑む【長火鉢とおっさん107】料理
003473553DECO*27 - 乙女解剖 feat. 初音ミク音楽・サウンド
0028102気が付いたらゲーセンになってた趣味の部屋技術・工作
0028733大和高田観光。旅行・アウトドア
00384844【鬼滅のMMD】響喜乱舞エンターテイメント
00253315ひとりガストでハイボール飲んでみた【アル中カラカラ】料理
0029584恐竜みたいな脚しいてる動物
0029708『仮面ライダーゼロワン』主題歌 「REAL×EYEZ」 J(LUNA SEA)×西川貴教Takanori Nishikawa音楽・サウンド
0029989【RTA】ランス03-RTAリーザス陥落 -3時間5分41秒part5/8ゲーム
0026857ペーパークラフト新条アカネ技術・工作
00133758一段降りようとしたら戻れなくなってもうたワンコが悶絶するほどかわいい動物
0029283キャンピングカー大横転で死にかけた男たちの北海道キャンプの旅 Part13「飯盒炊爨編Ⅱ」旅行・アウトドア
002499066【再録】 ワザップの嘘技に騙されたキッズ、ジョルノ・ジョバーナみたいになってしまうその他
00157512プールで泳いでみた!旅行・アウトドア
00247078【SLH×アナタシア】クレイシ゛ー・ヒ゛ート 踊ってみた【オリジナル振付】ダンス
001040518【プリキュア変身バンクリンク】キュアミルキー変身【歴代1位】アニメ
00227657水を吐くフグ動物
0029005セブンイレブン presents 佐倉としたい大西2019年8月13日第176回ラジオ
0026708【カタールW杯アジア予選】ミャンマー × 日本スポーツ
0029587【 一発録り 】仮面ライダーゼロワン 主題歌 OP 最速【 歌ってみた 】 REAL×EYEZ coverd by Ayata音楽・サウンド
0023358【ゆっくり実況】きのこ狩り2018その7 後編自然
00137133イチローのレーザービームで人類滅亡 2019年ver.スポーツ
0028322ゴキブリにタバコの煙を吸わせたら想像以上の結果になった。解説・講座
0027881【ユロスポ実況】羽生結弦 2019 World Championships FSスポーツ
0029113セブンイレブン presents 佐倉としたい大西2019年7月16日第172回ラジオ
0029501【野党ニュース】野党議員主催の「シュレッダーを見る会」が無事開催される社会・政治・時事
0029959【アイドル部MMD】悪い大人が妹キャラを背負わせるあずきちエンターテイメント
0028349【ゆっくり語る奇妙な事件】エリサ・ラム怪死事件解説・講座
001447543乙女解剖@歌ってみた【まふまふ】音楽・サウンド
0023007【ニコ生】スピリタスから出火して大炎上wwww自然
0029301セブンイレブン presents 佐倉としたい大西2019年5月7日第162回ラジオ
0028448藤井聡太 神の一手 4四龍 (2019-02-16)スポーツ
00167195わしも(53)動物
0026505【伝説】スポーツ名&迷実況集12【ネタ】スポーツ
0029985アドリブで独自のダァンスを披露するド葛本社の子供達エンターテイメント
00194067【英語実況】井上尚弥 vs エマヌエル・ロドリゲスWBSSバンタム級トーナメント準決勝スポーツ
0028197寿司職人によるカツオの仕込みから握りまで?How To Make Skipjack tuna Sushi?料理
00538419お昼寝MZその他
0021420名列車で行こう速達編第30回山陽を駆け抜けた蒼穹の閃光第10章乗り物
00134909韓国のレーダー照射反論動画のBGMを間違えてみた社会・政治・時事
00187335LIVE配信し富士登山中に滑落した男性か遺体を発見(19_10_30)社会・政治・時事
0029784けもフレ2第9話を肯定する人達に一言。動物
0029739セブンイレブン presents 佐倉としたい大西2019年6月25日第169回ラジオ
0028546【ゆっくりクソゲーレビュー】#02 北斗の拳(セガサターン版)【世紀末】解説・講座
0029995デッデッデデデデッドバイデイライト 03ゲーム
00145618YouTuberの広瀬ゆうが全裸わいせつ行為ライブ配信で逮捕!【Vtuber】社会・政治・時事
0023123危険運転による大事故乗り物
0023363【ゆっくり実況】きのこ狩り2018その7 前編自然
00227445自分を大蛇丸と信じて止まない一般男性が、カレーとポテトサラダとビールで優勝する動画です。料理
0029704香港デモだけじゃない!韓国、インドネシアもデモ活動で大荒れ社会・政治・時事
0029563日韓請求権協定に基づく協議要請に回答すらなし…もう日韓関係は終わりですね社会・政治・時事
00118422【@小豆】生命線 踊ってみた【bake】ダンス
0029974ヘカーティア・ラピスラズリ(淫夢)ゲーム
0029700光る!CCさくらの夢の杖を作ってみた技術・工作
00474915ワンパンマン1期OPをアンパンマンで描いてみたエンターテイメント
00116363【ボクシング】井上尚弥VSエマヌエル・ロドリゲス パンチが見えない人の為のKOシーン WBSSバンタム級トーナメント準決勝スポーツ
0029993舞元を乳で圧死させようとするアンジュとその配信をみた舞元の反応エンターテイメント
001379741「Alice in N.Y.」歌ってみた【XYZ】音楽・サウンド
0029899チョコモナカジャンボを頬張るNYN姉貴BB動物
00409139【皆さんにお知らせ】なので夜の公園でアル中カラカラしてみた料理
00103219愛し合うフレンズ 1話社会・政治・時事
0028662【あやの先生】女医が流星ダイアリー(H△G)【踊ってみた】ダンス
0011512145歳イチローのレーザービームスポーツ
0029961夜桜たま「エッチだ・・・w」エンターテイメント
0029853【ジョジョ】処刑用BGMピアノ演奏【黄金の風】音楽・サウンド
0029645#05 [初披露][歌詞] Shanti Shanti Shanti BABYMETAL AWAKENS day1音楽・サウンド
001529510かぐや様は告らせたい~天才たちの恋愛頭脳戦~ 鈴木雅之 ラブ・ドラマティックアニメ
0029532【行方不明】殺人】酒鬼薔薇聖斗②母親A共に出版印税生活豪邸建てていた!社会・政治・時事
0029048本渡楓と天津向の「本渡上陸作戦」2019年2月19日#151ラジオ
0028669【フォートナイト】ダンスエモート 踊ってみた【第三弾】ダンス
0027296[ハンガリー実況翻訳付M4 SPORT] 羽生結弦 2019 世界選手権 FSスポーツ
0029466本渡楓と天津向の「本渡上陸作戦」2019年5月27日#165ラジオ
0029997【E3 2019】「テイルズ」最新作『テイルズオブアライズ Tales of Arise』初報PVゲーム
0029104アニソン2on2ダンスバトル『あきばっか~のvol.18』BEST16第六試合ダンス
0029936美兎「(直して欲しいのは)話題がゲスいところ?」楓「それは結構好きよ」エンターテイメント
1120438489【Project Winter】葛葉のトランシーバー芸に耐える笹木とアンジュエンターテイメント
15129839『恋はアッチャアッチャ』(Promotion Edit)音楽・サウンド
15829310僕が「日本の尊厳と国益を護る会」を少し懐疑的に見ている理由を話します社会・政治・時事
1287270123自分を大蛇丸と信じて止まない一般男性が、自作の唐揚げとビールで優勝する動画です。料理
15229305【未公開】ぼくらは四国バーガーをふりかえる【完結記念】後編旅行・アウトドア
1163547334ワザップに騙されたアイドル、あんきらみたいになってしまう【音MAD】その他
141120052カエル(夜桜たま)動物
1314378727【ニコニコラボ】僥倖ダンス【ちゃんげろソニック】エンターテイメント
17829950ムスカ大佐の3分間待ってやるフィギュアを作ってみた技術・工作
1346204412タバスコ風味のすき焼き食べてみた【アル中カラカラハイボール】料理
115729911けものフレンズを知らない人が2期の12話を見た感想アニメ
130629201【戦国時代解説】 戦国への道第4集「足利成氏、執念の戦い(1/4)」解説・講座
1360135211【ヒプノシスマイク】一触即発☆禅ガール【コスプレで踊ってみた】ダンス
128327829熟成肉とほうれん草のソース煮込み。食べてみた【アル中カラカラ】料理
144212393ち○ぽみたいな神に住んでるイチローはどうすりゃいいですか?スポーツ
1190138314オタクがブリキノダンスを踊ったらキレッキレだったwww【リアルアキバボーイズ】ダンス
14251876998ヨルシカ - だから僕は音楽を辞めた (MUSIC VIDEO)音楽・サウンド
115029275キャンピングカー大横転で死にかけた男たちの北海道キャンプの旅 Part9「探し物ビンゴ大会 前編」旅行・アウトドア
1309388548【コメ無し】滑落HD【編集版】スポーツ
1409675250笑い過ぎて一生忘れられないTRPG第4話ゲーム
159113263【MMD杯ZERO参加動画】MMDDFF NT 完全版【遅刻組】技術・工作
131929859【日韓問題】先鋭化していく韓国 part1社会・政治・時事
15841543430ラストダンス 歌ってみた【りぶ】音楽・サウンド
135824478【東北きりたん車載】SR400ツーリング日記 Part35 年明け九州編その2乗り物
1191743430笑い過ぎて一生忘れられないTRPG第2話ゲーム
127629802アズール0ーン.mp0.0000000000000その他
1335492139【手描きFGO】ぐだ子ちの今日のごはんエンターテイメント
148929929剣、どうにかしろ.SP2その他
122329877あの人物が、『高木さん』に光明を見出すアニメ
121029737車から降りたくない柴犬動物
110128485遊び倒そう!日帰りで横浜へ小旅行 #1旅行・アウトドア
1169158819【特別番組】 井上尚弥全18試合ハイライトスポーツ
187426741新元号を発表する野獣先輩エンターテイメント
15529095【ゆっくり解説】都道府県て゛紹介する日本の都市伝説21「岐阜県」解説・講座
1340693315笑い過ぎて一生忘れられないTRPG第3話ゲーム
110830117海でイチャイチャする空手部その他
111029995Call of Duty Modern Warfare(2019) 字幕プレイ Part11ゲーム
1177746857バイキングに騙された松居一代、ジョルノ・ジョバーナみたいになってしまうその他
15229990毎日が辛いホモと見る精神安定剤2.lalaxmirei_puriその他
18629420大阪市生野区観光。旅行・アウトドア
126628590【機動戦士ガンダム】 ザク・デザートタイプ&水中用ザク 解説【ゆっくり解説】part49解説・講座
1972332691【初音ミク】バイオレンストリガー【オリジナル】音楽・サウンド
126102566平成最後の狩猟生活(その109)自然
111929946HikakinTVのOPがついに更新!?自然
165597203Brave Browser | Brave ブラウザ技術・工作
1379252967【鬼滅の刃】唯一、愛ノ詠【踊ってみた】ダンス
11611001715ひねくれZRKL壱の世その他
148069682キタキツネ(夜桜たま)動物
11791211752SSSS.パリッとマンゲーム
177325092ゆっくり霊夢とやる夫が学ぶ 昆虫大百科 part29自然
1138193520牛肉のピリ辛バター煮込み食べてみた【アル中カラカラハイボール】料理
12629844MEGWIN TVのチャンネル登録者100万人割れ…他のYouTuberは教訓にすべき社会・政治・時事
1721590300最凶の魔女ヘラジカ様アニメ
12461332327ヨルシカ - 藍二乗 (MUSIC VIDEO)音楽・サウンド
132360983【韓国】BBCによる韓国外相へのインタビュー(日本語字幕付き)【GSOMIA】社会・政治・時事
1143238463粉チーズ何キロ掛ける?【なかやまきんに君】料理
15428230新潟土産で呑む【長火鉢とおっさん113】料理
15021772#軽トラで本気出してみた 2018年春乗り物
135323912【東北きりたん車載】SR400ツーリング日記 Part33乗り物
1184153704WBSSバンタム級準決勝WBA王者 井上尚弥 VS IBF王者エマヌエル・ロドリゲススポーツ
129729991[ゆっくり実況]えどふぃらゴールデンストームその6ゲーム
113796874平成最後の狩猟生活(その85)自然
15129729【おまけ】ヒプマイでロールプレイングゲーム踊ってみた【練習2日目】ダンス
19829998Fairy gone フェアリーゴーン第7話『がんこな鍛冶屋と偏屈ウサギ』アニメ
1192719197【鬼滅のMMD】アンヘル【上弦弐と蟲柱】エンターテイメント
163148077名探偵ピカチュウを作ってみた技術・工作
125029920【雪山人狼】加藤純一に亡骸を引きずられ捨てられたVtuber 夏色まつりその他
1105128414「魅ん魔の」SCP解説動画part98「リクエストお待ちしております」解説・講座
1161229227豚しゃぶいっぱい食べてみた【アル中カラカラハイボール】料理
152228275うちの琴葉姉妹は食べ盛り#25「豚ヒレ肉のベーコン巻きバルサミコソース」料理
123029583【RTA】ゆるふわ融雪の谷川岳西黒尾根リアル登山アタック【04:50:43】旅行・アウトドア
15529958うそなきをしながらポケモンヌードル醤油味を食べるオーダイルその他
134629915雨が降るたび服が透ける九州バイク旅Part4【ボイロ】乗り物
22702013034ダンベル何キロ持てる? OP「お願いマッスル」アニメ
22702163578【初音ミク】ビターチョコデコレーション【syudou】音楽・サウンド
243326962電動消しゴムを爆速化したい技術・工作
2204116745平成最後の狩猟生活(その77)旅行・アウトドア
215628319企画候補である「男性ライバー、夜の修学旅行男子部屋雑談配信」の懸念点について旅行・アウトドア
2919281515【コメ付き】滑落旅行・アウトドア
28129315ごはん?って聞いてみた動物
225928357動画にあのアニメのエンディングを挿入するとめっさ引きが良くなる件⑦技術・工作
216829856正月寿留女【長火鉢とおっさん101】料理
222229922因縁の母猫、子猫を人間に託しに来る動物
252229608うちの琴葉姉妹は食べ盛り#27「クラブハウスサンドイッチ」料理
2425213578ダンボールでBEAを作ったら本家BEAに寄贈することになった技術・工作
27729851警視庁 特務部 特殊凶悪犯対策室 第七課 -トクナナ- File.03 「三重の罠」アニメ
234227874買った魚は最後まで5回ばばちゃんの竜田揚げ【VOICEROIDキッチン】料理
2304143660平成最後の狩猟生活(その76)旅行・アウトドア
22741436312ダンベル何キロ持てる? OP お願いマッスル full音楽・サウンド
211723297一人でハンバーグ作ってみた!!自然
2149123212TikTokレベルで『クレイジー・ビート』を踊ってみたダンス
2783235522富士登山滑落てつさんの笑顔自然
214429575【リアル登山アタック】雪の谷川岳1:56:50【団体戦】旅行・アウトドア
2428266634【ゆっくり解説】世界の奇人・変人・偉人紹介【樋口季一郎】解説・講座
221028605いい道第3話サブマリンストリート編解説・講座
21441760195遊戯vs.遊戯(まるで実写)その他
2951367789遊戯vs.遊戯(まるで実写)デュエリッショナル 決闘の流儀その他
225228683LEGOで3本の針を1つの回転軸上で回す普通の時計を作った解説・講座
2185108731平成最後の狩猟生活(その82)自然
225930011[ゆっくり実況]サイボーグとらちゃんその60ゲーム
231429673ファーウェイ幹部がポーランドで逮捕される容疑はもちろん…社会・政治・時事
235821557【東北きりたん車載】SR400ツーリング日記 Part37乗り物
3371140236全自動手書きレポートマシンを作ってみた!技術・工作
3470119163平成最後の狩猟生活(その87)自然
3736304334【ゆっくり解説】世界の奇人・変人・偉人紹介【アラン・チューリング】解説・講座
333298792平成最後の狩猟生活(その89)自然
3440130517平成最後の狩猟生活(その90)旅行・アウトドア
37526747伝説の衝撃【ロングハイライト】18-19CL ベスト16 2lg レアル・マドリード vs アヤックススポーツ
350296242【VRオナホ】バーチャルセックスできるようにしてみた。技術・工作
3350218291【ゆっくり解説】世界の奇人・変人・偉人紹介【アレクサンドル・スヴォーロフ】解説・講座
3356110902野宿の勧め(その14)自然
3153137027キャンピングカー大横転で死にかけた男たちの北海道キャンプの旅 Part3「大事故編」旅行・アウトドア
348528780[UEFAチャンピオンズリーグ18-19 準決勝 2lg】 アヤックス vs トッテナムスポーツ
3344101472平成最後の狩猟生活(その108)自然
34191278701笑い過ぎて一生忘れられないTRPGゲーム
322929959蜜月レイプ! 性帝と化した先輩 THK√.mp3その他
3669624045笑い過ぎて一生忘れられないTRPG第8話ゲーム
333596365平成最後の狩猟生活(その96)自然
326529961「魅ん魔の」SCP解説動画part100「リクエストお待ちしております」エンターテイメント
3217129264【中島抜きでも伝説の大勝】アジアカップ準決勝日本 対 イランスポーツ
3414128293平成最後の狩猟生活(その93)旅行・アウトドア
386323630【東北きりたん車載】SR400ツーリング日記 Part36 年明け九州編その3乗り物
334029942変態調教師†悔い改めて† 7章 .ssbuその他
4184110012いらすとや ドーナツホール(ハチ) VOCALOID UTAU技術・工作
434029834けものフレンズ2の悪意を削ぎ落としたもの4-2話その他
4767248367【ゆっくり解説】世界の奇人・変人・偉人紹介【リュドミラ・パブリチェンコ】解説・講座
425329693朝日新聞「安倍外交の限界見えた」【サンデイブレイク114】社会・政治・時事
41136121864【RTA】ゆるふわ厳冬期富士山攻略リアル登山アタック(前編)【テントが飛ぶなら人も飛ぶ】旅行・アウトドア
429229252【実況×薬学解説】薬剤師マキの挑む製薬工場開発S2 #4【VOICEROID】解説・講座
434728785【セーラー服】好き!雪!本気マジック踊ってみた【榎並えな】ダンス
419827543PG ダブルオーガンダムセブンソード/G RGダブルオークアンタフルセイバー ユニコーンペルフェクティビリティゆっくりプラモ動画技術・工作
4431334647幕末志士西郷のリークSP(バンドマン編)ラジオ
4441120661アニソン2on2ダンスバトル『あきばっか~のvol.18』決勝戦ダンス
470427870【東北きりたん車載】SR400ツーリング日記 Part34 年明け九州編その1乗り物
4742243263【ゆっくり解説】世界の奇人・変人・偉人紹介【ヘレン・ケラー&アン・サリバン】解説・講座
433129902ジョジョのコネタの冒険 黄金の風 その17アニメ
422726499いつでも一瞬で抜けるようになりましたwww自然
4111029612チョコレートガナッシュサンドクッキー【お菓子作り】ASMR料理
4659237342【ゆっくり解説】世界の奇人・変人・偉人紹介【レオナルド・ダ・ヴィンチ】解説・講座
43741669830遊戯vs.遊戯with海馬(まるで実写)~春キャベツのペペロンチーノ~その他
434628959釣った魚は最後まで#35鯛のカルパッチョ【VOICEROIDキッチン】料理
4407209759【ゆっくり解説】世界の奇人・変人・偉人紹介【マハトマ・ガンジー】解説・講座
4571195943かばんちゃん黒幕説動物
5596133694アニソン2on2ダンスバトル『あきばっか~のvol.16』決勝戦ダンス
54361356691分間、それで終わった。乗り物
5405123859【旅動画】ぼくらは新世界で旅をする Part:8【四国バーガー編】旅行・アウトドア
5574103760会社辞めてninja250で日本一周 Phase 15乗り物
6652100457会社辞めてninja250で日本一周 Phase 16乗り物
643329890大物Youtuber【りんくうの星】観覧車乗ってみた(夜の部)【りんくうタウン】その他
64331440373かぐや様は告らせたい~天才たちの恋愛頭脳戦~第1話「映画に誘わせたい/かぐや様は止められたい/かぐや様はいただきたい」アニメ
7722310982【ゆっくり解説】世界の奇人・変人・偉人紹介【舩坂弘】解説・講座
7552299242分の米韓首脳会談→評価したい親密な日米首脳会談→空しさだけが残る【サンデイブレイク104】社会・政治・時事
794929924仮面ライダーフォーゼ第47話「親・友・別・離」アニメ
764229965【実況】ドラゴンクエストをいい大人達が本気で遊んでみた。完結編ゲーム
74091219086鬼滅の刃第一話残酷アニメ
81084108582落ちる癖乗り物
81289353089富士山100%RTA 17時間35分【前編】旅行・アウトドア
8950113256【政見放送】全国比例 NHKから国民を守る党 立花孝志 2019社会・政治・時事
867429937キラッとプリ☆チャン第73話「さらちゃん悩む…スランプを乗り越えろ!だもん」アニメ
828351083785【幕末志士】SAKKACHAN2前編【実況プレイ】ゲーム
9124129961明治東亰恋伽第4話「花の浅草ランデブー」アニメ
10807106113宝くじよりも当たらない乗り物
10967810774【実況】ナポリの遭難者たちpart1【RimWorld】ゲーム
111163107158会社辞めてninja250で日本一周 Phase 14乗り物
1313791046902655kg乗り物
142803803290【幕末志士】スーパーボンバーマン【実況プレイ】ゲーム
141651152595俺だってできない乗り物
151473141925違法な事乗り物
151453178650声優の面白名場面集47ラジオ
181863138013汚染乗り物
232368980617けものフレンズ2第1話「きおくのかなた」アニメ
252460463608アイドル部 本気の学力テスト ~おバカtuberになるのは誰だ?!~【エイプリルフール?】エンターテイメント

5.考察

まず4.の実験の結果について考察し、つぎに今後の課題について述べる。

5.1.実験結果について

 再生回数がとても多い動画は確かに弾幕の個数と弾幕面積が大きく出たところがあるが、再生数別にみると再生回数が多ければ必ず弾幕が発生するというわけではないという結果であった。 弾幕が発生しない動画はコメントしづらいような動画内容である場合が多く、ジャンルによって弾幕個数と弾幕面積の結果の特性が異なっている。例えば音楽・サウンドの動画はどれほど動画や音楽の内容が素晴らしくても、サビや動画の始まり、動画の終わりなどの区切り以外はコメントが少なく分散する傾向であった。一方アニメの配信は初回配信や一定期間最新話が無料なので一定のアニメファンは内容にかかわらずに再生するので、再生回数は他の動画に比べて必ず多い。そのため、コメントしづらい動画であっても再生回数が多くなるのは当然である。

5.2.弾幕面積について

本研究では弾幕の濃さを抽出するため、弾幕面積を定義し、結果を得た。つまり本研究ではこの弾幕面積の定義によってはより深い分析ができる可能性がある。 今回の実験では弾幕面積の定義において、25 というパラメータを固定した。これにより、動画に対して、一定の評価ができた。25 という値については議論の余地があるが極端な値にしなければ似たような結果になると思われる。

5.3.弾幕面積と動画の内容の関係性について

弾幕面積と動画の内容の関係性をみるため図 16 の①と②の動画について述べる。 ①の 2 つの動画は、弾幕面積の割合がかなり大きい。この二つの動画はいずれも同じ動画投稿者によるもので「【幕末志士】SAKKACHAN2 前編【実況プレイ】」と「【幕末志士】スーパーボンバーマン【実況プレイ】」である。この二つの動画は共通して笑いどころが多数存在する。コメントもその部分に集中している。単純に笑える部分についてはコメントが付きやすいと考えられ、より多くの視聴者を笑わせることができれば弾幕面積が増えやすいと思われる。つまりレベルの高い投稿者による面白い動画である。 一方②の動画は「けものフレンズ2第 1 話「きおくのかなた」」である。弾幕面積と個数は他動画と同じような比率であり数も多いが、コメントは罵詈雑言であったり、否定的だったり皮肉であるように思われても仕方ないような内容で、それが動画の要所要所で発生している状態である。 つまり質の悪いアニメへの批判が多数書かれている。アニメは再生数が多いので、質が悪いとコメントが多くなる。 よってアニメ以外では質の高さと弾幕面積は関連付けられている。一方必ず一定の再生数が得られるアニメでは、おもしろくなく批判が多くても共に弾幕面積が多くなる。

図16 再生回数 50 万以上の動画のジャンル別弾幕面積と弾幕個数(再掲)

図16 再生回数 50 万以上の動画のジャンル別弾幕面積と弾幕個数(再掲)

5.4.今後の課題

5.4.1.対象とする動画について

5.1.でも触れたようにジャンルか何か別の要素によって弾幕個数と弾幕面積の特徴が異なっているため、対象とする動画は再生回数が多い動画ではなく、ジャンルや動画投稿者別あるいは別の何かを対象とした動画を分析するべきである。今回はアニメのみが異なることがわかったが、今後は分析対象を見つけることは今後の課題である。

5.4.2.分析データについて

今回の研究ではコメント表示位置についてしか分析をしていないが、コメント投稿者の数を調べれば、一人でいくつもコメントしている人がいる動画と一人当たりでそれほどコメントを打たない動画で分別をし、今回の実験で得られなかった動画の特徴が得られる可能性がある。 また、コメントの文字列を分析すれば5.3.で触れたような否定的なコメントを抽出して動画を分別することができる可能性がある。 コメント表示位置以外の分析をする手法を見つけることは今後の課題である。

6.まとめ

 本研究ではニコニコ動画のコメントの再生時間のどこにコメントがあるかという部分に着目した。その結果、再生回数が多い動画の特徴の一つにコメントが一部分に密集しやすいということがわかった。  今回はコメントの再生時間の位置にのみ焦点を当てたが、再生回数がとても多くても弾幕個数と弾幕面積がすくない場合もあり、ジャンルや動画投稿者、あるいは別の何かの要素別に分析をすることや、コメントの文章自体による特徴の抽出することは今後の課題である.

7.参考文献

[1]ニコニコ大百科 マイリスト,

https://dic.nicovideo.jp/a/%E3%83%9E%E3%82%A4%E3%83%AA%E3%82%B9%E3%83%88

[2]ニコニコ動画 「【実況】幕末志士達のスマブラ64 リベンジ」,

https://www.nicovideo.jp/watch/sm36106202

[3]Rapidminer RapidMiner Studio 製品情報

https://www.rapidminer.jp/rapidminer-studio/

[4] niconico コンテンツ検索 API ガイド

https://site.nicovideo.jp/search-api-docs/search.html

[5] ニコニコ大百科 「ニコニコ動画 API」

https://dic.nicovideo.jp/a/%E3%83%8B%E3%82%B3%E3%83%8B%E3%82%B3%E5%8B%95%E7%94%BBapi

[6]ニコニコ動画 「試作型 windows777 実況説明あり」,

https://www.nicovideo.jp/watch/sm8482514

[7] ニコニコ動画 「【ゆっくり解説】世界の奇人・変人・偉人紹介【リュドミラ・パブリチェンコ】」

https://www.nicovideo.jp/watch/sm35141842

8.資料

 この章では実験に使用したPythonのソースコードや、RapidMinerのオペレータの配置等を示す。

8.1.005_videoInfoAndCommentJsonToCommentDetail.py

 複数の動画情報xmlと複数のコメントjsonを一つのcsvにするPythonのプログラムである。 以下のソースコードを示す。

import os
import re
import datetime
from bs4 import BeautifulSoup
import requests
import json
import glob

def avoid_ng_word(targetStr):

    if type(targetStr) is list:
        tmpstr = '<listcomma>'.join(targetStr)
    else:
        tmpstr=str(targetStr)
    tmpstr = tmpstr.replace('\n','<br />')
    tmpstr = tmpstr.replace('\r','\\r')
    tmpstr = tmpstr.replace('\f','\\f')
    tmpstr = tmpstr.replace('\b','\\b')
    tmpstr = tmpstr.replace('\b','\\b')
    tmpstr = tmpstr.replace('\0','')
    tmpstr = tmpstr.replace('\\','\\\\')
    tmpstr = tmpstr.replace(',','<comma>')
    tmpstr = tmpstr.replace('\\u3000','<zenkaku_space>')
    tmpstr = tmpstr.replace('\u3000','<zenkaku_space>')

    return tmpstr

def avoid_ng_word_json(targetStr):

    tmpstr=str(targetStr)
    tmpstr = tmpstr.replace('(','(')
    tmpstr = tmpstr.replace(')',')')
    tmpstr = tmpstr.replace('\n','<br />')
    tmpstr = tmpstr.replace('\r','\\r')
    tmpstr = tmpstr.replace('\f','\\f')
    tmpstr = tmpstr.replace('\b','\\b')
    tmpstr = tmpstr.replace('\b','\\b')
    tmpstr = tmpstr.replace('\0','')
    tmpstr = tmpstr.replace('\\','\\\\')
    tmpstr = tmpstr.replace(',','<comma>')
    tmpstr = tmpstr.replace('\\u3000','<zenkaku_space>')
    tmpstr = tmpstr.replace('\u3000','<zenkaku_space>')

    return tmpstr

def load_video_info_xml(smId):

    xml_str=''
    with open(video_xml_pass+smId+'.xml', 'r' , encoding='cp932') as f:
        xml_str=f.read()
    
    soup = BeautifulSoup(xml_str,'html.parser')

    res=[]
    
    res.append(smId)
    res.append(soup.find_all('title')[0].string)
    res.append(soup.find_all('description')[0].string)
    res.append(soup.find_all('first_retrieve')[0].string)
    res.append(convert_length_to_vposmax(soup.find_all('length')[0].string))
    res.append(soup.find_all('view_counter')[0].string)
    res.append(soup.find_all('comment_num')[0].string)
    res.append(soup.find_all('mylist_counter')[0].string)

    tmp_tag_result=soup.find_all('tag')

    res.append(10 if len(tmp_tag_result)==11 else len(tmp_tag_result))
    for i in range(10):
        if (i<len(tmp_tag_result)):
            res.append(tmp_tag_result[i].string)
        else:
            res.append('')    
    
    res.append(soup.find_all('genre')[0].string)

    if (soup.find_all('user_id')):
        res.append(soup.find_all('user_id')[0].string)
        res.append(soup.find_all('user_nickname')[0].string)
        res.append('isUserVideo')
    else:
        res.append(soup.find_all('ch_id')[0].string)
        res.append(soup.find_all('ch_name')[0].string)
        res.append('isChVideo')
    res2=''

    for info in res:
        res2+= avoid_ng_word(info)+','

    res2=res2[:-1]

    return res2

def load_comment_json(smId):

    json_dict=None
    
    with open(comment_json_pass +smId+ '.text', 'r' , encoding='cp932') as f:
        tmp=f.read()
    try:
        json_dict=json.loads(tmp,encoding='cp932')
    except json.JSONDecodeError:
        print('エラー:'+smId)
        tmp=avoid_ng_word_json(tmp)
        try:
            json_dict=json.loads(tmp,encoding='cp932')
        except json.JSONDecodeError:
            print('最終エラー:'+smId)
            return []


    

    res=[]
    for l in json_dict:
        for chat in l.keys():
            if (chat=='chat'):
                message   =avoid_ng_word(l['chat'].get('content',''))
                date      =avoid_ng_word(l['chat'].get('date',''))
                command   =avoid_ng_word(l['chat'].get('mail',''))
                vpos      =avoid_ng_word(l['chat'].get('vpos',''))
                no        =avoid_ng_word(l['chat'].get('no',''))
                user_id   =avoid_ng_word(l['chat'].get('user_id','NoData'))
                nicoru    =avoid_ng_word(l['chat'].get('nicoru',''))
                res.append("{},{},{},{},{},{},{}".format(
message,date,command,vpos,no,user_id,nicoru))


    return res
def convert_length_to_vposmax(length_str):
    repatter=re.compile('([0-9]+):([0-9][0-9])')
    result = repatter.search(length_str)
    
    m=-1
    s=-1
    if (result):
        m=int(result.group(1))
        s=int(result.group(2))
    else:
        exit()

    return (m*60+s)*100

def checkExistAlreadyVideoId(smId):
    exist_bool=False
    with open(FILE_DIRECTORY+'UsedByFainalOutput.txt',
 mode='r', encoding='cp932') as f:
        used_video_id_list=f.readlines()
    for video_id in used_video_id_list:
        if (video_id==smId+'\n'):
            exist_bool=True
    
    return exist_bool

def decideNextVideoId(video_info_list_file,commnet_list_file,palus):
    and_list=list(set(video_info_list_file) & set(comment_file_list))

    if (palus<len(and_list)):
        return and_list[palus]
    else:
        return 'End'

FILE_DIRECTORY='C:\\workspace\\python\\niconico_v2\\'

target_directory=input('data\\以下のフォルダ名を入力')

video_xml_pass = "C:\\workspace\\python\\niconico_v2\\data\\"
video_xml_pass+=target_directory 
video_xml_pass+= "\\videoInfoTextList\\"

comment_json_pass='C:\\workspace\\python\\niconico_v2\\data\\' \
+ target_directory + '\\commentJsonTextList\\'

tmp_video_info_file_list=glob.glob(video_xml_pass+'\\*')

video_info_file_list=[]
for info in tmp_video_info_file_list:
    video_info_file_list.append(os.path.splitext(os.path.basename(info))[0])

tmp_comment_file_list=glob.glob(comment_json_pass +'\\*')
comment_file_list=[]
for info in tmp_comment_file_list:
    comment_file_list.append(os.path.splitext(os.path.basename(info))[0])


for i in range(9999999):
    target_video_id=decideNextVideoId(video_info_file_list,comment_file_list,\
palus=i)

    
    if (target_video_id=='End'):
        break#もう実行すべきファイルはない

    if (not checkExistAlreadyVideoId(target_video_id)):
        print('実行:'+target_video_id)
        #データがないVideoIdなので取得
        video_info_str=load_video_info_xml(target_video_id)
        comment_list=load_comment_json(target_video_id)

        final_str=''

        if (comment_list):
            #コメントが正常のとき
            for comment in comment_list:
                final_str+=video_info_str+','+comment+','+target_directory+'\n'

            # RapidMinerStudio用に保存
            with open(FILE_DIRECTORY+'FainalOutput.txt', mode='a') as f:
                f.write(final_str)

            #使ったIdはファイルに保存
            with open(FILE_DIRECTORY+'UsedByFainalOutput.txt', mode='a') as f:
                f.write(target_video_id+'\n')
        else:
            #コメントが正常に読み取れないとき
            pass

8.2.RapidMiner Process「010Create_vpos_list」

 8.1.で作成したcsvをインポートし、図8.2.A.の4、5、6のようにインポートしたデータを配置し、作りたいCSVからインポートしたデータだけを7につなぐと対応したvpos_list.csvというファイルが出力されるRapidminerのプロセスである。 以下に配置図と構成を表すXMLを示す。

図8.2.A.最上層部のオペレータ配置図

図8.2.A.最上層部のオペレータ配置図

図8.2.B. 図8.2.A.の13の内部のオペレータ配置図

図8.2.B. 図8.2.A.の13の内部のオペレータ配置図

<?xml version="1.0" encoding="UTF-8"?><process version="9.2.001">
  <context>
    <input>
      <location>../../data/FainalOutputs/Year</location>
    </input>
    <output/>
    <macros/>
  </context>
  <operator activated="true" class="process" compatibility="9.2.001" expanded="true" name="Process">
    <parameter key="logverbosity" value="init"/>
    <parameter key="random_seed" value="2001"/>
    <parameter key="send_mail" value="never"/>
    <parameter key="notification_email" value=""/>
    <parameter key="process_duration_for_mail" value="30"/>
    <parameter key="encoding" value="SYSTEM"/>
    <process expanded="true">
      <operator activated="true" class="time_series:generate_data_arima" compatibility="9.2.001" expanded="true" height="68" name="Generate Data (ARIMA)" width="90" x="45" y="34">
        <parameter key="name_of_new_time_series_attribute" value="id"/>
        <enumeration key="coefficients_of_the_auto-regressive_terms"/>
        <enumeration key="coefficients_of_the_moving-average_terms"/>
        <parameter key="constant" value="0.0"/>
        <parameter key="standard_deviation_of_the_innovations" value="0.0"/>
        <parameter key="length" value="10000"/>
        <parameter key="use_local_random_seed" value="false"/>
        <parameter key="local_random_seed" value="1992"/>
      </operator>
      <operator activated="true" class="generate_id" compatibility="9.2.001" expanded="true" height="82" name="Generate ID" width="90" x="179" y="34">
        <parameter key="create_nominal_ids" value="false"/>
        <parameter key="offset" value="0"/>
      </operator>
      <operator activated="true" class="remember" compatibility="9.2.001" expanded="true" height="68" name="Remember (2)" width="90" x="313" y="34">
        <parameter key="name" value="allResult"/>
        <parameter key="io_object" value="ExampleSet"/>
        <parameter key="store_which" value="1"/>
        <parameter key="remove_from_process" value="true"/>
      </operator>
      <operator activated="true" class="retrieve" compatibility="9.2.001" expanded="true" height="68" name="Retrieve midorikawa" width="90" x="179" y="391">
        <parameter key="repository_entry" value="../../data/FainalOutputs/midorikawa"/>
      </operator>
      <operator activated="true" class="retrieve" compatibility="9.2.001" expanded="true" height="68" name="Retrieve Year" width="90" x="179" y="289">
        <parameter key="repository_entry" value="../../data/FainalOutputs/Year"/>
      </operator>
      <operator activated="true" class="retrieve" compatibility="9.2.001" expanded="true" height="68" name="Retrieve YearYowai" width="90" x="179" y="187">
        <parameter key="repository_entry" value="../../data/FainalOutputs/YearYowai"/>
      </operator>
      <operator activated="true" class="generate_id" compatibility="9.2.001" expanded="true" height="82" name="Generate ID (3)" width="90" x="313" y="187">
        <parameter key="create_nominal_ids" value="false"/>
        <parameter key="offset" value="0"/>
      </operator>
      <operator activated="true" class="rename" compatibility="9.2.001" expanded="true" height="82" name="Rename (2)" width="90" x="447" y="187">
        <parameter key="old_name" value="id"/>
        <parameter key="new_name" value="comment_address"/>
        <list key="rename_additional_attributes"/>
      </operator>
      <operator activated="true" class="set_role" compatibility="9.2.001" expanded="true" height="82" name="Set Role" width="90" x="581" y="187">
        <parameter key="attribute_name" value="comment_address"/>
        <parameter key="target_role" value="regular"/>
        <list key="set_additional_roles"/>
      </operator>
      <operator activated="true" class="remember" compatibility="9.2.001" expanded="true" height="68" name="Remember" width="90" x="715" y="187">
        <parameter key="name" value="allData"/>
        <parameter key="io_object" value="ExampleSet"/>
        <parameter key="store_which" value="1"/>
        <parameter key="remove_from_process" value="true"/>
      </operator>
      <operator activated="true" class="select_attributes" compatibility="9.2.001" expanded="true" height="82" name="Select Attributes" width="90" x="849" y="187">
        <parameter key="attribute_filter_type" value="single"/>
        <parameter key="attribute" value="video_id"/>
        <parameter key="attributes" value=""/>
        <parameter key="use_except_expression" value="false"/>
        <parameter key="value_type" value="attribute_value"/>
        <parameter key="use_value_type_exception" value="false"/>
        <parameter key="except_value_type" value="time"/>
        <parameter key="block_type" value="attribute_block"/>
        <parameter key="use_block_type_exception" value="false"/>
        <parameter key="except_block_type" value="value_matrix_row_start"/>
        <parameter key="invert_selection" value="false"/>
        <parameter key="include_special_attributes" value="false"/>
      </operator>
      <operator activated="true" class="remove_duplicates" compatibility="9.2.001" expanded="true" height="103" name="Remove Duplicates" width="90" x="983" y="187">
        <parameter key="attribute_filter_type" value="single"/>
        <parameter key="attribute" value="video_id"/>
        <parameter key="attributes" value=""/>
        <parameter key="use_except_expression" value="false"/>
        <parameter key="value_type" value="attribute_value"/>
        <parameter key="use_value_type_exception" value="false"/>
        <parameter key="except_value_type" value="time"/>
        <parameter key="block_type" value="attribute_block"/>
        <parameter key="use_block_type_exception" value="false"/>
        <parameter key="except_block_type" value="value_matrix_row_start"/>
        <parameter key="invert_selection" value="false"/>
        <parameter key="include_special_attributes" value="false"/>
        <parameter key="treat_missing_values_as_duplicates" value="false"/>
      </operator>
      <operator activated="true" class="loop_examples" compatibility="9.2.001" expanded="true" height="82" name="Loop Examples" width="90" x="1318" y="187">
        <parameter key="iteration_macro" value="example"/>
        <process expanded="true">
          <operator activated="true" class="extract_macro" compatibility="9.2.001" expanded="true" height="68" name="Extract Macro" width="90" x="112" y="34">
            <parameter key="macro" value="getVideo_id"/>
            <parameter key="macro_type" value="data_value"/>
            <parameter key="statistics" value="average"/>
            <parameter key="attribute_name" value="video_id"/>
            <parameter key="example_index" value="%{example}"/>
            <list key="additional_macros"/>
          </operator>
          <operator activated="true" class="recall" compatibility="9.2.001" expanded="true" height="68" name="Recall" width="90" x="45" y="187">
            <parameter key="name" value="allData"/>
            <parameter key="io_object" value="ExampleSet"/>
            <parameter key="remove_from_store" value="false"/>
          </operator>
          <operator activated="true" class="filter_examples" compatibility="9.2.001" expanded="true" height="103" name="Filter Examples" width="90" x="179" y="187">
            <parameter key="parameter_expression" value=""/>
            <parameter key="condition_class" value="custom_filters"/>
            <parameter key="invert_filter" value="false"/>
            <list key="filters_list">
              <parameter key="filters_entry_key" value="video_id.equals.%{getVideo_id}"/>
            </list>
            <parameter key="filters_logic_and" value="true"/>
            <parameter key="filters_check_metadata" value="true"/>
          </operator>
          <operator activated="true" class="recall" compatibility="9.2.001" expanded="true" height="68" name="Recall (2)" width="90" x="715" y="340">
            <parameter key="name" value="allResult"/>
            <parameter key="io_object" value="ExampleSet"/>
            <parameter key="remove_from_store" value="false"/>
          </operator>
          <operator activated="true" class="select_attributes" compatibility="9.2.001" expanded="true" height="82" name="Select Attributes (2)" width="90" x="313" y="187">
            <parameter key="attribute_filter_type" value="subset"/>
            <parameter key="attribute" value="vpos"/>
            <parameter key="attributes" value="comment_address|vpos"/>
            <parameter key="use_except_expression" value="false"/>
            <parameter key="value_type" value="attribute_value"/>
            <parameter key="use_value_type_exception" value="false"/>
            <parameter key="except_value_type" value="time"/>
            <parameter key="block_type" value="attribute_block"/>
            <parameter key="use_block_type_exception" value="false"/>
            <parameter key="except_block_type" value="value_matrix_row_start"/>
            <parameter key="invert_selection" value="false"/>
            <parameter key="include_special_attributes" value="false"/>
          </operator>
          <operator activated="true" class="sort" compatibility="9.2.001" expanded="true" height="82" name="Sort" width="90" x="447" y="187">
            <parameter key="attribute_name" value="vpos"/>
            <parameter key="sorting_direction" value="increasing"/>
          </operator>
          <operator activated="true" class="generate_id" compatibility="9.2.001" expanded="true" height="82" name="Generate ID (2)" width="90" x="581" y="187">
            <parameter key="create_nominal_ids" value="false"/>
            <parameter key="offset" value="0"/>
          </operator>
          <operator activated="true" class="rename" compatibility="9.2.001" expanded="true" height="82" name="Rename" width="90" x="715" y="187">
            <parameter key="old_name" value="vpos"/>
            <parameter key="new_name" value="vpos_%{getVideo_id}"/>
            <list key="rename_additional_attributes">
              <parameter key="comment_address" value="comment_address_%{getVideo_id}"/>
            </list>
          </operator>
          <operator activated="true" class="concurrency:join" compatibility="9.2.001" expanded="true" height="82" name="Join" width="90" x="849" y="238">
            <parameter key="remove_double_attributes" value="false"/>
            <parameter key="join_type" value="outer"/>
            <parameter key="use_id_attribute_as_key" value="false"/>
            <list key="key_attributes">
              <parameter key="id" value="id"/>
            </list>
            <parameter key="keep_both_join_attributes" value="false"/>
          </operator>
          <operator activated="true" class="remember" compatibility="9.2.001" expanded="true" height="68" name="Remember (3)" width="90" x="983" y="238">
            <parameter key="name" value="allResult"/>
            <parameter key="io_object" value="ExampleSet"/>
            <parameter key="store_which" value="1"/>
            <parameter key="remove_from_process" value="true"/>
          </operator>
          <connect from_port="example set" to_op="Extract Macro" to_port="example set"/>
          <connect from_op="Extract Macro" from_port="example set" to_port="example set"/>
          <connect from_op="Recall" from_port="result" to_op="Filter Examples" to_port="example set input"/>
          <connect from_op="Filter Examples" from_port="example set output" to_op="Select Attributes (2)" to_port="example set input"/>
          <connect from_op="Recall (2)" from_port="result" to_op="Join" to_port="right"/>
          <connect from_op="Select Attributes (2)" from_port="example set output" to_op="Sort" to_port="example set input"/>
          <connect from_op="Sort" from_port="example set output" to_op="Generate ID (2)" to_port="example set input"/>
          <connect from_op="Generate ID (2)" from_port="example set output" to_op="Rename" to_port="example set input"/>
          <connect from_op="Rename" from_port="example set output" to_op="Join" to_port="left"/>
          <connect from_op="Join" from_port="join" to_op="Remember (3)" to_port="store"/>
          <portSpacing port="source_example set" spacing="0"/>
          <portSpacing port="sink_example set" spacing="0"/>
          <portSpacing port="sink_output 1" spacing="0"/>
        </process>
      </operator>
      <operator activated="true" class="recall" compatibility="9.2.001" expanded="true" height="68" name="Recall (4)" width="90" x="1452" y="187">
        <parameter key="name" value="allResult"/>
        <parameter key="io_object" value="ExampleSet"/>
        <parameter key="remove_from_store" value="false"/>
      </operator>
      <operator activated="true" class="select_attributes" compatibility="9.2.001" expanded="true" height="82" name="Select Attributes (3)" width="90" x="1586" y="187">
        <parameter key="attribute_filter_type" value="single"/>
        <parameter key="attribute" value="id"/>
        <parameter key="attributes" value=""/>
        <parameter key="use_except_expression" value="false"/>
        <parameter key="value_type" value="attribute_value"/>
        <parameter key="use_value_type_exception" value="false"/>
        <parameter key="except_value_type" value="time"/>
        <parameter key="block_type" value="attribute_block"/>
        <parameter key="use_block_type_exception" value="false"/>
        <parameter key="except_block_type" value="value_matrix_row_start"/>
        <parameter key="invert_selection" value="true"/>
        <parameter key="include_special_attributes" value="false"/>
      </operator>
      <operator activated="true" class="write_csv" compatibility="9.2.001" expanded="true" height="82" name="Write CSV" width="90" x="1720" y="187">
        <parameter key="csv_file" value="C:\workspace\python\niconico_v2\ToRapidminer\vpos_list.csv"/>
        <parameter key="column_separator" value=","/>
        <parameter key="write_attribute_names" value="true"/>
        <parameter key="quote_nominal_values" value="true"/>
        <parameter key="format_date_attributes" value="true"/>
        <parameter key="append_to_file" value="false"/>
        <parameter key="encoding" value="Shift_JIS"/>
      </operator>
      <connect from_op="Generate Data (ARIMA)" from_port="arima" to_op="Generate ID" to_port="example set input"/>
      <connect from_op="Generate ID" from_port="example set output" to_op="Remember (2)" to_port="store"/>
      <connect from_op="Retrieve midorikawa" from_port="output" to_op="Generate ID (3)" to_port="example set input"/>
      <connect from_op="Generate ID (3)" from_port="example set output" to_op="Rename (2)" to_port="example set input"/>
      <connect from_op="Rename (2)" from_port="example set output" to_op="Set Role" to_port="example set input"/>
      <connect from_op="Set Role" from_port="example set output" to_op="Remember" to_port="store"/>
      <connect from_op="Remember" from_port="stored" to_op="Select Attributes" to_port="example set input"/>
      <connect from_op="Select Attributes" from_port="example set output" to_op="Remove Duplicates" to_port="example set input"/>
      <connect from_op="Remove Duplicates" from_port="example set output" to_op="Loop Examples" to_port="example set"/>
      <connect from_op="Recall (4)" from_port="result" to_op="Select Attributes (3)" to_port="example set input"/>
      <connect from_op="Select Attributes (3)" from_port="example set output" to_op="Write CSV" to_port="input"/>
      <connect from_op="Write CSV" from_port="through" to_port="result 1"/>
      <portSpacing port="source_input 1" spacing="0"/>
      <portSpacing port="sink_result 1" spacing="0"/>
      <portSpacing port="sink_result 2" spacing="0"/>
    </process>
  </operator>
</process>

8.3.015_vposToCommentcounter.py

8.2.で作成したvpos_list.csv からコメントの表示量を求め、結果をcommentCounter.csv に出力するPythonのプログラムである。 以下にソースコードを示す。

import csv
import pprint
import os
import re

def read_vpos_list():
    with open(r'C:\workspace\python\niconico_v2\ToRapidminer\vpos_list.csv') as f:
        reader = csv.reader(f)
        l = [row for row in reader]

    return l

def judgment_data_type(s):

    repatter=re.compile(r'comment_address_.*')
    result = repatter.search(s)
        
    if (result):
        #列の属性名はcomment_address
        return 'comment_address'
    
    repatter=re.compile(r'comment_counter_.*')
    result = repatter.search(s)
        
    if (result):
        #列の属性名はcomment_counter
        return 'comment_counter'

    repatter=re.compile(r'vpos_.*')
    result = repatter.search(s)
    if (result):
        #列の属性名はvpos
       return 'vpos'

    if (s=='id'):
        return 'id'
    return ''


FILE_DIRECTORY=os.getcwd()+'\\'

input_csv=read_vpos_list()

csv_zokusei_name=input_csv[0]

input_csv=input_csv[1:]
csv_hight=len(input_csv)
csv_width=len(input_csv[0])

#属性名作成
output_csv=[[]]
for name in csv_zokusei_name:
    repatter=re.compile(r'comment_address_.*')
    result = repatter.search(name)
    if (result):
        output_csv[0].append(name)
        continue

    if (name=='id'):
        output_csv[0].append(name)
        continue

    

    repatter=re.compile(r'vpos_(.*)')
    result = repatter.search(name)

    video_id=result.group(1)
    if (result):
        output_csv[0].append('comment_counter_'+video_id)
        continue







for i in range(csv_hight):
    output_csv.append([])

for x in range(csv_width):
    branch = judgment_data_type(csv_zokusei_name[x])

    comment_counter=0
    last_vpos=0
    index_last_vpos=0
    index_now=0

    for y in range(csv_hight):
        if (branch=='comment_address'):
            output_csv[y+1].append(input_csv[y][x])
        
        if (branch=='vpos'):
            if (y==0):
                comment_counter=0
                last_vpos=int(input_csv[0][x])
                index_last_vpos=0
                

            tmpLoopBool=True
            while (tmpLoopBool):
                if (input_csv[y][x]==''):
                    output_csv[y+1].append('')
                    break

                now_vpos=int(input_csv[y][x])

                if (last_vpos + 500 < now_vpos):
                    comment_counter-=1
                    index_last_vpos+=1
                    last_vpos=int(input_csv[index_last_vpos][x])
                else:
                    comment_counter+=1
                    output_csv[y+1].append(str(comment_counter))
                    tmpLoopBool=False

    pass
    

output_csv2=[['comment_address','display_comment_count']]

output_csv2_index=0

tmplist=[[]]

for x in range(int((csv_width-1)/2)):
    for y in range(csv_hight):
        if (output_csv[y+1][x*2+1]==''):
            break
        output_csv2.append([output_csv[y+1][x*2+1],output_csv[y+1][x*2]])
        

    

with open(r'C:\workspace\python\niconico_v2\ToRapidminer\commentCounter.csv', 'w') as f:
    writer = csv.writer(f)
    writer.writerows(output_csv2)

passimport csv
import pprint
import os
import re

def read_vpos_list():
    with open(r'C:\workspace\python\niconico_v2\ToRapidminer\vpos_list.csv') as f:
        reader = csv.reader(f)
        l = [row for row in reader]

    return l

def judgment_data_type(s):

    repatter=re.compile(r'comment_address_.*')
    result = repatter.search(s)
        
    if (result):
        #列の属性名はcomment_address
        return 'comment_address'
    
    repatter=re.compile(r'comment_counter_.*')
    result = repatter.search(s)
        
    if (result):
        #列の属性名はcomment_counter
        return 'comment_counter'

    repatter=re.compile(r'vpos_.*')
    result = repatter.search(s)
    if (result):
        #列の属性名はvpos
       return 'vpos'

    if (s=='id'):
        return 'id'
    return ''


FILE_DIRECTORY=os.getcwd()+'\\'

input_csv=read_vpos_list()

csv_zokusei_name=input_csv[0]

input_csv=input_csv[1:]
csv_hight=len(input_csv)
csv_width=len(input_csv[0])

#属性名作成
output_csv=[[]]
for name in csv_zokusei_name:
    repatter=re.compile(r'comment_address_.*')
    result = repatter.search(name)
    if (result):
        output_csv[0].append(name)
        continue

    if (name=='id'):
        output_csv[0].append(name)
        continue

    

    repatter=re.compile(r'vpos_(.*)')
    result = repatter.search(name)

    video_id=result.group(1)
    if (result):
        output_csv[0].append('comment_counter_'+video_id)
        continue







for i in range(csv_hight):
    output_csv.append([])

for x in range(csv_width):
    branch = judgment_data_type(csv_zokusei_name[x])

    comment_counter=0
    last_vpos=0
    index_last_vpos=0
    index_now=0

    for y in range(csv_hight):
        if (branch=='comment_address'):
            output_csv[y+1].append(input_csv[y][x])
        
        if (branch=='vpos'):
            if (y==0):
                comment_counter=0
                last_vpos=int(input_csv[0][x])
                index_last_vpos=0
                

            tmpLoopBool=True
            while (tmpLoopBool):
                if (input_csv[y][x]==''):
                    output_csv[y+1].append('')
                    break

                now_vpos=int(input_csv[y][x])

                if (last_vpos + 500 < now_vpos):
                    comment_counter-=1
                    index_last_vpos+=1
                    last_vpos=int(input_csv[index_last_vpos][x])
                else:
                    comment_counter+=1
                    output_csv[y+1].append(str(comment_counter))
                    tmpLoopBool=False

    pass
    

output_csv2=[['comment_address','display_comment_count']]

output_csv2_index=0

tmplist=[[]]

for x in range(int((csv_width-1)/2)):
    for y in range(csv_hight):
        if (output_csv[y+1][x*2+1]==''):
            break
        output_csv2.append([output_csv[y+1][x*2+1],output_csv[y+1][x*2]])
        

    

with open(r'C:\workspace\python\niconico_v2\ToRapidminer\commentCounter.csv', 'w') as f:
    writer = csv.writer(f)
    writer.writerows(output_csv2)

pass

8.4.RapidMiner Process「020CreateDesplayCounter」

 8.3.から出力したcommentCounter.csvのコメント表示量のデータを元のデータに追加して結果を001data.csvに出力するRapidminerのプロセスである。 以下に配置図と構成を表すXMLを示す。

図8.4.A 最上層のオペレータの配置

図8.4.A 最上層のオペレータの配置

<?xml version="1.0" encoding="UTF-8"?><process version="9.2.001">
  <context>
    <input>
      <location>../../data/FainalOutputs/YearYowai</location>
    </input>
    <output/>
    <macros/>
  </context>
  <operator activated="true" class="process" compatibility="9.2.001" expanded="true" name="Process">
    <parameter key="logverbosity" value="init"/>
    <parameter key="random_seed" value="2001"/>
    <parameter key="send_mail" value="never"/>
    <parameter key="notification_email" value=""/>
    <parameter key="process_duration_for_mail" value="30"/>
    <parameter key="encoding" value="SYSTEM"/>
    <process expanded="true">
      <operator activated="true" class="read_csv" compatibility="9.2.001" expanded="true" height="68" name="Read CSV" width="90" x="447" y="34">
        <parameter key="csv_file" value="C:\workspace\python\niconico_v2\ToRapidminer\commentCounter.csv"/>
        <parameter key="column_separators" value=","/>
        <parameter key="trim_lines" value="false"/>
        <parameter key="use_quotes" value="true"/>
        <parameter key="quotes_character" value="&quot;"/>
        <parameter key="escape_character" value="\"/>
        <parameter key="skip_comments" value="false"/>
        <parameter key="comment_characters" value="#"/>
        <parameter key="starting_row" value="1"/>
        <parameter key="parse_numbers" value="true"/>
        <parameter key="decimal_character" value="."/>
        <parameter key="grouped_digits" value="false"/>
        <parameter key="grouping_character" value=","/>
        <parameter key="infinity_representation" value=""/>
        <parameter key="date_format" value=""/>
        <parameter key="first_row_as_names" value="true"/>
        <list key="annotations"/>
        <parameter key="time_zone" value="SYSTEM"/>
        <parameter key="locale" value="English (United States)"/>
        <parameter key="encoding" value="SYSTEM"/>
        <parameter key="read_all_values_as_polynominal" value="false"/>
        <list key="data_set_meta_data_information"/>
        <parameter key="read_not_matching_values_as_missings" value="true"/>
        <parameter key="datamanagement" value="double_array"/>
        <parameter key="data_management" value="auto"/>
      </operator>
      <operator activated="true" class="retrieve" compatibility="9.2.001" expanded="true" height="68" name="Retrieve Year" width="90" x="45" y="238">
        <parameter key="repository_entry" value="../../data/FainalOutputs/Year"/>
      </operator>
      <operator activated="true" class="retrieve" compatibility="9.2.001" expanded="true" height="68" name="Retrieve YearYowai" width="90" x="45" y="136">
        <parameter key="repository_entry" value="../../data/FainalOutputs/YearYowai"/>
      </operator>
      <operator activated="true" class="retrieve" compatibility="9.2.001" expanded="true" height="68" name="Retrieve midorikawa" width="90" x="45" y="340">
        <parameter key="repository_entry" value="../../data/FainalOutputs/midorikawa"/>
      </operator>
      <operator activated="true" class="generate_id" compatibility="9.2.001" expanded="true" height="82" name="Generate ID (3)" width="90" x="179" y="187">
        <parameter key="create_nominal_ids" value="false"/>
        <parameter key="offset" value="0"/>
      </operator>
      <operator activated="true" class="rename" compatibility="9.2.001" expanded="true" height="82" name="Rename (2)" width="90" x="313" y="187">
        <parameter key="old_name" value="id"/>
        <parameter key="new_name" value="comment_address"/>
        <list key="rename_additional_attributes"/>
      </operator>
      <operator activated="true" class="set_role" compatibility="9.2.001" expanded="true" height="82" name="Set Role" width="90" x="447" y="187">
        <parameter key="attribute_name" value="comment_address"/>
        <parameter key="target_role" value="regular"/>
        <list key="set_additional_roles"/>
      </operator>
      <operator activated="true" class="concurrency:join" compatibility="9.2.001" expanded="true" height="82" name="Join" width="90" x="581" y="85">
        <parameter key="remove_double_attributes" value="true"/>
        <parameter key="join_type" value="left"/>
        <parameter key="use_id_attribute_as_key" value="false"/>
        <list key="key_attributes">
          <parameter key="comment_address" value="comment_address"/>
        </list>
        <parameter key="keep_both_join_attributes" value="false"/>
      </operator>
      <operator activated="true" class="multiply" compatibility="9.2.001" expanded="true" height="103" name="Multiply" width="90" x="715" y="85"/>
      <operator activated="true" class="select_attributes" compatibility="9.2.001" expanded="true" height="82" name="Select Attributes" width="90" x="849" y="187">
        <parameter key="attribute_filter_type" value="subset"/>
        <parameter key="attribute" value="video_id"/>
        <parameter key="attributes" value="video_id"/>
        <parameter key="use_except_expression" value="false"/>
        <parameter key="value_type" value="attribute_value"/>
        <parameter key="use_value_type_exception" value="false"/>
        <parameter key="except_value_type" value="time"/>
        <parameter key="block_type" value="attribute_block"/>
        <parameter key="use_block_type_exception" value="false"/>
        <parameter key="except_block_type" value="value_matrix_row_start"/>
        <parameter key="invert_selection" value="false"/>
        <parameter key="include_special_attributes" value="false"/>
      </operator>
      <operator activated="true" class="aggregate" compatibility="9.2.001" expanded="true" height="82" name="Aggregate" width="90" x="983" y="187">
        <parameter key="use_default_aggregation" value="false"/>
        <parameter key="attribute_filter_type" value="all"/>
        <parameter key="attribute" value=""/>
        <parameter key="attributes" value=""/>
        <parameter key="use_except_expression" value="false"/>
        <parameter key="value_type" value="attribute_value"/>
        <parameter key="use_value_type_exception" value="false"/>
        <parameter key="except_value_type" value="time"/>
        <parameter key="block_type" value="attribute_block"/>
        <parameter key="use_block_type_exception" value="false"/>
        <parameter key="except_block_type" value="value_matrix_row_start"/>
        <parameter key="invert_selection" value="false"/>
        <parameter key="include_special_attributes" value="false"/>
        <parameter key="default_aggregation_function" value="average"/>
        <list key="aggregation_attributes">
          <parameter key="video_id" value="count"/>
        </list>
        <parameter key="group_by_attributes" value="video_id"/>
        <parameter key="count_all_combinations" value="false"/>
        <parameter key="only_distinct" value="false"/>
        <parameter key="ignore_missings" value="true"/>
      </operator>
      <operator activated="true" class="concurrency:join" compatibility="9.2.001" expanded="true" height="82" name="Join (2)" width="90" x="1117" y="85">
        <parameter key="remove_double_attributes" value="true"/>
        <parameter key="join_type" value="left"/>
        <parameter key="use_id_attribute_as_key" value="false"/>
        <list key="key_attributes">
          <parameter key="video_id" value="video_id"/>
        </list>
        <parameter key="keep_both_join_attributes" value="false"/>
      </operator>
      <operator activated="true" class="rename" compatibility="9.2.001" expanded="true" height="82" name="Rename" width="90" x="1251" y="85">
        <parameter key="old_name" value="count(video_id)"/>
        <parameter key="new_name" value="got_comment_num"/>
        <list key="rename_additional_attributes"/>
      </operator>
      <operator activated="true" class="generate_attributes" compatibility="9.2.001" expanded="true" height="82" name="Generate Attributes" width="90" x="1385" y="85">
        <list key="function_descriptions">
          <parameter key="margin_comment_by_video_length" value="(5/3)*([length]/100)/[got_comment_num]"/>
        </list>
        <parameter key="keep_all" value="true"/>
      </operator>
      <operator activated="true" class="write_csv" compatibility="9.2.001" expanded="true" height="82" name="Write CSV" width="90" x="1519" y="85">
        <parameter key="csv_file" value="C:\freedomTmp\001data.csv"/>
        <parameter key="column_separator" value=","/>
        <parameter key="write_attribute_names" value="true"/>
        <parameter key="quote_nominal_values" value="true"/>
        <parameter key="format_date_attributes" value="true"/>
        <parameter key="append_to_file" value="false"/>
        <parameter key="encoding" value="SYSTEM"/>
      </operator>
      <connect from_op="Read CSV" from_port="output" to_op="Join" to_port="left"/>
      <connect from_op="Retrieve midorikawa" from_port="output" to_op="Generate ID (3)" to_port="example set input"/>
      <connect from_op="Generate ID (3)" from_port="example set output" to_op="Rename (2)" to_port="example set input"/>
      <connect from_op="Rename (2)" from_port="example set output" to_op="Set Role" to_port="example set input"/>
      <connect from_op="Set Role" from_port="example set output" to_op="Join" to_port="right"/>
      <connect from_op="Join" from_port="join" to_op="Multiply" to_port="input"/>
      <connect from_op="Multiply" from_port="output 1" to_op="Join (2)" to_port="left"/>
      <connect from_op="Multiply" from_port="output 2" to_op="Select Attributes" to_port="example set input"/>
      <connect from_op="Select Attributes" from_port="example set output" to_op="Aggregate" to_port="example set input"/>
      <connect from_op="Aggregate" from_port="example set output" to_op="Join (2)" to_port="right"/>
      <connect from_op="Join (2)" from_port="join" to_op="Rename" to_port="example set input"/>
      <connect from_op="Rename" from_port="example set output" to_op="Generate Attributes" to_port="example set input"/>
      <connect from_op="Generate Attributes" from_port="example set output" to_op="Write CSV" to_port="input"/>
      <connect from_op="Write CSV" from_port="through" to_port="result 1"/>
      <portSpacing port="source_input 1" spacing="0"/>
      <portSpacing port="sink_result 1" spacing="0"/>
      <portSpacing port="sink_result 2" spacing="0"/>
    </process>
  </operator>
</process>

8.5.RapidMiner Process「040AllRemake」

 8.4.で作成した001data.csvから弾幕個数と弾幕面積を求めるRapidminerのプロセスである。以下にオペレータの配置と構成を表すXMLを示す。

図8.5.A 最上層のオペレータの配置

図 8.5.A.最上層のオペレータの配置

図8.5.B. 図8.5.A.の1の内部のオペレータ配置図

図8.5.B. 図8.5.A.の1の内部のオペレータ配置図

図8.5.C. 図8.5.A.の2の内部のオペレータ配置図

図8.5.C. 図8.5.A.の2の内部のオペレータ配置図

図8.5.D. 図8.5.A.の2の内部のオペレータ配置図

図8.5.D. 図8.5.A.の2の内部のオペレータ配置図

図8.5.E. 図8.5.A.の6の内部のオペレータ配置図

図8.5.E. 図8.5.A.の6の内部のオペレータ配置図

図8.5.F. 図8.5.E.の2の内部のオペレータ配置図

図8.5.F. 図8.5.E.の2の内部のオペレータ配置図

図8.5.G. 図8.5.E.の3の内部のオペレータ配置図

図8.5.G. 図8.5.E.の3の内部のオペレータ配置図

図8.5.H. 図8.5.G.の13の内部のオペレータ配置図

図8.5.H. 図8.5.G.の13の内部のオペレータ配置図

図8.5.I. 図8.5.H.の2の内部のオペレータ配置図

図8.5.I. 図8.5.H.の2の内部のオペレータ配置図

<?xml version="1.0" encoding="UTF-8"?><process version="9.2.001">
  <context>
    <input/>
    <output/>
    <macros/>
  </context>
  <operator activated="true" class="process" compatibility="9.2.001" expanded="true" name="Process">
    <parameter key="logverbosity" value="init"/>
    <parameter key="random_seed" value="2001"/>
    <parameter key="send_mail" value="never"/>
    <parameter key="notification_email" value=""/>
    <parameter key="process_duration_for_mail" value="30"/>
    <parameter key="encoding" value="SYSTEM"/>
    <process expanded="true">
      <operator activated="true" class="subprocess" compatibility="9.2.001" expanded="true" height="82" name="Subprocess" width="90" x="45" y="289">
        <process expanded="true">
          <operator activated="true" breakpoints="after" class="read_csv" compatibility="9.2.001" expanded="true" height="68" name="Read CSV (2)" width="90" x="45" y="34">
            <parameter key="csv_file" value="C:\freedomTmp\001data.csv"/>
            <parameter key="column_separators" value=","/>
            <parameter key="trim_lines" value="false"/>
            <parameter key="use_quotes" value="true"/>
            <parameter key="quotes_character" value="&quot;"/>
            <parameter key="escape_character" value="\"/>
            <parameter key="skip_comments" value="false"/>
            <parameter key="comment_characters" value="#"/>
            <parameter key="starting_row" value="1"/>
            <parameter key="parse_numbers" value="true"/>
            <parameter key="decimal_character" value="."/>
            <parameter key="grouped_digits" value="false"/>
            <parameter key="grouping_character" value=","/>
            <parameter key="infinity_representation" value=""/>
            <parameter key="date_format" value=""/>
            <parameter key="first_row_as_names" value="true"/>
            <list key="annotations"/>
            <parameter key="time_zone" value="SYSTEM"/>
            <parameter key="locale" value="English (United States)"/>
            <parameter key="encoding" value="SYSTEM"/>
            <parameter key="read_all_values_as_polynominal" value="false"/>
            <list key="data_set_meta_data_information"/>
            <parameter key="read_not_matching_values_as_missings" value="true"/>
            <parameter key="datamanagement" value="double_array"/>
            <parameter key="data_management" value="auto"/>
          </operator>
          <operator activated="true" class="multiply" compatibility="9.2.001" expanded="true" height="103" name="Multiply (5)" width="90" x="581" y="34"/>
          <operator activated="true" class="remove_duplicates" compatibility="9.2.001" expanded="true" height="103" name="Remove Duplicates (2)" width="90" x="715" y="238">
            <parameter key="attribute_filter_type" value="single"/>
            <parameter key="attribute" value="video_id"/>
            <parameter key="attributes" value=""/>
            <parameter key="use_except_expression" value="false"/>
            <parameter key="value_type" value="attribute_value"/>
            <parameter key="use_value_type_exception" value="false"/>
            <parameter key="except_value_type" value="time"/>
            <parameter key="block_type" value="attribute_block"/>
            <parameter key="use_block_type_exception" value="false"/>
            <parameter key="except_block_type" value="value_matrix_row_start"/>
            <parameter key="invert_selection" value="false"/>
            <parameter key="include_special_attributes" value="false"/>
            <parameter key="treat_missing_values_as_duplicates" value="false"/>
          </operator>
          <operator activated="true" breakpoints="after" class="select_attributes" compatibility="9.2.001" expanded="true" height="82" name="Select Attributes (6)" width="90" x="849" y="238">
            <parameter key="attribute_filter_type" value="subset"/>
            <parameter key="attribute" value="video_id"/>
            <parameter key="attributes" value="|comment_num|genre|length|mylist_counter|title|video_id|view_counter|got_comment_num|margin_comment_by_video_length"/>
            <parameter key="use_except_expression" value="false"/>
            <parameter key="value_type" value="attribute_value"/>
            <parameter key="use_value_type_exception" value="false"/>
            <parameter key="except_value_type" value="time"/>
            <parameter key="block_type" value="attribute_block"/>
            <parameter key="use_block_type_exception" value="false"/>
            <parameter key="except_block_type" value="value_matrix_row_start"/>
            <parameter key="invert_selection" value="false"/>
            <parameter key="include_special_attributes" value="false"/>
          </operator>
          <operator activated="true" class="remember" compatibility="9.2.001" expanded="true" height="68" name="Remember (6)" width="90" x="983" y="238">
            <parameter key="name" value="allVideo_info"/>
            <parameter key="io_object" value="ExampleSet"/>
            <parameter key="store_which" value="1"/>
            <parameter key="remove_from_process" value="true"/>
          </operator>
          <operator activated="true" class="remember" compatibility="9.2.001" expanded="true" height="68" name="Remember (20)" width="90" x="715" y="34">
            <parameter key="name" value="allData"/>
            <parameter key="io_object" value="ExampleSet"/>
            <parameter key="store_which" value="1"/>
            <parameter key="remove_from_process" value="true"/>
          </operator>
          <operator activated="true" class="select_attributes" compatibility="9.2.001" expanded="true" height="82" name="Select Attributes (11)" width="90" x="849" y="34">
            <parameter key="attribute_filter_type" value="single"/>
            <parameter key="attribute" value="video_id"/>
            <parameter key="attributes" value=""/>
            <parameter key="use_except_expression" value="false"/>
            <parameter key="value_type" value="attribute_value"/>
            <parameter key="use_value_type_exception" value="false"/>
            <parameter key="except_value_type" value="time"/>
            <parameter key="block_type" value="attribute_block"/>
            <parameter key="use_block_type_exception" value="false"/>
            <parameter key="except_block_type" value="value_matrix_row_start"/>
            <parameter key="invert_selection" value="false"/>
            <parameter key="include_special_attributes" value="false"/>
          </operator>
          <operator activated="true" class="remove_duplicates" compatibility="9.2.001" expanded="true" height="103" name="Remove Duplicates" width="90" x="983" y="34">
            <parameter key="attribute_filter_type" value="single"/>
            <parameter key="attribute" value="video_id"/>
            <parameter key="attributes" value=""/>
            <parameter key="use_except_expression" value="false"/>
            <parameter key="value_type" value="attribute_value"/>
            <parameter key="use_value_type_exception" value="false"/>
            <parameter key="except_value_type" value="time"/>
            <parameter key="block_type" value="attribute_block"/>
            <parameter key="use_block_type_exception" value="false"/>
            <parameter key="except_block_type" value="value_matrix_row_start"/>
            <parameter key="invert_selection" value="false"/>
            <parameter key="include_special_attributes" value="false"/>
            <parameter key="treat_missing_values_as_duplicates" value="false"/>
          </operator>
          <operator activated="true" class="remember" compatibility="9.2.001" expanded="true" height="68" name="Remember (19)" width="90" x="1117" y="34">
            <parameter key="name" value="video_id_list"/>
            <parameter key="io_object" value="ExampleSet"/>
            <parameter key="store_which" value="1"/>
            <parameter key="remove_from_process" value="true"/>
          </operator>
          <connect from_op="Read CSV (2)" from_port="output" to_op="Multiply (5)" to_port="input"/>
          <connect from_op="Multiply (5)" from_port="output 1" to_op="Remember (20)" to_port="store"/>
          <connect from_op="Multiply (5)" from_port="output 2" to_op="Remove Duplicates (2)" to_port="example set input"/>
          <connect from_op="Remove Duplicates (2)" from_port="example set output" to_op="Select Attributes (6)" to_port="example set input"/>
          <connect from_op="Select Attributes (6)" from_port="example set output" to_op="Remember (6)" to_port="store"/>
          <connect from_op="Remember (20)" from_port="stored" to_op="Select Attributes (11)" to_port="example set input"/>
          <connect from_op="Select Attributes (11)" from_port="example set output" to_op="Remove Duplicates" to_port="example set input"/>
          <connect from_op="Remove Duplicates" from_port="example set output" to_op="Remember (19)" to_port="store"/>
          <connect from_op="Remember (19)" from_port="stored" to_port="out 1"/>
          <portSpacing port="source_in 1" spacing="0"/>
          <portSpacing port="sink_out 1" spacing="0"/>
          <portSpacing port="sink_out 2" spacing="0"/>
        </process>
        <description align="left" color="transparent" colored="false" width="126">&amp;#20840;&amp;#12487;&amp;#12540;&amp;#12479;&amp;#12398;&amp;#35501;&amp;#12415;&amp;#36796;&amp;#12415;&amp;#12392;&lt;br/&gt;&amp;#21205;&amp;#30011;&amp;#12398;id&amp;#25277;&amp;#20986;&amp;#12290;&lt;br/&gt;&amp;#19978;&amp;#35352;&amp;#65298;&amp;#12388;&amp;#12398;&lt;br/&gt;&amp;#12510;&amp;#12463;&amp;#12525;&amp;#12408;&amp;#12398;&amp;#30331;&amp;#37682;</description>
      </operator>
      <operator activated="true" class="subprocess" compatibility="9.2.001" expanded="true" height="82" name="Subprocess (2)" width="90" x="45" y="493">
        <process expanded="true">
          <operator activated="true" class="time_series:generate_data_arima" compatibility="9.2.001" expanded="true" height="68" name="Generate Data (8)" width="90" x="112" y="85">
            <parameter key="name_of_new_time_series_attribute" value="arima"/>
            <enumeration key="coefficients_of_the_auto-regressive_terms"/>
            <enumeration key="coefficients_of_the_moving-average_terms"/>
            <parameter key="constant" value="0.0"/>
            <parameter key="standard_deviation_of_the_innovations" value="0.0"/>
            <parameter key="length" value="20000"/>
            <parameter key="use_local_random_seed" value="false"/>
            <parameter key="local_random_seed" value="1992"/>
          </operator>
          <operator activated="true" class="generate_id" compatibility="9.2.001" expanded="true" height="82" name="Generate ID (7)" width="90" x="246" y="85">
            <parameter key="create_nominal_ids" value="false"/>
            <parameter key="offset" value="0"/>
          </operator>
          <operator activated="true" class="set_role" compatibility="9.2.001" expanded="true" height="82" name="Set Role (6)" width="90" x="380" y="85">
            <parameter key="attribute_name" value="id"/>
            <parameter key="target_role" value="regular"/>
            <list key="set_additional_roles"/>
          </operator>
          <operator activated="true" class="select_attributes" compatibility="9.2.001" expanded="true" height="82" name="Select Attributes (12)" width="90" x="514" y="85">
            <parameter key="attribute_filter_type" value="single"/>
            <parameter key="attribute" value="id"/>
            <parameter key="attributes" value=""/>
            <parameter key="use_except_expression" value="false"/>
            <parameter key="value_type" value="attribute_value"/>
            <parameter key="use_value_type_exception" value="false"/>
            <parameter key="except_value_type" value="time"/>
            <parameter key="block_type" value="attribute_block"/>
            <parameter key="use_block_type_exception" value="false"/>
            <parameter key="except_block_type" value="value_matrix_row_start"/>
            <parameter key="invert_selection" value="false"/>
            <parameter key="include_special_attributes" value="false"/>
          </operator>
          <operator activated="true" class="generate_attributes" compatibility="9.2.001" expanded="true" height="82" name="Generate Attributes (10)" width="90" x="648" y="85">
            <list key="function_descriptions">
              <parameter key="id" value="id-1"/>
            </list>
            <parameter key="keep_all" value="true"/>
          </operator>
          <operator activated="true" class="rename" compatibility="9.2.001" expanded="true" height="82" name="Rename (10)" width="90" x="782" y="85">
            <parameter key="old_name" value="id"/>
            <parameter key="new_name" value="my_vpos"/>
            <list key="rename_additional_attributes"/>
          </operator>
          <operator activated="true" class="remember" compatibility="9.2.001" expanded="true" height="68" name="Remember (5)" width="90" x="916" y="85">
            <parameter key="name" value="result"/>
            <parameter key="io_object" value="ExampleSet"/>
            <parameter key="store_which" value="1"/>
            <parameter key="remove_from_process" value="true"/>
          </operator>
          <connect from_op="Generate Data (8)" from_port="arima" to_op="Generate ID (7)" to_port="example set input"/>
          <connect from_op="Generate ID (7)" from_port="example set output" to_op="Set Role (6)" to_port="example set input"/>
          <connect from_op="Set Role (6)" from_port="example set output" to_op="Select Attributes (12)" to_port="example set input"/>
          <connect from_op="Select Attributes (12)" from_port="example set output" to_op="Generate Attributes (10)" to_port="example set input"/>
          <connect from_op="Generate Attributes (10)" from_port="example set output" to_op="Rename (10)" to_port="example set input"/>
          <connect from_op="Rename (10)" from_port="example set output" to_op="Remember (5)" to_port="store"/>
          <connect from_op="Remember (5)" from_port="stored" to_port="out 1"/>
          <portSpacing port="source_in 1" spacing="0"/>
          <portSpacing port="sink_out 1" spacing="0"/>
          <portSpacing port="sink_out 2" spacing="0"/>
        </process>
        <description align="left" color="transparent" colored="false" width="126">&amp;#32080;&amp;#26524;&amp;#12398;&amp;#20445;&amp;#23384;&amp;#29992;&amp;#12398;&amp;#34920;&amp;#20316;&amp;#25104;&lt;br/&gt;&lt;br&gt;&lt;br&gt;</description>
      </operator>
      <operator activated="true" class="loop_examples" compatibility="9.2.001" expanded="true" height="82" name="Loop Examples" width="90" x="179" y="289">
        <parameter key="iteration_macro" value="example"/>
        <process expanded="true">
          <operator activated="true" class="extract_macro" compatibility="9.2.001" expanded="true" height="68" name="Extract Macro" width="90" x="112" y="34">
            <parameter key="macro" value="getVideo_id"/>
            <parameter key="macro_type" value="data_value"/>
            <parameter key="statistics" value="average"/>
            <parameter key="attribute_name" value="video_id"/>
            <parameter key="example_index" value="%{example}"/>
            <list key="additional_macros"/>
          </operator>
          <operator activated="true" class="recall" compatibility="9.2.001" expanded="true" height="68" name="Recall" width="90" x="112" y="187">
            <parameter key="name" value="allData"/>
            <parameter key="io_object" value="ExampleSet"/>
            <parameter key="remove_from_store" value="false"/>
          </operator>
          <operator activated="true" class="filter_examples" compatibility="9.2.001" expanded="true" height="103" name="Filter Examples" width="90" x="246" y="187">
            <parameter key="parameter_expression" value=""/>
            <parameter key="condition_class" value="custom_filters"/>
            <parameter key="invert_filter" value="false"/>
            <list key="filters_list">
              <parameter key="filters_entry_key" value="video_id.equals.%{getVideo_id}"/>
            </list>
            <parameter key="filters_logic_and" value="true"/>
            <parameter key="filters_check_metadata" value="true"/>
          </operator>
          <operator activated="true" class="generate_attributes" compatibility="9.2.001" expanded="true" height="82" name="Generate Attributes" width="90" x="380" y="187">
            <list key="function_descriptions">
              <parameter key="my_vpos" value="floor(vpos/100+0.5)"/>
            </list>
            <parameter key="keep_all" value="true"/>
          </operator>
          <operator activated="true" class="select_attributes" compatibility="9.2.001" expanded="true" height="82" name="Select Attributes (2)" width="90" x="514" y="187">
            <parameter key="attribute_filter_type" value="subset"/>
            <parameter key="attribute" value=""/>
            <parameter key="attributes" value="comment_message|display_comment_count|margin_comment_by_video_length|my_vpos"/>
            <parameter key="use_except_expression" value="false"/>
            <parameter key="value_type" value="attribute_value"/>
            <parameter key="use_value_type_exception" value="false"/>
            <parameter key="except_value_type" value="time"/>
            <parameter key="block_type" value="attribute_block"/>
            <parameter key="use_block_type_exception" value="false"/>
            <parameter key="except_block_type" value="value_matrix_row_start"/>
            <parameter key="invert_selection" value="false"/>
            <parameter key="include_special_attributes" value="false"/>
          </operator>
          <operator activated="true" class="aggregate" compatibility="9.2.001" expanded="true" height="82" name="Aggregate" width="90" x="648" y="187">
            <parameter key="use_default_aggregation" value="false"/>
            <parameter key="attribute_filter_type" value="all"/>
            <parameter key="attribute" value=""/>
            <parameter key="attributes" value=""/>
            <parameter key="use_except_expression" value="false"/>
            <parameter key="value_type" value="attribute_value"/>
            <parameter key="use_value_type_exception" value="false"/>
            <parameter key="except_value_type" value="time"/>
            <parameter key="block_type" value="attribute_block"/>
            <parameter key="use_block_type_exception" value="false"/>
            <parameter key="except_block_type" value="value_matrix_row_start"/>
            <parameter key="invert_selection" value="false"/>
            <parameter key="include_special_attributes" value="false"/>
            <parameter key="default_aggregation_function" value="average"/>
            <list key="aggregation_attributes">
              <parameter key="display_comment_count" value="maximum"/>
            </list>
            <parameter key="group_by_attributes" value="my_vpos"/>
            <parameter key="count_all_combinations" value="false"/>
            <parameter key="only_distinct" value="true"/>
            <parameter key="ignore_missings" value="true"/>
          </operator>
          <operator activated="true" class="rename" compatibility="9.2.001" expanded="true" height="82" name="Rename" width="90" x="782" y="187">
            <parameter key="old_name" value="maximum(display_comment_count)"/>
            <parameter key="new_name" value="count_%{getVideo_id}"/>
            <list key="rename_additional_attributes"/>
          </operator>
          <operator activated="true" class="recall" compatibility="9.2.001" expanded="true" height="68" name="Recall (2)" width="90" x="916" y="391">
            <parameter key="name" value="result"/>
            <parameter key="io_object" value="ExampleSet"/>
            <parameter key="remove_from_store" value="false"/>
          </operator>
          <operator activated="true" class="select_attributes" compatibility="9.2.001" expanded="true" height="82" name="Select Attributes (4)" width="90" x="916" y="187">
            <parameter key="attribute_filter_type" value="subset"/>
            <parameter key="attribute" value="margin_comment_by_video_length"/>
            <parameter key="attributes" value="count_%{getVideo_id}|my_vpos"/>
            <parameter key="use_except_expression" value="false"/>
            <parameter key="value_type" value="attribute_value"/>
            <parameter key="use_value_type_exception" value="false"/>
            <parameter key="except_value_type" value="time"/>
            <parameter key="block_type" value="attribute_block"/>
            <parameter key="use_block_type_exception" value="false"/>
            <parameter key="except_block_type" value="value_matrix_row_start"/>
            <parameter key="invert_selection" value="false"/>
            <parameter key="include_special_attributes" value="false"/>
          </operator>
          <operator activated="true" class="delay" compatibility="9.2.001" expanded="true" height="103" name="Delay (2)" width="90" x="1050" y="238">
            <parameter key="delay" value="none"/>
            <parameter key="delay_amount" value="1000"/>
            <parameter key="min_delay_amount" value="0"/>
            <parameter key="max_delay_amount" value="1000"/>
          </operator>
          <operator activated="true" class="concurrency:join" compatibility="9.2.001" expanded="true" height="82" name="Join" width="90" x="1184" y="238">
            <parameter key="remove_double_attributes" value="false"/>
            <parameter key="join_type" value="right"/>
            <parameter key="use_id_attribute_as_key" value="false"/>
            <list key="key_attributes">
              <parameter key="my_vpos" value="my_vpos"/>
            </list>
            <parameter key="keep_both_join_attributes" value="false"/>
          </operator>
          <operator activated="true" class="remember" compatibility="9.2.001" expanded="true" height="68" name="Remember (3)" width="90" x="1318" y="238">
            <parameter key="name" value="result"/>
            <parameter key="io_object" value="ExampleSet"/>
            <parameter key="store_which" value="1"/>
            <parameter key="remove_from_process" value="true"/>
          </operator>
          <connect from_port="example set" to_op="Extract Macro" to_port="example set"/>
          <connect from_op="Extract Macro" from_port="example set" to_port="example set"/>
          <connect from_op="Recall" from_port="result" to_op="Filter Examples" to_port="example set input"/>
          <connect from_op="Filter Examples" from_port="example set output" to_op="Generate Attributes" to_port="example set input"/>
          <connect from_op="Generate Attributes" from_port="example set output" to_op="Select Attributes (2)" to_port="example set input"/>
          <connect from_op="Select Attributes (2)" from_port="example set output" to_op="Aggregate" to_port="example set input"/>
          <connect from_op="Aggregate" from_port="example set output" to_op="Rename" to_port="example set input"/>
          <connect from_op="Rename" from_port="example set output" to_op="Select Attributes (4)" to_port="example set input"/>
          <connect from_op="Recall (2)" from_port="result" to_op="Delay (2)" to_port="through 2"/>
          <connect from_op="Select Attributes (4)" from_port="example set output" to_op="Delay (2)" to_port="through 1"/>
          <connect from_op="Delay (2)" from_port="through 1" to_op="Join" to_port="left"/>
          <connect from_op="Delay (2)" from_port="through 2" to_op="Join" to_port="right"/>
          <connect from_op="Join" from_port="join" to_op="Remember (3)" to_port="store"/>
          <portSpacing port="source_example set" spacing="0"/>
          <portSpacing port="sink_example set" spacing="0"/>
          <portSpacing port="sink_output 1" spacing="0"/>
        </process>
        <description align="center" color="transparent" colored="false" width="126">&amp;#12467;&amp;#12513;&amp;#12531;&amp;#12488;&amp;#34920;&amp;#31034;&amp;#37327;&amp;#12398;&lt;br/&gt;&amp;#12464;&amp;#12521;&amp;#12501;&amp;#12398;&amp;#34920;&amp;#29983;&amp;#25104;&lt;br/&gt;</description>
      </operator>
      <operator activated="true" class="recall" compatibility="9.2.001" expanded="true" height="68" name="Recall (7)" width="90" x="313" y="34">
        <parameter key="name" value="result"/>
        <parameter key="io_object" value="ExampleSet"/>
        <parameter key="remove_from_store" value="false"/>
      </operator>
      <operator activated="true" breakpoints="after" class="replace_missing_values" compatibility="9.2.001" expanded="true" height="103" name="Replace Missing Values (2)" width="90" x="447" y="34">
        <parameter key="return_preprocessing_model" value="false"/>
        <parameter key="create_view" value="false"/>
        <parameter key="attribute_filter_type" value="all"/>
        <parameter key="attribute" value=""/>
        <parameter key="attributes" value=""/>
        <parameter key="use_except_expression" value="false"/>
        <parameter key="value_type" value="attribute_value"/>
        <parameter key="use_value_type_exception" value="false"/>
        <parameter key="except_value_type" value="time"/>
        <parameter key="block_type" value="attribute_block"/>
        <parameter key="use_block_type_exception" value="false"/>
        <parameter key="except_block_type" value="value_matrix_row_start"/>
        <parameter key="invert_selection" value="false"/>
        <parameter key="include_special_attributes" value="false"/>
        <parameter key="default" value="zero"/>
        <list key="columns"/>
      </operator>
      <operator activated="true" class="subprocess" compatibility="9.2.001" expanded="true" height="68" name="Subprocess (3)" width="90" x="715" y="85">
        <process expanded="true">
          <operator activated="true" class="recall" compatibility="9.2.001" expanded="true" height="68" name="Recall (8)" width="90" x="112" y="85">
            <parameter key="name" value="video_id_list"/>
            <parameter key="io_object" value="ExampleSet"/>
            <parameter key="remove_from_store" value="false"/>
          </operator>
          <operator activated="true" class="subprocess" compatibility="9.2.001" expanded="true" height="68" name="Subprocess (4)" width="90" x="179" y="238">
            <process expanded="true">
              <operator activated="true" class="time_series:generate_data_arima" compatibility="9.2.001" expanded="true" height="68" name="Generate Data (3)" width="90" x="112" y="85">
                <parameter key="name_of_new_time_series_attribute" value="arima"/>
                <enumeration key="coefficients_of_the_auto-regressive_terms"/>
                <enumeration key="coefficients_of_the_moving-average_terms"/>
                <parameter key="constant" value="0.0"/>
                <parameter key="standard_deviation_of_the_innovations" value="0.0"/>
                <parameter key="length" value="20000"/>
                <parameter key="use_local_random_seed" value="false"/>
                <parameter key="local_random_seed" value="1992"/>
              </operator>
              <operator activated="true" class="generate_attributes" compatibility="9.2.001" expanded="true" height="82" name="Generate Attributes (4)" width="90" x="246" y="85">
                <list key="function_descriptions">
                  <parameter key="DanmakuCounter" value="0"/>
                  <parameter key="DanmakuArea" value="0"/>
                  <parameter key="video_id" value="&quot;unknown&quot;"/>
                  <parameter key="threshold" value="0"/>
                </list>
                <parameter key="keep_all" value="true"/>
              </operator>
              <operator activated="true" class="remember" compatibility="9.2.001" expanded="true" height="68" name="Remember (9)" width="90" x="380" y="85">
                <parameter key="name" value="resultOfDanmaku"/>
                <parameter key="io_object" value="ExampleSet"/>
                <parameter key="store_which" value="1"/>
                <parameter key="remove_from_process" value="true"/>
              </operator>
              <connect from_op="Generate Data (3)" from_port="arima" to_op="Generate Attributes (4)" to_port="example set input"/>
              <connect from_op="Generate Attributes (4)" from_port="example set output" to_op="Remember (9)" to_port="store"/>
              <portSpacing port="source_in 1" spacing="0"/>
              <portSpacing port="sink_out 1" spacing="0"/>
            </process>
            <description align="left" color="transparent" colored="false" width="126">&amp;#24382;&amp;#24149;&amp;#12398;&amp;#20491;&amp;#25968;&amp;#12392;&lt;br/&gt;&amp;#24382;&amp;#24149;&amp;#12398;&amp;#38754;&amp;#31309;&amp;#12434;&amp;#12398;&amp;#34920;&amp;#12434;&lt;br/&gt;&amp;#20316;&amp;#25104;</description>
          </operator>
          <operator activated="true" class="loop_examples" compatibility="9.2.001" expanded="true" height="82" name="Loop Examples (2)" width="90" x="380" y="85">
            <parameter key="iteration_macro" value="example"/>
            <process expanded="true">
              <operator activated="true" class="extract_macro" compatibility="9.2.001" expanded="true" height="68" name="Extract Macro (2)" width="90" x="112" y="34">
                <parameter key="macro" value="getVideo_id"/>
                <parameter key="macro_type" value="data_value"/>
                <parameter key="statistics" value="average"/>
                <parameter key="attribute_name" value="video_id"/>
                <parameter key="example_index" value="%{example}"/>
                <list key="additional_macros"/>
              </operator>
              <operator activated="true" class="recall" compatibility="9.2.001" expanded="true" height="68" name="Recall (13)" width="90" x="112" y="136">
                <parameter key="name" value="allVideo_info"/>
                <parameter key="io_object" value="ExampleSet"/>
                <parameter key="remove_from_store" value="false"/>
              </operator>
              <operator activated="true" class="filter_examples" compatibility="9.2.001" expanded="true" height="103" name="Filter Examples (3)" width="90" x="246" y="136">
                <parameter key="parameter_expression" value=""/>
                <parameter key="condition_class" value="custom_filters"/>
                <parameter key="invert_filter" value="false"/>
                <list key="filters_list">
                  <parameter key="filters_entry_key" value="video_id.equals.%{getVideo_id}"/>
                </list>
                <parameter key="filters_logic_and" value="true"/>
                <parameter key="filters_check_metadata" value="true"/>
              </operator>
              <operator activated="true" class="extract_macro" compatibility="9.2.001" expanded="true" height="68" name="Extract Macro (4)" width="90" x="380" y="136">
                <parameter key="macro" value="correctionValue"/>
                <parameter key="macro_type" value="data_value"/>
                <parameter key="statistics" value="average"/>
                <parameter key="attribute_name" value="margin_comment_by_video_length"/>
                <parameter key="example_index" value="1"/>
                <list key="additional_macros"/>
              </operator>
              <operator activated="true" class="extract_macro" compatibility="9.2.001" expanded="true" height="68" name="Extract Macro (5)" width="90" x="514" y="136">
                <parameter key="macro" value="gotCommentNum"/>
                <parameter key="macro_type" value="data_value"/>
                <parameter key="statistics" value="average"/>
                <parameter key="attribute_name" value="got_comment_num"/>
                <parameter key="example_index" value="1"/>
                <list key="additional_macros"/>
              </operator>
              <operator activated="true" class="extract_macro" compatibility="9.2.001" expanded="true" height="68" name="Extract Macro (6)" width="90" x="648" y="136">
                <parameter key="macro" value="commentNum"/>
                <parameter key="macro_type" value="data_value"/>
                <parameter key="statistics" value="average"/>
                <parameter key="attribute_name" value="comment_num"/>
                <parameter key="example_index" value="1"/>
                <list key="additional_macros"/>
              </operator>
              <operator activated="true" class="generate_macro" compatibility="9.2.001" expanded="true" height="82" name="Generate Macro (2)" width="90" x="782" y="136">
                <list key="function_descriptions">
                  <parameter key="threshold" value="if(parse(%{gotCommentNum})&lt;parse(%{commentNum}),25/parse(%{correctionValue}),25)"/>
                </list>
                <description align="center" color="transparent" colored="false" width="126">&amp;#24382;&amp;#24149;&amp;#12398;&amp;#21028;&amp;#23450;&amp;#20516;&amp;#12434;&amp;#20316;&amp;#12427;</description>
              </operator>
              <operator activated="true" class="recall" compatibility="9.2.001" expanded="true" height="68" name="Recall (10)" width="90" x="380" y="289">
                <parameter key="name" value="result"/>
                <parameter key="io_object" value="ExampleSet"/>
                <parameter key="remove_from_store" value="false"/>
              </operator>
              <operator activated="true" class="select_attributes" compatibility="9.2.001" expanded="true" height="82" name="Select Attributes (13)" width="90" x="514" y="289">
                <parameter key="attribute_filter_type" value="single"/>
                <parameter key="attribute" value="count_%{getVideo_id}"/>
                <parameter key="attributes" value=""/>
                <parameter key="use_except_expression" value="false"/>
                <parameter key="value_type" value="attribute_value"/>
                <parameter key="use_value_type_exception" value="false"/>
                <parameter key="except_value_type" value="time"/>
                <parameter key="block_type" value="attribute_block"/>
                <parameter key="use_block_type_exception" value="false"/>
                <parameter key="except_block_type" value="value_matrix_row_start"/>
                <parameter key="invert_selection" value="false"/>
                <parameter key="include_special_attributes" value="false"/>
              </operator>
              <operator activated="true" class="rename" compatibility="9.2.001" expanded="true" height="82" name="Rename (2)" width="90" x="648" y="289">
                <parameter key="old_name" value="count_%{getVideo_id}"/>
                <parameter key="new_name" value="count"/>
                <list key="rename_additional_attributes"/>
              </operator>
              <operator activated="true" class="generate_attributes" compatibility="9.2.001" expanded="true" height="82" name="Generate Attributes (5)" width="90" x="782" y="289">
                <list key="function_descriptions">
                  <parameter key="count" value="if(count&gt;=25,count,0)"/>
                </list>
                <parameter key="keep_all" value="true"/>
              </operator>
              <operator activated="true" class="generate_macro" compatibility="9.2.001" expanded="true" height="82" name="Generate Macro" width="90" x="916" y="289">
                <list key="function_descriptions">
                  <parameter key="danmakuNum" value="0"/>
                  <parameter key="CountingFlag" value="0"/>
                  <parameter key="DanmakuAreaNum" value="0"/>
                </list>
                <description align="center" color="transparent" colored="false" width="126">&amp;#22793;&amp;#25968;&amp;#21021;&amp;#26399;&amp;#21270;</description>
              </operator>
              <operator activated="true" class="loop_examples" compatibility="9.2.001" expanded="true" height="82" name="Loop Examples (3)" width="90" x="1050" y="289">
                <parameter key="iteration_macro" value="example2"/>
                <process expanded="true">
                  <operator activated="true" class="extract_macro" compatibility="9.2.001" expanded="true" height="68" name="Extract Macro (3)" width="90" x="112" y="34">
                    <parameter key="macro" value="tn"/>
                    <parameter key="macro_type" value="data_value"/>
                    <parameter key="statistics" value="average"/>
                    <parameter key="attribute_name" value="count"/>
                    <parameter key="example_index" value="%{example2}"/>
                    <list key="additional_macros"/>
                  </operator>
                  <operator activated="true" class="branch" compatibility="9.2.001" expanded="true" height="82" name="Branch" width="90" x="246" y="187">
                    <parameter key="condition_type" value="expression"/>
                    <parameter key="expression" value="parse(%{tn})&gt;=parse(%{threshold})"/>
                    <parameter key="io_object" value="ANOVAMatrix"/>
                    <parameter key="return_inner_output" value="false"/>
                    <process expanded="true">
                      <operator activated="true" class="generate_macro" compatibility="9.2.001" expanded="true" height="82" name="Generate Macro (3)" width="90" x="179" y="34">
                        <list key="function_descriptions">
                          <parameter key="danmakuNum" value="if(parse(%{CountingFlag})==0,parse(%{danmakuNum})+1,parse(%{danmakuNum}))"/>
                          <parameter key="DanmakuAreaNum" value="parse(%{DanmakuAreaNum})+parse(%{tn})"/>
                        </list>
                      </operator>
                      <operator activated="true" class="set_macro" compatibility="9.2.001" expanded="true" height="82" name="Set Macro" width="90" x="313" y="34">
                        <parameter key="macro" value="CountingFlag"/>
                        <parameter key="value" value="1"/>
                      </operator>
                      <connect from_op="Generate Macro (3)" from_port="through 1" to_op="Set Macro" to_port="through 1"/>
                      <portSpacing port="source_condition" spacing="0"/>
                      <portSpacing port="source_input 1" spacing="0"/>
                      <portSpacing port="sink_input 1" spacing="0"/>
                    </process>
                    <process expanded="true">
                      <operator activated="true" class="set_macro" compatibility="9.2.001" expanded="true" height="82" name="Set Macro (2)" width="90" x="45" y="34">
                        <parameter key="macro" value="CountingFlag"/>
                        <parameter key="value" value="0"/>
                      </operator>
                      <connect from_port="condition" to_op="Set Macro (2)" to_port="through 1"/>
                      <portSpacing port="source_condition" spacing="0"/>
                      <portSpacing port="source_input 1" spacing="0"/>
                      <portSpacing port="sink_input 1" spacing="0"/>
                    </process>
                  </operator>
                  <connect from_port="example set" to_op="Extract Macro (3)" to_port="example set"/>
                  <connect from_op="Extract Macro (3)" from_port="example set" to_port="example set"/>
                  <portSpacing port="source_example set" spacing="0"/>
                  <portSpacing port="sink_example set" spacing="0"/>
                  <portSpacing port="sink_output 1" spacing="0"/>
                </process>
                <description align="center" color="transparent" colored="false" width="126">&amp;#24382;&amp;#24149;&amp;#12398;&amp;#20491;&amp;#25968;&amp;#12392;&amp;#38754;&amp;#31309;&amp;#12434;&amp;#27714;&amp;#12417;&amp;#12427;&lt;br/&gt;</description>
              </operator>
              <operator activated="true" class="recall" compatibility="9.2.001" expanded="true" height="68" name="Recall (11)" width="90" x="1050" y="442">
                <parameter key="name" value="resultOfDanmaku"/>
                <parameter key="io_object" value="ExampleSet"/>
                <parameter key="remove_from_store" value="false"/>
              </operator>
              <operator activated="true" class="set_data" compatibility="9.2.001" expanded="true" height="82" name="Set Data" width="90" x="1184" y="442">
                <parameter key="example_index" value="%{example}"/>
                <parameter key="count_backwards" value="false"/>
                <parameter key="attribute_name" value="DanmakuCounter"/>
                <parameter key="value" value="%{danmakuNum}"/>
                <list key="additional_values">
                  <parameter key="DanmakuArea" value="%{DanmakuAreaNum}"/>
                  <parameter key="video_id" value="%{getVideo_id}"/>
                  <parameter key="threshold" value="%{threshold}"/>
                </list>
              </operator>
              <operator activated="true" class="remember" compatibility="9.2.001" expanded="true" height="68" name="Remember (8)" width="90" x="1318" y="442">
                <parameter key="name" value="resultOfDanmaku"/>
                <parameter key="io_object" value="ExampleSet"/>
                <parameter key="store_which" value="1"/>
                <parameter key="remove_from_process" value="true"/>
              </operator>
              <connect from_port="example set" to_op="Extract Macro (2)" to_port="example set"/>
              <connect from_op="Extract Macro (2)" from_port="example set" to_port="example set"/>
              <connect from_op="Recall (13)" from_port="result" to_op="Filter Examples (3)" to_port="example set input"/>
              <connect from_op="Filter Examples (3)" from_port="example set output" to_op="Extract Macro (4)" to_port="example set"/>
              <connect from_op="Extract Macro (4)" from_port="example set" to_op="Extract Macro (5)" to_port="example set"/>
              <connect from_op="Extract Macro (5)" from_port="example set" to_op="Extract Macro (6)" to_port="example set"/>
              <connect from_op="Extract Macro (6)" from_port="example set" to_op="Generate Macro (2)" to_port="through 1"/>
              <connect from_op="Recall (10)" from_port="result" to_op="Select Attributes (13)" to_port="example set input"/>
              <connect from_op="Select Attributes (13)" from_port="example set output" to_op="Rename (2)" to_port="example set input"/>
              <connect from_op="Rename (2)" from_port="example set output" to_op="Generate Attributes (5)" to_port="example set input"/>
              <connect from_op="Generate Attributes (5)" from_port="example set output" to_op="Generate Macro" to_port="through 1"/>
              <connect from_op="Generate Macro" from_port="through 1" to_op="Loop Examples (3)" to_port="example set"/>
              <connect from_op="Recall (11)" from_port="result" to_op="Set Data" to_port="example set input"/>
              <connect from_op="Set Data" from_port="example set output" to_op="Remember (8)" to_port="store"/>
              <portSpacing port="source_example set" spacing="0"/>
              <portSpacing port="sink_example set" spacing="0"/>
              <portSpacing port="sink_output 1" spacing="0"/>
            </process>
            <description align="left" color="transparent" colored="false" width="126">&amp;#19968;&amp;#12388;&amp;#19968;&amp;#12388;&amp;#12398;&amp;#21205;&amp;#30011;&amp;#12395;&amp;#12388;&amp;#12356;&amp;#12390;&amp;#20966;&amp;#29702;&lt;br/&gt;</description>
          </operator>
          <connect from_op="Recall (8)" from_port="result" to_op="Loop Examples (2)" to_port="example set"/>
          <portSpacing port="source_in 1" spacing="0"/>
          <portSpacing port="sink_out 1" spacing="0"/>
        </process>
        <description align="center" color="transparent" colored="false" width="126">&amp;#24382;&amp;#24149;&amp;#12398;&amp;#38754;&amp;#31309;&amp;#12392;&amp;#20491;&amp;#25968;&amp;#12434;&amp;#35336;&amp;#31639;&lt;br/&gt;</description>
      </operator>
      <operator activated="true" class="recall" compatibility="9.2.001" expanded="true" height="68" name="Recall (12)" width="90" x="849" y="85">
        <parameter key="name" value="resultOfDanmaku"/>
        <parameter key="io_object" value="ExampleSet"/>
        <parameter key="remove_from_store" value="false"/>
      </operator>
      <connect from_op="Subprocess" from_port="out 1" to_op="Loop Examples" to_port="example set"/>
      <connect from_op="Recall (7)" from_port="result" to_op="Replace Missing Values (2)" to_port="example set input"/>
      <connect from_op="Replace Missing Values (2)" from_port="example set output" to_port="result 1"/>
      <connect from_op="Recall (12)" from_port="result" to_port="result 2"/>
      <portSpacing port="source_input 1" spacing="0"/>
      <portSpacing port="sink_result 1" spacing="0"/>
      <portSpacing port="sink_result 2" spacing="0"/>
      <portSpacing port="sink_result 3" spacing="0"/>
    </process>
  </operator>
</process>