iMind Developers Blog

iMind開発者ブログ

python

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

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

PySparkでUDFを書く

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

scikit-learnのPCAを使う

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

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つの引数を取るコードを書い…

PythonのclickのType一覧

概要 Pythonでコマンドライン引数を扱う際に便利なclickについて、利用可能なTypeについてまとめる。 バージョン情報 Click==7.0 Python 3.7.3 指定可能なタイプ 下記のTypeが利用できる。 string int float bool click.UUID click.File click.Path click.Ch…

gensimでword2vec

概要 Pythonでword2vecを実行する簡易な例として、gensimでWikipediaのリンク情報を用いて各記事の距離を出すコードを書く。 バージョン情報 Python 3.6.8 gensim==3.6.0 word2vec==0.9.4+2.g8204e5c 導入 必要なものはcondaで入れられる。gensimのword2vec…

pythonのrequestsでリダイレクト先を取る

概要 リクエスト先のURLが302等でリダイレクトをされた場合に、リクエスト先のURLを取得したい。 バージョン情報 requests==2.21.0 ソースコード リダイレクトURLを取るだけであればヘッダだけあれば良いのでgetではなくheadでリクエストを行い、レスポンス…

matplotlibで色をたくさん使う

概要 matplotlibで色分けしてグラフを表示したい時に、色をたくさん取ってくる方法について調べる。 バージョン情報 matplotlib==3.0.3 8色まで matplotlib.colors.BASE_COLORSで8色が出せる。用意されている色はb, g, r, c, m, y, k, w import matplotlib f…

PythonでWebスクレイピング

概要 仕事柄Webスクレイピングのコードを書くことがよくあるので、普段使っているコードをまとめておく。 バージョン情報 beautifulsoup4==4.7.1 requests==2.21.0 chardet==3.0.4 reppy==0.4.12 導入 $ pip install beautifulsoup4 requests chardet reppy …

Tensorflow2.0 alphaのBEGINNER TUTORIALSを読む - その2

概要 Tensorflow2.0のalpha版が出ていたのでBIGGINER TUTORIALSを読む。 バージョン情報 tensorflow-gpu==2.0.0a0 Python 3.7.3 読んだページ Get started with TensorFlow 2.0 for beginnersのクイックスタート、服の分類問題、回帰、モデルの保存とリスト…

Tensorflow2.0 alphaのBEGINNER TUTORIALSを読む - その1

概要 Tensorflow2.0のalpha版が出ていたのでBIGGINER TUTORIALSを読む。 バージョン情報 tensorflow-gpu==2.0.0a0 Python 3.7.3 読んだページ Get started with TensorFlow 2.0 for beginnersのクイックスタート、服の分類問題、回帰、モデルの保存とリスト…

Pythonのbuilt-in Error/Exception一覧

概要 Pythonの例外を投げる時に「どれ使おう?」と迷うことが多いので一覧を作成する。 出しやすい例外については実際に発生するサンプルコードを掲載。 バージョン情報 Python 3.6.8 built-inの一覧表示 ipythonより下記のhelpから表示。 help(__builtins__…

FaceNetを動かしてみる

概要 顔認識システムのFaceNetを使って顔の距離計算をしてみる。 バージョン情報 FaceNet Latest commit 096ed77 on 17 Apr 2018 顔認証の実装について 顔認証が可能な実装として他にOpenFaceがある。アルゴリズムはFaceNetに近い。 FaceNetはTensorflowとPy…

OpenCVとdlibによるFace Detection(顔認識)

概要 Face DetectしたかったのでOpenCVとdlibをそれぞれサンプルコードを動かす。 バージョン情報 Python 3.7.3 dlib==19.17.0 OpenCV==3.4.2 インストール condaで仮想環境作ってOpenCVとdlibを導入する。 pipとかjupyterとかscikit-imageとか他に使いそう…

pandasのファイル出力形式まとめ

概要 pandasにはcsvやpickle、parquetなど様々な形式でのデータ出力が用意されている。 各出力形式で実際にデータを出力して結果や実行時間を確認してみる。 実行時間はipython上で%%timeを用いて計測。小数点以下はround。記事の最後に実行時間と出力サイズ…

Pythonのpsutilでハードウェアの情報を取得する

概要 psutilでCPUのコア数、ディスクの空き容量、メモリの使用量等、ハードウェアの情報を取得する。 バージョン情報 Python 3.6.8 psutil==4.4.2 Ubuntu 18.04.1 インストール $ pip install psutil CPUのコア数 import psutil psutil.cpu_count() => 8 上…

PythonでElasticsearchの操作

概要 PythonからElasticsearchにデータの登録、検索、削除を行う。 バージョン情報 Python 3.6.8 (elasticsearch==6.3.1) Elasticsarch 6.5.4 導入 PythonのElasticsearchクライアントを入れておく。 $ pip install elasticsearch ElasticsarchはDockerで立…

pandasのapplyの進捗をtqdmで表示

概要 pandasで大きめのDataFrameに対してapplyすると、いつまで待てば結果が返るのか不安になることがあるのでtqdmで進捗を表示したい。 バージョン情報 Python 3.6.8 tqdm==4.31.1 pandas==0.23.4 サンプルデータ ランダムな数値で1万行のDataFrameを作成し…

condaのPythonのバージョン管理

概要 condaで使っているPythonのバージョンを上げたり下げたりする。 バージョン情報 conda 4.6.7 Pythonのバージョンを更新する envに作るのではなく $CONDA_HOME/bin/python 自身のバージョンを上げる場合。 実行前のPythonのバージョン $ python --versi…

Pythonで簡易な名前からの性別判定器を書く

概要 名前から性別を判定するのって簡単にできるのかな、ということで簡易な判定器を書いて試してみる。 バージョン情報 Python 3.6.8 scikit-learn==0.19.1 xgboost==0.72.1 テストデータ 名前一覧とか名前ランキング的なページをスクレイピングして27,326…

Pythonのsubprocessで標準出力を取得

概要 Pythonで外部コマンドを呼んで標準出力を文字列で取得する。 バージョン情報 Python 3.6.8 事前準備 標準出力と標準エラーに出力する下記のようなコード(out.py)を用意しておく。 import sys print('standard out') print('standard error', file=sys…

Airflowのdags内でairflow.cfgの値を参照する

概要 $AIRFLOW_HOME/airflow.cfgファイルに記述した内容をPythonのコードから取りたかった。 バージョン情報 Python 3.6.7 apache-airflow==1.10.1 settingsを参照する AIRFLOW_HOMEやDAGS_FOLDERの値はairflow.settingsに入っている。 import airflow # air…

Airflowでpythonのコードをspark-submit

概要 AirflowのSparkSubmitOperatorを使ってPySparkのスクリプトファイルをspark-submitで実行する。 バージョン情報 Python 3.6.7 apache-airflow==1.10.1 spark 2.3.1 PySpark側のコード 適当にHDFS上のファイルを読み込んで行数をcountするコードを書いて…

PySparkで行に連番を振る

概要 PySParkで行に0〜nまでの連続する数値を採番したかった。 バージョン情報 spark-2.3.1 Python 3.5.5 サンプルデータ 下記のような2つのカラムを持つCSVファイル(100万行)を利用。 $ gunzip -c foo.csv.gz | head -5 0,0.194617 1,0.184299 2,0.988041…

PySparkからJavaのクラスを呼び出してHdfsのファイル操作

概要 PySparkでHDFS上のファイルをちょろっと操作したい時の為に、JavaのクラスをPySparkから呼び出してlsしたりwriteしたりrmするサンプルコードをまとめておく。 バージョン情報 spark-2.3.1 Hadoop 2.6.0 Python 3.5.5 FileSystemの取得 まずは必要なJava…

PySparkでWikipediaのXMLをパースしてword2vec

概要 PySparkを利用して日本語版Wikipediaの全文を取り込んでわかち書きし、word2vecに放り込んでみる。 XMLのパース、わかち書き、word2vec等の全行程をPySpark上で行う。 バージョン情報 spark-2.3.1 Python 3.5.5 Janome==0.3.6 Janomeの動く環境を用意 S…

Pythonのmultiprocessingの進捗をtqdmで取りたい

概要 Pythonのmultiprocessing.Poolで並列処理をする際にtqdmで進捗を表示する方法の確認。 バージョン情報 Python 3.7.1 tqdm==4.29.1 導入 pip install tqdm サンプルコード Pool.imap、もしくはimap_unorderedを使えば進捗が出る。 import time, random f…

Pythonでファイルの行数を取るコード

概要 Pythonでファイルの行数を取るコードをシンプルな記述で書きたかった。 各コードに実行時間を記載しているが、これは1億行のファイル(520MB)をカウントした場合の数字。 バージョン情報 Python 3.7.1 単純にループしながらinclement 何も考えずに書く…