[파이썬 프로그래밍 14] 데이터로 2차원 목록 만들기

Home / 파이썬 프로그래밍 / [파이썬 프로그래밍 14] 데이터로 2차원 목록 만들기
데이터로 2차원 목록 만들기
데이터는 보통 표의 형식을 하고 있습니다. 물론 영상이나 소리 데이터 같이 표의 형식이 아닌 경우도 있지만, 숫자로 만들어진 데이터는 웬만하면 표의 형식입니다.
한 아파트 단지안에서 각 입주가정의 물 사용량을 예로 들어 보겠습니다. 물 사용량에 영향을 미치는 것은 여러가지가 있을 것이라고 짐작해볼 수 있습니다. 그중 몇개를 추려 아래와 같이 표로 데이터로 만든다고 가정해보겠습니다.  아래 데이터는 실제 데이터가 아니라 데이터 형식을 설명하기위해 가상으로 만든 데이터입니다.
물사용량, 가족수, 여자비율, 평균나이, 나이표준편차
201, 4, 0.5, 20.0, 16.207
115, 3, 0.333,  35.0, 5.291
198, 3, 1.0, 27.0, 1.732
87, 3, 0.0, 30.333, 2.517
321, 5, 0.6, 47.6, 14.491
236, 4, 0.75, 36.25, 16.48
데이터를 입주가정별로 묶어 파이썬의 목록으로 만들어 보겠습니다.
[ 물사용량, 가족수, 여자비율, 평균나이, 나이표준편차 ]
[ 201, 4, 0.5, 20.0, 16.207 ]
[ 115, 3, 0.333,  35.0, 5.291 ]
[ 198, 3, 1.0, 27.0, 1.732 ]
[ 87, 3, 0.0, 30.333, 2.517 ]
[ 321, 5, 0.6, 47.6, 14.491 ]
[ 236, 4, 0.75, 36.25, 16.48 ]
맨처음 목록은 데이터가 무엇을 의미하는지를 나타낸 것입니다. 숫자가 아닌 텍스트로 만들어져 있습니다. 파이썬에서는 텍스트를 작은 따옴표나 큰 따옴표로 묶어야합니다.
이 목록은 실제 데이터가 아니므로 따로 desc 라는 변수(저장장소)에 보관해 나중에 각 데이터가 무엇인지 확인할때 쓰면 되겠습니다.
desc = [ '물사용량', '가족수', '여자비율', '평균나이', '나이표준편차' ]
이제 숫자로 만들어진 목록들만 남습니다. 목록들을 다시 묶어 목록의 목록을 만듭니다. 그리고 data라는 변수에 저장하겠습니다.
data = [ [ 201, 4, 0.5, 20.0, 16.207 ],
         [ 115, 3, 0.333,  35.0, 5.291 ],
         [ 198, 3, 1.0, 27.0, 1.732 ],
         [ 87, 3, 0.0, 30.333, 2.517 ],
         [ 321, 5, 0.6, 47.6, 14.491 ],
         [ 236, 4, 0.75, 36.25, 16.48 ] ]

data에 무엇이 저장되었는지 print(data)를 쳐서 확인해 보겠습니다.

[[201, 4, 0.5, 20, 16.207],
 [115, 3, 0.333, 35, 5.291],
 [198, 3, 1.0, 27, 1.732],
 [87, 3, 0.0, 30.333, 2.517],
 [321, 5, 0.6, 47.6, 14.491],
 [236, 4, 0.75, 36.25, 16.48]]

data에 저장된 목록에는 숫자가 여러개 들어가 있는 것이 아니라 숫자들이 모여있는 목록이 여러개 들어가 있습니다. 따라서 data[0]에는 숫자가 아나라 목록이 들어있게 됩니다, 목록의 첫번째는 0으로 시작되므로 data[0]에는 첫번째 목록 [ 201, 4, 0.5, 20.0, 16.207 ] 이 들어가 있습니다.

print(data[0])
[201, 4, 0.5, 20, 16.207]

두번째 목록은 data[1]로 세번째 목록은 data[2]로 확인할 수 있습니다.

data[1]은 목록이므로 그 안에있는 숫자를 알아보려면 data[1]자체를 목록처럼 사용하면 됩니다. 예를 들어 data에 저장된 목록안에서 두번째 목록의 첫번째 숫자를 알아보려면, data[1][0]을 확인하면 됩니다.

print(data[1][0])
115

data에 저장된 목록안에서 네번째 목록의 다섯번째 숫자를 알아보려면 data[3][4]를 확인하면 됩니다.

print(data[3][4])
2.517
‘목록의 목록’은 위의 표처럼 세로에서의 위치와 가로에서의 위치를 가지고 숫자들의 모임입니다. (꼭 숫자일 필요는 없습니다) 따라서 ‘2차원 목록’이라고도 부를 수 있습니다.

또 다른 가상 데이터의 아래 ‘목록의 목록'(또는 2차원 목록)을 만들어보겠습니다.

$$[ x, 2x, x^2],  x = 1 \dotsb 10$$

다시 말해 아래와 같은 목록을 만들어보자는 얘기입니다.
[ [1, 2, 1],
  [2, 4, 4], 
  [3, 6, 9],
  ...
  [10, 20, 100] ]

먼저 빈 목록을 data라는 변수에 저장하고, [1, 2, 1] 목록을 data에 추가하고, [2, 4, 4]목록을 data에 추가하고 하는 식으로 만들 수 있습니다.

data = []
for k in range(1, 11) :
    data.append([k, 2*k, k**2])

대괄호안에 for를 쓰는 방법으로도 만들 수 있습니다.

data = [ [k, 2*k, k**2] for k in range(1, 11) ]

print(data)를 실행해보면 아래와 같은 결과가 화면에 출력됩니다.

[[1, 2, 1], [2, 4, 4], [3, 6, 9], [4, 8, 16], [5, 10, 25], [6, 12, 36], [7, 14, 49], [8, 16, 64], [9, 18, 81], [10, 20, 100]]

목록을 다 연결해서 나열하기 때문에 데이터를 읽기가 쉽지 않을 수 있습니다. 이럴땐, 내부의 목록 하나하나를 끊어서 아래와 같이 세로로 나열하면,가로로 3개 세로로 10개로 나열된 표를 만들 수 있습니다.
[[1, 2, 1],
[2, 4, 4],
[3, 6, 9],
[4, 8, 16],
[5, 10, 25],
[6, 12, 36],
[7, 14, 49],
[8, 16, 64],
[9, 18, 81],
[10, 20, 100]]