ひよこ、通勤中。

通勤中の電車の中でひよこは何を思うのか。

しゃべる英語めも

日常会話

  • 平凡な mediocrity
  • がんばる
    • 努力する strive
    • もがき苦しみながらがんばる struggle
  • しようとしている I'd try to ~
  • XX時ならいいよ Any time after/before XX is fine.
  • こっそり見る sneak a peek
  • 頼みを受ける/断る accept/refuse

自己紹介

  • はじめまして(ビジネス) Pleased to meet you
  • {NAME}って呼んでね you can call me {NAME}
  • 20代後半です I'm late twenties.
  • 以前は〜に勤めていました。 I worked for ... .
  • 〜については結構経験があります。 I have a lot of experience in ...
  • 専門は〜です。 My specialty is ...

仕事便利フェーズ

  • 〜について話しますね Let's me explain about... .
  • 無料 for free / free of charge
  • 〜をお願いする I ask - to ~

食べ物

  • もやし bean sprout
  • なす egg plant

モデルを学習させるときのスクリプトテンプレート in Python

  • 標準出力とファイルのログを書き出す
  • 好きなコア数で並列処理する
  • デバッグ中はデータ数少なくしたい

みたいなときこんな感じでかいたの使ってる

import time
import argparse
import logging
import multiprocessing
from pathlib import Path

logger = logging.getLogger(__name__)
fmt = logging.Formatter('%(asctime)s [%(levelname)s] %(message)s')
stream_handler = logging.StreamHandler()
stream_handler.setLevel(logging.DEBUG)
stream_handler.setFormatter(fmt)
logger.setLevel(logging.DEBUG)
logger.addHandler(stream_handler)
logger.propagate = False


def main(args):
    logger.debug('log test')
    pass


if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--limit', default=None, type=int, help='Max data size')
    parser.add_argument('--log', default=None, type=str,
                        help='Path to log file.')
    parser.add_argument('--cpu', default=multiprocessing.cpu_count(), type=int)
    args = parser.parse_args()
    if args.log is not None:
        path = Path(args.log)
        path.parent.mkdir(parents=True, exist_ok=True)
        handler = logging.FileHandler(path, 'w')
        handler.setLevel(logging.DEBUG)
        logger.addHandler(handler)

    start = time.time()
    main(args)
    t = time.time() - start
    logger.info(f'Time: {t / 60:,.0f} min {t % 60:,.0f} sec')

ひらがな <-> カタカナ in pandas

import pandas as pd


def katakana_to_hiragana(text):
    d = {i: i - 0x60 for i in range(ord('ァ'), ord('ァ') + 86)}
    return text.str.translate(d)


def hiragana_to_katakana(text):
    d = {i - 0x60: i for i in range(ord('ァ'), ord('ァ') + 86)}
    return text.str.translate(d)


s = pd.Series(['あいう', 'アイウ', 'あqwせdrftgyふじこlp;'])
katakana_to_hiragana(s)
# 0                 あいう
# 1                 あいう
# 2    あqwせdrftgyふじこlp;
hiragana_to_katakana(s)
# 0                 アイウ
# 1                 アイウ
# 2    アqwセdrftgyフジコlp;

DaskでDataFrameをpartitionに分けて並列処理

Install

$ pip install "dask[complete]"

各partitionごとに何かを計算してmergeするイメージ

import pandas as pd
import pandas as pd
from dask import dataframe as dd


def func(series):
    return pd.DataFrame({
        'min': [series.min()],
        'median': [series.median()],
        'sum': [series.sum()]})


# 分割処理したいオブジェクト
s = pd.Series(list(range(100)))

# Daskに変換(npartitions:分割数)
ds = dd.from_pandas(s, npartitions=4)

# 帰ってくるデータの型を定義して
meta = pd.DataFrame({
    'min': [0],
    'sum': [0],
    'median': [0]})

# 計算の設定
res = ds.map_partitions(func, meta=meta)

# 計算の実行
d = res.compute(scheduler='processes')

print(d)
#    median  min   sum
# 0    12.0    0   300
# 0    37.0   25   925
# 0    62.0   50  1550
# 0    87.0   75  2175

dockerメモ

コンテナ起動

$ docker run -d -it ubuntu:16.04 bash

※ ubuntu:16.04はdockerイメージ名

コンテナのターミナルに接続

$ docker exec -it ${CONTAINER_ID} bash

コンテナの状態をコミット

$ docker commit ${CONTAINER_ID}

タグ付け

$ docker tag ${commit番号} ${REPOSITORY}:${TAG} #例 test:latest

イメージの削除

$ docker rmi ${REPOSITORY}:${TAG} 

docker imagesで確認できる

Docker Imageを保存/読み込み

保存

$ docker save -o ファイル名  ${REPOSITORY}:${TAG}

読み込み

 $ docker load < ファイル名