1から始めるPythonデータ分析 - やりたいこと逆引きリスト ▶︎▶︎

【Python】関数で独自の計算式を作る方法とは?|def

そもそも関数とは?

今回は「関数」というPythonでは必須のスキルについてご紹介します

数学やExcelでも登場する「関数」ですがどういう意味があるかご存知でしょうか?

関数(function)

関数とは、入力された値に対してある決まった内容の計算を行い、入力された値に応じた処理結果を返す、数式、あるいは命令の集まりのことである。

プログラミング言語などにおいては、使用頻度の高い処理手続きは関数としてあらかじめ用意されていることが多い。関数に入力する値は「引数」と呼ばれる。

weblio辞書

定義としては「入力された値に計算を行い、処理結果を返す」という意味があり、

プログラミング言語(Python)においては、sum()max()などのあらかじめよく使う関数が用意されています

今回はその関数を独自の計算式で作成する方法をご紹介していきます

独自の計算式を作るイメージ

よく使う関数はPythonの機能で用意されています

一方で独自の計算式や引数を設定して、自由に関数を作っていくことも可能です

「関数」や「引数」などが聞き馴染みが無い場合は、もっともっと簡易的にイメージしましょう

まず関数というロボットを想像して、処理方法を指示します

Pythonの関数のイメージ

その関数に果物の1つである「いちご」を入れてみます

すると「いちご」というインプットに対して関数が処理を実施し、「ショートケーキ」というアウトプットを出します

Pythonの関数の処理イメージ

果物を数値に置き換えて、少しPython寄りにしてみます

点数が80より大きければ「合格」、低ければ「失格」としましょう

Pythonの関数のイメージ

「90」が来たら「合格」で「75」が来たら「失格」と判定しています

Pythonの関数の処理イメージ

もちろん関数はより複雑に設定することも可能で、入力の条件も2つ以上設定することができます

そして一度作った関数はそれ以降のコードでも利用することができます

それでは実際にPythonで関数を作成する方法をご紹介していきましょう

事前準備

Pandasというデータ解析を実施できるライブラリをインポートします 

import pandas as pd

※サンプルデータ:学校のテストの点数

学校のイメージ
df.head()

Pythonで関数を定義する

Pythonで関数を独自で作成するにはdefという機能を使います

定義を意味する「Definition」の最初の3文字と覚えてください

ここでさらに「引数」と「戻り値」についてもご説明します

Pythonの関数の処理イメージ(引数と戻り値)

関数に入力する元になるものを「引数」と呼び、関数が出してくれるものを「戻り値」と呼びます

そして実際の書き方がこちら

Pythonの関数の記述イメージ

少し分かりにくいと思うので、下記定義で関数を作ってみます

入ってきた数値に対して「+3」して戻す

まずはdefから始めてFunctionの頭4文字の「func」を関数名として使います(ここは自由に決めてOK)

そして引数として「x」を入れるようにします(:コロンも忘れず)

def func(x):

続いて「a」という変数に「x+3」の結果を代入します

最後にreturnで「a」を出すように設定します

def func(x):
  a = x + 3
  return a

さて、作りたての「func」という関数を使ってみましょう

引数である「x」の部分に数値を入れてみます

func(7)
→ 10

returnの部分に「+3」しても機能します

def func(x):
  return x + 3

func(7)
→ 10

DataFrameに関数を適応する

続いてDataFrameのテーブルに対して一律で関数を適応する方法をご紹介します

まずサンプルの学校のテストデータを見てみます

学校のテストのサンプルデータ

このテーブルに対し関数を作成→適応して、データを加工していきましょう

①計算:点数に+3する

def func(x):
  a = x + 3
  return a

上記で設定した「点数に+3」する関数を点数に適応してみます

独自の関数を適応する方法として2種類の手法があり

Seriesにはapplyを、DataFrameの各要素にはapplymapを利用します

※今回はDataFrameに適応するためapplymapを使います

df[['国語','数学','英語']].applymap(func)
df[['国語','数学','英語']].applymap(func)

②条件分け:80点以上は合格、それ未満は失格

イメージでも使った「合格」「失格」の関数を使い適応してみましょう

単なる計算ではなく、「条件」を付ける必要があるためifを使います

def func_score(x):
  if x >= 80:
    return '合格'
  elif x < 80:
    return '失格'

80点以上は合格、それ未満は失格 という条件で「func_score」という関数を作成しました

こちらもテストの点数に適応しましょう

df[['国語','数学','英語']].applymap(func_score)
df[['国語','数学','英語']].applymap(func_score)

③条件分け:特定の文字が含まれる

最後に特定の文字が含まれる場合の処理を実施します

例として「藤」という文字が含まれる場合の条件分けの関数を作成します

ここではinを用いて「特定の文字が含まれる」という設定をしましょう

def func_name(x):
  if '藤' in x:
    return '藤が入る'
  else:
    return x

「func_name」という関数を作り、引数である「x」にはテストデータの「名前」を入れる想定でif文を記述していきます

「藤」という文字が「x」に含まれる場合は「藤が入る」という文字列を出し、

それ以外は元の「x」を出すというコードを書きます

単体のSeriesなのでapplyを利用し、元のDataFrameに「名前_関数」として格納します

df['名前_関数'] = df['名前'].apply(func_name)
df[['名前','名前_関数']]
df['名前_関数'] = df['名前'].apply(func_name)
df[['名前','名前_関数']]

まとめ

今回はdefを使い「独自の計算式」で関数を作成する方法をご紹介してきました

データ分析のための加工は非常に重要で、関数の作成はとても便利な機能なのでぜひ使ってみてください

作成した関数をデータに適応させる方法は下記記事をご覧ください

【Python】作った関数を適応させるには?|apply
お気に入り登録お願いします

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です