-
[08.06] Day5 - '🐼들'(Pandas)네이버 부스트캠프 AI Tech 2기 2021. 8. 6. 22:48728x90반응형
Pandas(Python 마지막 강의)
[수업 내용]
강사 : 최성철 교수님
데이터를 다루는 Numpy 이외에 또 다른 Pandas를 배운다.
: 구조화된 데이터의 처리를 지원하는 Python 라이브러리이다. Numpy와 통합이 되면서 강력한 "스프레드 시트"처리 기능을 제공한다. Indexing, Operation Function, Preprocessing Function 지원한다.
→ 데이터 처리 및 통계 분석을 위해 사용!
데이터 구조에서 사용하는 용어들
1. 데이터 Load
data_url = ".csv" df_data = pd.read_csv(data_url, sep=구분자, header=None) df_data.head(N) #상위 N개 , default는 5개 df_data.tail(N) #하위 N개 , default는 5개
2. Series
: 데이터프레임 중 하나의 Column에 해당하는 데이터 객체 모음(ndarray의 서브클래스이다.)
from pandas import Series obj = Series(데이터, index = 설정할 index) #데이터는 리스트도 가능하고, 딕셔너리도 가능하다.(딕셔너리는 key값이 시리즈 인덱스 컬럼이 된다. #-> index column이 생기고, 직접 지정할 수 있다. obj.values #값 리스트만 출력 obj.index #index 리스트만 출력 #추가. astype() 은 Data Type을 바꾸는 함수
3. DataFrame
: DataFrame같은 경우 값을 접근하기 위해서 index, colum으로 접근한다.
from pandas import DataFrame df = pd.DataFrame(데이터, colums = [colum들 이름 나열]) #series를 가져오는 2가지 방법 df.컬럼이름 df[컬럼이름] df.loc[인덱스 이름] #df.loc[:, [컬럼1, 컬럼2]] df.iloc[인덱스 순서(번호)] #df.iloc[:3] df.T #전치행렬로 변환 df.to_csv() #csv파일로 변환
4. Selection & Drop
df[컬럼이름].head(10) #10개 데이터 추출 #Tip. Transpose로 찍으면 더 편하게 볼 수 있다. #어떤 식으로 데이터를 뽑을건가 -> 편한 방식을 사용 1. df[[컬럼이름1, 컬럼이름2]][:10] 2. df.loc[[RoW],[Column]] 3. df.iloc[Column Number, Row Number] #inplace는 중요. #데이터 프레임 자체는 유지하려고 하며, 값을 안바꾸는 것을 권장한다. df.reset_index(inplace=True) #inplace는 자기 자신이 변할것인가를 지정한다. df.drop(컬럼이름, axix = 1(열기준 삭제))
5. Series Operation
Series 데이터는 #index를 기준으로 연산한다.
DataFrame 데이터는 #index, column을 모두 고려한다.
#Tip. Operation에서 fill_value = 값 을 지정해서 NaN에 값을 할당할 수 있다.6. Lambda, Map, Apply
#Lambda는 기본과 문법은 동일하다. A = Series(np.arrange(10)) A.map(lambda x : x ** 2) -> Value들에 람다 함수를 적용해서 출력 #replace를 사용해서 값을 바꾼다. df.'Column이름'.replace([바뀌기 전값들], [바꿀 값들], inplace= True) #각각에 매칭에 맞춰서 값들을 바꿔준다. #apply map과 다르게, series 전체에 해당하는 함수를 적용한다. 입력 값이 series 데이터로 입력 받아 핸들링 가능하다.
7. Pandas Built in Function
df.describe() # 통계치를 보여준다. unique() #유일한 값들을 list로 반환 df.isnull() #비어있는 값들을 보여준다. 뒤에 sum을 붙여서 혹시 null이아닌 값들이 있나 판별 가능하다. df.'Column이름1'.corr(df.'Column이름2') #두개의 상관계수를 구해준다. df.corr() #모든 컬럼들간에 상관계수를 구해준다. df.'Column이름1'.cov(df.'Column이름2') #두개의 공분산을 구해준다. df.sort_values() #컬럼들을 지정해서 정렬해서 보여준다.
8. Groupby 1
: SQL groupby와 같다. 기존 데이터에서 인덱스가 같은 것들을 묶어준다.(Split) 그다음 연산을 적용(Apply)해서 다시 합쳐준다.(Combine)
df.reset_index() #index들을 풀어준다. df.swaplevel() #index를 섞어준다. df.sort_index(level='levelnumber') #index값으로 정렬해서 보여준다. df.sort_values() #값들을 정렬해서 보여준다. -> 기본적으로 Series데이터들이기 때문에 Operation연산도 가능하다.
9. Groupby 2
: Groupby에 의해 Split된 상태를 추출 가능하다.
데이터를 그룹된 상태로 만들고 시작한다. GROUP = df.groupby('그루핑 시킬 기준들') 1. Aggregation : 요약된 통계정보를 추출해 준다. GROUP.agg([sum, mean, max]) GROUP.agg(sum) GROUP['컬럼이름'].agg(sum) GROUP.describe().T #통계치 2. Transformation : 해당 정보를 변환해준다.(각각 값들을 적용하기 위해서) GROUP.transform(lambda x : (x ** 2)) #그룹된 상태에서 모든 값을 지정해서 처리한다.기준은 그룹 3. Filtration : 필터링 기능을 제공한다.(특정 조건으로 데이터를 검색할 때 사용한다.) GROUP.filter(lambda x : len(x) >= 3) #group에서 데이터의 길이가 3이상인 것들만 출력한다. GROUP.filter(lambda x: x["Points"].mean() > 50) #각 그룹에서 포인트를 기준으로 평균을 냈을때 50보다 큰것들을 필터링해서 출력해준다.
10. Pivot Table & Crosstab
Pivot Table - 우리가 excel에서 보던 것과 동일. Index 축은 Groupby와 동일하다. Column에 labeling값을 추가해 Aggregation을 진행한다. → DtatFrame을 다양한 파라미터를 적용해서 피벗테이블로 만들어준다.
Crosstab - 특히 두 컬럼간에 교차 빈도, 비율, 덧셈 등을 구할 때 사용한다.
11. Merge & Concat
Merge - 두개의 데이터를 하나로 합친다.(데이터 기준이 필요하다)
pd.merge(df1, df2, on = '공통 컬럼 이름') # 같은 값을 기준으로 합쳐진다. pd.merge(df1, df2, left_on = '컬럼이름' ,right_on= '컬럼이름') #SQL에서의 Left Join과 Right Join 모두 가능하다. pd.merge(df1, df2, on='컬럼이름', how='right, left 조인 조건') #default 는 inner 조인이다. pd.merge(df1, df2, right_index = True, left_index= True) #index를 기준으로 붙일 수도 있다.
Concat - 기본적으로 리스트 형태로 값을 붙인다.
df1.appeend(df2) #같은 컬럼을 가지고 있다고 했을때, 아래로 붙인다. pd.concat([df1, df2]) #같은 컬럼을 가지고 있다고 했을때, 아래로 붙인다. pd.concat([df1, df2], axis = 1) #옆으로 붙는다.
12. Persistence
: Data Loading 시 db conncection 기능을 제공한다.
import sqlite3 conn = sqlite3.connect("./data/flights.db") cur = conn.cursor() cur.execute("Select *") result = cur.fetchall() result df = pd.read_sql_query("쿼리문", conn) #쿼리문을 던져서 DB 와 con handler를 통해서 접근이 가능하다.
[회고]
- 판다는 귀엽다.😍
- Pandas는 Numpy와 조금 색이 다르다고 느꼈다. DataFrame을 주로 다루기 때문에 컬럼과 로우에 대한 이해가 명확해야 접근할 수 있겠다 생각이들었다.
- 내가 모르는 DB connection이라던가 SQL에서 사용하는 다양한 쿼리까지 지원하고 Pivot 테이블까지 만들 수 있다는 것은 몰랐는데 강의를 통해 다시 알게 되었다.🐼
반응형'네이버 부스트캠프 AI Tech 2기' 카테고리의 다른 글
[08.09 Special 강의] Introduction to Visualization 🤓 (0) 2021.08.13 [08.09] Day6 - '🧑🏫 DeepLearning Overview + MLP' (0) 2021.08.13 [08.05] Day4 - 'RNN 맛보기' 🍽 (0) 2021.08.06 [08.04] Day3 - '확통공부 다시..😵💫 + Numpy 기능들 + CNN' (0) 2021.08.06 [08.03] Day2 - 'Python과 딥러닝 기초'😮 (0) 2021.08.06