Я занимаюсь небольшим проектом машинного обучения. Я собрал все тикеры для компании в S & P500 в кадре данных вместе с их ежедневными значениями. Проблема в том, что когда я вызываю функцию
do_ml('BAC')
, я получаю эту ошибку:
Traceback (most recent call last):
File "c:\Users\giuli\Desktop\UDEMY COURSES\finance\Git_rep\processing _for_ml.py", line 87, in <module>
do_ml('BAC')
File "c:\Users\giuli\Desktop\UDEMY COURSES\finance\Git_rep\processing _for_ml.py", line 72, in do_ml
X,y,df = extract_featuresets(ticker)
File "c:\Users\giuli\Desktop\UDEMY COURSES\finance\Git_rep\processing _for_ml.py", line 46, in extract_featuresets
df['{}_d1'.format(ticker)],
File "C:\Python37\lib\site-packages\pandas\core\frame.py", line 2980, in __getitem__
indexer = self.columns.get_loc(key)
File "C:\Python37\lib\site-packages\pandas\core\indexes\base.py", line 2899, in get_loc
return self._engine.get_loc(self._maybe_cast_indexer(key))
File "pandas\_libs\index.pyx", line 107, in pandas._libs.index.IndexEngine.get_loc
File "pandas\_libs\index.pyx", line 126, in pandas._libs.index.IndexEngine.get_loc
File "pandas\_libs\index.pyx", line 152, in pandas._libs.index.IndexEngine._get_loc_duplicates
File "pandas\_libs\index.pyx", line 169, in pandas._libs.index.IndexEngine._maybe_get_bool_indexer
KeyError: 'BAC_d1'
Это все функции, включенные в функцию, которая называется:
def remove_extra_characters(df):
df.rename(columns={old:old.strip() for old in df.columns}, inplace=True)
def process_data_for_labels(ticker):
hm_days=7
df = pd.read_csv('sp500_joined_closes.csv', index_col = 0 )
tickers = df.columns.values.tolist()
df.fillna(0, inplace=True)
remove_extra_characters(df)
for i in range(1, hm_days+1):
df['{}_{}d'.format(ticker, i)] = (df[ticker].shift(-i) - df[ticker]) / df[ticker]
print(df)
df.fillna(0,inplace=True)
return tickers, df
def buy_sell_hold(*args):
cols = [c for c in args]
requirements = 0.02
for col in cols:
if col > requirements:
return 1
if col < requirements:
return -1
return 0
def extract_featuresets(ticker):
tickers, df = process_data_for_labels(ticker)
df['{}_target'.format(ticker)] = list(map( buy_sell_hold,
df['{}_d1'.format(ticker)],
df['{}_d2'.format(ticker)],
df['{}_d3'.format(ticker)],
df['{}_d4'.format(ticker)],
df['{}_d5'.format(ticker)],
df['{}_d6'.format(ticker)],
df['{}_d7'.format(ticker)]))
vals = df['{}target'.format(ticker)].values.tolist()
str_vals= [str(i) for i in vals]
print('Data spread:', Counter(str_vals))
df.fillna(0, inplace=True)
df = df.replace([np.inf, -np.inf], np.nan)
df.dropna(inplace=True)
df_vals = df[[ticker for ticker in tickers]].pct_change()
df_vals = df_vals.replace([np.inf, -np.inf], 0)
df_vals.fillna(0, inplace=True)
X = df_vals.values #Percent change data of comanies.
y = df['{}target'.format(ticker)].values #target
return X, y, df
def do_ml(ticker):
X,y,df = extract_featuresets(ticker)
#setting sets for training and testing giving it 25% of the size each.
X_train, X_test, y_train, y_test = cross_validation.train_test_split(X,
y,
test_size = 0.25)
#selecting classifier
clf = neighbors.KNeighborsClassifier()
#fitting data in classifier
clf.fit(X_train, y_train)
confidence = clf.score(X_test, y_test)
predictions = clf.predict(X_test)
print('Predicted spread:', Counter(predictions))
return confidence
Проблема определенно в функции extract_feature. То, что я делаю, - это просто создание 7 столбцов в моем фрейме данных, где каждый из них содержит значение, которое пытается предсказать, как изменится цена за этот день (поэтому в фрейме данных будут отображаться изменения для каждого дня на следующей неделе. )