본문 바로가기
데이터 분석 관련

[패스트캠퍼스] 데이터분석 강의 학습일지 (2)

by 달빛 정원 2023. 4. 24.
반응형

본격적으로 파이썬을 익히고 다루는 파트입니다. 데이터 타입, 반복문, 클래스에 대한 내용을 다루는 것으로써 데이터 분석을 위한 기초를 다지는 단계라고 보면 됩니다.

 

본 포스팅은 패스트캠퍼스 국비지원 과정인 "빅데이터 분석 첫걸음" 강의 수강과정에서 배운 내용을 정리한 학습일지입니다. 자세한 내용은 이전 포스팅을 참조하세요.

2023.04.17 - [데이터 분석 관련] - [패스트캠퍼스] 데이터분석 강의 학습일지

google colab 실습

파이썬 기초와 데이터 분석(파이썬에 익숙해지기) 

데이터 분석을 잘하기 위해서는 우선 데이터 분석 툴을 잘 익히는 게 중요합니다. 우리는 다양한 툴 중에서 파이썬을 다룹니다. 엑셀로는 대용량 데이터 분석에 한계가 있기 때문이기도 하지만 파이썬은 오픈소스가 매우 많고 커뮤니티가 잘 형성되어 있기 때문에 모르는 부분을 구글링 하면 충분히 해결해 나갈 수 있을 것이라 판단했기 때문입니다.

강의를 들으면서 배웠던 내용들 중에 다시 한번 짚고 넘어가고자 하는 부분들을 정리하면 다음과 같습니다.

데이터 타입

데이터 타입은 데이터의 종류를 말합니다. 정수, 실수, 복소수 등의 구분부터 문자열, 튜플, 리스트에 대한 개념들을 배웠습니다. 우리가 주로 사용하는 데이터 타입의 종류는 다음과 같습니다.

  • int = 정수
  • float = 실수
  • str = 문자열
  • list = 자유롭게 변경할 수 있는 데이터 묶음
  • tuple = 리스트와 비슷하지만 생성 후에 변경 불가능
  • set = 데이터 집합
  • dict = key - value 방식을 가지고 자료를 저장하는 구

본 파트에서부터는 실습도 진행하게 됩니다. google colab을 활용하여 실습을 진행하였습니다. 기본적인 사칙연산들도 배웠지만 몇 가지 자주 쓰일 법한(?) 내용은 다음과 같습니다.

문자열  formatting

fruit = "포도"
count = 5

print ("%s는 %d개 있다." % (fruit, count))

print("{}는 {}개 있다." .format("포도",5))

print(f"{fruit}는 {count}개 있다.")

모두 "포도는 5개 있다."라고 나오는데 경우에 따라서 다양하게 활용할 수 있으므로 모두 잘 익혀서 기억해놔야 할 듯합니다.

Indexing

매우 자주 사용되는 개념이며 연속형 데이터의 경우 여러 데이터에 인덱스를 통해 접근합니다. 주의할 점은 첫 번째 원소의 인덱스는 0이며 음수를 입력하면 뒤쪽부터 접근하는 것입니다. 

L = [1,2,3,4,5,6]
L[0] # 1이 출력됨.
L[-1] # 6이 출력됨.

Slicing

슬라이싱은 리스트뿐만 아니라 numpy, pandas에서도 많이 이용된다고 하니 잘 알아두어야 됩니다.

L = [1,2,3,4,5]
L [0:2] #L의 첫번째부터 index2까지 자르기 
L [1:4] #L의 두번째부터 index4까지 자르기
L [:4] #시작 인덱스를 생략하면 자동으로 0으로 인식
L [1:] # 끝 인덱스를 생략하면 자동으로 리스트의 길이가 됨.

한 가지 팁은 문자열도 연속형 데이터 타입이기 때문에 indexing과 slicing이 됩니다.

리스트 관련 함수

  • 리스트에 원소 추가하기 : append
  • 원소 정렬하기 : sort
  • 리스트 뒤집기 : reverse
  • 리스트 원소 제거하기 : pop

튜플(Tuple)

튜플은 리스트와 거의 같지만, (1) 표시방법(리스트는 [] 사용, 튜플은 () 사용), (2) 생성 후 변경이 안된다는 점에서 차이가 있습니다.

  • Mutable: list, dict, set
  • Immutable: int, float, string, tuple, frozenset

집합

집합은 우리가 배운 수학에서의 집합 개념과 동일합니다. 집합은 {}를 활용해 생성하고, 공집합을 생성할 때는 set()으로 생성합니다. 또한 집합은 원소의 중복을 허용하지 않으며, 원소의 index가 존재하지 않는다는 특성을 가지고 있습니다. 예를 들어 집합 s1 = {1,2,3,4,5}과 s2 = {3,4,5,6,7}가 있다고 가정하면, 

  • 교집합 : s1 & s2 혹은 s1.intersection(s2) = {3,4,5}
  • 합집합 : s1 | s2 혹은 s1.union(s2) 혹은 s2.union(s1) = {1,2,3,4,5,6,7}
  • 차집합 : s1-s2 = {1,2}
  • 리스트를 집합으로 변환하는 방법:
    • L = [1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4]
    • set(L) = {1,2,3,4}

집합 관련 함수는 다음과 같습니다.

  • 원소 추가: add
  • 여러 원소 추가 : update
  • 원소 제거: remove

사전(Dictionary)

파이썬에서 리스트와 함께 많이 사용되는 구조입니다. 파이썬에서 사전 자료형은 key-value 방법으로 제공됩니다(다음 표 참조). 사전 자료형을 쓰는 것의 장점은 순서가 아닌 코드값을 통해 데이터 접근이 가능하다는 점입니다.

name code
"John" 0011
"Maria" 1234

위의 표와 같이 사전을 만들면 다음과 같다.

D = {"John": "0011", "Maria","1234"}

#사전에 추가하는 방법, 예를 들어 Key가 "a"이고 value가 5인 원소를 추가하면,

D["a"] = 5

#결과
D = {"John": "0011", "Maria","1234", "a":5}

만약 키값이 이미 존재하는 경우 key값을 통해 indexing 되며 key값이 존재하지 않을 때 assignment를 사용하여 원소를 추가합니다. 사전 관련 함수를 살펴보면,

  • 사전의 모든 key값을 보기: key()
  • 사전의 모든 value값을 보기: values()
  • 사전의 모든 key, value 보기: items()
  • 사전의 원소 가져오기 : get()

IF

조건문은 파이썬에서 매우 자주 활용됩니다. 조건문을 사용하기 위해서 비교연산과 논리연산에 대하여 공부해야 합니다. 비교연산과 논리연산의 결과는 참(true)과 거짓(false)으로 나뉜다는 것을 기억해야 합니다.

a == b
a != b
a > b
a < b
a >= b
a <= b
a and b
a or b
not a

 

본 챕터에서는 간단한 예시를 들어서 설명하고 있습니다(자판기 프로그램 짜기). 자판기에 입력된 돈이 300원이면 커피를 주고, 300원 보다 적으면 돈을 그냥 돌려줍니다. 300원 보다 많은 경우 커피와 함께 거스름돈을 돌려줍니다.

money = 500
# 돈이 300원인데, 돈이 300원이랑 같으면 coffee를 준다.
if money == 300:
  print("coffee")
elif money < 300:
  print("거스름돈 %d원을 돌려줍니다." % money)
else: #나머지 케이스
  print("coffee")
  print("거스름돈 %d원을 돌려줍니다." % (money-300))

추가로  nested 구조를 활용하여 작성도 가능합니다.

#nestd if
money = 300
if money == 300:
  print("coffee")
else:
  if money < 300:
    print("거스름돈 %d원을 돌려줍니다." % money)
  else:
    print("coffee")
    print("거스름돈 %d원을 돌려줍니다." % (money-300))

For, While

반복문을 작성하는 것은 for, while 방식이 있습니다.  while은 조건을 만족할 때까지 반복하는 것입니다. 즉 조건이 만족하는 동안 while 내에 해당하는 명령을 계속 수행하게 됩니다. 예를 들어 구구단 같은 것이 있겠습니다. 다음은 2단을 실행하는 코드입니다.

# 2단을 while문으로 구현

number = 0
while number < 9:
  number = number + 1
  print("2 x %d = %d" % (number, 2*number))

아울러 위에 작성한 자판기 프로그램도 보완해서 코드를 짤 수 있죠. 실제 자판기는 돈을 한번 넣고 종료되는 것이 아니라 커피가 다 떨어질 때까지 반복하게 됩니다. 이를 while문을 통해서 구현이 가능합니다.

# 자판기의 커피 수량
coffee = 5

# 커피가 남아있는 동안 작동!
while coffee > 0:

    # 실제로는 자판기를 통해서 넣은 금액.
    money = int(input("금액을 입력해주세요 : "))
    
    ....

for문은 지정 횟수동안 반복을 합니다. 지정된 횟수라고 하는 것은 반복 대상의 크기가 될 수 있습니다. 즉 연속형 데이터 타입 변수들이 입력됩니다 (list, tuple, string)

for문은 특정 횟수동안 반복하기 때문에 range라는 함수와 같이 많이 쓰입니다. 예를 들어 range(1,6)은 1,2,3,4,5를 차례대로 생성합니다(6은 범위에서 제외됩니다. 1 <=x <6)

예를 들어 다음과 같이 6개의 음료와 가격이 담긴 리스트가 있을 때 5000원으로 먹을 수 있는 모든 음료를 추출하는 코드를 짜보면 다음과 같습니다.

coffees = ['아메리카노', '카페라떼', '카페모카', '바닐라라떼', '핸드드립', '콜드브루']
prices = [4100, 4600, 4600, 5100, 6000, 5000]

#for i in range(0, 6) :

for i in range(6) :
  if prices[i] <= 5000:
    print(coffees[i])

반복문을 수행하다가 반복이 필요 없는 경우 break, 반복문을 수행하다가 특정 조건을 건너뛰려면 continue를 사용합니다.

# 자판기의 커피 수량
coffee = 5

# 일단 작동!
while True: # 영원히 반복(infinite roof)

    if coffee == 0 :
      break

    # 실제로는 자판기를 통해서 넣은 금액.
    money = int(input("금액을 입력하세요."))
    
    ....
    elif money < 300:
        # 돈을 더 받자.
        print("돈이 모자랍니다. 추가로 금액을 입력해주세요.")
        change = money # 잔고 저장
        continue # 정산하지 않고 skip.

마무리

이번에는 파이썬의 데이터 타입, if문, for문 while문에 대하여 살펴보았습니다. 배운 내용이 많아 확실히 내 것이 되었다는 느낌은 없지만 계속 연습해 보면서 익숙해져야겠습니다. 

반응형

댓글