実際にどうやってSQLとPythonを勉強するかという話

(本稿はMBAに来ていてかつプログラミングの経験がない方を想定している。SQL黒魔術やベイジアンモデリングなどを日々使っている方は生暖かく見守って頂きたい)

何かを学ぶにあたっては、大きく分けて二つの作業が要求される。インプットとアウトプットである。インプットとは知識を学ぶことであり、アウトプットとは知識を使うことだ。インプットした知識をアウトプットし、自分がきちんと理解しているか、また、次に学習すべき課題を見つける、というサイクルを回していくのが、究極的には勉強する、ということだと僕は思っている(GMATやTOEFLでも同じで、延々とインプットばかりしてはだめで、定期的に自分の現在地や、弱み・強みを把握できるような模試やPrepを受ける必要がある)。SQLやPythonに限らず、コンピュータ言語を学ぶ際も、このインプットとアウトプットのバランスが極めて重要になる。コンピュータ言語の勉強においてやっかいなのは、インプット -> アウトプットという学習のループを回す際に、環境依存、というとても大きな変数があることだ。

コンピュータ言語、というのは、日々日々アップデートされ、移り変わっていくものだ。その動機は、コードを走らせた際の効率性であったり、セキュリティに関する脆弱性であったりするが、鴨長明が現代にいたら、世の中にある"人"と"住処"に、間違いなくコンピュータ言語を加えていたであろうくらい、久しくとどまりたるためしがない。従って、自分が書籍などをベースに学んだものが、実際の実務で使えるか、という点には極めて大きな注意を払う必要がある。実際、Pythonが出しているリリースのスケジュールを見ると、とてもアクティブに開発がなされていることがわかる。https://www.python.org/doc/versions/

といっても、初めてコンピュータ言語を学ぶ諸子にとって、Python 3 対 Python 2 (これはもう決着がついているとは思うが)やOracle SQL 対 PostgreSQLといった論争に入ることにあまり意味はない。結局のところ、これらの環境変数は入社した先の会社のPolicyに大きく依存することになるし、会社毎に極めてローカルなルールを設定しているところだってたくさんある。気にかけておくべきなのは、今自分が何を勉強しているのか、という点と、学んだことを金科玉条のように扱ってはいけないということである。自分の学んだSyntaxがOracle SQLをベースにしていることを知っていれば、Stack OverflowでOracle to Redshiftのようなトピックは沢山あるし、トラブルシュートの方法も多々あるが、そもそも自分の知識が何をベースにしているかわからないと検索の仕方も限られてしまう。また、自分がMicrosoftの入社試験を受けているのに、Redshiftをベースにした話をするといった致命的なミスも避けられるだろう(Azure vs. AWS)。

さて、では上記のニュアンス及びインプットとアウトプットという点を加味した時に、何をどういった順番で進めていくのがよいのか。僕も多少のプログラミングの経験はあれど、SQLとPythonについてはゼロから勉強したので、自分の経験も含めて書いていってみたい。

まずはじめのステップは、SQLとPythonのどちらをやるか決めることだ。僕の経験上、二つの言語を同時並行すると頭の中が混乱する。この二つの言語は思想がかなり違うので、JavaとCをやります、という悪夢のようなシナリオ(いろいろな意味で)と比べればまだましかもしれないが、それでも最初はどちらかに集中することを強くお勧めする。個人的には、全く手続き型言語の経験がなければ、投資コストとリターンを考え、SQLから始めるのをお勧めしたい。SELECT、FROM、WHERE、GROUP BYという構造に当てはめれば、多少強引にでもデータを取ってこられるからだ。使えるようになるまでのハードルは、おそらくSQLの方が低い。

次のステップは、Code Academyである。とりあえずCode AcademyとGoogleでタイプし、SQL乃至はPythonのコースをとろう(日本にも同じようなサービスがあると聞いたことがあるが失念した。そちらでもいいと思う)。Code Academyが素晴らしいのは、テーマごとに、何をすべきか(インプット)という点をまず説明したうえで、書いたコードを実際に走らせて、通るか否かを判定してくれる(アウトプット)ところだ。初期の環境設定をする必要がなく、気軽に始められるのがいい。ジムで言えば、必要な機材に加えて着替えもタオルもプロテインも全部用意したので、手ぶらできてもらってOKです、というレベルの気軽さだ。それでいて、中身は結構しっかりしている。Code Academyをある程度やれば、その言語についての極めて初歩的な理解はついていると判断してもよいだろう。インプットとアウトプットが一度にできてしまうのが素晴らしい。

Code Academyを終えてしまったら、あとはもう実際に使い始めることをお勧めする。今どきのMBAであれば、データアナリティクスやマシンラーニングといったトピックの授業は当然あるだろうし、生徒主催のClubなどでも多くのプロジェクトが用意されているはずだ。大切なのは、自分に正直になることだ。初学者だがこのスキルを学びたいのです、という熱いパッションを前面に押し出していこう。間違ってもCode Academyを終えただけでEntry Level Python Skillなどと言ってはいけない。プロジェクトのチームメイトなどからの熱い視線を浴び、泣きながら徹夜することになること間違いなしである。こういった授業やプロジェクトベースで学ぶのがよいのは、多くの場合、自分の書いたコードなどを見てくれる人がいる(TAやクラブの先輩)ことだ。多くの会社においては、Code Reviewというプロセスがあり、エンジニアの方々は自分の書いたコードを他者にレビューしてもらうのだが、僕の知り合いの多くは、このコードレビューから本当に多くのことを学ぶ、と言う。恥ずかしさを捨て、自分の書いたものを他人に見てもらう、というのは上達の第一歩である(拙ブログもそういった心意気で書いている)。

さて、実際に授業やプロジェクトで使い始めることをアウトプットと考えると、インプットはどうするのか、という疑問が生じる。授業などである程度カバーされることもあるだろうが、この段階まで来た場合には、本を読んで理論面の学習をスタートすることをお勧めする。この段階に達した諸子にお勧めするのは以下である。

SQL
達人に学ぶSQL徹底指南書

Python
Introduction to Machine Learning with Python (O'REILLY)
Python Machine Learning (Sebastian Raschka)

SQLに関しては自前のデータベースがないとなかなか動かしずらい部分もあるが、Pythonに関してはこちらの本にもある通り、サンプルになるデータが色々なところに落ちているため、時間があれば写経をして、動かし方を学んでもよいのではないかと思う。尚、Pythonの参考図書が英語の本であるのは、決して、決して格好つけているわけではなく、実際にこれらの本を使ったためである。僕の場合、最初にRを始めて一年半ほどしてPythonに移行した都合上、かなり英語及びプログラミングに慣れた状態でPythonに取り組み始めた。従って、英語力不足からくる不便を承知で、安上がりな現地調達可能な本で勉強をしたという経緯がある。日本語の参考図書に明るくない点、お許しを願いたい(これらは鉄板本なので、調べたところ日本語訳も出ているようである)。蛇足にはなるが、Rに関しては、Rによるやさしい統計学、を使って学習を始めた。やはり最初は日本語の本の方が頭に入ってきやすいと個人的には思う。

尚、もし現在MBAに参加してない、乃至は、PythonやSQLを社内で使うようなプロジェクトが存在しない場合、SQLよりはPythonを優先することをお勧めする。SQLは実際に叩けるデータベースがないとある程度以上スキルを伸ばしていくのはつらい。一方で、Pythonについては、Syntaxに慣れるという意味では、At Coderのような選択肢があるし、データ分析、という意味ではKaggleがある。特にKaggleは諸先輩方がたくさんためになる解法やテクニックなどを残しているので、そういったものを見て勉強し、それらを解として、自分でタイタニックなどの問題に取り組んでみると、実戦に近い効果が得られるのではないかと思う。

尚、以上に取り組んだとしても、Data Scientistなどのデータ分析専門職として就職するようなスキルを付けるにはおそらく至らない点、ご了承願いたい。本稿はあくまで、"MBA生がデータ分析力、というのを売りとして就職する"、という点に主眼を置いて書いているため、"データを専門的に扱う職業に就く"、というのはまた全く違った世界の話である。言い換えると、目標はあくまで、自分でデータをとってきて、自分でデータをある程度分析することで仮説検証を自分で回す、という点であり、組織的な意思決定に影響を与えるような高度なモデリングや統計的な解釈といった役回りは想定していない。データ専門職として就職されることが目標で、統計や数学のバックグラウンドがない場合、MBAではなく、そういった専門の大学院の選考に進まれることを強くお勧めする。

コメント

  1. 匿名5/27/2020

    先日も匿名にてコメントさせて頂いた者です。大変参考になりました、有難う御座います!

    返信削除
    返信
    1. コメントありがとうございます!励みになります!

      削除

コメントを投稿

このブログの人気の投稿

Pythonで遊ぼう!英字新聞の難解度検証

グリーンカード狂騒曲