수업 목표
- pandas 모듈의 기본 함수를 사용할 수 있다.
- numpy 모듈의 기본 함수를 사용할 수 있다.
- matplotlib 모듈의 기본 함수를 사용할 수 있다.
1. pandas
- 데이터 분석과 조작을 위한 python 라이브러리
- csv 파일 등의 데이터를 읽고 원하는 데이터 형식으로 변환
자료 구조
- Series : 1차원 배열, 라벨이 있는 데이터
- DataFrame : 2차원 테이블 구조, 라벨이 있는 행과 열
Series 생성
- pandas.Series(리스트 or 딕셔너리)
- 리스트를 사용하면 인덱스가 0부터, 딕셔너리를 사용하면 인덱스가 키로 구성
import pandas as pd
lst = [10,20,30]
dct = {'a':10,'b':20,'c':30}
sl = pd.Series(lst)
sd = pd.Series(dct)
DataFrame 생성
- pandas.DataFrame(중첩리스트, columns=[컬럼이름])
import pandas pd
lst = [
[1, "Alice", 30],
[2, "Bob", 35],
[3, "Charlie", 25]
]
dct = {
"ID" : [1, 2, 3],
"Name" : ["Alice", "Bob", "Charlie"],
"Age" : [30, 35, 25]
}
df1 = pd.DataFrame(lst, columns=["ID", "Name", "Age"])
df2 = pd.DataFrame(dct)
데이터 탐색
- csv : df_csv = pd.read_csv('경로')
- excel : openpyxl pip 설치 이후, df_xl = pd.read_excel('경로')
- 상위 행 확인 : df_csv.head()
- 하위 행 확인 : df_csv.tail()
- 데이터 요약 정보 : df_csv.info()
- 기술 통계 : df_csv.describe()
- 샘플링 : df_csv.sample()
데이터 조작
- 열 선택 : df['컬럼']
- 조건 필터링 : df[조건] e.g. df[df['age']>30]
- 값으로 정렬 : df.sort_values(by="컬럼")
- 행 추가 : df.loc[len(df)] = 데이터
- 행 삭제 : df.drop(인덱스)
- 데이터 연결
- 여러 데이터프레임 합칠 수 있음 : pd.concat([df1, df2]) * ignore_index=True로 인덱스 초기화
- 두 데이터프레임만 합칠 수 있음 : pd.merge(df1, df2) *특정 공통 열을 기준으로 합칠 수 있음
- 결측치 확인 : df.isnull().sum() --> 컬럼 별 결측치 수 확인 가능
- 결측치 채우기 : df['컬럼'].mean()으로 평균을 구해, df['컬럼'] = df['컬럼'].fillna(평균)
- 중복 데이터 확인 : df.duplicated()
- 중복 제거 : df.drop_duplicates()
2. numpy
- 다차원 배열 및 행렬 연산 지원 라이브러리
- 과학 계산을 위한 다양한 함수 제공
numpy 다루기
- 배열 생성 : arr = np.array(리스트)
- 배열 모양 확인 : arr.shape
- 데이터 타입 : arr.dtype
- 0으로 초기화된 배열 : np.zeros((m, n)) *m:행, n:열
- 1로 초기화된 배열 : np.ones((m,n))
- 특정 값으로 채운 배열 : np.full((m,n), 특정값)
- 단위 행렬 : np.eye(크기)
- 난수 배열 : np.random.rand(m,n)
- 정수 난수 배열 : np.random.randint(범위시작, 범위끝, (m,n))
배열 연산
- 행렬과 스칼라 연산 -> 행렬에 전체 적용
- 행렬 간 연산
arr1 = np.array([1, 2, 3])
arr2 = np.array([[1], [2], [3]])
result = arr1 + arr2
print(result)
실행 결과
» [[2 3 4]
» [3 4 5]
» [4 5 6]]
- 행렬 곱 : m*n * n*m : np.dot(arr1, arr2)
- 합계 : arr.sum()
- 평균 : arr.mean()
- 최대 : arr.max()
- 최소 : arr.min()
배열 인덱싱
- 1차원 배열 : arr[i]
- 다차원 배열 : arr[i,j]
- 슬라이싱 : arr[행, :] *vice versa
- 조건부 연산 : arr[조건]
numpy 입출력
- 배열 저장 : np.save(경로, arr) *.npy로 저장
- 배열 로드 : np.load(경로)
numpy, pandas 통합 사용
pd.DataFrame(numpyarray, columns=[컬럼])
3. matplotlib
- import matplotlib.pyplot as plt로 사용
* seaborn은 통계적 데이터 시각화에 적합하며, matplotlib은 기본적이고 유연한 시각화 도구
기본 플롯
x = [1, 2, 3, 4]
y = [10, 20, 25, 30]
plt.plot(x, y)
plt.title("Line Plot")
plt.xlabel("X-axis")
plt.ylabel("Y-axis")
plt.show()
막대 그래프
categories = ["A", "B", "C", "D"]
values = [3, 7, 8, 5]
plt.bar(categories, values)
plt.title("Bar Chart")
plt.show()
히스토그램
data = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
plt.hist(data, bins=4, color="skyblue", edgecolor="black")
plt.title("Histogram")
plt.show()
산점도
x = [5, 7, 8, 7, 2, 17, 2, 9, 4, 11]
y = [99, 86, 87, 88, 100, 86, 103, 87, 94, 78]
plt.scatter(x, y, color="green")
plt.title("Scatter Plot")
plt.show()
원 그래프
sizes = [15, 30, 45, 10]
labels = ["Group A", "Group B", "Group C", "Group D"]
plt.pie(sizes, labels=labels, autopct="%1.1f%%", startangle=90)
plt.title("Pie Chart")
plt.show()
박스 플롯
data = [7, 8, 5, 6, 8, 9, 6, 7, 5, 8]
plt.boxplot(data)
plt.title("Box Plot")
plt.show()
그래프 커스터마이징
- 색상, 선스타일, 마커 : plt.plot(x,y, color="색상", linestyle="스타일", marker="마커")
- 축 범위 : plt.xlim(시작범위, 끝범위); plt.ylim(시작범위, 끝범위);
- 축 눈금 설정 : plt.xticks(range(시작범위, 끝범위)); plt.yticks(range(시작범위, 끝범위));
- 범례 추가 : plt.legend(loc="위치")
- 그래프 저장 : plt.savefig("위치") *plt.show() 전에 사용
Subplot
fig, axs = plt.subplots(2, 2)
axs[0, 0].plot(x, y)
axs[0, 1].bar(categories, values)
axs[1, 0].scatter(x, y)
axs[1, 1].hist(data)
plt.tight_layout()
plt.show()
'ROKEY' 카테고리의 다른 글
[20250207] 파이썬 프로그래밍 - 딥러닝 파이썬 패키지 3 (0) | 2025.02.09 |
---|---|
[20250206] 파이썬 프로그래밍 - 딥러닝 파이썬 패키지 2 (0) | 2025.02.06 |
[20250204] 파이썬 프로그래밍 - 그래픽스 지원 API (0) | 2025.02.05 |
[20250203] 파이썬 프로그래밍 - 알고리즘 2 (0) | 2025.02.03 |
[20250131] 파이썬 프로그래밍 - 알고리즘 1 (0) | 2025.01.31 |