身近なデータの分析 日本人の寿司ネタの好みをQlikViewで分析してみよう

身近なデータの分析 日本人の寿司ネタの好みをQlikViewで分析してみよう

Pocket

仕事がら、分析に使えそうな面白いデータがないか探すことがよくあるのですが、先日”寿司ネタのデータ”というめずらしいデータを見つけました。
トロ、ウニ、イクラなど100種類の寿司ネタについて、一番好きなネタはなにかといったアンケート結果を5000人分集めたものです。
今回はこのデータをQlikViewに取り込んで、分析してみましょう。

一番人気のネタはなんでしょうか、やはりトロでしょうか?自分の好きなネタは何位にランクインしているでしょうか?
エビ、カニなどの甲殻類、イカ、タコなどの軟体類は、どの程度健闘しているでしょうか?

今回は、なるべく基本的なチャートのみを使用して分析していこうと思いますので、とくにQlikView初心者の方はぜひご覧ください。


データの確認とデータロード


出典

今回使用するデータは、産業技術総合研究所の神嶌敏弘氏が研究用にまとめられたもので、ご自身のWebサイトで公開されています。
SUSHI Preference Data Sets
http://www.kamishima.net/sushi/
詳細は以下の文献をご参照ください。
T. Kamishima, Nantonac Collaborative Filtering: Recommendation Based on Order Responses, KDD2003, pp.583-588, 2003. [PDF]

ファイルのダウンロード

以下のWebページをブラウザで開いてください。
SUSHI Preference Data Sets
http://www.kamishima.net/sushi/
sushi-101
すこし下にスクロールし、「All Data Set」にある「sushi3.tgz」のリンクをクリックして、ファイルをダウンロードしてください。
sushi-102
このファイルは、GZIP形式で圧縮されています。
GZIP形式のファイルを解凍できるツール(Lhaz7-Zipなど)で解凍してください。
ここではLhazを使用しています。
sushi-103
ファイルが解凍できました。
sushi-104
「sushi3」というフォルダの中に、ファイルが解凍されています。
sushi-105データの詳細は「README-ja.txt」をご参照ください。
ファイルはすべてテキストファイルですが、テキストエディタで開く場合は、文字コードと改行コードに注意してください。
文字コードはJISとUTF-8に、改行コードはUNIX形式(LF)に対応したテキストエディタが必要です。
※Windowsのメモ帳では正しく開けません。

内容を確認できなくても、これ以降の操作をする上で問題はありません。

「sushi3」からはじまる5つのファイルがデータです。
今回使用するのは、このうち3つのファイルです。
  • sushi3.idata
    アイテム(寿司ネタ)のデータです。トロ、ウニ、イクラなど100種類の寿司ネタに関するデータが格納されています。ネタの名前だけでなく、25の店舗で調査した価格や、こってり度などのデータもあります。
  • sushi3.udate
    利用者(アンケートに回答した人)のデータです。年齢や性別、地域などのデータが5000人分格納されています。
  • sushi3b.5000.10.order
    寿司ネタの順位に関するアンケート結果のデータです。好きな寿司ネタ上位10位が5000人分格納されています。

データの取り込み

それではQlikViewにデータを取り込んでみましょう。
まずはファイルを新規に作成し、[ロードスクリプトの編集]画面を起動します。
sushi-201
今回ロードスクリプトは、あらかじめ作成済みのものを用意しておきました。
以下のリンクを開いて、内容をコピーしてください。
ロードスクリプト
ロードスクリプトの最下行にカーソルをあわせて、コピーしたロードスクリプトを貼り付けてください。
sushi-202sushi-203詳細は割愛しますが、このロードスクリプトでは以下のような処理をおこなっています。
  • 番号のデータを「README-ja.txt」にもとづいて、文字列のデータに置き換え。
    たとえば、0:青物、1:赤身、2:白身 … というように番号で振られているデータを日本語の文字列に置き換え。
  • 番号が0から振られているため、1からに変更。
    これは必須ではないのですが、QlikViewでは番号は1から振られることが多いため、1からに統一しています。たとえば、RowNo関数は行番号を返す関数ですが、行番号は1からはじまります。
  • 順位のデータ「sushi3b.5000.10.order」で、列で保持している順位を行に置き換え。
    列ごとに1位、2位、3位 … となっているため、これを行ごとに1位、2位、3位 … となるように置き換え。
    複数列に分かれたデータを一列にまとめる方法については、こちらの記事をご覧ください。
データを取り込んでみましょう。
[ロードスクリプトの編集]画面を[OK]ボタンで閉じてください。
[リロード]ボタンをクリックします。
sushi-204
ファイルを保存してください。
今回のロードスクリプトでは、取り込むファイルの指定を相対パスで(ファイル名のみ)指定しているため、もとのテキストファイルとおなじ場所に保存してください。
sushi-205sushi-206
データが取り込まれました。
[閉じる]ボタンをクリックしてください。
sushi-207
ただしくデータが取り込まれたか、テーブルビューアーで確認してみましょう。
ツールバーの[テーブルビューアー]ボタンをクリックします。
sushi-208
「利用者」「寿司ネタ」「ランキング」の3つのテーブルが作成されています。
sushi-209
以上でデータの取り込みは完了です。


ユーザーインターフェースの作成

それではユーザーインターフェースを作成していきましょう。

テーブルボックスの作成

使用するデータの全容を把握するために、まずは取り込んだ3種類のデータをテーブルボックスで表示してみましょう。
シートの余白を右クリックして[シートオブジェクトの追加]→[テーブルボックス]を選択します。
sushi-301
まず「寿司ネタ」のデータを確認してみましょう。
画面左下で「寿司ネタ」を選択し、画面中央の[すべて追加]ボタンをクリックします。
画面右の[ロード順]ボタンをクリックして、データを取り込んだ順に並べ替えます。
[OK]ボタンをクリックしてください。
sushi-302
「寿司ネタ」のテーブルボックスが追加されました。
位置やサイズを見やすいように調節してください。テーブルボックスを右クリック→[データに列幅を合わせる]を選択すると、列幅がちょうどよい幅に調節されます。
sushi-303
では、つぎに「利用者」のデータを確認してみましょう。
手順は先ほどと同様です。
シートの余白を右クリックして[シートオブジェクトの追加]→[テーブルボックス]を選択します。
sushi-304
画面左下で「利用者」を選択し、画面中央の[すべて追加]ボタンをクリックします。
画面右の[ロード順]ボタンをクリックして、データを取り込んだ順に並べ替えます。
[OK]ボタンをクリックしてください。
sushi-305
「利用者」のテーブルボックスが追加されました。下図を参考に位置やサイズを調節してください。
また、「寿司ネタ番号」と「利用者番号」のラベル部分を、それぞれダブルクリックして、これらの順番で並べ替えておいてください。
sushi-306
さいごに「ランキング」のデータを確認してみましょう。
シートの余白を右クリックして[シートオブジェクトの追加]→[テーブルボックス]を選択します。
画面左下で「ランキング」を選択し、画面中央の[すべて追加]ボタンをクリックします。
今回は、項目の順番を手動で設定します。[上へ]ボタンと[下へ]ボタンを使用して、「利用者番号」「順位」「寿司ネタ番号」の順番にしてください。
sushi-307
さらに、並び順も手動で設定します。[ソート]タブを開きます。
こちらも[上へ]ボタンと[下へ]ボタンを使用して、「利用者番号」「順位」「寿司ネタ番号」の順番にしてください。
以上で完成ですので、[OK]ボタンをクリックしてください。
sushi-308
テーブルボックスが3つ作成できました。
sushi-309
すこしデータを確認してみましょう。
「利用者番号」から「1」を選択します。
sushi-310
「利用者番号」1番の方(30代、男性、北海道在住の方)の回答が確認できます。
sushi-311この方は1位に「寿司ネタ番号」59番を挙げています。59番は「なっとう」ですね。
2位は5番ですので「うに」ですね。
このように、「ランキング」のテーブルには、利用者と寿司ネタごとに順位のデータが格納されています。

では、いったん選択を解除してください。ツールバーの[クリア]ボタンをクリックします。
sushi-312
「寿司ネタ」のテーブルボックスを見ると、「こってり度」「食べる頻度」などの項目があります。
これらの項目で並べ替えて、寿司ネタの特徴を見てみましょう。
まず、「こってり度」のラベル部分をダブルクリックしてください。昇順(小さい順)に並べ替えられます。
sushi-313「かっぱ巻き」や「しそ巻き」はこってり度が低い(=あっさりしている)という結果がでました。たしかにそうですね。

では、「こってり度」のラベル部分を再度ダブルクリックしてください。こんどは降順(大きい順)に並べ替えられます。
sushi-314「うなぎ」や「とろ」は、たしかにこってりしています。

つづいて「正規化した価格」で、降順(大きい順)に並べ替えてみましょう。
sushi-315「正規化した価格」はもっとも安いネタを1としたときの価格です。一番価格が高いのは「とろ」で、もっとも安いネタの約4.5倍の価格ということになります。

さいごに「販売頻度」で昇順(小さい順)に並べ替えてみましょう。
sushi-316「くえ」「いしがきだい」「ままかり」など、希少価値の高いものや、高級魚がでてきますね。わたしは「くえ」は鍋でしか食べたことがないので、こんどは刺身で食べてみたいです。
また「さわら」も意外と販売頻度が低いようです。もしかしたら調査した時期に偏りがあるのかもしれませんね。

このように、データの全容がよく分からないときは、まず「テーブルビューアー」をざっと確認し、そのあとテーブルごとに「テーブルボックス」を作成してみることを、おすすめします。
テーブルボックスの作成は以上で終了です。

チャートの作成

ここからはチャートを作成していきましょう。

まず、シートを追加します。
ツールバーの[シートの追加]ボタンをクリックします。
sushi-401
新しいシートで、シートの余白を右クリックして[シートオブジェクトの追加]→[チャート]を選択します。
sushi-402
[チャートの種類]から「棒グラフ」を選択して、[次へ]ボタンをクリックします。
sushi-403
軸項目には「小分類」と「順位」を設定します。
sushi-404
「小分類」と「順位」を選択して、[次へ]ボタンをクリックします。
sushi-405
ここでは利用者の人数を数えたいので、以下の数式を入力します。
Count(利用者番号)
入力後[OK]ボタンをクリックしてください。
sushi-406
[ラベル]に「人数」と入力します。
ここまでで一度結果を確認しておきましょう。[完了]ボタンをクリックします。
sushi-407
棒グラフができました。「小分類」ごと「順位」ごとに回答した人の人数を集計しています。
しかし、このままでは見にくいので、編集していきましょう。
sushi-408
チャートを右クリック→[プロパティ]を選択してください。
[ソート]タブを開きます。「小分類」を選択し[Y-軸値]にチェックを入れます。
sushi-409
[スタイル]タブを開きます。[方向]で横向きの棒グラフを選択し、[形式]で[積み上げ]を選択します。
以上で完成ですので、[OK]ボタンをクリックしてください。
sushi-410
棒グラフができました。
人数の多い順に、積み上げ棒グラフの形式で表示しています。
sushi-411これを見るとやはり「赤味」の人気が高いようです。10位までの合計でもトップで、さらに1位(グラフの青の部分)と2位(グラフの赤の部分)の比率も高いことが分かります。
逆に「貝」は、10位までの合計は多いものの、1位や2位の比率は低いようです。

サイクリックグループの作成

「赤味」「貝」といった分類ごとの集計は確認できましたので、こんどはより詳細な「寿司ネタ」単位の集計を見てみましょう。
単純に軸項目を変更するだけでもいいのですが、ここではサイクリックグループという機能を使用してみます。
サイクリックグループは、関連する項目をグループ化する機能です。

チャートのプロパティを開き、[軸]タブを開きます。
画面左下の[グループの編集]ボタンをクリックします。
sushi-501
[新規作成]ボタンをクリックします。
sushi-502
画面上部の[グループ名]に「寿司ネタグループ」と入力し、その右側で[サイクリックグループ]を選択します。
[項目]から「小分類」と「寿司ネタ名」を選択します。
sushi-503
[使用項目]に「小分類」と「寿司ネタ名」が設定できたら、[OK]ボタンをクリックします。
sushi-504
[OK]ボタンをクリックし、前の画面に戻ります。
sushi-505
[チャートプロパティ]の[軸]タブに戻ると、いま作成した「寿司ネタグループ」が項目の一覧に追加されています。
軸項目の「小分類」を「寿司ネタグループ」に入れ替えます。
以上で完成ですので、[OK]ボタンをクリックしてください。
sushi-506
一見、なにも変わっていないように見えますが、軸項目の左側に黄色い矢印のボタンが追加されています。
このボタンをクリックすると、「小分類」と「寿司ネタ名」が切り替わります。
sushi-507sushi-508一度クリックすると、「小分類」→「寿司ネタ名」に切り替わり、もう一度クリックすると「寿司ネタ名」→「小分類」に切り替わります。
このようにグループ化した項目が循環的に(サイクリックに)切り替わります。

サイクリックグループは設定できましたが、このままだと「寿司ネタ名」の表示にした際、棒が多すぎて見にくいため、さらに設定を追加しましょう。
チャートのプロパティを開き、[プレゼンテーション]タブを開きます。
[X-軸スクロールバーの表示]にチェックを入れ、その右側の欄に「20」と入力します。
[OK]ボタンをクリックしてください。
sushi-509
一度に表示する件数が20件になり、それを超えた場合はスクロールバーが表示されます。
sushi-510寿司ネタごとに見ると、10位までの合計では「えび」や「穴子」が上位にきています。
「とろ」や「中とろ」は1位や2位に挙げる人は多いものの、10位までの合計はそれほど多くありません。
「えび」や「穴子」は嫌いな人の少ないネタ、「とろ」や「中とろ」は好き嫌いのあるネタと言えるかもしれませんね。


データの分析


データの分析1

それでは、もうすこしデータを分析してみましょう。
まず、条件を絞り込みできるように、リストボックスをいくつか追加します。
シートの余白を右クリックして、[リストボックスの追加]をクリックします。
sushi-601
「利用者番号」「小分類」「順位」を選択して、[OK]ボタンをクリックしてください。
sushi-602
下図を参考に位置やサイズなどを調節してください。
sushi-603
それでは、順位ごとに絞り込んだ結果を見てみましょう。
「順位」のリストボックスから「1」を選択します。
sushi-604やはり「とろ」や「中とろ」が人気のようです。
では、2位以降も見てみてください。(画像をクリックすると拡大します。)

1位~3位ぐらいまでは「とろ」「中とろ」などの赤味系が強いですが、4位ぐらいから「えび」「いか」「たこ」などの甲殻類、軟体類が急に順位を上げてきます。また、7位以降は貝類や「玉子」「数の子」「しゃこ」などの名前が挙がってきます。

上位(1位~3位)、中堅(4位~6位)、下位(7位~10位)と、3つに分けて見てみると、さらに分かりやすいです。
sushi-614sushi-615sushi-616
こんどは、「小分類」の中での、ネタの順位を見てみましょう。
サイクリックグループのボタンをクリックして、「寿司ネタ名」に切り替えます。
sushi-617
「小分類」から「赤味」を選択します。
sushi-61810位までの合計では「まぐろ」が強いですが、やはり「とろ」と「中とろ」の1位、2位の比率が高いです。
「ねぎとろ」は、「ねぎとろ」と「ねぎとろ巻」に票が分かれてしまっているかもしれませんね。

「小分類」から「海老カニ」を選択します。
sushi-619「えび」はやはり人気ですが、「しゃこ」も健闘しています。

「小分類」から「魚卵」を選択します。
sushi-620「いくら」の一強かと思いましたが、「数の子」も健闘していますね。

「小分類」から「青物」を選択します。
sushi-621いままであまり名前が出てこなかった「青物」ですが、「はまち」「さば」などが人気のようです。

データの分析2

さいごに、すこし”QlikViewらしい”分析をしてみましょう。
まず、選択をクリアして、サイクリックグループを「寿司ネタ名」にしてください。
sushi-701
「順位」から「1」、「小分類」から「赤味」を選択します。
「利用者番号」のリストボックスを右クリックして[絞込値の選択]をクリックします。
sushi-702
この状態で、再度「利用者番号」のリストボックスを右クリックし、[他項目の選択のクリア]をクリックします。
sushi-703
これで”1位に赤味を選んだ人”が、ほかになにを選んだかを確認できます。
sushi-704
「順位」から「2」を選択すれば、”1位に赤味を選んだ人が2位になにを選んだか”を確認できます。
sushi-705
下図では、「順位」から「2」と「3」を選択し、”1位に赤味を選んだ人が、2位と3位になにを選んだか”を確認しています。
sushi-706これを見ると、1位に「赤味」を選んだ人は2位と3位にも「赤味」を選ぶか、「赤味」以外では「いくら」、えび系、「穴子」などを選ぶ人が多いようです。

では、おなじことを「青物」でやってみましょう。「赤味」と違う結果が出てくるでしょうか。
まず、選択状態をクリアします。
「順位」から「1」、「小分類」から「青物」を選択します。
「利用者番号」のリストボックスを右クリックして[絞込値の選択]をクリックします。
sushi-707
この状態で、再度「利用者番号」のリストボックスを右クリックし、[他項目の選択のクリア]をクリックします。
sushi-708
これで”1位に青物を選んだ人”が、ほかになにを選んだかを確認できます。
sushi-709
「順位」から「2」を選択すると、「たい」「かんぱち」などが挙がってきますね。
sushi-710
下図では、「順位」から「2」と「3」を選択し、”1位に青物を選んだ人が、2位と3位になにを選んだか”を確認しています。
sushi-711やはり「赤味」のときとは多少、傾向が違いますね。「たい」が上位に挙がってきており、「ひらめ」などの名前も挙がっています。「青物」を1位に選んだ人の方が、よりあっさりしたものを好むと言えそうです。
また、「穴子」と「甘えび」は両方の層から人気があるようですね。

このように、寿司ネタから人、人から寿司ネタと、視点を変えてデータを絞り込んでいくのは、QlikViewの”連想技術”が得意とする分析の進め方です。

では、分析は以上で終了とします。


最後に…

今回は寿司ネタのデータという、めずらしいデータを使用してみましたが、これはもともと以下のページで見つけたものです。
hanzomemo: 情報推薦の研究に使えるデータセット
http://hanzomemo.blogspot.jp/2014/02/blog-post.html

このページには、寿司ネタのデータ以外にも面白そうなデータがいくつかありますので、機会があれば、またこのブログで取り上げてみたいと思います。
お疲れ様でした。


補足説明

今回、ロードスクリプトはあらかじめ用意したものを使用しましたが、その中で連番を文字列に置き換えるために、Pick関数を使用しています。
Pick(数値項目, 文字列1, 文字列2, ..., 文字列n)
このように指定すると、数値項目の値が1だったときは文字列1が、数値項目の値が2だったときは文字列2が返されます。

今回使用したロードスクリプトでは、性別をあらわす番号を文字列に置き換えるために、以下の指定をしています。
Pick(@2 + 1, '男性', '女性') as 性別
@2は性別をあらわす番号の項目で、0からはじまるため+1しています。
0:男性、1:女性

Pick関数は非常に便利な関数ですが、文字列が多くなる場合は、Pick関数内にすべて列挙するのではなく、別途、INLINE LOAD文を使用したり、CSVファイルなどでデータを用意した方がよいでしょう。
たとえば、今回使用したロードスクリプトでは、都道府県をあらわす番号を文字列に置き換えるのにも、Pick関数を使用しています。
47都道府県すべて列挙すると分かりにくくなりますので、本来であればCSVファイルなどでデータを用意した方がよいでしょう。
Pick(@8 + 1, '北海道', '青森県', '岩手県', '秋田県', '宮城県', '山形県', '福島県', '新潟県',
  '茨城県', '栃木県', '群馬県', '埼玉県', '千葉県', '東京都', '神奈川県', '山梨県', '静岡県',
  '長野県', '愛知県', '岐阜県', '富山県', '石川県', '福井県', '滋賀県', '三重県', '京都府',
  '大阪府', '奈良県', '和歌山県', '兵庫県', '岡山県', '広島県', '鳥取県', '島根県', '山口県',
  '愛媛県', '香川県', '徳島県', '高知県', '福岡県', '長崎県', '佐賀県', '熊本県', '鹿児島県',
  '宮崎県', '大分県', '沖縄県') as 県



神嶌敏弘氏のサイト

SUSHI Preference Data Sets
http://www.kamishima.net/sushi/

T. Kamishima, Nantonac Collaborative Filtering: Recommendation Based on Order Responses, KDD2003, pp.583-588, 2003. [PDF]

hanzomemo: 情報推薦の研究に使えるデータセット

hanzomemo: 情報推薦の研究に使えるデータセット
http://hanzomemo.blogspot.jp/2014/02/blog-post.html