Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】Graph-Based Movie Recommendations: A Practical Guide with Python

2025年09月24日に「Dev.to」が公開したITニュース「Graph-Based Movie Recommendations: A Practical Guide with Python」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

Pythonで映画推薦システムを開発した。BFS(幅優先探索)アルゴリズムを使い、映画間の「つながり」から類似映画を推薦する仕組みだ。コマンドラインで操作でき、データ構造やグラフ探索の基本を実践的に学べるプロジェクトである。

ITニュース解説

この解説では、Pythonを使ってグラフベースの映画推薦システムを構築するプロジェクトについて説明する。システムエンジニアを目指す初心者の皆さんにも理解できるよう、専門的な内容は避け、基本的な仕組みと役割に焦点を当てて解説する。

まず、このプロジェクトの目的は、BFS(幅優先探索)というアルゴリズムを使って、ユーザーが選んだ映画に似た映画をジャンルに基づいて推薦することである。映画推薦システムは、ユーザーの好みや行動パターンを分析し、まだ見ていないけれど気に入る可能性のある映画を提案する仕組みである。本プロジェクトでは、映画同士のつながりを「グラフ」として扱い、このグラフを探索して関連性の高い映画を見つける。

プロジェクトの構成は、movie_recommenderというメインフォルダの中に、いくつかのファイルやフォルダが整理されて配置されている。例えば、プロジェクトの説明が書かれたREADME.mdファイル、映画データが保存されたdataフォルダ(movies_sample.jsonを含む)、プログラムの実行開始点であるmain.pyファイル、そしてプログラムの実際のロジックが記述されたファイル群(movie_data.pysearch.pyなど)を格納するsrcフォルダがある。このような明確なディレクトリ構造は、プログラムが大規模になった際でも管理しやすく、他の開発者との協力もしやすくなる。このシステムはCLI、つまりコマンドラインインターフェースとして動作する。これは、画面に文字が表示され、ユーザーがキーボードで文字を入力して操作する形式である。シンプルで直接的な操作が可能であり、多くの開発プロジェクトで基本的なインターフェースとして使われる。

次に、映画データの管理について説明する。映画に関する情報はmovies_sample.jsonというJSON形式のファイルに保存されている。このファイルには、各映画のID、タイトル、公開年、ジャンル、評価といった基本情報と、「どの映画がどの映画と似ているか」というつながりの情報が含まれている。MovieDatabaseというクラスは、このJSONファイルを読み込み、そこから映画の情報をプログラム内で扱いやすい辞書形式に変換して保持する役割を担う。具体的には、映画のIDをキーとして映画の情報を検索したり、すべての映画情報を取得したりするためのメソッド(機能)を提供する。これにより、プログラムの他の部分から簡単に映画データにアクセスできるようになる。

映画の検索機能は、MovieSearcherというクラスが担当する。このクラスは、MovieDatabaseから受け取ったデータを使って、ユーザーの入力に基づいて映画を探し出す。例えば、search_by_titleメソッドは、ユーザーが入力したキーワードが映画のタイトルに含まれているかどうかを調べ、一致する映画をリストとして返す。このとき、大文字と小文字を区別せず、タイトルの一部だけでも検索できるように、入力されたキーワードと映画のタイトルをすべて小文字に変換して比較する。また、search_by_genreメソッドは、指定されたジャンルを持つ映画を探す機能であり、これも大文字・小文字を区別せず、部分的なジャンル名でも検索できるようになっている。これらの検索機能は、ユーザーが目的の映画を簡単に見つけられるようにするために重要である。

このプロジェクトの核心となるのが、映画を推薦するためのfind_recommendationsメソッドに実装されているBFS(幅優先探索)アルゴリズムである。BFSは、グラフ構造において、ある出発点から近い順にノード(この場合は映画)を探索していくアルゴリズムである。具体的には、まず出発点の映画から直接つながっている映画(「深さ1」の関連性)をすべて見つける。次に、それらの映画から直接つながっている、まだ訪れていない映画(「深さ2」の関連性)を探していく。このように、同心円状に探索範囲を広げていくのが特徴である。BFSでは、「キュー(Queue)」というデータ構造が使われる。キューは、先に入れたものが先に処理される(FIFO:First-In, First-Out)という特徴を持つ。これにより、BFSは探索をレベルごとに確実に進めることができる。また、一度訪れた映画を重複して処理しないように、「訪れた映画のリスト(visitedセット)」を管理する。これは、同じ映画を何度も見つけたり、無限ループに陥ったりするのを防ぐために非常に重要である。このメソッドでは、ユーザーが指定した映画IDと、推薦の深さ(デフォルトでは1、拡張推薦の場合は2)を受け取り、その深さまでBFSを実行して関連映画をリストとして返す。深さ1の推薦は「直接的で非常に似ている映画」、深さ2の推薦は「間接的に関連する、より広範な推薦」として区別して表示される。このBFSアルゴリズムは、映画推薦システムだけでなく、ウェブサイトのリンク構造の探索やソーシャルネットワークにおける友人関係の探索など、インターネット上の非常に多くの場所で利用されている。

最後に、ユーザーとの対話を担うMovieRecommenderCLIクラスについて説明する。このクラスは、ユーザーにプログラムのメニューを表示し、ユーザーからの入力を受け付けて、それに対応する処理を実行する。例えば、ユーザーが「映画タイトルで検索」を選べばsearch_by_title_interfaceメソッドを呼び出し、ユーザーが入力したタイトルに基づいて映画を探し、その結果を画面に表示する。同様に、「ジャンルで検索」や「推薦を取得」といった操作も、それぞれ対応するメソッドによって処理される。特に、推薦機能では、最初に利用可能なすべての映画とそのIDを表示し、ユーザーに推薦を求めたい映画を選ばせる。その後、深さ1の「似た映画」か、深さ2の「拡張推薦」かを選択させ、その選択に基づいてMovieSearcherクラスのfind_recommendationsメソッドを呼び出す。結果は、「非常に似ている」または「関連する」といったラベルとともに分かりやすく表示される。このクラスは、プログラム全体の流れを制御し、ユーザーが直感的にシステムを操作できるようにする「ユーザーインターフェース」の役割を果たす。プログラムの実行はmain.pyif __name__ == "__main__":ブロックから始まり、MovieRecommenderCLIのインスタンスが作成され、run()メソッドが呼び出されることで、インタラクティブなCLIが起動する。

このプロジェクトを通して、システムエンジニアを目指す初心者は、Pythonを使った基本的なプログラミング、ファイルの読み書き、クラスとメソッドを使ったオブジェクト指向プログラミングの基礎、そしてデータ構造(キューやセット)とアルゴリズム(BFS)が実際のアプリケーションでどのように活用されるかを学ぶことができる。また、ユーザーインターフェースの設計と実装の重要性も理解できるだろう。これは、将来さまざまなソフトウェア開発プロジェクトに取り組む上で、非常に役立つ経験となる。

関連コンテンツ

関連IT用語

関連ITニュース