Python|対数変換する:numpy.log(), numpy.log10()

1. はじめに

データ分析や機械学習の前処理で頻繁に登場するのが「対数変換」です。本記事では、PythonのNumPyライブラリを使って、対数変換を行う方法について詳しく解説します。

Python|対数変換する:numpy.log(), numpy.log10()というテーマのもと、numpy.log()numpy.log10()の使い方や違い、実務での活用方法、注意点までを網羅的に解説します。

この記事を読むことで、

  • 自然対数と常用対数の違い
  • numpy.log()numpy.log10()の使い分け
  • 実際のコード例とその出力結果
  • エラーを避けるためのポイント

などが理解できるようになります。

 

2. NumPyで対数変換を行う基本構文と使い方

2-1. 対数変換とは?

対数変換(log transformation)とは、データのスケールを縮小するための処理で、特に右に長い分布(右裾の広い分布)を正規分布に近づける際によく使われます。

Pythonでは、NumPyライブラリのlog()関数とlog10()関数を用いることで、簡単に対数変換を行うことができます。

2-2. numpy.log():自然対数の計算

numpy.log()は、ネイピア数 e ≒ 2.718 を底とする「自然対数(ln)」を計算します。

import numpy as np

# 自然対数の計算
data = np.array([1, np.e, np.e**2])
log_result = np.log(data)

print(log_result)

実行結果:

[0. 1. 2.]

このように、eのn乗に対してnumpy.log()を使うと、そのnが返されます。

2-3. numpy.log10():常用対数の計算

numpy.log10()は、底10の対数(常用対数)を求めます。スケールが大きく桁数が多いデータを扱う場面でよく使用されます。

import numpy as np

# 常用対数の計算
data = np.array([1, 10, 100, 1000])
log10_result = np.log10(data)

print(log10_result)

実行結果:

[0. 1. 2. 3.]

このように、10のn乗に対してnumpy.log10()を使うと、nが得られます。

 

3. よくある使い方・応用例

3-1. データのスケーリングとしての活用

例えば、収入やアクセス数など、スケールが大きいデータに対して、対数変換を施すことで、分布が整い、機械学習モデルの性能が向上する場合があります。

import numpy as np
import matplotlib.pyplot as plt

# もとのデータ
x = np.array([10, 100, 1000, 10000, 100000])

# 対数変換
log_x = np.log10(x)

# グラフで可視化
plt.plot(x, label="original")
plt.plot(log_x, label="log10 transformed")
plt.legend()
plt.show()

このように、視覚的にもデータの扱いやすさが向上します。

3-2. データフレームへの適用(pandasとの併用)

実務では、pandasのDataFrameと組み合わせて使用するケースが多くあります。

import pandas as pd
import numpy as np

# データフレームを作成
df = pd.DataFrame({
    '売上': [100, 1000, 10000, 100000]
})

# 対数変換(自然対数と常用対数)
df['売上_log'] = np.log(df['売上'])
df['売上_log10'] = np.log10(df['売上'])

print(df)

実行結果:

       売上  売上_log  売上_log10
0     100   4.605170   2.000000
1    1000   6.907755   3.000000
2   10000   9.210340   4.000000
3  100000  11.512925   5.000000

 

4. 注意点・エラー対策

4-1. 0や負の数に注意

0や負の値を対数変換しようとするとエラーやNaNになります。事前にデータをフィルタリングするか、np.where()などを用いて対処しましょう。

import numpy as np

data = np.array([0, -10, 1, 10])

# 負や0の値を除外
valid_data = data[data > 0]
log_result = np.log10(valid_data)

print(log_result)

実行結果:

[0. 1.]

安全に処理するためには、data > 0 などの条件フィルタが必須です。

4-2. log(0)は「-inf」になる

numpy.log(0)を実行すると、エラーにはならず「-inf(負の無限大)」が返されますが、後続処理に支障をきたす可能性があるため注意が必要です。

import numpy as np

print(np.log(0))  # warningが出るが実行可能

実行結果:

-inf

 

5. まとめ

本記事では、「Python|対数変換する:numpy.log(), numpy.log10()」というテーマで、NumPyによる自然対数と常用対数の扱い方について学びました。

  • np.log()は自然対数(底e)
  • np.log10()は常用対数(底10)
  • 対数変換は機械学習や統計解析でよく使われる
  • 0や負の数に対する処理には注意が必要

実務では「売上」「アクセス数」「人口」などスケールが大きな数値データの変換や可視化にとても有効です。

学習のコツとしては、まず小さな配列で挙動を確認し、次第にデータフレームや可視化へと応用していくのがおすすめです。

ぜひ自分のプロジェクトや分析業務で活用してみてください。

タイトルとURLをコピーしました