データ分析に3年従事したうえで目から鱗だったpythonの技法


バックグラウンド

現在、大学院でシミュレーションをメインに研究しています。

大学時代から、pythonでデータ分析などを行っており、やりたいことはできてきたつもりでしたが、この度Python 3 エンジニア認定データ分析試験を受験するために、教本を購入しました。

大体は知っている内容でしたが、今まで知らなかったこともあったので、備忘録としてまとめました。もっとなんかいい書き方とかあるやろ..と思ってる方向けの内容かなと思います。

包括的・体系的に知りたい方は、下記の本をチェックしてみてください。

「Pythonによるあたらしいデータ分析の教科書」(翔泳社)
著者:寺田 学、辻 真吾、鈴木 たかのり、福島 真太朗(敬称略)

目から鱗だったpythonの技法

loggingモジュール

バッチ処理などでprintを多用すること、あるあるですよね。
代替えの手段としてログを使用します。ポイントはログレベルを変えれることかな?
ログレベルは下記の5段階、下に行くほど重要度が高い。

  • debug
  • info
  • warning
  • error
  • critical

以下、例文
この例ではinfo以上が出力される。

import  logging 

logging.basicConfig(
    filename = 'test.log' #ログファイル名の指定
    level = logging.INIFO, format = '%(asctime)s:%(levelname)s:%(message)s' #ログレベルの指定
)

コーディング規約

pythonには標準となるコーディング規約があるみたいです。

PEP 8 - Style for python Code

例えば、複数モジュールをimportする際には、別々に書くとのこと。

import sys, os #PEP8 違反
#PEP8に準拠した書き方↓
import sys
import os

ここまでは、なんとなく知ってる..って感じでしたが、これをチェックしてくれるpycodestyleなるものがあるんですね!知らなかった。。

pip install pycodestyle
pycodestyle main.py

コーディング規約のプログラムを修正できます。

定義したけど、この変数使ったっけ..?

表題の通りです。
これをチェックするものにflake8なるものがあります。

pip install flake8
flake8 sample.py

あぁでもない。こうでもない。としているうちに、使っていない変数が増えてしまう時に有効です。

pandas describe

pandasのDataFrameにおける統計量はまるっとチェックできるものがあるみたいです。
それが、describe()メソッド。(メソッドの使い方あっているかな。。)
下記に例を示します。

df.describe() # df : DataFrame

これで、平均や最大・最小値を勝手に計算してくれます。

Jupyter Notebook マジックコマンド

%%や%ではじまるマジックコマンドがありみたいです。使えそうなのは、%%timeit`コマンドで、セル全体の計算時間を出力してくれます。
他にも、色々あるみたいです。参考までに下記を列挙します。

スクレイピングフレームワーク:Scrapy

pythonでのスクレイピングは、requestや、BeautifulSoup4,seleniumなどがよく使われますが、大量のページをスクレイピングしたい場合など、Scrapyがいいみたいです。