iMind Developers Blog

iMind開発者ブログ

python

Flask + SQLAlchemyでDBの操作

概要 Flask + SQLAlchemyを利用してテーブル追加・削除、レコードの登録・更新・削除、検索、リレーションを利用した検索を実行する。 データベースはSQLite使用。 バージョン情報 Flask==1.1.1 Flask-SQLAlchemy==2.4.1 ファイル構成 サンプルコードは下記…

Flaskでテンプレートのincludeやextends

概要 Flask+Jinjaテンプレートでincludeやextendsを用いてデザインを共通化する。下記を実装。 要素の一部をパーツ化して読み込む(include) HTMLの大枠の部分を共通化する(extends) バージョン情報 Flask==1.1.1 サンプルHTML こんなHTMLがあったとする…

PythonでTOMLファイルの読込みと編集

概要 PythonでTomlファイルを読み込んで値を参照する。 参照した値を編集してファイル出力する。 バージョン情報 toml-0.10.0 インストール pip install toml サンプルデータ 下記のデータを読み込ませてみる。 # 適当なtomlファイル a = 0 b = "hoge" c = "…

Flask-Loginを用いたログイン機能の実装

概要 Flask-Loginを用いて簡易なログイン機能を実装する。 具体的に実装される機能は下記あたり。 入力されたユーザー名とパスワードでログイン ログアウト ログインしていなければログインページにリダイレクト user/passwordをDB等と照合するような処理は…

Flaskでファイルアップロード

概要 FlaskでHTMLフォームからファイルをアップロードしてサーバー上に保存する。 バージョン情報 Flask==1.1.1 参考ページ https://flask.palletsprojects.com/en/1.1.x/patterns/fileuploads/ シンプルなファイルアップロード機能 postされたファイルをフ…

Pythonのimghdrで画像の形式判定

概要 Pythonのimghdrモジュールを使って画像ファイルの形式を判定する。 バージョン情報 Python 3.7.6 参考ページ https://docs.python.org/ja/3/library/imghdr.html ファイル名を指定して判定 pngファイルをimghdrで判定してみる。 test.pngというファイル…

Pythonからgitの操作

w## 概要 gitの操作をPythonから実行してみる。 cloneしてdiffを見てbranch切ってcheckoutしてcommitしてpushするまでを実行。 バージョン情報 Python 3.7.3 GitPython==2.1.11 インストール $ pip install GitPython clone import git # urlは適宜自身が編…

GoogleアナリティクスからPythonでレポートを取得する

概要 アクセス数等をGoogleアナリティクスからPythonで取得する。 導入 pip install --upgrade google-api-python-client 参考サイト https://developers.google.com/analytics/devguides/reporting/core/v4/quickstart/installed-py 前提条件 Googleアナリ…

IBM CloudのPersonality Insightsを使う

概要 Personality Insightsはツイートなどのテキストから書いた人の分析をします。 具体的にはビッグファイブ(知的好奇心、誠実性、外向性、協調性、感情起伏)の分析や、ミュージカル映画を好む、楽器の演奏経験がある等の分析結果が取れる。 価格 価格は…

Pythonでgoogle.protobuf.message.Messageをjsonに変換する

概要 GCPのAPIを使っているとprotobuf形式で結果が返ってくることがあるけど、そのままだと扱いづらいケースもあるのでJSONに変換する方法を確認する。 バージョン情報 protobuf==3.10.0 サンプルデータ 公式サイトによく出ているサンプルデータを生成して利…

pandasからSQLiteのデータの読み書き

概要 pandasで一時データを保存しておきたい時に、pickleやcsvで出すのも良いけどDBに出しておいた方が後で楽というケースがたまにある。そんな時に使いそうなSQLiteとの連携。 バージョン情報 Python 3.8.0 pandas==0.25.1 PythonでのSQLiteの利用 SQLiteは…

PythonでBigQueryの操作

概要 Pythonを利用してBigQueryのデータの追加、削除、検索を行う。 データはpandasで用意して投入する想定。 バージョン情報 Python 3.7.4 google-cloud-bigquery==1.21.0 導入 $ pip install google-cloud-bigquery BigQueryとCloud Storageが許諾されてい…

PythonからCloud Vision APIを叩いてOCR

概要 PythonからCloud Vision APIを呼び出して画像やPDFから文字を読む。 バージョン情報 Python 3.7.4 google-cloud-vision==0.40.0 インストール pip install google-cloud-vision Cloud Visionでできること 下記のようなことができる。なかなか多彩。 CRO…

Pythonのclickでサブコマンドの実装

概要 Pythonのclickでgroupを使うと1つのスクリプトに複数のサブコマンドを実装できる。 バージョン情報 Python 3.7.4 Click==7.0 最小限のサンプルコード 引数に応じて2つのコマンドを出し分けるシンプルなコード。 import click @click.group() def cli():…

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 ファイルの存在チェ…

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

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

Pythonのloguruでログ出力

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

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…

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…

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…

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

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

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 │ └── __…