Slack Incoming Webhook の利用

SlackではWebhookが利用できます。

Incoming Webhookは受信用のWebhookです。
送信用Webhookも利用できますが、まだ使ったことがないのでここでは触れません。

連携の登録

Slackにカスタムインテグレーションを追加します。

普段Slackのデスクトップアプリを利用している場合は、予めブラウザ上でサインインしておくとスムーズです。

  1. SlackのAppディレクトリを開き、Incoming Webhookを検索してアプリの個別ページを開く
  2. [設定を追加]をクリックし、新しいwebhookを登録する
    • ※ 設定1つにつきSlackの連携枠を1つ消費するので、用途別に設定を複数作るような使い方は無料プランでは厳しい
  3. チャンネルあるいはDMへincoming-webhookを追加する(設定の追加時のみ)
    1. チャンネルへの投稿: 投稿先チャンネル(あるいは自分へのDM)を選択
    2. [Incoming Webhookを追加]をクリックし、当該チャンネルにincoming-webhookが追加されたのを確認

設定の変更

Incoming Webhookの設定を変更します。

  1. チャンネルへの投稿: 投稿先チャンネル
  2. Webhook URL: Webhook利用時に使うURL(このURLにJSONペイロードを送信してアクションを起こす)
  3. 説明ラベル: インテグレーションの設定についての説明文(任意)
  4. 名前をカスタマイズ: Slack投稿時の名称が変えられる(デフォルトはincoming-webhook)
  5. アイコンをカスタマイズする: Slack投稿時のアイコンが変えられる(絵文字もアイコンとして設定できるが、アイコンとして表示される画像が絵文字と異なる場合がある)
  6. メッセージをプレビューする: 現在の名前、アイコンだとどういった表示になるかのプレビュー(アイコンに絵文字を選択した場合、画面を再読込するとアイコン画像が変化する場合がある)
  7. 設定を保存して終了

使ってみる

Webhook URLの取得

ミスがないよう、コピーして使う。
1つのWebhookURLを使い回している場合、再生成すると全連携が機能停止するので気を付ける。

  1. Incoming Webhookのページを開き、使用したいインテグレーション設定の編集ボタンを押す
  2. Webhook URLをコピーする

Webhook URLを叩く

PHP

Python

VBA

参考

NumPy where どの列を調べるか指定する

前回に引き続き、NumPyのちょっと便利な使い方です。

Numpy.where

は配列の中の要素を調べるための有名な関数で、皆さん使ってるかと思います。

標準的な使い方は下記の通りです。

import numpy as np

pieces = np.array([
[1, 0, 0],
[0, 0, 1],
[0, 0, 0]
])

array = np.array([1,0,0])

ndarray = np.where(array == 1, True, False)

print(ndarray)

#下記が出力されます。
[ True False False]

下記のサイトさんなどにも詳しいです。

NumPyで条件に応じた処理を行うwhereの使い方

他のサイトさんであまり紹介されていなくって、今回書いておきたいwhereの使い方が、2次元配列をwhereで調べる時に、列を指定する、というやり方です。

import numpy as np

pieces = np.array([
[1, 0, 0],
[0, 0, 1],
[0, 0, 0]
])

ndarray = np.where(pieces == 1, True, False)[1]

print(ndarray)

#下記が出力されます。
[False False True]

上記のように、whereの後にインデックス[1]をつけると、piecesの2列目(0からカウントなので、1は2番目)が1かどうかを判定して、True, Falseを返してくれてます。

Numpy 2つの配列を比較して重複していない要素を配列にする

前回に引き続き、NumPyについてのちょっと便利な関数を紹介してます。

setdiff1d()

という関数があります。

まずはサンプルです。

import numpy as np

array1 = np.arange(4)
print(array1)

array2 = np.arange(3)
print(array2)

print(np.setdiff1d(array1, array2))

#次のように出力されます
[0 1 2 3]
[0 1 2]
[3]
[0 1 2 3]


[0 1 2]

の差を教えてくれてますね。

ちなみに逆にすると、空の配列が出力されます。

import numpy as np

array1 = np.arange(4)
print(array1)

array2 = np.arange(3)
print(array2)

print(np.setdiff1d(array2, array1))

#次が出力されます。

[0 1 2 3]
[0 1 2]
[]

ちなみに、setdiff1dがあるなら、 setdiff2dがありそうですが、ありません!!

下記のようなやり方でできるようです。(確認はしていません)
https://stackoverflow.com/questions/8317022/get-intersecting-rows-across-two-2d-numpy-arrays

NumPy 0じゃない要素をカウントする

NumPyのことについてこれからちょいちょい書いておこうと思います。

NumPyはNumerical Pythonの略で、データを高密度のデータバッファに格納し、操作を行うための効率的なインターフェース…です。

ディープラーニングをやる上で、numpy使わないことはほぼないと思います。

しかし、今日まで私はNumPyについては

「うーん わからない時にその都度ググればいいかな」

とか思ってたんですが、♪違う違う~ そうじゃなーいー ってことに気が付きました。

っていうのは、次の理由からです。

  • リストなどより、NumPyでデータを扱った方がずっと早い。機械学習などでは、1万回ループするとか普通にありますが、一回のループで1秒遅いと、1万秒遅くなっちゃいます。
  • NumPyでやれることがわかってないと、データの整形とかがうまくできない
  • Pythonについては、意外とまだまだネット上の情報が少ない(日本語)。なので、ググる人のためになるかな~。

そこで、ここではNumPy自身がどう、とかよりも、目的に合わせて、私が便利だな~と思う関数とかを取り上げていこうと思います。

1回目は、ゼロじゃない要素をカウントする、count_nonzero、です。

import numpy as np

np_pieces = np.array([
[1, 0, 0],
[1, 0, 1],
[0, 0, 0]
])

res = np.count_nonzero(np_pieces, axis=0)
print(res)

#次が出力されます。
[2 0 1]
np.count_nonzero(np_pieces, axis =0)

のaxisですが、これは基準にしたい軸の数です。

軸って何?って思いますよね? …。 嫌い…軸……。(ノω・、) ウゥ・・・

とりあえず、2次元配列では、縦が軸が0、横が1です。今回は、np_piecesという配列の、縦方向が0軸で、縦方向に数えていくと、2,0,1、ということです。

何も指定しないと全部通してのゼロじゃない要素を数えてくれます。

import numpy as np

np_pieces = np.array([
[1, 0, 0],
[1, 0, 1],
[0, 0, 0]
])


res = np.count_nonzero(np_pieces)
print(res) 

#次が出力されます。
3

Python assertの使い方

Pythonにassertという宣言があり、こんな使い方ができますという紹介です。

めっちゃ簡単な話ではありますが…。

Pythonのコードを見ていると、ちょいちょいassert出てきて、ほげー と思ってたんですよね。

なんというか、assert はテストコード内で使うというイメージ。

しかし、Pythonでは、致命的なエラーなどを起こした場合、プログラムを止めることができ、しかも、それはデバッグ版だけで起こせるので、開発に便利だよ~ という感じです。

print("before")

a = 1
assert a == 2, "2じゃない"

print("after")

上記を実行すると

before
Traceback (most recent call last):
File "G:/ai_delivery/study12.py", line 4, in
assert a == 2, "2じゃない"
AssertionError: 2じゃない

Process finished with exit code 1


ってなります。

assertのところで終了しているので、print(“after”)は実行されません。

んで、開発の時にデバッグするためのものだよ~ という話なのですが、本番の時にこんなエラー起きたら大変!とか、理由を解明するのも「ええい、面倒!!」ということがあれば、次のようにコマンドラインオプション -Oをつけて実行すればAssertionErrorが出ません。

G:\ai_delivery>python -O study12.py
before
after

これは、大文字のO(オー)です。ゼロじゃないよ。