[Python] 데이터 분석 기초

NAEMAMDAEROG·2021년 11월 30일
0

enumerate

  • 반복 가능한 객체의 인덱스와 원소에 함께 접근할 수 있는 함수.
  • tuple(인덱스, 원소)의 형태로 객체 반환.
  • 보통 list와 함께 쓰임(tuple도 가능).
people = ['펭수', '뽀로로', '뚝딱이', '텔레토비']
def func1(people):
    for i, j in enumerate(people):
        print(f"대기번호 {i+1}번 : {j}")

# 결과값
대기번호 1: 펭수
대기번호 2: 뽀로로
대기번호 3: 뚝딱이
대기번호 4: 텔레토비

zip

  • 반복가능한 객체들을 (2개 이상) 병렬적으로 묶어 주는 함수.
  • 각 원소들을 튜플의 형식으로 묶어줌.
list_3 = ['a', 'b', 'c']
list_4 = ['가', '나', '다']
for i in zip(list_3, list_4):
    print(i)

# 결과값
('a', '가')
('b', '나')
('c', '다')

lambda

  • 람다 식 형태로 되어 있어서 lambda expression(람다 표현식)이라고 함.
  • 람다는 익명의 함수로서 간편하게 작성할 수 있게 해줌.
  • python3에서는 사용이 권장 되지는 않지만 머신러닝, 데이터 분석 시에 굉장히 많이 사용됨.
lambda x: x + 2

map

  • 리스트, 튜플, 스트링 등 자료형 각각의 원소에 동일한 함수를 적용
  • 리스트로 묶어야 값이 보인다.
  • 첫 번째 인자로 값을 return하는 함수를 요구 -> 리스트의 각 값을 바꿔주려고
  • 사용자가 만들어진 map에서 원소를 찾을 때 함수를 적용해서 원소를 만들어준다.
  • map()의 경우 데이터를 map이라는 클래스로 저장하고, 데이터가 필요해질 때 주어진 연산을 수행한다.
items = [1, 2, 3, 4, 5]
squared_map = list(map(lambda x: x**2, items))
print(squared_map)

# 결과값
[1, 4, 9, 16, 25]

Quiz) 다이아몬드들의 가격을 10배로 인상하시오.

from itertools import repeat

def increase(d,n):
	d['price'] *= n
    return d

diamonds_10_times = list(map(increase_price, diamonds, repeat(10)))
  • diamonds는 increase_price의 첫 번째 인자, repeat(10)는 두 번째 인자.
  • repeat 함수는 diamonds의 길이만큼 자동으로 10 생성해준다.
  • repeat(10) = [10] * len(high_quality_diamonds)

Quiz) lambda와 map을 이용하여 items의 요소들을 string(문자)로 바꾸는 코드를 작성하시오.

items = [1, 24, 3, 6, 7]
str_items = list(map(lambda x: str(x), items))
print(str_items)

# 결과값
['1', '24', '3', '6', '7']

Quiz) 1~10까지의 정수를 항목으로 갖는 리스트 객체에서 map 함수와 람다식을 이용해 항목의 제곱값을 갖는 리스트를 반환하는 프로그램을 작성하시오.

nums = []
for i in range(1,11):
	nums.append(i)
li = list(map(lambda x: x**2, nums))
print(li)

# 결과값
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

filter

  • 여러 개의 데이터로부터 일부의 데이터만 추려낼 때 사용하는 함수.
  • 여러 개의 데이터를 담고 있는 list나 tuple을 대상으로 주로 사용하는 함수.
  • True/False를 return하는 함수를 요구 -> 조건이 True인 원소들만 거르려고
  • filter도 map처럼 사용자가 요구할 때 함수를 적용한다.
  • list()로 묶어주지 않으면 filter object로 나오기 때문에 함수가 적용된 원소를 보기 위해선 list()로 묶어줘야 한다.

비트 연산자(&, |)

2 and 6 # 6
2 & 6 # 2 -> 0010 (2^3*0+2^2*0+2^1*1+2^0*0) / 6 -> 0110 (2^3*0+2^2*1+2^1*1+2^0*0) 교집합 -> 0010 -> 2 
2 or 6 # 2
2 | 6 # 6

list Comprehension

  • 파이썬 독특한 문법. 간결한 코딩을 할 수 있음.
  • [저장할 값 for 원소 in 반복가능한 객체 if 조건]
lc_1 = [x for x in range(1, 11)] 
# [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Quiz) 구구단 2단을 list comprehension을 이용하여 구현하고 리스트를 출력해보자.

mul_2 = [x*2 for x in range(1, 10)]
# [2, 4, 6, 8, 10, 12, 14, 16, 18]

Quiz) 다음의 문장을 분석해보자.

'코로나 바이러스를 예방하기 위해 사회적 거리두기를 실천합시다. 마스크를 끼고 손씻기를 생활화합시다.'라는 문장을 띄어쓰기 별로 분석하려고 한다. 띄어쓰기 별로 문장을 나눈 후 각 요소의 길이를 리스트로 저장하시오.

sentence = '코로나 바이러스를 예방하기 위해 사회적 거리두기를 실천합시다. 마스크를 끼고 손씻기를 생활화 합시다.'
lens = [len(x) for x in sentence.split()]
# [3, 5, 4, 2, 3, 5, 6, 4, 2, 4, 3, 4]

strip, split

  • strip() : 선행과 후행 문자가 제거된 문자열의 복사본을 돌려준다. 생략되거나 None이라면, 기본값인 공백을 제거하도록 한다.
  • split() : 문자를 주면 잘라서 리스트로 반환한다. 기본값은 공백.
  • enter -> \n, space 4칸 이상 or tab -> \t

삼항 연산자

  • condition이 참이면 True_value 값을 취하고, 거짓이면 False_value 값을 취한다.
  • [True] if [Condition] else [False]
  • if만 있으면 for문 뒤에 쓰면 된다.
  • [True] for ~ if ~
  • else를 쓰면 fot문 앞에 와야 한다.
  • [True] if ~ else [False] for ~

Quiz) 10부터 20 사이의 숫자들 중에서 짝수만을 담은 리스트를 만들어보시오.

lc_2 = [x for x in range(10, 21) if x % 2 == 0]
# [10, 12, 14, 16, 18, 20]

Quiz) 40이하의 숫자는 5를 더하고 40 초과의 숫자는 41로 바꾸어 리스트로 저장하고, 리스트를 출력하라.

list_5 = [12, 67, 32, 48, 19, 57, 29, 49]
lc_6 = [x+5 if x <= 40 else 41 for x in list_5]
# [17, 41, 37, 41, 24, 41, 34, 41]

함수에서 매개변수가 몇 개인지 모를 때 처리 방법

  • 패킹 : 한 변수에 여러 개의 데이터를 넣는 것 ex) e = [1, 2, 3]
  • 언패킹 : 하나의 데이터를 각각의 변수로 반환 ex) f,g,h = e
  • *args : 여러 개의 매개변수를 함수로 받고 싶을 때, 다른 변수와 함께 매개변수로 사용될 때는 맨 뒤에 위치해야 한다.
  • **kwargs : 키워드 = 특정 값의 형태로 함수를 호출 할 수 있다.
  • *변수를 ** 변수보다 앞에 두어야 한다.

출처

profile
Blockchain & Programming 공부 기록

0개의 댓글