본문 바로가기
공부 목록/IT & 프로그래밍

다차원의 데이터를 핸들링 하기 위한 파이썬의 리스트 활용

by 독학박사 2023. 2. 11.

목차


    오늘은 많은 데이터를 한 번에 처리하는 좋은 방법을 소개해 보려고 합니다. 파이썬의 리스트는 어떠한 형태든 모두 담을 수 있는 특징이 있는데 이를 이용하여 데이터 구조를 1차원에서 다차원으로 관리하고 for문을 이용하여 핸들링할 수 있는 방법입니다.

     

     

    포스팅 썸네일
    포스팅 썸네일

     

     

    1. 다차원 데이터 구조

    설명에 앞서 다차원의 의미부터 확인해 보겠습니다. 1차원은 x축 한 개(직선) 위에 값들을 생각하면 됩니다. 2차원은 평면이겠죠. 1차원의 데이터 타입으로는 pandas의 Series가 있고, 2차원으로는 Dataframe이 있습니다. 그럼 3차원의 경우에는 어떤 타입의 변수를 써야 하나 고민하겠지만 3차원 단일 특성을 갖는 데이터 구조가 없기 때문에 list를 활용하게 됩니다.

     

    1차원의 데이터 형태
    1차원의 데이터 형태

     

    파이썬의 데이터 구조 중 Series를 합쳐 놓은 게 Dataframe으로 생각하면 됩니다. 1차원을 2차원으로 확장시킨 것입니다. 그러면 dataframe을 합치면 3차원으로 확장하게 되는데 이때 데이터프레임을 합쳐서 관리할 수 있는 데이터 구조가 바로 리스트입니다.

     

     

    시리즈와 데이터프레임 차원 관계
    시리즈와 데이터프레임 차원 관계

     

    다시 차원의 의미를 다른 면으로 생각해 보면 인덱싱의 개수가 바로 차원 나타낸다고 할 수 있습니다. 시리즈 변수 A가 있다고 할 때 시리즈에서 10번째 데이터를 부르기 위해 A[9]라고 코딩할 겁니다. 즉 호출할 인덱싱 개수가 9라는 숫자 한 개인 것입니다. 데이터 프레임의 경우 2개의 인덱싱이 필요합니다. df[칼럼명][index 숫자], df.loc[index 숫자][칼럼명] 또는 df.iloc[행 숫자, 열 숫자]와 같이 두 개의 인덱싱이 필요합니다.

     

     

    2. 리스트를 이용한 데이터프레임 다 차원화

    차원은 인덱싱의 개수라고 첫 번째 주제에서 정의하였습니다. 그럼 3차원의 데이터 구조를 만들기 위해 데이터 인덱싱을 3개로 만들어 주면 됩니다. 데이터 프레임을 리스트에 넣는 순간 하나의 데이터를 호출하기 위해서는 인덱싱이 3개가 필요하게 됩니다.

     

    B라는 변수는 데이터 프레임 2개를 갖는 리스트라고 설정합니다. B = [df1, df2]로 만들 수 있습니다. 이제 df1의 1행 2열의 데이터를 호출하기 위한 문구는 B[0].iloc[0, 1]이 됩니다. 리스트에서 0번째 데이터 프레임을 호출한 결과값이 데이터프레임 타입이 되기 때문에 다음 호출은 데이터프레임 호출법을 사용합니다.

     

    리스트를 활용한 데이터프레임 다차원화
    리스트를 활용한 데이터프레임 다차원화

     

     

    더 복잡한 차원으로 가기 위해서도 리스트를 더 사용하면 됩니다. 4차원의 경우 B와 같은 3차원의 데이터 구조를 또 다른 리스트에 넣으면 됩니다. C = [B1, B2, B3]와 같은 형태로 말입니다. 호출 시에는 C[0][0].iloc[0,1]과 같습니다.

     

    3. 데이터 구조의 다차원 활용

    지금까지 데이터 구조의 다차원을 만드는 방법에 대해서 소개했습니다. '왜 데이터 차원을 늘려야 하지'란 의문의 들 수도 있습니다. 차원을 늘리는 이유는 데이터 성질의 복잡도 때문이며 높은 데이터 차원을 활용하여 데이터 분석 시 반복도를 효과적으로 사용할 수 있기 때문입니다. 조금 설명이 어려웠지만, 예를 들도록 하겠습니다.

     

    남자의 신장에 대해서 분석하려고 합니다. 우선 경기도 지역의 100명에 대한 남자의 키 값을 데이터 입력합니다. 시리즈 구조로 가능할 겁니다. 이제 나이를 추가합니다. 20, 30, 40대의 각각 100명의 키 값이 필요합니다. 데이터프레임 구조를 사용해야 합니다. 열의 변수로 20, 30, 40대가 들어갑니다. 대한민국 각 지역의 20, 30, 40대 100명의 키 값을 핸들링하기 위해 리스트를 이용합니다. 이때는 리스트 숫자가 의미하는 리스트 인덱스를 사용하면 추후 지역 리스트를 구분하기 좋습니다.

     

    region_list = ['경기도', '강원도', '대전', '부산']
    tall_list = [df1, df2, df3, df4]

     

    위와 같은 코드가 있다고 할 때 tall_list[0]을 호출 시 region_list[0]을 같이 호출하게 되면 경기도의 df를 갖고 오게 되는 것을 확인할 수 있습니다. 이렇게 사용하는 궁극적인 이유는 for문을 활용하여 데이터를 반복적으로 분석하기 위함임을 잊으시면 안 됩니다. 일반적으로 데이터를 불러와서 변수로 데이터를 저장 후 해당 변수의 데이터 호출을 통해 분석을 하게 됩니다. 다음의 코드를 한 번 살펴보겠습니다.

     

    df1 = pd.read_csv('.\\data\\data_file1.csv')
    df2 = pd.read_csv('.\\data\\data_file2.csv')
    df3 = pd.read_csv('.\\data\\data_file3.csv')
    df4 = pd.read_csv('.\\data\\data_file4.csv')

     

    data 폴더 안에 data_file이 1번부터 4번까지 있습니다. 만일 위와 같이 각각의 변수로 입력하게 된다고 하면 향후 데이터 분석을 하게 될 때 df1부터 df4까지 코드로 작성을 해야 합니다. for문을 돌릴 수도 있지만 조금 기교가 필요합니다. 위의 코드를 다음과 같이 변경하겠습니다.

     

    data_path = '.\\data\\'
    file_name = os.listdir(file_path)
    
    data_list = []
    for fn in file_name:
    	data_list.append(pd.read_csv(data_path + file_name)

     

    data_path와 file_name 정의 때문에 코드가 길어진 것과 같이 보이지만 data_path 내 파일이 1000개가량 있다고 해도 위의 5줄이면 정리가 됩니다.

     

     

    4. 마치며

    지금까지 파이썬의 리스트를 이용한 데이터 다차원 핸들링 방법에 대한 개념을 정리하였습니다. 개념을 활용하기 위해서는 데이터 분석의 컨셉을 잘 선정해야 합니다. 지역별, 국가별, 남자, 여자 등과 같은 어떠한 큰 범주를 어느 위치에 배치하고 최종적으로 분석하기 위한 데이터 값은 무엇이면 최종 결과값은 무엇인가와 같은 개요가 잘 정립된다면 지금까지 설명드린 다차원의 데이터 구조를 잘 활용하실 수 있을 겁니다.

    댓글