해결된 질문
작성
·
2.3K
1
jupyter notebook 상에서 EDA와 비슷한 작업을 하는 경우, pandas와 sql 둘 중에 어떤 것을 사용해서 데이터를 처리하고 분석하는 것이 더 효율적인지 궁금합니다.
제 개인적인 생각으로는, 실제 업무에서는 방대한 양의 데이터가 들어있는 데이터베이스에 접근하여 뽑아내야하기 때문에 sql이 더 효율적일 것이라 생각됩니다. kaggle 같이 dataset 사이즈가 한번에 로딩이 가능할 경우에는 sql과 pandas 둘 다 써도 될 것 같다고 생각이 듭니다.
어떤 상황에서 sql과 pandas를 조화롭게 쓸 수 있을까요?
또 어떤 상황에서는 sql 혹은 pandas를 쓰는게 더 좋을까요?
좋은 강의 감사드립니다 :)
답변 1
6
안녕하십니까,
일단 Pandas는 메모리를 넘는 데이터는 담을 수 없다는 제약사항은 제외하고,
SQL 이 편한 사항을 개인적으로 말씀 드리면
1. 많은 테이블을 조인할 경우
- 판다스 Join이 직관적이진 않습니다.
2. 여러 컬럼과 다양한 Aggregation을 적용한 Group by 를 많이 수행할 경우
- 판다스 Group by 가 편하진 않습니다.
3. 복잡한 where 조건으로 filtering 해야 할 경우
- 판다스의 boolean indexing이 있지만, 거의 지저분한(?) 수준까지 탈탈 털어낼수 있는 필터링은 SQL 이 더 편함.
4. 집합의 레벨을 변경하기가 상대적으로 더 수월.
- Groupby나 Groupby case when, distinct가 더 쉽습니다.
5. 복잡한 데이터 가공일 경우 SQL이 더 직관적으로 코드 작성이 가능합니다.
- 판다스의 경우 API를 나열하면서 여러 로직을 사용하면서 가공해야 하므로 절차적인 프로그래밍과 유사하게 코드를 이해해야 합니다 반면에 SQL은 직관적으로 하나의 SQL상에서 데이터 가공을 수행할 수 있으므로 좀 더 이해가 쉽습니다( 해당 부분은 개인적인 성향에 따라 의견이 다를 수 있습니다)
그리고 판다스가 편한 사항을 말씀 드리면
1. 특정 컬럼값을 가공해서 새로운 컬럼값으로 만들거나, 기존 컬럼값을 새롭게 update하거나, 기존 컬럼값의 타입을 변경하는 경우가 빈번하게 많을 경우
- SQL은 create table이나 update를 컬럼별로 변경/추가 사항이 있을 때만 빈번하게 수행하기는 어렵습니다.
2. 분산, 표준편차, z-score 변환 등 다양한 통계 기반의 가공이 필요할 경우
- 판다스는 자체적으로 가지고 있는 통계 함수외에도 기존 파이썬의 과학/통계용 scify나 numpy 그리고 사이킷런의 함수와도 잘 호환되기 때문에 SQL Analytic으로도 커버할 수 없는 다양한 통계 기반의 가공이 가능함
3. 머신러닝/시각화 패키지와 바로 호환됨.
사이킷런이나 시본에서 바로 사용 가능함.
4. 빠릅니다.
- 덕분에 여러가지 데이터 가공을 다양하게 수행해 볼 수 있습니다.
5. 프로그램적으로 For loop 를 돌려서 컬럼별 데이터를 확인하거나 가공할 수 있습니다(개인 성향에 따라 이부분의 의견이 갈릴수도 있습니다.)
절차적인 스타일링 프로그램으로 데이터 가공 처리를 원하는 분에게는 적합 할 수 있습니다.
감사합니다.