キミも未来のトビラをひらこう!!
たくさんのデータを扱うのが得意なコンピューターを利用してデータを分析しよう
今回はデータ分析をしていくよ。 たくさんの数字から一番大きな値を求めること1つをとっても、データの数が増えるほど、人間には処理がむずかしくなるよね。 一方で、コンピューターは大量のデータを処理するのが得意なんだ。
今回のプロジェクトでは、データ分析のはじめである、最大値と平均値を求めるプログラムをつくるよ。 東京都の2018年8月の気温のデータを分析して、最大値と平均値を求めるよ。 最高気温が何日なのか、平均値より気温が高い日が何日あったのかを、調べられるようにしていくよ! 今回は、各チャプターで少しずつ機能をつくって、その機能を組み合わせていくよ。 各機能1つ1つが、データを扱うときの操作として大切な処理なので、しっかり理解しようね。 このレッスンでデータ処理の基本を身につけ、たくさんの数字データを分析してみよう!
背景とスプライトの初期状態を設定しよう
このチャプターでは、背景とスプライトの設定を確認していくよ。 次に、スプライトの見た目や位置を整えていくよ。
今回は、キャットだけしかしないので、位置を決めるだけだよ。 グリーンフラッグを押して、キャットが左下に表示されて入ればOKだよ。 ここまで、みんなの画面でもやってみよう!
つくった処理が正しいかテストするために乱数のリストをつくろう
このチャプターでは、テストとなるデータを簡単につくれるようにしていくね。 乱数をリストに取り込む処理をつくっていこう。 処理の流れについて説明するね。 データの数の分だけ繰り返しの処理を行うよ。 繰り返す内容は乱数をリストにどんどん追加する処理だよ。
まずは定義ブロック「乱数のリストを作る」を用意しよう。 扱うデータはいくつかの数字の集まりなので、扱うデータによって数が変化するね。 変数「データ数」をつくろう。 さらに、調べるデータを取り込むためのリスト「調べるデータ」をつくろう。
乱数のリストをつくり始めるときに、前回のデータがリセットされるようにしよう。 また、必要なデータの数を今回は仮で、10としておこう。
リストは数字の部屋に例えられたね。 部屋の数はデータの数だね。
これで、10個の部屋が作られるようになったよ。 今回は1から10の乱数を調べるデータに取り込むことにしよう。 つくったデータを繰り返す処理の中に合体させよう。
これで、調べるデータに乱数のリストが、データの数分だけ入るようになったよ。 スペースキーが押された時に乱数のリストが作られるようにしよう。 ここまで完成したら、動作を確認してみよう。 スペースを押すたびに、1~10の乱数が入って入ればOKだよ。 ここまで、みんなの画面でもやってみよう!
引数のある定義ブロックで乱数リストの値を自由に変更できるようにしよう。
このチャプターでは、前のチャプターでつくった、乱数をカスタマイズできるようにしていくよ。 定義ブロックを編集して引数を追加していこう。
まず、乱数のリストを作るブロックを右クリック(Macの場合はcontrolキーを押しながらクリック)して編集ボタンを押してみてね。 現れる表示に対して、数値の引数を追加するを3回クリックしてね。 number1,number2,number3に左から順に[n,a,b]と入力し直そう。
すでに作っている定義ブロックに新しく現れる、n,a,bをそれぞれセットしていこう。 すでに作ってあるブロック全てが変化するね。 数字を左から順に10,1,100としてみよう。
これで、作られる乱数のリストが、10個のデータ数で、1~100までの乱数となるよ。 ここまで完成したら、動作を確認してみよう。 グリーンフラッグを押して、スペースを押すたびに、リストに1~100の乱数が10個入って入ればOKだよ。 例えば、サイコロを100回振った時のデータを乱数で用意すると、左から順に100,1,6とすればいいね。 動作を確認してみよう。 グリーンフラッグを押して、スペースを押すと、リストに1~6の乱数が入り、合計100個となっていることが確認できればOKだよ。
数字の数が多くなると、データの処理に時間がかかるね。 時間がかかることが理解できたところで、少しいいことを教えるね。 shiftを押しながらグリーンフラッグを押してみよう。 ターボモードと表示されるよね。 サイコロを1000回振った時のデータを乱数で用意するとしよう。 左から順に1000,1,6とすればいいね。 ターボモードで動作を確認してみよう。 ターボモードでなければすごく時間がかかるよ。 グリーンフラッグを押して、スペースを押すと、リストに1~6の乱数が入り、合計1000個となっていることが確認できればOKだよ。 さあ!ここまで、みんなの画面でもやってみよう!
リストを順に調べる処理を理解しよう
このチャプターでは、乱数のリストの中から、特定の値を探すことができるようにするよ。 線形探索という方法で処理をつくっていくよ。 リストの上から順に探し、一致する値があるかどうか順番に調べるという、とっても単純な処理だよ。 変数やリストを組み合わせるので、ブロックの意味をしっかり考えながらつくっていこうね。
まずは、定義ブロック「サーチ機能」をつくろう。
リストの何番目を調べるかは変化するよね。 変数「調べ中」をつくろう。 値はリストの5番目を調べるときは、5となるよ。 まずは、調べたい数字を入力する、最初は1番目を調べるという処理をつくろう。
調べたい数が見つかるまで、順に1つずつ調べる場所を変えていくという処理をつくろう。
条件は、「調べたい数字は?」と聞かれて入力したものと、調べ中のデータが同じになったときだよね。
条件として合体させよう。 これで、入力したデータを見つけたら次の処理を行うようになったよ。
見つけたデータをキャットが言う処理をつくろう。 [~と~]のブロックを3つつかい、 [答え][は][調べ中][番目にあるよ]を全て結合すればいいね。
乱数のリストをつくるブロックの引数を、左から10,1,100にしよう。 さらに、サーチ機能をつなげておこう。 ここまで完成したら、動作を確認してみよう。 調べ中も表示して確認してね。
グリーンフラッグを押して、スペースを押してみよう。 10個のリストが生成され、入力を求められるよ。 リストにある値を入れてみよう。 キャットが、正しく値が何番目にあるか言えたらOKだよ。 さあ!ここまで、みんなの画面でもやってみよう!
値がみつからなかった時の処理を作ることを忘れないようにしよう
このチャプターでは、つくった処理にエラーがないようにしていくよ。 リストにない数値が入力された場合に起きるエラーを解消していくよ。
処理の流れについて説明するね。 リストをデータの数と等しくなってしまった場合は、それ以上繰り返す必要がないよね。 繰り返し処理の次に、値が見つからなかった場合の処理も作っていこう。 まずは、確認するね。 グリーンフラッグを押して、スペースを押し、リストにない値0を入力してみよう。 調べ中の値がずっと増え続けて終わらないことが確認できたかな? 見た目上は問題ないけど、無駄にコンピューターが動いてしまっていることになるので、良いとは言えない状態だよ。 修正しよう。
条件を変更しよう。 演算の中にある[~または~]をつかっていくよ。 まずは、調べ中のリストの場所が、データの数を超えてしまった場合に、次の処理になるようにしよう。
なかった場合の処理をつくろう。 まずは[もし~でなければ]のブロックをつかうよ。 見つけた場合の処理は、[でなければ]の方に合体させよう! もし、入力した答えである値がリストにない場合の、条件と処理を作っていくよ。 作った条件と処理を合体させよう。
ここまで完成したら、動作を確認してみよう。 グリーンフラッグをクリック、スペースキーをおしてね。 入力の値が求められ、0を代入すれば、リストにはないため、「0はなかったよ」と言えばOKだよ。 さあ!ここまで、みんなの画面でもやってみよう!
最大値を求める仕組みを理解しよう
このチャプターでは、データの最大値を求められるようにしていくよ。 ゲームの最高得点を更新する機能などに応用することもできるから、しっかり理解しよう!
処理の流れについて説明するね。 リストを1番目から順に調べ、大きいものを最大値としておき、それより大きいものが見つかったらまた最大値として更新をする。 リストを全て調べて、最後にのこっている値が最大値となるね。 最大値は調べている途中でみつかれば更新されるから、見つかるまでは変化するよ。 変数「最大値」をつくろう。
まずは、定義ブロック「最大値を見つける」をつくろう。 最大値は仮で1番目の数字として、調べる場所は2番目からでいいね!
次に、調べることを繰り返す回数を決めていこう。 2番目から調べているから調べる回数はデータの数マイナス1回でいいね。 調べる場所を1ずつ変えながら繰り返そう。
次に繰り返す具体的な処理を作っていくね。 調べ中のデータが最大値より大きければという条件で更新していくよ。
調べ中のデータを最大値に更新する処理をつくろう。
つくった処理を、くわしく説明するね。 もし5番目まで調べて最大値が34だったとして6番目が20だったら条件には当てはまらないから何もしないよ。 次に6番目までの最大値は34のままで7番目の値が49だったとしたら、条件に当てはまるから49で更新するという処理だよ。
最後の処理として、最大値をキャットが言う処理を作っておこう。 [~と~]のブロックを2つ組み合わせて、[最大値は][最大値][だよ]を結合するといいね。
スペースを押したときに実行されるようにしよう。 サーチ機能とつけかえよう。 ここまで完成したら、動作を確認してみよう。 グリーンフラッグを押して、スペースキーをおしてね。 更新されたリストの最大値をキャットが言えることが確認できればOKだよ。 ここまで、みんなの画面でもやってみよう!
データの合計の出し方を理解しよう
このチャプターでは、データの平均値を求める処理を作っていくよ。 平均値は、たくさんの数値が大体どの程度なのかを表す値のことだよ。 50m走4回のタイムが10秒、12秒、11秒、11秒だったとすると合計44秒を4で割って、11秒が平均値となるよ。
処理の流れについて説明するね。 例でも説明した通り、数字を合計して、足した数字の個数で割り算をすればいいね。 コンピューターがとても得意な処理で、数字が多くなっても一瞬で計算できてしまうよ。 まず、データの合計と平均はデータによって変化するから変数をつくろう。 変数名は「データの合計」「平均値」としておこう。 もう慣れてきたと思うので、一気につくっていくよ。
まず、定義ブロック「平均値を求める」を作ろう。 変数を初期化して、1番目から調べて、データの数だけ繰り返す。 繰り返す処理をするたびに、調べる場所を1ずつ変える処理だね。
繰り返す処理は、それまでの合計に調べている場所の値を足し、それをデータの合計として更新する。 ブロックの種類が多く、セットのまちがいが多くなりやすいところなので注意してね。
処理がつくれたら合体させ、さらに平均をデータの合計をデータ数でわった値になる処理を追加してつなげよう。 繰り返しがおわれば、データの合計が全ての数値の合計となっており、それをデータの数で割る処理をあたらしく追加しよう。
最後に平均値をキャットが言えるようにしよう。 [~と~]ブロックを2つつなげて、 「平均値は」「平均値」「だよ」を結合すればいいね。
最後にスペースが押されたときの処理を変更しておこう。 最大値を見つけるから平均値を求めるに変更しよう。 今回数字は、動作確認のために変更したけど、確認がおわったら10,1,100に戻しておこう!
ここまで完成したら、動作を確認してみよう。 念のため、データの合計と平均を表示しておこう。 グリーンフラッグ、スペースを順に押し、合計や平均値が正しく表示されていればOKだよ。 さあ!ここまで、みんなの画面でもやってみよう!
具体的なデータの読み込み方法を理解しよう
このチャプターでは、データを読み込んで分析できるようにしていくよ。
もし部分的に削除してしまった場合は復元してください。 リストの値を全て消した状態で右クリック、読み込みでダウンロードファイルを選択、「どの欄を使うか?」が求められるので、「2」を選択してください。
既に、「読み込みデータ」というリストが用意されていることを確認してね。 今回扱うデータは2018年東京都の8月の気温だよ。
処理の流れについて説明するね。 リスト「読み込みデータ」を「調べるデータ」にうつす機能をつくるよ。
という3つの流れになるよ。 また、読み込みデータを読み取りながらうつしていくため、新たな変数が必要だね。 変数「読み込みデータ番号」をつくろう。 まずは、定義ブロック「読み込みデータを調べるデータへ」をつくろう。 同時に、調べるデータを初期化する処理を入れておこう。
次に、読み込みデータ数の分だけ、リストに部屋を用意する処理をつくるよ。
何番目のデータを読み込むかを、1ずつ変えながら全てのデータについて繰り返す処理をつくろう。
読み込みデータを調べるデータに追加していく処理を追加しよう。 リストの中にあるブロックは似たようなブロックが多く、また全体が見えにくくなっているので間違えないように注意しようね。
gキーが押されたときに定義ブロック「読み込みデータを調べるデータへ」が実行されるようにしよう。 ここまで完成したら、動作を確認してみよう。 読み込みデータが31個であることを確認して、gキーを押して、読み込んだデータ31個が調べるデータに同様に表示されて入ればOKだよ。 ここまで、みんなの画面でもやってみよう!
最大値と平均値を使って、データを詳しく分析しよう
このチャプターでは、読み込みデータの平均値、最大値をつかって2つのことを調べるよ。 1つ目は、最高気温を記録した日が8月の何日なのか?を言うこと。 2つ目は、平均値より大きい値が何日あったのか?を言うことだよ。
処理の流れについて説明するね。 すでに作ってある、定義ブロックで平均値と最大値を言う処理としよう。 そのあと、最大値が読み込みデータの何番目にあるのかを調べる処理と平均値より気温が高い日の数をカウントする処理をつくるよ。
まずは、すでにあるブロックを変更しよう。 最大値はデータ数の分だけリストの最後まで調べているため、この時点で調べ中は31だね。
調べ中を1に戻して、1ずつ変えながら繰り返そう。
条件は、読み込みデータに最大値と等しい値が見つかるまで繰り返すんだったね。
調べ中の番号が、今回のデータでは~日と対応するよ。 [~と~]ブロックを2つ組み合わせて、キャットのセリフをつくろう。
すでにつくっているブロックに、つくったブロックを合体させよう。
ここまで完成したら一度、動作を確認してみよう。 データを読み込みデータに読み込み、gキーを押し、調べるデータが31個入っていることを確認してから、スペースキーを押そう。 今回のデータだと8月2日と言うのが正解だよ。
次に、平均値より気温が高い日数を数えるよ。 カウントするための変数「カウント」をつくろう。 調べ中を1ずつ変えながら、データ数回繰り返すよ。
繰り返す処理をつくろう。 値が見つかれば、カウントを1ずつ増やせばいいね。 カウントで、平均より大きな値の数を数えることができるね。
最後に、これまでと同様に[~と~]ブロックを3つ組み合わせ日数を言う処理をつくろう。
全てのブロックをつなげて完成だよ。 ここまで完成したら、動作を確認してみよう。 データが正しく読み込まれていることを確認し、スペースキーを押すと、これまで同様に言葉を言い、最後に「平均気温より高かった日数は19日だよ!」と言っていればOKだよ。 さあ!ここまで、みんなの画面でもやってみよう!
最後に、このレッスンで学習したことをおさらいしてみよう。 このレッスンで、数字データの扱いには慣れることができたかな? おさらいしておこう。 まず、データの個数、scratchではデータの長さ分だけリストを先に用意をしたね。 繰り返しの基本処理が身についていれば、そんなに難しい処理ではなかったはずだよ。 復習しておこう。
最大値を見つける処理では、データを1つずつ見ていき、仮の最大値を更新していく処理をつくったね。 全てのデータをみおわった段階で、最大値が判明したことを理解しておこう。 また、平均値を求める作業も同じく順番に足し算を繰り返し合計を求めたね。 平均値より大きな日は31日の半分くらいの15や16日ではなく、19日だったね。 つまり、気温の高い順に並べたときに、15番目や16番目の日の気温は、平均値より高いということになるね。 全体的に暑い日が多い傾向があったと言えるんだ。
プログラミングと直接関係はないけど、データ分析は世の中の色々な問題を解決する手段だから、興味があれば、いろいろ調べて、どんどん学ぼう。 また、このレッスンを通じて、コンピューターが処理をするためには、きっちり命令、つまりプログラミングが必要であることも、感じられていればOKだよ!