barilog

エンジニアリング見習い雑記

csvファイルからjsonファイルを出力するコード

忘備録:csvファイルからjsonファイルを出力するコード

import csv , json

csvFilePath = "file.csv"
jsonFilePath = "file.json"
arr = []
#read the csv and add the arr to a arrayn

with open (csvFilePath) as csvFile:
    csvReader = csv.DictReader(csvFile)
    print(csvReader)
    for csvRow in csvReader:
        arr.append(csvRow)

print(arr)

# write the data to a json file
with open(jsonFilePath, "w") as jsonFile:
    jsonFile.write(json.dumps(arr, indent = 4))

リモートサーバのubuntuにおいてdockerで日本語自然言語処理環境を構築してjupyterを立ち上げてアクセスする

ubuntu自然言語処理環境を構築する方法

0.ubuntuインスタンスを作成

今回はGCPでubuntu16.04インスタンスを作成しました.

この過程に関しては他のブログをみてください

 

1.docker CEをインストール

https://docs.docker.com/install/linux/docker-ce/ubuntu/

こちらの通りにやれば大丈夫

 

2.docker imageをpullする

あたちの作ったimageをこのコマンドでpullしてくれい
$ docker pull baribariyusuke/python_japanese_nlp

 

3. 作業データを保存/継続利用するための適当なdocker volumeを作成する
$ docker volume create pythondata

このコマンドでpermisson errorが起こる場合は

以下のコマンドをうったのちにインスタンスに入り直してから上記のコマンドをうってくれい

  • $ sudo usermod -a -G docker $USER

 

4. docker コンテナの作成/起動を行う

 

(※ssh接続してローカルPCのブラウザからjupyter notebookで分析したいんじゃ!という方は6に移行してね)

 

 

$ docker run --rm -it -p 8888:8888 -v pythondata:/pythondata baribariyusuke/python_japanese_nlp

 

5. pythonを起動する

(base) # python3

 

あとは好きにしてくれい!

 

 

 

6. jupyter notebookを立ち上げる

(ローカルPC) $ ssh ubuntu名@IPアドレス -L 1234:localhost:8888

リモートサーバにログイン後

$ docker run --rm -it -p 8888:8888 -v pythondata:/pythondata baribariyusuke/python_japanese_nlp

(base )# jupyter notebook

これでローカルPCのブラウザでlocalhost:1234と入力してくれたらリモートPCのjupyter notebookに接続できます.

 

またここでssh接続してて外部IPがほにゃらら〜というエラーが出たら

かわりにこちらのコマンドをうってください

(base )# jupyter notebook --ip="0.0.0.0"

 

これでたぶん接続できる

 

SQLのSELECT文で最初と最後のレコードを取り出すクエリ

こんな感じ

(select * from market_Ohlc where currency_pair='btcjpy'  order by close_time asc limit 1) union all (select * from market_Ohlc where currency_pair='btcjpy' order by close_time desc limit 1);



(select 任意のカラム from 任意のテーブル where 任意の条件  order by 並び替える基準となるカラム asc limit 1) union all (select 任意のカラム from 任意のテーブル where任意の条件 order by並び替える基準となるカラム desc limit 1);

VAEの損失関数の符号について

損失関数は最小化するものと一般には理解されていますが,VAEの損失関数は最大化するものとして扱われる場合が多いみたいです.これで混乱してしまう方がよくいます.

 

VAEの損失関数は対数尤度関数を変形したもので,

VAEの損失関数 = ReconstractionError - KLダイバージェンス

と定義される場合が多いです.対数尤度関数ですので最大化することが目的になります.

ただ,計算上VAEの損失関数を最小化するものと定義することも可能みたいです.

ロジスティック回帰では対数尤度関数 ln p(x)にマイナスをかけたものを損失関数としていました.

loss =  - ln p(x)

この場合対数尤度関数を最大化,つまり損失関数を最小化していくのが正しくなります.

VAEではロジスティック回帰と同じようなことをしない場合が多く

対数尤度関数の符号を逆転させません.

よって

VAEの損失関数 = ReconstractionError - KLダイバージェンス

 と定義される場合が多いと考えられます.

 

もし損失関数は最小化しないと気持ち悪い!という場合は単純に

VAEの損失関数 = -ReconstractionError + D_KL

と定義して損失関数を最小化するようにすればいいです.

参考文献

Variational Autoencoder徹底解説

https://qiita.com/kenchin110100/items/7ceb5b8e8b21c551d69a

https://qiita.com/iss-f/items/c43b23815fc6d15ae22e

http://tkengo.github.io/blog/2016/06/04/yaruo-machine-learning5/