Liac-arffライブラリを使用して.arffファイルをnumpy配列にロードしようとしています。 ( https://github.com/renatopp/liac-arff )
これは私のコードです。
import arff, numpy as np
dataset = arff.load(open('mydataset.arff', 'rb'))
data = np.array(dataset.data)
実行すると、エラーが発生します。
ArffLoader.py", line 8, in <module>
data = np.array(dataset.data)
AttributeError: 'dict' object has no attribute 'data'
同様のスレッドを確認しました Smartsheet Data Tracker:AttributeError: 'dict' object has no attribute 'append' 。私はPython=に不慣れで、この問題を解決できません。どうすれば修正できますか?
dataset
はdict
です。 dict
の場合、pythonインデックス表記、dataset[key]
を使用して値にアクセスします。ここで、key
は文字列、整数、浮動小数点、タプル、またはその他の不変のデータ型(それよりも少し複雑ですが、興味がある場合は以下を参照してください)。
あなたの場合、キーは文字列の形式です。これにアクセスするには、次のように、必要な文字列をインデックスとして指定する必要があります。
import arff
import numpy as np
dataset = arff.load(open('mydataset.arff', 'rb'))
data = np.array(dataset['data'])
(これも読みやすさの問題ですが、インポートを同じ行に配置しないでください)
dataset
はdict
であり、一部の言語ではmap
またはhashtable
と呼ばれます。 dict
では、 "インデックス"が "ハッシュ可能"(理想的には一意の識別子)のデータ型である場合を除いて、リストまたは配列でインデックスを付ける方法と同様の方法で値にアクセスします可能な値ごとに)。この「インデックス」は「キー」と呼ばれます。実際には、少なくとも組み込み型とほとんどの主要なパッケージでは、不変のデータ型またはハッシュ可能のみですが、これが当てはまることを要求する実際の規則はありません。
MATLAB
の出身ですか?もしそうなら、あなたはおそらくMATLAB's
struct
アクセステクニックを使用しようとしています。 dict
は、はるかに高速で柔軟なstruct
と考えることができますが、値にアクセスするための構文は異なります。
Scipyを使用してarffデータをpythonにロードするのは簡単です。
from scipy.io import arff
import pandas as pd
data = arff.loadarff('dataset.arff')
df = pd.DataFrame(data[0])
df.head()