我正在努力学习数值分析。我正在关注这些文章 - http://scikit-learn.org/stable/auto_examples/linear_model/plot_iris_logistic.html
我的数据如下:
date hr_of_day vals
2014-05-01 0 72
2014-05-01 1 127
2014-05-01 2 277
2014-05-01 3 411
2014-05-01 4 666
2014-05-01 5 912
2014-05-01 6 1164
2014-05-01 7 1119
2014-05-01 8 951
2014-05-01 9 929
2014-05-01 10 942
2014-05-01 11 968
2014-05-01 12 856
2014-05-01 13 835
2014-05-01 14 885
2014-05-01 15 945
2014-05-01 16 924
2014-05-01 17 914
2014-05-01 18 744
2014-05-01 19 377
2014-05-01 20 219
2014-05-01 21 106
2014-05-01 22 56
2014-05-01 23 43
2014-05-02 0 61
对于给定的日期和小时,我想预测vals
并识别模式。
我写了这段代码:
import pandas as pd
from sklearn import datasets
from sklearn import metrics
from sklearn.linear_model import LogisticRegression
# read the data in
Train = pd.read_csv("data_scientist_assignment.tsv")
#print df.head()
x1=["date", "hr_of_day", "vals"]
#print x1
#print df[x1]
test=pd.read_csv("test.tsv")
model = LogisticRegression()
model.fit(Train[x1], Train["vals"])
print(model)
print model.score(Train[x1], Train["vals"])
print model.predict_proba(test[x1])
我收到了错误:
KeyError: "['date' 'hr_of_day' 'vals'] not in index"
问题是什么?有没有更好的方法呢?
测试文件格式:
date hr_of_day
2014-05-01 0
2014-05-01 1
2014-05-01 2
2014-05-01 3
2014-05-01 4
2014-05-01 5
2014-05-01 6
2014-05-01 7
完整错误投注:
Traceback (most recent call last):
File "socratis.py", line 16, in <module>
model.fit(Train[x1], Train["vals"])
File "/usr/local/lib/python2.7/dist-packages/pandas/core/frame.py", line 1986, in __getitem__
return self._getitem_array(key)
File "/usr/local/lib/python2.7/dist-packages/pandas/core/frame.py", line 2030, in _getitem_array
indexer = self.ix._convert_to_indexer(key, axis=1)
File "/usr/local/lib/python2.7/dist-packages/pandas/core/indexing.py", line 1210, in _convert_to_indexer
raise KeyError('%s not in index' % objarr[mask])
KeyError: "['date' 'hr_of_day' 'vals'] not in index"
答案 0 :(得分:1)
我建议在阅读TSV时提供sep='\t'
parameter:
Train = pd.read_csv("data_scientist_assignment.tsv", sep='\t') # use TAB as column separator
解决此问题后,队列中还有另一个问题:ValueError: could not convert string to float: '2014-09-13'
这是因为线性回归需要数字要素,而列date
是字符串类型。
您可以通过将日期转换为时间戳(自纪元以来的秒数)来引入新列timestamp
,并将其用作功能:
Train['timestamp'] = pd.to_datetime(Train['date']).apply(lambda a: a.timestamp())
x1=["timestamp", "hr_of_day", "vals"]
从ML的角度来看,您不应将目标值vals
用作输入要素。您还应考虑将日期表示为个别特征:日,蒙,年;或者是星期几,这取决于你想要建模的东西。