iMind Developers Blog

iMind開発者ブログ

PythonでTwitterの検索とタイムラインの取得

概要 PythonからTwitter APIを利用して下記を行います。 検索結果にヒットしたツイートの取得 指定ユーザーのツイートの取得 タイムラインの取得 とても面倒だということで名高いAPIのアカウント申請についてはここでは取り扱いません。 バージョン情報 Pyth…

Pythonのpathlib.Pathでファイルパスの操作

概要 Python3.4から導入されたpathlibでのファイルやパスの操作について確認する。 バージョン情報 Python 3.7.4 サンプルデータ 下記のようなパス構成に対して操作を行う。 ├── bar.txt ├── foo.txt └── hoge ├── fuga.txt └── gaz.txt ファイルの存在チェ…

GCPのNatural Language APIで感情分析や固有表現抽出

概要 GCPのNatural Language APIを使って文章の感情分析(ポジネガ)を出したり、エンティティ分析(固有表現を抽出)をしてみる。 Google Cloud SDKからの実行とPythonからの実行の2パターン。 コンテンツの分類機能もあるみたいなので使ってみたけど日本語…

CLIでGCPのインスタンスやストレージを操作

gcp

概要 GCPのCompute Engineのインスタンスの起動、停止、接続。Cloud Storageへのファイルの追加、削除を行う。 バージョン情報 Google Cloud SDK 268.0.0 gsutil version: 4.45 Cloud SDKのインストール 下記参照 https://cloud.google.com/sdk/downloads?hl…

Pythonでjsonの読み書き

概要 Pythonの標準ライブラリでdictionaryをjsonに変換して出力する。 また出力したjsonを読み込む。 バージョン情報 Python 3.7.4 サンプルデータ 本ページのサンプルコードでは下記のdictionaryを出力する。 obj = { 'foo': 'hoge', 'bar': [1, 2, 3, 4, 5…

PDFMinerでPDFのテキストと座標を取得

概要 PDFを読み込んでテキストを取得する際に、一緒にそのテキストが文書内のどの座標(x座標, y座標)にいるかも取得したい。 バージョン情報 Python 3.7.4 pdfminer==20191016 サンプルデータ Libreofficeのcalcを用いて下記画像のようなPDFファイルを用意…

Ubuntuでrbenvのインストール

概要 rbenvのインストールから基本的な操作まで。 バージョン情報 rbenv 1.1.2-4-g577f046 rbenvのインストール $ git clone https://github.com/rbenv/rbenv.git ~/.rbenv $ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/rub…

ginza(spacy)で固有表現抽出のtrain

概要 固有表現抽出を行いたかったので、spacyでnerのtrainを行ってみる。 例として既存のginzaのモデルでは「10,000円」はMONEYとして抽出されるけど「\10,000」は認識されない問題を解決するモデルを作成。 バージョン情報 ginza==2.2.0 Python 3.7.4 参考…

Ginzaで形態素解析、係り受け解析、固有表現抽出、ユーザー辞書追加

概要 Ginzaを使ってNLPでよく使ういくつかの処理を動かしてみる。 バージョン情報 ginza==2.2.0 Python 3.7.4 インストール pipで入れられる。 $ pip install "https://github.com/megagonlabs/ginza/releases/download/latest/ginza-latest.tar.gz" 詳細は…

PHPでTwigとDoctrineを利用してWebサイトを作る

php

概要 HTMLがある程度書けてPHP/JavaScriptも少しわかるという人がメンテするシステムがあったとする。生のPHPで書かれていてHTMLとロジックがかなり入り混じっている。 これを破綻させないように程よく改修する必要が出た場合、フレームワークを使うと担当者…

GCPのCloud ComposerでHello World

概要 Airflowの運用をGCP任せにできるCloud Composerを使ってPythonOperatorやBashOperatorを叩いてみる。 バージョン情報 Google Cloud SDK 264.0.0 composer-1.7.5-airflow-1.10.2 起動 GCPのWebUIからcomposerを選択し、environmentを作成する。 各項目に…

log4jsによるログ出力

概要 log4jsを使ってログ出力、フォーマットの変更、ファイル出力、ログローテーション等を行う。 バージョン情報 node v10.15.1 log4js@5.1.0 インストール $ npm i log4js コンソールへのログ出力 ログレベルをinfoに設定してログを出力してみる。 const l…

puppeteerでWebの画面操作とスクレイピング

概要 puppeteerを使って下記の項目などを実行する。 URLを叩いて結果をスクリーンショットとHTML本文の2パターンで保存する ページにテキストを入力してボタンを押す 当該ページに表示されている画像をまとめて保存する ページ遷移しながらスクレイピングし…

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…