- GOAL: レコメンドエンジンとしてElasticSearchを立ち上げ&セットアップする。その後、Google App Engine(GAE)から、ElasticSearchのAPIを呼び出して使う。
- POINT
1.GAEからの外部HTTP(REST API)呼び出しは、POSTで行うこと! GETは使うな!!
(GAE/Py27の環境で、requestsを利用して呼び出す場合)
2.Logstashは、必ず「Ctrl+D」で終了させること!
Ctrl+Zで終了させていたため、サービスが起動中となりハマりました。 - HOW
1.Martket Placeから、ELK(ElasticSearch+Logstash+Kibana)を起動
2.Logstashを使って、CSVデータをElasticSearchにロード
3.GAEから、ElasticSearchに検索クエリーを発行して結果を取得
----------------
1.Martket Placeから、ELK(ElasticSearch+Logstash+Kibana)を起動
・Bitnamiの仮想マシンを選択
・手順に沿って、選択をしていくだけ
2.Logstashを使って、CSVデータをElasticSearchにロード
3.GAEから、ElasticSearchに検索クエリーを発行して結果を取得
Oracle Application Express Notes | Apps development Notes | Google Cloud Platform | Python | apps test | Cool Beans | English | Books
2019/08/04
GCP: GAE/Py から、ElasticSearch(GCE上で稼働)を呼び出す -- Python
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/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]]
2018/10/14
GCP: Google App EngineのランタイムPython3.7を使ってみる2 -- Rest API
前回メモ(hello world with Python3.7)の続編。Restサービスの立上げ。
App Engine APIs が使えなくなっているので、代わりにGCPのPython用のライブラリを使う。(例えば、Datastoreの読み書きにndbは使えない。)
App Engine APIs が使えなくなっているので、代わりにGCPのPython用のライブラリを使う。(例えば、Datastoreの読み書きにndbは使えない。)
- Goal
GAE(Google App Engine) + python3.7ランタイム上にREST API(メソッドはPOST)を作成する。
APIが呼び出されたら、GCP(Google Cloud Platform)のDatastoreに新規Entity(レコード)を追加する。 - case
名前、点数、教科名をjsonでPOSTしたら、GCPのDatastoreに書き込みして、Keyを返信する。 - How
1. 開発前準備
1)開発環境に、google-cloud-datastoreをインストール
2)GOOGLE_APPLICATION_CREDENTIALS環境変数を設定
あくまで、ローカルでテストするために必要。
以下コマンドを打つと、betaコンポーネントのダウンロードを聞かれる。
「Y」を入力すると、ダウンロードされて環境変数の設定までしてくれる。
$ gcloud beta auth application-default login
2. requirements.txt の中身。google-cloud-datastoreも追加すること。
3. main.py の中身。
- Result --- curlのサンプルと結果
Toshiのhistoryが67点
$ curl -i -H "Content-Type: application/json" -X POST -d '{"name":"toshi","points":67,"subject":"history"}' https://.appspot.com/addtest HTTP/2 201content-type: application/jsonx-cloud-trace-context: 4140694e3538666bb96627febc6130e4;o=1date: Sun, 14 Oct 2018 14:08:21 GMTserver: Google Frontendcontent-length: 35alt-svc: quic=":443"; ma=2592000; v="44,43,39,35"
GCP: Google App EngineのランタイムPython3.7を使ってみる1 -- Hello World
GAEのStandard Environment に、Python3のランタイムがbeta版でリリースされていたので使ってみる。SecondGenerationというらしい。OPENCVかPillowが使えるかどうか?までテストする予定。まずはHello Worldまで。
https://cloud.google.com/appengine/docs/standard/python3/
https://cloud.google.com/appengine/docs/standard/python3/
- Goal
GAEのStandardEnvironmentにおいて、Python3.7のランタイムを使ってHelloWorldする。 - How
1. app.yaml, main.py, requirement.txt を用意する。サンプルは以下。
https://github.com/pumpkinpietea/py37.git
$ ls -lttotal 32-rw-r--r--@ 1 Toshi_Admin staff 817 Oct 14 11:22 app.yaml-rw-r--r-- 1 Toshi_Admin staff 101 Oct 14 10:08 README.md-rw-r--r--@ 1 Toshi_Admin staff 956 Oct 14 01:17 main.py-rw-r--r--@ 1 Toshi_Admin staff 197 Oct 14 00:11 requirements.txt2. ローカルでテスト
$ pip install -r requirements.txt
$ python main.py3. deploy
$ gcloud app deploy ./py37/app.yaml - Comment
1. libフォルダーに、pip -t でインストールは不要。逆にすべてrequirements.txtに記入する必要がある。
2. ローカルテスト用のdev_appsever.py は、使えない。
逆に普通に、local で実行すればよい。便利になった!3. deploy は、gcloud コマンドで実施が必要、appcfg.py は、使えない。
4. 普通のpython3をそのままGAE上で動かす事を狙っているようなので、Cとかのライブラリも動くと思われる。別途テスト予定。
ラベル:
Flask,
GCP,
Google App Engine,
Google Cloud Platform,
python
2018/09/02
GCP: GCP外のサーバーからDatastoreへデータをインポートする(GCPのKeyを使う場合)
- Goal
タブ区切りのテキストファイルをローカルマシン(OR AWSのEC2でも同じ)GCPのDatastoreにインポートする。pythonのプログラムで実施。
前のPOSTのKeyを自分で設定しないバージョン - Case
以下のようなテキストファイルを、Datastoreにインポートする。
想定するのは、DatastoreをGAEのマスタのように利用していて、バッチで更新をするようなケース。keyは、GCPで自動設定されるKeyを使う。
list.txtの中身(タブ区切り)
id shimei score
1234 山田 89
2341 田中 90
1238 佐藤 81 - How
1.GCPのコンソールで、Service Account Keyを作成する
形式は、JSON
権限は、DatastoreのOwner(これは、Import&Exportでも良いのかも?)
作成された、JSONはローカルマシンのどこかに設置する。
2.Google cloud datastore のクライアントライブラリをインストールする。
~$ pip install google-cloud-datastore
3.pythonのプログラムでインポートする。
##utf-8に変換⇒Unicodeに変換して、インポートすること!
あとで、Pythonから呼び出しをする事を想定している。 - Result
ラベル:
GCP,
Google Cloud Platform,
python,
開発環境,
仕事
GCP: GCP外のサーバーからDatastoreへデータをインポートする(keyを自分で設定する場合)
- Goal
タブ区切りのテキストファイルをローカルマシン(OR AWSのEC2でも同じ)GCPのDatastoreにインポートする。pythonのプログラムで実施。
Keyは自分で設定したい。
Keyを自分で設定する必要がない場合はこちら。 - Case
以下のようなテキストファイルを、Datastoreにインポートする。
想定するのは、DatastoreをGAEのマスタのように利用していて、バッチで更新をするようなケース。id をKeyとして登録したい。
list.txtの中身(タブ区切り)
id shimei score
1234 山田 89
2341 田中 90
1238 佐藤 81 - How
1.GCPのコンソールで、Service Account Keyを作成する
形式は、JSON
権限は、DatastoreのOwner(これは、Import&Exportでも良いのかも?)
作成された、JSONはローカルマシンのどこかに設置する。
2.Google cloud datastore のクライアントライブラリをインストールする。
~$ pip install google-cloud-datastore
3.pythonのプログラムでインポートする。
##utf-8に変換⇒Unicodeに変換して、インポートすること!
あとで、Pythonから呼び出しをする事を想定している。 - Result
ラベル:
GCP,
Google Cloud Platform,
python,
開発環境,
仕事
2018/07/29
リストの要素の重複排除とNone(空要素)の排除 − Python
- Goal
リスト型の要素の中の重複排除とNone(空要素)を排除する。
集合型(set)なら、重複排除は自動でできて、.discardでNoneは排除可能だが、リスト型で行いたい。理由は、リスト内の順番をキープしたいから。 - How
if で要素があるかどうか?と長さが0より大きいかを確認する。
※filterを使うとか、内包表記を使うとか色々載っていたが、これが一番分かりやすかった。。。 - Result
~$ python eliminating_duplication.py=== inputtextAaabBbbCCddffAaa=== after normalizeAAABBBBCCDDFFAAA=== normal list splitted by \n[u'AAA', u'BBBB', u'', u'CCDDFF', u'', u'AAA', u'', u'']=== normal list with splitlines[u'AAA', u'BBBB', u'', u'CCDDFF', u'', u'AAA', u'']=== eliminating duplication and None[u'AAA', u'BBBB', u'CCDDFF']
2018/02/25
GCP: GAE上にAPI(POST)を作成ーDatastoreの操作(Create) ー Python
- Goal
GAE(Google App Engine)上にREST API(メソッドはPOST)を作成する。
APIが呼び出されたら、GCP(Google Cloud Platform)のDatastoreに新規Entity(レコード)を追加する。言語・環境はPython+flask。 - case
名前、点数、教科名をjsonでPOSTしたら、GCPのDatastoreに書き込みして、Keyを返信する。 - How
1:開発環境は、以下でセットアップ
Ubuntu16.4 + Pyenv:Python2.7.13 on GCE
GCP: Google App Engine上にPython(Flask)アプリを立ち上げる手順
2:ライブラリのセットアップ
app.yaml に、flaskの記述を追加
- name: flask
version: 0.12
3:mainプログラム と curl 結果
4:Datastoreの結果
- Thanks!
ラベル:
Dev Tips,
Flask,
GCP,
Google App Engine,
Google Cloud Platform,
python,
Restful API,
仕事
2018/02/11
GCP: Google App Engine上にPython(Flask)アプリを立ち上げる手順
- Goal
開発環境も何も無い状態から、GAE(Google App Engine)上にFlaskアプリ(Hello World)を30分以内に立ち上げる。GAEは、Standard Environmentなので、Pythonは、2.7 - How
1. GCP上に新プロジェクト作成(xxxxx-test−0001) ⇒ 手順割愛
2. GCP上で、GAEを有効にする。 ⇒ 手順割愛
初めてのアプリ作成で、Pythonを選ぶ。
チュートリアルはやらなくて良いので、途中で抜ける。
1プロジェクトで、1GAEアプリしか持てない。
3. GCP上に新VMインスタンス(Ubuntu16.4)作成(dev001) ⇒ 手順割愛
TYPEはMicro(無料マシン)でOK。
別にローカルマシンがあればそれでもOK。
4. VM(dev001)の設定 ー 開発環境構築
4-1. 初期設定 + Pyenv + GAEのSDKの導入
以下のファイルを実行
~$ . UbuntuSetupForGAE.sh
4-2. Localに開発用フォルダの作成とPyenvのセットアップ
5. Deploy
localでのテスト。main.pyがあるディレクトリで以下を実行
$ dev_appserver.py .
Deploy。 main.pyがあるディレクトリで以下を実行する
$ appcfg.py update --noauth_local_webserver -A "project id" -V "version" .
6. 確認する。以下のURLにアクセスする。
https://”projectid”.appspot.com
これを使って、LineのBotなどマイクロサービスを立ち上げれる
main.pyの編集と必要なlibのインストールが必要
2017/12/02
Pyenv + virtualenv のセットアップ手順 on AWS-EC2
AWSのEC2 RHEL7.4(Ubuntuの場合は、パッケージの部分だけ違う) に Pyenv+virtualenv をセットアップする手順
1.インストール
2.チェックとちょこっと設定
#切り替え可能なバージョンチェック
1.インストール
2.チェックとちょこっと設定
#切り替え可能なバージョンチェック
[ec2-user@ip-10-0-0-174 ~]$ pyenv versions
* system (set by /home/ec2-user/.pyenv/version)
#インストール可能なPythonバージョンを確認
#インストール可能なPythonバージョンを確認
[ec2-user@ip-10-0-0-174 ~]$ pyenv install -l
Available versions:
2.1.3
2.2.3
2.3.7
2.4
2.4.1
2.4.2
#新しいPythonのバージョンをインストール
#新しいPythonのバージョンをインストール
[ec2-user@ip-10-0-0-174 ~]$ pyenv install 2.7.13
Downloading Python-2.7.13.tar.xz...
-> https://www.python.org/ftp/python/2.7.13/Python-2.7.13.tar.xz
Installing Python-2.7.13...
Installed Python-2.7.13 to /home/ec2-user/.pyenv/versions/2.7.13
#2.7.13が追加された。
[ec2-user@ip-10-0-0-174 ~]$ pyenv versions
* system (set by /home/ec2-user/.pyenv/version)
2.7.13
#2.7.13をベースに、"testpy"という環境を構築する
#2.7.13をベースに、"testpy"という環境を構築する
[ec2-user@ip-10-0-0-174 ~]$ pyenv virtualenv 2.7.13 testpy
Collecting virtualenv
Downloading virtualenv-15.1.0-py2.py3-none-any.whl (1.8MB)
100% |████████████████████████████████| 1.8MB 638kB/s
Installing collected packages: virtualenv
Successfully installed virtualenv-15.1.0
New python executable in /home/ec2-user/.pyenv/versions/2.7.13/envs/testpy/bin/python2.7
Also creating executable in /home/ec2-user/.pyenv/versions/2.7.13/envs/testpy/bin/python
Installing setuptools, pip, wheel...done.
Requirement already satisfied: setuptools in /home/ec2-user/.pyenv/versions/2.7.13/envs/testpy/lib/python2.7/site-packages
Requirement already satisfied: pip in /home/ec2-user/.pyenv/versions/2.7.13/envs/testpy/lib/python2.7/site-packages
#"testpy"が追加された
#"testpy"が追加された
[ec2-user@ip-10-0-0-174 ~]$ pyenv versions
* system (set by /home/ec2-user/.pyenv/version)
2.7.13
2.7.13/envs/testpy
testpy
#開発用のディレクトリ"pyproject"のPython環境を"testpy"に変更する
バージョン2.7.13へと変更された。
#開発用のディレクトリ"pyproject"のPython環境を"testpy"に変更する
[ec2-user@ip-10-0-0-174 ~]$ cd pyproject/
#今のバージョンは、2.7.5だが。。
#今のバージョンは、2.7.5だが。。
[ec2-user@ip-10-0-0-174 pyproject]$ python -V
Python 2.7.5
#Pyenvで変更すると
#Pyenvで変更すると
[ec2-user@ip-10-0-0-174 pyproject]$ pyenv local testpy
(testpy) [ec2-user@ip-10-0-0-174 pyproject]$ python -V
Python 2.7.13
バージョン2.7.13へと変更された。
2017/10/28
CSVファイルを読み込んでlist型と辞書型に格納 - Python
- Goal
PythonでCSVファイルを読み込んで、List型と辞書型、集合型に格納する - How
CSVモジュールのreaderメソッドを使う
マスターファイルを作る。 テキストファイル menu.csv
UDON001,500UDON0012,700SUSHI0123,1200TONKATSU001,2000RAMEN10,1000 - Result
(pytest2.7.13)~/pytest$ python CSVtoListDic.pyList[['UDON001', '500'], ['UDON0012', '700'], ['SUSHI0123', '1200'], ['TONKATSU001', '2000'], ['RAMEN10', '1000']]5Dic{'TONKATSU001': '2000', 'UDON001': '500', 'RAMEN10': '1000', 'UDON0012': '700', 'SUSHI0123': '1200'}5Setset(['TONKATSU001', 'UDON001', 'SUSHI0123', 'UDON0012', 'RAMEN10'])
5
2017/10/22
テキストファイルをRDBのテーブル(イメージは、品番マスターとか)風に使う - Python
- Goal
ChatBotが受信したテキストメッセージと、テキストファイル(CSV)をマッチングさせる。テキストファイルのままで、品番マスタの用に使って参照させる。 - 準備
マスターファイルを作る
テキストファイル menu.csv
UDON001,500
UDON0012,700
SUSHI0123,1200
TONKATSU001,2000
RAMEN10,1000 - How
1. unicodedata を使って、ひらがな・カタカナ・漢字判定と、全角・半角変換する
2. lineでテキストファイルから1行取得して、比較を繰り返す
3. 先頭からで一致したら抜き出す - 結果
(pytest2.7.13) ubuntu@ip-10-0-0-253:~/pytest$ python testmatch.pyUDON001,500 - Thanks!!
以下、参考にさせて頂きました。
http://minus9d.hatenablog.com/entry/2015/07/16/231608
ラベル:
ChatBOT,
Dev Tips,
Google App Engine,
python
登録:
投稿 (Atom)










