미식가의 개발 일기

[KT 에이블스쿨(6기, AI)] 1주차, 파이썬 기초와 Numpy & Pandas 본문

KT 에이블스쿨(6기, AI)

[KT 에이블스쿨(6기, AI)] 1주차, 파이썬 기초와 Numpy & Pandas

대체불가 핫걸 2024. 9. 22. 14:00

 

< 1주차 후기>

  • 1주차는 파이썬 기초에 대해 학습했습니다!
  • 대망의 첫 수업.. 기대도 많이 하고, 긴장도 많이 했는데 파이썬과 Numpy, Pandas는 그래도 한 번 사용해 봤던 거여서 수업 참여에 어려움은 없었습니다. 😊
  • 데이터 분석을 위한 문법 위주로 중요한 부분만 쏙쏙 뽑아서 설명해 주신 게 좋았어요! 중요한 부분은 몇 번 반복해서 말씀해 주시고, 비교적 덜 중요한 부분은 깊게 들어가지 않고 이것만 알고 넘어가면 된다고 해주셔서 방향을 명확히 잡을 수 있었습니다.
  • 이번 1주차는 알고있던 내용을 정리하고, 거기서 더 중요한 부분을 리마인드 하는 시간이였습니다. 강사님만의 노하우나 실무 경험을 공유해주시면서 이런 부분을 신경쓰면 좋다는 꿀팁도 유용했습니다. 😁

 

Python 기초

- Python의 자료형 중 리스트, 딕셔너리, 튜플에 대해 학습하고 조건문과 반복문, 함수를 배웠습니다.

 

자료형

리스트(List) 
순서가 있는 변경 가능한 데이터 구조

 

  • 생성, 수정, 삭제
# 생성
l = [1, 2, 3, 4, 5] 
l = [range(1, 6, 1)] # range(시작, 끝+1, 증감)

l2 = [l, 6, 7] # 리스트 안에 리스트 포함 가능. l2 = [[1, 2, 3, 4, 5], 6, 7]

# 추가
l.append(7) # [1, 2, 3, 4, 5, 7]

# 변경
l[2] = 6 # [1, 2, 6, 4, 5, 7]

# 인덱스로 삭제
del l[2] # [1, 2, 4, 5, 7]

# 값으로 삭제
l.remove(4) # [1, 2, 5, 7]

 

  • 조회
# 인덱싱(0부터 시작)
print(l[0], l[-1]) # 1 5

# 슬라이싱
print(l[0:3], l[:3]) # [1, 2, 3] [1, 2, 3]

 

 

딕셔너리(Dictionary) 
- 키(key)와 값(value) 쌍으로 이루어진 변경 가능한 데이터 구조
- 키(key)는 중복 불가능, 값(value)은 중복 가능

 

  • 생성, 수정, 삭제
# 생성
d = { 'k1' : 1,
      'k2' : [10, 20, 30],
      'k3' : {'a' : 1, 'b' : 2} }
      
# 추가
d['k4'] = 'coffee'

# 변경
d['k3'] = 0

# 삭제
del d['k4']

 

  • 조회
# key로 value를 조회
d['k2'] # [10, 20, 30]
d['k2'][1] # [20]

 

 

 튜플(Tuple) 
소괄호로 생성하고, 변경 불가능하다는 것을 제외하면 리스트와 같습니다.

 

 

조건문

if 조건문1:
         코드1
elif 조건문2:
         코드2
else:
         코드3

조건문1을 만족하면 코드1 실행,  조건문1을 만족하지 않고 조건문2를 만족하면 코드2 실행, 둘 다 아니면 코드3 실행

 

 

반복문

  • break: 반복문 종료
  • continue: 현재 반복을 멈추고 다음 반복으로 즉시 이동 
for loop
# 1부터 10까지 자연수 더하기
sum = 0
for i in range(1, 11):
	sum += i
    
print(sum)

 

while loop
  • for loop와 달리 종료 조건을 지정해줘야 한다.
# 1부터 10까지 자연수 더하기
sum, i = 0, 1
while i <= 10: # i가 10이하일 때만 반복
	sum += i
	i += 1
    
print(sum)

 

 

함수

코드의 재사용성, 구조화, 가독성을 높이기 위해 사용

 

  • 입력 매개변수가 2개일 때
def add(a, b):
	return a + b
    
print(add(1, 2)) # 3
print(add(3, 5)) # 8
  • 입력 매개변수가 0개일 때
def greet():
	return 'Hello, World'
    
print(greet()) # Hello, World

 

  • 가변 인자를 받을 때
def num(*n):
	print(n)
    
num([1, 2, 3]) # [1, 2, 3]

 

 

 

Numpy

출처: https://brainpy.readthedocs.io/en/brainpy-1.1.x/tutorial_math/tensors.html

 

Numpy 배열
여러 차원으로 표현할 수 있으며 axis는 배열의 각 차원을 나타내는 인덱스를 의미합니다.
그 중 가장 많이 사용하는 2차원 배열의 axis는
axis=0: 세로축을 의미하며 각 열에 대한 연산을 수행
axis=1: 가로축을 의미하며 각 행에 대한 연산을 수행

 

라이브러리 호출

 

import numpy as np

 

2차원 배열 생성
l = [[1, 2, 3],
     [4, 5, 6]]

# 배열로 변환
l = np.array(l)

 

배열 정보 확인
  • 차원 확인: `l.dim`
  • 크기(형태) 확인: `l.shape`
  • 크기(형태) 변경: `l.reshape(3, 2)` ※ 전체 요소 개수는 맞춰줘야 함
  • 자료형 확인: `l.dtype`

 

인덱싱
# 첫 번째 행 세 번째 요소
print(l[0, 2])

# 첫 번째, 두 번째 행의 첫 번째 열
print(l[[0, 2], 0])

# 첫 번째, 두 번째 열
print(l[:, [0, 1]])

 

슬라이싱
첫 번째 ~ 세 번째 행과 마지막 2개의 열 
print(a[:3, -2:])

 

배열 연산
  • 집계: `np.sum(l, axis=0)` `np.sum(l, axis=1)`
  • 최댓값의 인덱스: `np.argmax(l)` `np.argmax(l , axis=0)` `np.argmax(l , axis=1)`
  • 조건 필터: `np.where(조건, True일 때 출력할 값, False일 때 출력할 값)`

 

Pandas

- 데이터 조작과 분석을 위한 파이썬 라이브러리 

import pandas as pd

 

시리즈(Series)

데이터 프레임의 한 열을 나타내는 1차원 자료구조

 

데이터 프레임(DataFrame)

여러 행과 열로 구성된 테이블 형태의 2차원 자료구조 

 

생성
  • 직접 생성
# 딕셔너리 만들기
d = {'Name': ['n1', 'n2', 'n3'],
     'Age': [10, 20, 30]}

# 데이터 프레임 생성
df = pd.DataFrame(d)

# 맨 위 2개의 행 확인(default: 5개)
df.head(2)

# 하위 5개의 행 확인
# df.tail()

 

 

  • 불러오기
df = pd.read_csv(path)

 

 

데이터 프레임 정보 보기
  • 열: `df.columns`
  • 열 자료형: `df.dtypes`
  • 열 자료형, 값 개수: `df.info()`
  • 기초통계정보: `df.describe()`

 

정렬

 

`df.sort_values(by='정렬 대상')`

  • ascending=True: 오름차순 정렬(기본값)
  • ascending=False: 내림차순 정렬

 

기본 집계
  • 고유값 확인: `df['컬럼 이름'].unique()`
  • 고유값과 개수 확인: ` df['컬럼 이름'] .value_counts()`

 

데이터 프레임 조회
  • `loc`
# 나이가 10보다 많고 30보다 적은 행 조회 
# and-> &, or-> |
df.loc[(df['Age'] > 10) & (df['Age'] < 30)]

# 나이가 10보다 많고 30보다 적은 이름 조회
df.loc[(df['Age'] > 10) & (df['Age'] < 30), ['Name']]

 

  • `isin`
# 나이가 10, 20인 행 조회
df.loc[df['Age'].isin([10, 20])]

 

  • `between`
# 10~20살까지의 행 조회
df.loc[df['Age'].between(10, 20)]

 

 

데이터 프레임 집계
  • `groupby()`: 특정 기준으로 그룹화
# column_name으로 그룹화하여 target의 합계 구하기
df.groupby('column_name')['target'].sum()

# 'Category'와 'Subcategory'로 그룹화하여 Value의 합계 구하기
grouped = df.groupby(['Category', 'Subcategory'])['Value'].sum()

# # column_name으로 그룹화하여 target의 최소, 최대, 평균값 계산
df.groupby('column_name')['target'].agg(['min', 'max', 'mean'])

 

  • `as_index=True (기본값)`: 그룹 키가 결과의 인덱스로 사용
  • `as_index=False`: 그룹 키가 인덱스가 아니라 데이터프레임의 일반 열로 유지

 

반응형