効果検証入門のpythonバージョンを書いてみた
ご無沙汰しております。 アカウントを作ったテンションで最初は頑張っていたけど、そのモチベが切れちゃっていたというやつですね。
言い訳をさせてもらえるのなら、精神的に疲れていました。主に人間関係によるものです。ちょっとずつ仕事を任せられる中でワークフローを覚えたり、レビューのやり取りをする中でどのようにコミュニケーションを取ればよいのかなぁと考え込んでいたのが原因かなと思います。それから周りの同じ年代に卒業した人たちのレベルが高いなあと打ちひしがれた感覚で若干鬱っぽくなっていたのもちょっぴりあります。仕事のレベルもですが、人間として自分なんかより優れているなあと思わせられることが多いですね。
まあ、それでも一歩ずつ進めるしかないと割り切ることにします。 弊社は今年度から中途入社の社員も必要に応じて新卒が受けるような研修の一部を受けられることになりました。社会人2年目の私にとってこの機会は大変ありがたいことで、今はそれを存分に生かして知識をインプットしまくっています。
最近はpandasやsqlといったスキルを体系的に学ぶ研修が受けました。せっかくなのでそれ関連のアウトプットをしたいと思い、直近読み終わった「効果検証入門」のコードをpythonで実装していきたいと思います! とりあえず一章の分を実装したのでこちらに置いておきます。 github.com
効果検証入門のpython実装は別の人がすでにやっていたかもしれませんが、トレーニングも兼ねているので自力で実装していきます。ただ、もし参考にすることがあった際にはその個所について言及いたします。
一応git(hub)の使い方の練習もかねているので、一石二鳥ですね!
Essential PySpark Chap1-2
前回に引き続きessential pysparkの第一章を攻めていく。
Big data processing with Spark SQL and DataFrames
Transforming data with Spark DataFrames
Domain Specific Language (DSL)という操作方法で構築されている
- immutable
- 各列はどんなデータ型も取れる
- 操作はtransformationとactionから構成される
- Transformations: あるデータフレームの操作が他のデータフレームに影響を及ぼすもの(e.g.. read, select, where, filter, join, and groupBy)
- Actions: ストレージへの書き戻しが発生するもの(e.g.. write, count and show)
RDDと比較したときの利点
- Spark SQLが最適な実行プランをいかなる言語でも設定してくれる
Lazy evaluation
遅延評価。その値が必要になった時、アクションが実行されるときに計算されるというやつ。
永続化やキャッシュを参照するようにすると計算を保持させることもできる。
実行計画の最適化に用いられるらしいがいまいち理解できていない…。
Summary
ここらへんは基礎的な内容。実際にコードをバカバカ叩くのは次くらいからか。
環境構築
PySparkの環境構築にはdocker hubからpyspark-notebookイメージを引っ張ってきて使っている。https://hub.docker.com/r/jupyter/pyspark-notebook
マウントセッティングもなんとかできたのでかなり便利に使えている。本当はdockerコマンドの意味も理解しないとなのでpysparkがある程度片付いたらそちらにも手を出します。
Essential PySpark Chap1-1
業務で使用するためこの本を読みながらコードとか試していきます。 本のリンクはこちら
https://www.amazon.com/Essential-PySpark-Scalable-Data-Analytics/dp/1800568878
Distributed Computing
Data Parallel processing
基本的な考え方はデータが分散して保管されている各ストレージにコードを持っていて処理を実行する。この考え方をMapReduceという。
- MapReduceを利用した並列処理は大きく三段階ある
Distributed Computing with Apache Spark
Apache Sparkでできること
RDDがデータを保存する基本的な考え方(Resilient Distributed Dataset)
- 1つのRDDが複数のpartitionに分けられる
- partitionはバラバラに複数のマシン上に保存されている
Higher-order functionsを使うことでRDDに処理を加えることができる。
# テキストファイルの中身string単位でRDDに保存する lines = sc.textFile("/databricks-datasets/README.md") # flatMapによって中のlambda関数を各stringに適用 words = lines.flatMap(lambda s: s.split(" ")) # ('文字', 1)という形のタプルに変換 word_tuples = words.map(lambda s: (s, 1))
Apache Spark cluster architecture
- Driver データの準備、executorの実行計画、executorが事故った時の対処など心臓みたいに大事
- Executor データを処理する所。労働者。
- Cluster Manager リソースの提供、タスク進捗管理、executorの監視など。中間管理職。
SQL 第2版 ゼロからはじめるデータベース操作、読みました
表題の本を読みました!現在、業務でPySparkを使って大規模データを使って機械学習させるって感じのことをやっています。そうなのですが、知識が不足していて結構手が止まっちゃうことが多いんですよね。特にgroupbyとかの操作だったりデータの可視化部分です。sqlを直接書くことはないのですが、データベース操作の基本的な考えを学べればと思い手元にあったこの本の何章かを読みました。
ウィンドウ関数はPySpark内ですとSQLでしか書けなかったはず、ランク付けしたいなぁって思った時に使った記憶があります。
他の機能についてはある程度の学びはありましたが、SQLを使って業務をすることになったら別途勉強するということで、この本に関してはこのぐらいで良いかなと思います。
業務はアウトプットの最高の機会だと思っておりますので、休日にいかにインプットしておくかが重要ですね。2月頭に転職してまだまだ知識不足はいがめないですが、日々研鑽していきたいです!
ブログ、やってみた
タイトル通りです。ブログ作ってみました。
目的は自分の学習内容のアウトプットやデータサイエンティストというクソでかワードでは伝わりにくい職種の説明、あとテンションに関する情報も発信していきたいです。
普段はnotionでメモ書きをしていましたが、まだこちらの書き方に慣れていないのでしばらく読みづらい文章が続くかもです、申し訳ない。