Python学習編51回目です。
scikit-learnライブラリで実際にデータをいじってみる。題材は金利と株価。データは財務省の国債金利とTOPIX終値。
csvを取り込んで、様子見に散布図を書かせようとしたら、
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
stock = pd.read_csv('10年債とTOPIX.csv')
X = stock[['10年債利回り変化率']].values
y = stock['TOPIX変化率'].values
plt.scatter(X,y);
TypeError:unhashabletype: ‘numpy.ndarray’が出てきた。ChatGPTに聞いたところ
出力:
‘TypeError: unhashable type: ‘numpy.ndarray” このエラーメッセージは、不変(immutable)でないタイプ、この場合はNumPyの配列(‘numpy.ndarray’)を、ハッシュ可能である必要があるコンテキストで使用しようとしたときに発生します。具体的には、辞書のキーとして、またはセットの要素として使用しようとした場合にこのエラーが出ます。
Pythonの辞書やセットでは、各要素やキーが一意であることを保証するために、それらのハッシュ値を使用します。ハッシュ値は、オブジェクトの内容に基づいて計算される一意の値で、そのオブジェクトが変更不可能であることを要求します。不変でないオブジェクト(例えば、リストやNumPy配列など)は、その内容が変更されるとハッシュ値も変わり得るため、辞書のキーやセットの要素として使用することはできません。
この問題を解決するには、以下の方法があります:
1. **タプルに変換する**: 配列をタプルに変換することで、内容が変更不可能なオブジェクトになり、辞書のキーやセットの要素として使用できます。
2. **配列の内容を基にしたハッシュ値を生成する**: 配列の内容からハッシュ値を計算し、それをキーとして使用します。ただし、この方法は注意深く行う必要があります。なぜなら、同じ内容の異なる配列インスタンスが異なるハッシュ値を持つ可能性があるからです。
3. **辞書やセットを使う目的を再考する**: もしその使用が本当に必要かどうか、または他のデータ構造が問題を解決するのに適しているかどうかを考えます。
これらの解決策の選択は、あなたの具体的な用途と要件によって異なります。
うーん、なんもわからん。的外れてないか?その後ガチャガチャ試行錯誤してたところ、エラーメッセージに「#DIV/0!」の文字列を発見。あー、金利がちょうど0になった次の営業日で発生するのか。ってかゼロ金利付近だと金利の変化率が大きすぎてデータとして良くないな。データから変える必要ある。
次回に続く