ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [08.06] Day5 - '🐼들'(Pandas)
    네이버 부스트캠프 AI Tech 2기 2021. 8. 6. 22:48
    728x90
    반응형

    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를 통해서 접근이 가능하다.

    [회고]

    1. 판다는 귀엽다.😍
    2. Pandas는 Numpy와 조금 색이 다르다고 느꼈다. DataFrame을 주로 다루기 때문에 컬럼과 로우에 대한 이해가 명확해야 접근할 수 있겠다 생각이들었다.
    3. 내가 모르는 DB connection이라던가 SQL에서 사용하는 다양한 쿼리까지 지원하고 Pivot 테이블까지 만들 수 있다는 것은 몰랐는데 강의를 통해 다시 알게 되었다.🐼
    반응형
Designed by Tistory.