import pandas as pd
import numpy as np
s = pd.Series([1, 3, 5, np.nan, 6, 8])
s
dates = pd.date_range('20190716', periods=7) # 날짜형 데이터
dates
df = pd.DataFrame(np.random.randn(7,4), index=dates, columns=['A', 'B', 'C', 'D']) # 7행 4열 random 변수 생성
df
df.head(3)
df.index
df.columns
df.values
df.info() # DataFrame의 개요 확인
df.describe()
df.sort_values(by='B', ascending=False)
df
df['A']
df[0:4]
df['20190719':'20190721']
df.loc[dates[3]]
df.loc[:, ['A', 'B']]
df.loc['20190718':'20190720', ['A','B']]
df.loc['20190718':'20190720', 'A':'B']
df.loc['20190722', 'A':'B']
df.loc[dates[2], 'C']
df.iloc[3]
df.iloc[2:4, :3]
df.iloc[[1,2,5],3]
df.iloc[0:4, :]
df.iloc[:, 0:3]
df
df[df.B < 0]
df[df < 0]
df2 = df.copy() # 데이터의 내용까지 복사함
df2['E'] = ['one', 'one', 'two', 'three', 'four', 'five', 'six']
df2
df2['E'].isin(['one', 'two'])
df2[df2['E'].isin(['one', 'two'])]
df.apply(np.cumsum)
df.apply(lambda x: x.max() - x.min())
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3'],
'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3']},
index = [0, 1, 2, 3])
df2 = pd.DataFrame({'A': ['A4', 'A5', 'A6', 'A7'],
'B': ['B4', 'B5', 'B6', 'B7'],
'C': ['C4', 'C5', 'C6', 'C7'],
'D': ['D4', 'D5', 'D6', 'D7']},
index = [4, 5, 6, 7])
df3 = pd.DataFrame({'A': ['A8', 'A9', 'A10', 'A11'],
'B': ['B8', 'B9', 'B10', 'B11'],
'C': ['C8', 'C9', 'C10', 'C11'],
'D': ['D8', 'D9', 'D10', 'D11']},
index = [8, 9, 10, 11])
df1
df2
df3
result = pd.concat([df1, df2, df3]) # 데이터를 열 방향으로 단순 합침
result
result = pd.concat([df1, df2, df3], keys=['x', 'y', 'z'])
result
result.index # key 지정된 구분은 다중 index 되어 level 형성함
result.index.get_level_values(0)
result.index.get_level_values(1)
df4 = pd.DataFrame({'B': ['B2', 'B3', 'B6', 'B7'],
'D': ['D2', 'D3', 'D6', 'D7'],
'F': ['F2', 'F3', 'F6', 'F7']},
index = [2, 3, 6, 7])
result = pd.concat([df1, df4], axis=1)
df1
df4
result
# 공통된 index로 합치고 그렇지 않은 index의 데이터 버림
result = pd.concat([df1, df4], axis=1, join='inner')
result
result = pd.concat([df1, df4], axis=1, join_axes=[df1.index]) # 열의 index 직접 지정
result
result = pd.concat([df1, df4], ignore_index=True, sort=True) # index 무시하고 합친 후 다시 index 부여
result
left = pd.DataFrame({'key': ['K0', 'K4', 'K2', 'K3'],
'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3']})
right = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3']})
left
right
- outer: merge한 데이터 결과를 모두 가짐(합집합)
- inner: 공통된 요소만 가짐(교집합)
pd.merge(left, right, on='key')
pd.merge(left, right, how='left', on='key')
pd.merge(left, right, how='right', on='key')
pd.merge(left, right, how='outer', on='key')
pd.merge(left, right, how='inner', on='key')
import matplotlib.pyplot as plt
%matplotlib inline
# 그래프의 결과를 출력 세션에 나타나게 하는 설정
plt.figure()
plt.plot([1, 2, 3, 4, 5, 6, 7, 8, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0])
plt.show()
t = np.arange(0, 12, 0.01) # 0부터 12까지 0.01 간격으로 데이터 생성
y = np.sin(t) # 사인 함수에 입력
plt.figure(figsize=(10, 6))
plt.plot(t, y)
plt.show()
plt.figure(figsize=(10, 6))
plt.plot(t, y)
plt.grid() # 그리드 적용
plt.xlabel('time') # x축 라벨 적용
plt.ylabel('Amplitude') # y축 라벨 적용
plt.title('Example of sinewave') # 제목 적용
plt.show()
plt.figure(figsize=(10, 6))
plt.plot(t, np.sin(t))
plt.plot(t, np.cos(t))
plt.grid()
plt.xlabel('time')
plt.ylabel('Amplitude')
plt.title('Example of sinewave')
plt.show()
plt.figure(figsize=(10, 6))
plt.plot(t, np.sin(t), label='sin')
plt.plot(t, np.cos(t), label='cos')
plt.grid()
plt.legend() # 범례 추가
plt.xlabel('time')
plt.ylabel('Amplitude')
plt.title('Example of sinewave')
plt.show()
plt.figure(figsize=(10, 6))
plt.plot(t, np.sin(t), lw=3, label='sin')
plt.plot(t, np.cos(t), 'r', label='cos')
plt.grid()
plt.legend()
plt.xlabel('time')
plt.ylabel('Amplitude')
plt.title('Example of sinewave')
plt.show()
plt.figure(figsize=(10, 6))
plt.plot(t, np.sin(t), lw=3, label='sin')
plt.plot(t, np.cos(t), 'r', label='cos')
plt.grid()
plt.legend()
plt.xlabel('time')
plt.ylabel('Amplitude')
plt.title('Example of sinewave')
plt.ylim(-1.2, 1.2) # y축 제한 설정
plt.xlim(0, np.pi) # x축 제한 설정
plt.show()
t = np.arange(0, 5, 0.5) # 0부터 5까지 0.5 간격
plt.figure(figsize=(10, 6))
plt.plot(t, t, 'r--')
plt.plot(t, t**2, 'bs')
plt.plot(t, t**3, 'g^')
plt.show()
plt.figure(figsize=(10, 6))
pl1 = plt.plot(t, t**2, 'bs')
plt.figure(figsize=(10, 6))
pl2 = plt.plot(t, t**3, 'g^')
plt.show()
t = [0, 1, 2, 3, 4, 5, 6]
y = [1, 4, 5, 8, 9, 5, 3]
plt.figure(figsize=(10, 6))
plt.plot(t, y, color='orange')
plt.show()
plt.figure(figsize=(10, 6))
plt.plot(t, y, color='pink', linestyle='dashed')
plt.show()
plt.figure(figsize=(10, 6))
plt.plot(t, y, color='skyblue', linestyle='dashed', marker='o')
plt.show()
plt.figure(figsize=(10, 6))
plt.plot(t, y, color='gray', linestyle='dashed', marker='o',
markerfacecolor='red', markersize=10)
plt.xlim([-0.5, 6.5])
plt.ylim([0.5, 9.5])
plt.show()
t = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
y = np.array([9, 8, 7, 9, 8, 3, 2, 4, 3, 4])
plt.figure(figsize=(10, 6))
plt.scatter(t, y)
plt.show()
plt.figure(figsize=(10, 6))
plt.scatter(t, y, marker='>')
plt.show()
colormap = t
plt.figure(figsize=(10, 6))
plt.scatter(t, y, s = 40, c = colormap, marker='<') # x축 값에 따라 색상 바꿈
plt.colorbar()
plt.show()
s1 = np.random.normal(loc=0, scale=1, size=1000) # loc: 평균값 지정
s2 = np.random.normal(loc=5, scale=0.5, size=1000) # scale: 표준편차 지정
s3 = np.random.normal(loc=10, scale=2, size=1000)
plt.figure(figsize=(10, 6))
plt.plot(s1, label='s1')
plt.plot(s2, label='s2')
plt.plot(s3, label='s3')
plt.legend()
plt.show()
plt.figure(figsize=(10, 6))
plt.boxplot((s1, s2, s3))
plt.grid()
plt.show()
plt.figure(figsize=(10, 6))
plt.subplot(221) # 2행 2열의 1번째
plt.subplot(222) # 2행 2열의 2번째
plt.subplot(212) # 2행 1열의 2번째
plt.show()
plt.figure(figsize=(10, 6))
plt.subplot(411)
plt.subplot(423)
plt.subplot(424)
plt.subplot(413)
plt.subplot(414)
plt.show()
t = np.arange(0, 5, 0.01)
plt.figure(figsize=(10, 12))
plt.subplot(411)
plt.plot(t, np.sqrt(t)) # 제곱근(루트) 계산
plt.grid()
plt.subplot(423)
plt.plot(t, t**2)
plt.grid()
plt.subplot(424)
plt.plot(t, t**3)
plt.grid()
plt.subplot(413)
plt.plot(t, np.sin(t))
plt.grid()
plt.subplot(414)
plt.plot(t, np.cos(t))
plt.grid()
plt.show()