본문 바로가기

스터디

[3주차] 파이썬 기초

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=컬러맵)

 

 

 

반응형