본문 바로가기
유데미 스타터스 데이터 분석

유데미 스타터스 취업 부트캠프 4기 - 데이터분석/시각화(태블로) 4주차 학습 일지(1)

2023. 3. 5.

2022.02.27 ~ 2022.03.03

4주차는 드디어 태블로 기초 과정이 시작되었는데 데이터 드리븐 디자인 씽킹과 공휴일이 각각 하루씩 차지하여 실질적으로 태블로를 학습한 일자는 3일 남짓이었다. 그래서 태블로에 대한 내용은 차주 학습일지에 한 번에 정리하는 것이 좋을 것 같고 이번 학습일지에서는 파이썬 로드맵에 따른 총정리를 진행하려 한다.

유데미 스타터스 취업 부트캠프 4기 - 데이터분석/시각화(태블로) 4주차 학습 일지(1)
유데미 스타터스 취업 부트캠프 4기 - 데이터분석/시각화(태블로) 4주차 학습 일지(2)
유데미 스타터스 취업 부트캠프 4기 - 데이터분석/시각화(태블로) 4주차 학습 일지(3)


데이터 분석을 위한 파이썬 로드맵(내가 보려고 만듦)

>> 데이터 분석 역량은 여기 참고

 

분석이 하고 싶니? 죽도록 하고 싶은거야?

요즘 하는 생각... 1. '데이터 분석 = 끼워맞추기'다? 데이터 분석에 앞서 데이터를 통해 무엇을 알고 싶은지, 이를 확인할 수 있는 지표를 어떻게 정의할지, 확인한 사실로 무엇을 하고 싶은지 문

hyeyun133.tistory.com


파이썬 기본 문법

1) 입출력과 연산

Q. 화씨 온도를 입력받아 섭씨 온도로 변환하는 프로그램을 작성해보세요.

# 화씨온도 입력
f = float(input('화씨온도:'))

# 섭씨온도로 계산
c = (f - 32) * (5/9)

# 결과 출력
print(f'화씨온도:{f} --> 섭씨온도:{c}')

2) 자료형

문자열

Q. 사용자의 영문 이름을 입력받아 성과 이름 순서를 바꾸어서 출력하는 프로그램을 작성하세요.
성과 이름은 공백으로 구분합니다.

# 사용자의 영문이름 입력받기 (성과 이름은 공백으로 구분)
full_name = input('영문이름(성과 이름은 공백으로 구분하세요):')

# 공백의 위치 찾기
space = full_name.find(' ')
print(space)
# 성, 이름을 슬라이싱하여 각각 변수에 담기
first_name = full_name[:space]
last_name = full_name[space+1:]

print()

# 성, 이름의 순서를 바꾸어 출력하기

리스트

Q. 리스트 생성하기

li = []
li = list()
li = [1,2,3,4,5]
li = list(range(1, 100, 2))

Q. 리스트 슬라이싱 하기

l1 = ['a','b','c','d','e','f','g']
l1[1:3]
l1[-3:-1]
l1[:]
l1[::-1]
l3[::2]

>> ['b','c']
>> ['e','f']
>> ['a','b','c','d','e','f','g']
>> ['g','f','e','d','c','b','a']
>> ['a','c','e','g']

Q. 아래 wishlist의 '시계','신발'을 myCart로 이동해봅시다.

wishlist = ['가방','시계','신발']
mycart = []

#wishlist의 시계, 신발을 추출해서 mycart에 담는다.
mycart.extend(wishlist[1:3])

#wishlist의 시계, 신발을 삭제한다.
del wishlist[1:3]

Q. 파일리스트에서 파일명과 확장자를 분리하여 다음과 같은 형태로 저장하는 리스트를 만들어봅시다.
|파일명|확장자| |--|--| |file1|py| |file2|txt| |file3|pptx|

file_list = ['file1.py','file2.txt','file3.pptx']
name_extension = []

for i in file_list:
    #print(i.split('.'))
    name_extension.append(i.split('.'))

print(name_extension)

>> [['file1', 'py'], ['file2', 'txt'], ['file3', 'pptx']]

Q. 다음은 학생 별 [국어,영어,수학]점수가 저장된 리스트이다.
score_list = [[96,84,80],[96,86,76],[76,95,83],[89,96,69],[90,76,91]]
각 학생의 세 과목의 성적의 [총점, 평균]을 구하여 리스트에 담으시오. (평균은 반올림하여 소수점 1자리까지 표현한다.)

score_list = [[96,84,80],[96,86,76],[76,95,83],[89,96,69],[90,76,91]]
stu_scores = []

for i in score_list:    
    total = sum(i)
    average = total/3
    #print([total,rount(average,1)])
    stu_scores.append([total,round(average,1)])
stu_scores

>> [[260, 86.7], [258, 86.0], [254, 84.7], [254, 84.7], [257, 85.7]]

Q. 다음은 학생 별 [국어,영어,수학]점수가 저장된 리스트이다.
score_list = [[96,84,80],[96,86,76],[76,95,83],[89,96,69],[90,76,91]]
각 과목의 리스트를 분리하고 과목별 평균을 구해봅시다. (평균은 소수점 1자리까지 출력한다.)

score_list = [[96,84,80],[96,86,76],[76,95,83],[89,96,69],[90,76,91]]
kor_list=[]
eng_list=[]
math_list=[]

kor_average=0
eng_average=0
math_average=0

#각 과목의 리스트 분리하기
for i in score_list:
    #print(i)
    kor_list.append(i[0])
    eng_list.append(i[1])
    math_list.append(i[2])

print('kor_list:',kor_list)
print('eng_list:',eng_list)
print('math_list:',math_list)

kor_average = sum(kor_list)/len(kor_list)
eng_average = sum(eng_list)/len(eng_list)
math_average = sum(math_list)/len(math_list)

print('kor_average:',round(kor_average,1))
print('eng_average:',round(eng_average,1))
print('math_average:',round(math_average,1))

>> kor_list: [96, 96, 76, 89, 90]
eng_list: [84, 86, 95, 96, 76]
math_list: [80, 76, 83, 69, 91]
kor_average: 89.4
eng_average: 87.4
math_average: 79.8

Q. 메뉴를 입력받아 랜덤으로 메뉴를 정하는 프로그램을 작성해봅시다. 공백('')을 입력할 때까지 메뉴를 입력받습니다.

menulist = []
while True:
    menu = input('메뉴:')
    if menu=='':
        break
    menulist.append(menu)

print('오늘의 메뉴는:',random.choice(menulist))

Q. 튜플 생성하기

tp = ()
tp = tuple()
tp = (1,2,3,4,5)
tp = tuple(range(1, 100, 2))

딕셔너리

Q. 딕셔너리 생성하기

dt = {'a':1, 'b':2}
dt = dict(a=1, b=2)
dt = dict(zip(['a','b'], [1,2]))
dt = dict([('a':1), ('b':2)])
dt = dict({'a':1, 'b':2})

Q. 엔터를 입력할 때까지 영어단어,뜻을 입력받아 단어장을 만들고, 입력이 끝나면 단어 테스트를 실시하는 프로그램을 만들어봅시다.
단어장을 만듭니다.

dict_word={}
while True:
    input_word = input('영어단어,뜻:')
    if input_word=='':
        break
    eng = input_word.split(',')[0]
    kor = input_word.split(',')[1]
    dict_word[eng] = kor
dict_word


② 단어테스트를 실시하고 맞은 갯수를 계산합니다.

cnt = 0 
for eng, kor in dict_word.items():
    answer = input(eng)
    if answer==kor:
        print('O')
        cnt+=1
    else:
        print('X')


③ 테스트가 끝나면 맞은갯수/전체단어수/점수 형태로 결과를 출력합니다

print('맞은갯수:',cnt)
print('전체문제수:',len(dict_word))
print('점수:',round(cnt/len(dict_word)*100,1))

3) 제어구문

if문

Q. 정수를 입력받아 짝수/홀수를 판별하세요.

num = int(input('정수:'))

if num%2 == 1:
    print('홀수')
elif num==0:
    pirnt(0)
else:
    print('짝수')

for문

Q. 2단부터 9단까지 전체 구구단 출력하기

for i in range(2,10):
    for j in range(1,10):
        print(f'{i}*{j}={i*j}', end='\t')
    print()

>> 2*1=2 2*2=4 2*3=6 2*4=8 2*5=10 2*6=12 2*7=14 2*8=16 2*9=18
3*1=3 3*2=6 3*3=9 3*4=12 3*5=15 3*6=18 3*7=21 3*8=24 3*9=27
4*1=4 4*2=8 4*3=12 4*4=16 4*5=20 4*6=24 4*7=28 4*8=32 4*9=36
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25 5*6=30 5*7=35 5*8=40 5*9=45
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36 6*7=42 6*8=48 6*9=54
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49 7*8=56 7*9=63
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64 8*9=72
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81

Q. 1부터 10까지 정수의 합 구하여 출력하기

total = 0
for i in range(1,11):
    total += i
print(total)

Q. 1부터 100까지 홀수의 합 구하여 출력하기

total = 0
for i in range(1,101):
    if i%2==1:
        total+=i
print(total)

while문

Q. 1부터 5까지 출력하기

n = 1
while n<=5:
    print(n)
    n+=1

Q. 1부터 5까지 더하기

n = 1
total = 0
while n<=10:
    total += n
    n+=1
print(total)

Q. q를 입력할 때까지 반복하여 이름 입력받기

name = input('이름: ')
while name != 'q':
 name = input('이름: ')

Q. break로 빠져나가기

while Ture:
 name = input('이름: ')
 if name == 'q':
   break

Q. 올바른 아이디/비밀번호를 입력할 때까지 아이디와 비밀번호를 입력하는 프로그램 만들기

# 올바른 아이디와 비밀번호
id = 'id123'
pwd = 'pwd123'

while True:
    input_id = input('id:')
    input_pwd = input('pwd:')
    
    if id==input_id and pwd==input_pwd:
        break

+ 아이디가 잘못되었으면 '아이디를 확인하세요' 출력 / 비밀번호가 잘못되었으면 '비밀번호를 확인하세요' 출력

# 올바른 아이디와 비밀번호
id = 'id123'
pwd = 'pwd123'

while True:
    input_id = input('id:')
    input_pwd = input('pwd:')
    
    if id==input_id and pwd==input_pwd:
        break
    if id!=input_id:
        print('아이디를 확인하세요')
    if pwd!=input_pwd:
        print('비밀번호를 확인하세요.')

Q. 사용자가 0을 입력할 때까지 숫자를 입력받아 입력받은 숫자들의 합을 구하는 프로그램을 작성하세요

total = 0

while True:
    num = int(input('숫자:'))
    if num==0:
        break
    total+=num

복합

Q. 1~100 사이의 정답 숫자를 랜덤으로 하나 정하고, 정답 숫자를 맞출 때까지 숫자를 입력하는 게임이다. 내가 입력한 숫자가 정답보다 작으면 'DOWN', 정답보다 크면 'UP'을 출력하고 숫자를 다시 입력받는다. 정답을 맞추면 '정답!'이라고 출력하고 게임을 끝낸다.

#정답숫자
import random
num = random.randrange(1,101)
print(num)

#정답을 맞출 때까지 반복하기(정답을 맞추면 반복에서 벗어나기)
while True:
    answer = int(input('예상숫자:'))
    if answer==num:
        print('정답~!')
        break
    if answer<num:
        print('up')
    else:
        print('down')

+ 기회는 5번까지만 주어집니다. 5회가 넘으면 '횟수초과' 메시지와 함께 정답을 알려줍니다. 정답을 맞추면 몇번째에 맞추었는지 출력합니다.

# 횟수
cnt = 0

#정답숫자
import random
num = random.randrange(1,101)
print(num)

#정답을 맞출 때까지 반복하기(정답을 맞추면 반복에서 벗어나기)
while True:
    cnt += 1
    if cnt>5:
        print('횟수초과:정답은',num)
        break
    
    answer = int(input('예상숫자:'))
    if answer==num:
        print('정답~!')
        print(cnt,'번만에 맞추었습니다.')
        break
    if answer<num:
        print('up')
    else:
        print('down')

Q. 두 수와 사칙연산기호(+,-,*,/)을 입력받아 연산 기호에 따라 연산 결과를 출력하는 프로그램을 작성하세요. 사칙연산기호(+,-,*,/)가 아닌 경우 '잘못입력하셨습니다' 를 출력하시오.

num1 = int(input('숫자1:'))
num2 = int(input('숫자2:'))
op = input('연산기호:')


if op=='+':
    print(f'{num1}+{num2}={num1+num2}')
elif op=='-':
    print(f'{num1}-{num2}={num1-num2}')
elif op=='*':
    print(f'{num1}*{num2}={num1*num2}')
elif op=='/':
    print(f'{num1}/{num2}={num1/num2}')
else:
    print('잘못 입력하셨습니다.')

Q. 물건 구매가를 입력받고, 금액에 따른 할인율을 계산하여 구매가, 할인율, 할인금액, 지불금액을 출력하세요. |금액|할인율| |----|------| |1만원이상 5만원미만|5%| |5만원이상 10만원미만|7%| |10만원이상|10%|

price = int(input('물건구매가:'))

if price>=100000:
    dc = 10
elif price>=50000:
    dc = 7
elif price>=10000:
    dc=5
else:
    dc=0
    
print(f'''

구매가:{price}
할인율:{dc}
할인금액:{price*(dc/100)}
지불금액:{price-price*(dc/100)}

''')

4) 함수

Q. 이름과 나이를 입력받아 생일축하 메시지를 출력하는 함수를 만들고 호출하세요. (생일문구 : ooo님의 oo번째 생일을 축하합니다!!)

name = input('이름:')
age = input('나이:')

def happybirthday(name, age):
    print(f'{name}님의 {age}번째 생일을 축하합니다.')
    
happybirthday(name,age)

Q. 정수를 입력받아 0, 짝수, 홀수 여부를 리턴하는 함수 만들기

def is_odd_even(n):
    if n == 0:
        result = 0
    elif n%2==0:
        result = '짝수'
    else:
        result = '홀수'
    return result

is_odd_even(21)

>> '홀수'

Q. 매개변수로 전달받은 수가 소수인지 아닌지 판별하는 함수를 작성하고 호출하세요.

def is_prime(n):
    if n<=1:
        return False
    
    for i in range(2,n):
        if n%i==0:
            return False
    
    return True

is_prime(15)

Q. map함수를 이용하여 리스트 a의 각 요소를 정수화 하여 새로운 리스트로 만들기

a = ['1', '2', '3', '4']
b = list(map(int,a))

print(a)
print(b)

>> ['1', '2', '3', '4']
[1, 2, 3, 4]

Q. map 함수와 lambda 표현식을 활용하여 a 리스트에 1을 더한 b 리스트를 구하시오

a = [1, 2, 3, 4, 5]
b = list(map((lambda a: a + 1), a))

Q. map 함수와 lambda 표현식을 활용하여 짝수인 경우에만 float 형으로 바꾸시오

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
b = list(map((lambda x: float(x) if x % 2 == 0 else int(x)), a))

Q. 영어 점수에 n점 더하기. (100점이 넘을 수 없다.)

def plusn(x,n):
    score = x+n
    if score>=100:
        score=100
    return score

df_copy['eng'] = df['eng'].apply(plusn, n=1)

Q. 학생별 점수 합계 구하기

def get_sum(x):
    return x.sum()

df_copy['sum'] = df.apply(get_sum, axis=1)

Q. 과목별 점수 합계 구하기

def get_sum(x):
    return x.sum()

df_copy['sum'] = df.apply(get_sum, axis=1)

내용이 길어져서 전처리, 시각화, SQL 파트는 별도로 정리가 필요할 듯하다!


>> 유데미 바로가기
>> 
STARTERS 취업 부트캠프 공식 블로그 보러가기

본 후기는 유데미-웅진씽크빅 취업 부트캠프 4기 데이터 분석 과정 학습 일지 리뷰로 작성되었습니다.

 

#유데미 #유데미코리아 #유데미큐레이션 #유데미부트캠프 #취업부트캠프 #스타터스부트캠프 #데이터시각화 #데이터분석 #데이터드리븐 #태블로

댓글