-
파이썬 - 데이터 전처리/시각화파이썬 정리/데이터 전처리, 시각화 툴 2024. 5. 9. 12:23
전처리 및 시각화 - 설득 : 데이터 전달의 목적성과 효과성
정의 : 무엇을 위해 ~이런 형태의 데이터가 필요하다
이유 : 복잡 다양 데이터를 다루다가 전처리 로직에 매몰되어 큰 그림을 잊는 경우 발생
결론 : 정의 활용 - 올바른 의사결정을 위한 사전 설계 습관
---
내가 원하는 데이터를 보기 위한 데이터 전처리
정형 데이터 속 불규칙한 데이터
ex) 성별 : 남 or 여 +남성 + 여자 +여성 등 의 다양한 경우의 수
핸드폰 번호 '-'붙였다가 뗏다가 띄워쓰거나 다양.
=>데이터 전달의 목적성에 따른 처리, 효과성을 가짐
excel vs pandas
판다스의 장점
1. 자동화와 프로그래밍 기능
2. 대용량 데이터 처리
3. 복잡한 데이터 처리 분석
4. 확장성과 유연성
5. 버젼 관리
Index
더보기df = pd.DataFrame({ 'A' : [1,2,3] 'B' : ['a','b','c'] index : ['idx1','idx2','idx3'] }) # 인덱스 이름 지정 가능
df.loc['idx2'] #A 2 #B b #Name :idx2, dtype : object
df.sort_index() #인덱스 순서 정렬
df.set_index('A') #column A를 index로 사용 # B #A #1 a #2 b #3 c
df.index = ['1','2','3'] # A B #1 1 a #2 2 b #3 3 c
df.reset_index() # A B #0 1 a #1 2 b #2 3 c df.reset_index(drop=True) # 차이?
Column
더보기data = { 'name' : ['Alice', 'Bob', 'Charlie'] 'age' : [25,30,35] 'gender' : ['female','male','male'] } df = pd.DataFrame(data) df['name'] / df['age'] #0 Alice / 25 #1 Bob / 30 #2 Charlie / 35
df.columns = ['이름', '나이', '성별']
df = df.rename(columns = ('이름': 'name') # name 나이 성별 #0 Alice 25 female #1 Bob 30 male #2 Charlie 35 male
df['스포츠'] = '축구' # name 나이 성별 스포츠 #0 Alice 25 female 축구 #1 Bob 30 male 축구 #2 Charlie 35 male 축구
del df['스포츠'] # name 나이 성별 #0 Alice 25 female #1 Bob 30 male #2 Charlie 35 male
iloc / loc
더보기iloc
df = pd.DataFrame({ 'A' : [1,2,3,4,5] 'B' : [10,20,30,40,50] 'C' : [100,200,300,400,500] }) df # A B C #0 1 10 100 #1 2 20 200 #2 3 30 300 #3 4 40 400 #4 5 50 500
df.iloc[0:2] # A B C #0 1 10 100 #1 2 20 200
df.iloc[0,0:2] #A 1 #B 10
loc
df = pd.DataFrame({ 'A' : [1,2,3,4,5] 'B' : [10,20,30,40,50] 'C' : [100,200,300,400,500] 'index' : ['a','b','c','d','e'] }) df # A B C #a 1 10 100 #b 2 20 200 #c 3 30 300 #d 4 40 400 #e 5 50 500
df.iloc[1:3,0] #b 2 #c 3 df.loc[b:d,'A':'C'] # A B C #b 2 20 200 #c 3 30 300 #d 4 40 400
iloc 1:3 => 1~2
loc b:d => b~d
Slice
더보기df.loc[:,'A'] df['A'] #a 1 #b 2 #c 3 #d 4 #e 5
df['A','B'] #불가 df.loc['a':'b'['B','A']] #가능 # B A #a 10 1 #b 20 2
df.loc['a':'b', 'B':'C'] # B C #a 10 100 #b 20 200
boolean indexing
더보기import seaborn as sns data = sns.load_dataset('tips') data.to_csv("tips_data.csv", index=False) df = pd.read_csv("tips_data.csv") #index_col = 0 df[(df['sex']=='Male') & (df['smoker']=='Yes')] # 참인경우 추출 # & = and # | = or
df.loc[df['size']>3, 'tips':'smoker']
df[df['size'].isin([1,2])] #특정 컬럼의 특정 값을 가질떄 추출
활용
df['tip'] <2 #0 True #.. #243 False
condition = df['tip] <2 df[condition] #데이터 프레임 내의 tip<2값
변수 할당하는 것이 일반적이고 보기 편하다고 함.
cond1 = df['size'] >= 3 cond2 = df['tip'] < 2 df[cond1 & cond2] #조건 and로 맞는 값만.
df['created_at'] = '2024-01-01' df #=> column 'created_at' 및 '2024-01-01'나열 됨 df.info() # created_at : object(Dtype)
df['created_at'] = pd.datetime(df['created_at']) df.info() #=> created_at : datetime64[ns]
데이터 병합
더보기concat(to link together)
pd.concat([df1,df2,df3, axis = 0]) # 세로로 union처럼 // 인덱스는 유지(0~3,0~3...) // 자동으로 열 맞춤 (NaN) # .reset_index(drop=True) - 인덱스 갱신 pd.concat([df1,df2], axis=1]) # 가로로 join처럼 // left outer 와 유사하게 자리가 비면 자동으로 행 맞춤(NaN)
merge
pd.merge(df1, df2, on='key', how='inner')#'outer' // 교집합, 합집합 # 진짜 join이 나타났다! # how = 'left' # 기본 inner
groupby
df.groupby('Category') # <pandas.coe.groupby.generic.DataFrameGroupBy object at ~~~> 오브젝트 생성 !=generator ? df.groupby('Category').mean() # 해당 카테고리가 index 로 취급, 연산을 시행함. .first() # 기록 내 첫번째 값 .agg(list) # aggregation : list 결과값 묶음?
활용
df[['day', 'total_bill', 'tip', 'size']].groupby('day').mean() # 숫자만 존재하는 column을 평균(mean)낼 수 있음
df[['sex','day', 'total_bill', 'tip', 'size']].groupby('sex','day')/ .agg({'total_bill' : 'max', 'tip' : 'mean', 'size' : 'sum'})
Pivot Table
#df <>'date','category','value' pivot = df.pivot_table(index='Date', columns='Category',values='Values', aggfunc='sum')
데이터 정렬하기
더보기df.sort_values(by=['Age', 'Score'], ascending=[True, False])
1,2 순으로 각각 asc desc 적용한 코드
Matplotlib - 데이터 시각화
왜?
데이터 전달 방식으로
의사결정을 잘 할 수 있도록 도와줌 // 설득력
더보기import matplotlib.pyplot as plt x = [1,2,3,4,5] y = [2,4,6,8,10] plt.plot(x,y) plt.xlabel('X-axis') plt.ylabel('Y-axis') plt.title('example') plt.show
스타일 설정
df.plot(x='A', y='B', color='green', linestyle='--', marker='o') plt.show()
범례 추가
df.plot(x='A', y='B', color='red', linestyle='--', marker='o', label = 'Data Serie' ) # ax = df.plot(x='A', y='B', color='red', linestyle='--', marker='o', label = 'Data Serie' ) # ax.legned(['Data Series']) plot.show()
축 제목 입력하기
#fig, ax = plt.subplots(figsize=(8,6)) ax = df.plot(x='A', y='B', color='red', linestyle='--', marker='o', label = 'Data Serie' , ax=ax) #ax.legend(['Data Series']) #ax.set_xlabel('X-axis') #ax.set_ylabel('Y-axis') #ax.set_title('TItle') #ax.text(3,3, 'Some Text', fontsize=12) #ax.text(~~~) plt.show() #이름 삽입 가능 #좌표 3,3 // 중간점(존재) 우측에 text 작성됨
plt.figure(figsize=(18,6)) x = [2,3,4,5,6] y = [2,4,6,8,10] plt.plot(x,y) plt.show()
그래프
*100 pixel 단위로 크기 설정 됨.
'파이썬 정리 > 데이터 전처리, 시각화 툴' 카테고리의 다른 글
파이썬 - 데이터 전처리/시각화 2 (0) 2024.05.09