AI 실무 기본 과정
[기본교육과정] 데이터 분석을 위한 라이브러리(2)
데이터프레임 정렬하기
axis = 0 : 행 인덱스 기준 정렬 *기본 : 오름차순
axis = 1 : 열 인덱스 기준 정렬 *ascending = False : 내림차순
import numpy as np
import pandas as pd
print("DataFrame: ")
df = pd.DataFrame({
'col1' : [2, 1, 9, 8, 7, 4],
'col2' : ['A', 'A', 'B', np.nan, 'D', 'C'],
'col3': [0, 1, 9, 4, 2, 3],
})
df = df.sort_index(axis = 0) #오름차순
df.sort_index(axis = 1, ascending = False) #내림차순
df.sort_values('col1', ascending = True) #col1칼럼 기준 정렬(오름차순)
df.sort_values('col1', ascending = False) #col1칼럼 기준 정렬(내림차순)
df.sort_values(['col2', 'col1'], ascending = [True, False]) #col2기준 오름차순 정렬 후, col1기준 내림차순 정렬
데이터프레임 분석용 함수
count메서드 : 데이터 개수 확인 가능 (* 기본 : NaN값 제외)
data = {
'korea' : [50, 60, 70],
'math' : [10, np.nan, 40]}
df = pd.DataFrame(data, index = ['a', 'b', 'c'])
df.count(axis = 0) #열 기준
'''
korea 3
math 2
dtype: int64
'''
df.count(axis = 1) #행 기준
'''
a 2
b 1
c 2
dtype: int64
'''
max, min메서드 : 최대/최소값 확인 가능 (* 기본 : 열 기준, NaN값 제외)
df = pd.DataFrame(data, index=['a', 'b', 'c'])
df.max() #최대값
'''
korea 70.0
math 40.0
dtype: float64
'''
df.min() #최소값
'''
korea 50.0
math 10.0
dtype: float64
'''
sum, mean메서드 : 합계/평균 계산 (* 기본 : 열 기준, NaN값 제외)
df.sum() #합계
'''
korea 180.0
math 50.0
dtype: float64
'''
df.mean() #평균
'''
korea 60.0
math 25.0
dtype: float64
'''
axis, skipna 인자 : 합계 및 평균 계산 (행 기준, NaN값 포함 시)
df.sum(axis = 1)
'''
a 60.0
b 60.0
c 110.0
dtype: float64
'''
df.mean(axis = 1, skipna = False) #skipna = False : NaN값 포함
'''
a 30.0
b NaN
c 55.0
dtype: float64
'''
NaN값이 존재하는 칼럼의 평균을 구하여 NaN값을 대체
B_avg = df['math'].mean()
print(B_avg) #25.0
NaN값 대체
df['math'] = df['math'].fillna(B_avg)
df.mean(axis = 1, skipna = False) #NaN없어진 상태로 평균 구하기
'''
a 30.0
b 42.5
c 55.0
dtype: float64
'''
그룹으로 묶기
조건부로 집계하고 싶은 경우
df = pd.DataFrame({
'data1' : range(6),
'data2' : [4, 4, 6, 0, 6, 1],
'key' : ['A', 'B', 'C', 'A', 'B', 'C']})
df.groupby('key').sum() #1번
'''
data1 data2
key
A 3 4
B 5 10
C 7 7
'''
df.groupby(['key', 'data1']).sum() #2번
'''
data2
key data1
A 0 4
3 0
B 1 4
4 6
C 2 6
5 1
'''
group by를 통해 집계를 한번에 계산하는 방법
df.groupby('key').aggregate(['min', np.median, max]) #aggregate : 여러 개 통계함수를 적용하고 싶을 때
'''
data1 data2
min median max min median max
key
A 0 1.5 3 0 2.0 4
B 1 2.5 4 4 5.0 6
C 2 3.5 5 1 3.5 6
'''
df.groupby('key').aggregate({'data1' : 'min', 'data2': np.sum})
'''
data1 data2
key
A 0 4
B 1 10
C 2 7
'''
group by를 통해 그룹 기준 속성을 기준으로 데이터 필터링
def filter_by_mean(x) :
return x['data2'].mean() > 3 #데이터 평균이 3보다 크면 True, 작으면 False
df.groupby('key').mean()
'''
data1 data2
key
A 1.5 2.0
B 2.5 5.0
C 3.5 3.5
'''
df.groupby('key').filter(filter_by_mean)
'''
data1 data2 key
1 1 4 B
2 2 6 C
4 4 6 B
5 5 1 C
'''
#group by를 통해 묶인 데이터에 함수 적용
df.groupby('key').apply(lambda x : x.max() - x.min())
'''
data1 data2
key
A 3 4
B 3 2
C 3 5
'''
group by로 묶인 데이터에서 key값으로 데이터 가져오기
df = pd.read_csv("./unic.csv") #상위 5개 데이터
df.head() #데이터 추출
df.groupby("시도").get_group("충남")
len(df.groupby("시도").get_group("충남")) #94
[연습문제]
데이터 프레임의 key 칼럼을 groupby함수로 묶고, key별로 data1과 data2 합계를 출력해보세요.
데이터 프레임의 key와 data1칼럼을 groupby함수로 묶고, key와 data1별로 data2의 합계를 출력해보세요.
import numpy as np
import pandas as pd
df = pd.DataFrame({
'key': ['A', 'B', 'C', 'A', 'B', 'C'],
'data1': [1, 2, 3, 1, 2, 3],
'data2': [4, 4, 6, 0, 6, 1]
})
print("DataFrame:")
print(df, "\n")
groupby 함수를 이용해봅시다.
key를 기준으로 묶어 합계를 구해 출력해보세요.
print(df.groupby('key').sum())
key와 data1을 기준으로 묶어 합계를 구해 출력해보세요.
print(df.groupby(['key', 'data1']).sum())
[연습문제2]
데이터 프레임을 key를 기준으로 묶고, key별 data1과 data2 각각의 최솟값과 중앙값, 최댓값을 출력해봅시다.
데이터 프레임을 key를 기준으로 묶고, key별 data1의 최솟값과 data2의 합계를 출력해봅시다.
import numpy as np
import pandas as pd
df = pd.DataFrame({
'key': ['A', 'B', 'C', 'A', 'B', 'C'],
'data1': [0, 1, 2, 3, 4, 5],
'data2': [4, 4, 6, 0, 6, 1]
})
print("DataFrame:")
print(df, "\n")
aggregate를 이용하여 요약 통계량을 산출해봅시다.
데이터 프레임을 'key' 칼럼으로 묶고, data1과 data2 각각의 최솟값, 중앙값, 최댓값을 출력하세요.
print(df.groupby('key').aggregate([min,np.median,max]))
데이터 프레임을 'key' 칼럼으로 묶고, data1의 최솟값, data2의 합계를 출력하세요.
print(df.groupby('key').aggregate({'data1':min, 'data2':sum}))
matplotlib 그래프
Line Plot
import matplotlib.pyplot as plt
fig, ax = plt.subplots() #1개
x = np.arange(15) #0~14
y = x ** 2 #제곱
ax.plot(x, y, linestyle = ":", marker = "*", color = "#524FA1")
line style
x = np.arange(10) #0~9
fig, ax = plt.subplots()
ax.plot(x, x, linestyle = "-") #solid
ax.plot(x, x+2, linestyle = "--") #dashed
ax.plot(x, x+4, linestyle = "-.") #dashdot
ax.plot(x, x+6, linestyle = ":") #datted
color
x = np.arange(10)
fig, ax = plt.subplots()
ax.plot(x, x, color = "r")
ax.plot(x, x+2, color = "green")
ax.plot(x, x+4, color = "0.8") #0~1사이 값 gray
ax.plot(x, x+6, color = "#524FA1")
Marker
x = np.arange(10)
fig, ax = plt.subplots()
ax.plot(x, x, marker = ".")
ax.plot(x, x, marker = "o")
ax.plot(x, x+2, marker = "v")
ax.plot(x, x+4, marker = "s")
ax.plot(x, x+6, marker = "*")
축 경계 조정하기
x = np.linspace(0, 10, 1000) #(start, end, step)
fig, ax = plt.subplots()
ax.plot(x, np.sin(x))
ax.set_xlim(-2, 12) #limit. x축 초정
ax.set_ylim(-1.5, 1.5) #y축 조정
범례 추가
x = np.arange(10)
fig, ax = plt.subplots()
ax.plot(x, x, label = 'y=x')
ax.plot(x, x**2, label = 'y=x^2')
ax.set_xlabel("x")
ax.set_ylabel("y")
ax.legend(loc = 'upper right', shadow = True, fancybox = True, borderpad = 2)
#legend : 범례 위치 조정, upper right : 오른 쪽 위, shadow : 그림자, fancybox : 모서리를 둥글게, borderpad : 크기
bar & histogram
Bar plot
x = np.arange(10)
fig, ax = plt.subplots(figsize = (12, 4))
ax.bar(x, x*2)
누적 bar plot
x = np.random.rand(3)
y = np.random.rand(3)
z = np.random.rand(3)
data = [x, y, z] #x -> y -> z순서로 밑에서부터 쌓으며 올라가는 그래프
fig, ax = plt.subplots()
x_ax = np.arange(3)
for i in x_ax :
ax.bar(x_ax, data[i],
bottom = np.sum(data[:i], axis = 0)) #bottom : 가장 아래 쌓인 데이터 = 누적 그래프
ax.set_xticks(x_ax) #x축 설정
ax.set_xticks(["A", "B", "C"]) #라벨명이 0, 1, 2 -> A, B, C
Histogram (도수분포표)
fig, ax = plt.subplots()
data = np.random.randn(1000)
ax.hist(data, bins = 50) #bins : 막대 개수
Matplot with Pandas
df = pd.read_cvs("./president_heights.csv")
fig, ax = plot.subplot()
ax.plot(df["order"], df["height(xm)"], label="height")
ax.set_xlabel("order")
ax.set_ylabel("height(cm)")
'개인공부 > Python' 카테고리의 다른 글
62. Python Numpy 연습문제(1) (0) | 2021.11.26 |
---|---|
61. Python Group & Apply 연습문제 (0) | 2021.11.25 |
59. NIPA AI온라인 교육 AI 실무 기본 과정(2-1) (0) | 2021.11.23 |
58. NIPA AI온라인 교육 AI 실무 기본 과정(1) (0) | 2021.11.22 |
57. Python Matplot 연습문제 (0) | 2021.11.21 |