[08.06] Day5 - '🐼들'(Pandas)
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 테이블까지 만들 수 있다는 것은 몰랐는데 강의를 통해 다시 알게 되었다.🐼