3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

setlist.fmを使って人間椅子のセトリを集計

3
Last updated at Posted at 2025-12-23

はじめに

最近「人間椅子」というロックバンドの曲をよく聴いています。先日はライブにも行ってきました。

人間椅子はデビューして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

おわりに

人間椅子の定番曲が気になっていましたが、今回の集計だと最近は「針の山」「なまはげ」「無情のスキャット」のようですね。どれも好きな曲なので嬉しい限りです。
一方でよく知らない曲も色々ランクインしているので、次のアルバムを買うときの参考にしようと思います。

推しバンドのセットリスト集計は面白いです。
一方で、ライブは感覚で楽しみたい気持ちも強く、これ以上の細かい分析は楽しみが減りそうな気もするので、このくらいにしておこうと思います。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?