2021/12/26/SUN
import numpy as np
import pandas as pd
from openpyxl import load_workbook
data = {'Name' : ['S1','S2','S3'],
'Age' : [25,28,22],
'Score' : np.array([95,80,75])}
data
type(data)
data['Name']
df=pd.DataFrame(data,index=['row1','row2','row3'])
df
- 리스트도 df로 변경 가능
data2=[['S1',25,95],['S2',28,80],['S3',22,75]]
data2
df2=pd.DataFrame(data2,index=['row1','row2','row3'],columns=['Name','Age','Score'])
df2
- 결론 : list와 dict은 df로 반환시킬 수 있다.
- Subset Observation 부분 관찰해보자
df
df[['Name']]
df['Name']
df[['Name','Score']]
# 이렇게 list안에 넣어줘야 함
# 행은 이렇게 추출할 수 없음
그렇다면 행 추출은?
df.loc[['row1']]
df.loc['row1']
df.loc[['row1','row2']]
df.loc['row1','Name']
df['Name']
- 사용하고 싶다면 이렇게 사용
df.loc[:,'Name']
df.loc[:,['Name']]
df.loc[:,['Score','Name']]
df.loc[:,'Name':'Age']
df.iloc[0,0]
df.iloc[2,0]
df.iloc[:,[0,2]]
df.iloc[:,0:2]
df.iloc[::2,[0,2]]
df.iloc[[-1],:]
df.iloc[-1,:]
df
df.iloc[-1::-1,:]
df.head(2)
df.tail(1)
df.info()
df.describe()
# 통계적 수치들을 알 수 있음
- deep copy $\to$ copy
- shallow copy $\to$ view
df2=df.copy()
df2
df2.loc['row2','Score']=np.NaN
df2
df
deep copy
df2.nunique()
df2['Score'].nunique()
df2
df2['Score'].value_counts()
# 각 값들의 갯수를 알 수 있음
df3=df2.copy()
df3.loc['row3','Score']=df2.loc['row1','Score']
df3['Score'].value_counts()
df3['Score'].count()
- value_counts() = 각 값 별 몇 개?
- count = 그냥 총 값이 몇 개 들어가 있는지?
df3['Age'].count()
df['Score'].sum()
df.max()
df['Score'].std()
df.describe()
df4=df.copy()
df4
df4=df4.iloc[:,[0,2,1]]
df4
df의 열을 변경해서 df4에 저장
data={
'class' : ['A','B','C','A','B','C','C'],
'name' : ['S1','S2','S3','S4','S5','S6','S7'],
'age' : [20,19,21,22,24,25,26],
'score' : [90,95,75,80,70,85,90]}
df=pd.DataFrame(data)
df
- 이처럼 dict을 df에 활용할 수 있다.
df['score']>=80
df.loc[df['score']>=80]
df.loc[df['score']>=80,['name','age']]
df[df['score']>=80]
df['result']='NONE'
df
df.loc[df['score']>=80,'result']='PASS'
df.loc[df['score']<80,'result']='FAIL'
df
idx = df['result'] == 'PASS'
df.loc[idx]
df_sorted=df.loc[idx].sort_values('score',ascending=False)
df_sorted
- excel 파일 만들고 불러오기
df_sorted.to_excel('data_sorted.xlsx',index=False)
df_import=pd.read_excel('data_sorted.xlsx')
df_import
df.groupby(by='class').mean()
# mean처리 할 수 있는 열에 대해서만 mean 처리 함
df.groupby(by='class').std()
plotting
df
df.plot.bar('name','score')
df.loc[[0,2],'score']=np.NaN
df
df.isnull()
df.dropna()
# 데이터 없는 행은 다 날림
value=0
df.fillna(value) ## NaN값만 value로 채워줌
df.replace(np.nan,54)
df.interpolate()
- 이렇게 위 아래 값의 평균으로 채워주기도 하는데 위아래 둘다 있는 경우에만 사용가능하다
def add_one(x):
return x+1
add_one(1001)
- apply 활용하기
df['age']=df['age'].apply(add_one)
df
이렇게 df의 age를 변경해줄 수 있음
df['score'].apply(np.square)
df
df.filter(regex='[rn]')
# n 또는 r이 들어간 columns 추출
df_vertical=pd.concat([df,df])
df_vertical
df_vertical=pd.concat([df,df],ignore_index=True)
df_vertical
df_horizontal=pd.concat([df,df],axis=1)
df_horizontal
df.to_csv('data_text.txt',sep='\t',index=False)
# txt파일로 변환할 때 어떻게 구분해서 타이핑해넣을 것인가
# sep=\t,여기선 지금 탭으로 구분지었음
pd.read_csv('data_text.txt',delimiter='\t')
# delimiter로 txt파일이 어떻게 이루어져 있나 알려줘야함
from sympy import symbols
x=symbols('x')
type(x)
2*x
즉 x자체가 symbol로 들어갔음
expr=2*x
expr.subs(x,3)
미분해보자
f=x**3
from sympy import diff
df1=diff(f,x)
df1
df2=diff(df1,x)
df2
from sympy import sin
f=sin(x)
df1=diff(f,x)
df1
from sympy import integrate
integrate(f,(x,0,2*3.14))
0에 가깝게 나옴
integrate(f,(x,0,3.14))
from sympy import limit
limit(sin(x)/x,x,0)
import matplotlib.pyplot as plt
from scipy import interpolate
x=np.array([1,2,3,4,5])
y=np.array([1,0.8,0.4,0.3,0.2])
plt.plot(x,y,'*')
f_lin=interpolate.interp1d(x,y)
x_new = np.arange(1,5,0.1)
y_new = f_lin(x_new)
fig,ax=plt.subplots()
ax.plot(x,y,'o',label='Data')
ax.plot(x_new,y_new,label='linear')
ax.legend()
선형 보간됨을 알 수 있다.
tck=interpolate.splrep(x,y,s=0)
y_spl=interpolate.splev(x_new,tck,der=0)
fig,ax=plt.subplots()
ax.plot(x,y,'o',label='Data')
ax.plot(x_new,y_new,label='linear')
ax.plot(x_new,y_spl,label='spline')
ax.legend()
원형 보간 추가
import cv2 as cv
im=cv.imread('KakaoTalk_20211210_090822964.png')
plt.figure()
plt.imshow(im)
plt.title('Original')
- BGR로 들어오기 때문에 RGB로 바꿔 줄 필요가 있음
rgb=cv.cvtColor(im,cv.COLOR_BGR2RGB)
plt.figure()
plt.imshow(rgb)
plt.title('RGB')
GRAY=cv.cvtColor(im,cv.COLOR_BGR2GRAY)
plt.figure()
plt.imshow(GRAY,cmap='gray')
plt.title('GRAY')
blur=cv.blur(im,(100,100))
blur=cv.cvtColor(blur,cv.COLOR_BGR2RGB)
plt.subplot(121) # 가로줄 한개, 세로줄 두개, 첫번째에 놓겠다
plt.imshow(rgb)
plt.title('RGB')
plt.subplot(122) # 가로줄 한개, 세로줄 두개, 두번째에 놓겠다
plt.imshow(blur)
plt.title('blur')
edges=cv.Canny(GRAY,0,100)
plt.subplot(121) # 가로줄 한개, 세로줄 두개, 첫번째에 놓겠다
plt.imshow(GRAY,cmap='gray')
plt.title('GRAY')
plt.subplot(122) # 가로줄 한개, 세로줄 두개, 두번째에 놓겠다
plt.imshow(edges)
plt.title('edge detection')
머신러닝과 연관하여 비디오 영상의 움직이는 사물을 찾거나 번호판 또는 숫자 인식 여러 분야에서 활용이 가능하다