見出し画像

【Python(11/17更新)】Pythonによるデータ分析入門(随時更新)

「Pythonによるデータ分析入門」

データ分析をするにあたり、Python初心者がまず最初に勉強したい一冊。
しかしながら、ページ数が膨大で、多くの人は辞書替わりに使っていると思います。(かく言う私もその一人)

Pythonの本当に大切なことから、それ知る必要ある?ってことまで書かれてあります。ここでは「本当に大切なこと」「知ってたほうがいいこと」「知ってて損はないこと」の3つについて、順次まとめていこうと思います。

勉強したことを随時更新していきます。


本当にたいせつなこと


モジュール

モジュールとは、Pythonの関数やクラスをまとめたプログラムファイルのこと。複数のモジュールを設計してシステムを開発する。モジュールを利用すると、利用頻度の高いクラスや関数などをその都度記述しなくてよくなる。

モジュール作成には、.py や .pxy ファイルにコードを記述し、そのファイルをコンパイル(まとめる)して生成する。コンパイルには setup.py スクリプトを使う。

(コンパイル後、.so(Linux/macOS)または .pyd(Windows)ファイルが生成されます。)

作成されたモジュールは、Pythonスクリプトからインポートして利用する。
コードをコンパイルするためには、コマンドプロンプト(またはターミナル)で setup.py スクリプトを実行します.

データフレームの条件に一致する行の値を変更したいとき(map関数)

皆さんはどのように条件に合った行の値を変更しているでしょうか。

私は最近、map関数を使って変更しています。(昔はlocやilocを使って条件分岐をしてた)

Pythonのmap関数は、リストやタプルなどの各要素に対して、指定した関数を適用し、その結果を新しい値としてもとのリストやタプルに返してくれる。

# 構文
map(function, iterable, ...)
  • function: 各要素に適用する関数。

  • iterable: 処理対象となるイテラブル(リスト、タプルなど)。

それを使って、以下のように、条件に合う値を新たに格納する

例えば、果物の「ID」「種類名(Species)」「値段(cost)」列を格納したデータフレームを創造しよう。

果物の種類に対して何かデータを分析したいとき、種類名を種類IDに変更することを考える。(リンゴやりんご→1、みかん→2、その他→3のように)

# species_mapを作成する
Species_map = {
    'りんご':1,
    'リンゴ':1,
    'みかん':2
}
 
# species_ID列を作成する
df['Species_ID'] = df['Species'].map(Species_map).fillna(3)
#実行結果
[ID, Species, Species_ID, cost
1, リンゴ, 1, 50
2, みかん, 2, 100
3, ぶどう, 3, 300
...
]
  • .map(Species_map):

    • mapメソッドは、Species列の各値をSpecies_mapのキーとして対応する値に変換する。

    • Species列の値がSpecies_mapに存在しない場合、その値はNaNになる。

  • .fillna(3):

    • mapによる変換でNaN(該当するキーがない場合)になった値を3で埋める。

  • df['Species_ID'] = ...:

    • 最終的な結果を新しい列Species_IDとしてデータフレームdfに追加。


lambda関数

lambda関数は、簡単な無名関数(グローバル関数としてPythonのインスタンス上に残しておく必要のない関数)を作成する際に使用されます。特に、if文やfor文と一緒に使用されることが多い、大変便利な関数です。

構文

lambda 引数: 返り値

引数:関数に渡される入力。
返り値:引数に基づいて計算された値。

例題1
lambda関数を使って、0と1のseriesデータ(ここではyとする)の各値を2倍してみましょう
ヒント:applyメソッドを使って、lambda関数をyの各要素に適用させる。

答え

import pandas as pd

# 0と1のSeriesデータを作成
y = pd.Series([0, 1, 0, 1, 0, 1])

# lambda関数でyの各要素を2倍する
y_double = y.apply(lambda x: x*2)

if文と一緒に使用されることが多いです。
構文

lambda 引数: 返り値 if 条件 else

例題2
lambda関数を使って、0と1と2のseriesデータ(ここではyとする)に対して「yの要素=2」の時のみ、要素を2倍してみましょう

答え

import pandas as pd

# 0と1と2のSeriesデータを作成
y = pd.Series([0, 1, 2, 1, 0, 2])

# lambda関数でy=2の時のみ、yの各要素を2倍する
y_double = y.apply(lambda x: x*2 if x == 2 else x)

設定した関数をほかのpyファイルで実行する

例えば

test.py
def hello():
    print(hello)

hello()

で、その中のhello()関数を呼び出すには

from test import hello
hello()

とすれば実行できる。

from "呼び出したい関数があるファイル" import "関数名"

である。


知ってたほうがいいこと

if __name__ == '__main__':

詳細は下記参照


知ってて損はないこと


いいなと思ったら応援しよう!