본문 바로가기

전체 글136

프로그래머스 데이터분석 데브코스 6-5 4일차 숙제 리뷰와 SQL의 고급 문법들을 배웠다. Transaction Atomic하게 실행되어야 하는 SQL들을 묶어서 하나의 작업처럼 처리하는 방법 DDL이나 DML중 레코드를 수정/ 추가/ 삭제 한 것에만 의미가 있음 Select에는 트랙잭션을 사용할 이유가 없음 Begin과 End혹은 Begin, Commit 사이에 해당 SQL들을 사용 Transaction 과정에서 오류가 났다면 Rollback 가능 정리는 가볍게 이정도이다. 이어 Python 에서 Transaction을 관리하는 방법도 배웠다. Transaction 자체가 생소한 개념이지만 이전에 Transaction임을 인지하지 못하고 그냥 이렇게 해야 실행이 되니까 썼던 경험이 있었다. 이전에 Discord 챗봇을 만들고 서비스 할 때 .. 2024. 3. 22.
프로그래머스 데이터분석 데브코스 6-3 마참내 너무 좋은 환경에서 쿼리를 짤 수 있게 되었다. 여러가지 실습을 진행하였는데 다시한번 반드시 기억해야 할 것을 알려주셨다. 가볍게 정리해 보자면 현업에서는 깨끗한 데이터셋이 존재하지 않는다. 말 그대로 이런 실습 환경, 캐글 데이터셋처럼 어느정도 정제된 데이터셋이 아닐 수 밖에 없다. 1. 항상 데이터셋을 의심할 것. / 어딘가에 결측치가 있을 가능성, 이상치가 가득할 가능성, 잘못 수집되었을 가능성 등등 2. isnull과 같은 함수로 확인해 보는것이 아닌 실제 레코드의 일부라도 한번 확인해 보는것이 큰 도움이 된다. 항상 데이터 품질을 의심하는 버릇이 필요하다. 1. 중복체크 2. 최근 데이터 존재 여부(freshness) 3. primary key uniqueness 지켜지는지 확인 4. 결.. 2024. 3. 22.
프로그래머스 데이터분석 데브코스 6-2 기본적인 SQL 쿼리들을 복습하고 jupyter notebook 에서 aws redshift 접속하는 방법을 배웠다. 강의에선 colab을 사용했지만 vscode의 ui를 포기할수 없기에 로컬 환경에서도 시도해 보았다. https://arin-nya.tistory.com/37 jupyter notebook에서 sql 쓰기 %sql postgresql://ID:Password@DBadress​ %sql postgresql://ID:Password@DBaddress %load_ext sql pip install ipython-sql pip install pyscopg2-binary PostgreSQL db를 사용하기 위해 pyscogp2 라이브러리도 함께 설치했다. #sql server pip instal .. 2024. 3. 19.
jupyter notebook에서 sql 쓰기 %load_ext sql pip install ipython-sql pip install pyscopg2-binary PostgreSQL db를 사용하기 위해 pyscogp2 라이브러리도 함께 설치했다. #sql server pip install pyodbc #MySQL pip install PyMySQL 혹여나 주피터에서 접속하고자 하는 DB가 mysql이나 sql server 라면 위의 패키지를 설치하면 된다. pyscopg2 같은 경우에 설치하는 환경에 PostgreSQL 이 설치되어있지 않으면 설치 과정에 오류가 난다. 그래서 라이브러리, 함수만 담겨있는 binary 패키지를 설치하면 대부분 정상적으로 작동된다. %load_ext sql 으로 주피터에서 sql 엔진을 돌려주고 %sql postgr.. 2024. 3. 19.
프로그래머스 데이터분석 데브코스 6-1 클라우드 환경에서 돌아가는 데이터베이스, 웨어하우스의 종류를 배웠다. 기본적인 스키마(일반적으로 사용되는)를 배웠다. Star schema, denomalize schema가 있었는데 big query의 public ware house를 보면 각 테이블간 join을 사용할 수 있는 필드들이 있었다. 한개의 star schema가 아닌 users, orders, events 3개의 스키마에서 파생된 스키마들이 있는 형태였다. csv파일이지만 이렇게 단일 테이블, DB로 이루어진걸 denomalize schema로 부르는 것 같다. 위와 같은 구조에서 특정 값을 수정, 조회 하려면 일일이 접근해서 수정해야 하지만 star schema에서는 쿼리 작성이 조금 힘들뿐 작성만 잘하면 원하는 레코드를 뽑기가 비교적.. 2024. 3. 18.
MySQL load data workbench의 import wizard 를 사용하면 너무 오래 걸리는 문제때문인지 row를 날려먹는다. 콘솔에서 load data를 사용하는것이 가장 빠르다고 하여 시도해 본 것들을 정리해 보겠다. 1. 환경변수 등록. 콘솔에서 mysql 명령어가 작동하지 않았다. installer로 설치하는 과정에 path관련 항목이 있길래 당연히 나는 환경변수 편집이 되어 있을 줄 알았다. windows 답게 안되어있는걸 보니 머리에 열이 조금 찼다. 이렇게 MySQL Sever bin 폴더를 환경변수 path에 넣어주니 mysql 명령어가 cmd에서 잘 작동했다. 2. workbench connection 수정 콘솔에서 아무리 local infile =1 을 줘도 workbench에는 적용이 안되는걸 보니 더.. 2024. 3. 9.
프로그래머스 데이터분석 데브코스 4-5 sql 지식을 배우기 보단 sql을 활용하여 분석하는 방법을 배웠다. 가볍게 정리하면 아래와 같다. 결측치 확인 중복 확인 중복 제거를 위해 중복 값들의 데이터셋 이해, 행끼리 구분이 불가능한 데이터셋 존재 // 이 경우 중복이 발생함. 데이터셋 간 중복 여부가 분석 결과에 영향을 주는지 판단 해야함 쿼리 사용 방법에 따라 굳이 python 사용하지 않아도 데이터 분석 가능 쿼리 날려서 eda 한 후 python으로 활용 분석 기준을 세우고, 쿼리로 확인해 보고, python 활용해서 검증 분석 결과가 상식과 맞지 않다면 데이터 품질과 알고있는 상식을 다시한번 체크 sql에서도 상관계수 구할 수 있지만 엑셀, python 에서 구하는게 훨씬 쉬움 엑셀 correl, python pd.corr(df1), .. 2024. 3. 8.
SQL 중성화 여부 파악하기 O, X를 판별하고 출력하기 위해 IF문 사용했다. Neutered, Spayed로 시작하는 SEX_UPON_INTAKE 필드의 레코드를 찾기 위해 LIKE 사용했다. CASE WHEN 을 사용해도 잘 작동하지만 가독성 때문에, TRUE, FALSE로 나눠지는 문제라서 IF로 작성했다. 정답코드 SELECT ANIMAL_ID, NAME, IF( SEX_UPON_INTAKE LIKE 'Neutered%' OR SEX_UPON_INTAKE LIKE 'Spayed%' ,'O','X') AS '중성화' FROM ANIMAL_INS 원래 필드를 수정해서 조회하려고 엄청나게 돌아가다가 단순히 O, X 로 출력만 하면 되는걸 깨닫고 O, X 넣었더니 바로 정답처리가 되었다. REPLACE, ALTER, UPDATE에.. 2024. 3. 7.
SQL 카테고리 별 상품 개수 구하기 SUBSTRING함수로 문자열 슬라이싱 했다. GROUP BY로 중복을 찾고 COUNT(*)로 해당 레코드들의 갯수를 조회했다. 정답코드 SELECT SUBSTRING(PRODUCT_CODE,1,2) AS CATEGORY, COUNT(*) AS PRODUCTS FROM PRODUCT GROUP BY CATEGORY 2024. 3. 7.