仕事やプライベートで調べたことのメモ書きなど(@札幌)

仕事やプライベートで調べたこと、興味ある事のメモ書きです。2016年4月から札幌で働いてます。※このブログは個人によるもので、団体を代表するものではありません。

WSL上のdocker engineの試行錯誤

自分がやろうとしていることがdocker for windowsだとうまくいかそうだったので、WSL(ubuntu)上のdockerについて試しました。

qiita.com

上記を試すも、以下にハマり・・・。

teratail.com

で、docker.io でなく、docker-ceを使うべし、というのをどこかで発見したので、
そちらで試しにやってみたところ、そこについては突破したっぽい!!

また別の壁に今はぶつかっているところですが・・。

Azure FunctionsでPythonを使うメモ(LinuxイメージのFunction追加&pyodbc&fbprophet編)

LinuxイメージのAzure FunctionsへのFunction追加ですが、基本はバイナリ依存するようなモジュールはすんなり追加できません。
それでも、pyodbcだと「--build-native-deps --no-bundler」だけでいけたのですが、fbprophetに結構苦戦。
最終的には「--build-native-deps --no-bundler --no-zip」のオプションでいけました。
function core toolが最新であることも重要かもしれません。
なお、作業は、WSL(Ubuntu)で実行しています。

ちなみにfbprophetは、Facebook社開発の予測ライブラリです。
facebook.github.io

xxxxxx$ python -m venv venv
xxxxxx$ source venv/bin/activate
(venv) xxxxxx$ func init
Select a worker runtime:
1. dotnet
2. node
3. python
Choose option: 3
python
Installing wheel package
Installing azure-functions==1.0.0a5 package
Installing azure-functions-worker==1.0.0a6 package
Running pip freeze
(venv) xxxxxx$ func --version
2.3.148
(venv) xxxxxx$ pip install pyodbc
(venv) xxxxxx$ pip install fbprophet
(venv) xxxxxx$ pip install scipy
(venv) xxxxxx$ pip install statsmodels
(venv) xxxxxx$ pip freeze > requirements.txt
(venv) xxxxxx$ vi requirements.txt (※「pkg-resources==0.0.0」を削除)
(venv) xxxxxx$ func host start (※ローカルでの稼働を確認)

                  %%%%%%
                 %%%%%%
            @   %%%%%%    @
          @@   %%%%%%      @@
       @@@    %%%%%%%%%%%    @@@
     @@      %%%%%%%%%%        @@
       @@         %%%%       @@
         @@      %%%       @@
           @@    %%      @@
                %%
                %

:
:
:

(venv) xxxxxx$ func azure functionapp publish MyXxxxxxFunc --build-native-deps --no-bundler --no-zip
Getting site publishing info...
Running 'docker pull mcr.microsoft.com/azure-functions/python:2.0'...done
Running 'docker run --rm -d mcr.microsoft.com/azure-functions/python:2.0'....done

:
:
:

(venv) xxxxxx$

Azure FunctionsでPythonを使うメモ(LinuxイメージのFunction追加編)

前回、DockerImage編でうまくいきましたが、DockerImageだと従量課金を選べないので、なんとかFunctinを登録する方式を探していました。ただ、思わぬ苦戦。単純な関数でもうまくデプロイできずに困っていました。

ところが、以下の投稿を発見して解決。
github.com

「pkg-resources==0.0.0」という行が、pip freezeで追加されるバグがあるようです。この行をrequirement.txtから削除することでデプロイして実行できました!どうぞお試しください!

Azure FunctionsでPythonを使うメモ(Dockerイメージ編)

Azure FunctionsはAzureのサーバーレス環境。Dockerイメージを作りそれを実行するパターンでやります。投稿を書いている時点では、Pythonサポート自体もプレビューなので、さほど情報も多くないです・・。

基本的なところは以下のページを参考に。
docs.microsoft.com
ちなみに、私の環境にはDocker or Windowsを入れるところからだったのでそこそこ長い時間をかけました。

  • Windows 10をproにアップグレード
  • Docker for windowsをインストール (ネットワークの設定を修正しないと使えなかった) ※前の投稿参考
  • Azure系のツールをインストール ※パスを通すことを忘れない

venvの環境へプロジェクト作成

Azure functionsを作成する場合はvenv環境で実施する必要があります。
qiita.com

python -m venv venv
venv\Scripts\activate
func init MyFunc --docker
(pythonを選択)

Functionを作成

cd MyFunc
(venv) func new --name "HttpTriggerMyFunc" --template "HttpTrigger"
(venv) docker build --tag my_func .
docker run -p 8080:80 -it my_func

この状態でlocalhost:8080にアクセスしてみると以下の画面が表示されました!

f:id:takumats:20181207140203p:plain
dockerコンテナの起動
そして、apiである、http://localhost:8080/api/HttpTriggerMyFunc?name=Taro にアクセスすると、「Hello Taro!」と表示されましたよ。

「現場ですぐ使える時系列データ分析~データサイエンティストのための基礎知識〜」を読みながらRでやってみたことのメモ書き1

祝日を利用して「現場ですぐ使える時系列データ分析~データサイエンティストのための基礎知識〜」という書籍を読みながらRをいじってみました。
書籍のサポートページが以下にあり、サンプルデータのダウンロードができます。

ちなみに、私は、Rはほぼ初心者です。以前にちょっとだけそれこそ体験だけしたことある程度。

gihyo.jp

R環境のセットアップ

この本ではR環境のセットアップについて1-5章あたりから紹介。以下からダウンロードできます。

Download R-3.4.4 for Windows. The R-project for statistical computing.

なお、この本では標準でついているRGuiを使って話を進めていますが、一般的にはRStudioという環境を使った方が便利そうなので、RStudioをその後にインストールします。

www.rstudio.com

これで準備完了。RStudioを起動します。終了時は q() と実行するそうです。

> q()

※RStudioからだったらアプリを閉じればいいだけですが・・。

Rで時系列データをいじってみる

先に紹介した本書籍のサポートページからサンプルデータをダウンロードします。
展開すると、「演習データ」というフォルダ内に「.RData」というファイルがあるので、それをダブルクリック。
インストールしたままだと、デフォルトのRの環境に関連付けされているので、RStudioを選択します。

すると、以下のように、環境内に取り込まれます。

> load("C:/Users/xxxxxxxxxxxxxx/exercise_data/演習用データ/.RData")

で、ここで以下のコマンドを実行すると、取り込まれたデータの一覧を表示できます。

> ls()
 [1] "data.cum.core30"   "data.cum.core30.2" "data.cum.return"  
 [4] "data.cum.return2"  "data.cum.train"    "data.cum.train.2" 
 [7] "data.log.core30"   "data.log.return"   "data.log.return2" 
[10] "data.price"        "Date"              "label"            
[13] "price4"            "return4"           "sample1"          
.......

ここでprice4の中身を見てみる。

> price4
    x5202 x7272 x4927 x4502
1      55   682  2460  3595
2      56   672  2543  3575
3      56   668  2544  3570
4      57   674  2500  3500
.......

データx5202を示すには、以下のように$で繋げてフルパス的に指定する必要がある。

> price4$x5202
  [1]  55  56  56  57  60  62  61  59  58  60  62  63  66  66  65  66  66  62  61  60  62  66  66  71  73
 [26]  73  73  74  72  70  68  68  68  72  74  74  81  85  86  90  87  86  91  92  92  91  89  91  90  86
.......

ここで、price4をattachしておくと、x5202を直接指定できる。

> attach(price4)
> x5202
  [1]  55  56  56  57  60  62  61  59  58  60  62  63  66  66  65  66  66  62  61  60  62  66  66  71  73
 [26]  73  73  74  72  70  68  68  68  72  74  74  81  85  86  90  87  86  91  92  92  91  89  91  90  86
.......

attachはusingやVBのwithみたいなものか。そのままだと、以降に収集つかなくなるのでdetachしておくのがおススメの模様。

> search()
 [1] ".GlobalEnv"        "price4"            "tools:rstudio"     "package:stats"     "package:graphics" 
.......
> detach(2)

attachすると2番目に追加されるというのが、rの世界の常識の模様・・。
まずはグラフを書いてみる!こういったことが簡単にできるのはありがたいですね♪

> attach(price4)
> par(mfcol=c(2,2))
> plot(x5202, type="l")
> plot(diff(log(x5202))*100, type="l")
> hist(diff(log(x5202))*100, breaks=seq(-10,20,2))
> detach(price4)

f:id:takumats:20180321173826p:plain
他にも、相関を見る散布図とかも簡単に描けます。

時系列データをいじってみる

話の流れ的にはARモデルの話なので、例えば株が前日にあがっていると、今日も上がりやすいとか、前日の挙動との相関があるかを調べます。

> plot(x=X.return[1:99], y=X.return[2:100])

f:id:takumats:20180321180025p:plain
ひとつ前のデータとはなんだか相関がありそうです。では、二つ以上前のデータとの相関も見てみます。Rには便利な関数が用意されています。

> acf(X.return)

f:id:takumats:20180321180305p:plain
なんでもそろってますね。この図はコレログラムというそうです。で、この図は自己相関係数を求めたものですが、例えば2ラグ2との相関にはラグ1との相関も含まれてしまっています。このテキストでは以下のようにわかりやすく説明されていました。

a. 今日の値には昨日の値が関係する。
b. 昨日の値には一昨日の値が関係する。
のいずれも成り立ちます。それならばaとbを組み合わせて、
c. 今日の値には、昨日の値を通じて一昨日の値が関係する。

一方で、一昨日の値が今日の値に関係している直接的な関係を調べるには、昨日の値の影響を除去することが必要となります。

このような係数を、偏自己相関係数というそうです。Rではこれも簡単に求められます。スバラシイ!

> acf(X.return, type="p")

f:id:takumats:20180321181238p:plain

今回はここまで。続きがあるのかは・・、不明。

「Azure DB for PostgreSQL/MySQL開発マネージャと話そう!(通訳&ビール有)」に行ってきました (2018/3/13@品川)

今日は久々に勉強会に参加♪
ossonazure.connpass.com

そのメモ書き。

  • Azure Database for MySQL and PostgreSQLはコミュニティ版を入れていて、その最新を入れるようにしている。
  • OSS on Azureをしっかりやらないと、Azureのサービスが危うくなりかねない。
  • Azureに載せるときに修正が必要になる場合、きちんとアップストリームに修正をコミットする。

MariaDBも同様だとすると、MySQLに比べてMariaDB on AzureはMySQLに比べて高機能??

  • High availability built-inでは、ゲートウェイみたいなのがいて接続先の切り替えとかを自動的にやるので、"Virtually no app down time"を実現。レプリカの用意が不要。on-the-flyでのスケールアップ/スケールダウンが可能
  • いつリリースされるんですか?(リリースされるまでは無料で使える)
  • 用途を考えるとIaaSの方がいい場合もある
  • PostgreSQLはIngres由来、開発はみんなで
  • 年に1回のメジャーバージョンリリース
  • 組み込み言語にいろんなスクリプトが使えるのが特徴(Pythonなど)
  • PostGISがある(GIS界のデファクト)
  • 9.6からマルチコアの性能を活かせる、96コアでも!セッション数を増やすとそれに合わせてスケール
  • OLAPで複雑クエリをマルチコアで実行可能(パラレルクエリ)
  • リリースはいつだ(Azure)←同じ話を去年もした
  • 昔はオープンのPostgreSQLでシステムを作ったことがステータスだったが、今は普通に使われており最近は事例の情報が出なくなった
  • EDB, PowerGres, Symfowareなどの多くのPostgreSQLベースの商用データベース
  • PG11は?並列処理強化、パーティショニング強化

セミナーセッションはここで終わり♪

「GAしそうです」のカンパーイ!
※数日内か?

ここから、飲みながらディスカッション~♪

  • ORCAS:コードネーム
  • PostgreSQLはコミュニティがロゴの版権をもっている
  • MySQLはオラクルが持っているのでロゴをつかえない→シャチ(ORCAS)
  • 実は去年中にGAになるはずだったが、GAの時期が伸びたのはなぜか?
  • 苦笑しながら・・・、品質と性能を重視したため。MSの中でも注目されている。
  • 独自拡張はするのか?今はしない方向か。
  • MSは某クラウドベンダーとは異なりユーザーの声を聴くようになっているよ、昔と違って。
  • GAだとどのくらいのサイズまで使えるか?とりあえずは1TBまで。※10TBくらいはないと困るし、数年後には100TBは欲しい。
  • マニラにはPostgreSQLユーザーはいなかった。
  • DWHも欲しいけど・・・日本のお客はデマンド高め。
  • 諸外国の事情に合わせるとしょぼいままになってしまうかも。例えば、外国で、ポスグレで100TB使うというのはない。
  • イチローが戻ってきたからシアトルも楽しいよ
  • 今はCPUのリソースのモニタリングしかできないが、メトリクスモニタリングのためのAPIも用意される予定。
  • Generation 4とGeneration 5はプロセッサの世代の違い
  • Attunity Replicate for Microsoft Migrationsいいよ

www.attunity.com

以上!

久々の勉強会は面白かった!

追記:
3月20日、GAが発表されました!
azure.microsoft.com