#目的
エンジニア?アナリスト?歴2ヶ月目の新卒社員が業務をやっていく中で最近学んだこと、これよく使うなあということを簡単にまとめたもの(今回はredash内でPythonを使ってみた編)。備忘録。実は第2弾。
→前回の記事はこちら
##そもそもとして
考えたら、いつPython使うんだろうと思い返してみる。
すると、お世話になっているチームのリーダーさんに今回はPythonを使ってっていわれて
もともとSQLでまとめている複数のデータを一元化したうえでひとつの結果として出力したいときに使っているなあと再認識。なので、今回はそこも関連させて学んだことをのっけられるといいなぁなんて超初心者ながらに思っています(忘れてたらゴメンネ)。とはいえ、やっぱりあくまで備忘録要素が強い投稿になると思うんで、なんだかんだ無秩序な書き方をして忘れてしまうのがオチかも。そこは暖かい目で見過ごしてください。
#取得するデータの時期を調整したい
営業をしている人が依頼しにくると、意外と多いのが、前月の控除とか売り上げが〜とか、現時点でのこれが〜とか時期を指定したデータの出力を求められることが多く、実はこれ、Pythonだと意外と面倒。調べて方法をわかりやすく書いているページが見つかっても、使っているバージョンが古かったりすると使えなかったりした。自分の場合は、こんな感じで解決。
##『今月』を指定
import datetime
month = datetime.date(datetime.date.today().year,datetime.date.today().month,1).strftime('%Y-%m-%d')
今回は年月のみを指定。年月日までの指定になるともう少し簡単にできそう(時間があるときにやり方をもう一度思い出したら追記予定)。
##『前月』を指定
import datetime
month = datetime.date((datetime.date.today() - datetime.timedelta(days=31)).year,(datetime.date.today() - datetime.timedelta(days=31)).month,1).strftime('%Y-%m-%d')
ただ、これは今思い返すとあんまりよくない書き方なのかも。
理由は、ひと月当たりの日数はまちまちで、とくに2月周辺になると、2月は28日しかないので『前月』の結果を正しく出力されない可能性があるから。作ったのが先月(8月)なので、これから問題が出てきたらクエリーとこのページを書き直す予定。
##『翌月の日数』を指定
import datetime
month = datetime.date.today().month + 2
if month == 13 :
month = 1
elif month == 14 :
month = 2
add_month = month
date = datetime.date(datetime.date.today().year,add_month,1) - datetime.timedelta(days=1)
これを応用すると、『翌月』を指定/さっきの『前月』を指定もできるのでは
#数字のトラブル解決法
##割る数が0のときの割り算の商を0にしたい
数字をいじっていると出力する頻度が必然的に高くなるのが、割合(率)。しかし、Pythonでは割り算をするときにいわゆる『割る数』が0のときはエラーになってしまい、出力されない(ZeroDivisionError)。
こういうときは、割り算の関数を設定してしまう。
def devide(x, y) :
try:
return x / y
except ZeroDivisionError:
return 0
##出力結果が小数点以下が表示されない
- 割られる数をfloat型に指定
#実行する前に確認すること
- SQLのカラム名が日本語のとき、UTF-8形式で正しくデータを得られるようにカラム名をu'カラム名'に書き直したかどうか
- くっつけたいデータ同士を共通する項目で紐づけしているか
↓具体的にはこういうこと。
for リスト/辞書名1 in 要素名1 :
for リスト/辞書名2 in 要素名2:
if リスト/辞書名1['共通する項目'] == リスト/辞書名2['共通する項目']:
・・・意外となかった。悔しい。
#感想
今日試しに2件書いたので、片方は完全に人に見せる気のない書き方で、こっちはこれから読む人がいるかもしれないと思って、少し語りかけるかのような書き方をしてみた~~(相手に擦り寄っていくスタイル大事)~~。
自分自身、Pythonに対して、未だに苦手意識があるので少しずつこれをなくしてうまく付き合っていけたらいいなぁ。
またいつか投稿ができるように、少しずつ知識を吸収していこう。おーしまい