Open edXの次期リリースであるMapleに合わせ、edXチームは社内で長らく使用してきた技術の一部を公開できることを嬉しく思います。このツールはCourseGraphと呼ばれ、現在devstackとMapleのサポート対象外として利用可能です。CourseGraphを使用すると、インスタンス内のすべてのコースのコンテンツに関する質問(特定のXBlockの数と場所、コースの構造に関する質問、試験に関する質問など)に回答できます。 もっと!
edXでは、CourseGraphの使用はカスタマーサポートチームとエンジニアリングチームに限定されています。これらのチームは、集計統計情報に基づいて質問に答えられることを有用だと考えています。特にパートナーサポートチームは、XBlockクエリを使用してStudioで講師が抱える問題のデバッグを支援できることがよくあります。エンジニアリングチームは、様々な潜在的な問題に関する洞察を得ることができます。例えば、「孤立ブロック」(コースルートから子ブロックを経由してアクセスできないブロック)がどこにあるかを把握できます。
CourseGraph とは何ですか?
CourseGraphはインスタンスのコースコンテンツをグラフィカルに表現したものです。 neo4j、人気のグラフデータベース。CourseGraphは ランタイムAPIです。コースデータをグラフ形式で表現する利点は、コースの内容と構造の両方について幅広いクエリを記述できることです。CourseGraphを使用するには、コースデータモデル、つまりコースがグラフ(通常はツリー)であり、各ノードがXBlockであるという基本的な知識があることを前提としています。
だから何?
次のような疑問を持ったことはありませんか?
- コースチーム(およびその他のチーム)は疑問に思うかもしれません…
- コース内のビデオコンポーネントはどこにありますか?タイトルとIDは何ですか?
- ORA(オープンレスポンス評価)ユニットの日付が誤って設定されているのはどれですか?(日付が誤って設定されていると、学習者が課題にアクセスできなくなる可能性があります)
- コースで使用するブロックの種類 (問題や ORA など) は何ですか。また、それらのブロックはどのくらいの頻度で使用しますか。
- 開発者/サイト運営者/サポートチームは疑問に思うかもしれません…
- 現在実行中のコースのうち、特定のタイプのブロックを使用しているコースはいくつありますか?
- 組織のビデオはすべてどこにあり、どのビデオソース / URL から提供されていますか?
- どのコースが LTI コンポーネントを使用していますか? また、そのうちのどれが採点されますか?
現状では、Mongoにおけるコースデータの保存方法を考えると、これらの質問に答えるのは非常に困難です。ほぼすべての実行中のコースのバックエンドであるSplit Mongoは、個々のコースを一度に読み込むように最適化されており、複数のコース構造にまたがる広範なクエリには対応していません。各コースのグラフのような構造を再構築するには、純粋なMongoクエリ以外でかなりの処理が必要になります。neo4jを使用するもう一つの利点は、クエリ結果ビジュアライザーが組み込まれているため、コースの一部のグラフ構造を確認できることです。
次のクエリは、Open edX インスタンス全体の jsinput 問題の数をカウントします。
MATCH
(コース)-[:PARENT_OF*]->(p:問題)
NeoCity
p.データ
含む
'jsinput'
リターン
count(p) を数値として
次の結果 (31026) を返します。
クエリの結果がノードの場合、データを視覚的に確認することもできます。このクエリは前のクエリと同じですが、RETURN * を使用し、結果を50項目に制限しています。ノードとそのPARENT OF関係がグラフに表示されます。ノードにマウスオーバーすると、下部のバーにそのノードに設定されている属性が表示されます。
データ構造は何ですか?
Neo4jはグラフデータベースであるため、グラフと同様に、ノードとエッジというXNUMXつの基本的なデータ型を持ちます。CourseGraphの場合、ノードはXBlock(コースブロック、問題、バーティカル、HTMLなど)です。ノードの属性は、XBlockのフィールドに対応しています。さらに、各ノードにはcourse_key、org、course、run、edited_on、location属性も設定されています。
エッジはノード間の関係を表します。ブロック間には2種類の関係があります。「PARENT_OF」はブロックを子ブロックにリンクし、「PRECEDES」はブロックを兄弟ブロックにリンクします。つまり、ある垂直ブロックがビデオブロックのPARENT_OFとなる場合、2つの垂直ブロックが連続する場合、最初の垂直ブロックが2番目の垂直ブロックの「PRECEDES」になります。
これに対してクエリを記述するにはどうすればよいでしょうか?
Neo4jは独自のクエリ言語を使用します。 サイファーSQLに似ているので、すぐに使いこなせるでしょう。 この便利な参照カード edXでは、役立つヒントを常に収集しています。私たちが考えたクエリをご覧ください。そして、あなた自身のクエリも追加してください! CourseGraphクエリ収集ページ.
以下はより複雑なクエリです。インスタンス上のコース (ここでは edx.org の「DemoX」コース) を調べ、コース内の「問題」タイプの学習者に表示されるすべての XBlock を、表示名、それが含まれる垂直の名前、および最終編集日時で注釈を付けて出力します。
MATCH
(c:コース) -[:PARENT_OF*]-> (v:垂直) -[:PARENT_OF*]-> (n:項目)
NeoCity
c.course_key = 'course-v1:edX+DemoX.1+2T2019'
そして
n.block_type = '問題'
そして
n.スタッフのみ可視 = false
リターン
n.ブロックタイプ、
n.表示名、
v.display_nameをunit_locationとして
n.編集済み
ORDER BY
n.編集済み;
最終行に記載されている 16 個の結果のうち、最初の 17 個を以下に示します。
CourseGraph を展開して操作するにはどうすればよいですか?
Nutmegのリリース(2022年XNUMX月予定)には、 チューター用CourseGraphプラグイン! Nutmeg オペレーターが Tutor 管理の Open edX デプロイメントの一部として CourseGraph を簡単にインストール、設定、実行する方法の詳細については、プラグインの README をご覧ください。(Nutmeg よりも古いリリースを実行している Open edX インスタンスの場合、CourseGraph をデプロイするための公式に推奨された方法はありません。)
Nutmeg では、このプラグインは「ベータ」ステータスです。メンテナーは、本番環境で試用してフィードバックを提供してくれるユーザーを積極的に募集しています。ご質問、バグ報告、CourseGraph に関するご意見・ご感想などがありましたら、tutor-contrib-coursegraph リポジトリで GitHub Issue を開いてください。
このツールがお役に立てれば幸いです。
![]()