2018年11月24日

小ネタ:pandasのas_matrix()はvaluesに置き換えよう

前置き


最近はデータサイエンティストを目指してPythonを習得しております。
今回は、Python3.7でas_matrix()が非推奨となったので、その話です。
簡単にググって見つからなかったので誰かの助けとなればと思い記載いたします。
元ネタは以下になります。
scikit-learn で線形回帰 (単回帰分析・重回帰分析)
Python: Method .as_matrix will be removed in a future version. Use .values instead


Pandasから配列(リスト)への変換

先に挙げたページから、赤ワインのCSVをPandasへ取り込んで、DataFrame(およびSeries)を配列に変換して予測する処理について、コードを引用いたします。
# %% scikit-learn で線形回帰 (単回帰分析・重回帰分析)
# https://pythondatascience.plavox.info/scikit-learn/%E7%B7%9A%E5%BD%A2%E5%9B%9E%E5%B8%B0

import pandas as pd
import numpy as np

wine = pd.read_csv("winequality-red.csv", sep=";")
wine.head

# %%
# sklearn.linear_model.LinearRegression クラスを読み込み
from sklearn import linear_model
clf = linear_model.LinearRegression()

# 説明変数に "density (濃度)" を利用
X = wine.loc[:, ['density']].as_matrix()  # ★該当箇所

# 目的変数に "alcohol (アルコール度数)" を利用
Y = wine['alcohol'].as_matrix()  # ★該当箇所

# %%
# 予測モデルを作成
clf.fit(X, Y)

# 回帰係数
print(clf.coef_)

# 切片 (誤差)
print(clf.intercept_)

# 決定係数
print(clf.score(X, Y))
※引用コードに対し、一部コメントを追加しています
前回紹介しました、VSCodeのJupyter Interactiveモードで動かす前提で、セルを分割しております。2セル目に「★該当箇所」というコメントを付与しております。

このコードはPython3.6では特に支障なく動きますが、3.7だと以下の警告が発生します。

C:\ProgramData\Anaconda3\lib\site-packages\ipykernel_launcher.py:10: FutureWarning: 
Method .as_matrix will be removed in a future version. Use .values instead.

これは英語のそのままだけれど、メソッドas_matrix()は廃止予定だからvaluesに置き換えてほしいという話です。
ただ、代わりに使えというvaluesってなんじゃらほいっていうのがわからずググってしまった次第です。
そして冒頭に紹介したstackoverflowのページに辿り着いたということです。

解としては、なんのことはなく、valuesというプロパティを使用しろという結論でした。 ですので、書き換えるならば以下のようになります。
# %%
# sklearn.linear_model.LinearRegression クラスを読み込み
from sklearn import linear_model
clf = linear_model.LinearRegression()

# 説明変数に "density (濃度)" を利用
X = wine.loc[:, ['density']].values  # ★変更後

# 目的変数に "alcohol (アルコール度数)" を利用
Y = wine['alcohol'].values  # ★変更後

これで警告が収まりました。
近い将来廃止されるようですし、今からコーディングする方はvaluesに置き換えましょう。

0 件のコメント:

コメントを投稿

TIPS:VSCodeで日本語化がうまくいかないとき

前置き Visual Studio Codeで拡張機能「 Japanese Language Pack for Visual Studio Code 」を入れたら日本語になりますよね。 でも、「 Remote Development 」で色々な環境を日本語化してると、偶に...