2014-04-17 4 views
0

수집 된 데이터를 저장하기 위해 데이터 분석 프로그램 전체에서 사용할 수있는 '테이블'클래스를 만들 계획입니다. 목적은 다음과 같이 간단한 테이블을 만드는 것입니다 :Python은 데이터 유형을 분류합니다.

ID Mean size  Stdv  Date measured Relative flatness 
---------------------------------------------------------------- 
1  133.4242  34.43 Oct 20, 2013 32093 
2  239.244  34.43 Oct 21, 2012 3434 

나는이 게시물에서 sqlite3를 제안 따를 것이다 : python-data-structure-for-maintaing-tabular-data-in-memory,하지만 난 여전히 (안 디베이스 등) CSV 파일로 저장해야합니다 내가 원하는 우리가 갈 때마다 내 데이터를 먹어라. 새로운 측정 값이 나오고 재미있는 것으로 간주 될 때마다 즉석에서 칼럼을 추가하라. 이를 위해 클래스는 던져진 데이터의 데이터 유형을 결정할 수 있어야합니다.

Sqlite3의 데이터 유형은 float, int, date 및 string입니다. 파이썬과 numpy는 함께 많은 유형을 가지고 있습니다. 변수의 데이터 유형이 무엇인지 빨리 결정할 수 있습니까? 따라서 새 필드가 들어있는 새 데이터를 입력하면 내 테이블 클래스에서 열을 자동으로 추가 할 수 있습니다.

나는 성능에 너무 신경 쓰지 않는다. 테이블은 상당히 작아야한다.

나는 그렇게처럼 내 클래스를 사용하려면 :

마지막 줄에서
dt = Table() 
dt.add_record({'ID':5, 'Mean size':39.4334'}) 
dt.add_record({'ID':5, 'Goodness of fit': 12}) 

, 새로운 데이터가있다. Table 클래스는 어떤 종류의 데이터인지 파악한 다음 sqlite3 테이블에 열을 추가해야합니다. 모든 문자열을 플로피로 만드는 것, 나는 여전히 고정밀 플로팅을 유지하고 싶다. ...

또한 : 이미 알고있는 것이 있다면, 나는 그것에 대해 알고 싶다.

답변

1

질문 : "변수의 데이터 유형이 무엇인지 빨리 결정할 수 있습니까?" 이것은 간단한 질문이며 대답은 type(variable)입니다. 하지만 사용자가 제공하는 컨텍스트에는보다 신중한 대답이 필요합니다.

이후 SQLite3 only provides only a few data types (slightly different ones than what you said), you need to map your input variables to the types provided by SQLite3. 그러나 더 많은 문제가 발생할 수 있습니다. 미리 열 유형을 고정하도록 요구하지 않으려면 새 레코드를받을 때 열 유형을 변경해야 할 수 있습니다.

예를 들어, 예제에서 Goodness of fit 열의 경우 int (12)가 먼저옵니다. 그러나 두 번째로 부동 값 (예 : 10.1)을 얻을 수 있습니다.이 값은 두 값을 모두 실수로 해석해야 함을 나타냅니다. 다음에 문자열을 받으면 문자열은 모두 문자열이어야합니다. 맞습니까? 그러나 숫자의 정확한 형식은 중요합니다. 12와 12.0은 부동 소수점으로 해석 할 때 동일하지만 문자열로 해석 할 때는 그렇지 않습니다. 모든 값을 문자열로 변환하면 첫 번째 값은 "12.0"이 될 수 있습니다.

따라서 동일한 열의 연속 값 유형이 일치하지 않거나 새 값에 따라 이전 값을 변환하려고하면 예외가 발생합니다. 그러나 때로는 입력을 다시 읽어야 할 수도 있습니다.

그러나 예상 한 동작에 관한 결정을 내린 후에는 구현하기가 너무 어렵지 않습니다. 마지막 질문에 대해 : 저는 개인적으로이 문제에 대한 기존 구현을 모릅니다.

+0

예, 이것은 제가 거의 끝내 었습니다. 열 유형에 대해서는 유형이 첫 번째 데이터 다음에 고정 된 것으로 가정합니다. 'type (variable) '의 문제와 불편 함은 numpy와 같은 다른 비 기본형이있을 때입니다. 'type (numpy.array ([1,2]))'는'numpy.int32'를 줄 것입니다. 그리고 다른 가능한 결과가 많이 있습니다. 이렇게하면 매핑이 어려워집니다. 가능한 모든 입력 데이터 유형을 파악해야합니다. – Bastiaan

관련 문제