UoPeople AY2022-Term2 の振り返り。統計学とアルゴリズムに入門

UoPeopleでMATH 1280 Introduction to Statistics と、CS 1103 Programming 2 を履修しました。この記事ではコースを終えての個人的な雑感を書きます。

技術的なメモは別記事にまとめていますのでもしよろしければ。

目次

MATH 1280 Introduction to Statistics の振り返り

コースの内容

my.uopeople.edu

Rを使って記述統計と推測統計の基礎(統計用語・データの種類・変動性・確率分布・推定)を学びます。概念のインプットと並行して、Rの演習課題がありアウトプットも求められるため、コースが終わる頃には基本的な統計とシミュレーションが出来るようになります。

毎週の課題はこのような感じ。

Discussion Assignment

その週に学んだ語彙の定義を説明したり、学んだ概念を身近な現象に例えて説明します。ワード数の指定はなく、Rの出力を貼る指示もないので、めちゃくちゃシンプルに1パラグラフで回答している生徒もいれば、Rで演算したりグラフをプロットしているような生徒もいて自由な雰囲気。

Assignment

15〜20問の問題が出され、手計算とRを使った演算を行います。問題一つ一つの難易度はそれほど高くないものの、数が多くてじわじわつらい。でも隔週なので乗り切れる。

Self-Quiz

問題数は多いが、これを毎週こなすことによりGraded QuizとFinal Examが解けるようになる。Review画面で親切にソリューションを提示してくれるので、分からないまま終わることはない。週を重ねるごとに自然とRの関数を覚えて使いこなせるようになります。

Learning Journal

週の振り返りとエクササイズが3問ほど出る。インストラクターによると思いますが、Rの出力を貼っておくと点数をもらえました。

コースを終えての感想

College Algebra 受けておいてよかった

College Algebra履修以前と以降とでは数学に対する姿勢が確実に変化しており、\sum などの数学記号が出てきても平常心を保てるように。以前であれば冪乗や平方根すらも怪しかったので、分散や標準偏差でつまずいていた気がします。

QuizやExamはRで計算できるため、関数がどのような計算を行なっているかまで把握しなくても単位を取れますが、そこが理解できないと暗記頼りのつらい学習になりそうです。なので、数式が読めるようになったこと(知らない数式であっても理解しようと思えるようになったこと)が役に立ちました。

一つだけ、連続確率変数を計算する確率密度関数だけは、積分わからない自分には感覚がつかめず無念でした...。次のTermで微積を取るので追って明らかにしたいと思います。

データサイエンスちょっと興味ある

統計学、なんだか興味持てなそうなイメージがあったのですが、毎週のDFでKaggleのオープンデータセットを使ってシミュレーションや作図をしていたところ、意外にもその作業が楽しくて、データサイエンスという分野にちょっと興味が湧いてきました。

この先UoPeopleで統計を学べるコースは、選択科目の MATH 1281 Statistical Inference があるのでいずれ受けてみようと思います。他にも上級編の必修科目として CS 4407 Data Mining and Machine Learning(ラスボス感強い)があって、クラスタリング・回帰分析など学べるみたいです。今回覚えたことを忘れないようにしたい。

読んだ本

『データ分析の先生!文系の私に超わかりやすく統計学を教えてください!』

データ分析の先生! 文系の私に超わかりやすく統計学を教えてください!

コースが始まる前に数時間で読めて、基本用語をつかんでおくのにちょうど良かった本。以前この著者の数学編にも大変お世話になり、気に入っているシリーズ。

『データ分析のための統計学入門 原著第4版』

ledge.ai

無料で読めます。原著が英語なので、本文中に出てくる用語すべてに英語表記が載っているのがありがたい。日本語で調べものする際に表記ゆれがある用語がいくつかあって、初心者には混乱ポイントだったので助かりました。

『東京大学のデータサイエンティスト育成講座』

東京大学のデータサイエンティスト育成講座

統計学とデータサイエンスの関係がわかりやすい。サンプルはPythonですがRとの違いを比べるのもおもしろい。

CS 1103 Programming 2 の振り返り

コースの内容

my.uopeople.edu

CS 1102 の教科書の続きから始まり、引き続きJavaを使って次のことを学びます。

  • 例外処理
  • アルゴリズム(再帰・ソート)
  • データ構造
  • 計算量オーダー
  • BNF記法
  • コレクションフレームワーク
  • ジェネリクス
  • Swing GUIライブラリ
  • クライアントサーバモデル
  • ソケット通信
  • MVCモデル

などなど。

重そうなトピックが並ぶように見えますが、一つずつ深掘りするわけではありません。というのもこのコースは CS 1104 Computer Systems、CS 3303 Data Structures などいくつかの専門コースを受ける前の必修科目となっているため、その導入編として「将来的に学ぶいろいろなトピックちょっとずつ紹介します」みたいな意図があるのだと思います(たぶん)。

毎週の課題はこのような感じ。

Discussion Assignment

1センテンスの超絶シンプルかつ抽象的な質問に答える。ワード数の指定もない。が、この問いがよくできており、簡単にまとめることもできるが、エビデンスを得るためにAPI仕様書を読み込んだり、ベンチーマークしたり、サンプルを実装してアウトプットを見せるなど、いくらでも追求し甲斐がある。自由に書けるのでこの課題がいちばん楽しかったです。

Assignment

毎週プログラミングをする課題。お題が「チューリングマシンのテープを実装せよ」や「ウェブサーバを実装せよ」とかなので一瞬びっくりするが、基本的にゼロから何かを実装するようなことはなく、ベースとなるコードが配布される。その一部をカスタマイズしたり、新たな機能を追加するだけで大丈夫。

ただ、指示がわかりづらく(私の英語読解力の問題もあるが)、上から順に慎重に読み解かなければならないタイプの文章で、「やることだけ箇条書きにしてほしい...」といつも思っていた。一度は、配布されたコードがあることに気づかずにスクラッチしたものを提出してしまい、ボロボロに採点されて泣きました。

Learning Journal

その週の振り返りと、何かしら実装するエクササイズ。このエクササイズは non graded ですが念のため毎週出していました。木曜にソリューションが配布されるので、時間がない週はそれを写経して「今回は時間がなかったのでソリューションを見て実装しました」などと書いて出しても10点もらえました。

他のクラスの方によると、提出しないと減点されたそうなのでインストラクターのさじ加減はあると思います。

コースを終えての感想

プログラミング課題はコードレビュー

最初の頃のプログラミング課題で「実装されていませんでした」「実行できませんでした」などの不当な減点を受け、グレードアピールしてもお気持程度しか上げてもらえずこれはマズイぞ...となり(配点が30%もあるので)、今後どうしたら回避できるだろうか〜〜と悩んで出た答えがこれです。

プログラミング課題もある種のコードレビューなので、PRを書くみたいに「何を実装したか」を説明し、念の為実装した挙動をGIFアニでスクショして貼り、「何行目を自分のローカルパスに変えてね」などピアがつまづきそうな点を先回ってアドバイスし、概要を丁寧に書いて出すようにしたら、それ以降は90点満点もらえました。

たぶん一定数のピアはコードをちゃんと見ずに雰囲気で採点してる気がして、概要が事細かに書いてあると雰囲気で満点くれるのではないかと思います...。

私は今まで何も知らなかった...

私はn年もウェブエンジニアをやっているのに、アルゴリズムを学んだことがなく、普段何気なく使っている標準ライブラリにソートアルゴリズムが使われていることなども初めて知って、「プログラミング」今初めてやってるのかもしれないな...となりました。

ライブラリの開発者やOSSコミッターの方達本当にすごい、言語もライブラリもフレームワークも何もかももっと感謝して使おうって思いました。

このコースは初めて知ることも多くてためになったし、毎週異なるトピックに触れられて、しかもこれまでのコースに比べて一気にコンピュータサイエンスみを帯びるのでおもしろかったです。

読んだ本

※ 以下は、がっつりアルゴリズムの勉強が始まるものだと思い焦って読んだのですが、本コースで扱うのはソート・再帰・データ構造なので、丸々一冊読む必要はなかったです。

『アルゴリズム図鑑 絵で見てわかる26のアルゴリズム』

アルゴリズム図鑑 絵で見てわかる26のアルゴリズム

アルゴリズムとデータ構造なにも知らない状態での一冊目として取っ付きやすい。同名のスマホアプリもあり、データの動きなどをモーションで見られます。

『問題解決力を鍛える!アルゴリズムとデータ構造 (KS情報科学専門書) 』

問題解決力を鍛える!アルゴリズムとデータ構造 (KS情報科学専門書)

『アルゴリズム図鑑』の次に読むとちょうどよいレベル感で、どうコードを書けばよいかわかりやすい。サンプルはC++ですが基本的な機能に絞られているので、他の言語の経験があれば読めると思います。

『Think Data Structures 』

greenteapress.com

指定の教科書がどうしてもまわりくどく感じてしまい(私の英語読解力の問題もあるが)かと言って英語表現は知る必要があるので、代わりに読んでいた本。オープンリソース。著者は『Think Python』と同じAllen B. Downey。やっぱりこの方の説明読みやすい〜

まとめ

勉強時間はMATHが8.5時間/週、CSが10時間/週くらいでした。College Algebraを受けていた前Termと比べると約半分😇

今回は比較的平和だった分、次回の微積が怖すぎますが、引き続きがんばります。