先日は、
にて 【 配列 】 について書きました。現在のプログラミング言語だと
■ Array
を使った処理はフツーに存在しますし、強化学習のようにデータを使った処理の場合だと、多次元配列を用いた処理になりますから、AI関連ではこうした配列を当たり前に使う事になります。(使いにくいので変換して使う事もありますが...。)
プログラミング言語と言うとコードを書いて処理をするというイメージがあるかもしれませんが、簡素なコードで色々な事が出来る物も多く存在するので、グラフを作るのが簡単なR言語のようなものもありますから、データを用意してグラフにいするだけだと、オフィースソフトでマクロを使うよりもR言語を使った方が簡単な場合もあります。
アナログで大変な事をデジタルで行う時にPCでの作業をしますが、オフィースソフトなどがその代表例になりますが、
■ 文章制作
■ プレゼンテーションの資料製作
■ データの集計や解析
などが行えるようになっていますが、これも手計算で大変な物や手書きだと大変な作業の負荷を減らすためのツールになります。
オフィースソフトだと、
■ 数式エディタ
■ データベースソフト
などもついている場合がありますが、これも管理をする為に使用する物だったり、利便性を高める為の喪になります。ワープロソフトは縦書きにも対応しているので、日本語の文章も縦書きで構成できるので、国語のプリントについても、ごく当たり前にオフィースソフトで作るk十ができます。これについては、
野中で触れていますが、表と組み合わせると、縦書きのレイアウトも行えるようになります。この方法は、ドロー系ツールを使った時のグリッドに合わせて成型するのに似ているので、Inkscaprとかで吹き出しに文字を入れる時にグリッド参照にすると合わせやすいのと同じですが、表で管理すると縦書きの文字列も扱いやすくなります。
OSSのオフィースソフトだと
■ Libre office
があり、JREをインストールするとデータベースソフトのBASEを使えるようになりますが、ワープロソフトやスプレッドシートだと数式沖術は無理なので、数式エディタが用意されています。
こうした数式については、大学だと 【 LaTeX 】 のようなTEX言語を使って記述する事で複雑な式を記述できるようになっていますが、基本的にソフトウェアには得手不得手があるので、足りない部分は補う必要があります。その為、書面を作る際にそうした物を使う事になりますが、同じ作業をする場合には作業における料力がかかりすぎる場合だと、別の方法を使った方がいい場合もあります。
特に、 【 書面を出すだけ 】 で考えると、それを行える環境構築をしたほうが作業がしやすいので、用途によって使うツールが変わってきます。例えば、データの集計をしてグラフを作る場合だと、
■ データの管理
■ 変化
が存在する場合だと、 【 人が行う作業 】 が発生するので、この場合には、何かしらの形でフロントエンドを用意する必要が出てきます。
そうなると、CALCのようなスプレッドシートで作業をしたほうが作業が行いやすくなりますが、 【 データがある場合 】 だと少し話が違ってきます。
プ ログラミングとデータ
プログラミングは小学校から始まっていますが、算数と照らし合わせて考えると解りやすいのですが、小学校の算数では、 【 計算 】 を行いますが、この時に 【 数字がないと計算できない 】 と言うのは一番最初に学習していると思いますし、国語についても、穴埋め問題のように 【 文字が欠損している状態 】 だと文章として成立しません。小学校1年生のカリキュラムでは出てきませんが、
■ 小学校1年生の算数
■ 等式の成立と言う結果を出す事
■ 小学校1年生の国語
■ 文章として成立する条件が成立する事
が前提になっています。
算数では計算をしていますが、これも等式が成立する事が前提となっているものですし、文章を構成する文字列は全て用意されていないと文章は成立しません。
と言う事は、この条件を考えると、 【 構成要素 】 がなければ成立しないので、小学校の算数でも
■ 演算記号
■ 数値
がなければ成立しませんし、国語も
■ 文字
■ 句読点
がなければ成立しません。
言葉の構成については、
の中で触れていますが、文字列がないとっ成立せず、言葉の構成には単語と言う意味を持った構造体もありますが、主語や述語などの目的を持ったものも存在していますから、データがカテゴライズされた状態で運用されています。
つまり、 【 インデックスで管理できる 】 ので、AIも自然言語を使う事が出来るようになっています。
ただし、構造を見ると語学の構文については、複数の構成要素の加算によって構成されている事が解ります。つまり、単語を数値として考えた場合、 【 加算と言うアルゴリズムの集合 】 として考える事が出来るのですが、中学校の数学では、
【 式のまとまりを加算で処理する方法 】
として、 【 項 】 を学習します。これは、加算以外の条件を変数項にまとめて処理をする事で、簡素な加算の式にするという方法になりますが、 【 減算、乗算、除算 】 は処理ですから、項については処理の構造体として考える事が出来ます。
そうなると、変数項と定数項の加算の式は、
任意の処理を順番に行う内容を数式化した物
なので、工程表やタイムテーブルと同じ構造物と言う事になります。では、文字列の固まった構造物も配列の構築を 【 一つの処理 】 と置き換えた場合、そこに配置する変数項の換算式も文章構築と同じ仕様の物と考える事が出来ます。
その為、プログラミング言語では、変数で文字列を扱えるようになっています。小学校の算数や国語でも
【 データがないと処理が成立しない 】
事を体験する事になりますが、そうしたエラーが出ないように文章の構築や計算式や数値を学習する事になりますが、プログラミングにおいてもデータがない事には作業が出来ません。
その為、コーディングを行う際には 【 値 】 を用意する事になります。
■ 定数と変数
プログラミング言語の場合、値を用意しなければなりませんが、プログラミング言語の多くでは、 【 オブジェクト 】 を用意してそれをどう扱うのか?を考える事になります。
Pythonは対話型言語なので、コンソールで文字の入力や計算をそのまま行える仕様になっているのでそこから始まると思いますが、多くの言語では、 【 文字の印字 】 と言う 【 表示 】 からスタートすると思います。つまり、
【 コードを入力してディスプレイに文字を表示する 】
と言う処理を学習します。Python 3.x系では、printは文ではなく、関数になっているので、文字の表示をする場合には、 【 引数 】 を関数内に入れて使用する事になります。この場合、
■ 数字
■ 数式
■ 文字列
を使用できますが、この時の処理は確定した引数なので、 【 定数 】 になります。この数値を引数の場所を探して変更するのが大変なので、これを変更しやすいように名称を指定して値を宣言しておくと変更がしやすくなります。この時に定数の指定を名称を使って行う事になります。厳密な言語だと、定数と変数の区分けがされており、JavaScriptのように
■ 変数 : let (ブロックスコープあり、再宣言不能)
■ 定数 : const (改変不能)
のような指定の物もありますが、Pythonだとこの区分けがないのでコードで対応(つまり、自作の関数やクラスで制御する事になります。)することになります。
この時に 【 変数名 】 を指定して、 【 値 】 を決めますが、この値の事を 【 リテラル 】 と言います。この名称を指定して仮に値を入れておいて推移させることで、関数内の変数xのように値に変化を与える事が出来るようになります。
その為、プログラミング言語で使用する
■ 変数 : let
■ 定数 : const
については、中学校1年生の数学の 【 項 】 のカリキュラムの中で登場する
■ 変数項
■ 定数項
と全く同じものになります。数学では、
■ 変数項 : アラビア数字
■ 定数項 : アルファベット
ですが、プログラミングで変数を使う場合、言語の仕様に合った名称の付け方があるので、それに準じた形で変数名を指定する事になります。
その為、;プログラミング言語では、定数と変数のデータを用意して、そのデータを元に処理を行う事になります。
デ ―タ参照
前置きが長くなりましたが、プログラミング言語ではデータを扱って処理を行っているので、データを使用した処理を行っている訳ですが、前述のデータからグラフを作る場合だと、フロントエンドの作業が発生する場合でオフラインだとスプレッドシートの方が簡単ですが、データが確定している物を使う場合だと、別の処理を使う事になります。
スプレッドシートを使った場合、箱ひげ図を作るのがかなり大変なので、作業負荷が乗訴訟するので使いにくい感じがしますから、TeXのような感じでもう少し簡単に出来る物を探したほうが作業効率は上がります。
こうした時に 【 R言語 】 を使うと、嘘のように簡単に処理ができます。これが標準機能だけでできるのでR言語を覚えるとCSVファイルを作るだけで簡単に箱ひげ図を作れるので、中学校の数学のカリキュラムでそうした物を用意するプリントを作る時だと、多分、こっちのほうが作業負荷は少ないです。
Pythonについて書いているので、Pythonを使う場合だと、外部ライブラリになりますが、matplotlibがあるので、これも嘘のように短いコードで箱ひげ図を作れます。また、データを格納した後にグラフの記述をするだけなので、複数のリストから箱ひげ図を作って並べる事が出来ます。この2つを知るとスプレッドシートのデータをCSVにして出力後して、R言語やmatplotlibで作業をしたほうが良さそうな気がしてきますが、解析についてはかなり便利な仕様になっています。
その為、 【 プログラミング言語って何に使うんだろう? 】 と言う疑問については、 【 手作業の無駄を減らして時間を有効に使う 】 と言う選択肢も存在しています。なので、個人的にはTeXのような気分でグラフを作れるR言語やPythonのmatplotlibとかは、知っていて損をしない物だと思いますが、この時に使用するデータもの次元配列のデータになります。
標 準機能での配列の利用
プログラミング言語を使った場合、変数や定数のように一つのデータを使う事もありますが、一つの変数の中に複数のデータを格納して扱う事もあります。これが、グラフ作成や解析を行うときに発生する物になりますが、
■ 一次元 : スカラー
■ 二次元 : ベクター
と言う扱いになっています。AI関連で 【 Tensor 】 と言う物が登場しますが、これが多次元配列を使うときに使用する物になりますが、三次元以上の物を扱う時にはTensorを使います。
多次元の場合、次元削減を行うと低次元で扱う事が出来るようになりますが、Tensorも三次元が扱えるので、ベクターやスカラーを扱う事もできます。
JavaScriptで配列を使う場合、arrayを使いますが、Pythonでは、リストを使います。Pythonでは、複数のデータを格納する際に
■ リスト
■ タプル
■ 辞書
を使いますが、数値の並びだけで考えると、リストの方が使いやすいかもしれません。ちなみに、データのやり取りを別の言語と行う場合には、JSON形式にしたほうがいいのですが、これは、どの言語でもライブラリがあるので、読み書きができます。Pythonも標準ライブラリでサポートしているので、データを辞書で書いてJSONで書き出す事もできます。JSON形式と言うとマインクラフトのアドオン制作の時に使用しますが、こうした記述も 【 辞書製作ツール 】 ➡ 【 JSON変換 】 のようなフロントエンドでデータを作って、テキスト成形と形式変換を行うツールを作ると、アドオンの指定が行いやすくなります。
Pythonでのデータのやり取りだと、リストを使った処理を行う事になりますが、matplotlibについても内部データだとリストを使った処理になります。
リ ストを使う
Pythonの場合、open()関数を使うとデータの読み書きが可能で、市ストの読み書きも可能ですが、この場合、 【 文字列 】 で書き込むことになります。なので、データを扱う場合の考え方なんですが、
【 データは文字列で保存される 】
と言う仕様を前提に考える事になります。つまり、
a = [1, 2, 3]
の場合、この記述内では、変数aにはリストが格納されていますが、これをファイルに書き込む場合には 【 srt(a) 】 で書き出す事になります。その為、これを読み込んだとしてもリストの用には扱えないので、それに対応する必要があります。
■ リストを文字列に変換する
リストのデータを文字列として結合する場合、for文でループさせたり、+で繋ぐ方法がありますが、Pythonには、リスト内のデータを結合する 【 join()関数 】 が用意されています。
■ join()関数
リストの中のデータを連結できる。
’’の中に文字を間に入れて連結できるので、文字の
並びをコントロールできる
【 記述 】
''.join(リスト名)
のようになっています。
のようにリストを用意して、変数の中にjoin()関数を使うと、
のようにリスト内のデータを連結できます。
のように 【 'と' 】 のように変更すると、
のようになります。また、
のようにすると、
のように空白にすることもできます。
■ 文字列をリストに変換する
join()関数を使うとリストを結合して文字列にする事が出来ますが、split()関数を使うと文字列をリストにする事が出来ます。
■ join()関数
文字列をリストにする事が出来る。
■ 空白
■ 改行\n
■ タブ\t
■ 垂直タブ\v
■ 復帰\r
■ 改ページ\f
で区切ってリスト化する事ができます。
【 記述 】
文字列を入れた変数名.split()
のような感じになります。jっ際に使ってみると、
のような感じで、文字列の間に条件を満たすものを挟んで、使用すると、
のようにスペースを入れた部分で区切られてリスト内のデータとして扱われています。その為、b[2]のように変数の2番目を選択するとその文字列を取得する事が出来るようになります。
データを使う場合、文字列の変更が出来るので、データの状態を表示段階で変更して使用する事もできますが、
【 文字列型だとファイルに読み書きが可能 】
なので、文字列で数値の羅列を記録すると、その数値を使ってパターン制御をする事もできます。この文字列も、リストに変換が出来るので、データの文字列の並びを変換しながら運用すると、セーブデータを、文字列とリストに変換しながらデータを扱う事が出来ます。