SQL 헷갈리는 용어 정리
1. 행
row
tuple
record
2. 열
column
attribute
field
3. 한 칸
cell
참고자료
https://nextmoveon.tistory.com/280
[SQL] 레코드(Recode) vs 튜플(Tuple) vs 행(Row) 차이
차이는 없다. 모두 같은 뜻이지만, 어디에서 부르느냐에 따라 차이가 난다. 파일 시스템 데이터베이스 모델링 관계형 데이터베이스 파일(File) 엔터티(Entity) 테이블(Table) 레코드(Recode) 튜플(Tuple)
nextmoveon.tistory.com
엑셀보다 쉽고 빠른 SQL 3주 차
1. 데이터 수정할 때 쓰는 함수: REPLACE, SUBSTRING, CONCAT
1) REPLACE
- REPLACE(column_name, 현재 값, 바꿀 값)
- 예시
SELECT REPLACE(column_name, a, c)
FROM table_name;
2) SUBSTR
- SUBSTR(column_name, 시작하는 곳, 글자 개수)
- 예시
SELECT SUBSTR(column_name, 4, 3)
FROM table_name;
3) CONCAT
- CONCAT(붙이고 싶은 값1, 붙이고 싶은 값2, · · ·)
- 붙일 수 있는 것: 컬럼, 한글, 영어, 숫자, 기타 특수문자
- 따옴표(' ') 써야 하는 경우: 한글, 영어 등 문자열, 특수문자
- 예시
SELECT CONCAT('[', SUBSTR(column_name, 3, 2), 'hello!', ']')
FROM table_name;
2. 조건에 따라 포맷 다르게 변경하기: IF, CASE
1) IF
- IF(condition, 조건 충족할 때의 값, 조건 미충족할 때의 값)
- 예시
SELECT IF(column_name = 'Korean', '한식', '기타')
FROM table_name;
2) CASE
- CASE WHEN conditon 1 THEN result 1
WHEN condition 2 THEN result 2
ELSE result 3
END
- 조건을 한 번에 여러 개 지정할 때
- 예시
SELECT CASE WHEN condition1 THEN result1
WHEN condition2 THEN result2 END
FROM table_name;
SQL 퀘스트 3
1. 10번
답안: SELECT * FROM orders WHERE order_date > '2023-11-02' AND amount >= 2;
- 헷갈린 점: column_name이 들어갈 부분에 date 함수를 써야 하나 잠시 고민했다.
- 개선점: WHERE column_name 부등호 'yyyy-mm-dd' 형식 알아두기
아티클 스터디: 데이터 리터러시 & 잘못된 데이터 해석
아티클
https://yozm.wishket.com/magazine/detail/1632/
https://yozm.wishket.com/magazine/detail/1816/
데이터 리터러시
[주제]
데이터 리터러시란?
데이터/실험 기반 사고방식
분석 흐름대로 데이터를 탐색할 수 있는 환경
이 과정을 도와주는 분석가
[아티클 요약]
데이터 리터러시란 데이터를 활용해 문제를 해결할 수 있는 능력이다. 한 예로 화해의 데이터 분석가는 문제 정의, 솔루션, 측정 지표를 기준으로 어떤 데이터가 필요한지 추려냈다. 데이터를 활용해 문제를 잘 정의하고 해결하려면 우선 데이터/실험 기반 사고방식이 필요하다. 또한 분석 흐름대로 데이터 탐색할 환경이 갖추어져야 하고, 이를 수행할 분석가가 필요하다.
화해 데이터팀은 데이터/ 실험 기반의 사고방식을 구축하기 위해 모든 업무를 데이터/ 실험 기반으로 기록하고자 했다. 해결하려는 문제, 관련 OKR, 측정 지표, 가설 검증 기준, 검증 후 변화될 액션, 결과, 학습한 점이라는 가이드라인을 제시했다. 위 가이드에 따라 각 조직 구성원이 업무를 기록했다. 이후 업무를 ‘문제정의-솔루션-측정 지표’에 따라 정의할 수 있었다.
이후 인풋 지표와 아웃풋 지표 간 관계를 표현한 관계도를 사내 구성원에게 공유했다. 전체적인 관계를 구성원이 이해하고, 중요한 관계에 집중할 수 있도록 하기 위해서이다. 대시보드를 만들어 지표의 현재 수준을 확인했다. 환경이 구축된 후 데이터 분석가는 협업팀이 실행에 옮길 구체적인 방안까지 제시했다.
화해에서는 데이터 플랫폼을 구축해 데이터 친화적인 구조를 만들었다. 모든 원천 데이터가 적재된 데이터 레이크, 빠르고 정확하게 데이터 추출할 수 있게 구조화된 데이터 웨어하우스, 데이터 레이크와 데이터 웨어하우스 내의 데이터를 확인할 수 있게 하는 데이터 카탈로그로 구성되어 있다. 데이터 웨어하우스 구축은 실제로 업무에 큰 도움이 되었다고 평가받는다.
[인사이트]
데이터 분석가에게 커뮤니케이션 스킬이 중요한 이유를 본문에서 찾을 수 있었다. 다른 부서가 분석 목적에 부합하지 않는 불필요하게 많은 데이터를 요구하는 상황에서, 데이터 분석가가 요청자와의 대화를 거쳐 필요한 데이터만 추려낼 수 있었다. 이때 요청자에게 질문하여 더 구체적인 데이터 선택의 기준을 세우고, 기준에 맞는 데이터를 선별하는 것이 분석가의 일이다. 질문할 때 커뮤니케이션 스킬이 매우 중요하게 작용할 것으로 여겨진다.
잘못된 데이터 해석
[주제]
데이터를 잘못 해석하는 상황별 유형
- 생존자 편향의 오류
- 심슨의 역설
- 상관관계를 통한 성급한 일반화
- 목적에 맞지 않는 지표 선택
세이건 표준 참고하기
[아티클 요약]
데이터를 잘못 해석하는 상황별 유형은 다음과 같다.
1. 생존자 편향의 오류
모집단이 아닌 생존한 일부 집단을 대상으로 하여 잘못된 지표 설정, 해석이 발생하는 상황을 의미한다. 이를 방지하기 위해 전체 집단을 기준으로 해석을 하는 것이 필요하다.
2. 심슨의 역설
전체 지표와 성별, 연령 등 그룹을 나눈 지표가 다르게 해석되는 이유는 무엇일까? 가중평균을 떠올려보면 쉽게 이해할 수 있다. A서비스가 남성 만족도, 여성 만족도 면에서 모두 B 서비스에 앞서는 상황을 가정하자. 이는 A서비스와 B서비스의 성별 비율이 다를 수 있다는 점을 고려하지 않은 채 서비스 점수만으로 비교한 것이다. 따라서 전체 만족도와 성별 만족도가 반대로 해석되는 일이 일어날 수 있다.
3. 상관관계를 통한 성급한 일반화
상관관계가 존재한다는 사실만으로 두 요소 간 연관성이 있다고 판단할 수 없다. 상관관계만 존재하고 인과관계가 없는 상황에서는 제3의 공통 원인이 존재할 수도 있다. 공통 원인 때문에 인과관계가 있는 것처럼 착각할 수 있다. 이 문제에 빠지지 않기 위해, 두 지표 간 공통 원인이 있는지 살피고 지표의 관계를 파악하는 과정이 요구된다.
4. 목적에 맞지 않는 지표 선택
목적에 맞는 지표를 선택한 후에 의사결정을 해야 한다.
앞서 제시된 상황처럼 데이터를 잘못 해석하지 않기 위해 세이건 표준(Sagan Standard)을 참고하는 것이 좋다.
“특별한 주장에는 특별한 근거가 필요하다. (Extraordinary Claims Require Extraordinary Evidence, ECREE)” - 칼 세이건
[인사이트]
첫 번째 아티클을 읽으며 데이터에서 상관관계를 찾는 것만으로는 부족할 것이라고 생각했다. 물론, 실무에서는 상관관계만으로 판단을 내리지 않고 다양한 인과관계를 검토할 것이다. 그래도 실무에서 상관관계를 어떻게 다루는지, 상관관계가 어느 정도면 의미 있다고 판단하는지 궁금했다.
이번 아티클에서 궁금증을 조금 해소할 수 있었다. 상관관계에서 발생할 수 있는 공통 원인의 오류가 지적되었다. 공통 원인의 존재로 인해, 서로 관계없는 두 요인이 인과 관계가 있는 것처럼 보이는 것이다. 아티클에서는 언급되지 않았지만, 인과 관계가 전도된 오류, 여러 개의 원인이 존재하는 상황 등 상관관계의 인과성을 신뢰할 수 없게 만드는 요소가 여럿 존재한다.
아티클의 내용을 통해 다음의 내용을 짐작해 보았다. 인과관계를 증명하는 것의 어려움 때문에, 실무에서는 인과관계를 확정하는 방식 외에도 상관관계에서 오류의 유무를 확인하고, 오류가 있는 상관관계를 제외하는 방식을 사용하지 않을까?
파이썬 개인 공부
1. 프로그래머스: 주사위 게임 2
https://school.programmers.co.kr/learn/courses/30/lessons/181930
1) =, ==, !=
- 틀린 이유: 같음을 =으로 썼다. ==으로 수정한 후 같지 않음을 !==으로 썼다.
- 개선점: 파이썬에서
== 같음
!= 다름
= 할당
2) if 절 안에 여러 조건 넣기: and, or, not
- 수정할 점: if 절에 한 가지 조건만 넣어서 코드를 길게 작성하는 것보다, 중복 조건을 and, or 등으로 묶어서 짧게 하자.
- 개선점: if condition 1 and condition 2 구조를 기억
3)
- 틀린 이유: 'a, b, c가 모두 다르다.'를 a != b != c라고 작성했다. 여기에는 a와 c의 관계에 대한 정보가 빠져 있다.
- 개선점: 'a, b, c가 모두 다르다.'와 같이 여러 수식으로 조건 표현해야 할 때는 모든 조건을 and, or, not으로 연결해서 조건에 구멍이 없도록 한다.
and와 or 사용할 때는 괄호 사용해 우선순위를 지정한다.
4) 다른 사람의 풀이 보고 배우기: set 함수, len 함수
(1) set
- set(): 리스트 등에서 중복 제거하고 고유한 값만 남김
{}로 감싸져서 출력되며, 딕셔너리와 다름
- 예시
a = [1, 2, 2, 3, 3, 4, 4]
b = set(a)
print(b)
{1, 2, 3, 4}
(2) len
- len(): 주어진 객체의 길이 또는 개수 반환
- 예시
a = [1, 2, 3, 4]
print(len(a))
4
(3) len(set())
- 주어진 리스트에서 중복된 값 제거한다. 남은 고유한 값의 숫자를 세어준다.
- 모두 다르면 3, 한 개만 다르면 2, 모두 같으면 1
- 명확하게 구분되는 값 도출된다. 이 함수를 조건으로 사용할 수 있다.
///