行ごとに平均値や最大値を計算したい

複数の列の平均値や最大値を計算し、計算結果の列を追加する方法を解説します。例示するスクリプトを書き替えることで、中央値や最頻値、最小値などの計算も可能です。

説明

  • 行ごとに平均値や最大値を計算するためのスクリプトです。

  • 列に関する平均値・最大値は「集計」アイコンを利用することで計算することができますが、行ごとに計算する場合には転置などの操作を行うか、下記の「Python script」を利用する必要があります。

入出力イメージ

  • 入力

  • 出力

使い方

  1. 計算元となるデータを用意し、「Python script」アイコンを繋げます。 (例では、菖蒲.dftを計算元のデータとしています。このデータは、共有ワークスペース>サンプル>Alkano>菖蒲.dft にあります。)

  1. 「Python script」アイコンの編集画面を開き、スクリプト部分を以下で置き換えます。 入出力設定は変更しません。

    • Python script
from msi.common.dataframe import DataFrame, cbind, rbind, merge, select, is_valid, format_str
from msi.common.dataframe.params import Axis, Merge, DType, Agg
from msi.common.dataframe.special_values import Na, Error, NegativeInf, PositiveInf

## pandas をインポートします
import pandas as pd

## pandas変換用の関数をインポートします
from msi.common.dataframe import pandas_to_dataframe

## MSI DataFrameからpandasに変換します
table_pd = table.to_pandas()

## 計算の内容を記述します
# 行ごとの平均値を計算し、"mean"という列名で元データに追加します
table_pd["mean"] = table_pd.mean(axis=1, numeric_only=True)
# 行ごとの最大値を計算し、"max"という列名で元データに追加します
table_pd["max"] = table_pd.max(axis=1, numeric_only=True)
# その他、行ごとに計算可能な関数を呼び出す場合のフォーマットを記載しておきます
# table_pd["列名"] = table_pd.関数(axis=1, ...)

## pandasをMSI DataFrameに変換します
result = pandas_to_dataframe(table_pd)
  1. 「Python script」アイコンを実行します。終了後、可視化画面で結果を確認すると、各行について、平均値と最大値が計算できていることが分かります。

分析への応用

顧客ごとの各月の売り上げが列として存在する顧客データで、顧客ごとの年間平均値や年間合計値、最大値・最小値を算出する

OnePoint

  • 例ではmean(平均値)・max(最大値)を計算していますが、その他の統計量としてmedian(中央値)・mode(最頻値)・min(最小値)・sum(合計値)などを求めることもできます。
  • numeric_onlyオプションは、数値列(float, int, boolean)のみを計算対象とするオプションです。これをTrueとすることで、元のテーブルに文字列やカテゴリ列があった場合でもそれらを無視して計算することができます。

関連項目