2021/12/30/THU
import pandas as pd
df=pd.read_csv('WEOApr2020all.csv')
df.describe()
df.index
pd.Series(df.index)
df.columns
pd.Series(df.columns)
len(df['Country'].unique())
df['Country'].nunique()
# 194개 나라의 data가 들어있음을 알 수 있다
df.iloc[:,3]
df.Country
df[['Country']]
df[['Subject Descriptor']].head(7)
df[['Subject Descriptor','2020']]
df[['Subject Descriptor','2020','Country']]
df['Subject Descriptor'].str
- create a new string object from the given object
- 판다스에서 문자열 관련 함수를 사용하거나 전처리를 하기 위해서는 함수 및 명령어 앞에 str을 붙여주어야 한다.
df['Subject Descriptor'].str.contains()
지정한 문자열이 포함되어 있는지 알 수 있다.
idx_inf=df['Subject Descriptor'].str.contains('Inflation, end of')
idx_inf
sum(idx_inf)
df.loc[idx_inf]
df_inf=df[idx_inf]
df_inf_2021=df_inf[['Country','2021']]
df_inf_2021
- (구) 인덱스drop
df_inf_2021.reset_index(drop=True,inplace=True)
df_inf_2021
df_inf_2021.info()
- 2021 null data가 4개임을 알 수 있다
- notnull() = null 아닌 것만
df_inf_2021=df_inf_2021.loc[df_inf_2021['2021'].notnull()]
df_inf_2021
- null data가 빠졌음
df_inf_2021.info()
- data에 큰 숫자마다 comma가 들어가 있음 $\to$ 없애주자
- regex=True 정규표현식 사용하도록.
- 굳이 없어도 되는 것 같은데....
df_inf_2021=df_inf_2021.replace(',','')
df_inf_2021
- 이제 numeric data로 바꿔보자
df_inf_2021['2021']=pd.to_numeric(df_inf_2021['2021'])
- 확인해보자
df_inf_2021.info()
- float64로 잘 바뀌었음
df_inf_2021.sort_values('2021').plot.bar(x='Country')
- 무용지물의 그래프가 나왔다
df_inf_2021.sort_values('2021').iloc[0:20,:].plot.bar(x='Country')
df_ur=df[df['Subject Descriptor'].str.contains('Unemployment')]
df_ur
df_ur=df_ur[['Country','2021']]
df_ur.info()
- 94개의 null data 발견
df_ur=df_ur.loc[df_ur['2021'].notnull()]
df_ur.reset_index(drop=True,inplace=True)
df_ur
- null data가 잘 빠졌음
- 이제 numeric으로 변형해주자
df_ur['2021']=pd.to_numeric(df_ur['2021'])
df_ur.info()
df_ur.plot.bar(x='Country')
df_ur.sort_values('2021',ascending=False).plot.bar(x='Country',
title='Unemployment Rate',figsize=(15,5))
- 관심있는 나라만 따로 표시해보자
df_ur_np=df_ur.sort_values('2021',ascending=False).to_numpy()
- plt.plot()에서 figsize를 기본 크기를 지정할 수도 있지만, 매번 그릴 때마다 크기를 지정해야 하는 불편함이 있다. 특히 시계열 차트를 많이 그리는 경우 시간에 따른 변화를 보기 위해 가로로 긴 차트를 그리는 경우가 더 많다. 따라서 rcParams를 이용하여 차트 그림(figure)의 기본 설정을 지정할 수 있다.
plt.rcParams['figure.figsize']=(20,3)
plt.xticks(rotation='vertical') # x축명 세로로?
plt.bar(df_ur_np[:,0],df_ur_np[:,1]) # x축, y축
plt.title('2021 Unemployment Rate - IMF World Economics Outlook Database, April 2020')
idx=np.where(df_ur_np=='Korea')
plt.bar(df_ur_np[idx[0],0],df_ur_np[idx[0],1],label='Korea')
idx=np.where(df_ur_np=='United States')
plt.bar(df_ur_np[idx[0],0],df_ur_np[idx[0],1],label='United States')
idx=np.where(df_ur_np=='China')
plt.bar(df_ur_np[idx[0],0],df_ur_np[idx[0],1],label='China')
plt.legend()
TIP
df.head(3)
len(df.columns)
idx = list(range(0,52))
idx[3]=0
idx[0]=3
print(idx)
df.iloc[:,idx]
- 이렇게 원하는 순서로 열을 배열해보았음
df_ur['Criteria']=0
df_ur.loc[ df_ur['2021'] < 5 , 'Criteria' ]='Low'
df_ur.loc[ (df_ur['2021'] >= 5) & (df_ur['2021'] < 10) , 'Criteria' ]='Medium' # &로 묶는 거 주의
df_ur.loc[ df_ur['2021'] >=10 , 'Criteria' ]='High'
df_ur.groupby(['Criteria']).mean()
df_ur.groupby(['Criteria']).mean().sort_values('2021')
df_ur.groupby(['Criteria']).count()
- 용량이 큰 csv 파일을 읽고 처리할 수 있는 방법
df_new=pd.DataFrame(columns=df.columns)
df_new
for df_chunk in pd.read_csv('WEOApr2020all.csv',chunksize=5):
temp=df_chunk.loc[df_chunk['Subject Descriptor']=='Unemployment rate']
df_new = pd.concat([df_new,temp])
df_new
import cv2
img=cv2.imread('spurs_pic.jpg')
plt.imshow(img)
# BGR로 인식하기 때문에 RGB로 바꿔야 함
rgb=cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.imshow(rgb)
gray=cv2.cvtColor(rgb, cv2.COLOR_RGB2GRAY)
plt.imshow(gray,cmap='gray')
classifier=cv2.CascadeClassifier('.\\haarcascades\\haarcascade_frontalface_default.xml')
분류할 데이터가 정해졌음
rects = classifier.detectMultiScale(gray,scaleFactor=1.2,minNeighbors=5)
print('Face found:{} '.format(len(rects)))
for x,y,w,h in rects:
cv2.rectangle(rgb,(x,y),(x+w,y+h),(0,255,0),2)
plt.imshow(rgb)
#plt.imshow(rgb)
bgr=cv2.cvtColor(rgb,cv2.COLOR_RGB2BGR)
cv2.imwrite('spurs_pic_faces.jpg',bgr)
# 저장했음