今年日本では映像分野のエンターテイメントはYoutubeやニコニコ動画を代表とした動画共有サイトが躍進しており、広告収入などによって収入を得られるなど動画投稿者にとって、再生数を多く得る動画は非常に価値があり、再生回数が多い動画の特徴がわかれば動画制作者にとって非常に役にたつと思われる。 そこで、本研究では、ニコニコ動画の再生回数がとても多い動画と、そこそこ再生回数とマイリスト数が多い動画のコメントデータから動画再生時間ごとのコメントの表示量の増減を抽出し、それぞれの特徴を比較する。
本研究で使用したパソコンについて表1、使用ソフトウェアについて表2に示す。
表1 使用パソコン
OS | windows10 Home 1909 |
CPU | CPU Intel(R) Core(TM) i7-8700K |
メモリ容量 | 48GB |
GPU | NVIDIA GeForce GTX 1060 6GB |
表2 使用ソフトウェア
ソフト名 | バージョン | 用途 |
RapidMiner | 9.2.001 | データの解析に用いる |
Google Chrome | 79.0.3945.88 | データの収集に用いる |
Visual Studio Code | 1.41.0 | Pythonプログラムのコード作成に用いる |
Python | 2019.11.50794 | データの解析の補助として用いる |
Advanced REST client | 10.0.12 | データの収集に用いる |
本文中の用語や基礎知識について述べる。
ニコニコ動画は、日本最大級の動画共有サイトである。再生中の動画上にコメントを付加し共有できるという特徴がある。
図1 ニコニコ動画の動画再生時の画面
図2 ニコニコ動画サイトトップ画面
マイリストとはニコニコ動画内にあるお気に入りの動画をブックマークとして保存することができる機能のことである[1]。 マイリスト数は各動画にある情報の一つでその動画がいくつマイリストされているかを表す数のことである。有料会員では25500件登録でき、無料会員では200件である[1]。 マイリストはフォルダのように名前を付けて分別することができる。しかし一つのマイリストには有料会員であっても500件までしか登録できない。マイリスト一覧を開いている様子を図3に示す。
図3 登録したマイリスト一覧の画面
無料会員の登録上限と、マイリストは視聴者の気に入ったというサインの側面からマイリスト数が多い動画は面白い動画であることが多い。
コメントは視聴者が動画につける文字列のことである。コメントは通常5秒間動画上に図4のように表示される。
図4 コメントが動画上に表示されている様子
コメントの打たれた動画再生時間の位置を本文ではコメント表示位置と呼ぶ。
ニコニコ動画では各動画に一意のアルファベットと数字から成るIDが振られている。 本文ではこのIDのことを動画IDと呼ぶ。
本文では動画のある再生時間で動画画面に表示されているコメントの数のことをコメント表示量と呼ぶ。本研究では、ある時刻tのコメント表示量をt-5からtの間のコメント数とする。
同じようなコメント表示位置にコメントが集中することをニコニコ動画では弾幕と呼ぶ。
図5 弾幕の例[2]
コメントデータに含まれている、コメント表示位置を1/100[秒]単位で表すデータである。
Rapidminerはデータを前処理、加工、評価、運用を一つのプラットフォームで行うことができるソフトウェアである[3]。プロセスと呼ばれる単位で実行をして結果を出し、プロセス上にオペレータを配置し、いくつかの種類のオペレータを組み合わせることで複雑なデータ処理を行える。
本実験では2018/12/22 00:00から2019/12/21 23:59の期間に投稿された,ニコニコ動画が定めているジャンルごとの再生回数がとても多い動画と,そこそこ再生回数とマイリスト数の多い動画のコメントデータと動画情報データを対象に解析を行う.なおここでいうそこそこ再生回数とマイリスト数の多い動画とはジャンルごとの再生回数が3万以下かつマイリスト数が300以下の動画の中で再生回数が10位以上の動画のことである.
対象の動画IDの収集方法について述べる。動画IDを取得するために https://api.search.nicovideo.jp/api/v2/video/contents/searchへリクエストをする。 Advanced REST clientを起動して図6のようパラメータを入力する[4]。
図6 Advanced REST clientへの入力例
ParametersのBodyのqにはニコニコ動画の各ジャンル名を記入する。各ジャンルの数だけ入力を繰り返し、SENDボタンを押す。入力する各ジャンル名は表3に示す。
表3 使用ソフトウェア
ジャンル名 |
アニメ |
エンターテイメント |
ゲーム |
スポーツ |
その他 |
ダンス |
ラジオ |
音楽・サウンド |
解説・講座 |
技術・工作 |
自然 |
社会・政治・時事 |
乗り物 |
動物 |
旅行・アウトドア |
料理 |
正しくパラメータが入力された状態でSENDボタンを押すと図7のような動画IDのリストが返る。
図7 返り値の例
コメントデータの収集方法について述べる。コメントデータはブラウザのディベロッパーツールを用いて取り出す。ニコニコ動画で動画を開いたとき、通信データの中にコメントデータが「api.json」として存在するのでそれを見つける。ここではGoogleChoromeを用いる。 まず、GoogleChoromeのディベロッパーツールを開き、Networkを選択したうえで、「Disable cache」にチェックをつけ、コメントを取得したい動画を開く。 有料動画等でなければ「api.json」が読まれているので「Filter」にapi.jsonと入力するとコメントデータがjson形式で取得可能な状態のファイルを見つけることができる。この様子を図3に示す。 api.jsonをクリックし、Responseをクリックすると内容が表示されるので、コピーし、テキストエディタなどにペーストして保存をすれば一つの動画のコメントデータを取得できる。この作業を必要な取得したい動画の数だけ繰り返す。
図8 コメントデータを取得する様子
図9 取得できるコメントデータ例
動画情報データの取得方法について述べる。動画情報データとは動画時間やタイトル、再生回数やタグ情報などのデータを指す。 動画情報データは3.1.1.で取得した動画IDを{動画ID}へあてはめて https://ext.nicovideo.jp/api/getthumbinfo/{動画ID}へアクセスすればxmlファイル形式のデータが表示される[5]ので、4.2.と同じようにテキストエディタにコピーアンドペーストをして保存する。
図10 動画情報を取得した様子
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.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.に示す。
本実験では弾幕をコメント表示量がある値a超えたときの部分とする。 弾幕とみなすコメント表示量は図11から25を超えていればだいたい弾幕とみなせる。
図11 コメント表示量25の時の画面の例[6]
よってaを25と定めたいが、コメントデータはコメント数が十分のとき0.6秒に1コメントとなるはずだが、今回のコメント取得方法では動画の長さにきちんと比例した個数が取得できない。そのためaを定数とすると他の動画の弾幕と単純に比較できなくなってしまう。そこでaを次のように定義する.
ただし,
コメント数=取得コメント数
となっている場合はa=25とする.
判別値aを超えたコメント表示量の合計値を弾幕面積とする。また判別値aをコメント表示量が超した回数を弾幕の個数とする。図2のデータから抽出する例を図12に示す。
図12 弾幕面積と弾幕の抽出[7]
各動画のコメントについて弾幕の個数と弾幕面積を求め、再生回数がとても多い動画と、そこそこ再生回数とマイリスト数の多い動画とで比較をする。 3.4.と3.5.の処理を行うRapidminerのオペレータの配置等は8.5.に示す。
弾幕の個数を横軸、弾幕面積を縦軸とした結果を以下に示す。
図13 全データの弾幕面積と弾幕個数
図14 再生数別弾幕面積と弾幕個数
図15再生回数50万以上でジャンル別弾幕面積と弾幕個数
表5 弾幕個数と弾幕面積の表
弾幕個数 | 弾幕面積 | 再生数 | タイトル | ジャンル |
0 | 0 | 202553 | 【CM】ニチレイ『本格炒め炒飯R』「Still No.1」 | ダンス |
0 | 0 | 28548 | 【大谷翔平】今シーズン第9号3ランホームラン | スポーツ |
0 | 0 | 29208 | アニソン2on2ダンスバトル『あきばっか~のvol.19』ベスト16第五試合 | ダンス |
0 | 0 | 1043424 | ヘラジカ様のかわいい!!煽りグルメレース!! | アニメ |
0 | 0 | 29575 | セブンイレブン presents 佐倉としたい大西2019年5月21日第164回 | ラジオ |
0 | 0 | 1559069 | アンヘル / 鳴花ミコト | 音楽・サウンド |
0 | 0 | 29884 | 【結萌さつき】アユミ☆マジカルショータイム【踊ってみた】 | ダンス |
0 | 0 | 131110 | ルンバ「ゴミですね」猫「エサ消えた」 | 動物 |
0 | 0 | 29570 | ジオウ夏映画が全く気付かないうちに品性を疑う | 音楽・サウンド |
0 | 0 | 478844 | クッキー☆グランドバトル3!ED集 | その他 |
0 | 0 | 123280 | 平成に代わる新元号「令和(れいわ)」発表の瞬間 | 社会・政治・時事 |
0 | 0 | 29962 | 30秒でわかる浦島太郎朗読で華麗なラップを披露する夢追翔(字幕あり) | エンターテイメント |
0 | 0 | 29573 | アニソン2on2ダンスバトル『あきばっか~のvol.19』ベスト16第四試合 | ダンス |
0 | 0 | 29907 | 昨日食ったジンギスカンに敗北しためめめUC | エンターテイメント |
0 | 0 | 24901 | ハチの巣からハチの幼虫を強奪するアリの集団 | 自然 |
0 | 0 | 29854 | 落下するキュルルRB +使用例 | アニメ |
0 | 0 | 73740 | 【猫転送装置】猫に罠を仕掛けてみた | 動物 |
0 | 0 | 296167 | アル中パウダー作ってみた | 料理 |
0 | 0 | 26765 | HG ガンダムザラキエル 双動 仮面ライダーWゆっくりプラモ動画 | 技術・工作 |
0 | 0 | 29193 | 5/17 第12節 浦和vs湘南 大誤審からの劇的大逆転 | スポーツ |
0 | 0 | 29239 | 東住吉区観光。 | 旅行・アウトドア |
0 | 0 | 28494 | 【伝説の歴史激闘】18-19CLマンチェスターシティ 対 トッテナム | スポーツ |
0 | 0 | 29242 | 立ちながら水を飲む猫 | 動物 |
0 | 0 | 29702 | わがままボディをさらけ出すにゃんこ | 動物 |
0 | 0 | 113993 | 猫先生の厳しすぎるピアノレッスン | 動物 |
0 | 0 | 28427 | LAWSONいちご大福甘酒あんを食べてみた。 | 料理 |
0 | 0 | 29943 | 愛園愛美にドハマりした小4ショタ「スパチャ投げたい!」 | エンターテイメント |
0 | 0 | 29048 | 「関西電気保安グルーヴ」│関西電気保安協会 | 音楽・サウンド |
0 | 0 | 29416 | コツメカワウソのターン | 動物 |
0 | 0 | 27169 | 世話が焼けすぎたフェネック | 自然 |
0 | 0 | 29668 | ニコカラ『テレストテレス』かいりきベア《on vocal》※修正版 | 音楽・サウンド |
0 | 0 | 96149 | 平成最後の狩猟生活(その83) | 自然 |
0 | 0 | 29375 | カラフル【NNI】 | 音楽・サウンド |
0 | 0 | 29999 | セブンイレブン presents 佐倉としたい大西2019年4月16日第159回 | ラジオ |
0 | 0 | 29374 | タッチセンサーを使ってamazonの箱を作ってみた。 | 技術・工作 |
0 | 0 | 29592 | 【RAB】ゾンビランドサガOP 踊ってみた【リアルアキバボーイズ】 | ダンス |
0 | 0 | 121862 | 第二のフロントガラス男現る | 社会・政治・時事 |
0 | 0 | 29993 | 【スマブラSP】パックンフラワーに対するパルテナ様とピットの反応 | ゲーム |
0 | 0 | 29344 | 【色松】彗星ハネムーン【踊ってみた】 | ダンス |
0 | 0 | 413222 | 【放送事故】畳と話し出す天開司 | エンターテイメント |
0 | 0 | 29907 | 【朗報】マスクドいちからの使用用途、見つかる | エンターテイメント |
0 | 0 | 29702 | スターラジオーシャン アナムネシス #165 (通算#206) (2019.12.11) | ラジオ |
0 | 0 | 297975 | 【ラグビーワールドカップ2019】ニュージーランド代表 ハカ対南アフリカ - カパオパンゴ | スポーツ |
0 | 0 | 23801 | 【グラブル】某天上人ツーラー疑惑問題 | 自然 |
0 | 0 | 551856 | プロパガンダ(本物) | 技術・工作 |
0 | 0 | 29924 | 『ダンベル何キロ持てる?』特別トレーニング動画#4 | アニメ |
0 | 0 | 498772 | ワザップの嘘技に騙された一般人、自分のことを野原ひろしだと思い込んでしまう | その他 |
0 | 0 | 118919 | ダンボールでBEA(フランス航空事故調査局)を作ってみた | 技術・工作 |
0 | 0 | 279919 | 令和れいわレイワれいワレいわレイわれイワれいわ令和であります | 社会・政治・時事 |
0 | 0 | 28003 | サイコフレームの試料 | 技術・工作 |
0 | 0 | 28184 | おでんで呑む【長火鉢とおっさん107】 | 料理 |
0 | 0 | 3473553 | DECO*27 - 乙女解剖 feat. 初音ミク | 音楽・サウンド |
0 | 0 | 28102 | 気が付いたらゲーセンになってた趣味の部屋 | 技術・工作 |
0 | 0 | 28733 | 大和高田観光。 | 旅行・アウトドア |
0 | 0 | 384844 | 【鬼滅のMMD】響喜乱舞 | エンターテイメント |
0 | 0 | 253315 | ひとりガストでハイボール飲んでみた【アル中カラカラ】 | 料理 |
0 | 0 | 29584 | 恐竜みたいな脚しいてる | 動物 |
0 | 0 | 29708 | 『仮面ライダーゼロワン』主題歌 「REAL×EYEZ」 J(LUNA SEA)×西川貴教Takanori Nishikawa | 音楽・サウンド |
0 | 0 | 29989 | 【RTA】ランス03-RTAリーザス陥落 -3時間5分41秒part5/8 | ゲーム |
0 | 0 | 26857 | ペーパークラフト新条アカネ | 技術・工作 |
0 | 0 | 133758 | 一段降りようとしたら戻れなくなってもうたワンコが悶絶するほどかわいい | 動物 |
0 | 0 | 29283 | キャンピングカー大横転で死にかけた男たちの北海道キャンプの旅 Part13「飯盒炊爨編Ⅱ」 | 旅行・アウトドア |
0 | 0 | 2499066 | 【再録】 ワザップの嘘技に騙されたキッズ、ジョルノ・ジョバーナみたいになってしまう | その他 |
0 | 0 | 157512 | プールで泳いでみた! | 旅行・アウトドア |
0 | 0 | 247078 | 【SLH×アナタシア】クレイシ゛ー・ヒ゛ート 踊ってみた【オリジナル振付】 | ダンス |
0 | 0 | 1040518 | 【プリキュア変身バンクリンク】キュアミルキー変身【歴代1位】 | アニメ |
0 | 0 | 227657 | 水を吐くフグ | 動物 |
0 | 0 | 29005 | セブンイレブン presents 佐倉としたい大西2019年8月13日第176回 | ラジオ |
0 | 0 | 26708 | 【カタールW杯アジア予選】ミャンマー × 日本 | スポーツ |
0 | 0 | 29587 | 【 一発録り 】仮面ライダーゼロワン 主題歌 OP 最速【 歌ってみた 】 REAL×EYEZ coverd by Ayata | 音楽・サウンド |
0 | 0 | 23358 | 【ゆっくり実況】きのこ狩り2018その7 後編 | 自然 |
0 | 0 | 137133 | イチローのレーザービームで人類滅亡 2019年ver. | スポーツ |
0 | 0 | 28322 | ゴキブリにタバコの煙を吸わせたら想像以上の結果になった。 | 解説・講座 |
0 | 0 | 27881 | 【ユロスポ実況】羽生結弦 2019 World Championships FS | スポーツ |
0 | 0 | 29113 | セブンイレブン presents 佐倉としたい大西2019年7月16日第172回 | ラジオ |
0 | 0 | 29501 | 【野党ニュース】野党議員主催の「シュレッダーを見る会」が無事開催される | 社会・政治・時事 |
0 | 0 | 29959 | 【アイドル部MMD】悪い大人が妹キャラを背負わせるあずきち | エンターテイメント |
0 | 0 | 28349 | 【ゆっくり語る奇妙な事件】エリサ・ラム怪死事件 | 解説・講座 |
0 | 0 | 1447543 | 乙女解剖@歌ってみた【まふまふ】 | 音楽・サウンド |
0 | 0 | 23007 | 【ニコ生】スピリタスから出火して大炎上wwww | 自然 |
0 | 0 | 29301 | セブンイレブン presents 佐倉としたい大西2019年5月7日第162回 | ラジオ |
0 | 0 | 28448 | 藤井聡太 神の一手 4四龍 (2019-02-16) | スポーツ |
0 | 0 | 167195 | わしも(53) | 動物 |
0 | 0 | 26505 | 【伝説】スポーツ名&迷実況集12【ネタ】 | スポーツ |
0 | 0 | 29985 | アドリブで独自のダァンスを披露するド葛本社の子供達 | エンターテイメント |
0 | 0 | 194067 | 【英語実況】井上尚弥 vs エマヌエル・ロドリゲスWBSSバンタム級トーナメント準決勝 | スポーツ |
0 | 0 | 28197 | 寿司職人によるカツオの仕込みから握りまで?How To Make Skipjack tuna Sushi? | 料理 |
0 | 0 | 538419 | お昼寝MZ | その他 |
0 | 0 | 21420 | 名列車で行こう速達編第30回山陽を駆け抜けた蒼穹の閃光第10章 | 乗り物 |
0 | 0 | 134909 | 韓国のレーダー照射反論動画のBGMを間違えてみた | 社会・政治・時事 |
0 | 0 | 187335 | LIVE配信し富士登山中に滑落した男性か遺体を発見(19_10_30) | 社会・政治・時事 |
0 | 0 | 29784 | けもフレ2第9話を肯定する人達に一言。 | 動物 |
0 | 0 | 29739 | セブンイレブン presents 佐倉としたい大西2019年6月25日第169回 | ラジオ |
0 | 0 | 28546 | 【ゆっくりクソゲーレビュー】#02 北斗の拳(セガサターン版)【世紀末】 | 解説・講座 |
0 | 0 | 29995 | デッデッデデデデッドバイデイライト 03 | ゲーム |
0 | 0 | 145618 | YouTuberの広瀬ゆうが全裸わいせつ行為ライブ配信で逮捕!【Vtuber】 | 社会・政治・時事 |
0 | 0 | 23123 | 危険運転による大事故 | 乗り物 |
0 | 0 | 23363 | 【ゆっくり実況】きのこ狩り2018その7 前編 | 自然 |
0 | 0 | 227445 | 自分を大蛇丸と信じて止まない一般男性が、カレーとポテトサラダとビールで優勝する動画です。 | 料理 |
0 | 0 | 29704 | 香港デモだけじゃない!韓国、インドネシアもデモ活動で大荒れ | 社会・政治・時事 |
0 | 0 | 29563 | 日韓請求権協定に基づく協議要請に回答すらなし…もう日韓関係は終わりですね | 社会・政治・時事 |
0 | 0 | 118422 | 【@小豆】生命線 踊ってみた【bake】 | ダンス |
0 | 0 | 29974 | ヘカーティア・ラピスラズリ(淫夢) | ゲーム |
0 | 0 | 29700 | 光る!CCさくらの夢の杖を作ってみた | 技術・工作 |
0 | 0 | 474915 | ワンパンマン1期OPをアンパンマンで描いてみた | エンターテイメント |
0 | 0 | 116363 | 【ボクシング】井上尚弥VSエマヌエル・ロドリゲス パンチが見えない人の為のKOシーン WBSSバンタム級トーナメント準決勝 | スポーツ |
0 | 0 | 29993 | 舞元を乳で圧死させようとするアンジュとその配信をみた舞元の反応 | エンターテイメント |
0 | 0 | 1379741 | 「Alice in N.Y.」歌ってみた【XYZ】 | 音楽・サウンド |
0 | 0 | 29899 | チョコモナカジャンボを頬張るNYN姉貴BB | 動物 |
0 | 0 | 409139 | 【皆さんにお知らせ】なので夜の公園でアル中カラカラしてみた | 料理 |
0 | 0 | 103219 | 愛し合うフレンズ 1話 | 社会・政治・時事 |
0 | 0 | 28662 | 【あやの先生】女医が流星ダイアリー(H△G)【踊ってみた】 | ダンス |
0 | 0 | 115121 | 45歳イチローのレーザービーム | スポーツ |
0 | 0 | 29961 | 夜桜たま「エッチだ・・・w」 | エンターテイメント |
0 | 0 | 29853 | 【ジョジョ】処刑用BGMピアノ演奏【黄金の風】 | 音楽・サウンド |
0 | 0 | 29645 | #05 [初披露][歌詞] Shanti Shanti Shanti BABYMETAL AWAKENS day1 | 音楽・サウンド |
0 | 0 | 1529510 | かぐや様は告らせたい~天才たちの恋愛頭脳戦~ 鈴木雅之 ラブ・ドラマティック | アニメ |
0 | 0 | 29532 | 【行方不明】殺人】酒鬼薔薇聖斗②母親A共に出版印税生活豪邸建てていた! | 社会・政治・時事 |
0 | 0 | 29048 | 本渡楓と天津向の「本渡上陸作戦」2019年2月19日#151 | ラジオ |
0 | 0 | 28669 | 【フォートナイト】ダンスエモート 踊ってみた【第三弾】 | ダンス |
0 | 0 | 27296 | [ハンガリー実況翻訳付M4 SPORT] 羽生結弦 2019 世界選手権 FS | スポーツ |
0 | 0 | 29466 | 本渡楓と天津向の「本渡上陸作戦」2019年5月27日#165 | ラジオ |
0 | 0 | 29997 | 【E3 2019】「テイルズ」最新作『テイルズオブアライズ Tales of Arise』初報PV | ゲーム |
0 | 0 | 29104 | アニソン2on2ダンスバトル『あきばっか~のvol.18』BEST16第六試合 | ダンス |
0 | 0 | 29936 | 美兎「(直して欲しいのは)話題がゲスいところ?」楓「それは結構好きよ」 | エンターテイメント |
1 | 120 | 438489 | 【Project Winter】葛葉のトランシーバー芸に耐える笹木とアンジュ | エンターテイメント |
1 | 51 | 29839 | 『恋はアッチャアッチャ』(Promotion Edit) | 音楽・サウンド |
1 | 58 | 29310 | 僕が「日本の尊厳と国益を護る会」を少し懐疑的に見ている理由を話します | 社会・政治・時事 |
1 | 287 | 270123 | 自分を大蛇丸と信じて止まない一般男性が、自作の唐揚げとビールで優勝する動画です。 | 料理 |
1 | 52 | 29305 | 【未公開】ぼくらは四国バーガーをふりかえる【完結記念】後編 | 旅行・アウトドア |
1 | 163 | 547334 | ワザップに騙されたアイドル、あんきらみたいになってしまう【音MAD】 | その他 |
1 | 41 | 120052 | カエル(夜桜たま) | 動物 |
1 | 314 | 378727 | 【ニコニコラボ】僥倖ダンス【ちゃんげろソニック】 | エンターテイメント |
1 | 78 | 29950 | ムスカ大佐の3分間待ってやるフィギュアを作ってみた | 技術・工作 |
1 | 346 | 204412 | タバスコ風味のすき焼き食べてみた【アル中カラカラハイボール】 | 料理 |
1 | 157 | 29911 | けものフレンズを知らない人が2期の12話を見た感想 | アニメ |
1 | 306 | 29201 | 【戦国時代解説】 戦国への道第4集「足利成氏、執念の戦い(1/4)」 | 解説・講座 |
1 | 360 | 135211 | 【ヒプノシスマイク】一触即発☆禅ガール【コスプレで踊ってみた】 | ダンス |
1 | 28 | 327829 | 熟成肉とほうれん草のソース煮込み。食べてみた【アル中カラカラ】 | 料理 |
1 | 44 | 212393 | ち○ぽみたいな神に住んでるイチローはどうすりゃいいですか? | スポーツ |
1 | 190 | 138314 | オタクがブリキノダンスを踊ったらキレッキレだったwww【リアルアキバボーイズ】 | ダンス |
1 | 425 | 1876998 | ヨルシカ - だから僕は音楽を辞めた (MUSIC VIDEO) | 音楽・サウンド |
1 | 150 | 29275 | キャンピングカー大横転で死にかけた男たちの北海道キャンプの旅 Part9「探し物ビンゴ大会 前編」 | 旅行・アウトドア |
1 | 309 | 388548 | 【コメ無し】滑落HD【編集版】 | スポーツ |
1 | 409 | 675250 | 笑い過ぎて一生忘れられないTRPG第4話 | ゲーム |
1 | 59 | 113263 | 【MMD杯ZERO参加動画】MMDDFF NT 完全版【遅刻組】 | 技術・工作 |
1 | 319 | 29859 | 【日韓問題】先鋭化していく韓国 part1 | 社会・政治・時事 |
1 | 584 | 1543430 | ラストダンス 歌ってみた【りぶ】 | 音楽・サウンド |
1 | 358 | 24478 | 【東北きりたん車載】SR400ツーリング日記 Part35 年明け九州編その2 | 乗り物 |
1 | 191 | 743430 | 笑い過ぎて一生忘れられないTRPG第2話 | ゲーム |
1 | 276 | 29802 | アズール0ーン.mp0.0000000000000 | その他 |
1 | 335 | 492139 | 【手描きFGO】ぐだ子ちの今日のごはん | エンターテイメント |
1 | 489 | 29929 | 剣、どうにかしろ.SP2 | その他 |
1 | 223 | 29877 | あの人物が、『高木さん』に光明を見出す | アニメ |
1 | 210 | 29737 | 車から降りたくない柴犬 | 動物 |
1 | 101 | 28485 | 遊び倒そう!日帰りで横浜へ小旅行 #1 | 旅行・アウトドア |
1 | 169 | 158819 | 【特別番組】 井上尚弥全18試合ハイライト | スポーツ |
1 | 87 | 426741 | 新元号を発表する野獣先輩 | エンターテイメント |
1 | 55 | 29095 | 【ゆっくり解説】都道府県て゛紹介する日本の都市伝説21「岐阜県」 | 解説・講座 |
1 | 340 | 693315 | 笑い過ぎて一生忘れられないTRPG第3話 | ゲーム |
1 | 108 | 30117 | 海でイチャイチャする空手部 | その他 |
1 | 110 | 29995 | Call of Duty Modern Warfare(2019) 字幕プレイ Part11 | ゲーム |
1 | 177 | 746857 | バイキングに騙された松居一代、ジョルノ・ジョバーナみたいになってしまう | その他 |
1 | 52 | 29990 | 毎日が辛いホモと見る精神安定剤2.lalaxmirei_puri | その他 |
1 | 86 | 29420 | 大阪市生野区観光。 | 旅行・アウトドア |
1 | 266 | 28590 | 【機動戦士ガンダム】 ザク・デザートタイプ&水中用ザク 解説【ゆっくり解説】part49 | 解説・講座 |
1 | 97 | 2332691 | 【初音ミク】バイオレンストリガー【オリジナル】 | 音楽・サウンド |
1 | 26 | 102566 | 平成最後の狩猟生活(その109) | 自然 |
1 | 119 | 29946 | HikakinTVのOPがついに更新!? | 自然 |
1 | 65 | 597203 | Brave Browser | Brave ブラウザ | 技術・工作 |
1 | 379 | 252967 | 【鬼滅の刃】唯一、愛ノ詠【踊ってみた】 | ダンス |
1 | 161 | 1001715 | ひねくれZRKL壱の世 | その他 |
1 | 480 | 69682 | キタキツネ(夜桜たま) | 動物 |
1 | 179 | 1211752 | SSSS.パリッとマン | ゲーム |
1 | 773 | 25092 | ゆっくり霊夢とやる夫が学ぶ 昆虫大百科 part29 | 自然 |
1 | 138 | 193520 | 牛肉のピリ辛バター煮込み食べてみた【アル中カラカラハイボール】 | 料理 |
1 | 26 | 29844 | MEGWIN TVのチャンネル登録者100万人割れ…他のYouTuberは教訓にすべき | 社会・政治・時事 |
1 | 72 | 1590300 | 最凶の魔女ヘラジカ様 | アニメ |
1 | 246 | 1332327 | ヨルシカ - 藍二乗 (MUSIC VIDEO) | 音楽・サウンド |
1 | 32 | 360983 | 【韓国】BBCによる韓国外相へのインタビュー(日本語字幕付き)【GSOMIA】 | 社会・政治・時事 |
1 | 143 | 238463 | 粉チーズ何キロ掛ける?【なかやまきんに君】 | 料理 |
1 | 54 | 28230 | 新潟土産で呑む【長火鉢とおっさん113】 | 料理 |
1 | 50 | 21772 | #軽トラで本気出してみた 2018年春 | 乗り物 |
1 | 353 | 23912 | 【東北きりたん車載】SR400ツーリング日記 Part33 | 乗り物 |
1 | 184 | 153704 | WBSSバンタム級準決勝WBA王者 井上尚弥 VS IBF王者エマヌエル・ロドリゲス | スポーツ |
1 | 297 | 29991 | [ゆっくり実況]えどふぃらゴールデンストームその6 | ゲーム |
1 | 137 | 96874 | 平成最後の狩猟生活(その85) | 自然 |
1 | 51 | 29729 | 【おまけ】ヒプマイでロールプレイングゲーム踊ってみた【練習2日目】 | ダンス |
1 | 98 | 29998 | Fairy gone フェアリーゴーン第7話『がんこな鍛冶屋と偏屈ウサギ』 | アニメ |
1 | 192 | 719197 | 【鬼滅のMMD】アンヘル【上弦弐と蟲柱】 | エンターテイメント |
1 | 63 | 148077 | 名探偵ピカチュウを作ってみた | 技術・工作 |
1 | 250 | 29920 | 【雪山人狼】加藤純一に亡骸を引きずられ捨てられたVtuber 夏色まつり | その他 |
1 | 1051 | 28414 | 「魅ん魔の」SCP解説動画part98「リクエストお待ちしております」 | 解説・講座 |
1 | 161 | 229227 | 豚しゃぶいっぱい食べてみた【アル中カラカラハイボール】 | 料理 |
1 | 522 | 28275 | うちの琴葉姉妹は食べ盛り#25「豚ヒレ肉のベーコン巻きバルサミコソース」 | 料理 |
1 | 230 | 29583 | 【RTA】ゆるふわ融雪の谷川岳西黒尾根リアル登山アタック【04:50:43】 | 旅行・アウトドア |
1 | 55 | 29958 | うそなきをしながらポケモンヌードル醤油味を食べるオーダイル | その他 |
1 | 346 | 29915 | 雨が降るたび服が透ける九州バイク旅Part4【ボイロ】 | 乗り物 |
2 | 270 | 2013034 | ダンベル何キロ持てる? OP「お願いマッスル」 | アニメ |
2 | 270 | 2163578 | 【初音ミク】ビターチョコデコレーション【syudou】 | 音楽・サウンド |
2 | 433 | 26962 | 電動消しゴムを爆速化したい | 技術・工作 |
2 | 204 | 116745 | 平成最後の狩猟生活(その77) | 旅行・アウトドア |
2 | 156 | 28319 | 企画候補である「男性ライバー、夜の修学旅行男子部屋雑談配信」の懸念点について | 旅行・アウトドア |
2 | 919 | 281515 | 【コメ付き】滑落 | 旅行・アウトドア |
2 | 81 | 29315 | ごはん?って聞いてみた | 動物 |
2 | 259 | 28357 | 動画にあのアニメのエンディングを挿入するとめっさ引きが良くなる件⑦ | 技術・工作 |
2 | 168 | 29856 | 正月寿留女【長火鉢とおっさん101】 | 料理 |
2 | 222 | 29922 | 因縁の母猫、子猫を人間に託しに来る | 動物 |
2 | 522 | 29608 | うちの琴葉姉妹は食べ盛り#27「クラブハウスサンドイッチ」 | 料理 |
2 | 425 | 213578 | ダンボールでBEAを作ったら本家BEAに寄贈することになった | 技術・工作 |
2 | 77 | 29851 | 警視庁 特務部 特殊凶悪犯対策室 第七課 -トクナナ- File.03 「三重の罠」 | アニメ |
2 | 342 | 27874 | 買った魚は最後まで5回ばばちゃんの竜田揚げ【VOICEROIDキッチン】 | 料理 |
2 | 304 | 143660 | 平成最後の狩猟生活(その76) | 旅行・アウトドア |
2 | 274 | 1436312 | ダンベル何キロ持てる? OP お願いマッスル full | 音楽・サウンド |
2 | 117 | 23297 | 一人でハンバーグ作ってみた!! | 自然 |
2 | 149 | 123212 | TikTokレベルで『クレイジー・ビート』を踊ってみた | ダンス |
2 | 783 | 235522 | 富士登山滑落てつさんの笑顔 | 自然 |
2 | 144 | 29575 | 【リアル登山アタック】雪の谷川岳1:56:50【団体戦】 | 旅行・アウトドア |
2 | 428 | 266634 | 【ゆっくり解説】世界の奇人・変人・偉人紹介【樋口季一郎】 | 解説・講座 |
2 | 210 | 28605 | いい道第3話サブマリンストリート編 | 解説・講座 |
2 | 144 | 1760195 | 遊戯vs.遊戯(まるで実写) | その他 |
2 | 95 | 1367789 | 遊戯vs.遊戯(まるで実写)デュエリッショナル 決闘の流儀 | その他 |
2 | 252 | 28683 | LEGOで3本の針を1つの回転軸上で回す普通の時計を作った | 解説・講座 |
2 | 185 | 108731 | 平成最後の狩猟生活(その82) | 自然 |
2 | 259 | 30011 | [ゆっくり実況]サイボーグとらちゃんその60 | ゲーム |
2 | 314 | 29673 | ファーウェイ幹部がポーランドで逮捕される容疑はもちろん… | 社会・政治・時事 |
2 | 358 | 21557 | 【東北きりたん車載】SR400ツーリング日記 Part37 | 乗り物 |
3 | 371 | 140236 | 全自動手書きレポートマシンを作ってみた! | 技術・工作 |
3 | 470 | 119163 | 平成最後の狩猟生活(その87) | 自然 |
3 | 736 | 304334 | 【ゆっくり解説】世界の奇人・変人・偉人紹介【アラン・チューリング】 | 解説・講座 |
3 | 332 | 98792 | 平成最後の狩猟生活(その89) | 自然 |
3 | 440 | 130517 | 平成最後の狩猟生活(その90) | 旅行・アウトドア |
3 | 75 | 26747 | 伝説の衝撃【ロングハイライト】18-19CL ベスト16 2lg レアル・マドリード vs アヤックス | スポーツ |
3 | 502 | 96242 | 【VRオナホ】バーチャルセックスできるようにしてみた。 | 技術・工作 |
3 | 350 | 218291 | 【ゆっくり解説】世界の奇人・変人・偉人紹介【アレクサンドル・スヴォーロフ】 | 解説・講座 |
3 | 356 | 110902 | 野宿の勧め(その14) | 自然 |
3 | 153 | 137027 | キャンピングカー大横転で死にかけた男たちの北海道キャンプの旅 Part3「大事故編」 | 旅行・アウトドア |
3 | 485 | 28780 | [UEFAチャンピオンズリーグ18-19 準決勝 2lg】 アヤックス vs トッテナム | スポーツ |
3 | 344 | 101472 | 平成最後の狩猟生活(その108) | 自然 |
3 | 419 | 1278701 | 笑い過ぎて一生忘れられないTRPG | ゲーム |
3 | 229 | 29959 | 蜜月レイプ! 性帝と化した先輩 THK√.mp3 | その他 |
3 | 669 | 624045 | 笑い過ぎて一生忘れられないTRPG第8話 | ゲーム |
3 | 335 | 96365 | 平成最後の狩猟生活(その96) | 自然 |
3 | 265 | 29961 | 「魅ん魔の」SCP解説動画part100「リクエストお待ちしております」 | エンターテイメント |
3 | 217 | 129264 | 【中島抜きでも伝説の大勝】アジアカップ準決勝日本 対 イラン | スポーツ |
3 | 414 | 128293 | 平成最後の狩猟生活(その93) | 旅行・アウトドア |
3 | 863 | 23630 | 【東北きりたん車載】SR400ツーリング日記 Part36 年明け九州編その3 | 乗り物 |
3 | 340 | 29942 | 変態調教師†悔い改めて† 7章 .ssbu | その他 |
4 | 184 | 110012 | いらすとや ドーナツホール(ハチ) VOCALOID UTAU | 技術・工作 |
4 | 340 | 29834 | けものフレンズ2の悪意を削ぎ落としたもの4-2話 | その他 |
4 | 767 | 248367 | 【ゆっくり解説】世界の奇人・変人・偉人紹介【リュドミラ・パブリチェンコ】 | 解説・講座 |
4 | 253 | 29693 | 朝日新聞「安倍外交の限界見えた」【サンデイブレイク114】 | 社会・政治・時事 |
4 | 1136 | 121864 | 【RTA】ゆるふわ厳冬期富士山攻略リアル登山アタック(前編)【テントが飛ぶなら人も飛ぶ】 | 旅行・アウトドア |
4 | 292 | 29252 | 【実況×薬学解説】薬剤師マキの挑む製薬工場開発S2 #4【VOICEROID】 | 解説・講座 |
4 | 347 | 28785 | 【セーラー服】好き!雪!本気マジック踊ってみた【榎並えな】 | ダンス |
4 | 198 | 27543 | PG ダブルオーガンダムセブンソード/G RGダブルオークアンタフルセイバー ユニコーンペルフェクティビリティゆっくりプラモ動画 | 技術・工作 |
4 | 431 | 334647 | 幕末志士西郷のリークSP(バンドマン編) | ラジオ |
4 | 441 | 120661 | アニソン2on2ダンスバトル『あきばっか~のvol.18』決勝戦 | ダンス |
4 | 704 | 27870 | 【東北きりたん車載】SR400ツーリング日記 Part34 年明け九州編その1 | 乗り物 |
4 | 742 | 243263 | 【ゆっくり解説】世界の奇人・変人・偉人紹介【ヘレン・ケラー&アン・サリバン】 | 解説・講座 |
4 | 331 | 29902 | ジョジョのコネタの冒険 黄金の風 その17 | アニメ |
4 | 227 | 26499 | いつでも一瞬で抜けるようになりましたwww | 自然 |
4 | 1110 | 29612 | チョコレートガナッシュサンドクッキー【お菓子作り】ASMR | 料理 |
4 | 659 | 237342 | 【ゆっくり解説】世界の奇人・変人・偉人紹介【レオナルド・ダ・ヴィンチ】 | 解説・講座 |
4 | 374 | 1669830 | 遊戯vs.遊戯with海馬(まるで実写)~春キャベツのペペロンチーノ~ | その他 |
4 | 346 | 28959 | 釣った魚は最後まで#35鯛のカルパッチョ【VOICEROIDキッチン】 | 料理 |
4 | 407 | 209759 | 【ゆっくり解説】世界の奇人・変人・偉人紹介【マハトマ・ガンジー】 | 解説・講座 |
4 | 571 | 195943 | かばんちゃん黒幕説 | 動物 |
5 | 596 | 133694 | アニソン2on2ダンスバトル『あきばっか~のvol.16』決勝戦 | ダンス |
5 | 436 | 135669 | 1分間、それで終わった。 | 乗り物 |
5 | 405 | 123859 | 【旅動画】ぼくらは新世界で旅をする Part:8【四国バーガー編】 | 旅行・アウトドア |
5 | 574 | 103760 | 会社辞めてninja250で日本一周 Phase 15 | 乗り物 |
6 | 652 | 100457 | 会社辞めてninja250で日本一周 Phase 16 | 乗り物 |
6 | 433 | 29890 | 大物Youtuber【りんくうの星】観覧車乗ってみた(夜の部)【りんくうタウン】 | その他 |
6 | 433 | 1440373 | かぐや様は告らせたい~天才たちの恋愛頭脳戦~第1話「映画に誘わせたい/かぐや様は止められたい/かぐや様はいただきたい」 | アニメ |
7 | 722 | 310982 | 【ゆっくり解説】世界の奇人・変人・偉人紹介【舩坂弘】 | 解説・講座 |
7 | 552 | 29924 | 2分の米韓首脳会談→評価したい親密な日米首脳会談→空しさだけが残る【サンデイブレイク104】 | 社会・政治・時事 |
7 | 949 | 29924 | 仮面ライダーフォーゼ第47話「親・友・別・離」 | アニメ |
7 | 642 | 29965 | 【実況】ドラゴンクエストをいい大人達が本気で遊んでみた。完結編 | ゲーム |
7 | 409 | 1219086 | 鬼滅の刃第一話残酷 | アニメ |
8 | 1084 | 108582 | 落ちる癖 | 乗り物 |
8 | 1289 | 353089 | 富士山100%RTA 17時間35分【前編】 | 旅行・アウトドア |
8 | 950 | 113256 | 【政見放送】全国比例 NHKから国民を守る党 立花孝志 2019 | 社会・政治・時事 |
8 | 674 | 29937 | キラッとプリ☆チャン第73話「さらちゃん悩む…スランプを乗り越えろ!だもん」 | アニメ |
8 | 2835 | 1083785 | 【幕末志士】SAKKACHAN2前編【実況プレイ】 | ゲーム |
9 | 1241 | 29961 | 明治東亰恋伽第4話「花の浅草ランデブー」 | アニメ |
10 | 807 | 106113 | 宝くじよりも当たらない | 乗り物 |
10 | 967 | 810774 | 【実況】ナポリの遭難者たちpart1【RimWorld】 | ゲーム |
11 | 1163 | 107158 | 会社辞めてninja250で日本一周 Phase 14 | 乗り物 |
13 | 1379 | 104690 | 2655kg | 乗り物 |
14 | 2803 | 803290 | 【幕末志士】スーパーボンバーマン【実況プレイ】 | ゲーム |
14 | 1651 | 152595 | 俺だってできない | 乗り物 |
15 | 1473 | 141925 | 違法な事 | 乗り物 |
15 | 1453 | 178650 | 声優の面白名場面集47 | ラジオ |
18 | 1863 | 138013 | 汚染 | 乗り物 |
23 | 2368 | 980617 | けものフレンズ2第1話「きおくのかなた」 | アニメ |
25 | 2460 | 463608 | アイドル部 本気の学力テスト ~おバカtuberになるのは誰だ?!~【エイプリルフール?】 | エンターテイメント |
まず4.の実験の結果について考察し、つぎに今後の課題について述べる。
再生回数がとても多い動画は確かに弾幕の個数と弾幕面積が大きく出たところがあるが、再生数別にみると再生回数が多ければ必ず弾幕が発生するというわけではないという結果であった。 弾幕が発生しない動画はコメントしづらいような動画内容である場合が多く、ジャンルによって弾幕個数と弾幕面積の結果の特性が異なっている。例えば音楽・サウンドの動画はどれほど動画や音楽の内容が素晴らしくても、サビや動画の始まり、動画の終わりなどの区切り以外はコメントが少なく分散する傾向であった。一方アニメの配信は初回配信や一定期間最新話が無料なので一定のアニメファンは内容にかかわらずに再生するので、再生回数は他の動画に比べて必ず多い。そのため、コメントしづらい動画であっても再生回数が多くなるのは当然である。
本研究では弾幕の濃さを抽出するため、弾幕面積を定義し、結果を得た。つまり本研究ではこの弾幕面積の定義によってはより深い分析ができる可能性がある。 今回の実験では弾幕面積の定義において、25 というパラメータを固定した。これにより、動画に対して、一定の評価ができた。25 という値については議論の余地があるが極端な値にしなければ似たような結果になると思われる。
弾幕面積と動画の内容の関係性をみるため図 16 の①と②の動画について述べる。 ①の 2 つの動画は、弾幕面積の割合がかなり大きい。この二つの動画はいずれも同じ動画投稿者によるもので「【幕末志士】SAKKACHAN2 前編【実況プレイ】」と「【幕末志士】スーパーボンバーマン【実況プレイ】」である。この二つの動画は共通して笑いどころが多数存在する。コメントもその部分に集中している。単純に笑える部分についてはコメントが付きやすいと考えられ、より多くの視聴者を笑わせることができれば弾幕面積が増えやすいと思われる。つまりレベルの高い投稿者による面白い動画である。 一方②の動画は「けものフレンズ2第 1 話「きおくのかなた」」である。弾幕面積と個数は他動画と同じような比率であり数も多いが、コメントは罵詈雑言であったり、否定的だったり皮肉であるように思われても仕方ないような内容で、それが動画の要所要所で発生している状態である。 つまり質の悪いアニメへの批判が多数書かれている。アニメは再生数が多いので、質が悪いとコメントが多くなる。 よってアニメ以外では質の高さと弾幕面積は関連付けられている。一方必ず一定の再生数が得られるアニメでは、おもしろくなく批判が多くても共に弾幕面積が多くなる。
図16 再生回数 50 万以上の動画のジャンル別弾幕面積と弾幕個数(再掲)
5.1.でも触れたようにジャンルか何か別の要素によって弾幕個数と弾幕面積の特徴が異なっているため、対象とする動画は再生回数が多い動画ではなく、ジャンルや動画投稿者別あるいは別の何かを対象とした動画を分析するべきである。今回はアニメのみが異なることがわかったが、今後は分析対象を見つけることは今後の課題である。
今回の研究ではコメント表示位置についてしか分析をしていないが、コメント投稿者の数を調べれば、一人でいくつもコメントしている人がいる動画と一人当たりでそれほどコメントを打たない動画で分別をし、今回の実験で得られなかった動画の特徴が得られる可能性がある。 また、コメントの文字列を分析すれば5.3.で触れたような否定的なコメントを抽出して動画を分別することができる可能性がある。 コメント表示位置以外の分析をする手法を見つけることは今後の課題である。
本研究ではニコニコ動画のコメントの再生時間のどこにコメントがあるかという部分に着目した。その結果、再生回数が多い動画の特徴の一つにコメントが一部分に密集しやすいということがわかった。 今回はコメントの再生時間の位置にのみ焦点を当てたが、再生回数がとても多くても弾幕個数と弾幕面積がすくない場合もあり、ジャンルや動画投稿者、あるいは別の何かの要素別に分析をすることや、コメントの文章自体による特徴の抽出することは今後の課題である.
[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
この章では実験に使用したPythonのソースコードや、RapidMinerのオペレータの配置等を示す。
複数の動画情報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.1.で作成したcsvをインポートし、図8.2.A.の4、5、6のようにインポートしたデータを配置し、作りたいCSVからインポートしたデータだけを7につなぐと対応したvpos_list.csvというファイルが出力されるRapidminerのプロセスである。 以下に配置図と構成を表すXMLを示す。
図8.2.A.最上層部のオペレータ配置図
図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.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.3.から出力したcommentCounter.csvのコメント表示量のデータを元のデータに追加して結果を001data.csvに出力するRapidminerのプロセスである。 以下に配置図と構成を表すXMLを示す。
図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="""/>
<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.4.で作成した001data.csvから弾幕個数と弾幕面積を求めるRapidminerのプロセスである。以下にオペレータの配置と構成を表すXMLを示す。
図 8.5.A.最上層のオペレータの配置
図8.5.B. 図8.5.A.の1の内部のオペレータ配置図
図8.5.C. 図8.5.A.の2の内部のオペレータ配置図
図8.5.D. 図8.5.A.の2の内部のオペレータ配置図
図8.5.E. 図8.5.A.の6の内部のオペレータ配置図
図8.5.F. 図8.5.E.の2の内部のオペレータ配置図
図8.5.G. 図8.5.E.の3の内部のオペレータ配置図
図8.5.H. 図8.5.G.の13の内部のオペレータ配置図
図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="""/>
<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">&#20840;&#12487;&#12540;&#12479;&#12398;&#35501;&#12415;&#36796;&#12415;&#12392;<br/>&#21205;&#30011;&#12398;id&#25277;&#20986;&#12290;<br/>&#19978;&#35352;&#65298;&#12388;&#12398;<br/>&#12510;&#12463;&#12525;&#12408;&#12398;&#30331;&#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">&#32080;&#26524;&#12398;&#20445;&#23384;&#29992;&#12398;&#34920;&#20316;&#25104;<br/><br><br></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">&#12467;&#12513;&#12531;&#12488;&#34920;&#31034;&#37327;&#12398;<br/>&#12464;&#12521;&#12501;&#12398;&#34920;&#29983;&#25104;<br/></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=""unknown""/>
<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">&#24382;&#24149;&#12398;&#20491;&#25968;&#12392;<br/>&#24382;&#24149;&#12398;&#38754;&#31309;&#12434;&#12398;&#34920;&#12434;<br/>&#20316;&#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})<parse(%{commentNum}),25/parse(%{correctionValue}),25)"/>
</list>
<description align="center" color="transparent" colored="false" width="126">&#24382;&#24149;&#12398;&#21028;&#23450;&#20516;&#12434;&#20316;&#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>=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">&#22793;&#25968;&#21021;&#26399;&#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})>=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">&#24382;&#24149;&#12398;&#20491;&#25968;&#12392;&#38754;&#31309;&#12434;&#27714;&#12417;&#12427;<br/></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">&#19968;&#12388;&#19968;&#12388;&#12398;&#21205;&#30011;&#12395;&#12388;&#12356;&#12390;&#20966;&#29702;<br/></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">&#24382;&#24149;&#12398;&#38754;&#31309;&#12392;&#20491;&#25968;&#12434;&#35336;&#31639;<br/></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>