Day1
파이썬을 나만의 무기로 만들기
수업 목적
: 파이썬을 실전에서 응용할 수 있는 능력 기르기
: 내 분야에서 응용할 수 있는 방법에 대한 고민
: 데이터 분석가/AI Engineer로서의 커리어 시작을 위한 준비
프로그래밍이란
: 컴퓨터에게 명령을 내리는 과정
: 기계어 - 기계가 이해할 수 있는 언어
: 다양한 고급 언어를 사용해 컴퓨터에게 명령을 내림
: 프로그래밍을 배워야 하는 이유
- computational thinking(생각의 구체화)
- 로직트리를 통한 의사결정의 구체화
LLM(Large Language Model) = GPT의 등장
: 자연어로 컴퓨터에게 명령을 내릴 수 있게 됨
: 그럼에도 코딩을 배워야 하는 이유
- 통역기를 통한 대화(GPT) vs 직접 대화(Python)
- 결과적으로 목적을 달성하면 그만
왜 파이썬인가?
파이썬으로 할 수 있는 것
: 업무 자동화 - 엑셀(openpyxl, API), 파워포인트(경영 직군) 등
: 크롤링+인터넷을 통한 자동화
: 서비스 구현(백엔드, 서버)
: 데이터 분석 → pandas
: 머신 러닝 - import tenserflow as tf
: 쉽게 다양한 라이브러리 활용
파이썬으로 할 수 없는 것
: 게임, 앱, 웹 개발
제어문
조건문(if)
: if의 뜻, 만약에 ~
: 값이 참이면 실행 / 거짓이면 다음 조건문 실행
: 수식
- if 조건문:
실행할 코드 ( if 조건문이 참일 때)
- elif 조건문:
실행할 코드 ( elif 조건문이 참일 때)
- else:
행할 코드 (모든 if, elif 조건문이 거짓일 때)
: 콜론()은 다음 줄에 문법이 이어진다는 것을 알려줌
: 들여쓰기는 스페이스바를 4번 누르거나 또는 탭(Tab)키 한번 클릭
: else는 모든 조건이 만족하지 않을 경우에만 실행
반복문(for)
: 반복되는 행위를 할 때 사용
: 기본 형태
- for 변수(주로 i 입력. 타 변수도 당연하지만 가능) in 리스트(또는 튜플, 문자열):
실행할 문장1
반복문(while)
: for문과 같이 반복되는 조건에 사용
: while 조건문
: 실행할 문장
: 조건문이 참인 경우에 문장이 반복되서 실행
예제)
- 1부터 5까지 더하는 프로그램을 만들어 보시오.
- (1)for, (2) while
- 단, 결과값은 sum 변수에 담으시오.
정답)
- sum=0
for i in range(1, 6):
sum=sum+i
print("i값", i)
print("sum값", sum)
- sum=0
i=0
while i<5:
i=i+1
sum=sum+i
print(sum)
*들여쓰기
: 반복문에 속하는 코드
: for, while 반복문에서 print() 값을 들여쓰지 않으면 반복문에 속하지 않게 되기에 최종값만 출력
Day2
자료형_집합, 불리언
집합(set)
: 순서가 없고 중복이 없는 자료형
: 요소들을 중괄호{}로 감쌈
: 순서가 없기 때문에 인덱싱이 되지 않음
- 인덱싱을 원할 시 리스트나 튜플로 변환 필요
집합 함수
: intersection(&) - 교집합
: difference(-) - 차집합
: union(|) - 합집합
: add - 요소를 추가
: remove - 요소를 제거
불리언
: 참 또는 거짓을 나타내는 자료형
: True, False로 나타내야 함 (첫 문자는 항상 대문자)
파이썬의 변수 심화_copy()
: b에 a의 값을 가져오면서 다른 주소(id)를 가리키도록 만들고 싶을 때 사용하는 함수
: 공간 값(id)이 달라지면서 이후에 a 리스트에 편집을 가하더라도 복사한 b 리스트에는 변화가 생기지 않음
제어문_if
: 조건의 참과 거짓을 판단해 그에 따른 동작 수행
: if, elif, else 조건문 사용
: 기본 구조
- if 조건문1:
수행문1
수행문2
- elif 조건문2:
수행문1
수행문2
- else:
수행문1
수행문2
: elif의 경우 else문 안에서 조건문이 복잡해지는 것을 단순화
: 들여쓰기에 주의해야 함
- 수행문을 들여쓰기 하지 않거나 조건문을 수행문과 같은 위치로 들여쓸 경우 오류 발생
- 조건문을 수행하지 않고 넘어가고 싶을 경우 pass 사용
연산자 중 주의해야 할 것들
: a in 리스트/튜플/문자열
: a not in 리스트/튜플/문자열
제어문_while
: 특정 조건이 지속될 때까지 반복하여 수행
: 조건문
- 수행문1
수행문2
...
: while문 강제로 빠져나가기
- 조건이 거짓일 경우 while문이 끝나는데, 중간에 특정 조건에 다다르면 빠져나가고 싶을 때는 break 사용
- 중간에 빠져나가려고 하는데 break 미사용시 결과값이 무한루프함
- break는 while문 자체를 중단시킴
: 특정 조건에서 수행문을 건너뛰고 계속 while문을 반복하기
- continue 사용 (해당 조건의 루프를 건너뛰고 다음 루프로 넘어가도록 하는 코드)]
- pass와의 차이점(pass는 해당 루프를 모두 실행하고 다음 루프로 넘어감)
제어문_for
: 가장 많이 쓰는 반복문
: 리스트/튜플/문자열의 첫 번째 요소부터 차례로 변수를 받아 반복적으로 수행문 실행
: 조건문
- for 변수 in 리스트/튜플/문자열:
수행문1
수행문2
...
: range 함수가 for문과 함께 자주 쓰임
: continue - 해당 조건에서 그 루프가 끝나고 다음 루프로 넘어감
: pass - 실행할 코드가 없는 것과 마찬가지로 해당 루프를 모두 실행하고 다음 루프로 넘어감
: break - 조건문 자체를 중단
: 리스트에서 for문 쓰기 - append 함수 사용
: 딕셔너리에서 for문 쓰기 - items 함수 사용
: 튜플에서 for문 쓰기 - 다양한 인덱싱 응용
List Comprehension
: 리스트 안에 for문을 포함하여 한 줄로 편하게 코드를 작성할 수 있게 하는 문법
: 문법 양식
- [표현식 for 항목 in 반복가능객체 if 조건문]
: for문을 여러 개 사용하는 것도 가능
- 문법 양식
- [표현식 for 항목1 in 반복가능객체1 if 조건문1
for 항목2 in 반복가능객체2 if 조건문2
... ]
Dict Comprehesion
: 리스트와 마찬가지로 딕셔너리도 for문을 간편하게 이용 가능
: 문법 양식
- dic = {표현양식 for 항목 in 반복가능개체 if 조건문}
함수
: 입력값을 받아서 명령을 수행하고 결괏값을 반환
: 코드의 반복을 줄일 수 있음
: 문법 양식
- def 함수명(변수1, 변수2, ...):
수행문1
수행문2
...
return 결괏값
* 결괏값이 없는 경우 생략 가능
: 입력값이 없거나 결괏값이 없는 함수도 존재
: 결괏값은 하나
- return을 만나면 함수는 즉시 종료됨
- 하나의 함수에는 하나의 return만 작동 가능
: 변수의 범위
- 함수 안의 변수는 그 함수 안에서만 작동
- 함수 밖의 변수 이름과 함수 안의 변수 이름이 같더라도 각각 따로 적용됨
: lambda로 간결하게 함수 만들기
- lambda 변수1, 변수2, ...: 결괏값
*oper
: operator 함수
: 연산자 함수
예) oper.add()
예외 처리
: 오류를 처리하는 방법
: 사용 문법
- try: (try문 실행 후)
...
except 발생오류 as 오류변수: (에러 발생 시 수행문 실행)
...
: 발생 오류를 명시하지 않으면 모든 오류에 대해 except문을 처리함
: 오류명을 모를 때 Exception이란 명칭으로 오류명(오류이유)를 출력 가능
: else와 finally
- try:
...
except 발생오류 as 오류변수:
...
else: (오류가 없을 때만 수행)
...
- try:
...
finally: (오류가 나더라도 수행)
...
라이브러리
: 다른 사람들이 만들어 둔 유용한 함수들의 모음
: 자주 사용하는 기능을 쉽게 재사용할 수 있고 다른 사람과도 기능 공유 가능
: 분류
- 표준 라이브러리(파이썬 설치 시 자동으로 설치)
- 외부 라이브러리(새로 설치하는 라이브러리)
: 사용 방법 - import 라이브러리명
: 외부 라이브러리를 다운받을 때
- ipip install 라이브러리명
살펴볼 라이브러리_random
: random() - 0~1 사이의 실수형의 수를 반환
: randint(시작, 끝) - 특정 범위 안의 랜덤한 정수를 반환
: random.choice(리스트) - 리스트 중에 랜덤하게 요소 추출
: random.sample(리스트, 갯수) - 리스트 중 입력한 갯수만큼 랜덤하게 요소 추출
: random.shuffle(리스트) - 리스트를 랜덤하게 섞음
살펴볼 라이브러리_datetime(날짜와 시간 저장)
: now() - 현재 시각을 반환 (timezone에 유의해야 함)
: year, month, day, hour, minute, second, microsecond - 날짜, 시간 값을 반환
: date() - 연월일로 이루어진 날짜 객체를 반환
: time() - 시간 객체를 반환
: strftime('날짜형식') - 날짜와 시간 정보를 문자열로 변환
: strptime(문자열, 날짜형식) - 문자열을 날짜로 변환
:여담_timedelta 클래스(시간 구간을 저장하여 날짜 연산 시 사용)
살펴볼 라이브러리_math
: math.pi - 원주율
: math.e - 자연상수
: abs() - 절댓값(내장함수)
: round() - 반올림(내장함수)
: math.ceil() - 올림
: math.floor() - 내림
: math.factorial() - 팩토리얼( 그 수보다 작거나 같은 모든 정수의 곱)
: math.pow() - 제곱 연산
: math.sqrt() - 제곱근 연산
살펴볼 라이브러리_numpy
: 벡터/행렬 연산을 도와주는 라이브러리
: import numpy as np
살펴볼 라이브러리_counter
: from collections import Counter
Day3
파이썬 함수_이어서
try_except
: 예외처리 구문
: 문제가 생길 수 밖에 없는 코드 발생
: 유저가 잘못된 입력을 하더라도 코드가 실행될 수 있도록 도와주는 함수
: 오류 발생 시 비정상적으로 코드가 종료되는 것을 막음
def
: define, definition, 정의하는 함수
: 호출을 할 때만 실행되는 일련의 코드 블록
: 반복적으로 생성되는 코드를 재활용하여 사용
: 함수 수식
- def 함수명(매개변수):
실행할 문장
: return
- 값을 변수로써 전달
- print와의 차이(print: 단순히 주어진 값을 출력)
파이썬 내장함수/외장함수
: 기본적으로 내장되어 바로 사용할 수 있는 함수(내장함수, Built-in Functions)
: 외부에서 받아와 사용 가능한 함수(외장함수, Extenal Function)
: 자주 사용하는 내장 함수
- abs() : 절댓값
- upper() : 대문자
- lower() : 소문자
- 그 외
외장함수의 분류
: 파이썬을 설치할 때 기본적으로 설치되는 외장함수
: pip install '~~' 따로 설치되는 외장함수
: 사용법 - import <모듈이름>
: random
- random.random() : 무작위값 리턴
- random.randint( , ) : 범위 내 무작위값 리턴
- random.choice( ) : 리스트 값 중 무작위 리턴
- random.shuffle( ) : 리스트를 무작위로 섞음
: sys - 변수와 함수를 직접 제어할 수 있게 도와주는 라이브러리
- sys.argv : 파이썬 실행시 파일 뒤에 붙인 값들이 리스트의 값으로 추가
- sys.exit() : 프로그램을 종료시키고 싶은 곳에서 사용
- sys.path : 파이썬 라이브러리 설치 위치
- sys.version : 파이썬 버전
: os - 시스템의 환경변수, 파일 경로 등의 값을 제어
- os.environ
- os.getcwd() : 현재 실행중인 디렉토리 위치
- os.chdir("경로") : 현재 디렉토리 위치 변경
- os.mkdir("new_folder") : 폴더생성
- os.rename("new_folder", "old_folder")
- os.rmdir("new_folder")
: time
- time.time() : UTC기준 현재시간을 실수값으로 리턴
- time.localtime(time.time()) : time.time()의 실수값을 연,월,일,시,분,초...의 값으로 리턴
클래스(class) - not really important in python
: 객채지향 프로그래밍인 파이썬의 가장 기본 단위
: 하나의 틀과 같은 역할을 하며, 데이터 저장도 가능
: 클래스 내의 함수는 메소드라고 부름
- 메소드는 self라는 인자를 필요로 함
- 메소드 밖은 self 인자가 필수적이지 않음
: 예시
- class FishBread:
def redbean_bread(self):
print("팥 붕어빵")
def sucream_bread(self):
print("슈크림 붕어빵")
a = FishBread()
a.redbean_bread()
a.sucream_bread()
- class Car:
def __init__(self, make, model): /초기화 함수/
self.make = make /초기화 함수 안의 변수 값을 속성/
self.model = model
self.fuel = 0
/차량의 정보를 보여주는 함수(메소드)/
def display_info(self):
print(f'제조사: {self.make}, 모델: {self.model}, 연료: {self.fuel}')
/연료를 추가하는 함수/
def add_fuel(self, amount):
self.fuel +=amount
print(f'주입 연료량: {amount}, 현재 연료량: {self.fuel}')
my_car=Car('현대', '제네시스')
주피터 노트북 기반 크롤링 실습
: selenium - 컨트롤 도와주는 라이브러리
: webdriver-manager - 크롬 드라이버 다운받는 라이브러리
: 실습 시작
- from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
ChromeDriverManager().install()
browser = webdriver.Chrome() #크롬창 오픈
browser.get('url') - url로 이동
1) 네이버 날씨 데이 실습'
1) 구글 뉴스 데이터 실습
기본 사용 코드
: browser.find_element(By.CLASS_NAME, '클래스 코드')
찾고 싶은 요소(링크, 클릭, 텍스트 등)에 따라 코드 뒤에 '.~~' 추가
찾는 요소가 여러가지일때는 'elements'로 응용
by 코드(대문자로 입력)
: By.CLASS_NAME - 태그의 클래스명으로 추출
: By.TAG_NAME - 태그 이름으로 추출
: By.ID - 태그의 id값으로 추출
: By.XPATH - 태그의 경로로 추출
Day4
Ch02. 파이썬을 이용한 데이터 분석 - 01.데이터 전처리
dataframe과 시리즈 이해하기
Pandas
: 쉽고 직관적으로 작업할 수 있도록 설계된 빠르고 유연한 데이터 구조를 제공하는 파이썬 패키지
: 주요 기능
- 빠른 데이터 정렬, 슬라이싱, 인덱싱
- 그룹핑 및 피봇팅
- 데이터 간 join
- 데이터 요약, 통계
- 파이썬 자료 구조(리스트, 튜플, 딕셔너리 등)과의 호환
- 외부 데이터(csv, SQL DB text, 엑셀 등)을 다루기 용이
: import pandas as pd
Series
: pandas에서 사용하는 일종의 리스트
: 딕셔너리, 리스트 등으로 시리즈를 만들 수 있음
- 리스트의 경우 따로 인덱스를 설정하지 않을 시 자동으로 0부터 인덱스가 부여됨
: 시리즈의 값과 인덱스, 값의 타입을 확인하고자 할 때
- 시리즈명.values
- 시리즈명.index
- 시리즈명.dtypes
Dataframe
: Series를 이어붙여 표의 형태로 만들면 Dataframe이 됨
: pd.DataFrame()
: 열 단위로 값을 입력하고자 할 때 딕셔너리로 데이터프레임을 만듦
- 값의 길이가 모두 같아야 에러가 발생하지 않음
: 행 단위로 값을 입력할 때 리스트로 데이터프레임 제작
- 각 리스트의 길이가 같지 않으면 에러 발생
- pd.DataFrame(리스트명, 컬럼명)
: 상위 행(앞에서 n번째 행), 하위 행(뒤에서 n번째 행) 확인하는 방법
- 데이터프레임명.head(행의 갯수)
- 데이터프레임명.tail(행의 갯수)
- 행의 갯수 미지정시 기본으로 5개의 행 조회
: 요약 정보 확인하기
- info() : 전체 행의 갯수, 컬럼 정보, 결측치, 데이터 타입을 보여줌
- describe() : 컬럼별 값의 갯수, 평균, 표준편차, 최솟값, 최댓값, 사분위수를 보여줌
데이터 불러오기, 저장하기
: csv 파일
- 불러오기 : 데이터변수=pd.read_scv(파일경로)
- 저장하기 : 데이터변수.to_csv(파일경로)
- index_col : 인덱스로 사용할 컬럼
- usecols: 사용할 컬럼
: 엑셀 파일
- 불러오기 : 데이터변수=pd.read_excel(파일경로, sheet_name=시트이름)
- 저장하기 : 데이터변수.to_excel(파일경로, sheet_name=시트이름)
- header : 컬럼 이름으로 사용할 행
- index_col : 인덱스로 사용할 컬럼
- usecols : 사용할 컬럼
: 웹 html 파일
- pd.read_html(html 경로)
- encoding : 한글이 깨져서 나올 때 utf-8/cp949로 설정
조건에 맞는 데이터 추출
: from google.colab import drive
drive.mount('/content/drive')
- 드라이브 임포트 권한을 획득 후 원하는 데이터 파일을 임포트
- import pandas as pd
file_path = '파일경로'
df = pd.read_csv(file_path)
데이터 추출 후 행, 열 조회
: 행
- 한 개 : 데이터프레임명[인덱스:인덱스+1]
- 여러 개: 데이터프레임명[시작인덱스:끝인덱스+1]
: 열
- 한 개 : 데이터프레임[컬럼명] or 데이터프레임.컬럼명
- 여러 개 : 데이터프레임[[컬럼명1], [컬럼명2], ... ]
loc, iloc을 사용하여 조회
: loc
- 레이블값을 사용한 조회
- 데이터프레임명.loc[행조건, 열조건]
- 열만 조회하고자 할 때는 행 조건에 ':' 입력
- 여러 개의 행을 조회하고자 할 때는 [행 범위(예- 3:5), 열조건]을 입력
- 여러개의 열도 마찬가지[행조건, 열조건 리스트[] ]
*추가: 데이터프레임에서 원하는 열을 인덱스로 설정하고자 할 때 - df.set_index[열이름]
: iloc
- 위치인덱스를 사용하여 조회
- 데이터프레임명.iloc[행인덱스조건, 열인덱스조건]
원하는 조건으로 데이터 추출하기
: 데이터 정렬하기
- 데이터프레임명.sort_values(정렬기준컬럼)
- 내림차순으로 정렬을 원한다면 ascending=False 조건을 걺.
: 특정 조건을 충족하는 데이터 추출하기
- 데이터프레임명[조건식]
- 데이터프레임명.query('조건식')
- 여러 조건을 걸고 싶을 땐 괄호 안에 조건을 여러 개 작성
데이터 가공_인덱스, 행, 열
: 인덱스
- 데이터프레임 행들의 이름
- 인덱스 몇 개를 바꿀 때 : 데이터명.rename({인덱스:바꿀 인덱스, 인덱스:바꿀 인덱스...})
- 인덱스 전체를 바꿀 떄 : 데이터명.index=바꿀 인덱스 리스트
- rename은 데이터프레임 내 데이터를 바꾸는 것은 아니기 때문에 변경하고자 할 때 다시 덧씌워야 함
- 열을 인덱스로 설정할 때 : 데이터명.set_index(컬럼명)
- 인덱스를 열로 변환하고 그 열을 남기고 싶음 : 데이터명.reset_index()
- 인덱스를 열로 변환하고 그 열을 삭제하고 싶음 : 데이터명.reset_index(drop=True)
: 행
- 행의 추가 : pd.concat([기존 데이터명, 붙일 데이터명])
- 행의 제거 : 데이터명.drop(인덱스명, axis=0)
- 행 중복 제거 : 데이터명.drop_duplicates()
: 열
- 열의 추가 : 데이터명[추가할 컬럼명] = 추가할 값
- 열의 제거 : 데이터명.drop(제거할 컬럼명, axis=1)
- 열 이름 하나를 바꿀 때 : 데이터명.rename({열이름:바꿀이름, 열이름:바꿀이름, ...}, axis=1)
- 열 이름 전체를 바꿀 때 : 데이터명.columns = 열 이름 리스트
데이터 가공_결측값 처리
: 결측값 확인
- isna() : 결측값을 True로 반환
- notna() : 결측값을 False로 반환
: 결측값 제거
- 데이터명.dropna(axis=0, how='any', subset=None)
- axis : {0:index / 1:columns}
- how : {'any':존재하면 제거 / 'all':모두 결측치면 제거}
- subset : 행/열의 이름 지정
: 결측값 대치
- 데이터 전체의 결측값을 특정 값으로 변경
- 데이터명.fillna(대치할 값)
- 특정 컬럼의 결측값을 특정 값으로 변경
- 데이터명[컬럼명].fillna(대치할 값)
- 결측값을 바로 위의 값과 동일하게 변경
- 데이터명.fillna(method='ffill')
- 결측값을 바로 아래의 값과 동일하게 변경
- 데이터명.fillna(method='bfill')
데이터 가공_타입 변환
: 타입 확인
- .dtypes는 열의 타입을 시리즈로 반환
- 특정 타입을 가진 컬럼만 추출 : 데이터명.select_dtypes(타입)
: 타입 변환
- 데이터명[컬럼명].astype(타입)
데이터 가공_날짜 다루기
: 문자형을 날짜형으로 변경
- 날짜가 문자형으로 되어있다면 날짜형으로 변경해야 날짜 계산 가능
- pd.to_datetime(컬럼, format='날짜형식')
: 날짜를 원하는 형식으로 변경
- 데이터컬럼.dt.strftime(날짜형식)
- dt연산자 응용
- 예) dayofweek, day_name()
: 날짜 계산
- day 연산 : pd.Timedelta(day=숫자)
- month 연산 : DateOffset(months=숫자)
- year 연산 : DateOffset(years=숫자)
: 날짜 구간 데이터 만들기
- pd.date_range(start=시작일자, end=종료일자, periods=기간수, freq=주기)
: 기간 이동 계산
- 컬럼.rolling().집계함수
- 평균 외에 합계, 최솟값, 최댓값 등 다양한 연산 가능
: 행 이동
- 컬럼.shift(이동할 행의 수)
데이터 가공_고급 기능(apply, map, 문자열 다루기)
: apply
- 사용자 정의 함수를 데이터에 적용하고 싶을 때 사용
- .apply(함수, axis=0/1)
- 간단한 함수는 lambda로 구현 가능
: map
- 값을 특정 값을 치환하고 싶을 때 사용
- 데이터명[컬럼명].map(매핑 딕셔너리)
: 문자열 다루기
- .str.contains(문자열) : 문자열을 포함하고 있는지 유무
- .str.replace(기존문자열, 대치문자열) : 문자열 대치
- .str.split(문자열, expand=True/False, n=개수) : 특정 문자열을 기준으로 쪼개기
- .str.lower() : 소문자로 바꾸기
- .str.upper() : 대문자로 바꾸기
데이터가공_데이터 결합
: pd.merge(데이터1, 데이터2, on=기준컬럼, how=결합방법)
: 두 데이터의 기준 컬럼명이 다른 경우
- pd.merge(데이터1, 데이터2, left_on=데이터1의 기준컬럼, right_on=데이터2의 기준컬럼, how=결합방법)
데이터집계_분포와 통계량
: 분포 및 요약 통계
- describe() : 컬럼별 값의 갯수, 평균, 표준편차, 최솟값, 최댓값, 사분위수 확인 가능
: 변수의 상관관계 확인하기
- 상관관계 분석은 두 변수의 관련성을 구하는 분석
- 두 변수 간의 연관된 정도이지 인과관계를 설명하지는 않음
- 상관계수=두 변수가 함께 변하는 정도/두 변수가 각각 변하는 정도
- .corr()
데이터집계_group by
: 같은 값을 한 그룹으로 묶어서 여러가지 연산 및 통계를 구할 수 있음
- 데이터.groupby(컬럼명).연산및통계함수
- 참조하기 좋은 함수
- count() : 행의 갯수
- nunique() : 행의 유니크한 갯수
- sum() : 합
- mean() : 평균
- min() : 최솟값
- max() : 최댓값
- std() : 표준편차
- var() : 분산
: 다중 그룹도 가능
- 데이터.groupby(컬럼명) .aggregate(넘피.연산 및 통계함수)
데이터 재구조화_crosstab
: 범주형 데이터를 비교 분석할 때 유용함
- pd.crosstab(index=행, columns=열, margins=True/False, normalize=True/False)
- margins : 전체 값을 구하기
- normalize: 비율 구하기
: 범주별 갯수 구하기
- pd.crosstab(행, 열)
: 범주별 비율 구하기
- normalize = 'all' : 전체 합이 100%
- normalize = 'index' : 행별 합이 100%
- normalize = 'columns' : 열별 합이 100%
: 다중 인덱스, 다중 컬럼의 범주표 구하기
데이터재구조화_피벗테이블
: 엑셀의 피벗테이블처럼 인덱스별, 컬럼별 값의 연산 가능
- pd.pivot_table(데이터명, index=, columns=, values=, aggfunc=)
- aggfunc : 연산하고 싶은 함수
: 단일 인덱스, 단일 컬럼, 단일 값
- margin 옵션을 통해 행과 열 전체의 값도 구할 수 있음
: 다중 인덱스, 다중 컬럼, 다중 값
- 리스트를 사용해 묶어줌
데이터 재구조화_stack, unstack, melt
: stack
- 컬럼 레벨에서 인덱스 레벨로 데이터프레임 변경
: unstack
- 인덱스 레벨에서 컬럼 레벨로 데이터프레임 변경
: melt
- pd.melt(데이터명, id_vars=기준컬럼)
- 와이드 데이터를 롱 데이터로 변경시 사용
Ch02.파이썬을 이용한 데이터 분석 - 02.데이터 시각화
matplotlib과 seaborn 이해하기
: matplotlib
- 파이썬 데이터 시각화의 가장 기본적인 라이브러리
- 유연하게 커스텀할 수 있지만 코드가 길고 어려움
: seaborn
- matplotlib을 좀 더 쉽고 아름답게 시각화하는 라이브러리
- 실제 분석에서는 matplotlib과 seaborn을 함께 사용하는 경우가 많음
: 기본 문법
- import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
- plt.figure(figsize=(가로길이, 세로길이)) : 그래프 크기 설정
- sns.000plot(data=데이터, x=X축 컬럼, y=Y축 컬럼, hue=범례 컬럼) : seaborn으로 그래프 그리기
- plt.title(제목) : 제목 설정
- plt.xlabel(라벨) : x축 라벨 설정
- plt.ylabel(라벨) : y축 라벨 설정
- plt.legend(loc=범례 위치 설정)
- plt.xticks(rotation=x축 각도 설정)
- plt.yticks(rotation=y축 각도 설정)
- plt.show() : 그래프 출력
: 스타일 설정하기
- sns.set_style(스타일)
- 스타일: darkgrid, whitegrid, dark, white
- sns.set_palette(팔레트)
: 한글 폰트 설정
- 폰트 설치
- !sudo apt-get install -y fonts-nanum
!sudo fc-cache -fv
!rm ~/.cache/matplotlib -rf
- 런타임 다시 시작
- 폰트 적용
- plt.rc('font', family='NanumGothic')
- 한글 폰트 미적용시 한글을 시각화 테이블에 사용하면 한글이 깨짐
- 한글 폰트 사용시 런타임을 다시 시작해야하기 때문에 모든 작업에 앞서 먼저 설치하는 걸 추
: 고화질 설정
- %config InlineBackend.figure_format = 'retina'
matplotlib과 seaborn으로 유형별 그래프 그리기
: 산점도
- sns.scatterplot(data=데이터, x=X축 컬럼, y=Y축 컬럼, hue=색) : 산점도 기본
- sns.lmplot(data=데이터, x=X축 컬럼, y=Y축 컬럼, hue=색) : 산점도에 회귀선 추가
- sns.relplot(data=데이터, x=X축 컬럼, y=Y축 컬럼, hue=색, col=구분 구역, kind=그래프 방식) : 산점도 구역별 구분
*plot에 산점도의 모양을 다르게 하고 싶을 경우 'style=컬럼' 삽입
: 분포 살펴보기
- sns.displot(data=데이터, x=X축 컬럼, hue=색) : 히스토그램
- sns.displot(data=데이터, x=X축 컬럼, hue=색, kind='kde') : 밀도 분포
* 히스토그램에 밀도 분포를 겹쳐서 보고 싶다면 ' kind='True' '로 입력
- sns.boxplot(data=데이터, x=X축 컬럼, y=Y축 컬럼, hue=색) : 상자 그림
- sns.pairplot(data=데이터, hue=색) : 여러 컬럼들간의 분포
: 막대 그래프
- sns.countplot(data=데이터, x=X축 컬럼, hue=색) : X축의 범주별로 행의 개수를 카운트하여 시각화
- sns.barplot(data=데이터, y=Y축 컬럼, hue=색) : 막대그래프
: 선 그래프
- sns.lineplot(data=데이터, x=X축 컬럼, y=Y축 컬럼, hue=색)
: 히트맵
- sns.heatmap(data=데이터, annot=값 표시 여부, fmt=값 포맷, cmap=컬러맵)
'스터디' 카테고리의 다른 글
[5주차] 파이썬 실습2 및 1차 미니 프로젝트 (0) | 2024.05.24 |
---|---|
[4주차] 파이썬 기초2 및 실습 (0) | 2024.05.17 |
[2주차] 엑셀을 통한 통계 및 데이터 분석, 파이썬 입문 (1) | 2024.05.03 |
[1주차] 데이터 분석과 빅데이터, 엑셀 (0) | 2024.04.26 |
데이터 분석 부트캠프 14기 오리엔테이션 (0) | 2024.04.22 |