Skip to content

Latest commit

 

History

History
301 lines (247 loc) · 12 KB

README.adoc

File metadata and controls

301 lines (247 loc) · 12 KB

Sakaiの学習ログ分析

⚠️
以降の手順を実行する前に初期設定を行うこと。
ℹ️
Caliperステートメントは未対応

Sakaiの学習ログ分析基盤を構築する。

表 1. システム構成

項目

名称

コンテナ名

学習管理システム

Sakai(Web)

sakai

Sakai(DB)

sakai-db

学習活動のデータストア

Learning Locker(Web)

learninglocker

Learning Locker(DB)

learninglocker-mongo

learninglocker-redis

分析システム

Superset(Web)

superset

Superset(DB)

superset-db

JupyterHub(Web/DB)

jupyterhub

ツール

ダミーステートメント生成

sakai-dummy-xapi

graph TB
  ST([生徒])                    -- 学習活動                   --> SA[Sakai]
  SA                            -- xAPIステートメント         --> L[(Learning Locker)]
  D[[ダミーステートメント生成]] -. ダミーステートメント       .-> L
  L                             --> S[Superset]
  L                             --> J[JupyterHub]
  S                             -- 可視化                     --> T([教師])
  J                             -- 分析結果                   --> T
  J                             -. 分析結果                   .-> S
  T                             == 教育方法とコース設計の改善 ==> SA
  SA                            == 学習体験と成果の向上       ==> ST
Loading

1. 事前準備

1.1. Sakai

compose.ymlsakai の環境変数 LRS_USERNAME および LRS_PASSWORD に作成したLRSクライアントの KeySecret をそれぞれ設定する。
Sakaiが提供するデモデータを起動時に登録する場合には JAVA_OPTS-Dsakai.demo=true を指定する。

  sakai:
    ...
    environment:
+      JAVA_OPTS: ... -Dsakai.demo=true
       ...
+      LRS_USERNAME: ... // (1)
+      LRS_PASSWORD: ... // (1)
  1. LRSクライアントKeySecret

1.2. Superset

Sakaiのステートメントを取り扱うため、外部テーブルを変更し、カラムを追加・リネームする。

docker compose exec superset-db psql -U superset learninglocker -c '
  ALTER FOREIGN TABLE xapi_statements RENAME "statement.object.definition.description.en" TO "statement.object.definition.description.en-US";
  ALTER FOREIGN TABLE xapi_statements RENAME "statement.object.definition.name.en" TO "statement.object.definition.name.en-US";
  ALTER FOREIGN TABLE xapi_statements ADD "statement.result.extensions" VARCHAR;'

Supersetからデータセット xapi_statements を編集し、 SYNC COLUMNS FROM SOURCE で変更を反映する。

sync columns from source

2. Sakai

SakaiのMySQLデータベースを起動する。

docker compose up -d sakai-db

MySQLの起動完了を確認する。

docker logs -f sakai-db

...mysqld: ready for connections.

Sakaiコンテナを起動する。

docker compose up -d sakai --no-build // (1)
  1. イメージをビルドする場合は --no-build の代わりに --build オプションを指定

Sakai( http://localhost:8888/portal )で学習活動を行う。

3. Superset

💡
操作方法の詳細は ユーザガイド - Creating Charts and Dashboards を参照すること。

Superset( http://localhost:8088 )にAdminユーザでログインする。

3.1. xAPIステートメント

[Data] > [Datasets] で選択した xapi_statements を以下の条件で可視化する。

表 2. ユーザの総数を算出

大項目

小項目

設定値

Visualization Type

Big Number

Time

TIME COLUMN

timestamp

Query

METRIC

COUNT_DISTINCT(statement.actor.account.name)

Display settings

SUBHEADER

#Users

users
表 3. 日毎のログイン回数を棒グラフで可視化

大項目

小項目

設定値

Visualization Type

Time series Bar Chart

Time

TIME COLUMN

timestamp

TIME GRAIN

Day

Query

METRICS

COUNT(*)

FILTERS

statement.object.definition.type LIKE 'http://adlnet.gov/expapi/activities/session-started'

logins per day
表 4. 特定期間のログイン回数を1時間単位でカウント

大項目

小項目

設定値

Visualization Type

Time series Bar Chart

Time

TIME COLUMN

timestamp

TIME GRAIN

Hour

TIME RANGE

2021-04-01 ≦ col < 2021-08-01

Query

METRICS

COUNT(*)

FILTERS

statement.object.definition.type LIKE 'http://adlnet.gov/expapi/activities/session-started'

logins per hour during specific period
表 5. 週毎の各ユーザ数を積み上げて可視化

大項目

小項目

設定値

Visualization Type

Area Chart

Time

TIME COLUMN

timestamp

TIME GRAIN

Week

Query

METRICS

COUNT(*)

DIMENSIONS

statement.actor.account.name

stacked users
表 6. カレンダーヒートマップでアクセス集中度を可視化

大項目

小項目

設定値

Visualization Type

Calendar Heatmap

Time

TIME COLUMN

timestamp

TIME RANGE

2021-04-01 ≦ col < 2021-10-01

Query

DOMAIN

month

SUBDOMAIN

hour

METRICS

COUNT(*)

calendar heatmap
表 7. ユーザ操作(ログインなど)毎の件数を円グラフで可視化

大項目

小項目

設定値

Visualization Type

Pie Chart

Time

TIME COLUMN

timestamp

Query

DIMENSIONS

statement.object.definition.type

METRICS

COUNT(*)

object types
表 8. Tests & QuizzesにおけるAssessment提出時の点数を箱ひげ図でユーザごとに可視化

大項目

小項目

設定値

Visualization Type

Box Plot

Time

Time Column

timestamp

Query

METRICS

MAX(statement.result.score.raw)

FILTERS

statement.object.definition.type LIKE 'http://adlnet.gov/expapi/activities/received-grade-assessment'

DIMENSIONS

statement.actor.account.name

assessment score

4. JupyterHub

分析に使用するノートブックを読み込むため、コンテナを再起動する。

docker compose up -d jupyterhub --no-build

JupyterHub( http://localhost:8001 )に jupyter ユーザ(パスワード: jupyter )でログインする。

4.1. xAPIステートメント

以下の処理を行うanalyze-xapi-statements.ipynbにノートブックの利用例を示す。
詳細はノートブック内の説明を参照すること。

  • Learning LockerのAggregation APIを使用したステートメントの取得

  • Seabornを使用した集計結果の可視化

  • Assignmentsの採点( asn.grade.submission )をより詳細にSupersetで可視化するためのステートメント加工

    • 分析対象項目の絞り込み

    • Grade ScaleがLetter Grade、Pass or Fail、またはCheckmarkである場合の評点(A+、Pass、Checkedなど)の抽出

    • 採点されたAssignmentの名前を項目化

  • Supersetへのノートブック実行結果の登録

4.2. ノートブック実行結果の可視化

Supersetの [Data] > [Datasets] から登録したデータセットにアクセスする。

4.3. 例1: Gradeの件数を集計

ノートブックで追加した項目 result.extensions.classification.definition.name.en-US の件数を円グラフで描画する。

大項目

小項目

設定値

Visualization Type

Pie Chart

Time

TIME COLUMN

timestamp

Query

DIMENSIONS

result.extensions.classification.definition.name.en-US

METRICS

COUNT(*)

FILTERS

result.extensions.classification.definition.name.en-US IS NOT NULL

grade class

4.4. 例2: Assignmentごとに採点回数を集計

ノートブックで追加した項目 received_grade_assignment_name の件数を円グラフで描画する。

大項目

小項目

設定値

Visualization Type

-

Pie Chart

Time

TIME COLUMN

timestamp

Query

DIMENSIONS

received_grade_assignment_name

METRICS

COUNT(*)

FILTERS

received_grade_assignment_name IS NOT NULL

graded assignments

付録 A: ダミーステートメントの登録

ステートメントの可視化・分析を例示・動作確認する目的において、 Sakaiで実際に操作することなく、 仕様に則したダミーステートメントを生成するサービス sakai-dummy-xapi を提供する。

compose.yamlsakai-dummy-xapi で以下に示す環境変数を編集し、ダミーステートメントの生成方法およびステートメントを保存するLRSに関する情報を設定する。

sakai-dummy-xapi:
  ...
  environment:
    TZ: Asia/Tokyo
    STATEMENT_NUM: 300 // (1)
    TIMESTAMP_MIN: "2021-04-01T00:00:00+00:00" // (2)
    TIMESTAMP_MAX: "2021-10-01T00:00:00+00:00" // (3)
    LRS_URL: http://learninglocker:8081/data/xAPI/
    LRS_USERNAME: ... // (4)
    LRS_PASSWORD: ... // (4)
  1. 登録するダミーステートメントの数

  2. ステートメントに設定するタイムスタンプの最小値

  3. ステートメントに設定するタイムスタンプの最大値

  4. LRSクライアントKeySecret

次のコマンドを実行し、LRSにステートメントを登録する。

docker compose up -d sakai-dummy-xapi --no-build
docker compose exec sakai-dummy-xapi npm start