삶은돼지고기 2022. 9. 20. 18:24
728x90

PEP8 : 파이썬 스타일 가이드
        - 파이썬 공식 문서에 들여쓰기는 4칸으로 권장함
        - 한 줄 당 최대 79자로 제한 등
        - 주피터는 내부 플러그인으로 오토pep8 사용

For 반복문
        - 문자열 -> 리스트
        - 리스트를 순회하며 요소 하나씩 꺼내기 가능

Range(start, end, step)
        - 0 ~ n-1까지의 범위
        - Range(10, 0, -1)과 같은 방식으로 역순 범위 지정도 가능
        - Enumerate() : 인덱스 번호와 값을 같이 가져옴(변수 두 개 지정) = range(len())과 같은 기능
        - 숫자들의 시퀀스로 반복하고자 할 때 사용

While문
        - 일정 조건이 충족될 때까지 반복하고 싶을 때 사용
        - 웹 스크래핑 시 데이터가 없을 때 빠져나오기

함수
        - Parameter(매개변수), argument(전달인자, 인수)
        - 인수를 매개변수로써 함수 호출시 넘겨줌
        - Def(par=arg)
        - *arguments(argument 인자) : 리스트, 튜플 형태로 전달
        - **keywords(키워드 인자) : 딕셔너리 형태로 전달
        - Print하면 출력만 하고 변수로 반환이 안됨. 변수로 반환받고 싶다면 return 사용
        - 함수 도움말 : ? -> 독스트링 확인 / ?? -> 소스코드 확인

코드리뷰
        - LGTM(looks good to me) : 코드리뷰 시 많이 사용
        - 좋은점, 개선점(변수명 직관적으로 사용 등)

주피터 -> 줄리아, 파이썬, R
        - ipynb확장자 -> ipython 환경 제공
        - 원래 ipython notebook이었으나 다양한 언어를 받고자 jupyter notebook으로 변경

판다스 : 파이썬의 대표적인 데이터 분석 도구
        - Panel(다차원 데이터 구조) 데이터 지원 지금은 사용하지 않음
        - Dataframe, series 형태 데이터 지원
        - 데이터프레임에서 행이나 열 하나만을 떼어오면 시리즈 형태가 됨

넘파이 : 파이썬에서 사용할 수 있는 공학용 계산기
        - 기본적인 기술통계부터 다차원 배열의 연산 지원
        - 파이썬은 느리지만 넘파이는 빠름 -> 내부가 연산이 빠른 c언어로 되어있고 인터페이스만 구현함
        - 반복문 사용 x, 벡터 연산, c언어

시각화 라이브러리
        - Matplotlib : 대부분 정적인 시각화(matlab 문법과 유사). Math + plot + library
        - Javascript : 동적인 시각화
        - Plotly

판다스 실습
메서드, 어트리뷰트의 차이 : 함수 뒤 괄호가 있고 없고(옵션이 필요 없기 때문에)
        - E.g. 메서드 : df.info() / 어트리뷰트 : df.shape
%timeit : 코드 시간 출력 - 프로파일링(코드 성능 비교)
nan(not a number)
칼럼의 요소 중 하나라도 다른 데이터 타입이 섞여있다면 우선순위에 따라 적용됨
        - object - float - int

Df.drop()
        - Inplace 기능 웬만하면 사용 x
        - 메서드 체이닝 할 때 잘 동작하지 않음
                ○ 메서드 체이닝 : 여러 메서드들을 묶어서 사용하는 것

Df.describe() :
        - 수치형의 기술통계 : 개수, 평균, 표준편차, 최소, 최대, 사분위
        - 범주형의 기술통계 : 개수, 유일값, 최빈값, 최빈값의 빈도수
        - Nan값은 제외하고 계산


# "월화수목금토일" 을 리스트 형태로 변경합니다.
weekday = []
for 요일 in "월화수목금토일":
    weekday.append(요일)
    print(요일)

# 리스트 안에 있는 값을 순회하며 반복문으로 출력
weekday = ["월","화","수","목","금","토","일"]
for 요일 in weekday:
    print(요일)

print("-"*30)
print("for 문 종료")

range() 함수

  • https://docs.python.org/ko/3/tutorial/controlflow.html#the-range-function
  • range([초기치, ]최종치[, 증가치]) => [ ]안의 내용은 생략이 가능합니다.
  • 초기치를 생략하면 0이, 증가치를 생략하면 1이 기본값으로 사용됩니다.
  • range()함수는 초기치, 최종치, 증가치에 따른 숫자 리스트를 만들어 줍니다.
  • range(0, 10, 1) == range(10)입니다.
# range로 값을 순회하며 짝수일 때는 "짝수"를 홀수일 때는 "홀수"를 출력하게 합니다.

for i in range(1,11):
    if i % 2 == 0:
        print(i,"짝수입니다")
    else:
        print(i,"홀수입니다")
# 문자열 전처리로 월을 반환하는 함수 만들기
date = "2022년 05월 09일"

# 함수명 find_month 
def find_month(date):
    """ 
    날짜를 입력받아 
    월을 반환하는 함수
    """
    return int(date.split()[1][:2]) #split()에 아무것도 안적어도 공백으로 나누어줌 

find_month(date)

응용하기

해당 코드를 값과 매핑하기 위해 딕셔너리 형태로 가공해 보는 연습하기

age_code = """
10대 : AGE_001
20대 : AGE_002
30대 : AGE_003
40대 : AGE_004
50대 : AGE_005
60대 : AGE_006
70대 : AGE_007
기타 : AGE_008
( 비회원, 외국인, 그 이상 등 )"""
age_code.split("\n")

age_dict = {}
age_code = age_code.split("\n")[1:9] # age_code확인해보면 |w로 줄바꿈이 있어 split으로 나누기
for age in age_code:
    a = age.split(':')
    age_dict[a[1]]=a[0] # age[1]은 키값 age[0]은 벨류값에 넣어줌
print(age_dict)

출력값: {' AGE_001': '10대 ', ' AGE_002': '20대 ', ' AGE_003': '30대 ', ' AGE_004': '40대 ', ' AGE_005': '50대 ', ' AGE_006': '60대 ', ' AGE_007': '70대 ', ' AGE_008': '기타 '} -> 딕셔너리 형태로 저장됨

 


Pandas와 Numpy

# pandas, numpy를 불러오기
import pandas as pd
import numpy as np
# 비어있는 데이터프레임을 생성합니다.
df = pd.DataFrame()
df

# 약품명 시리즈 타입으로 약품명을 만듭니다.
# 다음의 리스트를 만들고 약품명이라는 컬럼에 담습니다.
df["약품명"] = ["소화제", "감기약", "비타민", "digestive", "Omega3", "오메가3", "vitamin", "Vitamin"]
df

# 가격 컬럼을 만듭니다. 
# df["가격"] 이라는 컬럼에 3500 이라는 값을 넣습니다.
# 그리고 컬럼이 제대로 추가 되었는지 데이터 프레임 전체를 출력해 봅니다.
# 데이터프레임, 행렬, 2차원
df["가격"] = 3500 # =으로 넣게된다면 행 갯수만큼 똑같은 값으로 생성됨
df

# 가격 컬럼만 가져와서 봅니다.
# 컬럼 하나만 가져오면 데이터프레임 전체를 출력했을 때와 다른 모습을 보입니다.
# 이렇게 데이터를 가져오면 Series 라는 데이터 형태로 출력이 됩니다.
# Seies, 벡터, 1차원
df["가격"]
0    3500
1    3500
2    3500
3    3500
4    3500
5    3500
6    3500
7    3500
Name: 가격, dtype: int64
# 가져온 "가격" 컬럼을 리스트 형태로 변경합니다.
df["가격"].tolist() # 리스트 변경위해선 tolist() 사용!
[3500, 3500, 3500, 3500, 3500, 3500, 3500, 3500]