-
5주 5일차 TIL 정리웅진 STARTERS 부트캠프 2023. 3. 10. 17:42
5주 5일차에는 중간평가를 본 만큼, 중간평가를 위한 공부를 위주로 진행했다.
※ 짚고 넘어가야 할 내용 정리 ※
# pandas의 논리연산자
논리연산자는 '&' , '|' ,'~', '^' 기호를 사용한다.
# 특정 값을 가졌는지 여부df['name'].isin(['Amy','Rose'])
# null 여부 판별df.kor.isnull() df.kor.notnull()
# 인덱스명으로 행 데이터 추출: locdf.loc['i3'] # 시리즈 df.loc[['i1','i3','i5']] # 데이터프레임
# 인덱스, 컬럼에 해당하는 데이터 뽑아오기df.loc['i1','kor'] # 인덱스 i1의 kor점수 df.loc['i1',['name','kor']] # 인덱스 i1 name, kor
# 여러 인덱스의 여러 컬럼 가져오기df.loc[['i1','i3','i5'],['name', 'kor']] df.loc[:,'name'] # 모든 인덱스의 name행 df.loc[:,:] # 모든 인덱스의 모든 행
# 행번호로 행데이터 추출: ilocdf.iloc[[1,3,5]] df.iloc[1:4] df.iloc[1:6:2] df.iloc[::2]
# 열 추가/수정하기df['no'] = range(1,len(df)+1) # 추가 df['sum'] = df['kor']+df['eng']+df['math'] # 추가 df['no'] = df['no']+99 # 수정
# 열 삭제/수정 등 확인inplace = True
# 컬럼명 한번에 바꾸기df.columns=['이름','국어','영어','수학']
# 마지막에 행 추가하고 인덱스 다시 지정하기new_value = {'name':'Python','kor':80,'eng':90,'math':100} df = df.append(new_value, ignore_index=True)
# 인덱스 지정하여 추가/수정하기df.loc[35] = ['aaa',70,80,90] # 인덱스 35로 추가
# 행 삭제df.drop(index=[30,34,35], inplace=True) df = df.drop(index=[30,34,35])
# 함수로 컬럼의 데이터 변경def plus5(x): score = x+5 if score>=100: score=100 return score df_copy['math'] = df['math'].apply(plus5) df_copy
# 결측치 확인df.isnull().sum()
# 결측치 삭제df.dropna() # 결측치 있는 모든 행 삭제 df.dropna(axis=1) # 결측치 있는 모든 열 삭제
# 결측치 대치df.fillna(0) # 0으로 df.fillna(df.mean()) # 평균으로 df.fillna(method='ffill') # 이전 값 df.fillna(method='bfill') # 다음 값
# 시리즈와 데이터프레임의 자료형# 시리즈 df['int'].dtype # 확인 df['int'] = df.astype('str') # 변환 # 데이터프레임 df.dtypes
# 자료형이 혼합된 컬럼을 숫자형으로 변경pd.to_numeric(s2, errors='ignore') # 변경 불가하면 작업 x pd.to_numeric(s2, errors='coerce') # 변경 불가하면 NaN으로 설정 pd.to_numeric(s2, errors='raise') # 변경 불가하면 error
# 시계열 데이터로 변환df['출생'] = df['출생'].astype('datetime64') df['사망'] = pd.to_datetime(df['사망'])
# 카테고리로 사용할 수 있는 컬럼은 카테고리형으로 변환df['grade'] = df['grade'].astype('category')
# 카테고리 이름 바꾸기df['grade'].cat.categories = ['A','B','C','D']
# 연, 월, 일, 분기 추출하기df['출생'][0].year # 단일값이면 dt 안붙여도 됨 df['출생'].dt.month df['출생'].dt.day df['분기']=df['출생'].dt.quarter
# 요일, 월이름 추출하기
컬럼.dt.strftime('%a') : 요약된 요일이름
컬럼.dt.strftime('%A') : 긴 요일이름
컬럼.dt.strftime('%w') : 숫자요일(0:일요일)
컬럼.dt.strgtime('%b') : 요약된 월이름
컬럼.dt.strftime('%B') : 긴 월이름
# 데이터프레임 연결하기(concat)df_rowconcat = pd.concat([df1,df2,df3]) # 컬럼 기준 연결 df_rowconcat = pd.concat([df1,df2,df3], join='inner') # 공통된 컬럼만 남기기 df_rowconcat = pd.concat([df1,df2,df3], ignore_index=True) # 인덱스 재지정 df_column_concat = pd.concat([df4,df5,df6], axis=1) # 인덱스 기준 연결
# 행을 열로 보내기(melt)df.melt() pd.melt(df)
# 고정할 컬럼 지정하여 meltdf.melt(id_vars=['name','kor'])
# 행으로 위치 변경
value_vars=[열이름리스트]
# 열을 행으로 보내기(pivot)df.pivot(index='name', columns='subject',values='score')
# 행과 열 바꾸기df.transpose()
# 그룹의 통계값 계산
df.groupby(그룹기준컬럼).통계적용컬럼.통계함수
count() : 누락값을 제외한 데이터 수
size() : 누락값을 포함한 데이터 수
mean() : 평균
sum() : 합계
std() : 표준편차
min() : 최소값
max() : 최대값
sum() : 전체 합
# 맷플롯립 pyplot 임포트import matplotlib.pyplot as plt
# 그래프 종류plt.scatter(x,y) plt.plot(x,y) plt.bar(x,y) plt.barh(y,x) plt.pie(value) plt.hist(value) plt.boxplot(value) plt.violinplot(value) plt.pcolor(dataframe) = sns.heatmap(df)
# 한글폰트 설정plt.rcParams['font.family'] = 'Malgun Gothic'
# 한글폰트 사용 시 -기호 깨지는 문제 해결plt.rcParams['axes.unicode_minus']=False
# 스타일링linestyle, ls # 선스타일 linewidth, lw # 선 굵기 marker # 마커종류 (* . , o v ^ < > 1 2 3 4 s p * h H + x D d) markersize, ms # 마커사이즈 markeredgecolor, mec # 마커 선 색깔 markeredgewidth, mew # 마커 선 굵기 markerfacecolor, mfc # 마커 내부 색깔 plt.plot(x,y,color='#A566FF', marker='D', ms='10', mec='b', mew='3', mfc='y', ls=':', lw=3) plt.plot(x,y,'ro-', mec='b', mfc='b', lw=3, ms=7) plt.show()
# 축의 범위plt.xlim(1,12) plt.ylim(0,100)
# 축의 틱plt.xticks(range(0,14,1)) plt.yticks(range(0,110,10))
# 틱 레이블 지정plt.xticks(range(0,14,1), labels=xticks_lable) plt.yticks(range(0,110,10), labels=yticks_label)
# 틱 스타일 지정plt.tick_params( ) direction # 틱 위치 (in, out, inout) length # 틱의 길이 width # 틱의 두께 color # 틱 색상 labelcolor # 틱 레이블 색상 colors # 틱과 틱 레이블 색상 pad # 틱과 레이블 사이의 거리 labelsize # 틱 레이블 사이즈 axis # 축 지정
# 범례 지정
plt.legend()
열 개수 : plt.legend(ncol=열개수)
폰트 사이즈 : plt.legend(fontsize=폰트사이즈)
테두리 : plt.legend(frameon=True/False)
음영 : plt.legend(shadow=True/False)
바탕색 : plt.legend(facecolor=색상)
테두리색 : plt.legend(edgecolor=색상)
위치 지정 : plt.legend(loc=(x,y))
# 서브플롯 그리기 1
plt.subplot(전체행개수,전체열개수,그래프순서)plt.subplot(221) plt.plot(df1['x'],df1['y'],'o')
# 서브플롯 그리기 2
1)figure 객체를 생성한다.fig = plt.figure(figsize=(8,6))
2) figure객체의 add_axes 메소드로 위치와 크기를 지정하여 axes 객체를 생성한다.ax1 = fig.add_axes([0,0.5,0.4,0.4]) ax2 = fig.add_axes([0.5,0.5,0.4,0.4])
3) axes에 그래프를 그린다.ax1.plot(df1['x'],df1['y'],'o') ax2.plot(df2['x'],df2['y'],'r^')
4) axes에 제목 추가.ax1.set_title('ax1') ax2.set_title('ax2')
# 서브플롯 그리기 3(축 공유)
1) figure 객체를 생성한다.fig = plt.figure(figsize=(9,6), facecolor='ivory')
2) 서브플롯을 그릴 axes 객체를 생성한다.ax1 = fig.add_subplot(2,2,1) ax2 = fig.add_subplot(2,2,2, sharex=ax1, sharey=ax1) ax3 = fig.add_subplot(2,2,3, sharex=ax1, sharey=ax1) ax4 = fig.add_subplot(2,2,4)
3) axes 객체에 그래프를 그린다.
4) 축 공유하기 : 어떤 axes의 축을 공유할 것인지 지정한다.ax1.plot(df1['x'],df1['y'],'o', label='ax1') ax2.plot(df2['x'],df2['y'],'^', label='ax2') ax3.plot(df3['x'],df3['y'],'*', label='ax3') ax4.plot(df4['x'],df4['y'],'+', label='ax4')
# 그래프를 이미지로 저장fig.savefig('img150.png', dpi=150)
# 그래프에서 패턴 넣기
bars[0].set_hatch('.') bars[1].set_hatch('/') bars[2].set_hatch('+') bars[3].set_hatch('-') bars[4].set_hatch('*') bars[5].set_hatch('|') bars[6].set_hatch('o')
# 산점도 스타일링s: size c: color cmap: color map plt.scatter(tips['total_bill'], tips['tip'], s=tips['size']*50, alpha=0.5, c=tips['color'])
# 히스토그램 설정bins= # 구간 개수 변경 cumulative=True # 누적값으로 변경 range=(min,max) # 범위 지정 density=True # 밀도 표시(도수/총 개수) orientation='horizontal' # 가로 히스토그램으로 표시 histtype='step' # 아웃라인만 표시
rwidth=막대폭(0~1) color=막대색 alpha=투명도
edgecolor(ec)=선색 linewidth(lw)=선두께 linestyle(ls)=선스타일
hatch=패턴
# 박스플롯plt.boxplot(series) showmeans = True # 평균표시 meanline = True # 평균 선으로 표시
# 바이올린플롯plt.violinplot(series) showmeans showmedians
# 파이차트plt.pie(value)
labels=label목록
labeldistance = 그래프로부터 레이블을 얼만큼 떨어뜨려서 표시할것인가 (default:1.1)
autopct = '%소수점자리수%%'
pctdistance = 중심에서의 거리
explode=돌출정도리스트
startangle = 시작각도
counterclock=True/False (반시계/시계)
wedgeprops = {'ec':테두리컬러, 'lw':선두께, 'ls':선스타일, 'width':반지름에대한비율}
# 그래프를 구성하는 공통속성 지정: rcParams
# 그래프 영역 채우기 - 행방향으로 채우기plt.fill_between(x[1:3], y[1:3], color='skyblue', alpha=0.5, hatch='/')
# 그래프 영역 채우기 - 열방향으로 채우기plt.fill_betweenx(y[:2], x[:2], alpha=0.3)
# 두 그래프 사이 영역 채우기plt.fill_between(x[1:3], y1[1:3], y2[1:3], color='darkorange')
# x,y좌표를 지정해 채우기plt.fill([2.75, 3.25, 3.0],[2.5, 2.5, 3.5], color='pink')
# 수평선 그리기plt.axhline(2,0,1, color='b', alpha=0.5, ls=':')
# 수직선 그리기plt.axvline(1, 0, 0.5, ls='--', color='r')
# 텍스트 추가하기plt.text(2.1, 3, '(x:2, y:3)', ha='left', va='bottom', fontsize=12, rotation=45 , bbox={'boxstyle':'round', 'fc':'skyblue', 'ec':'b', 'alpha':0.3})
# 화살표와 텍스트 추가하기plt.annotate('(x:1,y:2)', xy=(1,2), xytext=(1.5,2.5) , arrowprops={'width':1, 'headwidth':10, 'headlength':10, 'shrink':0.1, 'fc':'r'} , fontsize=12, color='r')
# 두가지 정보를 하나의 그래프에 그리기fig, ax = plt.subplots() ax.bar(age, height, color='skyblue', width=0.5, ec='lightgray', label='height') ax.plot(age, weight, color='darkred', marker='o', ls='-.', label='weight')
# 두가지 정보를 하나의 그래프에 그리기 - 이중축, 2중 y축fig, ax1 = plt.subplots() ax1.bar(age, height, color='skyblue', width=0.5, ec='lightgray', label='height') ax2 = ax1.twinx() ax2.plot(age, weight, color='darkred', marker='o', ls='-.', label='weight') plt.show()
# seaborn 그래프
# 막대그래프sns.barplot(data=tips, x='day', y='tip', ci=None, estimator=sum, hue='smoker' : ci는 추세선 , palette ={'Yes':'gray', 'No':'skyblue'}) : hue는 y를 그룹핑할 컬럼
# 산점도sns.scatterplot(data=tips, x='total_bill', y='tip', hue='day', size='size', alpha=0.5)
# 다중라인그래프sns.lineplot(data=flights, x='month', y='passengers', ci=None, hue='year')
# 카운트플롯: 데이터 갯수 카운트해 시각화sns.countplot(data=titanic, x='age') sns.countplot(data=titanic, x='who', hue='alive')
# 러그플롯: 빈도수 파악sns.rugplot(data=titanic,x='age', hue='alive')
# 히스토그램sns.displot(data=iris, x='petal_length', bins=20, rug=True, hue='species', kde=True)
# 상자수염, 바이올린, 스트립, 스웜# 상자수염그림 sns.boxplot(data=iris, x='species', y='petal_length') # 바이올린플롯 sns.violinplot(data=iris, x='species', y='petal_length') # 스트립플롯 sns.stripplot(data=iris, x='species', y='petal_length') # 스웜플롯 sns.swarmplot(data=iris, x='species', y='petal_length',s=2)
'웅진 STARTERS 부트캠프' 카테고리의 다른 글
6주 1일차 TIL 정리 (0) 2023.03.13 유데미 스타터스 취업 부트캠프 4기 - 데이터분석/시각화(태블로) 5주차 학습 일지 (0) 2023.03.12 5주 4일차 TIL 정리 (0) 2023.03.09 5주 2일차 TIL 정리 (0) 2023.03.07 5주 1일차 TIL 정리 (0) 2023.03.06