Home [SeSAC]파이썬 데이터 처리 프로그래밍-5일차
Post
Cancel

[SeSAC]파이썬 데이터 처리 프로그래밍-5일차

파이썬 기초

랜덤 숫자 맞추기 게임

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 프로그램 실행시 랜덤으로 1~100 사이의 숫자를 생성
# 10번의 기회가 있고, 10번 동안 숫자를 입력 받아 숫자를 맞추는 게임
# 정답이 아닐 때마다 up/down을 출력
# 정답을 맞추면 "정답"을 출력
# 10번의 기회동안 정답을 못 맟췄다면 "실패" 출력

import random
answer = random.randint(1,100)

for i in range(10):
    try:
        guess = int(input(f"[{i+1}번째 기회]숫자 입력:").strip())
        if guess == answer:
            break
        elif guess > answer:
            print("down")
        elif guess < answer:
            print("up")
    except:
        print("숫자를 입력해주세요")
        
if guess == answer:
    print("성공!")
else: print("실패!")

quit(), exit()와 같은 함수로 바로 종료시켜보려 했으나, jupyter notebook환경은 파이썬을 직접 돌리지 않기 때문에 동작하지 않는다

랜덤 숫자 맞추기 게임(2)

  • 입력 숫자 범위 설정 추가
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# 숫자 맞추기
# 입력값이 숫자가 아니거나 1~100 사이의 숫자가 아닐 경우
# 기회를 차감하지 않도록 변경

# 프로그램 실행시 랜덤으로 1~100 사이의 숫자를 생성
# 10번의 기회가 있고, 10번 동안 숫자를 입력 받아 숫자를 맞추는 게임
# 정답이 아닐 때마다 up/down을 출력
# 정답을 맞추면 "정답"을 출력
# 10번의 기회동안 정답을 못 맟췄다면 "실패" 출력

import random
answer = random.randint(1,100)

count = 0
while count < 10:
    try:
        guess = int(input(f"[{count+1}/10번째 기회]숫자 입력:"))
    except:
        print("숫자를 입력해주세요")
        continue
    if not (1 <= guess <= 100):
        print("1~100 사이의 숫자를 입력해주세요")
        continue

    if guess == answer:
        print("성공")
        break
    elif guess > answer:
        print("down")
    elif guess < answer:
        print("up")
    count+=1
    
        
if guess != answer:
    print("실패!")

랜덤 숫자 맞추기 게임(3)

  • 함수화
  • 메뉴 추가
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# 숫자 맞추기 스무고개 게임
# 메뉴를 출력하고 "게임 시작"
import random

# 게임
def start_game():
    answer = random.randint(1,100)
    count = 0
    while count < 10:
        try:
            guess = int(input(f"[{count+1}/10번째 기회]숫자 입력:"))
        except:
            print("숫자를 입력해주세요")
            continue
        if not (1 <= guess <= 100):
            print("1~100 사이의 숫자를 입력해주세요")
            continue

        if guess == answer:
            print("성공")
            break
        elif guess > answer:
            print("down")
        elif guess < answer:
            print("up")
        count+=1
    if guess != answer:
        print("실패!")
        
# 메뉴
def print_menu():
    print("====메뉴====")
    print("1. 게임 시작")
    print("2. 게임 종료")
    
while True:
    print_menu()
    try:
        choice = int(input("메뉴 선택:"))
    except:
        print("숫자를 입력해주세요")
        continue
    if choice == 1:
        print("====게임을 시작합니다====")
        start_game()
    elif choice == 2:
        print("====게임을 종료합니다====")
        break
    else:print("잘못된 입력입니다")

랜덤 숫자 맞추기 게임(4)

  • 성공/실패 횟수 기록 추가
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# 숫자 맞추기 스무고개 게임
# 메뉴를 출력하고 "게임 시작"
# 사용자 이름 입력
import random

# 게임
def start_game(username, win, lose):
    answer = random.randint(1,100)
    count = 0
    while count < 10:
        try:
            guess = int(input(f"[{count+1}/10번째 기회]숫자 입력:"))
        except:
            print("숫자를 입력해주세요")
            continue
        if not (1 <= guess <= 100):
            print("1~100 사이의 숫자를 입력해주세요")
            continue

        if guess == answer:
            print(f"{username}성공")
            win += 1
            return win, lose
        elif guess > answer:
            print("down")
        elif guess < answer:
            print("up")
        count+=1
    if guess != answer:
        print(f"{username}실패!")
        lose += 1
    return win, lose
        
# 메뉴
def print_menu():
    print()
    print("====메뉴====")
    print("1. 게임 시작")
    print("2. 기록 보기")
    print("3. 게임 종료")

# 기록보기
def show_score(username, win, lose):
    print()
    print(f"===={username}님의 성적====")
    print(f"성공 횟수:{win}")
    print(f"실패 횟수:{lose}")
    
# 실행
username = input("이름을 입력하세요")
win = 0
lose = 0
while True:
    print_menu()
    choice = input("메뉴 선택:")
    
    if choice == '1':
        print("====게임 시작====")
        win, lose = start_game(username, win, lose)
    elif choice == '2':
        show_score(username, win, lose)
    elif choice == '3':
        print()
        print("====게임 종료====")
        break
    else:
        print()
        print("잘못된 입력입니다")

Pandas 기초

Series, array의 특징:

  • 같은 타입의 원소만 넣을 수 있다 -> 속도가 빠르다
  • 다른 타입의 원소를 넣으면 object로 바뀜

Series

  • 인덱스 추가 가능
    1
    2
    
    ser = pd.Series([1,2,3,4], index=["a", "b", "c", "d"])
    ser["a"]
    

조건

1
2
df_sub = df[(df.season == 1) & (df.holiday == 1)]
df_sub

그룹바이와 agg 사용법

1
df.iloc[:, [1,9]].groupby('season').agg(['sum', 'min', 'max'])

실습

1
2
3
# causal 값이 10 이상인 데이터의 season별 registered의 합계

df[df['casual']>=10][['season', 'registered']].groupby('season').sum()

결측치

df.fillna()
  • null, nan값을 괄호 안 값으로 대체
1
2
# df.count의 결측치를 count의 평균으로 대체
df[['count']].fillna(df['count'].mean())

df.dropna()

  • 결측치가 포함된 행 삭제
    1
    
    df.dropna()
    
    1
    2
    3
    
    # 1%의 데이터 삭제
    df_sub = df.loc[df['casual'] < df['casual'].quantile(0.99)]
    len(df_sub)
    

DB에서 판다스로 불러오기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# db에서 판다스로 불러오기
import pymysql
import pandas as pd

# DB 접속
db = pymysql.connect(host="localhost", port=3306, user="root", password="peter2012!", db="sba")
cursor = db.cursor()

# 가수명, 팔로워수, 노래 제목, 앨범 명 DB에서 불러오기
sql = """
SELECT singer.name, singer.follower, song.title, song.album
FROM singer 
    JOIN song 
    ON singer.id = song.singer_id;
"""
cursor.execute(sql)
rows = cursor.fetchall()
db.close()

# 데이터를 dataframe으로 저장
df = pd.DataFrame(rows)
df.columns = ['name', 'follower', 'title', 'album']
df

1
2
# 가수별로 TOP 100에 있는 제목의 수를 출력 하여 정렬
df[['name', 'title']].groupby('name').count().sort_values(by='title', ascending=False)

numpy로 array 만들기

1
2
3
4
import numpy as np
np.zeros([5,4])
df = pd.DataFrame(np.zeros([5,4]))
df

할당표현식

1
2
3
a = []
for i in range(100):
    a.append(i)

을 아래와 같이 표현할 수 있다

1
[x for x in range(100)]
This post is licensed under CC BY 4.0 by the author.

[SeSAC]파이썬 데이터 처리 프로그래밍-4일차

[lvl3]네트워크