Goal: a,b,c の文字列の組み合わせを作りたい。例えば、abc, acb, bac, bca, cab, cba と6つ出したい。
How: itertools.permutations() モジュールを使う。
Result:
Oracle Application Express Notes | Apps development Notes | Google Cloud Platform | Python | apps test | Cool Beans | English | Books
2020/07/26
2020/02/09
GCP: Cloud Tasksにおける queueの設定 (GAEの特定のserviceへリクエストを投げたい) -- GAE 2nd gen, Python3, gcloud
・背景
GAEをタスクハンドラーとして使っている。
GAE-py の2nd Genへの移行に伴い、従来のapp engine task queueは
使えなくなり、Cloud Tasksへの移行が必要。
それに伴い従来のqueue.yaml の設定も不要。
今後は、コンソールからgcloudコマンドでqueueを作ることになるとのこと。
https://cloud.google.com/tasks/docs/migrating?hl=ja
そこで、試していたのだが、GAEのデフォルトじゃなくて、特定のサービスや、
バージョンに対してのリクエストの投げ方が解らずハマる。。。
http://[project ID].appspot.com/
ではなくて例えば、
http://[service]-dot-[project ID].appspot.com/
にリクエストを投げたい。
・Goal
GAEの特定のサービスに対するqueueを作成したい。
・How
gcloud コマンドで、--routing-overrideを設定すればよい。
[As-is]
XXX@cloudshell:~$ gcloud tasks queues describe queue-sample
name: projects/[project ID]/locations/us-central1/queues/queue-sample
rateLimits:
maxBurstSize: 100
maxConcurrentDispatches: 1000
maxDispatchesPerSecond: 500.0
retryConfig:
maxAttempts: 100
maxBackoff: 3600s
maxDoublings: 16
minBackoff: 0.100s
state: RUNNING
[変更]
XXX@cloudshell:~$ gcloud tasks queues update queue-sample --routing-override=service:test
WARNING: You are managing queues with gcloud, do not use queue.yaml or queue.xml in the future. More details at: https://cloud.google.com/tasks/docs/queue-yaml.
Updated queue [queue-sample].
[To-be]
XXX@cloudshell:~$ gcloud tasks queues describe queue-sample
appEngineRoutingOverride:
host: test.[project ID].appspot.com
name: projects/[project ID]/locations/us-central1/queues/queue-sample
rateLimits:
maxBurstSize: 100
maxConcurrentDispatches: 1000
maxDispatchesPerSecond: 500.0
retryConfig:
maxAttempts: 100
maxBackoff: 3600s
maxDoublings: 16
minBackoff: 0.100s
state: RUNNING
・Thanks!!
https://cloud.google.com/sdk/gcloud/reference/tasks/queues/update#--routing-override
GAEをタスクハンドラーとして使っている。
GAE-py の2nd Genへの移行に伴い、従来のapp engine task queueは
使えなくなり、Cloud Tasksへの移行が必要。
それに伴い従来のqueue.yaml の設定も不要。
今後は、コンソールからgcloudコマンドでqueueを作ることになるとのこと。
https://cloud.google.com/tasks/docs/migrating?hl=ja
そこで、試していたのだが、GAEのデフォルトじゃなくて、特定のサービスや、
バージョンに対してのリクエストの投げ方が解らずハマる。。。
http://[project ID].appspot.com/
ではなくて例えば、
http://[service]-dot-[project ID].appspot.com/
にリクエストを投げたい。
・Goal
GAEの特定のサービスに対するqueueを作成したい。
・How
gcloud コマンドで、--routing-overrideを設定すればよい。
[As-is]
XXX@cloudshell:~$ gcloud tasks queues describe queue-sample
name: projects/[project ID]/locations/us-central1/queues/queue-sample
rateLimits:
maxBurstSize: 100
maxConcurrentDispatches: 1000
maxDispatchesPerSecond: 500.0
retryConfig:
maxAttempts: 100
maxBackoff: 3600s
maxDoublings: 16
minBackoff: 0.100s
state: RUNNING
[変更]
XXX@cloudshell:~$ gcloud tasks queues update queue-sample --routing-override=service:test
WARNING: You are managing queues with gcloud, do not use queue.yaml or queue.xml in the future. More details at: https://cloud.google.com/tasks/docs/queue-yaml.
Updated queue [queue-sample].
[To-be]
XXX@cloudshell:~$ gcloud tasks queues describe queue-sample
appEngineRoutingOverride:
host: test.[project ID].appspot.com
name: projects/[project ID]/locations/us-central1/queues/queue-sample
rateLimits:
maxBurstSize: 100
maxConcurrentDispatches: 1000
maxDispatchesPerSecond: 500.0
retryConfig:
maxAttempts: 100
maxBackoff: 3600s
maxDoublings: 16
minBackoff: 0.100s
state: RUNNING
・Thanks!!
https://cloud.google.com/sdk/gcloud/reference/tasks/queues/update#--routing-override
ラベル:
gcloud,
GCP,
Google App Engine,
Python3
2019/07/27
GCP: Iphoneから、端末位置情報をIoT分析環境に送信する -- python, GCP, IoTcore
Goal: 「IoTデータ分析環境立ち上げ on GCP」の環境に対して、Iphoneから位置情報データをPushするサンプル。Iphoneをエッジ端末として活用して、色々できそう。
How
0. 前準備 Pythonista関連
a)Pythonista のインストール
https://apps.apple.com/jp/app/pythonista-3/id1085978097
b)Gitを使いたかったら、stashをインストール
https://github.com/ywangd/stash
c)説明サイト ググったらたくさんあると思いますが、私は、以下のリンクを参照させていただきました。ありがとうございました。
http://hitoriblog.com/?p=42145#Python-5
1. Pythonista を使って、端末の位置情報、スピード等を取得する
a)Iphone上で、位置情報などを確認してみる
2. GCPのPub/Subにパブリッシュする。これの詳細は、前出のブログを参照
a)GCP提供のサンプルプログラムをベースに追加加工する。
https://github.com/GoogleCloudPlatform/python-docs-samples/tree/master/iot/api-client/mqtt_example
をローカルPCにクローンして、Pythonの環境などをセットする。
cloudiot_mqtt_example.pyをベースに変更を加えたものが以下。
How
0. 前準備 Pythonista関連
a)Pythonista のインストール
https://apps.apple.com/jp/app/pythonista-3/id1085978097
b)Gitを使いたかったら、stashをインストール
https://github.com/ywangd/stash
c)説明サイト ググったらたくさんあると思いますが、私は、以下のリンクを参照させていただきました。ありがとうございました。
http://hitoriblog.com/?p=42145#Python-5
1. Pythonista を使って、端末の位置情報、スピード等を取得する
a)Iphone上で、位置情報などを確認してみる
2. GCPのPub/Subにパブリッシュする。これの詳細は、前出のブログを参照
a)GCP提供のサンプルプログラムをベースに追加加工する。
https://github.com/GoogleCloudPlatform/python-docs-samples/tree/master/iot/api-client/mqtt_example
をローカルPCにクローンして、Pythonの環境などをセットする。
cloudiot_mqtt_example.pyをベースに変更を加えたものが以下。
2019/06/09
文字列内の検索 str.find() str.rfind() --- Python3
Goal: 文字列の中に、特定の文字列が含まれているか? 含まれている場合は、INDEXを取得する。
How: 文字列メソッド find() 、rfind() を使う。
例)
01234567890123456789012345678901
THIS IS A PEN. THIS IS AN APPLE.
に、文字列が含まれているかどうかを確認する。
1: 'IS' を前から探す → 2が返ってくる
2: 'THIS' を前から探す → 0が返ってくる
3: 'THIS' を後ろから探す → 15が返ってくる
4: 'PINEAPPLE' を探す → 無いから、-1が返ってくる
Source:
Result:
-> % python test.py
2
0
15
-1
How: 文字列メソッド find() 、rfind() を使う。
例)
01234567890123456789012345678901
THIS IS A PEN. THIS IS AN APPLE.
に、文字列が含まれているかどうかを確認する。
1: 'IS' を前から探す → 2が返ってくる
2: 'THIS' を前から探す → 0が返ってくる
3: 'THIS' を後ろから探す → 15が返ってくる
4: 'PINEAPPLE' を探す → 無いから、-1が返ってくる
Source:
Result:
-> % python test.py
2
0
15
-1
2019/05/27
2次元配列を複数のKeyでソートする --- Python3
- Goal
2次元配列を複数のKeyでソートしたい
- How
itemgetterを使う。
- Example
入力)
Udon 500 大阪店
Udon 700 東京店
Ramen 1000 大阪店
Ramen 1200 大阪店
Udon 500 福岡店
Apple 100 福岡店
これを、メニュー(ABC順)→値段(高いものから)並べたい。 - Source
- Result
% python sort_itemgetter.py
Udon 500 大阪店
Udon 700 東京店
Ramen 1000 大阪店
Ramen 1200 大阪店
Udon 500 福岡店
Apple 100 福岡店
Before Sort
[['Udon', 500, '大阪店'], ['Udon', 700, '東京店'], ['Ramen', 1000, '大阪店'], ['Ramen', 1200, '大阪店'], ['Udon', 500, '福岡店'], ['Apple', 100, '福岡店']]
Sort by Price
[['Ramen', 1200, '大阪店'], ['Ramen', 1000, '大阪店'], ['Udon', 700, '東京店'], ['Udon', 500, '大阪店'], ['Udon', 500, '福岡店'], ['Apple', 100, '福岡店']]
Then sort by menu
[['Apple', 100, '福岡店'], ['Ramen', 1200, '大阪店'], ['Ramen', 1000, '大阪店'], ['Udon', 700, '東京店'], ['Udon', 500, '大阪店'], ['Udon', 500, '福岡店']]
2019/05/12
素因数分解 (試し割り法) の根本理解 - Python3
競技プログラミングサイトで遊んでいると、素因数分解の知識が必要となり、再勉強をした。
1.素因数分解を思い出す。
小さい素数から、割り算を繰り返して、これ以上どの数字でも割れないとなったら終了という理解。(以下の画像のイメージ)
これを、試し割り法というとの事。
2.試し割り法のアルゴリズムの理解を深める。
以下のサイトを参考にさせて頂いて、試し割り法のアルゴリズムを見た。
Thanks!!
・Pythonで素因数分解する
・素数と仲良しになる3つのプログラム
が、素人の為、正直良くわからない部分があり、1行づつ理解を深めて見た。
私の理解としては。。。
ある数(素数候補)として、初期値を2とする。
①”ある数(素数候補)”で割り切れるかどうかを見る?
②入力数字を”ある数”で実際に割り、商に置き換える。
①と②を割りきれなくなるまで繰り返す。
割り切れなくなったら、
③次に、”ある数”を1つ大きくして、①と②を繰り返す。
で、④残りの数を、”ある数”で割った商が、”ある数”よりも小さくなったら終わり。
何故なら、2から初めて、1づつ”ある数”を大きくしながらで割っていくので、
これより先、割り切れる事はない。(割り切れるなら、この段階にくるまでに割り切れているはず。)
。。。。ということで、説明は上手くないが、以下を実行して、腹落ちした。
以下、上記プログラムの実行結果。360を素因数分解している。
-> % python factorization.py
360
360の素因数分解をする。
CP1: 2で割り切れるかどうか調べる。
CP2: 2で割り切れたから、2を出力する。
この時点の商:180
この時点の出力予定:[2]
まだ、2で割り切れるかどうかを確認する。
CP2: 2で割り切れたから、2を出力する。
この時点の商:90
この時点の出力予定:[2, 2]
まだ、2で割り切れるかどうかを確認する。
CP2: 2で割り切れたから、2を出力する。
この時点の商:45
この時点の出力予定:[2, 2, 2]
まだ、2で割り切れるかどうかを確認する。
CP3: 2では、もう割り切れなくなったので、
次は、3で割り切れるかどうかを試す。
CP1: 3で割り切れるかどうか調べる。
CP2: 3で割り切れたから、3を出力する。
この時点の商:15
この時点の出力予定:[2, 2, 2, 3]
まだ、3で割り切れるかどうかを確認する。
CP2: 3で割り切れたから、3を出力する。
この時点の商:5
この時点の出力予定:[2, 2, 2, 3, 3]
まだ、3で割り切れるかどうかを確認する。
CP3: 3では、もう割り切れなくなったので、
次は、4で割り切れるかどうかを試す。
CP4: 5を4で、割ったとしても、商は4より小さくなるので、これ以上は検討不要。
残っている数を、最後の約数として追加する。ただし、1の場合は、無視する。
5を出力して計算終了。
output----
[2, 2, 2, 3, 3, 5]
小さい素数から、割り算を繰り返して、これ以上どの数字でも割れないとなったら終了という理解。(以下の画像のイメージ)
これを、試し割り法というとの事。
2.試し割り法のアルゴリズムの理解を深める。
以下のサイトを参考にさせて頂いて、試し割り法のアルゴリズムを見た。
Thanks!!
・Pythonで素因数分解する
・素数と仲良しになる3つのプログラム
が、素人の為、正直良くわからない部分があり、1行づつ理解を深めて見た。
私の理解としては。。。
ある数(素数候補)として、初期値を2とする。
①”ある数(素数候補)”で割り切れるかどうかを見る?
②入力数字を”ある数”で実際に割り、商に置き換える。
①と②を割りきれなくなるまで繰り返す。
割り切れなくなったら、
③次に、”ある数”を1つ大きくして、①と②を繰り返す。
で、④残りの数を、”ある数”で割った商が、”ある数”よりも小さくなったら終わり。
何故なら、2から初めて、1づつ”ある数”を大きくしながらで割っていくので、
これより先、割り切れる事はない。(割り切れるなら、この段階にくるまでに割り切れているはず。)
。。。。ということで、説明は上手くないが、以下を実行して、腹落ちした。
以下、上記プログラムの実行結果。360を素因数分解している。
-> % python factorization.py
360
360の素因数分解をする。
CP1: 2で割り切れるかどうか調べる。
CP2: 2で割り切れたから、2を出力する。
この時点の商:180
この時点の出力予定:[2]
まだ、2で割り切れるかどうかを確認する。
CP2: 2で割り切れたから、2を出力する。
この時点の商:90
この時点の出力予定:[2, 2]
まだ、2で割り切れるかどうかを確認する。
CP2: 2で割り切れたから、2を出力する。
この時点の商:45
この時点の出力予定:[2, 2, 2]
まだ、2で割り切れるかどうかを確認する。
CP3: 2では、もう割り切れなくなったので、
次は、3で割り切れるかどうかを試す。
CP1: 3で割り切れるかどうか調べる。
CP2: 3で割り切れたから、3を出力する。
この時点の商:15
この時点の出力予定:[2, 2, 2, 3]
まだ、3で割り切れるかどうかを確認する。
CP2: 3で割り切れたから、3を出力する。
この時点の商:5
この時点の出力予定:[2, 2, 2, 3, 3]
まだ、3で割り切れるかどうかを確認する。
CP3: 3では、もう割り切れなくなったので、
次は、4で割り切れるかどうかを試す。
CP4: 5を4で、割ったとしても、商は4より小さくなるので、これ以上は検討不要。
残っている数を、最後の約数として追加する。ただし、1の場合は、無視する。
5を出力して計算終了。
output----
[2, 2, 2, 3, 3, 5]
2019/01/06
round() の四捨五入では上手くいかない! - python3
Python3 では、round()による四捨五入は使えない!!
How: decimal モジュールを使う。
サンプルコード
# -*- coding: utf-8 -*-
#
from decimal import Decimal, ROUND_HALF_UP
i = float(input())
print("入力値")
print(i)
#
print("roundの結果")
ex_round = round(i,1)
print(ex_round)
#
print("decimalの結果")
o = float(Decimal(str(i)).quantize(Decimal('0.1'), rounding=ROUND_HALF_UP))
print(o)
結果
入力値
12.25
roundの結果
12.2
decimalの結果
12.3
How: decimal モジュールを使う。
サンプルコード
# -*- coding: utf-8 -*-
#
from decimal import Decimal, ROUND_HALF_UP
i = float(input())
print("入力値")
print(i)
#
print("roundの結果")
ex_round = round(i,1)
print(ex_round)
#
print("decimalの結果")
o = float(Decimal(str(i)).quantize(Decimal('0.1'), rounding=ROUND_HALF_UP))
print(o)
結果
入力値
12.25
roundの結果
12.2
decimalの結果
12.3
2019/01/05
Colaboratory すごい - Colaboratory + Python3 + Pandas
Google の Colaboratory を使ってデータサイエンス、機械学習にチャレンジをしてみる。
Goal:Google Colaboratory を立ち上げて、機械学習用のデータ・セットを読み込みデータをハンドリングする。主に、Pandas を使ってみるという内容。
How
1. Colaboratoryに新しいノートブックを作成する。以下にアクセスして、Python3のノートブックを作成する。
https://colab.research.google.com/
2. Notebook
Goal:Google Colaboratory を立ち上げて、機械学習用のデータ・セットを読み込みデータをハンドリングする。主に、Pandas を使ってみるという内容。
How
1. Colaboratoryに新しいノートブックを作成する。以下にアクセスして、Python3のノートブックを作成する。
https://colab.research.google.com/
2. Notebook
2019/01/01
標準入力の取扱 input と print - Python3
Goal:Python3での標準入力をハンドリングする。
#1 複数の値が1行に同時に入力された場合、数値として取り込む
入力値 --- 以下の3つの数値を入力したら、int型として取り込む
100 3 123456
(py3) toshi$ python python3-input.py
100 3 123456
output---
a=100
b=3
c=123456
#2 入力行数を最初に入力して、その後、複数行に渡る入力値を、配列として取り込む
入力値 --- 以下のように入力したら、3*3の行列として取り込む
3
1 2 3
4 5 6
7 8 9
(py3) toshi$ python python3-input2.py
3
1 2 3
4 5 6
7 8 9
output---
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
#1 複数の値が1行に同時に入力された場合、数値として取り込む
入力値 --- 以下の3つの数値を入力したら、int型として取り込む
100 3 123456
(py3) toshi$ python python3-input.py
100 3 123456
output---
a=100
b=3
c=123456
#2 入力行数を最初に入力して、その後、複数行に渡る入力値を、配列として取り込む
入力値 --- 以下のように入力したら、3*3の行列として取り込む
3
1 2 3
4 5 6
7 8 9
(py3) toshi$ python python3-input2.py
3
1 2 3
4 5 6
7 8 9
output---
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
登録:
投稿 (Atom)

