見出し画像

文系の人へ:『プログラミングとは』

文系の人は,数学に対して勝手な苦手意識を持っていませんか? とてももったいないので,そのアレルギーを少しでもなくなればいいなと思って,この記事を投稿しようと思いました.『ロボットは東大に入れるか』プロジェクトで有名な新井紀子先生がとても素晴らしいことを仰ってました.『数式というのは,ある事柄を話し言葉で長々と説明するのではなく,誰がどう読んでも誤解のない非常にシンプルで抽象化された言語の1つなんだ.そう思えたときから,話し言葉以外のこの誤読しようのない世界共通言語を使いこなせないのはあまりにももったいないと強く感じた.』その発展の1形態として,プログラミングがあると思います.

よくロジカルシンキングを鍛えるのにプログラミングを学ぶといいというようなことが言われると思いますが,ピンとこない人も多いのではないでしょうか.ここでは,プログラムとはどういったことをやっているのか.なぜロジカルシンキングが鍛えられるのかを難しい数式やプログラムそのものを提示することなく,図で分かりやすく解説しようと思います.日本は技術で勝って,ビジネスで負けるとよく言われます.我々理系は,ついつい技術の追求や細かいことに意識が向いてしまい,全体(ニーズの本質)を把握することが疎かになってしまいがちです.これからは,今までのような単体技術の発展だけではダメで,様々なことが融けていく(色々な技術の掛け合わせ)ことによってしか社会課題を克服できなくなる.ですので,文系の人が,理系はどんな考え方で何をやっているかのエッセンスを効率よく把握して,それらを束ねてビジネスにつなげて欲しいと思っています.詳細を完全に理解して,自らが実施する必要はありません.概念を掴んで下さい.ぜひ我々を良い方向に導く人になって下さい.

図に示すようななんらかのデータがあります.ここでは,矩形波にノイズがのった電流測定値を一例として示します.

データ

このデータは,一目見て分かるように,非常に周期性の強いデータです.このデータを統計的な処理を施して,平均値やピーク値を算出するためには,適切な形でデータを切り出す必要があります.

抽出

人が一つ一つ分割するとすれば,2秒,4秒,6秒,8秒,10秒あたりの赤丸印をつけたところだなと簡単にあたりをつけてそれなりに分割することができます.しかし,このデータが膨大なら,人力でやるには限界があり,プログラムで自動化しようということになります.ただ,人が目で見てすぐに分かること(0をまたがることをゼロクロスと呼びます.ゼロクロス検出.)でも,コンピュータにさせようとすると,きちんと順序立てて処理を細かく指示してやる必要があります.時刻2秒の前部分を拡大したものを下図に示します.

画像3

IDは,データの識別番号です(先頭1から).IDが201番目の電流値は,グラフには表示されてませんが,8より大きいことが分かります.
データを抽出するということは,この場合,赤丸印○をどういった形でコンピュータに発見してもらうのかということです.ゼロクロスを発見したいのだから,あるしきい値(ここでは8)よりも大きい値の部分を探す必要はない.したがってまず最初に,8以下の値を抽出する.次にi番目のデータとi+1番目のデータを比較して,上昇しているのか下降しているのかを把握する.このような隣り合う値を比較するというのはプログラムで何らかの傾向を把握する場合の常套手段です.隣り合う値を掛け合わせて,負の値になれば,そこでまさにゼロクロスしているということです.

ゼロクロスのパターン

上記の処理をまとめると,
**********************************
① 抽出したい部分を大雑把に取り出す.しきい値を設けて,それよりも下か上かで,データを分ける.この場合,8よりも小さい値のデータIDを取得する.
② 隣り合う数値を比較して,右肩上がりになっている,つまり,i+1の方がiの値よりも大きい場合を抽出する.
③ 右肩上がりの隣り合う数値同士を掛け合わせて,負となるパターン(a)を探す.
④ パターン(a)となるi+1番目のID(ここでは198)の次を,抽出する繰り返しデータの最初の位置と定める.
**********************************

このような手順をコンピュータに自動で実行させるためにプログラムを書きます(コーディングといいます).コーディングそのものは,理系というかプログラマーの仕事内容です.ですので,このような処理をやっているのだなと,雰囲気が掴めればOKです(もちろん好きな人は,もっと掘り下げてもらって構いません.これはまだまだ基本形で,ゼロクロス精度を追求しようとするといくらでも掘り下げられる).

<プログラミングによる自動化で効率化を図る時>

スクリーンショット 2021-04-05 20.13.10

このようなAからEまでの作業工程において,工程を短縮するために自動化が行われますが,ついついやりやすいところから着手してしまいがちです.何らかの戦略をもって,やりやすいところから実施するならいいのですが,戦略もなく最初の工程Aから順番に自動化していこうなんていうことをしても一向に効率は上がりません.逆にAの工程を20%低減するために,B相当の労力(時間)がかかっていては本末転倒です.自動化するなら工程Cです.どうしても困難なら,この全工程を見直してみるといった大胆さも必要です.そもそもこの各工程(ワークフロー)の詳細を見える化できていないことも多々あります.ですから,『プログラミング/自動化』と聞いて尻込みすることなく,全体を俯瞰して最も効率の良いプログラミング開発できるようなアドバイス/コメントを心がけて下さい.コーディングそのものよりも,全体を俯瞰する,ビジネスにつなげるセンスの方がよほど重要です.

最後に.

プログラミングに興味があるなら,Google Colaboratory,Kaggleを初めてみるのがお勧めです.通常,プログラムを開発しようとすると,それなりの環境を構築する必要があります.でも,上記はブラウザ上から,プログラムの作成/実行ができますので,環境構築不要ですぐにプログラミング学習ができます.Pythonでの機械学習や深層学習(ディープラーニング)をかじってみたい,統計的にデータを分析してみたい(Excelからちょっとスキルアップを図りたい)といった人にぴったりだと思います.


この記事が気に入ったらサポートをしてみませんか?