2014-09-28 3 views
0

사용자2 개의 테이블과 집계 데이터를 결합하십시오

다음과 같이 도와 주시겠습니까?

mysql 데이터베이스에서 데이터를 추출하여 집계해야합니다. 데이터베이스에는 두 개의 테이블이 있으며 두 테이블 모두 다른 시간대의 데이터를 가지고 있습니다. 이제 테이블 1의 모든 데이터가 테이블 2 데이터와 결합되는 새로운 테이블 (txt)을 만들어야합니다. 는 그래서 이곳에서만 테이블의 예를 참조하십시오 더 나은 이해를 위해 표 1

의 시간 단계에 가장 풀어서 시간 테이블 2의 데이터가 필요 : 이미 파이썬 코드를 https://www.dropbox.com/s/mo2q0hj72ilx05n/data%20aggregation.xlsx?dl=0

을하는 16 진수 데이터를 추출하고 테이블 2를 만든다. 나는 테이블 1을 만드는 코드도 가지고있다. 나는 지금 둘을 결합해야한다.

조언 해 주셔서 감사합니다.

+1

에 오신 것을 환영합니다 ! 당신이 원하는 것이 무엇인지, 당신이 가지고있는 것, 그리고 당신이 한 일로 당신이 거기에 가기를 기대하는 것은 명백하지 않습니다. 제발 ** 예제 입력 및 출력 ** 필요한 및 설명 * 당신이 이것을 달성하기 위해 노력하고있어. 또한 오프 사이트 리소스에 링크하지 마십시오. – Veedrac

답변

0

데이터 테이블을 파이썬리스트로 복사 한 후 테이블 2의 값을 독립 시리즈로 다시 분할해야했습니다. 전반적으로 이러한 값을 단일 표 Table2로 통합하는 단계를 건너 뛸 수 있습니다.

이 문제를 해결하는 핵심은 __getitem__을 구현하는 간단한 클래스를 작성하고 단일 키 인수를 사용하여 해당 값을 반환하는 것입니다. 예를 들어, 일반적인 파이썬 dict의 경우 __getitem__은 키와 정확하게 일치하는 dict 항목을 반환하고, 일치하는 항목이 없을 경우 KeyError를 반환합니다. 어떻게 사건을 처리하는 - 영업에 연습으로

closest = min(self.data, key=lambda x: abs(x[0]-keyts)) 

(왼쪽 : 귀하의 경우에, 난 그냥이 라인에 주어진 타임 스탬프에서 항목의 타임 스탬프의 최소 차이 항목을 반환하는 __getitem__를 구현 여기서 키는 정확히 두 항목 사이에 위치합니다.) 조회 논리를 조정해야하는 경우 구현을 __getitem__으로 변경하면 코드의 다른 모든 항목이 동일하게 유지됩니다.

# t1 and t2 are lists of tab-delimited strings copy-pasted 
# from the OP's spreadsheet 

TAB = '\t' 
t1data = [t.split(TAB) for t in t1] 
t2data = [t.split(TAB) for t in t2] 

# split each parameter into individual time,value pairs 
readings = {'A':[], 'B':[], 'C':[]} 
for parm in "ABC": 
    for trec in t2data: 
     t,a,b,c = trec 
     t = int(t) 
     if a: readings['A'].append((t,int(a))) 
     if b: readings['B'].append((t,int(b))) 
     if c: readings['C'].append((t,int(c))) 


# define class for retrieving value with "closest" key if 
# there is not an exact match 
class LookupClosest(object): 

    def __init__(self, pairs): 
     self.data = pairs 

    def __getitem__(self, key): 
     # implement logic here to find closest matching item in series 

     # TODO - what if key is exactly between two different values? 
     closest = min(self.data, key=lambda x: abs(x[0]-key)) 
     return closest[1] 


# convert each data series to LookupClosest 
for key in "ABC": 
    readings[key] = LookupClosest(readings[key]) 

# extract and display data 
for vals in t1data: 
    t = int(vals[0]) 
    gps = vals[1] 
    a = readings['A'][t] 
    b = readings['B'][t] 
    c = readings['C'][t] 
    rec = t,gps,a,b,c 
    print rec 

인쇄 : 여기

내 샘플 구현이다 (당신이 다음에 하나 개의 레코드에서 차이를 말할 수 있도록 나는 표 데이터를 수정) : 스택 오버플로

(1, 'x01', 1, 10, 44) 
(10, 'x10', 2, 11, 47) 
(21, 'x21', 4, 12, 45) 
(30, 'x30', 3, 12, 44) 
(41, 'x41', 4, 12, 47) 
(52, 'x52', 2, 10, 48) 
관련 문제