14
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Scratch × オープンデータ

Last updated at Posted at 2019-08-21

#Scratchでデータサイエンス
MITメディアラボが開発している教育用のビジュアルプログラミング言語(プログラミング学習環境)であるScratchでオープンデータを扱ってみます.Scratchは「教育向け」や「ゲームを作る」という印象が強い気がしますが,ゲーム以外のことも色々できます.今回は簡易的なデータサイエンス・データ処理っぽいことをしてアプリを作ります!

###つくるもの
国の名前を入力するとその国の人口を教えてくれるアプリを作ります.
     Screen Shot 2019-08-21 at 23.20.01.png

###環境(つかうもの)
・Scratch3.0(ブラウザ版)
・Googleスプレッドシート
・オープンデータ(エクセル形式)

###オープンデータ
今回使うデータは国連の人口データにします.
Screen Shot 2019-08-21 at 23.06.30.png
1番上のものを使います.世界人口の男女含まれるものです.クリックするとエクセルのファイルがダウンロードされます.開くとこんな感じ(エクセルがPCに入っていない方はGoogleDriveに上げてから開いてください).
Screen Shot 2019-08-21 at 23.14.22.png
どんなデータを使うかで方法は変わりますが,今回はこのファイルのC列の「国名」と
Screen Shot 2019-08-21 at 23.16.17.png
BZ列の「2020」年の人口予想のデータを使います.
Screen Shot 2019-08-21 at 23.24.46.png

###データ処理
Googleスプレッドシートで作業します.
先ほどのC列(国名)とBZ列(2020年の人口)をそのままスプレッドシートに貼り付けます.
            Screen Shot 2019-08-21 at 23.33.42.png
見づらいしデータが整理されていなくてきたないですね.少し整えます.この辺のブランクや余計な項目を削除します.
            Screen Shot 2019-08-21 at 23.33.42.png
見やすくなりました.
           Screen Shot 2019-08-21 at 23.38.38.png
さらにここから黄色くなっている見出し部分や使わない項目(例えば2行-17行はごそっといらない)を削除していきます.
           Screen Shot 2019-08-21 at 23.51.51.png
見出しと国名以外の項目は1番下の行まで全部消します.ただ,「World」や「Africa」など大きい枠組みでの地域名は面白そうなので残します.この辺りはお好みで.値がずれてしまうと困るので削除するときは必ず行ごと消してください.
           Screen Shot 2019-08-21 at 23.55.42.png
不必要な項目を削除して見やすくしました.ただしこのままだと数字の間に空白が入っていて使いづらいです.なので空白は全て削除します.C列の1番上の行に以下の関数を入れます.

=SUBSTITUTE(SUBSTITUTE(B1," ","")," ","")

あとは1行目を下にぐいっと引っ張れば他の行にも適用できます.
           Screen Shot 2019-08-22 at 0.04.49.png
次に気になるのは数値です.1行目の「World」の人口が少なすぎます.実際は「7794799 k」ということですかね.なのでとりあえず全部の値に1000掛けます.
       Screen Shot 2019-08-22 at 0.09.33.png
で,全部に適用.それっぽくなりました!
       Screen Shot 2019-08-22 at 0.11.20.png
これでデータをうまく整形できました!
最後に,Scratchに取り込めるようにスプレッドシートで作成したデータをCSV形式でエクスポートします.
Screen Shot 2019-08-22 at 0.15.12.png
これでようやくScratchでオープンデータを扱う準備ができました!以上でデータ処理はおわりです!

###Scratchでデータを読み込む
先ほどのCSVファイルを読み込みます.ScratchでCSVを読み込む際にはリストを使うので,リストを作ります.国の名前を入れるとその人口を答えてくれるアプリを作るので,それとわかる名前でリストを作っておきます.
         Screen Shot 2019-08-22 at 0.34.05.png
ここでは「country_name」と「population」の二つです.
             Screen Shot 2019-08-22 at 0.33.12.png
空のリストが作成されました.
     Screen Shot 2019-08-22 at 0.36.27.png
次にこのリストを右クリックすると「読み込み」という項目がでるのでそれを選択します.
            Screen Shot 2019-08-22 at 0.37.58.png
何列目を読み込むか聞かれるので該当する列を入力しましょう.上のスプレッドシートの通りであれば「country_name」は「1列目」,「population」は「4列目」のはずです.これでScratchに国名とその人口を取り込むことができました!
     Screen Shot 2019-08-22 at 1.00.11.png
データの整形をしておいたので番号(ID)で国と人口が紐づいています.あとはプログラムを書けば(Scratchなので組み立てれば)簡単にアプリを作ることができます!

###国名を入力すると人口を出力するプログラム
実際に作ったものはこちらです.プログラム自体は非常にシンプルです.プログラムについては実際のものをみてもらう方がいいと思いますが,現在の実装をざっくり説明すると・・・

step1. 国名を入力
step2. 入力された国名にあたるまでリスト「country_name」の中を上から探索
step3. その際,番号(ID)をカウント
step4. 一致があればストップ
step5. カウントされた番号(ID)に該当する値をでリスト「population」の中から選び出力

というアルゴリズムになっています.関数などを自作しなくてもScratchの組み込みの機能だけでできます.
          Screen Shot 2019-08-22 at 1.04.55.png
この程度のブロック数でできますが,もっとシンプルに書ける気もします.

実際のアプリは言語の選択ができたり,デザインやBGMも付けているのでもっと別のブロックもあったりします.

また,入力はキーボードから受け取っているので国名を正確に入力(大文字小文字を区別したり)しなくてはならないのでまだまだ改良の余地ありです.
     Screen Shot 2019-08-22 at 1.14.23.png

###まとめ
Scratchは教育用のイメージがありますが,やろうと思えばいくらでも複雑なことができます.スプレッドシートとScratchを使えば,ちょっとしたデータサイエンスに触れることができます!今回は,

・スプレッドシートを使った簡単なデータの整形
・Scratchでの読み込み
・Scratchのリストでデータを扱う

というのを試しました.
とっても楽しいのでデータを変えていろいろ試してみるのがオススメです!「こういうデータを使ってこんな面白いことできるよ!」というアイディアたくさん募集中です!

###Reference & Acknowledgement

  1. Scratch, https://scratch.mit.edu/.
  2. United Nations "Population Division", https://www.un.org/en/development/desa/population/index.asp.
14
11
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
14
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?