파이썬

random, dataframe (인사이드아웃, 흑백요리사)

content0474 2024. 10. 11. 16:40

1.인사이드아웃

1-1

인사이드 아웃 감정들을 리스트로 만들고,

거기서 랜덤으로 하나 뽑아서 오늘의 기분을 나타내기

 

1-2

사용자한테 이름을 받는 간단한 코드 추가해서 오늘의 기분은 **입니다. 로 출력하기

 

2. 흑백요리사

2-1. 데이터 프레임 만들기

 

2-1-1. 데이터프레임의 열 내에서도 랜덤으로 하나 추출할 수 있다.

 

 

2-2. 생각해보니 Edward Lee 셰프님은 한국이름 '이 균' 이므로 바꿔드려야겠다.

.replace('변경전','변경후')

데이터프레임에 사용되는 함수들은 특히나 더 간단하고 직관적인 것 같다.

 

2-3. 인사이드아웃을 참고해 랜덤셰프의 기분을 랜덤으로 출력해보자

여기까지는 너무 쉽다

 

2-4. 요리대결

이제 요리대결을 할 것인데

1)랜덤으로 셰프 두 명을 뽑고,

2)각각이 가진 character1과 character2 중에서 랜덤으로 선택

(ex 랜덤셰프1=균, 균의 랜덤특성=skilled/ 랜덤셰프2=지선, 지선의 랜덤특성=tough)

3)랜덤특성의 문자를 비교해서 승자를 결정하는 코드를 만들 것이다. (if문과 startswith/endswith)

 

1)랜덤셰프를 뽑는것은 쉽다

name1=random.choice(df['name'])
name2=random.choice(df['name'])

 

2)특성의 랜덤선택

문제는 이렇게 랜덤으로 뽑힌 셰프의 특성1,2에 접근을 해서

그 특성1,2 중 랜덤하게 하나 뽑는 코드를 만드는 것이다.

 

이 코드를 주의깊게 보자. 특히 두번째줄과 세번째줄

 

2)-(1). row=df[df['name']==name]

df['name'] 이라고 입력하면 그 결과로 나오는것은 이러한 컬럼이다.

 

df['name']==name 은 name열 내에서, 랜덤으로 뽑힌 name변수와 일치하는 행을 찾는 조건식이다.

다 같은 name이라 헷갈리는데 초록색 name 은 데이터프레임의 name열이고, 빨간색 name 은 random.choice(df[' name ']) 의 결과가 저장된 변수이다.

만약  랜덤으로 뽑은 이름이 Jisun이라면

 

그렇다면 df[df['name']==name] 의 의미는?

name=Jisun이라면 

이렇게 Jisun이 있는 행 전체를 보여주는 새로운 데이터프레임이 된다.

그리고 이 데이터프레임의 이름을 row라고 했다.

row=df[df['name']==name]  설명 끝

 

2)-(2). character=random.choice([row['character1'], row['character2']])

이렇게 뽑은 데이터프레임인 row를 가지고

character=random.choice([row['character1'], row['character2']]) 라는 코드를 입력하면

row라는 데이터프레임의 character1열과 character2열 중 하나를 랜덤하게 고르는 코드가 된다.

위의 결과에서는 strong과 tough 중 하나를 고르게 된다.

 

그런데 여기서 문제가 있다. 결과를 보면 

이렇게 나온다. 우리는 'strong' 이라는 문자만 얻고 싶다. 

row['character1'] 이라고 쓰면  strong이 아니라

이게 나온다.

너무 당연한게 df['character1'] 을 입력하면

이런 시리즈가 나온다.

마찬가지로 row[character1]도 시리즈의 형태로 반환된다.

여기서 strong만 가져오려면? value 를 쓰면 된다.

row['character1'].value[0] 이러면 

이 안에서 첫번째 값을 선택할 수 있게 된다.

 

만약에 df['character1'].value[2] 로 입력하면

이 안에서 세 번째 값인 bold 가 나온다.

 

여기까지의 내용을 이용해서 만든 코드

 

3) 이기거나 지거나 재대결하거나

이제 result1과 result2의 문자열을 보고 이기거나 진다는 내용을 넣어주면 되겠다.

나는 result1 문자열이 s로 시작하면 name1이 이기고, result2의 문자열이 t로 끝나면  name2가 이기고, 그 외에는 재대결을 하는 코드로 만들었다.

s로 시작하면: .startswith('s')

t로 끝나면: endswith('t')

 

결과와 상관없이 감동적이었던 이균 셰프님

 

 

만들면서 재밌기도 했고, 데이터프레임에서 잘못 이해하고 있던 부분도 알아낼 수 있어서 좋았다.

'파이썬' 카테고리의 다른 글

CodeKata-1  (2) 2024.11.14
WIL(2주차)  (1) 2024.10.11
관서별 5대범죄 (파이썬 라이브러리)  (2) 2024.10.10
클래스와 함수를 이용한 과제  (0) 2024.10.08
숫자게임  (2) 2024.10.07