Webアプリを作ろうとして、方法の検索からデプロイ(失敗した)まで色々試行錯誤したので、経過を記録しておく。目的そもそも作ろうと思ったのは以下のようなことが理由だった。途中まで作った日陰の計算を一般的に使えるものにしたい以前、道路にかかる影の割合を計算して、任意のルートの涼しさを調べようとしたことがあったので(「夏には日陰を歩きたい」という欲望を満たすために計算する)、これをローカルで実行できるだけでなく一般的に使えるようにしたいと考えた。考えた時点ですでに夏が過ぎていたので、涼しい道でなく暖かい道を調べられるよう、直射日光の量を計算するように変えた。Webサイトの仕組みについて、雰囲気だけでもつかみたい「ブラウザからリクエストが来たら、なんか処理して、レスポンスが返されるんでしょ...?」という非常にふわっとした理解だったので、「なんか処理」の部分がどのように作られているのか少しでもイメージできるようになりたいという気持ちがあった。普段仕事をしていても、エンジニアやデザイナーが何をして、サイトの表示やアカウントの登録等ができているのか、それを実現するコードがどのようなものなのか想像ができなかった。一緒に仕事するにあたり、詳しくはわからなくても、概略をイメージできるとよいなあという気持ちがあったので、自分で作ってみることにした。できたこと緯度経度と日時を入れたら、暖かいルートを表示する仕組みを作った(ローカルでは動く)できなかったことライブラリがうまく扱えず、デプロイができなかった※うまくできなかった部分の詳細については、こちらに記載した。Webアプリ」と検索した。DjangoとかFlaskというのが有名で、Djangoの方が色々やれることが多いらしいとわかった。自分のやりたいことに対してFlaskでもできるかの判断がつかず(多分できた)、Djangoでやってみることにした。24h最初にDjangoのチュートリアルをやった。丁寧に手順を追ってくれていてその通りに操作をすることはできたけど、各操作が何を目的としたものなのかや、全体的なファイル構成とかがわからなかったので、下記のような感じで各ファイルのつながりをメモしながら再度なぞってみたら少し理解ができた。この時点で実際に自分の作りたいものに着手して、よくわからなくなったら本や動画を参照する形で進めた。以下を参考にさせていただいた。18h以前計算した道路にかかる影の割合(「夏には日陰を歩きたい」という欲望を満たすために計算する)をベースに、暖かいルートをどのように計算したら良いか考えた。結果、厳密には正確ではないだろうが「距離当たりの体の受ける直射日射の量」で代替することにした。太陽から降り注ぐ日射のうち、角度のついた鉛直面の日射量を計算する方法を本やネット上の論文から調べた。計算に用いる道路の緯度経度をOpenStreetMapから得て、各道路の方位角と長さを求めた。大まかには、以下のような計算を行っている。28h日射の計算のコードを書いていたのが10hくらいで、残りはDjango関係のコードを書いていた。地図の表示や、Djangoでの画像の表示がうまくいかず、時間がかかった。コードはとりあえずこちらに置いてある。22h最初は別サービスを使ってデプロイしようとしたがうまくいかず(色々いじっているうちになぜかpipがうまく働かなくなり、最終的にOSの再インストールに至った)、Herokuを利用して進めていった。Herokuのアカウントを作って、チュートリアルをやった。丁寧に説明されていて、例となるコードをクローンして進める形だったので静的ファイルの取り扱い等も参考にでき、初めてでもすごくわかりやすかった。結局、ライブラリの扱いの部分でうまくいかず、年内の完成を目指していたのでいったん諦めることにした。※うまくできなかった部分の詳細については、こちらに記載した。やってみてどうだったか当初の目的に対し、どうだったかをふりかえる。結局デプロイできなかったので、一般に使えるものにならなかった。悔しいので、またもう少し理解が深まったら、つまづいた部分を解決してデプロイまで至るようにしたい。(Djangoの場合の)各ファイルがどのように関係して、サイトが表示されるのか(MTVモデル)がうっすらわかった。Djangoの内部でどのような処理が行われているかはわかっていないので、「フレームワークすごいな〜」という気持ちになった。Webサイトの作りについて、さわりだけ知れたかな...という感じ。統計検定を受けた時のふりかえりで「何に時間をかけているか意識をしよう」と考えてから、ちまちまと記録をしていたので、半年間の時間の使い方をふりかえってみる。以下、自分で「学び」系の区分に入れていた時間の内訳を記載する(なので、一般に「これは学びというより趣味なのでは...」という部分も含まれる)。7冊データ分析の手法や、業務として分析を進めていく方法などについて書かれている本を読んだ。読んだ中では、以下の本が一番実際の業務に当てはめながら読めて、学びが多かった。2冊scikit-learnのライブラリを利用して実行する方法と、機械学習に使われている数学の基礎について書かれた本を途中まで読んだ。半年で15hと、お前やる気あるのかという状態なので、来期はもう少しまじめに勉強する。62h上記で学んだ手法を実際のデータで試して遊んでいた時間。Notebookが散逸しているような状態で、自分の中に残っているものが少ないのが反省点。2冊Gitに苦手意識があったので読んだ。脳内のイメージは以前より深まったが、実際にその状態を作り出して試してみないと「わかった」状態にならないだろうなと思う。1冊まだ途中までしか読めていないけど、現在の自分にとっては学びが大きかったので最後まで読む。1冊ごく基礎の部分をひととおり知ることができてよかった。3冊よくわかっていないので読んだ。周りの人がごく普通に感覚として持っていることでも、自分は知らないなと思い、なるべく業務に関係しそうな本を読んだ。この辺は、知識として読んでよかったなと思う。カスタマーサクセス――サブスクリプション時代に求められる「顧客の成功」10の原則サブスクリプション――「顧客の成功」が収益を生む新時代のビジネスモデル逆に、直接的に業務とつながるわけではないけど、「面白い」と思ったのはこの辺り。世界最先端の企業はいかに〈信頼〉を攻略したかAirbnbが登場当初、「見知らぬ人の家に宿泊する」というアイデアへの理解・信頼を得るため、どのようなサイト構成にしたのかという部分が興味深かった。すいません、ほぼ日の経営。“いまは「あなたはなにもしなくていい」という商品ばかりが売れる時代です。手帳は、あなたがなにかをしなければいけない商品です。使いながら完成させていくものです。ぼくらは、いわば未完成品を売っているわけで、それを完成品にするのは使う人です。”色々条件は異なるけど、作ってもらうという部分は今の仕事で扱うサービスと共通で、なんかヒントがありそうだなと思った。社内で分析課題について探る時、「その業務に精通している人から的確に話を聞いて、分析課題に落とす」ことが上手くできていないなという気持ちから、インタビューにヒントがないだろうか、と考え読んだ。メモを取ってまとめたは良いものの、そのままになってしまっていたので、見返して日々に活かすにはどうしたらよいかを考える必要がある。12h仕事でPythonに触れる割合が減ったので、忘れないようにという意味合いもあって行った。作成のふりかえりはすでに書いた。LTで緊張したけど、一人で作っていたものについて人が話を聞いてくれて、感想まで教えてくれるってすばらしいなと思った。6hブログへのまとめに時間がかかっている。まとめ出すとよくわかっていない部分に気づいて調べたり、どう書いたらわかりやすいのか考えたりとかしているうちに時間がかかってしまっている状態。14h主に「今週のふりかえり」(何をしたか、何を考えたか)をしていた時間。今のところ「やっててよかった」と思う機会は訪れていない。23h仕事/仕事外両者について、「こういう分析やれないかな」「やるには具体的にどうしたらいいか」等考えていた時間。はずなんだけど、しっかりまとめてメモしていなかったせいで、かかっている時間の割には実りが少ない。28hPythonのライブラリ入れてうまくいかなくて調べたり、疑問に思ったことを調べたりしていた時間。26h「何やったか書くのめんどいな...」と思ってその場で書かないとこうなる。(1)〜(3)のいずれかに入ると思われる。記録を取ることで時間に対する感覚が転換した以前から、時間の使い方は毎日記録していた。それは睡眠x時間、仕事y時間...という項目別のレベルの記録だった。それだと、学びに対して「今週はx時間かー」というふりかえりになり、「いかに学びにかける時間を増やせるか」という見方になっていた。それが学びの中身を具体的に記録するようになったら、「この本読むのにもうx時間かかってるのか...急ごう」となり、「いかに短い時間で学べるか」という見方に変わった。どちらも「記録する」という点では同じなのに、自分の見方が逆に変わったのは面白いなと思う。漫然と学んでしまっているその週、仕事で触れていた分野だったり、図書館で偶然借りた本だったりを学んでいることが多かった。半年単位で集計すると数十時間かけていたことでも、ふりかえると「こんなにかけてた...?ていうか何も得てなくない...?」と思う分野もあった。「本を読んだ」分野だと、メモを取っていないと内容がほぼ記憶に残っていない(メモを取っていても、鮮明には残っていない)。娯楽として勉強する場合は別として)。今の自分の学びは、基本的に「データ分析の観点から役に立てるようになる」ためにやっているので、学んで「なるほど」で終わったら意味がないのである。この点の意識が不十分だったなと思う。半年あったら、もっとできるんじゃねーの、と思った総量的な意味でも、時間あたりの質的な意味でも、ふりかえるともっとできるよね?という感じ。図書館を利用することの弊害が出ている8割方の本は図書館で借りさせていただいて読んだ。図書館で借りることのメリットは、返却期限があることで、強制的に勉強する期限が設定できることだ。図書館で借りて「腰を据えて勉強しよう」と思った本は買って読むんだけど、そうすると「いつでも読める」と思ってしまう。結果、自分にとって重要度の高い本を読まずに、返却期限のある本を優先することになってしまっていた。バックアップはちゃんと取ろう6/29、PCが壊れ、ここ半年で学んでローカルに保存していたファイルやデータベースが消えた。バックアップの重要性が身にしみた。この記事もスマホで書いているけど、画面が小さくてつらい。review「『夏には日陰を歩きたい』という欲望を満たすために計算する」のふりかえりやろうと思った目的GW10日間チャレンジ今回、10日間という例年にない長期休みだったため、普段の勉強とは違い、何か具体的な課題に取り組みたいと考えた。課題への時間の見積もりができるようになりたい業務で分析課題を行う際、「どのくらいでできるか」と問われてもなかなか答えられなかった。これは、経験値が少ないことも当然あるのだけど、自分が「何の作業にどのくらいかけているか」をあまり意識できていないこともあると思った。今回、解決までが見通せていない課題に取り組む中で、どのような過程で何を考え、何に何時間かけたかを記録して、時間感覚を得たいと考えた。見えていないものを見える化してみたい普段漠然と感じていることを数字に落とし、それを視覚化することで容易に理解できる形にする。ある数字から何かを作るのではなく、数字化する部分からやってみたいと思っていた。当初は、地図の画像を読み込んで建物を検出し、それぞれに高さを与えて任意の時間における影を地図に重ねて描きたいと考えていた。結果的に、以下の理由により断念した。無料で使用できる白地図が見つからなかったので、OpenStreetMapを利用させてもらうことを考えた。自分の技量不足により、建物の輪郭を検出する際に、地図上の建物名や通り名等も検出されてしまい、うまくできなかった。建物高さを得るのが大変とりあえず自分の行動範囲だけでよかったので、Googleマップ等で目視で調べようかと思っていた。GW中に完成させるという目標に対し、それをしている時間がなかった。地図上の建物と高さを機械的に紐づける方法も思いつけなかった。8日目の時点で諦め、目標を「単純化した建物モデルに対し、道路の方位角ごとに影のでき方を調べる」に変更した。開始時点では、以下のような認識だった。無料で使える地図ってないのだろうかそのような認識から始めたので、作業は以下の3分野を並行して進めていくことになった。地図から建物外形を得る:地図に描かれた建物の枠線を検出しようとしていた。建物名や通りの名前が入った状態の地図から枠線をうまく検出できず、最終的に断念した。建物の座標を得る:テスト用の図を自分で用意し、その図の中の建物の枠線を検出し、コーナー部のみになるよう間引き、その座標を得ることができた。影を計算して描く:建物のコーナー部の座標に対し影の位置を計算し、影の枠線を描き、道路のうち影の重なる面積を求めた。ある経路の方位角を求め、日陰になる割合を求めた。3分野ごとの作業内容を時系列で示すと以下の通り。円の面積はかかった時間に比例している。灰色の円は結果的に不要だった作業を示す。かかった時間は全体で60時間、そのうち結果的に不要だった作業は9時間くらいだった。調べたり検討したりしていたのが12時間、コードを書いていたのが48時間くらい(後者はコードを書くために調べていた時間も多いとは思う)だった。60時間と聞くと「かかりすぎだな」と思うけど、上図のように一つずつの作業に分解すると、「今の自分の力だとそのくらいはかかるか...」という気もする。作業に取りかかる前にゴールを明確に設定する今回、8日目の段階で当初の目標を断念して目標を変えたため、結果的に無駄になる作業が出たり、回りくどいコードになったりしてしまった。開始当初の時点で「現時点の知識からして、10日間でこの目標を達成するのは難しそう」と感じていたので、変更した目標を当初から目標としていれば、もう少し短時間で目標を達成できたと思う。系統立てて進められるようにするやり方を調べるところから始める部分が多く、最後の数日になるまではずっと混沌の中で進めていた。「今どこまでできていて、何が課題なのか」を脳内で考えるだけでなく書き出して進めていけば、自分の脳内を整理する意味でもよかったかなと思う。普段の土日を何週か使って進めていたら、たぶん途中でやめていた。「遊びのコード書いてないで、普段の業務に直結することやろう...勉強したいこともたくさんあるし」となっていたと思う。「この10日間で完成まで持っていく、何らかの形にする」と決めてやったことで、集中してやることができた。段階ごとに自分で小さな問いを立てて、それをクリアするとゴールに近づいていく嬉しさがあった。今回の課題は、さらにそれが現実世界とつながっている面白さみたいなものもあったと思う。楽しかったけど、やっている最中は「どこが間違っているかわからない」「落ち着け」「あと3日なのに、全然ゴールが見えない」「ここ直したいけど数時間かかるだろうし」とほぼ焦燥感の中にいた。他者が作ってくれたライブラリを利用させてもらっているだけで、しかもうまく使えてないし、色々わかってないし、と道のりの長さを感じるけど、足元に目を落として一歩ずつ淡々と進んでいくしかない。review統計検定2級を受けた先日、統計検定2級の試験を受けた。感触がいまいちだった1ので、結果が出る前にふりかえりを書いてしまおうと思う。基本的に、過去問2を解くことを中心に学習した。その合間に、公式のテキスト3を読んだり、理解が曖昧で何度も調べる部分をまとめたりした。過去問の年度別に、正答を導けた割合の変化を時系列で見てみると下図のようになっている。一応、どの年度も解き直しをする度に少しずつできる割合が上がってはいる。今見ると、解き直しでも8割程度しか取れていないあたり、理解や演習が足りていない様子が表れているなと思う。大まかに次の3段階で理解が進んでいった。初期:理解していることが自分の中で整理できていない状態。全体の5割は解説を読めば理解できたけど、3割くらいは解説を読んでも理解できなかった。中期:公式テキストをざっと読んで自分の中で整理し、最低限公式的な部分は覚えてしまうことで、過去問の解説を読めばほぼ理解できるようになった。後期:1度理解しただけでは自分で再現できないような、あやふやな部分を解き直した(が、おそらく身についてはいなかった)。初見の過去問に対し正答を導けた割合と累積学習時間を重ねてみると、割と比例していることがわかる。この分野に対する学習がまだ初期段階だから、やるだけ理解が上がっていく楽しい時期にいるんだと思う。試験終了後に集計してみるまで、これほど時間を投入していたと思わなかった(合計で40~50時間の感覚だったのに、2倍くらい費やしている)ので、投入時間の割に自分の理解のレベルが低く感じ、数日悲しい気分になった。どの部分にこれほど時間がかかっていたのか?体感だけど、過去問に下記の時間をかけていたと思う。これに公式のテキストでの学習やまとめていた時間を足しても、おそらく60時間程度にしかならない。約30時間が闇の中である4。良いこともあって、社内でやってもらっていた読書会5に使用していた本(統計学入門6)に対する見え方が変わった。読書会中はだいぶ難しく感じて、「統計とかデータ分析やってる人ってみんな天才なのかな...?」「ていうか自分が向いていないだけか」と思ったし(今もこれはよぎる)、本に対し30回くらいは「いったい何言っているんだ...」と思った。統計検定の勉強をした後に見ると、理解できるようになっていて「かなりわかりやすく丁寧に書いてくれているな」「確かに入門の本だな」と思えるようになった(入門レベルだと判断できることと、その内容を完璧に理解できることはまた別ではあるが)。学習へのふりかえり今回、学習時間は記録していたけど、その中で何をしたかは記録していなかった。遊びとして記録していたから、最初にしっかり考えなかったけど、最後に何を見たいのかを考えて記録すべきだった。今まで学ぶ量(時間)を増やそうという方向に意識が向かっていたと思う。時間は有限で、さほど若くないのに新たな分野を物にしようとするなら、何をしたのか、それに時間がどれだけかかったのか、もう少し自覚的になる必要があると思った。試しに1ヶ月、勉強した時間とその内容を記録してみようと思う。自己採点だとほぼボーダーライン上だった。統計学入門」1ヶ月めに引き続き、読書会形式で一緒にやっていただいた。先月より内容的に難しく感じる部分が増えて、進捗としては本の半分を超えた程度。数式を追っていくとそうなることはわかるけど、その結論は感覚的には納得できない、というような部分で引っかかっていた。いった部分について、具体的にPythonで計算してみたりした。結果、納得とまではいかなくても、やる前よりはその概念に対する理解を少し進めることができた。上記の本を参考にしながら、Pandas等で何をすることができるか学び、実際のデータに適用してみて理解を深める、ということをした。先月やった1冊めの本(Pythonの基本的な使い方を網羅する本)では出てこなかったデータ分析のためのPythonでの書き方を知ることができ、先月より具体的なイメージを持つことができた。実際のデータを分析して、事業に貢献する会が始まった。実際のデータに触れるのはとてもテンションが上がる。学習用のデータと何が違うんだ、と言われると明確な差があるわけではないけど、おそらく、本当の出来事のデータであるという点と、そのデータを通して自分が貢献できる可能性があるという点が異なるからだろうと思う。(逆にいうと、貢献できなかったら自分の存在価値をどこで示していけるかというプレッシャーも当然ある)残り2つの領域が、データ分析における道具に当たるのに対し、この領域は分析の前提に当たる根幹部分だと思う。道具でない分、その身につけ方は不定形で捉えづらい。実際、上記の会でも話についていけない部分があって、一方でそれを理解できるようになるにはこれを学べばよい、という類いのものとも思えず、漠然と悩んでいる部分である(悩みが漠然としている点からも、考えの整理ができていないことを示しているなと思う)。当初は浅く広く事業全般を知ろうとしていたけど、割と今は上記の会のミッションに向けた知識のつけ方に向かっていて、まずはそれをしっかりやるべきだろうと思う。全体的なふりかえり学びの第2段階に入った(特にデータエンジニア領域)1ヶ月めは、本に沿って一項目ずつ押さえていく学び方をしていて、これはPythonの全般的な使い方を学ぶという目的に合致していた。今月やった2冊めは、本の内容を全て学び切るというより、データ分析という目的に向け、本は参考として自分を分析できる状態にすべく統合的に学ぶ必要があったのだと思う。それが当初は理解できていなくて、メンターの方の言葉で気づかせてもらえて、学び方を変えることができた。学び方は段階によって違うんだなと思った。学ぶ目的は、別に本の内容を完全に理解して再現できることでなく、その技術を使って自分のやりたいことをできるようになることである、という根本的なことを認識することができた。第3段階、第4段階とあると思う(例えば、今はまだできていないけど、関数の中身がどのように書かれているかのぞいてみるとか、他の人のコードを読んで書き方を学ぶとか)ので、学ぶ方法も深化していけたらいいと思う。3領域が融合し始めた統計学で学んだ分布をPythonで書いてみたり、実際のデータを使って分析し始める等の変化があった。1ヶ月目では完全に各分野を分けて学んでいる状態だったのが、それらの知識を統合し始める段階に入ってきた。知識はそれ単体で持っているよりも、自分の中で有機的につなげることができると面白くなってくる。今の立場は、各領域の専門家に比べると知識が浅く広く必要になる立場で、自分がどういう方向に向かっていくか意識しないと中途半端になる可能性もあると思うけど、この立ち位置ならではの面白さもありそうだなと感じた。事業の概要についてお聞きした。ユーザー側にいた時にはわからなかったサービスの現状や課題、目標を知ることができた。今知っているのは本当に概要のまとめで、もっと事業ドメインの知識やその肌感覚を知らないと、仮に分析手法が身についたとしてもできるのは表面的な分析になってしまうだろうと感じた。今後、特にディレクターの方が、日々何に取り組んでいるか、具体的に何を解決しようとして今何を考えているのかを知ることで、自分の中の理解を深めたい。CSの方が日々どんな問合せを受けているかという点もデータの宝庫だと思うので、お話をお聞きしたいと思った。1時間、読書会をしていただいた。1冊の1/3くらいまで進んだ。自分で読んで理解した内容を言葉にしたりホワイトボードに書いたりして、逆に理解できなかった部分を教えていただくような形式で進めた。読書会後、内容をまとめていると、実は理解できていなかったことに気づいて考え直すこともしばしばあった。今までは、初学者向けの本を数冊と、趣味でやっていた分析に必要な部分の本を読んでいるだけだったので、この本によって網羅的に知識を身につけることができると思う。統計学的にでなく数学的に理解ができず時間がかかった部分があったので、微積や行列など、統計に関連する部分の復習をしたい。読んで、不明な点を調べてレポートにまとめ、それに対しレビューしていただく形で進めた。データ分析の流れや各段階での注意点、データベースについて等。本で解説している用語に対し、その解説内で出てくる単語がわからないという状況だったので、調べる中でおぼろげにデータ分析の世界が見えてきたような知識レベルにいる。実際に分析をやっていくことで、こういうことを言っていたのかと理解できるようになるのではないかと思っている。分析結果の表現はその意図がなくても恣意的になってしまうので、自身に対する健全な猜疑心が大事という文が印象的だった。確かに、導いた結論を象徴している部分に注目しがちになるので、気をつけたいと思った。notebookに章ごとにまとめ、レビュー(不明点についての回答やコードの書く際の注意点など)していただく形で進めた。一応1冊最後まで一通りやった。前半は以前に自分で学んでいた内容と概ね重なっていたが、後半ジェネレータやクラスの辺りは初見の部分があり時間がかかった。腹落ちした感覚がない部分もあるけど、何度も触れることで頭の中にその分野の回路ができるので、定期的に復習するようにしたい。学習に対して、1ヶ月はあっという間だった。スピードを上げていきたいと思いながら、この業界にいる人はおそらく身についているのが当然なのであろうGitやシェルの使い方など、基本的な部分で引っかかって時間を食うことが多かった(自分で調べて解決する力が必要なので、無駄ではないとは思う。基本的な部分しかわかっていないので、もっと習熟する必要がある)。20代の時間を別分野の事に使ってきたので周りの方との差があるのは当然で、焦りはあるけれど、毎日今の自分にできる、自分の力を伸ばすためにできることは何か考えて、それに取り組み続けるしかないと思う。やりたいことはいっぱいある一方、1日で進むのは微量でもどかしいけれど、3ヶ月後、1年後の自分に期待するわくわくする気持ちがあって、自分は学び続けることができることを知っているので、がんばりたい。