iMind Developers Blog

iMind開発者ブログ

Pythonでzipファイルの読み書き

概要 Pythonでzipファイルを生成したり、解凍したり、ストレージに展開せずにzipの中身を読んだり、既存のzipにファイルを追加したり等。 バージョン情報 Python 3.7.3 ディレクトリをまとめてアーカイブ 指定ディレクトリをzip圧縮する場合は shutil.make_a…

TensorFlow Liteでモデルのサイズを小さくする(v1.14.0)

概要 TensorFlow(Keras)で作ったモデルをTensorFlow Liteでコンバートする。 バージョン情報 tensorflow==1.14.0 この資料でやること TFLiteConverterには下記の4つのメソッドが用意されている。 from_frozen_graph from_keras_model_file from_saved_mode…

TensorBoardを使ってみる(v1.13.1)

概要 MNIST-fashionを例にTensorBoardで各種metrixを表示したり、画像を表示したり。 Keras利用。 バージョン情報 tensorboard==1.13.1 tensorflow==1.13.1 tf.keras.callbacks.TensorBoardの利用 tf.keras.callbacks.TensorBoard を設定しておくとmetricsの…

Pythonのresourceでスクリプトのメモリ使用量の制限

概要 resourceを使ってPythonで使うメモリにリミットをかけてみる。 指定メモリ以上を確保しようとするとMemory Errorで落ちるようになる。 バージョン情報 Python 3.7.3 psutil==5.6.3 resource.RLIMIT_DATA resource.RLIMIT_DATAはヒープサイズの上限を設…

PythonのfastavroでAvroの読み書き

概要 PythonでAvroのファイルを扱う。 avro-python3より速いと噂のfastavroを利用。 pandavroを使ったpandasとの連携も試す。 バージョン情報 Python3.7.3 fastavro==0.22.3 pandas==0.24.2 pandavro==1.5.0 インストール $ pip install pandas fastavro pan…

PillowとOpenCVで画像にテキストを追加する

概要 Pillowで画像を読み込んでテキストを表示する。ついでにOpenCVでも同じことをしてみる。 バージョン情報 Pillow==6.0.0 opencv-python==4.1.0.25 Pillowで画像の読み込みと表示 単純に画像を読み込んで表示だけするコード。 %matplotlib inline import …

spark-submit時に表示されるprogressの更新頻度を変える

概要 spark-submitした際にコンソールやweb ui、ログなどに表示されるプログレス表示。 ↑ こういうやつ 標準出力をログに落としていたらこれのせいでログサイズがデカくなり過ぎたので、更新頻度を調整してみる。 バージョン情報 Spark 2.4.3 progress周りで…

Open Image Dataset v5のデータを使って物体検知

概要 Open Image Dataset v5(以下OID)のデータを使って、SSDでObject Detectionする。 全クラスを学習するのは弊社の持っているリソースでは現実的ではない為、リンゴ、オレンジ、苺、バナナの4クラスだけで判定するモデルを作ってみる。 バージョン情報 P…

Tensorflow/modelsのdata augmentationの動きを確認する

概要 Tensorflowのmodelsのresearchのところにいる物体検知(object detection)系のコードで、data augmentation周りの処理がいろいろ用意されていたのでそれぞれの動きを確認しておく。 バージョン情報 Python 3.7.3 tensorflow-gpu==1.13.1 tensorflow/mo…

Pythonのmultiprocessingで複数の引数を渡す

概要 multiprocessingで並列処理をする際に引数を複数渡す方法をいつも忘れてしまう。 バージョン情報 Python 3.7.3 引数を1つだけ渡す 渡す引数が1つの場合はPool.mapやPool.imapでiterableな引数を渡すことが多い。 import time from multiprocessing im…

chart.jsの円グラフのラベルを線で指して表示する

概要 chart.jsの円グラフのラベルを線をびーっと引いてその先に表示するようにしてみたい。 完成図 バージョン情報 chart.js 2.8.0 chartjs-plugin-piechart-outlabels 1.1.2 通常の円グラフ まずは最低限のコードで円グラフを生成。 <html> <head> <link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.8.0/Chart.min.css"/> </link></head></html>

chart.jsの円グラフの中に値を表示する

概要 chart.jsで作った円グラフのグラフ内にパーセンテージを表示するようにする。 完成図 バージョン情報 chart.js 2.8.0 chartjs-plugin-datalabels 0.6.0 通常の円グラフ まずは最低限のコードで円グラフを生成。 <html> <head> <link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.8.0/Chart.min.css"/> </link></head></html>

PySparkでDataFrameのカラム名をrename

概要 PySparkでSELECTしたカラムの名前を変更する方法を確認する。 バージョン情報 Spark 2.4.3 サンプルデータ カラムfoo, bar, bazの3つを持つtmp_exampleテーブルを用意。 import pandas as pd import numpy as np np.random.seed(0) # 0〜100までの値が…

TFRecordの読み書き

概要 TensorFlowでTFRecordの読み書きをする。 バージョン情報 tensorflow==1.13.1 TFRecordとは 機械学習をする際に学習データがメモリに載せきれるようなサイズでない場合は、ストレージに置いておいて頻繁に読み込む必要がある。 TFRecordはその手の処理…

Pythonのcontextlibでwithに渡せる処理を定義する

概要 Pythonのwith構文で自動でリソースがcloseされる系の処理を、contextlibを利用して定義してみる。 バージョン情報 Python 3.7.3 contextlib2について contextlibは古いバージョンでは入っていないこともあるので、そうしたバージョンでも使えるようにco…

コンソールでCtrl+矢印キーを押した際に「;5c」や「;5d」になってしまう場合

概要 sshした端末上でCtrl + 矢印キーで1単語分移動をさせようとしたら「;5c」や「;5d」に変換されてしまい、移動ができなかった。 ~/.inputrcを編集してこれが可能なようにする。 バージョン情報 xfce4-terminal 0.8.7.4 記述内容 ~/.inputrc にこう書けば…

Spark SQLのヒント文でINSERT OVERWRITE時のファイル数の制限

概要 Spark SQLでSELECTした値をINSERT OVERWRITEしようとした際にファイルが細かくsplitされてHDFSの容量をムダに喰ってしまうことがある。 Spark SQLではrepartitionヒント文を使うことで分割するファイル数を指定することができる。 バージョン情報 Spark…

PySparkでUDFを書く

概要 PySparkはUDF/UDAFが手軽に書けて便利。 バージョン情報 Python 3.7.3 Spark 2.4.3 サンプルデータ カンマ区切りの文字列が入ったカラムを用意して、それをsplitしたり戻したりといった処理をudfで実行してみる。 サンプルデータとしてA, B, Cの3つのカ…

t-SNEによる高次元データの可視化

概要 t-SNEとPCAでMNISTの手書き文字やファッション画像を2〜3次元に圧縮して可視化してみる。 バージョン情報 scikit-learn==0.21.2 Keras==2.2.4 (fashion_mnistのデータセットで利用) 手書き文字 - t-SNE - 2次元 sklearn.datasetsのdigitsを使って2次元…

PySparkでRDDからDataFrame変換時に型を指定する

概要 PySparkで整形したrddをtoDFしようとしたら下記のようなエラーが起きて怒られた。 ValueError: Some of types cannot be determined by the first 100 rows, please try again with sampling データを確認すると、処理結果の上位がNoneになっていて型の…

scikit-learnのPCAを使う

概要 PCAを使う用事があったのでscikit-learnを利用する。 バージョン情報 scikit-learn==0.21.2 Python 3.7.3 サンプルデータ ランダムにユーザーにアイテムを割り振るサンプルデータを生成してみる。 要件は下記。 ユーザー数は1万 アイテム数は3000 1ユー…

chart.jsでグラフ上に任意の画像を表示する

概要 chart.jsのグラフの上に任意の部分に画像を表示したかった。 バージョン情報 chart.js 2.8.0 動作確認ブラウザ Firefox 67.0 Chromium 75.0 作成する画面 みんな大嫌いなPie Chartで中央に黒い太陽の絵を置いてみる。下記のようなイメージ。 ただのPie …

Open Image Dataset V5を使ってみる

概要 Open Image Dataset V5をダウンロードして中身を確認する。 BoxやSegmentationの情報をplotしてみる。 Open Image Dataset V5とは Googleが公開しているアノテーション付きの画像データ 600カテゴリ、1585万のボックス 350カテゴリ、278万のセグメンテ…

PySparkでUDFをregisterしてSQLから呼び出す

概要 PySparkで作成したUDFをPythonやSparkの経験がない人にも使ってもらいたい時は、registerしてSQLで呼び出せるようにするとハードルが下がる。 本稿はpysparkでUDFを書く、spark.udf.registerでUDFを登録する、クエリから呼び出す、といった一連の流れを…

MLFlowを使ってみる3 - models

概要 MLFlowの機能をざっと試す第三弾。tracking、projectsと扱ってきたので今回は最後のmodelsについて。 modelsは生成したモデルをsave、load、predictなどの機能を持ち、コマンドラインで指定モデルを使ってpredictが実行できたりもする。 本稿では扱わな…

MLFlowを使ってみる2 - projects

概要 MLFlowの機能をざっと試す第二弾。前回はtrackingを扱ったので今回はprojects。 projectsはdockerやcondaでプロジェクトの管理ができる。本稿ではdockerは扱わずcondaを利用する。 バージョン情報 mlflow==1.0.0 experimentの生成 今回の例で利用するex…

MLFlowを使ってみる1 - tracking

概要 機械学習周りの処理のトラッキングとかモデルの管理をしたかったので比較的手軽に扱えそうなMLFlowを試してみる。 本稿では基本機能の1つであるtrackingを用いて、scikit-learnでパラメータを変えつつ学習を行い、モデルや結果を保存する。 バージョン…

pyarrowによるPythonでのHDFS操作

概要 PythonでHDFSの操作をしたかったので、pyarrowに入っているclientを使ってみる。 類似のライブラリは他にもいろいろあるけど、pyarrowはその中でもメンテナンスが活発に行われている方なので安心感がある。 バージョン情報 Python 3.7.3 pyarrow==0.11.…

githubのプロジェクトをpip install

概要 pip installする際にgithubのmasterや任意のブランチからインストールしたい。 バージョン情報 pip 19.1.1 サンプルプロジェクト helloworldと出力するだけの自前ライブラリを用意してgithubにpushしておく。 ディレクトリ構成 ├── helloworld │ └── __…

Pythonのclickでコマンドライン引数を扱う

概要 Pythonでコマンドライン引数を扱う際に便利なclickについて、ありがちなケースでの使い方についてまとめる。 バージョン情報 Click==7.0 Python 3.7.3 コマンドライン引数の取得 簡易な例として、name(string)とage(int)の2つの引数を取るコードを書い…