2013-06-29 6 views
0

정부 제공 데이터로 작업해야하는 경우가 있습니다.이 데이터는 때로는 이상한 방식으로 손상됩니다. 데이터가 동적이기 때문에 오류 전에, 단지문제 해결 방법 모범 사례 (데이터 깨짐)

for row in governmental_data: 
    process_row(row) 

내가 적용된 수정과 데이터의 거울을 할 수 없습니다했다

for row in governmental_data: 
    # XXX Workaround for that one row among thousands 
    # that was mislabeled by a clerk and will not be fixed 
    # before form A-320-Tango-5 is completed and submitted 
    # on the first Sunday after a solstice. 
    if row is the_spawn_of_satan: 
     row = fix_row_A320(row) 
    # XXX end of workaround 
    process_row(row) 

: 내 코드는 이미 같은 조각이 포함되어 있습니다.

숫자가 증가함에 따라 이러한 대안을 관리하려면 어떻게해야합니까? 가장 좋은 방법이 있습니까 ("시작하려면 깨진 데이터를 제공하지 않는"외에)?

+0

실제 데이터가 지저분 다음과 같이해야한다. 따라서 A) 전처리 및 필터링을 사용하여 살아야합니다. 일반적으로 깨진 레코드는 건너 뛸 수 있습니다. B) 데이터의 이러한 오류에 견고한 알고리즘을 사용합니다. –

답변

1

이 데이터 변환 문제를 처리 할 때는 Decorator Design Pattern을 사용하는 것이 좋습니다. Wikipedia page 에는 커피 제조 예가있다. 같은 방식으로 나는 모든 데이터 변환이 행을 가져 와서 일부 연산을 만들고 행을 되돌려주는 데코레이터 여야한다고 제안한다. 이 디자인 패턴은 잘 정립 된 패턴입니다. 인터셉트 필터 디자인 패턴은 java (servlet filters)와 .net (Asp.Net Mvc Filters) 모두에서 구현되는이 아이디어와 유사합니다.

코드는

listOfDataConversionFilters = [XXXWorkaround,formA_320Tango5,...] 
for row in governmental_data: 
    for filter in listOfDataConversionFilters 
     filteredRow = filter(row) 
    process_row(filteredRow) 
+0

필터는 IMHO 행을 건너 뛸 수 있어야합니다. –