鈴木たかのりほか『Pythonエンジニア ファーストブック』読書メモ②

Pythonエンジニア ファーストブック

Pythonエンジニア ファーストブック

鈴木たかのりほか『Pythonエンジニア ファーストブック』の読書メモ
一覧はこちら
※データ分析の情報がほしかったため、第6章はほぼ目を通していません


第4章 スクレイピング

・Webスクレイピング……Webページから不要な情報を消して、必要な情報だけを取得すること
・クローリング……Webページからリンクを取得し、リンク先のWebページの情報を取得し……という処理を繰り返すこと
スクレイピング・クローリングの注意点
著作権利用規約に注意する
robots.txtに書いている内容に注意する
③Webサイトに負荷をかけないようにする

・Requests……指定したURLにアクセスし、HTMLデータを取得するパッケージ
・Beautiful Soup 4……HTMLの内容を解析するパッケージ
・Beautiful Soup 4でHTMLを解析する方法
①html.parser(標準)……Python標準のパーサーなので他のライブラリがいらない
②lxml……高速で解析できる
③html5lib……html5を生成できる

・Scrapy……スクレイピングとクローリングのフレームワーク
・Scrapyが依存しているパッケージにはTwistedとlxmlがあり、これらをC言語コンパイルする必要がある
Anacondaにはコンパイル済みのTwistedがあるのでそちらを使うと楽

第5章 PyData入門ガイド
# Jupyter Notebookの起動
jupyter notebook
#pandasを使用したデータの読み込み・加工
data = pandas.read_csv("./spam.csv") #データの読み込み
data.head() #データの先頭n行を返す(デフォルトだとn=5)
data.tail() #データの末尾n行を返す
data.dtypes #データの型を確認
data = pd.read_csv("./spam.csv", dtype={"spam":"object"}) #型の指定
data.isnull() #データの各要素がnullかどうかを判定
data.sum() #データの各要素を合計
data.dropna(subset=["spam", "ham", "eggs"]) #欠損値のあるデータ行を削除 subsetで対象列を指定
data.set_index("spam") #指定した列を行ラベルに指定
data[["spam", "ham"]] #列をリストで指定した列のみに絞り込み
data.iloc[0:4, 0:3] #行インデックス・列インデックスの範囲を指定して抽出
data[data["ham"] > 100] #条件を指定してデータを抽出
data.describe() #データの概要を返却(平均値、最小値、標準偏差など)
data.round(1) #桁の四捨五入
data["addcolumn"] = data["ham"] * data["eggs"] #列を追加
data.groupby("spam") #指定行でグルーピング

#Matplotlibを使用してデータを可視化
%matplotlib inline #グラフをインライン表示するためのコマンド
data.plot.bar(figsize=(10, 5)) #棒グラフの作成
data.plot.hist(bins=20, grid=True, figsize=(8, 5)) #ヒストグラムの作成
data.plot.scatter(x="ham", y="eggs", grid=True, figsize=(5, 5)) #散布図の作成
pandas.plotting.scatter_matrix(data[["spam", "ham", "eggs"]], figsize=(8,8)) #散布図行列

#データの分析
import scipy.stats as sp
data[["spam", "ham", "eggs"]].corr() #データフレームの相関係数をまとめて計算する
sp.pearsonr(data["ham"], data["eggs"]) #相関係数とp値の計算
sp.linregress(data["pieces"], data["us_price"]) #回帰式の計算
conda list #インストールされているパッケージの一覧
conda create -n envname packagename #仮想環境の新規作成 packagenameでパッケージを指定できる
conda env list #conda環境の一覧
source activate envname #conda環境の利用
source deactivate #conda環境から抜ける
conda install packagename #パッケージのインストール・アップデート
conda update --all #パッケージを一括でアップデート

・PyData……狭義には、PyDataコミュニティのこと
広義には、Pythonで実装されたデータ分析関連パッケージ・ツールの総称

Pythonでデータ分析を行う際によく使うパッケージ

パッケージ名 概要
NumPy 多次元配列の操作、線形代数の計算などを行うパッケージ 高速で動作する
SciPy 科学技術計算や統計計算を行うためのパッケージ
pandas データの読み込みや加工、抽出などの処理を行うパッケージ データフレーム(行と列からなる2次元の表敬式のデータ構造)を扱える
Jupyter Notebook Webブラウザ上で動作するPythonの実行環境 データ可視化系パッケージとの連携がしやすい
Matplotlib/Seaborn/Bokeh/ggpy/HoloViews グラフ描画のためのパッケージ
scikit-learn 機械学習を行うためのパッケージ
NLTK 自然言語処理を行うためのパッケージ
scikit-image/Pillow/OpenCV 画像処理のためのパッケージ
SymPy シンボリック演算(文字変数を使った数式計算)、因数分解微分などを行うことができるパッケージ
TensorFlow/Keras/PyTorch 深層学習のパッケージ

・Jupyter Notebookのコードセルの実行結果は同一Notebook内で引き継がれる
・Jupyter NotebookでMarkdownファイルを作成し、Markdown形式でテキストを作成し、コードセルを実行すると、テキストがHTMLに変換されて出力される

・Jupyter Notebookではpandasのデータフレームをいい感じに出力してくれる
・pandasのobject型は、数値や日付以外と認識された列や、複数のデータ型が混在していると判定された場合に自動で割り振られる
pandasには文字列型がないので、数値や日付などを文字列として認識したい場合はobject型を指定する
・データフレームオブジェクトを返却するメソッドは、デフォルトではオブジェクト自体の置き換えはしない(デフォルトだとinplace=False)
inplace=Trueを引数で指定すると、データフレームオブジェクト自体を加工後のデータに置き換える

・pandasには、データフレームからMatplotlibを経由してグラフを作成するメソッドがある
・散布図行列……指定したデータフレームの列を使って、総当たりで散布図を作成する

・Anaconda……Pythonディストリビューションコンパイル済みで設定済みのソフトウェアの集まり)の1つ
PyData関連のパッケージなどが数多く含まれている
PyDataの環境構築が楽にできるが、通常のPython環境との使い分けがややこしい

第6章 Webアプリケーション開発

Python製のWebフレームワーク

フレームワーク 特徴
Django フレームワークとしての採用事例が豊富
Bottle 軽量、シンプル Pythonの標準ライブラリのみで動作する
Flask 軽量 シンプルで拡張性が高い
Pyramid 他のライブラリを組み合わせて使用する 柔軟性が高い
Tornado 非同期のネットワークI/O 高速なAPI、WebSocket対応などが実現できる