数学A

 

 考古の選択科目には数学Aがありますが、この中ではデータを扱う際のフィルター処理を数学的な処理で行う方法を学習出来るようになっています。

 

 現在の高校のカリキュラムでは 【 情報I 】 があるので、コンピューターを使うだけでなくAnacondaを使用するともうので、データ解析やAIで使用する配列を使用する処理も行います。また、こうしたデータはグラフ化できるのですが、 【 プログラミング言語 + ライブラリ 】 という軽量な物を使用して動かせるようなものも使用することになります。

 

 AnacondaPythonの統合開発環境で、

 

  ■ Sypder(エディタ)

  ■ 各種ライブラリ

  ■ R言語

 

などが使用できるのですが、

 

  ■ Numpy

 

はリストよりも高速に多次元配列を扱える外部ライブラリになっていますが、

 

  ■ Matplotlib

  ■ R言語

 

では、データを読み込んでグラフ化したり情報抽出を行える仕様になっています。

 

 コードで制御できるという事は、スプレッドシートを立ち上げなくてもデータを作成してCVSXSLファイルなどで書き出すことが出来るので、サンプリングを行いながらデータの状態を取得してデータの変化を扱うことが出来るようになります。この処理は、サーバサイドのアプリケーションではごく当たり前に機能しているものになりますが、サーバもPCですから、常時かどうする状態だとシングルボードコンピューターでも同様のことが出来るので、データ数の小さな物を取得してそれをサンプリングして集計することができます。

 

 サンプリングを行う場合、単一のセンサーでの計測値だと変数の値は一つですから、この推移を取得することができますが、多変数の場合だと複数のセンサーからの値を取得することになります。このようにサンプリングを行ったデータは 【 記録 】 することで多変数の値の集まりができるわけですが、これをサンプリングの感覚ごとに取得するとこの構造物は二次元配列の構造になります。ここに日付別のサンプリングでデータを管理すると三次元配列になりますが、データを扱う際には常に多次元配列の状態になります。

 

 この構造を見ると、【 異なる値が並んだ構造 】 になっているわけですが、データの取得をする際にはこの構造になるので

 

 

 

  データ

 

 

 前述のようにデータは、【 値の集合 】で構成されているわけですが、この構造は小学校の算数でも使用します。

 

 小学校低学年では 【 確定した一つの値 】 を使用することで計算で使用する方法を学習しますが、この時に学習するのが 【 四則演算 】 になります。これは、

 

  ■ 加算 : たしざん

  ■ 減算 : ひきざん

  ■ 乗算 : かけざん

  ■ 除算 : わりざん

 

の4つの計算方法になりますが、これが計算の基本になります。これを言葉に置きかえると

 

  ■ 加算 : 追加

  ■ 減算 : 除去

  ■ 乗算 : 追加のループ処理

  ■ 除算 : 分割

 

になります。1bitのデータを扱う機会の場合だと数値を二進数で処理をすることになりまから、基本なる加算器を作成して、その加算の処理を回数分だけループさせることで乗算器を作ることになります。

 

 これが、加算、乗算の構造ですが、除算については、 【 補数 】 を算出することで加算処理だけで減算を行うことができます。除算は元の数値から対象の数値を引けなくなるまでループさせてそのループ回数をカウントすれば除算の結果を取得できるので、そういったループ処理を使用した方法を用います。

 

 機械の処理だと、補数による除算が可能なので、NOTゲートで反転させた数値を使えば加算器だけでも加減算ができるので、加減算器の場合、加算器と減算器を並べたものではなく、これを一つにまとめが構造のものを使うことができます。また、二進数の処理は

 

  ■ 2×2=4

  ■ 2÷2=1

 

とっているので、

 

  ■ 2の1乗同士の乗算=2の2乗

  ■ 2の1乗同士の除算=2の0乗

 

となっているので、この事例では 【 積と商が桁の変化としてあらわれている 】 事が分かります。このことから

 

  ■ 乗算 : 左シフト

  ■ 除算 : 右シフト

 

でも下位を求めることが出来るようになっています。これが二進数の計算になりますが、日常で衣装している数値は十進数で、それをn進数に変換指定使用しているわけですが、この時に使用するのが十六進数になります。

 

 現在の学校教育では、データの最小単位を1bitということや、これを8つ集めたものが1Byteにっていることを学習しますが、この十六進数をそのまま数字で書くと0〜15が桁に入ってしまうので、これを回避するためにコンピューターでは、2桁の値をアルファベットで示す仕様になっています。つまり、10〜15はA〜Fで表記することになります。これが4bitのデータになりますが、これを2桁並べたものが1Byteのデータになります。

 

 この条件で考えると、十進数の桁の中でで使用する値である0〜9は、

 

  ■ 0 : 0000

  ■ 9 : 1001

 

で示すことが出来るので、この4bitがひとまとまりになった物の桁数を増やすことで複数の桁の十進数を作ることができるようになっています。人が使用する部分は入出力の部分になりますが、この部分で

 

  ■ 入力 : 十進数 → 二進数変換

  ■ 出力 : 二進数 → 十進数変換

 

を行うことになります。

 

 このように機械では内部処理で高校の数学で学習するn進数変換を行っている訳ですが、人が値を使う場合にはn進数は内部処理をして判断をしているので、 【 知識をつけるだけで対応できる 】 ようになっています。

 

 このような演算処理ですが、低学年では、ここに 【 数の示し方 】 についても学習するので、自然数nが存在する時に

 

  【 0 < n < 1 】

 

のような条件の表記の方法を学習します。これが、

 

  ■ 小数(小数点数)

  ■ 分数

 

になりますが、累乗を使った表記が登場するのが中学校の数学からになりますから、数値については

 

  ■ 桁の変化

  ■ 分数

 

を学習しますが、分数は 【 物を分けた時の状態を示したもの 】 になりますから、分けた後の1つの物体の状態が全体から見たときにどの程度の量に該当するのかを示したものになります。

 

 ちなみに、中学校で登場する 【 累乗 】 は 【 桁の変化 】 として使用できるので、前述のように二進数でも使用できますが、十進数の場合も同様に桁の変化が発生するので、 【 n進数の桁の変化 】 として使用できます。この時の変化を指数で調整できるので、

 

  ■ 桁の増加 : 符号なし

  ■ 桁の減少 : 符号あり

 

で処理をすることができます。この場合、 【 値 × 10の累乗 】 で示すことが出来るのですが、コンピューターでは、X.xxxxのように正の数1桁と小数点以下の数を用意して、それに対して10の累乗を掛け合わせるような仕組みになっています。このような数値の表記をした小数点数を 【 浮動小数点数 】 と言いますが、コンピューターで桁溢れが生じると数値を表記できる仮部とこの累乗の部分を組み合わせた値が表記される仕組みになっています。当然、桁溢れをした部分は使用することができませんから、演算で使用できるのは仮部のみですから、コンピューターの演算処理で使用するのは仮部のみになります。これを踏まえて考えると、整数及び小数点数を使用する場合には使用できる桁数が決まっているので、目的にあった型を指定することになります。

 

 このように指数で桁の変更がd家いるので累乗を使用すると

 

【 n進数のシフトが行える 】

 

ようになっています。その為、

 

  ■ 左シフト : 符号なし

  ■ 右シフト : 符号あり

 

で制御することが出来るようになっています。高校の数学では、累乗を拡張した 【 べき乗 】 を学習しますが、これを使用すると、

 

  ■ 累 乗 : 指数が整数

  ■ 累乗根 : 指数が分数

 

を使い分けることが出来るようになります。検索エンジンでも計算が出来るので、

 

  ■ 2^(/2)

  ■ 3^(/2)

  ■ 5^(/2)

 

のように入力すると、

 

  ■ 2^(/2) : 1.41421356237

  ■ 3^(/2) : 1.73205080757

  ■ 5^(/2) : 2.2360679775

 

のような値が帰ってきます。ちなみに、Pythonの対話モードでも計算は出来るので、算術演算子の【 ** 】 を使用すると、累乗になるので、組み込み関数でもmathモジュールの中のpowメソッドのような計算を刷ることが出来るので、【 2**(1/2) 】 のようにする平方根を求めることができます。この時の分母が累乗根のnの値になりますから、仮部と指数部分をコントロールすることで、累乗と累乗根を使い分けることが出来るようになっています。べき乗を学習すると指数で様々な値の変化を与えることが出来るので、指数とその状態変化のあるごリズムを用意しておくだけで様々な変化を与えることがd家いるようになります。

 

 値についてはこのような変化がありますが、この基本となる簡素な構造を小学校で学習しますが、高学年になると、

 

  ■ データと活用

  ■ 数列

 

が登場するので、【 複数のデータ 】 を扱うようになります。このデータを数学的に扱うのが算数で、この学習内容が実際に使用されている事例を体験を通して学習するのが、社会や理科のカリキュラムになります。

 

 

 

  データと集合

 

 

 小学校高学年では、データの集まりを扱うカリキュラムが増えますが、これにより

 

 【 値の集合 】

 

を扱うことになります。そもそも、自然数自体が 【 値の集まり 】 なので算数の最初に学ぶ数値のならびについても集合ですから、この比較によって値の大きさの違いを学習し、その変化を計算によって算出する方法を学ぶと言う流れになっていますが、この際に集合をいきなり扱うと難しいので確定した状態のものを扱うようになっています。つまり、 【 一つのセンサーの値のようなもの 】 を基準として、その時の計測を二度行い、 

 

  ■ 最初の計測値

  ■ 次の計測値

 

を用意してその差分を見る時の方法を小学校一年生で学習します。これが加減算になりますが、低学年では、上除算を学習するので、

 

  ■ 1つのものが複数存在した場合

  ■ 1つのものを複数個に分割した場合

 

の数値の変化を学習します。この時の表記の仕方は

 

  ■ 小数点数

  ■ 分数

 

が存在するので、この2つを学習しますが、この状態はあくまでも1つの物体の状態変化でしかありません。つまり、 【 1つの出来事 】 を基準とした視点での状態変化の学習になります。

 

 高学年では、【 複数のデータの傾向を知る方法 】 を学習しますが、算数では

 

  ■ 等差数列

  ■ 等比数列

 

のような 【 数値の並び 】 から法則性を導き出し、その傾向を見つけたり、その傾向から予測される数値を導き出す方法を学習します。

 

 この時に使用するのが、例えば、

 

 【 1,3,5,7,9 】

 

のような数値の集まりだと2ずつ増えていますから9の次の数値は11だと判断できます。また、

 

 【 2,4,8,16,32 】

 

のような数値の集まりだとそれぞれが2倍になっていますから、32の次の数値は64だと破断できます。これが数の変化が同じ値が並んだものになりますが、同じ数字で変化しているので等差数列や等比数列という名称になっています。

 

 これは、 【 集合 】 を使ったものですが、法則性が決まっている場合だとどの条件でも同じ状態になるので、その法則性に従った結果になります。例えば、

 

【 2を足す 】 

 

  2,3,4,5,6,7...

 

【 2倍にする 】 

 

  0,2,4,6,8,10...

 

のようになりますが、この時に小数点数も存在するので、0.5だと2を足すと2.5になりますし、2倍にすると1になります。このような法則性を

 

  ■ 乗算

  ■ 除算

 

を用いた時にどのような変化になるのかを学習するのが、比例と反比例になります。この法則性は

 

  ■ 乗算 : 比例

  ■ 除算 : 反比例

 

の関係性になりますが、除算は分数と同じなので、特定の数で割った時の結果と反比例は同じになりますから、このグラフは分数関数のグラフになります。乗算は係数で変化を与えることの出来る物ですから、この関数のグラフは一次関数のグラフになります。

 

 関数の場合、数値の範囲指定がありませんが、数列にはデータの範囲がありデータが確定した状態になっているので、その中における法則性を求めた場合の結果を導き出す方法になります。

 

 

 

 

  データ解析

 

 

 データを見る場合、義務教育でも

 

  ■ ヒストグラム

  ■ 箱ひげ図

 

などを使うので、分布を示すものを扱いますから、小学校で使用した数値の大きさで並べるグラフとは少しt異なるものも使用します。

 

 グラフは 【 結果を図示したもの 】 になりますが、義務教育では

 

  ■ 多変数のデータに対応する

  ■ データの扱い方を知る

  ■ データの傾向から判断する

 

というようなものを扱うので、【 データの基本的な見方 】 について学習します。ただし、日常生活に置いて 【 判断 】 を刷る場合には 【 必要なデータの条件抽出 】 を行っているわけですが、この作業を行う際には 【 確率と組わせ 】 のような義務教育で学んだものとは異なる抽出を行っています。

 

 この抽出方法は、図形の面積や体積で扱っているので日常生活との関連付けができていないと何をしているのかイメージができないと思うのですが、 【 図形の組み合わせで出来た形状 】 の面積や体積のデータは条件によって抽出されたものになりますから、この時に得られるデータは 【 集合演算を適応したもの 】 になります。この時の図形の特性は

 

  ■ 平面図形

  ■ 立体図形

 

になりますが、これは次元数の違いが存在するだけで、実質的には座標の変化で示されたデータの集合ということになります。形状については中学校の変域から登場しますが、変域は 【 データの範囲指定 】 になりますから、この抽出を

 

  ■ 座標で指定する

  ■ 関数で指定する

 

と言う違いによってデータの範囲の 【 形 】 が変わってきます。

 

 この時に出来る形が図形として扱えるわけですが、これを現実世界の物体に適応したデータの総数を状態として判断するために使用しているのが 【 面積 】 や 【 体積 】 になります。

 

 この集合のデータは 【 座標単位で値を持っている 】 ので、一変数関数だと、

 

 【 変数xがnの時のyの値 】

 

を持っています。これが層になっているので面に見えているわけですが、この時の面は、【 範囲に層を与えたもの 】 なので、不等式弟子絵挺されているので面担っているわけです。この面に対して層をもたせたものが三次元のデータですから、【 変数xがn、変数yがmの時のzの値 】 を示したものが二変数関数のグラフの値ということになります。

 

 このようにグラフになると複雑な状態になりますが、範囲指定を刷ることでデータの必要な部分を抽出できるわけですが、こうした 【 データにフィルターを適応する処理 】 については数学で体系化されており、それをグラフではなく式で示して扱うためのものが 【 集合演算 】 になります。

 

 

 

  集合演算

 

 

 データを扱う場合には

 

  ■ 条件によるデータ抽出

  ■ データの並べ替え

 

な度行うことになりますが、この内容は情報IR言語などを使って使用することになります。

 

 ソフトウェアを使う場合だとスプレッドシートを立ち上げると標準機能でこうした処理は行えるようになっていますが、データの抽出については 【 集合演算 】 なので、数学Aの中で扱うものになります。

 

 

 

 

  データ抽出

 

 

 データは数値の集まりなので集合になりますが、自然数も数値の集合ですから、数値の中から任意の集合を作る作業は

 

  ■ 範囲指定

  ■ 条件抽出

 

で行っているので、

 

  ■ 不等式

  ■ 集合演算

 

を組み合わせた処理と考えることができます。不等号については、小学校高学年の算数で登場しますが、中学校では、不等式を数値だけでなく座標平面上でも使用しますから高校の数学のカリキュラムの基礎部分を学習することになります。データは、

 

  ■ 多変数

  ■ 多次元

 

になると扱いが難しくなるので、学習の段階では一次元のデータをサンプルとして扱うことになります。

 

 一次元のデータは等差数列や等比数列と同じものになりますから、数値が並んだ構造のものになります。

 

 数列だと小数点数が含まれると難しくなるので簡素化するために整数のみにして扱いますから、自然数に対して床関数を適応して値の抽出をしたような状態になります。つまり、

 

  ■ floorx

 

のような状態にして、変数xの値を整数の状態にします。この状態で範囲指定を行うので上限と下限を指定することになるので、

 

  ■ 上限 : m

  ■ 下限 : n

 

とした場合、

 

  ■ n < x < m

 

と言う条件が成り立ちます。これで

 

  ■ 整数 ∩ n<x<m

 

と言う条件の整数の値を取得することができます。当然、この場合、1ずつ増える形になりますから、この範囲の中の値に対して条件を適応することによって数列を作ることができます。

 

 例えば、この法則を適応したものに対して、

 

  ■ n=−1

  ■ m=11

 

とすると、 【 −1<x<11 】 となりますから、0〜10までの値を抽出できます。これに床関数を適応するので整数のみの値を抽出することになりますから、この状態の値は

 

  【 0,1,2,3,4,5,6,7,8,9,10 】

 

となります。小学校では、

 

  ■ 奇数

  ■ 偶数

 

の違いを学習しますが、この違いは、

 

  ■ 奇数 : 2で割り切れない

  ■ 偶数 : 2で割り切れる

 

と言う違いになります。その為、

 

  ■ 奇数 : 剰余が発生する

  ■ 偶数 : 割ると剰余が0になる

 

と言う条件で判定が出来るので、 【 x/2=0 】 になる条件が偶数で1余る値が奇数になります。

 

 これが奇数と偶数の判定方法になりますが、先程の数列から奇数と偶数を抽出する場合だと、この2つのフィルターの条件を用意して判定を行えば目的のデータの抽出ができます。

 

 プログラミング言語を使用してコードを書く場合だと、先程の集合を配列に格納してその値をインデックスで取得しながら判定をすればいいので、インデックスの値を使ってループを行って、そのループの中で条件分岐で判定を行えば必要な値を取得することができます。

 

 では、 【 それを指定する場合 】 にはどのような表記いすれば良いのか?を考えた場合、法則性で示せたほうがいいので、【 対象 】 に対して 【 処理 】 を実装する形で示したほうがわかりやすかったりします。この場合、

 

  ■ 用意した数列 : m

  ■ 条件     : n

 

とした場合、 【 mと言う集合から補集合nを適応した結果 】 を用意すればその値を取得できます。つまり、nとは自然数の中に存在する集合になりますが、奇数や偶数とは 【 特定の値を除去したもの 】 になりますから、 【 集合の重複部分を除去する 】 ことで元のデータである集合に対して必要な値のみを求めることが出来るようになります。

 

 これは奇数と偶数のように 【 法則性を式で求めることが出来る条件 】 になりますが、データの全てがこのような事例に該当するわけではありません。その為、 【 法則性のない値の集合 】 をフィルターとして適応した場合にも対処できるようにするために 

 

【 集合に対して集合でフィルターをかける 】

 

ことでデータの抽出を行えるようにする必要があります。こうした処理を体系化してまとめたものが集合演算になります。

 

 例えば、先程作った

 

  【 0,1,2,3,4,5,6,7,8,9,10 】

 

に対して、

 

  【 1,2,5,7 】

  

を除去するような処理を行った場合、

 

 

  【 0,3,4,6,8,9,10 】

 

 

のようなデータを抽出できます。また、このデータに新規に11を追加する場合だと、

 

  【 0,3,4,6,8,9,10,11 】

 

になりますが、このような 【 処理と結果の関係性 】 を

 

  ■ 元のデータ

  ■ 処理に使用するデータ

 

を組み合わせて判定を行う方法を数学の形で学ぶのが数学Aになります。

 

 集合は 【 区別できるデータの集まり 】 になりますが、この辺りは小学校2年生の棒グラフの学習の時に 

 

  ■ 対象物の種類

  ■ 対象物の個数

 

と言う種類とデータを使って個数を並べたもので比較をし、これを 

 

  【 個数 】 → 【 距離 】

 

に置き換えて棒グラフを作ります。集合では 【 種類 】 ではなく、 【 個数 】 のような値になっているので、これがどのように格納されているのか?を扱うことになります。

 

 

 

  集合の要素の数

 

 

 集合の場合、Pythonのリストと同じような形になっていますが、プログラミング言語では、

 

  ■ 数値

  ■ 文字列

 

を使うことができます。その為、言語を変数化しておいて呼び出して使用することも出来るのですが、通常の変数は、 【 変数名と値が1:1で紐付けされている 】 ので、多変数の構造を作ろうとすると膨大な数の変数の宣言や初期化を行うことになります。C言語を学習すると、文字は文字型しかなくキャラクターコードを格納できる1Byteのデータしか持っていませんから、文字列を扱うことができません。

 

 その為、表示を刷る際に 【 文字配列 】 という配列を作ってその中にデータを格納する仕組みになっています。このように最初から配列の概念が登場するプログラミング言語もありますが、Pythonでは組み込み関数で配列を扱うためのリストが用意されているので、これを使用することで、単一の変数名に対して複数のデータを格納してインデックスの値で呼び出して使用できるようになっています。

 

 高校の数学Aの集合では、集合の記述の方法が存在しており、その方法についての考え方も学びます。

 

 集合では、【{}】の中に要素を書き込むことになるので、Pythonの辞書で使用する括弧をしようすることになります。この記号はC言語やJavaScriptなどでは頻繁に見かけるものになりますが、関数を使用した際にその関数内の処理を格納する時のブロックの範囲を示す時に使用する記号になります。

 

 数学の集合では、

 

【 集合名 ={要素1,要素2,要素3,...} 】

 

のように記述することになりますが、この時の集合名をAとした場合、

 

  ■ A = { 要素1,要素2,要素3 }

 

のような形になります。これが、集合の書き方になりますが、カリキュラムの中では最初に集合に格納されている要素の数とその表記について学習することになります。

 

 先程の事例では、要素は3つ入っていますが、この時の集合Aに入ってる要素の数を示す場合には、

 

【 n(A) 】

 

と言う形で示すことになります。この条件で

 

【 問 】 

 

  A = { 要素1,要素2,要素3 } の

  集合の要素の数を求めよ

 

と言う問題があった場合、要素は3つですから、

 

  n(A)=3

 

のようになります。

 

 

 

  集合の名称

 

 

 集合の個数を求める場合、一つの集合に対してお行う場合には全体を使うことになりますが、この中に条件を設けて処理を刷る場合には、 【 部分的に抽出した値 】 を使用することになります。

 

 その為、集合を扱う際には、この2つに名称をつけて判断できるようにしてあります。カリキュラムの最初の方で、

 

  ■ 全体集合 : 集合全体

  ■ 部分集合 : 集合の中に存在する集合

 

が登場すると思いますが、これは、

 

  ■ 全体集合 : 対象物

  ■ 部分集合 : 条件抽出の要素

 

なので、検索エンジンを使って必要なものを調べる際の処理で考えると、

 

  ■ 全体集合 : 全データ

  ■ 部分集合 : 条件抽出のキーワード

 

のような関係性と考えることができます。その為、集合演算はこうした数値以外の者に未使用できるのですが、検索エンジンでは論理演算を使用して絞り込むことが出来るようになっていますが、この時に行っているのはブール値の組み合わせではなく 【 一致するカテゴリーの組み合わせ 】 なので、指定されたグループ同士の範囲指定による抽出結果になります。その為、検索エンジンを使って候補を抽出する作業も集合演算に寄る処理になります。

 

 先程の、集合を

 

 U = 【 0,1,2,3,4,5,6,7,8,9,10 】

 A = 【 1,2,5,7 】

 

と言う名称にして考えると、除去を行う場合の処理は、集合Uの中の構成要素の集合Aを除去しているわけですから、条件として考えると、集合Aは集合Uの中に包含されている要素と考えることができます。そうなると、

 

  ■ 全体 : 集合U

  ■ 要素 : 集合A

 

になりますから、この関係性で考えると、

 

  ■ 全体集合 : 集合U

  ■ 部分集合 : 集合A

 

ということになります。この条件で、全体集合Uと部分集合Aの要素の数を求める場合には、()内の記述が変わるだけなので、

 

  ■ 全体集合 : n(U)

  ■ 部分集合 : n(A)

 

 その為、これらの要素の数を求めると、数を数えるだけで済みますから

 

  ■ 全体集合 : n(U)=11

  ■ 部分集合 : n(A)=4

 

になります。

 

 このように集合には 【 対象物 】 と 【 構成要素 】 が存在するわけですが、集合では、

 

  ■ 全体集合

  ■ 部分集合

 

が登場するので、この区別をしておく必要があります。検索エンジンで複数の条件で絞り込みを書ける場合、条件の入力をして全体から必要なものを抽出しますが、この処理で使用しているキーワードに該当するものが部分集合になります。