파이썬 머신러닝 판다스 데이터분석
2주차- 데이터 살펴보기
humpark
2024. 8. 14. 18:43
1. 데이터프레임의 구조
1-1 데이터 내용 미리보기
앞부분 미리보기: df.head(n) #처음 n개 미리보기
뒷부분 미리보기: df.tail(n) #뒤에꺼 n개 미리보기
1-2 데이터 요약 정보 확인하기
- 데이터프레임의 크기(행, 열)
데이터프레임의 크기 확인: df.shape
- 데이터프레임의 기본 정보
데이터프레임의 기본 정보 확인: df.info()
- 데이터프레임의 기술 통계 요약
데이터프레임 기술적 요약: df.describe()
# 산술데이터가 아닌 열에 대한 정보를 확인하고 싶다면 include=all 옵션을 추가
1-3 데이터 개수 확인
- 각 열의 데이터 개수
df.info() 메소드는 화면에 각 열의 데이터 개수 정보를 출력하지만, 반환해 주는 값이 없어서 다시 사용하는데 어려움이 있다. 이를 해결하기 위해서
열 데이터 개수 확인: df.count()
위 메소드는 데이터프레임의 각 열이 가지고 있는 데이터 개수를 시리즈 객체로 반환한다.
- 각 열의 고윳값 개수
df의 특정 열이 가지고 있는 고윳값, 즉 유일한 값을 가지는 데이터의 개수를 세는 데 사용한다.
열 데이터의 고유값 갯수: df["열이름"].value_counts()
#dropna= true 옵션을 설정하면 NaN을 제외하고 개수를 계산(디폴트는 NaN포함)
2. 통계 함수 적용
2-1 평균값
모든 열의 평균값: df.mean()
특정 열의 평균값: df["열이름"].mean()
2-2 중간값
모든 열의 중간값: df.median()
특정 열의 중간값: df["열이름"].median()
2-3 최대값
모든 열의 최대값: df.max()
특정 열의 최대값: df["열이름"].max()
2-4 최소값
모든 열의 최소값: df.min()
특정 열의 최소값: df["열이름"].min()
2-5 표준편차
모든 열의 표준편차: df.std()
특정 열의 표준편차: df["열이름"].std()
2-6 상관계수
모든 열의 상관계수: df.corr()
특정 열의 상관계수: df[열 이름의 리스트].corr() #이때는 2개 이상의 열을 지정하기 때문에 리스트
3. 판다스 내장 그래프 도구 활용
판다스 내장 함수 이용하기: df.plot()
- 선 그래프
#예제 3-4
import pandas as pd
import matplotlib.pyplot as plt
# 엑셀 파일 로드 (역슬래시 두 번 사용)
df = pd.read_excel("C:\\Users\\sajog\\Downloads\\5674-980\\pandas-data-analysis-main\\part3\\data\\남북한발전전력량.xlsx", engine='openpyxl')
# 또는 원시 문자열 사용
# df = pd.read_excel(r"C:\Users\sajog\Downloads\5674-980\pandas-data-analysis-main\part3\data\남북한발전전력량.xlsx", engine='openpyxl')
# 1행과 6행, 4번째 열부터 끝까지 선택
df_ns = df.iloc[[0, 5], 3:]
# 인덱스 설정
df_ns.index = ['South', 'North']
# 열 이름의 자료형을 정수형으로 변경
df_ns.columns = df_ns.columns.map(int)
# 데이터 전치
tdf_ns = df_ns.T
# 데이터프레임 출력 (선택 사항)
print(tdf_ns.head())
# 선 그래프 그리기
tdf_ns.plot()
# 그래프 제목과 레이블 설정
plt.title('Electricity Consumption Over Time')
plt.xlabel('Year')
plt.ylabel('Electricity Consumption')
# 그래프에 격자 추가
plt.grid(True)
# 그래프 출력
plt.show()
인덱스 설정을 따로 해주었기 때문에 가장 왼쪽에 인덱스 열이 생성된 모습
궁금증: 왜 transpose 를 통해 테이블을 전치시켜야 하는건가?
gpt에게 물어보니 다음과 같이 대답했다
2021 2022 2023
A 10 15 20 #전치 전의 테이블
B 5 10 15
A B
2021 10 5
2022 15 10 #전치 후의 테이블
2023 20 15
물어보니 전치 전에는 년도별로 A,B의 값을 비교하기가 불편하지만, 전치 후에는 년도별로 구분이 쉽다라고 했다.
아무래도 x축을 년도로 하는게 나중에 그래프로 그릴때도 보기 유리하니까 그런게 아닌가 싶다.
즉 plot 메소드를 이용한다면 행 인덱스는 x축으로, 열 인덱스는 y축으로 간다는 것을 알 수 있다.
- 막대 그래프
막대 그래프: df.plot(kind='bar')
- 히스토그램
히스토그램: df.plot(kind='hist')
- 산점도
산점도: df.plot(x='weight', y='mpg', kind='scatter')
- 박스플롯
박스플롯: df['열 이름'].plot(kind='box')
다음은 데이터의 종류에 따라서 사용하는 그래프를 정리한 사진이다