是否有可能使用java将字符串时间戳转换为浮点或日期时间
Posted
技术标签:
【中文标题】是否有可能使用java将字符串时间戳转换为浮点或日期时间【英文标题】:Is there any possibility to convert string timestamp to float or datetime using java 【发布时间】:2021-01-08 10:31:07 【问题描述】:我正在编写一个 java 代码,它生成从 1 到 1000 的随机数和时间戳。我已经用以下源代码表示时间戳
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:sss");
Date date = new Date();
String a=dateFormat.format(date);
System.out.println(a);
我能够将数据存储为 .txt 文件,其中包含 1000 个随机数及其相应的时间戳 当我尝试使用 pandas 数据框在 python 中加载特定的 .txt 文件时。 该文件已成功加载,并与数据框一起显示,如下所示,
HR Age RR SPo2 Temperature Timestamp
0 89 70 15 100 36 2020/09/22 12:46:009
1 130 27 15 96 37 2020/09/22 12:46:009
2 93 47 13 100 36 2020/09/22 12:46:009
3 116 53 15 98 36 2020/09/22 12:46:009
4 100 63 14 98 36 2020/09/22 12:46:009
之后,我尝试在训练/测试拆分后拟合随机森林:
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
from sklearn.ensemble import RandomForestClassifier
classifier=RandomForestClassifier(n_estimators=100, criterion='gini', random_state=1, max_depth=3)
classifier.fit(X_train,y_train)
但我收到一个错误:
ValueError Traceback (most recent call last)
<ipython-input-52-8f779aefd162> in <module>
20 #Create a Gaussian Classifier
21 classifier=RandomForestClassifier(n_estimators=100, criterion='gini', random_state=1, max_depth=3)
---> 22 classifier.fit(X_train,y_train)
23
24 #y_pred=classifier.predict(X_test)
~/anaconda3/lib/python3.7/site-packages/sklearn/ensemble/_forest.py in fit(self, X, y, sample_weight)
293 """
294 # Validate or convert input data
--> 295 X = check_array(X, accept_sparse="csc", dtype=DTYPE)
296 y = check_array(y, accept_sparse='csc', ensure_2d=False, dtype=None)
297 if sample_weight is not None:
~/anaconda3/lib/python3.7/site-packages/sklearn/utils/validation.py in check_array(array, accept_sparse, accept_large_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, warn_on_dtype, estimator)
529 array = array.astype(dtype, casting="unsafe", copy=False)
530 else:
--> 531 array = np.asarray(array, order=order, dtype=dtype)
532 except ComplexWarning:
533 raise ValueError("Complex data not supported\n"
~/anaconda3/lib/python3.7/site-packages/numpy/core/_asarray.py in asarray(a, dtype, order)
83
84 """
---> 85 return array(a, dtype, copy=False, order=order)
86
87
ValueError: could not convert string to float: '2020/09/22 12:46:009'
我对此感到非常困惑。谁能帮我摆脱这个问题?
【问题讨论】:
【参考方案1】:这里的问题是您必须将分类数据(日期)编码为数字数据,因为分类器无法处理您的日期,但需要数字。
您可以使用 sklearn 中的 OneHotEncoder 来处理所有日期,然后再将数据传递到分类器中。
但正如 here 所提到的,保持日期的循环性质会很有用:
您希望保留输入的周期性。一种方法 就是将datetime变量切割成四个变量:年、月、日、 和小时。然后,将这些(年份除外)变量中的每一个分解为 两个。
您为这三个变量中的每一个创建一个正弦和余弦面 (即月、日、小时),这将保留 24 小时是 更接近 0 小时而不是 21 小时,并且该月 12 更接近月份 1 比第 10 个月。
所以本质上,您需要考虑如何将日期时间转换为数字,以便分类器可以使用它。
【讨论】:
以上是关于是否有可能使用java将字符串时间戳转换为浮点或日期时间的主要内容,如果未能解决你的问题,请参考以下文章
何时使用 trunc() 而不是 int() 将浮点类型数转换为整数更好?