はじめに
だんないよ、nikkieです。
今回はもくもく会で取り組んだことを記事にしてみます。
もくもく会の概要
Pythonもくもく自習室 #7 @ Rettyオフィス - connpass
この勉強会について
週末の昼下がりに、Pythonに関するやりたいことを各自持ち寄り、ゆるゆると「自習」を進めていく会です。
など、Python使いおよびエンジニアライフのオアシス&知見を身につける「自習室」としてゆるくご活用いただければと思います。
※初心者歓迎です!(なお,ハンズオンなどはありません)
2017年12月からもくもく会に行って趣味でPythonを書いています。
#rettypyはちょくちょくお邪魔しています。
作業スペースが広くておしゃれで快適です。
取り組んだこと
今回は「Pillowでモザイクアート」のプログラムのアップデートに取り組みました。
- モザイクアートの前処理のプログラムをクラスを使って書き直し
- Slackのアイコンでモザイクアートが作れなかった件の原因調査
成果発表に使ったnotebookはこちらです。
http://nbviewer.jupyter.org/gist/ftnext/4915f414e967ce991d42a277617490a7
モザイクアートの前処理のプログラムをクラスを使って書き直し
モザイクアートを作る前に、素材に使う画像を代表する色を計算しておきます。
代表する色は平均値、中央値、最頻値に対応しています。
読みやすいコードよりも機能追加を優先した結果、
平均値で前処理をするプログラム、中央値で前処理をするプログラム、
平均値で前処理をするプログラムとファイルが分かれています。
平均値で前処理をするプログラムをコピーして数行変えて
中央値で前処理をするプログラムとしたという経緯から、これらのファイルの差分は数行です。
3ファイルに分かれているよりは1ファイルにまとめたほうがかっこいいと思い
クラスを使って書き直してみました。
学生時代や業務でクラスを書いた経験がほとんどないので、
理解を深めたかったというのもあります。
インスタンスメソッドはなんとなくわかる(selfを使ったやつという認識)のですが、
クラスメソッドとスタティックメソッドがだいぶ不安な感じです。
Pythonで、呼び出し方によってメソッドの振る舞いを変える - Qiita
(クラス名.メソッド名でクラスの中で呼び出しているメソッドは
スタティックメソッドでいいのかな?
デコレータつけてないけど動いてるのはなんでだ?)
クラスの中のスコープも理解が怪しいです。
手元に参考になりそうな本がなさそうなので、学習教材を探してみます。(PyQもいいかも)
必ずしもクラスを使う必要はなかったかもしれないというアドバイスをいただいたので
今後関数でも共通化してみて比較します。
(オブジェクト指向は設計をしっかり考えないと後々苦しむことになるそうです)
オブジェクト指向の勉強を進め、クラスを使うタイミングを見極められるようになりたいですね。
Slackのアイコンでモザイクアートが作れなかった件の原因調査
Python入門者の集いの懇親会でモザイクアートのライブデモをしたとき
Slackのアイコンをモザイクアートにしようとすると
エラーが発生して落ちるという問題がありました。
Slackのロゴでモザイクアートを作成しようとしたところ、IndexErrorが解決できない · Issue #12 · ftnext/mosaic-art-python · GitHub
今回調査したところPillowでopenしたImageのmodeが原因とわかりました。
Pillowでopenしたらピクセルの色はRGBAで扱えると思い込んでいたのですが、
Slackのアイコンはインデックスカラーでした。
そのため、ピクセルの値を取得するとRGBAの4要素のタプルではなく
1つの値(インデックスカラーを指す値)しか取れませんでした。
画像の平均値もインデックスカラーを指す値の平均値になるため、
RGBAの4要素を想定してモザイクアートを作ろうとするプログラムでは
index out of rangeのエラーとなっていました。
convertでRGBAに変換すると、モザイクアートにできることまで調べられたので
今後実装します。(openした後にmodeをチェックしてRGBAでなければconvertする想定)
感想
業務で機械学習をやっているのですが、統計のバックグラウンドがないのが
弱点になるように感じています。
(機械学習はやってみてうまく動けばいいという実際的なスタンスなので
統計の分野ではただし書きが付く平均値代入も抵抗なく使うようです。
機械学習をやっていると言っても、統計のバックグラウンドの有無で
話が噛み合わないことがあるんじゃないかと考えています)
可視化手法をまとめられていた方がいらっしゃり、
自分の弱点を補うための一歩目となるような発表でした。
Qiita記事化を楽しみに待っています。
経理の業務を楽にしたいということでPythonを勉強されている方がいらっしゃいました。
業務ではExcelファイルで突合せをされるそうです。
私が実装するなら、pandasでExcelファイルを読み込んで突合せの処理を実装するかと思います。
Python歴は浅いですが、浅いなりに他の人のPython学習をサポートできたらなと思います。
(もくもく会で助言がいただけてすごくありがたいので、自分も微力でも還元していきたい)
今回もありがとうございました。