Python
redash

re:dashでよく使うPythonの基礎まとめ

More than 1 year has passed since last update.

こんにちは、株式会社オズビジョン@seungyeon-kimです。

最近、データの集計のためre:dashをよく使っていますが、取得したデータからほしい情報だけ取り出したい時や、入力値を加工してデータを取得したい時があります。
その時、有用に使えるのが「Python」です。

実は私、Php以外は大学時代にJavaとC、遊びでrubyをちょっと触ったぐらいで、Pythonは初めてです。(rubyと使い方は似ていますが)
ですので、re:dashで処理の追加が必要な時、Pythonの使い方の調べにかなり時間がかかってしまいます。
その手間を減らすため、今回は自分がre:dashでよく使っているPythonの使い方を共有したいと思います。

クエリ関連

クエリにバインディングがしたい

query = '''SELECT * FROM TABLENAME WHERE COLUMN = ?'''

値の特定はできないが、データを渡してクエリを回したい時、主に使う方法が下記の二つです。

replace()を使って、文字を特定して置換する

# 文字列.replace(置換される文字, 置換する文字)
query.replace('?', データ)

reモジュールのsub()で、正規表現を使って置換する

import re
# re.sub(正規表現, 置換する文字列, 置換される文字列 [, 置換回数])
result = re.sub('\?', データ, query)

クエリ結果が0件かどうかを確認したい

len()を使って、データの長さを確認

データの長さを返すlen()を使います。
len()でデータの長さを取得して、長さが0かどうかを判断して処理を分岐します。

data = ['あ', 'い', 'う', 'え', 'お']
len(data) # 結果5

if notで、データがあるかどうかを確認

※ 追記 (2017/12/04 22:26)
@shiracamusさんよりアドバイスいただきました
0や空リストなどはFalseとして判定されます。

if not data:

入力値関連

カンマ区切りの複数データを配列にしたい

re:dashの入力フォームから入力してもらった値がカンマ区切りの複数のデータの場合、配列に作ってから処理をしたい時、ありますね。
その場合は、split()を使って、文字列を分割します。

text = 'おはよう, ございます'
# 文字列.split(切り分けする文字)
text.split(',') # 結果 => ['おやよう', 'ございます']

入力値の一部を切り出したい

特に日付データから、年と月を切り出したい!という場合、よく使います。

date = '20170911'
year, month, day = date[0:4], date[4:6], date[6:8]
>>> year
'2017'
>>> month
'09'
>>> day
'11'

おわりに

普段はPhpをメインで使っていまして、Php以外の言語はあまり触る機会があまりありませんでした。
そのため、最近re:dashで集計をしながら、ちょっとずつPythonを触っていて、やはり新しいことを学ぶのは楽しいな~と思っています。
re:dashも、pythonも、使い始めたばかりなので、Pythonもre:dashもガリガリ使っている方、またはもっといいやり方知っているよ!という方いらっしゃいましたら、ぜひコメントください。
次回の私の投稿は、Pythonまとめver2を投稿しますので、楽しみにしてください。


次の更新は、オズビジョン入社1年目で、大活躍中のENGから「新卒ENGが出くわした頻出IT用語集」を共有するらしいです!IT用語は、覚えても覚えても新しいものがどんどん出てくるから、ENGはもちろんIT系に働く人なら、常に勉強すべきものですよね。
すごく有意義な内容になると思いますので、ぜひ楽しみにして下さい!

おまけ

re:dashでPythonを使うコツとPythonの基礎まとめも共有します。
すごくわかりやすいので、ぜひ見てください。