본문 바로가기

STUDY

파이썬 스터디 ver3. 2주차

2022.06.27~2022.07.01

구름 X 전주 ict 이노베이션 스퀘어의 온라인 코딩교육 내용을 정리하였습니다.

첫 프로젝트는 어쨌든 끝났지만, 정신이 없어 이제야 올립니다.


Uhttps://youtu.be/vWEbx_8BMeY

수현이 목소리는 언제 들어도 너무 예쁘다


넘파이

- 동일 자료형을 가지는 값들이 (N차원(rank, axis)의)배열 형태로 존재함

- 각 값들은 양의 정수로 index를 가짐

- ndarray를 array로 줄여 표현하기도 함.

- ndarray는 같은 데이터 타입만 담을 수 있고, 다른 타입이 섞인 경우 값이 더 큰 데이터 타입으로 형이 변환됨

- .astype('자료형') 혹은 .astype('np.자료형')으로 직접 데이터의 타입을 바꿀 수도 있다

- 인덱싱, 슬라이싱: 연속된 데이터를 추출하는 건 슬라이싱, 리스트나 ndarray형태의 인덱싱 집합으로 추출하는 건 팬시 인덱싱, T/F가 나오는 인덱싱 집합으로 추출하는 건 불린 인덱싱

- 정렬: np.sort(list명), np.argsort(리스트명). sort 디폴트는 inplace=True, axis=-1

선형대수적 연산 가능(np.dot(내적), np.transpose(전치행렬) 등)

- ndarray로도 데이터를 불러와 가공할 수 있음

 

판다스

- 하나의 열, 하나의 행을 시리즈라 하고 열과 행들을 모아놓은 것을 데이터프레임이라 함

- df.head(), df.tail(), df.describe(), df.info()로 살펴볼 수 있음

- loc는 이름 인덱스, iloc는 위치 인덱스(df.loc[로우(인덱스)명, 칼럼명] / df.iloc[로우(인덱스)번호, 칼럼번호])

- df 내 특정 조건 확인: df[df["칼럼명"].str.contains("a")] (df의 '칼럼명' 칼럼에서 'a'를 포함하는 데이터를 보여줌) (startswith, endswith도 동일하게 사용)

- 시리즈들의 기본은 ndarray: df['칼럼명'] = df['칼럼명']+1을 해주는 경우 칼럼명 칼럼의 모든 데이터에 1이 더해짐

- 피벗테이블: pd.pivot_table(df, index=Ind, aggfunc='mean') ((인덱스를)Ind에 따라 나눈(groupby) df에 '평균' 집계함수 연산 적용)

- 삭제: df.drop([삭제할 것], axis=0) (axis=1의 경우 컬럼 삭제)

- 인덱스, 컬럼명: df.index / df.columns

- 이름 바꾸기: df.rename(index={'a':'A'}, inplace=True) (컬럼명 바꿀땐 index 대신 columns, inplace의 디폴트값은 False)

- 정렬하기: df.sort_values(by='col1', inplace=True) (sort_index도 가능) (col1칼럼의 데이터 순으로 정렬(오름차순), inplace 디폴트값 False, 내림차순은 ascending=False) 

- 복사: `=`는 shallow copy, .copy()가 deep copy

shallow: 데이터 주소까지 복사하므로 복사된 객체를 변경하면 원래 객체까지 변경됨
deep: 객체만 복사하여 새 주소에 할당함
mutable(바뀔 수 있는 것)은 값을 바꿔도 같은 메모리 주소를 갖게 됨(=값이 같이 변경됨)
immutable(바뀔 수 없는 것)은 재할당이 이루어지면서 다른 메모리 주소를 갖게 됨(=다른 값을 가짐)

- df.reset_index(): 기존의 인덱스를 칼럼으로 끌어내림

- 데이터 합치기: df_A.join(df_B), pd.merge(df_A, df_B), pd.concat([df_A, df_B])

- df.div(나눌 값): df의 데이터들을 나눌 값으로 나눔

#카테고리 만들기
ages = [0, 2, 10, 21, 23, 37, 31, 61, 20, 41, 32, 100]
bins = [0, 15, 25, 35, 60, 99]
labels = ["미성년자", "청년", "중년", "장년", "노년"]
cats = pd.cut(x=ages, bins=bins, labels=labels)

age_df = pd.DataFrame(ages, columns=['ages'])
age_df['ages_cat']=cats
age_df

 

ages ages_cat
0 NaN
2 미성년자
10 미성년자
21 청년
23 청년
37 장년
31 중년
61 노년
20 청년
41 장년
32 중년
100 NaN

 

- df.groupby('A').sum() (A칼럼 값에 따라 그룹을 나누고 같은 그룹 값끼리 더함. ['A', 'B']처럼 리스트를 넘겨줘도 됨)

 

데이터 시각화 (한글폰트 코드만 정리)

- 방대한 양의 자료의 특징을 한 눈에 파악할 수 있도록 도표나 차트로 정리한 것

#아래 코드 실행 뒤 런타임 초기화 후 재실행
%matplotlib inline  

import matplotlib as mpl 
import matplotlib.pyplot as plt 
import matplotlib.font_manager as fm  

!apt-get update -qq
!apt-get install fonts-nanum* -qq

path = '/usr/share/fonts/truetype/nanum/NanumBarunGothic.ttf' 
font_name = fm.FontProperties(fname=path, size=10).get_name()
print(font_name)
plt.rc('font', family=font_name)

fm._rebuild()
mpl.rcParams['axes.unicode_minus'] = False

파이썬 300제(226~)

datetime, time

import datetime
datetime.datetime.now() #현재시간 출력
#datetime의 timedelta를 사용해 오늘부터 5일, 4일, 3일, 2일, 1일 전 날짜 출력
today = datetime.datetime.now()
for day in range(5, 0, -1):
    delta = datetime.timedelta(days=day)
    date=today-delta
    print(date)
#현재시간을 시간:분:초로 표현
now = datetime.datetime.now()
now.strftime("%H:%M:%S")
#time, datetime을 이용해 1초에 한번 현재 시간 출력 코드 작성
import time
for i in range(5): #5번 반복
    now = datetime.datetime.now()
    print(now)
    time.sleep(1) #1초간 프로세스 정지

 

class

class Human:
    def __init__(self, name, age, sex): #생성자
        self.name = name
        self.age = age
        self.sex = sex
    def __del__(self): #소멸자
        print("나의 죽음을 알리지 말라")
    def who(self):
        print(f"이름: {self.name}, 나이: {self.age}, 성별: {self.sex}")
    def setInfo(self, name, age, sex):
        self.name = name
        self.age = age
        self.sex = sex

areum = Human("조아름", 25, "여자")
areum.who() #이름: 조아름, 나이: 25, 성별: 여자 출력
areum.setInfo("조아름", 26, "여자")
areum.who() #이름: 조아름, 나이: 26, 성별: 여자 출력
del areum #"나의 죽음을 알리지 말라" 출력

 

class 부모:
  def __init__(self):
    print("부모생성")

class 자식(부모):
  def __init__(self):
    print("자식생성")
    super().__init__()

나 = 자식() #print("자식생성") 이후 print("부모생성")

 

예외처리

per = ["10.31", "", "8.00"]
for i in per:
    try: #실행코드
        print(float(i))
    except: #예외시 수행코드
        print(0)
    else: #예외발생x시 수행코드
        print("Clean Data")
    finally: #항상 수행할 코드
        print("변환을 수행합니다.")
10.31
Clean Data
변환을 수행합니다.
0
변환을 수행합니다.
8.0
Clean Data
변환을 수행합니다.

하고싶은 것, 해야한다고 생각하는 것은 많은데 체력이 따라주지 않네요. ver2에서 하던 데이터 분석은 언제쯤 마저 할 수 있을까요.

'STUDY' 카테고리의 다른 글

파이썬 스터디 ver3. 4주차  (1) 2022.07.24
파이썬 스터디 ver3. 3주차  (0) 2022.07.14
파이썬 스터디 ver3. 1주차  (0) 2022.06.27
파이썬 스터디 ver2. 5주차  (0) 2022.05.16
파이썬 스터디 ver2. 4주차  (0) 2022.05.12