본문 바로가기
프로그래머스/데이터분석 데브코스

프로그래머스 데이터분석 데브코스 7-1

by 포잉띠 2024. 3. 25.

길고 긴 SQL의 여정이 일부 마무리되고 Python월드의 푸바오 pandas를 배우기 시작했다.

여러가지 기본 함수들과 Dataframe의 기초를 배웠다.

 

익숙치 않은, 처음보는 함수들도 있었지만 이것들은 일단 계속 써가면서 익히는게 가장 쉽고 빠르기에 따로 정리는 하지 않겠다.

 

매우 중요하다고 느낀 부분은 얕은 복사와 깊은 복사 부분이다.

왜냐하면 지금까지는 커봤자 10mb, 20mb 정도의 csv 파일을 pandas로 조작해보았는데 엄청 큰 데이터셋에서 의도치 않게 원본 데이터셋을 바꿔버리면 확인, 수정에 시간이 매우 걸릴 것이라는 생각이 들었다.

그리고 pandas로 데이터셋을 조작하며 단 한번도 얕은, 깊은 복사에 대해 생각해본적이 없었기 때문이다.

 

df_train_to_rs_tp = df_train_to_rs["Transported"]
df_train_to_rs = df_train_to_rs.drop(["Transported"], axis=1)

df_train_rs = df_train_to_rs.loc[:,["RoomService", "FoodCourt", "ShoppingMall", "Spa", "VRDeck"]]

df_train_tp = df_train["Transported"]

df_train_a_v = df_train.loc[:,["Age", "VIP"]]
df_year_cnt["year_cnt_sum"] = df_pr.cnt.resample('1Y').sum()

그간 작성했던 코드들의 일부인데 주로 얕은복사를 사용했지만, 새로운 변수에 할당하며 깊은 복사 흉내를 내며 사용했다.

다행히 의도치 않게 직접 변경하는 부분과 단순히 Dataframe의 분할을 위해 조회한 부분을 잘 나눠서 사용해 온 것 같다.

 

머신러닝을 돌리기 위해 사용하거나, 크롤링 자체를 연속적으로 하거나, 정렬이 되어있는 필요성이 적은 데이터셋을 만져와서 Dataframe을 정렬하는건 잊고있었다.

def solution(strings, n):
    strings.sort()
    return sorted(strings, key =  lambda x : x[n])

 

이건 프로그래머스 코딩테스트 연습 1단계에 문자열 내 마음대로 정렬하기 문제를 풀었을때 제출한 코드이다.

list와 dict형으로 받아 sort(), sorted()를 사용했다.

 

하지만 pandas에서는

df = pd.DataFrame[1,2,3]

sort_values(df , assending= , inplace= )
# assending / 내림차순, 오름차순
# inplace / 원본 변형 할지 안할지

sort_index()
# values는 Dataframe 열 값, 특정 값 기준으로 정렬할 때 사용
# index 는 말그대로 index 순으로 정렬할 때 사용

 

느낌이다.

 

pandas에서도 pivot table을 사용할 수 있다고 한다.

 

확실히 먹던맛, 아는맛이 나오니까 어디가 부족했는지 바로바로 느껴지는게 많아서 더 재밌고 의욕도 나는 것 같다.

SQL도 어느 특이점만 넘으면 이런 느낌을 받을 수 있을텐데 SQL은 아직도 갈길이 멀다.

아무튼 간만에 정말 즐거웠다.