iMind Developers Blog

iMind開発者ブログ

Pythonのloguruでログ出力

概要 Pythonのログ出力は標準ライブラリがすんなりとは使いづらいので、ログをより簡単に扱えるライブラリ、loguruを使ってみる。 バージョン情報 Python 3.7.3 loguru==0.3.2 インストール $ pip install loguru シンプルな出力 importしてinfoするだけで整…

PySparkでpartition数を指定してソートする

概要 PySparkで下記のようにソートしてからファイルに保存しようと思った場合。 df.repartition(5).orderBy(df.colA).write ... この記述は出力されるファイル数が5になることを期待しているが、orderByの際にpartition数が変動してしまう為期待した結果には…

PySparkでSparseVectorの生成と操作

概要 PySparkで機械学習系の処理をする際にSparseVectorに変換したいケースが多々あるのでそのあたりの処理を確認する。 バージョン情報 Spark 2.4.3 サンプルデータ いつもお世話になっているMovieLensのデータで、ユーザーごとの映画のレビューをSparseVec…

PySparkでDataFrameのランダムサンプリング

概要 PySparkでDataFrameから指定の割合や指定のレコード数でランダムサンプリングする。 バージョン情報 PySpark 2.4.3 サンプルデータ 1〜9999までの数値を持つDataFrameを用意する。 import pandas as pd import numpy as np np.random.seed(0) # 0〜100…

PySparkでlistからOR条件を生成する

概要 PySparkでlistの中に入っている値を使ってOR条件を生成したい。 例えばlistに[('a', 1), ('b', 2)]のようなtupleが入っていて、 (x='a' and y=1) or (x='b' and y=2) のような条件を生成する。 バージョン情報 Spark 2.4.3 サンプルデータ カラムx(char…

PySparkでhiveのpartitionを取得する

概要 PySparkでhiveのテーブルのpartitionから最新のものを取りたかった。 何か良い方法を前に見かけたような気がするのだけど思い出せないのでshow partitionsで取れた文字列をパースする。 バージョン情報 Spark 2.4.3 テーブル生成 partitionカラムとして…

PySparkでarrayのカラムに対してbroadcast join

概要 例えばMovieLensのデータで各ユーザーがどの映画を見たかを、movieIdのArrayで持っているテーブルがあったとする。 # userIdと映画のidの配列を持つDataFrame df.take(3) #=> [Row(userId='134990', movieIds=['2793', '743', '2572', '4159', '59369',…

PySparkのDataFrameをPagination

概要 大きいDataFrameをページで区切りながらtoPandas()して保存してみる。 バージョン情報 Spark 2.4.3 サンプルデータの用意 1〜100万までのIDとランダムなスコアを持つDataFrameを用意する。 import pandas as pd import numpy as np np.random.seed(0) #…

pandasのto_dictでdictionaryの生成

概要 pandasのto_dictは引数にいろいろなモードを指定できるので、それらの動きを確認しておく。 序盤はorientごとの結果の表示。後半はユースケース。 バージョン情報 Python 3.7.3 pandas==0.25.1 サンプルデータ カラムA〜Cを持つDataFrameを用意する。サ…

mypyでPythonの引数や戻り値の型チェック

概要 mypyを使ったPythonでの各種型チェックの方法についてまとめる。 最近はPythonでも型指定を真面目にやっている例を見かけことが増えてきた感がある。 バージョン情報 Python3.7.3 mypy==0.720 参考URL PEP 484 -- Type Hints https://www.python.org/de…

PySparkで複数のArrayカラムをconcatする

概要 Spark2.4から複数のArrayカラムをconcatできるようになったらしいので試してみる。 https://issues.apache.org/jira/browse/SPARK-23736 バージョン情報 Spark 2.4.3 サンプルデータ サンプルデータとして、3つのArrayのカラム(名前はfoo, bar, baz)…

Pythonのchardetで文字コード判定

概要 Pythonで文字コード判定をしたくなることはよくあるので、やり方をメモしておく。 バージョン情報 Python 3.4.3 chardet==3.0.4 サンプルデータの用意 utfとsjisのファイルを生成しておく。 $ echo " イエスは身を起こして言われた。「あなたがたのうち…

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つのカ…