はじめに
最近「人間椅子」というロックバンドの曲をよく聴いています。先日はライブにも行ってきました。
人間椅子はデビューして38年になる活動歴の長いバンドです。
これだけ期間が長いと、過去にどんな曲を演奏していたのか気になってきます。
そんなわけで、今回は「setlist.fm」のAPIサービスを使って、演奏曲の傾向などを集計してみました。
注意)setlist.fmは有志の方の登録で成り立っているサービスです。過去のライブが全て登録されているわけではありません。
集計はpythonで実装しました。
https://github.com/fugasat/setlist
準備
-
setlist.fmのAPIを発行
- アカウントを作成すればAPIキーを申請することができます
- 無料で取得できますが、RateLimitがあります
- Rate limit max. 2.0/second and max. 1440/DAY
セットリスト取得の流れ
アーティスト名からアーティスト情報を取得
def search_artists(self, artist_name: str) -> List[Dict]:
"""
アーティスト名で検索し、API結果の生データを返す。
Args:
artist_name: 検索したいアーティスト名。
Returns:
API レスポンスの artist 配列。
"""
url = f"{BASE_URL}/search/artists"
response = requests.get(
url,
headers=self._headers(),
params={"artistName": artist_name, "p": 1, "sort": "relevance"},
timeout=30,
)
response.raise_for_status()
data = response.json()
return data.get("artist", [])
アーティストのmbidを取得
artists = search_artists(artist_name)
mbid = artists[0]["mbid"]
セットリストを取得
RateLimitがあるのでページングの際にsleepで間隔調整しています
def fetch_setlists(self, artist_mbid: str) -> List[Dict]:
"""
ページングを追いながらセットリストを全件取得し、ページ間に待機を入れる。
Args:
artist_mbid: 対象アーティストの MBID。
Returns:
セットリストの配列(API 生データ)。
"""
setlists: List[Dict] = []
page = 1
while True:
response = requests.get(
f"{BASE_URL}/artist/{artist_mbid}/setlists",
headers=self._headers(),
params={"p": page},
timeout=30,
)
response.raise_for_status()
payload = response.json()
batch = payload.get("setlist", []) or []
if not batch:
break
setlists.extend(batch)
total = payload.get("total")
items_per_page = payload.get("itemsPerPage") or len(batch)
total_pages = math.ceil(total / items_per_page) if total and items_per_page else None
if total_pages and page >= total_pages:
break
page += 1
time.sleep(self.sleep_seconds)
return setlists
集計を実施
コードの掲載は省略します。
先に掲載したリポジトリから参考にしてください。
具体的な集計はこちらのクラスで行なっています。
https://github.com/fugasat/setlist/blob/main/setlist/domain/services.py
集計結果
setlist.fmではセットリストが392件も登録されていました。
ここでは主な集計結果に絞って紹介します。
Frequent Songs(公演回数)
公演回数で集計した結果です。
「針の山」が圧倒的です。
一方で「幸福のねじ」などしばらく演奏されていない曲も存在します。
| # | 曲名 | 公演回数 |
|---|---|---|
| 1 | Hari no Yama 初回: 1989-11-12 最後: 2025-12-17 |
206回 比率:0.526 |
| 2 | Jinmenso 初回: 1989-11-12 最後: 2020-02-20 |
111回 比率:0.283 |
| 3 | Tengoku ni Musubu Koi 初回: 1990-07-29 最後: 2019-07-05 |
103回 比率:0.263 |
| 4 | Ringo no Namida 初回: 1989-09-17 最後: 2023-12-14 |
100回 比率:0.255 |
| 5 | Dynamite 初回: 1994-12-04 最後: 2024-09-16 |
95回 比率:0.242 |
| 6 | Jigoku 初回: 1996-12-11 最後: 2020-02-21 |
89回 比率:0.227 |
| 7 | Jigoku Fuukei 初回: 2000-04-14 最後: 2019-07-26 |
81回 比率:0.207 |
| 8 | Kofuku no Neji 初回: 1991-07-26 最後: 2015-09-05 |
73回 比率:0.186 |
| 9 | Namahage 初回: 2014-05-25 最後: 2024-09-04 |
73回 比率:0.186 |
| 10 | Sai no Kawara 初回: 1990-07-29 最後: 2020-02-21 |
61回 比率:0.156 |
Recency-Weighted Songs(新鮮度)
先ほどの集計を少し調整してみました。
こちらは時系列減衰込みで最近の登場を重視した順位となっています。
「なまはげ」「無情のスキャット」「芳一受難」など比較的新しい曲がランクインしています。
| # | 曲名 | 新鮮度 |
|---|---|---|
| 1 | Hari no Yama 初回: 1989-11-12 最後: 2025-12-17 |
206回 新鮮度:0.096 |
| 2 | Namahage 初回: 2014-05-25 最後: 2024-09-04 |
73回 新鮮度:0.058 |
| 3 | Mujou no Scat 初回: 2019-06-16 最後: 2024-09-21 |
35回 新鮮度:0.046 |
| 4 | Jigoku Fuukei 初回: 2000-04-14 最後: 2019-07-26 |
81回 新鮮度:0.029 |
| 5 | Hoichi Junan 初回: 2016-02-14 最後: 2024-09-21 |
26回 新鮮度:0.028 |
| 6 | Jinmenso 初回: 1989-11-12 最後: 2020-02-20 |
111回 新鮮度:0.028 |
| 7 | Uchu karano Iro 初回: 2014-11-30 最後: 2024-09-05 |
33回 新鮮度:0.028 |
| 8 | Jigoku Kozou 初回: 2019-06-16 最後: 2020-02-21 |
25回 新鮮度:0.027 |
| 9 | Shincho Kyurakyukyu Bushi 初回: 2013-09-14 最後: 2023-11-06 |
41回 新鮮度:0.027 |
| 10 | Shinigami no Kyoen 初回: 2001-09-30 最後: 2024-08-25 |
55回 新鮮度:0.025 |
Closing Staples(クローザー)
トリを務めた曲の集計です。(アンコールは除く)
「針の山」「地獄」など地獄シリーズが際立っています。
ライブで盛り上がって最後にみんなで地獄に落ちるのは人間椅子ならではですw
| # | 曲名 | クローザー |
|---|---|---|
| 1 | Hari no Yama 初回: 1989-11-12 最後: 2025-12-17 |
144 |
| 2 | Jigoku 初回: 1996-12-11 最後: 2020-02-21 |
21 |
| 3 | Excite 初回: 1998-03-10 最後: 2011-11-03 |
20 |
| 4 | Sakura no Mori no Mankai no Shita 初回: 1989-11-12 最後: 2015-07-30 |
15 |
| 5 | Ringo no Namida 初回: 1989-09-17 最後: 2023-12-14 |
13 |
| 6 | Dynamite 初回: 1994-12-04 最後: 2024-09-16 |
12 |
| 7 | Dai Dan-en 初回: 2000-04-14 最後: 2025-12-17 |
10 |
| 8 | Kofuku no Neji 初回: 1991-07-26 最後: 2015-09-05 |
9 |
| 9 | Ayakashi no Tsuzumi 初回: 1989-09-17 最後: 2015-08-01 |
6 |
| 10 | Aomori Rock Daijin 初回: 1994-02-10 最後: 2013-09-30 |
5 |
Encore Staples(アンコール)
アンコールの定番曲を集計しました。
「ダイナマイト」はライブで聴きたい曲の1つなのでとても嬉しいです。
| # | 曲名 | アンコール |
|---|---|---|
| 1 | Dynamite 初回: 1994-12-04 最後: 2024-09-16 |
82 |
| 2 | Jigoku Fuukei 初回: 2000-04-14 最後: 2019-07-26 |
79 |
| 3 | Hari no Yama 初回: 1989-11-12 最後: 2025-12-17 |
51 |
| 4 | Namahage 初回: 2014-05-25 最後: 2024-09-04 |
42 |
| 5 | Jinmenso 初回: 1989-11-12 最後: 2020-02-20 |
30 |
| 6 | Dottoharai 初回: 2007-09-01 最後: 2019-07-26 |
29 |
| 7 | Kofuku no Neji 初回: 1991-07-26 最後: 2015-09-05 |
22 |
| 8 | Excite 初回: 1998-03-10 最後: 2011-11-03 |
21 |
| 9 | Jigoku 初回: 1996-12-11 最後: 2020-02-21 |
17 |
| 10 | Tengoku ni Musubu Koi 初回: 1990-07-29 最後: 2019-07-05 |
14 |
Frequent Pairs (2-song)
ちょっと変わった集計を行なってみました。
曲順に何か傾向があるのか可視化した結果です。
全ての道は「針の山」に通ず・・・といった感じでしょうか。
ただ、針の山は出現頻度が高いのでこのような結果になったとも言えそうです。
代表的な曲順をグラフ構造で可視化してみるのも面白そうですね。
| # | 曲順ペア | 回数 | 公演比率 |
|---|---|---|---|
| 1 | Jinmenso → Hari no Yama | 36 | 0.092 |
| 2 | Tengoku ni Musubu Koi → Hari no Yama | 25 | 0.064 |
| 3 | Meishin → Hari no Yama | 24 | 0.061 |
| 4 | Tengoku ni Musubu Koi → Jigoku | 19 | 0.048 |
| 5 | Jigoku Fuukei → Dottoharai | 17 | 0.043 |
| 6 | Jigoku Fuukei → Namahage | 16 | 0.041 |
| 7 | Hari no Yama → Dynamite | 15 | 0.038 |
| 8 | Ringo no Namida → Hari no Yama | 13 | 0.033 |
| 9 | Hari no Yama → Jigoku Fuukei | 13 | 0.033 |
| 10 | Yuki Onna → Hari no Yama | 12 | 0.031 |
おわりに
人間椅子の定番曲が気になっていましたが、今回の集計だと最近は「針の山」「なまはげ」「無情のスキャット」のようですね。どれも好きな曲なので嬉しい限りです。
一方でよく知らない曲も色々ランクインしているので、次のアルバムを買うときの参考にしようと思います。
推しバンドのセットリスト集計は面白いです。
一方で、ライブは感覚で楽しみたい気持ちも強く、これ以上の細かい分析は楽しみが減りそうな気もするので、このくらいにしておこうと思います。