홍동이의 성장일기

[👩‍💻TIL 2일차 ] 유데미 스타터스 취업 부트캠프 4기 본문

교육/유데미 스타터스 4기

[👩‍💻TIL 2일차 ] 유데미 스타터스 취업 부트캠프 4기

홍동2 2023. 2. 7. 18:27

파이썬 데이터분석

 

17. 딕셔너리 만들고 값 추출하기

딕셔너리

  • 키:값이 쌍을 이루어 하나의 항목으로 저장되는 자료형
 
가능한 자료형 숫자, 문자열, 부울, 튜플 모든 자료형
변경가능여부 변경 불가 변경 가능
중복가능여부 중복 불가 중복 가능
  • 키와 값은 콜론으로 구분
  • 중괄호 안에 콤마로 구분하여 항목을 저장

  • dict로 딕셔너리 만들기
    ※ 키에 따옴표를 쓰지 않는다. 
    • 딕셔너리명 = dict(키1=값1, 키2=값2,...,)
    • 딕셔너리명 = dict(zip(key리스트, value리스트))
    • 딕셔너리명 = dict([(키1,값1),(키1,값2),...,])
    • 딕셔너리명 = dict({키1:값1,키2:값2,...,})

 

  • 중복된 key를 사용하여 딕셔너리를 만들면 뒤에 값이 반영된다.
     
  • 인덱스가 아닌 로 자료에 접근
  • 딕셔너리에 키 존재여부 확인하기: key in 딕셔너리명 
  • 딕셔너리명.get(key, msg)
    • 존재하지 않는 key로 추출을 시도해도 오류 발생X
    • 존재하지 않는 key로 추출을 시도할 경우 출력할 메세지 설정 가능

 

 

18. 딕셔너리 변경하기

딕셔너리의 항목 추가/수정하기

  • 딕셔너리명[key] = value: 키가 존재하지 않으면 추가, 존재하면 수정
  • 딕셔너리명.setdefault(key, value): 키가 존재하지 않으면 추가, 존재하면 아무일도 일어나지 않음

 

update로 여러 항목 추가/수정하기

→ 키가 존재하면 수정, 존재하지 않으면 추가

  • 딕셔너리명.update(키1=값1, 키1=값2,...)
  • 딕셔너리명.update(zip(key리스트, value리스트)
  • 딕셔너리명.update([(키1,값1),(키2,값2),...])
  • 딕셔너리명.update({키1:값1,키2:값2,...,})

 

딕셔너리의 항목 삭제하기

  • del 딕셔너리명[key]: 해당 키의 항목 삭제
  • 딕셔너리명.clear(): 딕셔너리의 모든 항목 삭제
  • 딕셔너리명.pop(key, msg): 해당 키의 값 리턴 후 삭제 (키가 존재하지 않을 때는 기본값 반환) 

 

 

19. 딕셔너리의 키, 값 다루기

 딕셔너리의 키, 값을 리스트형태로 가져오기

  • 딕셔너리.keys(): 딕셔너리의 key만 리스트 형태로 받아서 사용
    - dict_keys 객체로 받아온다.
    - 리스트처럼 사용할 수 있지만 리스트는 아니다. 
  • 딕셔너리.values(): 딕셔너리의 valule만 리스트 형태로 받아서 사용
    - dict_values 객체로 받아온다.
  • 딕셔너리.items(): 딕셔너리의 (key, value) 쌍을 리스트 형태로 받아서 사용
    - dict_items 객체로 받아온다.

 

for문에서 딕셔너리의 key, value 사용하기

  •  for i in 딕셔너리명.keys():
         print(i)
  •  for i in 딕셔너리명.values():
         print(i)
  •  for i in 딕셔너리명.items():
         print(i)
  •  for k,v in 딕셔너리명.items():
         print(k,v)

 

딕셔너리 정렬하기

  • sorted(딕셔너리명.keys()): 딕셔너리의 key만 리스트형태로 받아서 사용
  • sorted(딕셔너리명.values()): 딕셔너리의 value만 리스트형태로 받아서 사용
  • sorted(딕셔너리명.items()): 딕셔너리의 (key, value)를 리스트형태로 받아서 사용

※ .sort()는 지원하지 않는다. 

 

 

20. 딕셔너리 연습하기

단어장 만들기

# 엔터('')를 입력할 때까지 영어단어,뜻을 입력받아 딕셔너리에 저장

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')
cnt

 

테스트 결과 출력

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

 

 

21. 함수 만들기

함수: 특정 기능을 구현하기 위한 코드의 묶음

 

함수 사용 목적

 

  1. 크고 복잡한 프로그램을 해결하기 쉬운 작은 단위로 쪼개어 해결한다.
  2. 반복되는 코드를 함수화하여 코드의 중복을 배제한다.

 

함수 사용의 효과

 

  1. 크고 복잡한 문제를 쉽게 해결할 수 있다.
  2. 코드의 가독성을 높여 프로그램의 흐름 파악이 용이하다.
  3. 자주 사용되는 코드를 하나의 함수로 만들어 프로그램 내에서 재사용할 수 있다.
  4. 프로그램의 디버깅이 용이하다.

 

함수의 종류

  • 내장함수: 파이썬 프로그램에 기본적으로 내장된 함수
    import 불필요
  • 외장함수: 모듈, 패키지 함수
    import하여 사용
  • 사용자 정의 함수: 사용자가 만든 함수

 

기본 함수 정의하고 호출하기

  • 함수 정의하기(만들기)

    def 함수명():
          함수내용

    - 함수명은 변수명과 동일한 규칙으로 만들어진다.
    - 함수 내용은 들여쓰기 한다.

  • 함수 호출하기(사용하기)

    함수명()

    - 함수를 호출하기 전에 함수가 정의되어있어야 한다.
# 함수 정의
def introduce():
    print('안녕하세요!')
    print('저의 이름은 파이썬입니다.')

# 함수 호출
introduce()

 

매개변수 전달하기

  • 함수 정의하기(만들기)

    def 함수명(매개변수1, 매개변수2, ...):
          함수내용

    - 함수명은 변수명과 동일한 규칙으로 만들어진다.
    - 함수 내용은 들여쓰기 한다.
def introduce(name, age):
    print('안녕하세요!')
    print('저의 이름은, '+name+'입니다.')
    print('나이는, '+str(age)+'살입니다.')
    
introduce('파이썬',20)
introduce('홍길동',21)
# 이름과 나이를 입력받아 생일축하 메시지를 출력하는 함수를 만들고 호출하세요.

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

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

 

 

22. 함수의 결과값 받아서 사용하기

함수의 결과값 반환하기

  • 함수 정의하기(만들기)

    def 함수명(매개변수1, 매개변수2, ...):
          함수내용
           return 결과값

    - 반환값은 없거나 1개이다.
    ※ 반환값이 여러 개인 경우 하나의 튜플로 묶어서 반환된다.
# 두 수를 매개변수로 받아 더한값과 뺀 값을 리턴하는 함수 만들기
def get_plus_minus(n1,n2):
    return n1+n2, n1-n2

result = get_plus_minus(1,2)
print(result)  # (3, -1)

plus,minus = get_plus_minus(1,2)
print(plus,minus)  # 3, -1

 

  • 함수 호출하기(사용하기)

    변수 = 함수명(인수1, 인수2, ...)

    - 반환값이 있을 때는 변수로 받거나 수식 내에 기술한다.

 

 

함수에서 빠져나오기

  • return을 만나면 함수에서 빠져나온다.
  • 반환할 값이 있다면 값을 반환하고 빠져나오고, 없다면 그냥 빠져나온다.
# 정수를 입력받아 0, 짝수, 홀수 여부를 리턴하는 함수 만들기
def is_odd_even(n):
    if n == 0:
        result=0
    elif n%2==0:
        result='짝수'
    else:
        result='홀수'
    
    return result

is_odd_even(21) # 홀수
# 소수 여부 판단하기 매개변수로 전달받은 수가 소수인지 아닌지 판별하는 함수를 작성하고 호출하세요.
# 소수란 : 1과 자기 자신으로만 나누어 떨어지는 1보다 큰 양의 정수

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) # False

 

23. 인수 전달방법

위치 인수: 함수에 정의된 매개변수와 순서에 맞게 짝을 맞추어 인수를 전달한다.

  • 함수 정의하기(만들기)

    def 함수명(매개변수1, 매개변수2, ..., 매개변수n):
          함수내용
           return 결과값

  • 함수 호출하기(사용하기)

    변수 = 함수명(인수1, 인수2, ..., 인수n)
def greet(name, msg):
    print('안녕',name,msg)

greet('친구','오랜만이야') # 안녕 친구 오랜만이야

 

디폴트 인수

  • 함수 정의하기(만들기)
    - 함수를 정의할 때 매개변수에 디폴트값을 지정하면 디폴트값이 지정된 인수를 생략할 수 있다.
    - 디폴트 인수는 기본 위치 인수를 다 적은 다음에 적어야 한다.

    def 함수명(매개변수1, 매개변수2=디폴트값):
          함수내용
           return 결과값

  • 함수 호출하기(사용하기)

    변수 = 함수명(인수1)
    ※인수2 생략
def greet(name, msg='오랜만이야'):
    print('안녕',name,msg)

greet('친구') # 안녕 친구 오랜만이야
greet('친구', '반가워') # 안녕 친구 반가워

 

키워드 인수: 함수를 호출할 때 인수의 이름을 명시하면 순서를 바꾸어 전달할 수 있다.

  • 함수 정의하기(만들기)

    def 함수명(매개변수1, 매개변수2):
          함수내용
           return 결과값

  • 함수 호출하기(사용하기)

    변수 = 함수명(매개변수2이름=인수2, 매개변수1이름=인수1)
def get_minus(x,y,z):
    return x-y-z

print(get_minus(5,10,15)) # -20
print(get_minus(5,z=15,y=10)) # -20

 

가변 인수: 매개변수에 '*'을 붙이면 여러 개의 인수를 하나의 튜플로 받는다.

  • 함수 정의하기(만들기)

    def 함수명(*매개변수):
          함수내용
           return 결과값

  • 함수 호출하기(사용하기)

    변수 = 함수명(인수1, 인수2)
    변수 = 함수명(인수1, 인수2)
    ※ 인수의 개수를 가변적으로 전달할 수 있다.
# 가변적인 수를 하나의 리스트/튜플로 받아서 수의 평균을 리턴하는 함수  
def average(args):
    return sum(args)/len(args)

average([1,2,3]) # 2.0
average((1,2,3,4,5)) # 2.0

# 가변적인 수를 받아서 수의 평균을 리턴하는 함수
def average(*args):
    # print(args)
    return sum(args)/len(args)

average(1,2,3) # 2.0
print(1,2,3,sep='@') # 1@2@3
print(4,5) # 4 5

 

24. 함수에서 변수 사용하기

전역변수(global variable)

  • 함수 밖에서 생성
  • 프로그램 어디에서든 사용할 수 있다.
say1 = 'hello'

def sayhello():
    print(say1)
    
sayhello() # hello

 

지역변수(local variable)

  • 함수 내에서 생성
  • 함수 내에서만 사용할 수 있다.

- 지역변수와 전역변수는 동일한 이름을 사용할 수 있다.

 

 

전역변수를 함수 내에서 변경하기

: 전역변수를 함수 내에서 변경하려고 하면 global 키워드를 사용하여 선언해주어야 한다.

n1 = 1
n2 = 10

def get_plus_minus():
    n1 = 2
    plus = n1+n2
    minus = n1-n2
    return plus, minus

get_plus_minus()
n1 # 1
n1 = 1
n2 = 10

def get_plus_minus():
    global n1
    n1 = 2
    plus = n1+n2
    minus = n1-n2
    return plus, minus

get_plus_minus()
n1 # 2

 

25. 람다표현식과 map 함수

람다표현식

  • 매개변수와 수식으로 이루어진 함수
  • 이름이 없는 익명함수이다

→ 수식을 실행하고 그 결과를 반환한다. 다른 함수의 인수로 넣을 때 주로 사용한다.

# 두 수를 매개변수로 받아 더한 결과를 리턴하는 함수
def get_plus(n1, n2):
    return n1+n2

get_plus(1,2)

# 람다표현식으로 만들기
lambda n1,n2 : n1+n2

# 람다표현식 사용하기
(lambda n1,n2 : n1+n2)(1,2) # 3

 

 

람다표현식 호출하기

  • 람다표현식 자체로 호출하기

  • 람다표현식을 변수에 담아 호출하기

# 람다표현식을 프로그램 내에서 재사용하고 싶다면, 람다표현식을 변수에 담아서 사용한다.
lambda_plus = lambda n1,n2:n1+n2

# 변수로 람다표현식 담아 호출하기
lambda_plus(1,2) # 3
lambda_plus(3,5) # 8

 

map 함수: 리스트나 튜플의 각 요소를 지정된 함수로 처리해주는 함수

→ 원본을 변경하지 않고 새 리스트, 튜플을 생성하여 반환한다.

# map함수를 이용하여 리스트 a의 각 요소를 정수화 하여 새로운 리스트로 만들기
a = ['1', '2', '3', '4']
b = list(map(int,a))

print(a) # ['1', '2', '3', '4']
print(b) # [1, 2, 3, 4]

 

map 함수에 람다표현식 사용하기

※ 람다표현식 괄호로 묶어주기

# 아래 리스트 l1에 1을 더한 l2 리스트 만들기
l1 = [1,2,3,4,5]
l2 = list(map((lambda x:x+1),l1))

print(l1) # [1, 2, 3, 4, 5]
print(l2) # [2, 3, 4, 5, 6]

 

람다표현식에 조건부 표현식 사용하기

# 아래 리스트에서 짝수는 float로 바꾸고, 홀수는 str로 바꾸기
l1 = [1,2,3,4,5,6,7,8,9,10]

list(map((lambda x:float(x) if x%2==0 else str(x)),l1)) # ['1', 2.0, '3', 4.0, '5', 6.0, '7', 8.0, '9', 10.0]

 

26. 클래스와 객체

객체

객체는 독립적이다.

객체는 속성과 메소드로 구성된다.

  • 객체의 속성은 객체 안의 변수에 저장된다.
    객체의 이름 다음에 점을 찍고 변수 이름을 적는다.
  • 객체의 메소드는 객체 안에 정의된 함수다.
    객체의 메소드는 객체 이름 다음에 점을 찍어 호출한다.

 

클래스 만들기

※ self: 메소드를 호출한 객체를 받는다. 인수에 포함되지 않는다.

__init__: 생성자

# 1.1 자동차클래스 만들기
class Car:
    def __init__(self, b,m,c):
        self.brand = b
        self.model = m
        self.color = c
        
        print(self.brand, self.model, self.color, '출고')
    
    def turn_on(self):
        print(self.brand, '시동을 겁니다.')
        
    def turn_off(self):
        print(self.brand, '시동을 끕니다.')
    
    def drive(self):
        print(self.brand, '주행중입니다.')        

# 1.2 객체 생성하기
# 객체명 = 클래스명(매개변수1,매개변수2,...)
car1 = Car('현대자동차','소나타','화이트')
car2 = Car('르노삼성','SM7','블랙')

# 1.3 메소드 호출하기
# 객체명.메소드명(매개변수1,매개변수2,...)
car1.turn_on() # 현대자동차 시동을 겁니다.
car1.turn_off() # 현대자동차 시동을 끕니다.
car1.drive() # 현대자동차 주행중입니다.

car2.turn_on() # 르노삼성 시동을 겁니다.
car2.turn_off() # 르노삼성 시동을 끕니다.
car2.drive() # 르노삼성 주행중입니다.

 

객체의 메소드 목록 조회: dir(객체)

 

함수, 메소드 사용법: help(함수명)

 

 

27. 모듈과 패키지

모듈

  • 프로그램에서 공통적으로 사용되는 변수, 수, 클래스들을 별도로 모아서 사용한다.
  • 데이터, 함수, 클래스 등을 모아서 하나의 파일로 저장해놓은 것

 

 

모듈의 세가지 종류

  • 내장모듈: 파이썬에서 제공하는 기본 모듈
  • 사용자정의모듈: 사용자가 만든 모듈
  • 외장모듈: 다른 기업이나 단체에서 제공하는 모듈 / pip 명령어로 설치

 

 

모듈 사용하기

  •  import 모듈명 (as 별칭): 모듈 import

모듈명.함수명(): 모듈의 함수 사용

모듈명.변수명(): 모듈의 변수 사용

모듈명.클래스명(): 모듈의 클래스 사용

import myCalc
print(myCalc.get_plus(1,2)) # 3
print(myCalc.get_minus(1,2)) # -1
print(myCalc.get_multiply(1,2)) # 2
print(myCalc.get_division(1,2)) # 0.5

# 별칭 사용
import myCalc as calc
print(calc.get_plus(1,2))
print(calc.get_minus(1,2))
print(calc.get_multiply(1,2))
print(calc.get_division(1,2))

 

모듈의 일부만 가져오기

  • from 모듈명 import 함수명1, 변수명1, 클래스명1: 함수명1, 변수명1, 클래스명1만 import

모듈명 붙이지 않고 함수, 변수, 클래스 바로 사용 가능

클래스명(2): error → import되지 않은 클래스명

from myCalc import get_plus, get_minus

print(get_plus(1,2)) # 3
print(get_minus(1,2)) # -1
print(myCalc.get_multiply(1,2)) # 2

 

 

모듈의 전체 가져오기

  • from 모듈명 import *

모듈 내 모든 함수, 변수명1, 클래스명1() 모듈명 붙이지 않고 바로 사용 가능

from myCalc import *
print(get_plus(1,2))
print(get_minus(1,2))
print(get_multiply(1,2))
print(get_division(1,2))

 

패키지: 여러 모듈을 묶어놓은 것(폴더)

  • 도트(.)를 사용하여 파이썬 모듈을 계층적으로 표현한다.
import 사용
Import 패키지명.디렉토리명.모듈명 패키지명.디렉토리명.모듈명.함수명()
from 패키지명.디렉토리명 import 모듈명 모듈명.함수명()
from 패키지명.디렉토리명.모듈명 import 함수명 함수명()

 

 

패키지 사용하기

  • pip install 패키지명: 패키지 설치
  • pip uninstall 패키지명: 패키지 제거
  • pip list: 설치된 패키지 목록 확인

 

 

28. 모듈 사용하기

파이선 내장 모듈

  • math: 수학적 연산과 관련된 함수들을 모아놓은 모듈
    import math
    - ceil : 올림하여 정수로 만들기
    - floor : 내림하여 정수로 만들기
    - sqrt : 제곱근
    - factorial : 팩토리얼
    - pi : 원주율
  • random: 임의의 수를 발생시키거나 리스트의 요소 중 임의의 수를 선택하는데 사용되는 모듈
    import random
    1. 랜덤 정수 구하기
      - random.randint(시작값, 끝값) : 시작값~끝값 사이의 랜덤 정수 구하기 (끝값 포함)
      - random.randrange(시작값, 끝값) : 시작값~끝값 사이의 랜덤 정수 구하기 (끝값 미포함)
      - random.randrange(끝값) : 0~끝값 사이의 랜덤 정수 구하기 (끝값 미포함)
    2. 랜덤 실수 구하기
      - random.random() : 0~1 사이의 랜덤 실수 구하기
      - random.uniform(시작값,끝값) : 시작값 ~ 끝값 사이의 랜덤 실수 반환(끝값 미포함)
    3. 시퀀스 데이터에서 무작위 요소 추출
      - random.choice(시퀀스)
    4. 시퀀스 데이터에서 무작위로 n개 요소 추출
      - random.sample(시퀀스, n)
    5. 시퀀스 데이터를 무작위로 랜덤하기 섞기
      random_shuffle(시퀀스): 원본을 섞는다. 리턴값이 없다.
# 1~10 사이의 랜덤 정수 구하기(10포함)
print(random.randint(1,10))

# 1~9 사이의 랜덤 정수 구하기
print(random.randrange(1,10))
    
# 0~9 사이의 랜덤 정수 구하기
print(random.randrange(10))


# 0~1 사이의 랜덤 실수 구하기
print(random.random())

# 1~10 사이의 랜덤 실수 구하기
print(random.uniform(1,10))


# 시퀀스 데이터에서 무작위 요소 추출
print(random.choice([1,2,3]))
print(random.choice('python'))
print(random.choice(range(1,101)))


# 시퀀스 데이터에서 무작위로 n개 요소 추출
print(random.sample([1,2,3],2)) # [1, 2]
print(random.sample('python',2)) # ['y', 'n']
print(random.sample(range(1,101),2)) # [89, 7]


# 시퀀스 데이터를 무작위로 랜덤하게 섞기
a = [1,2,3,4,5]
random.shuffle(a)
a # [2, 5, 1, 4, 3]

 

  • datetime: 날짜, 시간과 관련된 모듈
    import datetime
    • datetime.datetime.now(): 현재 날짜와 시각 가져오기
    • datetime.datetime.now().strftime(포멧): 시간을 포멧에 맞게 출력하기
    • datetime.datetime.now()+datetime.timedelta(더할시간) : 특정 일, 시간, 분, 초 이후의 날짜와 시간 구하기
      timedelta에는 year로 계산하는 기능은 없음
# 현재 날짜와 시각 출력
print(now.year,'년')
print(now.month,'월')
print(now.day,'일')
print(now.hour,'시')
print(now.minute,'분')
print(now.second,'초')

# 시간을 포멧에 맞게 출력
now.strftime('%Y.%m.%d %H:%M:%S') # '2021.09.24 14:16:46'

# 특정 시간 이후의 날짜와 시간 구하기
# 현재로부터 100일 이후의 날짜와 시간 구하기
now + datetime.timedelta(days=100)

# 현재로부터 100일 전의 날짜와 시간 구하기
now + datetime.timedelta(days=-100)

 

  • time: 시간 데이터를 다루기 위한 모듈
    import time
    • 현재 날짜와 시간 가져오기
      - time.localtime()
      - time.ctime()
    • time.sleep(초): 일시정지
tm = time.localtime()
tm # time.struct_time(tm_year=2023, tm_mon=3, tm_mday=8, tm_hour=0, tm_min=40, tm_sec=40, tm_wday=2, tm_yday=67, tm_isdst=0)

time.ctime() # 'Wed Mar  8 00:40:42 2023'

# 일시정지
# 카운트다운
print(3)
time.sleep(1)
print(2)
time.sleep(1)
print(1)
time.sleep(1)
print('srart')

 

모듈 내 함수 확인: dir(모듈명)

ex) 파이썬 내장함수 확인: dir(__builtins__)

 

 

모듈 내 함수 사용법 확인

import 모듈명

help(모듈명.함수명)

 

 

외부모듈

  • 외부모듈 설치하기: pip install 모듈명
  • 설치된 외부모듈 확인하기: pip list

29. 판다스 데이터의 구조

pandas: 파이썬에서 데이터를 조작/분석하기 위한 라이브러리

  • 행/열로 이루어진 테이블 형태의 데이터를 다룬다.
  • 엑셀로 다루지 못하는 대용량 데이터를 다룰 수 있다.
  • Matplotlib, Seaborn 등 다양한 시각화 도구와 함께 사용할 수 있다.

 

판다스에서 다루는 데이터 형태

판다스에서는 Series(1차원 리스트 형태)와 DataFrame(2차원 표 형태)의 형태로 데이터를 다룬다.

 

 

데이터프레임(DataFrame): 행, 열로 이루어진 2차원 표 형태

  • 행(row): index로 구분
  • 열(series, column): column_name으로 구분

 

 

데이터프레임 생성 (row단위: list)

df = pd.DataFrame(
    [['james',30,'programmer'],
    ['amy',20,'student'],
    ['david',25,'designer']],
    columns=['name','age','job'],
    index=['a','b','c'])

df

  1. 표의 데이터를 2차원 리스트로 표현하기
  2. 데이터프레임으로 만들기
  3. 인덱스 추가하기
  4. 컬럼명 추가하기

 

데이터프레임 생성 (column단위: dic)

df = pd.DataFrame(
    {'name':['james','amy','david'],
     'age':[30,20,25],
     'job':['programmer','student','designer']},
    index=['a','b','c'])

df

 

 

데이터프레임 생성 (파일)

1. 데이터파일 준비하기: UTF-8 형식의 csv 파일

    다른이름으로 저장 → 인코딩: utf-8 선택하여 저장

2. 데이터파일 읽어와 데이터프레임 만들기

     pd.read_csv(파일경로)


30. 데이터 확인하기

데이터 미리보기

  • df.head(n): 가장 앞의 n행 보기
  • df.tail(n): 가장 뒤의 n행 보기
  • df.sample(n): 랜덤으로 n개 데이터 보기
    = n을 생략하면 1개의 샘플 출력
  • df.sample(frac=0.2): 랜덤 샘플 비율로 보기
    = 지정한 비율의 샘플 출력
  • df.nlargest(갯수, 컬럼명): 높은순 보기
    ※ 컬럼의 데이터가 숫자형일 때 사용할 수 있다. 
  • df.nsmallest(갯수, 컬럼명): 낮은순 보기
# eng 낮은 순으로 5개 보기
df.nsmallest(5,'eng')

 

 

데이터 요약보기

  • df.shape: (행,열)의 크기 보기
  • len(df): 데이터의 갯수 보기
  • df.columns: 컬럼명 보기
  • df.index: 인덱스 보기
  • df.dtypes: 데이터의 자료형 보기
    ※ 판다스에서는 문자열의 데이터타입이 object이다. 
  • df.info(): 데이터프레임 정보 보기
    = 데이터프레임의 총 샘플 갯수, 컬럼 수, 컬럼 별 정보 등을 확인한다. 

  • df['col'].unique(): 컬럼의 유니크한 데이터 뽑기
  • df['col'].value_counts(): 컬럼의 유니크한 값의 갯수 보기
  • df.describe(): 요약통계 보기, 숫자를 다루는 컬럼들만 볼 수 있음

31. 시리즈 다루기

시리즈 만들기

pd.Series(리스트)

시리즈: 엑셀시트의 열 1개를 의미 (1차원 리스트형태)

 

 

시리즈의 index와 value 가져오기

  • 시리즈.index: 시리즈의 인덱스는 데이터의 이름이고, 행번호는 따로 있다. 
  • 시리즈.values

 

시리즈의 index 지정하기

  • 시리즈.index = 인덱스 리스트
  • 숫자, 문자열 모두 가능 

 

 

시리즈의 통계값 사용하기

:mean, min, max, median, std / describe

- 시리즈의 통계값은 시리즈의 value가 모두 숫자형일 때 사용할 수 있다.

 

 

시리즈 주요 메서드

  • 값 정렬 : 시리즈.sort_values( )
  • 인덱스 정렬 : 시리즈.sort_index( )
  • 인덱스 리셋 : 시리즈.reset_index( ) 행번호로 인덱스 재지정
  • 특정 값을 가진 시리즈 값을 교체 : replace(찾을값, 교체할값)
  • 시리즈를 데이터프레임으로 변환 : 시리즈.to_frame( )
# 시리즈 인덱스 새로 만들기
s.reset_index()


32. 컬럼명으로 데이터 추출하기

시리즈 형태로 하나의 열 데이터 추출하기

  • 데이터프레임명['컬럼명'
    : 컬럼명은 1개만 지정할 수 있으며 대괄호 1개를 사용한다.
  • 데이터프레임명.컬럼명
    : 컬럼명에 공백이나 특수문자가 섞여있을 때는 사용할 수 없다.

 

 

데이터프레임 형태로 여러 열 단위 데이터

➡️ 대괄호 안에 컬럼리스트가 들어간다. (대괄호 2개로 표현)

# 'name','kor' 컬럼 데이터 추출하기   
df[['name','kor']] .head(3)

# 'math' 컬럼을 데이터프레임 형태로 추출하기
df_math = df[['math']]

 

 

조건에 따라 데이터 추출하기

  • 조건에 따른 각 데이터의 결과를 True/False로 표현하는 불린인덱스형태로 추출된다.
  • 불린인덱스를 데이터프레임명[]으로 감싸면 True인 데이터만 추출된다.
# 한 과목이라도 100을 받은 학생 추출
df[(df.kor==100)|(df.eng==100)|(df.math==100)]

# kor의 값이 60~90인 학생의 name, kor 추출
df[(df['kor']>=60)&(df['kor']<=90)][['name','kor']]

 

특정 값을 가진 데이터만 추출

  • 결과는 True/False만으로 이루어진 불린인덱싱형태로 추출된다.
  • 데이터프레임[]으로 감싸면 True인 데이터만 추출된다.
# 이름이 Amy인 데이터 추출
df[df['name'].isin(['Amy'])]

# kor이 50,100 데이터 추출
df[df['kor'].isin([50,100])]

 

null 여부에 따른 데이터 추출

  • 컬럼.isnull() → 해당 컬럼의 값이 null인 데이터 추출
  • 컬럼.notnull() → 해당 컬럼의 값이 null이 아닌 데이터 추출

  • 결과는 True/False만으로 이루어진 불린인덱싱형태로 추출된다.
  • 데이터프레임[]으로 감싸면 True인 데이터만 추출된다.
# kor이 null인 데이터 추출
df[df.kor.isnull()]

# kor이 null이 아닌 데이터 추출
df[df.kor.notnull()]

 


 

마무리하며

 

어제 오류났던 주피터 노트북 확장 프로그램 NBextension에 대해 질문했다.

다른 코드를 보내준다고 하셔서 내일 다시 수정해봐야겠다.

 

오늘도 아주 많은 양을 학습했다.

파이썬을 수박겉핥기 식으로만 알고 있었는데 영상을 하나하나 볼때마다

아 그래서 그때 그걸 썼구나~하면서 뿌듯해했다🤗

 

내일의 TIL에는 원하는 내용을 빨리 찾기 위해 목차 기능도 추가해야겠다.

그리고 코딩테스트로 파이썬을 풀어보면 배운 내용이 더 잘 기억에 남을 것 같아서

하루 일과를 마치고 시간이 남는 날에는 2-3문제씩 풀어봐야겠다.

 

오늘은 여기까지!

 

 

 


* 유데미 큐레이션 바로가기 : https://bit.ly/3HRWeVL

* STARTERS 취업 부트캠프 공식 블로그 : https://blog.naver.com/udemy-wjtb

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

728x90
Comments