think deeply

[KT AIVLE] DAY 2-7 : 파이썬 데이터 다루기 회고(feat. 반영vs 반환, f-String, *args, 리스트 메소드, 워드클라우드) 본문

KT AIVLE

[KT AIVLE] DAY 2-7 : 파이썬 데이터 다루기 회고(feat. 반영vs 반환, f-String, *args, 리스트 메소드, 워드클라우드)

윌_ 2023. 2. 17. 18:48

 

 

오프닝데이 다음, 6일동안은 파이썬의 기초 데이터 다루는 법을 배웠다.

그리고 이 모든 것은 이장래 강사님께서 가르쳐주신다.


<목차>

1. 강의 구성

2. 정리할 내용

3. 개인적 회고

 

1. 강의 구성

< Day 1, 2 >

기본연산자

기본자료형

문자열 자료형

< Day 3 >

리스트, 튜플, 집합

< Day 4, 5 >

딕셔너리 자료형

제어문

함수

정규표현식

< Day 6 >

텍스트 파일 다루는 법

엑셀 파일 다루는 법

이메일 보내기

 

2. 정리할 내용

 

 

문자열 포맷팅

 

방법 1) .format :

문자열 포맷팅이라고 하며, 해당 위치 { }에 변수 넣어서 출력하고 싶을 때 자주 사용한다.

아래 간단한 예시같이 print문에 주로 쓴다.

 

name = '김규한'
age = '26'
num = '010-xxxx-xxxx'
print( '이름: {}, 나이: {}, 전화번호: {}'.format(name, age, num) )

출력결과: 이름:김규한, 나이: 26, 전화번호: 010-xxxx-xxxx
 

방법 2) f-String :

문자열 포맷팅 때 주로 .format()으로 많이 썼는데, 해당 방법이 훨씬 편리하다.

f ' 문자열 {변수} 문자열 {변수} '

이런 형태로 쓰인다.

아래 예시를 보면 알겠지만, 코드 작성할 때 더 직관적이라 편리하다.

이 방법을 익혔다.

 

name = '김규한'
age = '26'
num = '010-xxxx-xxxx'
print( f'이름: {name}, 나이: {age}, 전화번호: {num}')

출력결과: 이름:김규한, 나이: 26, 전화번호: 010-xxxx-xxxx

자료형


튜플(Tuple)

 

  • 소괄호() 사용
  • 괄호 생략 가능
  • 리스트와 비슷하나 요소값을 바꿀 수 없다는 차이점

집합(set)

  • 중괄호{} 사용
  • 집합 연산을 위한 자료형
  • 중복 허용 X ( list 형에서 중복 없애주고 싶을 때 리스트 → 집합 → 리스트로 활용 가능 )
  • 원소 순서가 의미없기에 인덱싱, 슬라이싱 불가

 

 

제어문

if ~elif~else 문

작성할 것 못정했을 때 pass 활용

조건에 따른 처리어떻게 할지 아직 못정했거나 아무것도 안할거라면 pass 활용 가능

while문 : 빠져나오기!

조건이 True인 동안 while문 안의 문장은 무한 반복 실행

while문은 무한반복 막기 위해 조건을 넣어 제어해주어야 한다.

ex. break 문 :

특정 조건에 대한 처리로 break를 사용하면 while문을 빠져나올 수 있음

ex. continue문 :

반복문 중단을 하지 않고 다시 while문 안의 가장 상단으로가 다음 반복으로 넘어갈 때 사용

ex. False 상황:

False상황을 만들어 while문을 나올 수 있음

 

함수

함수 만들때, 입력(input) 활용하기

함수 만들 때 '입력받아서 문자열 포맷팅' 잘 활용하면 유용하겠다

 

방법 1) def function ( 파라미터 ) :

def 만들어줄 때, 파라미터를 인풋으로 무조건 받아야하도록 설계

방법 2) 함수 내에서 input()으로 받아주기

def aka():
	name = input('이름이 어에됩니까')
    print(f'{name}님 안녕하송') 
    
    
aka()

aka() 출력하면 '이름이 어에됩니까'하고 입력창이 생성된다.

사용자가 이름을 입력해주면 name에 저장되고 문자열 포맷팅해준 것처럼

(입력한 name)님 안녕하송 하고 출력된다.

 

여러 개의 매개변수를 받아야할 때: * 사용

예시로 def function ( *args ) 를 많이 본 사람이 있을 것이다.

이때 *여러 개의 매개변수를 받아줄 때 사용하는 것이다.

# 예시 # 로또 채점표를 만들어봅시다. def lottery(*nums): winner = [4,7,44,32,21,3] # 정답 count=0 for i in nums: if i in winner: count += 1 return count # 채점받고자 하는 번호 기입 lottery( 3, 7, 19, 23, 34, 41 ) #출력 2

def 생성할 때 받고자 하는 파라미터가 여러 개라면 앞에 *를 붙여주면 된다.


<참고>

 
# 주의
def lottery(*nums):
	winner = [4,7,44,32,21,3]  #정답
    
    count=0 
    for i in nums:
		if i in winner:
    		count += 1 
        	return count 
        

# 채점받고자 하는 번호 기입
lottery( [3, 7, 19, 23, 34, 41] )

매개변수에 리스트[]를 넣어주면 하나로 인식하겠지.

그럼 4,7,44,32,21,3 중에 [ 3,7,19,23,34,41 ]이 있는 지 묻는거니까

당연히 출력 = 0

그럼 리스트로 넣어주고 싶을 때는 어떻게 해야하냐?

 lottery( *[3, 7, 19, 23, 34, 41] )

여기에도 * 을 붙여주면 하나씩 본다.

따라서 출력 = 2


반영 VS 반환

반영, 반환 개념이 헷갈리는 경우가 있었는데, 해당 강의에서 개념을 제대로 정리할 수 있었다.

가장 큰 수확이라고 생각하는 부분!

문자열 관련 메소드

문자열 관련 메소드 예시:

.upper()

.lower()

.replace(x,y)

.split(구분자)

'(중간에 넣을 값)'.join(합칠 문자열)


변환해주는 함수 결과를 변수에 반영할려면

메소드가 반환하는 값변수에 대입해줘야함

 
a= 'I have a Dream.'
print(a.upper())

#출력 결과
I HAVE A DREAM. 

# a에 반영되진 않았지만, a.upper 반환값을 출력한 것


a= 'I have a Dream.'
a.upper print(a)

# 출력 결과
I have a Dream. 

# a.upper()해주는 것(메소드)가 a 자체에 바꾸진 않음
# 바로 a를 출력하려면 위에서 a = a.upper() 해주어야한다
# a.upper의 반환값을 a에 반영해주어야한다

리스트 관련 메소드

리스트 관련 메소드 예시:

insert()

append() : 요소 하나만 가능

clear() : 리스트 내용 모두 삭제

del() : 리스트 특정 위치 요소 삭제

extend() : 리스트 병합

sort()

reverse() : 리스트 역순


리스트 관련 메소드는 변환한 값을 반환하는 것이 아니라, 바로 반영한다!

고로 반환값이 없는 것이다.

a = ['c','a','b']
a.sort()
print(a)

# 출력 결과
['a','b','c']

# 리스트에는 왜 a가 바뀌어서 출력이 되냐?
# 리스트에 대한 메소드는 반영이라서!!
# 반면, 반영이기에 차이점이 있다.

 

다음 예시를 보자.
a = ['c','a','b']
a = a.sort()
print(a)

# 출력 결과
None

# a에 반영해줬는데 왜 None을 출력되냐?\
# a.sort() : '(리스트).(메소드) = 반영'이라서 a로 반환해줄 것이 없어서 그런 것!
# 반환을 안해주니 반영을 못해
# 따라서 리스트 관련 메소드는 앞에서 받아주면 안된다

a = ['c','a','b']
print(a.sort())

# 출력 결과
None

# 반환이 없고 반영되기에 출력되는 것이 없음
 

결론은 이 개념이 우리가 코드를 짤 때, 함수 활용 때 많이 당황을 하는 부분인데,

반환인지, 반영인지 구분을 지어보니

코드짜는 게 한결 수월해졌다.


워드 클라우드

 

정규표현식을 얕게 다루고 난 후, 간단한 수준의 워드클라우드를 활용해

마틴 루터 킹 목사의 연설문을 분석했다.

형태소 분석같은 전처리 고도화 과정이 거의 제외되었고

슬라이싱, 간단한 불용어 처리 과정만을 거쳤다.

워드클라우드 결과물

워드클라우드는 연구실에서도 대학원 강의에서도 재차 듣고 해보았던 부분이라 친근했다.

PIL 라이브러리, Image 함수를 활용하면 이미지 마스킹을 할 수 있다.

이 부분이 흥미로웠다.

색상정보를 적용해서 이미지에 맞는 색상으로 워드클라우드를 생성할 수도 있다.

이미지 마스킹한 결과물

 


내 일본여행 포스팅을 긁어와 일본 한자에 마스킹한 결과물
 

개인적 회고

이메일 보내기는 처음 해보았다.

간단히 엑셀 파일 불러와서 문자열 포메팅 활용하면

이메일 반복 작업을 자동화하는 것을 만들어볼 수 있겠다는 생각이 들었다.

txt파일을 불러오고 읽고 쓰고, 엑셀파일을 다루는 내용도 수업에 포함되어있었다.

수업에서 다루어지는 대부분의 내용이 적어도 강의로만 4-5번 들었던 내용들이었다.

그런데, 이제야 그려진다.

각 개념을 어떻게 활용해야할지, 어디에 적용해서 내가 무엇을 해볼 수 있을지.

6일 간 익숙한 내용을 들으며

들었던 생각은 '겸손해지자'였다.

내가 쓸 줄 알아야 제대로 된 개념임을 느낀다.

되게 좋은 시간이었거 나에겐 엄청 다행이었다고 생각한다.

이 시점에 또 다시 익숙하다고 넘어갔더라면

공부하는데 본이 흔들렸을 것 같다.

너무 재밌다.

스스로 코드에 쏟는 시간을 늘려야겠다.

정형화된 형식들도 자주보고 독파해야겠다.

 


그리고 번외로 이장래 강사님처럼

나이들어가고 싶다.

화법도 굉장히 우아하다.

문장이 간결하고 배려가 묻어난다.

그러다보니 흐믓하고 얕은 말장난에 웃음이 난다.

최고! 앞으로도 기대가 된다.

Comments