[이솦] 파이선으로 배우는 AI 기초 09
리스트는 머신러닝과 딥러닝에서 행렬 연산에 사용되는 자료형이다. 머신러닝을 위해서 기본적으로 사용되는 데이터는 아주 많다. 따라서 대부분의 경우에는 파일로 저장되어 있다.
하지만 머신러닝을 공부할때 파일에서 읽어 오기 보다는 데이터를 생성해서 작성하기도 한다.
예를 들어서 1에서 100사이의 짝수가 필요하다고 가정해 보자.
리스트로 만드려면 num_even = [2,4,6,8.... 98]해서 num_even이라는 변수로 만들어 주면 된다. 하지만 다 타이핑 해야 된다. 그런데 필요한게 1부터 10억 사이의 짝수라면 코딩하고 싶지 않을것이다. 요소를 나열하는게 너무 많아 어려운 경우 어떻게 해야 할까요?
리스트에 숫자가 아니라 조건을 주면 된다.
자료 검색시 사람마다 빈번하게 검색하는 자료는 따로 있다. 음원 사이트에가서 나만의 리스트를 만들거나. 주식 검색 사이트에서 관심 종목 리스트를 만드는 것이다.
list Comprehension
리스트는 []대괄호에 묶여 자료가 나열되어 있는 형태이다. 리스트 내용중 일부만 다시 추출해 리스트로 만들고 싶다면?
List Comprehension 기존 리스트에서 짧은 구문을 이용해 새로운 리스트를 만드는 방법
집합을 배우면서 학습했던 조건제시법과 유사하다.
예를 들어 10이하의 소수를 리스트로 다 코딩하는 방법이 있고 소수를 만드는 규칙을 적어 주는 방법이 있다.
바나나 사과 망고 불루베리 복숭아 리스트에서 불루 베리를 빼는 방법을 생각해 보자. 뺄수도 있지만 A가 들어가지 않은 것을 빼고 들어가는 것 만을로 리스트를 재 구성할수 있다.
fruits = ['banana', 'apple', 'mango', 'blueberry', 'peach']
new_fruits = []
for x in fruits:
if 'a' in x: # Indent this line to include it in the for loop
new_fruits.append(x) # Indent this line to include it in the if block
print (new_fruits)
리스트 컴프리헨션을 쓰면 조금더 잘 만들수 있다.
fruits = ['banana', 'apple', 'mango', 'blueberry', 'peach']
new_fruits = [x for x in fruits if 'a' in x]
print (new_fruits)
2번줄을 리스트 내포라고 한다. X는 리스트의 값으로 만들어 질꺼야 for를 통해서 반복을 할꺼야. if문을 써서 문자열에 a가 있으면 x로 지정해줘 이다.
색 이름 중에서 글자에 e가 포함된 것들만 골라서 새로운 리스트를 만들어 보자.
colors = ["black", "white", "blue", "red", "yellow"]
new_list = [x for x in colors if "e" in x]
print(new_list)
리스트 안에 딕셔너리가 있는 구조를 활용해 보자.
뮤직 리스트 안에 딕셔너리가 있는 구조를 만들어 보자.
music_list = [{"title":"Fake Love", "artist":"BTS", "play": 100},
{"title":"Power", "artist":"EXO", "play": 150},
{"title":"Next Level", "artist":"Aespa", "play":80}]
favorite_list = [x ["title"] for x in music_list if x["play"] >= 100]
print(favorite_list)
딕셔너리 묶음 요소가 3개가 있다. 이렇게 하면 플레이 횟수 100 이상의 타이틀만 뽑아 낼수 있다.
stock_list = ['오성전자', None, '오성바이오', '현대자전거', '화성전자', None, '펭수증권']
new_list = [x for x in stock_list if x is not None]
print(new_list)
이렇게 하면 none을 제외한 값을 가져오게 된다.
실제로 머신러닝 프로젝트에서는 데이터 전처리 부분에서 리스트 내포를 많이 사용한다.
length = [25.4, 26.3, 26.5, 29.0, 29.0, 29.7, 29.7, 30.0, 30.0, 30.7, 31.0, 31.0, 31.5,
32.0, 32.0, 32.0, 33.0, 33.0, 33.5, 33.5, 34.0, 34.0, 34.5, 35.0, 35.0, 35.0,
36.0, 36.0, 37.0, 38.5, 38.5, 39.5, 41.0, 41.0]
# Assign the list of weights to the variable 'weight'
weight = [242.0, 290.0, 340.0, 363.0, 430.0, 450.0, 500.0, 390.0, 450.0, 500.0, 475.0,
500.0, 500.0, 340.0, 600.0, 600.0, 700.0, 700.0, 610.0, 650.0, 575.0, 685.0,
620.0, 680.0, 700.0, 725.0, 720.0, 714.0, 850.0, 1000.0, 920.0, 955.0, 925.0, 975.0, 950.0]
fish_data = [[I, w] for I, w in zip(length, weight)]
print(fish_data)
물고기의 길이와 무게 데이터 이다. 이거를 쌍으로 만들고자 한다면 이렇게 지정해 주면 된다. 이런형태는 아주 빈번하게 나타난다.
l과 w라는 데이터를 만들어 줄껀데 zip이라는 함수로 묶어 줄꺼야. 이며 이렇게 하면 데이터를 쉽게 전처리 할수 있다.
실습
stock_list = ['오성전자', '오성월드', '오성바이오', '현대자전거', '화성전자', '이전자', '펭수증권']
favorite_list = [x for x in stock_list if "오성" in x]
print(favorite_list)
리스트 안에서 오성이 들어간 것만 뽑아줘 이며 List Comprehension의 핵샘은 조건을 제시하는 것이다. 조건을 제시하는것만 익숙해 지면 유용할수 있다.
List Comprehension 은 파이썬 고급 기법이며 머신러닝을 배울때 흔히 나오는 방법이다.