J'essaye de spécifier les types de colonne entrant dans mon H2o.Frame. J'ai essayé cela de plusieurs façons et dans tous les cas. Les tests unitaires sont ci-dessous. Ils échouent tous sauf les deux derniers, mais ces deux derniers ne fonctionnent que parce que j'ai changé de 99,0 à 99,9. Pourquoi ne puis-je pas dire que 99.0 est toujours un flotteur et non un int?Pourquoi H2oFrame ignore-t-il mes types de colonnes d'entrée?
import unittest
from unittest import TestCase
import h2o
class TestInputtingTypes(TestCase):
def setUp(self):
h2o.init()
def test_h2o_1(self):
data =[(1,'one', 9),(9,'two',3), (8,'three', 99.0)]
given_types = {'C1': 'int', 'C2': 'string', 'C3': 'real'}
frame = h2o.H2OFrame(data, column_types=given_types)
actual_types = frame.types
self.assertDictEqual(given_types, actual_types)
def test_h2o_2(self):
data =[(1,'one', 9),(9,'two',3), (8,'three', 99.0)]
given_types = {'C1': 'int', 'C2': 'string', 'C3': 'real'}
names = ['C1', 'C2', 'C3']
frame = h2o.H2OFrame(data, column_types=given_types, column_names=names)
actual_types = frame.types
self.assertDictEqual(given_types, actual_types)
def test_h2o_3(self):
data =[{'C1': 1, 'C2': 'one', 'C3': 9},
{'C1': 9, 'C2': 'two', 'C3': 3},
{'C1': 8, 'C2': 'three', 'C3': 99.0}]
given_types = {'C1': 'int', 'C2': 'string', 'C3': 'real'}
names = ['C1', 'C2', 'C3']
frame = h2o.H2OFrame(data, column_types=given_types, column_names=names)
actual_types = frame.types
self.assertDictEqual(given_types, actual_types)
def test_h2o_4(self):
data =[{'C1': 1, 'C2': 'one', 'C3': 9},
{'C1': 9, 'C2': 'two', 'C3': 3},
{'C1': 8, 'C2': 'three', 'C3': 99.0}]
given_types = {'C1': 'int', 'C2': 'string', 'C3': 'real'}
given_types_input = {'C1': 'numeric', 'C2': 'string', 'C3': 'float'}
names = ['C1', 'C2', 'C3']
frame = h2o.H2OFrame(data, column_types=given_types_input, column_names=names)
actual_types = frame.types
self.assertDictEqual(given_types, actual_types)
def test_h2o_5(self):
data =[(1,'one', 9),(9,'two',3), (8,'three', 99.0)]
given_types = ['int', 'string', 'real']
names = ['C1', 'C2', 'C3']
frame = h2o.H2OFrame(data, column_types=given_types, column_names=names)
actual_types = frame.types
self.assertDictEqual(given_types, actual_types)
def test_h2o_6_this_one_passes_because_has_nonzero_decimals(self):
data =[(1,'one', 9),(9,'two',3), (8,'three', 99.9)]
given_types = {'C1': 'int', 'C2': 'string', 'C3': 'real'}
given_types_input = ['int', 'string', 'real']
names = ['C1', 'C2', 'C3']
frame = h2o.H2OFrame(data, column_types=given_types_input, column_names=names)
actual_types = frame.types
self.assertDictEqual(given_types, actual_types)
def test_h2o_7_this_one_passes_because_has_nonzero_decimals(self):
data =[(1,'one', 9),(9,'two',3), (8,'three', 99.9)]
given_types = {'C1': 'int', 'C2': 'string', 'C3': 'real'}
names = ['C1', 'C2', 'C3']
frame = h2o.H2OFrame(data)
actual_types = frame.types
self.assertDictEqual(given_types, actual_types)
if __name__ == "__main__" :
unittest.main()
Passing dans "numérique" au lieu de "réel" ne réglera pas le problème. Si vous passez "numeric" dans une colonne qui peut être convertie en entiers comme [9,3,99.0], alors "frame.types" montrera toujours "int" comme type. –