본문 바로가기

프로그래머스59

프로그래머스 데이터분석 데브코스 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.
프로그래머스 데이터분석 데브코스 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.
프로그래머스 데이터분석 데브코스 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.
SQL 나이 정보가 없는 회원 수 구하기 WHERE 절로 필터링된 레코드를 세기 위해 COUNT(*)을 사용했다. AGE가 NULL인 레코드를 필터링 하기 위해 AGE IN NULL 사용했다. SELECT COUNT(*) AS USERS from USER_INFO WHERE 1=1 AND AGE IS NULL 2024. 3. 7.
SQL DATETIME에서 DATE로 형 변환 ANIMAL_INS 테이블에 등록된 모든 레코드에 대해, 각 동물의 아이디와 이름, 들어온 날짜를 조회하는 SQL문을 작성해주세요. 이때 결과는 아이디 순으로 조회해야 합니다. ANUMAL_ID, NAME, 날짜 로 출력하기 위해 SELECT문에서 조작했다. %Y-%m-%d , Y를 제외하고 소문자로 사용한 이유는 %Y-%M-%D 를 사용하게 되면 2024-march-7th 방식으로 출력하기에 소문자를 사용했다. 정렬은 문제에서 요구하지 않았기에 진행하지 않았다. 정답코드 SELECT ANIMAL_ID, NAME, DATE_FORMAT(DATETIME, ('%Y-%m-%d')) AS '날짜' FROM ANIMAL_INS 2024. 3. 7.
sql 가격이 제일 비싼 식품의 정보 출력하기 FOOD_PRODUCT 테이블에서 가격이 제일 비싼 식품의 식품 ID, 식품 이름, 식품 코드, 식품분류, 식품 가격을 조회하는 SQL문을 작성해주세요. 출력의 컬럼이 fOOD_PRODUCT 테이블의 모든 컬럼이기에 SELECT * 사용했다. 내림차순으로 정렬 후 1개 출력하기 위해 ORDER BY { } DESC LIMIT 1 사용했다. SELECT * FROM FOOD_PRODUCT ORDER BY PRICE DESC LIMIT 1 2024. 3. 7.