📊

第2回 【Python】まだ見ぬアクティビティーを求めてアソビュー !分析

2022/11/04に公開

1. 概要

この記事は第1回の続きです。

https://zenn.dev/tokoroteen/articles/0d1599540dce00

第1回ではアクティビティー検索サイトであるアソビュー!に掲載されているアクティビティーの基本情報を取得しました。
今回はそのデータを解析することでアソビュー!内のアクティビティーの特徴に迫っていきたいと思います。

完成したアプリはこちら

https://lifac.herokuapp.com/

例えば「空を飛びたい」とき(検索後に海要素を足して、山要素を引くこともできます!!)

例えば「動物に癒されたい」とき

2. 前回取得したデータの概要

早速前回取得したデータを使います。
まずは必要なものをインポートします。

base_data_graph
import pandas as pd
%matplotlib inline
import matplotlib.pyplot as plt
import japanize_matplotlib #matplotlibで日本語を使う
import re

データを読み込みます。

base_data_graph
df = pd.read_csv('base_data.csv')
df.head(2)
name area small_area genre_type rating_star rating_asorepo introduction_title introduction_text No. url review_link
0 ガイドラインアウトドアクラブ 北海道 富良野・美瑛・トマム ['ラフティング'] 5.0 7 3歳からOKのラフティング!川を全身で遊ぼう!自然を満喫しよう☆ 南富良野にある水の綺麗な「シーソラプチ川」と「空知川源流部」にてラフティングを開催。全ツアー... 163 省略 /base/163/asorepo/list/
1 洞爺ガイドセンター 北海道 洞爺・登別・苫小牧 ['レイクカヌー', 'エコツアー・自然体験', 'スノーシュー・スノートレッキング'] 0.0 1 美しい洞爺湖を満喫。「旬なプラン」をご提供します! 北海道・洞爺湖で、自然体験アクティビティを開催している洞爺ガイドセンター。美しい自然をご案内... 178 省略 /base/178/asorepo/list/
2 函館どさんこファーム 北海道 函館・大沼・松前 ['乗馬 その他'] 0.0 3 どさんこと触れあう函館の旅!函館空港・函館駅から車で20分! 函館どさんこファームは函館空港・函館駅から20分と、アクセス抜群・好立地の乗馬クラブです。... 191 省略 /base/191/asorepo/list/

rating_asorepo列はそれぞれのアクティビティーのレビュー数を示しています。これについて詳細を見てみると、

base_data_graph
df['rating_asorepo'].describe()
count     8651.000000
mean       118.819327
std        992.897662
min          0.000000
25%          0.000000
50%          3.000000
75%         20.000000
max      32616.000000
Name: rating_asorepo, dtype: float64

となります。アクティビティーの数は全部で8651件、レビュー数の平均は約119件であることが分かります。第1四分位数が0、第2四分位数が3なので、レビューが数件しかないものが多くを占めていることが明らかになりました。
もっともレビューがついているものは32616件もレビューがついています!
どんな施設にレビューが多いのかを見てみます。

base_data_graph
df.sort_values(by='rating_asorepo', ascending=False)[['name', 'rating_asorepo']].head(5)
name rating_asorepo
1926 サンシャイン水族館 32616
5461 天王寺動物園 31007
1974 すみだ水族館 25398
5394 ひらかたパーク 22367
4510 名古屋港水族館 21132

これをみると水族館や動物園といった施設のレビュー数が多いことが分かりました🐬

3. 場所を視点に分析してみる

area列には都道府県名が入っています。

base_data_graph
area = df['area'].unique() #ユニークな要素の値のリスト
print(area)
print(len(area))
['北海道' '大分県' '神奈川県' '愛媛県' '愛知県' '静岡県' '青森県' '岩手県' '宮城県' '秋田県' '山形県' '福島県'
 '栃木県' '群馬県' '長野県' '新潟県' '茨城県' '埼玉県' '東京都' '千葉県' '京都府' '高知県' '大阪府' '三重県'
 '香川県' '山梨県' '石川県' '富山県' '福井県' '岐阜県' '兵庫県' '滋賀県' '奈良県' '和歌山県' '広島県' '岡山県'
 '沖縄県' '鳥取県' '島根県' '山口県' '徳島県' '福岡県' '佐賀県' '長崎県' '熊本県' '宮崎県' '鹿児島県' '海外']
48

47都道府県全てに施設があり、海外にある施設も掲載されていました。
各都道府県毎に施設数を棒グラフで描画してみます。

base_data_graph
#ユニークな要素の値とその出現回数
df_prefectures = df['area'].value_counts().sort_values(ascending=False)
plt.bar(df_prefectures.index, df_prefectures)

plt.xticks(rotation=90) # x軸縦書き(90度回転)
plt.xlabel('場所')
plt.ylabel('施設数')
plt.rcParams["figure.figsize"] = (12, 6)
plt.show()

東京都が最も多く、次いで沖縄県、神奈川県と続いています。東北地方は比較的掲載数が少ないようです。
都道府県よりも細かい所在地であるsmall_area列を用いて同様にグラフを作ってみます。

base_data_graph
df_small_areas = df['small_area'].value_counts().sort_values(ascending=False)
df_small_areas = df_small_areas[df_small_areas > 50]
plt.bar(df_small_areas.index, df_small_areas)

plt.xticks(rotation=90) 
plt.rcParams["figure.figsize"] = (8, 6)
plt.show()

横軸が多くなりすぎてしまうので50件以上のものを描画しています。
石垣島・竹富島が最も多く、さすがリゾート地といった感じです🏄‍♀️

各都道府県の平均評価を見てみると、

base_data_graph
#都道府県毎の平均評価
df_star_mean = df[['area','rating_star']].groupby('area').mean().sort_values(by='rating_star', ascending=False)
plt.bar(df_star_mean.index, df_star_mean['rating_star'])

plt.xticks(rotation=90) # x軸縦書き(90度回転)
plt.xlabel("都道府県")
plt.ylabel("平均評価")
plt.rcParams["figure.figsize"] = (12, 6)
plt.savefig('star_area.jpeg')
plt.show()

47都道府県の中で三重県が最も面白い県であることが明らかになりました!🎉
非常に興味深いですね笑
(もちろん、分母がバラバラなので単純比較はできないと思いますが、、、)

4. アクティビティーのジャンル

続いて、どんなジャンルがあるのか見てみます。

base_data_graph
df['genre_type'].head()
0 ['ラフティング']
1 ['レイクカヌー', 'エコツアー・自然体験', 'スノーシュー・スノートレッキング']|
2 ['乗馬 その他']
3 ['ラフティング']
4 ['マウンテンバイク(MTB)・ダウンヒル']
base_data_graph
df_genre = df['genre_type']
genre_set = set() #ジャンルの集合
for gl in df_genre:
    gl = re.findall("'(.+?)'", gl)
    for g in gl:
        genre_set.add(g)

print(genre_set)
print(len(genre_set))
{'ダイビング・スキューバダイビング その他', 'ソープカービング', 'シーサー作り', '水圧で空を飛ぶ その他', 'ぶどう狩り', 'トライク', 'お香作り', '赤ちゃん手形', '萩焼体験', 
'語学教室・異文化交流', 'ナイトツアー', 'ツリークライミング・木登り', '和菓子教室', 'バンジージャンプ', 'フライトシミュレーター・ドライブシミュレーター', 'イカ釣り', 
'ダイビングライセンス取得(Cカード取得)', 'マジックバー・マジック教室', 'フラワーアレンジメント教室', '手作りスノードーム', 'ボーカルレッスン', '信楽焼体験', 'タップダンス',
 'スノーボード', 'スキースクール', 'アフタヌーンティー', 'キノコ狩り・しいたけ狩り', 'ストリートダンス', 'リムジンパーティー・リムジンレンタル', 'ファンダイビング', '手作りリース',...}
534

サーフィンや茶道体験などの"The 体験アクティビティー"に加えて、酒蔵見学や3Dプリンター体験、手作り腕時計など実に様々な534種類のアクティビティーが掲載されているようです。

5. レビュー数視点の分析

ヒストグラムを描いてみます。

base_data_graph
#レビュー数毎の度数分布表
#bins 階級(ヒストグラムの棒)の数。何も指定しなければ、10
plt.hist(df['rating_asorepo'], bins=100, range=[0,1000])
plt.show()

0付近のレビュー数が多すぎるのでもう少し、大きな値の範囲で描画してみると、

base_data_graph
plt.hist(df['rating_asorepo'], bins=100, range=[100,10000])
plt.show()

それでもやはり、レビュー数が多くなるにつれて、アクティビティーの数はほとんど単調に減少しています。

6. まとめ

今回は第1回で取得したアソビュー!内のアクティビティーの基本情報からどのような施設が掲載されているのかを分析してみました。
次回は各アクティビティーの口コミを取得していきます!

https://zenn.dev/tokoroteen/articles/4d4e5dbfd8d845

連載一覧

【Python】まだ見ぬアクティビティーを求めてアソビュー !スクレイピング

第2回 【Python】まだ見ぬアクティビティーを求めてアソビュー !分析

第3回 【Python】まだ見ぬアクティビティーを求めてアソビュー !口コミ スクレイピング

第4回 【Python】まだ見ぬアクティビティーを求めてアソビュー !機械学習(Doc2Vec)

第5回 【Python】まだ見ぬアクティビティーを求めてアソビュー !Doc2Vecモデルチューニング

Discussion