케찹고백
나는 사실 금요일을 너무 기다렸다.

오늘은 내일은 쉴 수 있다는 생각에 힘내서 할 일들을 얼른 해치웠다..!
휴일 버프로 집중도 더 잘 되고 그랬다.
오늘은 SQL 강의도 있고 발표회도 있어서 진도를 많이 나가기보다 이번 주에 푼 코드카타 문제들을 복습하는 시간을 추가했다.
오늘 한 일은,
- SQL 공부
- [라이브 세션] SQL 강의 2회차 수강
- [라이브 세션] SQL 강의 2회차 과제 풀기 및 제출
- [코드카타] SQL 7문제 풀기 (14~20번)
- 파이썬 공부
- [코드카타] 파이썬 1문제 풀기 (31번)
- [ADsP 자격증 챌린지] 2주차 강의 수강 완료하기 (~ 2-4)
- [코드카타] 이번 주에 푼 문제들 복습하기
- SQL : 1~20번
- 파이썬 : 1~30번
SQL 공부①: [예제로 익히는 SQL] 2회차 수강

오늘 강의는 사전캠프 때 공부한 내용을 다시 차근차근 복습할 수 있는 시간이었다.
강의 중에 작은 따옴표와 큰 따옴표와 백틱 간 차이점과 같은 부분들을 짚어주셔서 좋았다.
그리고 2회차부턴 강의 과제가 함께 나와서 강의 종료 후 바로 과제를 풀었다.
2회차 과제
1. 조건절 WHERE 구분의 활용
| 조건1) first_login_date 컬럼이 2023-01-01 초과인 날짜의 game_account_id, game_actor_id, serverno 를 추출해주세요. 결과값) 아래와 같은 형태이며, 정렬을 하지 않았으므로 결과값 순서는 달라질 수 있습니다. 아래 그림은 전체 중 일부입니다. 사용자의 로컬 환경 및 MySQL 버전에 따라 화면이 다르게 보일 수 있습니다. |
SELECT game_account_id,
game_actor_id,
serverno
FROM users
WHERE first_login_date > '2023-01-01'
문제1을 풀기 위해 위와 같이 쿼리를 작성했다.
해당 쿼리가 맞는지 확인하기 위해서 first_login_date 컬럼을 추가해 오름차순으로 정렬했다.
왜냐하면 가장 먼저 뜨는 데이터가 first_login_date가 2023-01-02부터 뜨는지를 확인하여 주어진 조건에 부합하는지 확인하기 위해서다.

2023-01-02부터 뜨는 걸 보니 맞는 것 같다.
2. 조건절 WHERE 구문의 응용
| 조건1) level 컬럼이 10 초과이고 조건2) serverno컬럼이 1이 아니며 조건3) 아이템 이름 컬럼이 레벨업 패키지 또는 시즌패스이고 조건4) 아이템 획득 경로가 상점에서 구매한 경우의 결과값) first_login_date, ip_addr, exp, zone_id 를 추출하고 first_login_date을 기준으로 내림차순으로 정렬해주세요. 결과값은 아래와 같은 형태입니다. 아래 그림은 전체 중 일부입니다. 사용자의 로컬 환경 및 MySQL 버전에 따라 화면이 다르게 보일 수 있습니다. |
우선 결과 테이블에서 요구하는 칼럼들에 앞서 WHERE절에 입력한 조건들이 내 요구와 맞게 돌아가는지 확인하기 위해 다음과 같이 쿼리를 작성했다.
SELECT level,
serverno,
etc_str2,
etc_str1
FROM users
WHERE level > 10
AND serverno != 1
AND (etc_str2='레벨업 패키지' OR etc_str2='시즌패스' )
AND etc_str1='상점에서 구매'
ORDER BY 1 , 2

위와 같이 SQL을 작성하면 결과 테이블이 이렇게 뜬다.
ORDER BY절을 통해서 정렬되는 결과를 보니 주어진 조건 1과 조건 2가 성립함을 확인할 수 있고,
조건 3과 조건 4 역시 요구한 대로 '레벨업 패키지' 아니면 '시즌패스'인 것만을, '상점에서 구매'인 것만을 조회함을 확인할 수 있다.
SELECT first_login_date,
ip_addr,
exp,
zone_id
FROM users
WHERE level > 10
AND serverno != 1
AND (etc_str2='레벨업 패키지' OR etc_str2='시즌패스' )
AND etc_str1='상점에서 구매'
ORDER BY 1 DESC
조건이 원하는 대로 입력했음을 확인했으니 결과 테이블에 요구한 컬럼들과 정렬 조건에 따라서 SELECT절과 ORDER BY절을 수정했다.
3. 조건절 CASE WHEN 구문의 활용
| 조건1) case when 구문을 사용하여 레벨구간을 아래와 같이 구분해주시고, 컬럼이름을 ‘levelgroup’ 으로 설정해주세요. [레벨구간] ◦ 1~10Lv 이하 ◦ 11~20Lv 이하 ◦ 21~30Lv 이하 ◦ 31~40Lv 이하 ◦ 41~50Lv 이하 ◦ 51~60Lv 이하 ◦ 61~70Lv 이하 ◦ 71~80Lv 이하 ◦ 81~90Lv 이하 ◦ 91~100Lv 결과값) game_actor_id, level, levelgroup, first_login_date 컬럼을 추출해주시고, first_login_date를 기준으로 내림차순 정렬해주세요. 결과값은 아래와 같아야 합니다. 아래 그림은 전체 중 일부입니다. |
SELECT game_actor_id,
level,
CASE WHEN level BETWEEN 1 AND 10 THEN '1~10Lv 이하'
WHEN level BETWEEN 11 AND 20 THEN '11~20Lv 이하'
WHEN level BETWEEN 21 AND 30 THEN '21~30Lv 이하'
WHEN level BETWEEN 31 AND 40 THEN '31~40Lv 이하'
WHEN level BETWEEN 41 AND 50 THEN '41~50Lv 이하'
WHEN level BETWEEN 51 AND 60 THEN '51~60Lv 이하'
WHEN level BETWEEN 61 AND 70 THEN '61~70Lv 이하'
WHEN level BETWEEN 71 AND 80 THEN '71~80Lv 이하'
WHEN level BETWEEN 81 AND 90 THEN '81~90Lv 이하'
ELSE '91~100Lv' END levelgroup,
first_login_date
FROM users
ORDER BY 4 DESC
레벨 구간인 levelgroup 컬럼을 설정해주기 위해 위와 같이 CASE WHEN 구문을 사용해 작성했다.
ADsP 공부: [ADsP 자격증 챌린지] 2주차 수강하기
(👇 [ADsP 자격증 챌린지] 2주차 강의의 앞선 부분 정리한 글 👇)
[본캠프 4일차] 파이썬 코드카타, 아티클 스터디②, ADsP 공부
오늘 한 일은,두 번째 아티클 스터디 (누적은 13번)SQL 공부코드카타 한 문제 풀기파이썬 공부코드카타 열 문제 풀기[ADsP 자격증 챌린지] 2주차 수강하기 (2-2까지) 아티클 스터디 ②: 오늘 읽은
maandoo.tistory.com
빅데이터의 위기 요인과 통제 방안
빅데이터의 위기 요인
- ①사생활 침해
- 개인정보가 포함된 데이터를 목적 외에 활용할 경우 사생활 침해 위협을 넘어 사회/경제적 위협으로도 변형될 수 있음
- 익명화 기술이 발전되고 있으나 아직도 충분하지 않음
- ②책임 원칙 훼손
- 빅데이터 기반 분석과 예측 기술이 발전하면서 정확도가 증가한 만큼, 분석 대상이 되는 사람들은 예측 알고리즘의 희생양이 될 가능성도 증가함
- 민주주의 국가에서는 잠재적 위협이 아닌 명확한 결과에 대한 책임을 묻고 있다. 특정인이 빅데이터의 분석 결과에 따라 특정한 행위를 할 가능성이 높다는 이유만으로 처벌 받는 것은 행위 결과에 대해서만 책임을 묻는다는 민주주의 사회 원칙을 크게 훼손할 수 있음
- ex)
어떤 사람이 특정한 사회/경제적 특성을 가진 집단에 속한다는 이유로 자신의 신용도와 무관하게 ‘부당하게’ 대출이 거절되는 상황도 알고리즘 예측의 피해 사례가 될 수 있음
- ③데이터 오용
- 데이터 과신 혹은 잘못된 지표의 사용으로 잘못된 인사이트를 얻어 비즈니스에 적용할 경우 직접 손실이 발생할 수 있음
- 빅데이터는 과거 일어난 일에 대한 데이터에 의존하기 때문에 이를 바탕으로 미래를 예측하는 것은 위험할 수 있음
위기 요인별 통제 방안
- ① → ‘동의에서 책임으로’
- 개인정보 제공자의 ‘동의’를 통해 해결하기보다 개인정보 사용자의 ‘책임’으로 해결한다는 방안
- ② → ‘결과 기반 책임 원칙 고수’
- 특정인의 ‘성향’에 따라 처벌하는 것이 아닌 ‘행동 결과’를 보고 처벌
- ③ → ‘알고리즘 접근권 허용/인증’
- 알고리즘에 대한 접근권을 제공하여 예측 알고리즘의 부당함을 반증할 수 있는 방법을 명시해 공개할 것을 주문
- 불이익을 당한 사람들을 대변할 전문가 알고리즈미스트(Algorithmist)가 필요하게 됨
미래의 빅데이터
- 빅데이터 활용의 3요소
- 데이터
: 모든 것을 데이터화하는 추세로 특정 목적 없이 축적된 데이터를 통한 창의적인 분석이 가능해져 새로운 가치로 부상 - 기술
: 대용량의 데이터를 빠르게 처리하기 위한 알고리즘의 진화와 함께 스스로 학습하고 데이터를 처리하는 인공지능 기술이 출현 - 인력
: 빅데이터를 처리하기 위한 데이터 사이언티스트와 알고리즈미스트의 역할을 통해 빅데이터의 다각적 분석을 통한 인사이트 도출이 중요해짐
- 데이터
- 비식별 기술의 종류와 예시
- 데이터 마스킹 : 데이터의 길이, 유형, 형식과 같은 속성을 유지한 채, 식별할 수 없는 임의의 값으로 대체
(ex. ADsP자격증 → '****자격증') - 가명 처리 : 데이터의 값을 다른 값으로 변경하는 기술 일정한 규칙이 노출되지 않도록 주의
(ex. 한지민 → '김우빈') - 총계 처리 : 데이터의 총합 또는 평균 값을 보여주며 개별 데이터 값을 보이지 않도록 하는 기술
(ex. 10점, 20점, 30점 → '평균 20점') - 데이터값 삭제 : 필요 없거나 개인 식별에 중요한 값을 삭제
(ex. 서울시 강남구 → '서울시') - 데이터 범주화 : 데이터의 값을 범주화하여 특정 값을 숨기는 기술
(ex. 29세 → '20~30세')
- 데이터 마스킹 : 데이터의 길이, 유형, 형식과 같은 속성을 유지한 채, 식별할 수 없는 임의의 값으로 대체
빅데이터 분석과 전략 인사이트
- 빅데이터 회의론의 원인
- 과거 CRM의 부정적 학습 효과
: 과거 공포 마케팅이 잘 통해서 CRM 같은 솔루션이 반드시 도입되어야 하는 것으로 강조되었으나 막대한 비용을 지불하여 빅데이터 시스템을 구축했어도 어떻게 가치를 창출해야 할지 난감한 상황에 봉착함 - 과대 포장
: 기존 분석 성공 사례를 빅데이터 성공사례로 포장한 것이 많음 (굳이 빅데이터가 필요 없는 ‘기존의 우수 고객, 이탈 고객 예측 분석’ 등의 분석을 빅데이터 분석인 것 마냥 과대 포장함)
- 과거 CRM의 부정적 학습 효과
- 빅데이터 분석은 인사이트!
- 크기가 아닌 ‘인사이트’
- 데이터는 크기가 아니라 어떤 시각과 인사이트(의미있는 정보)를 얻을 수 있느냐의 문제다
- 빅데이터와 관련된 걸림돌은 ‘비용’이 아니라 ‘분석적 방법과 성과에 대한 이해 부족’이다
- 전략적 인사이트의 중요성
- 단순히 데이터 분석을 많이 사용한다고 경쟁우위에 도달하지 않음
- 이를 예방하기 위해 전략적인 통찰력을 가지고 핵심적인 비즈니스에 집중하여 데이터를 분석하고 차별적인 전략으로 기업을 운영해야 함
- 크기가 아닌 ‘인사이트’
- 산업별 일차원적 분석
- 에너지 산업 : 트레이딩, 공급/수요 예측 '트레이딩'이라 하여 금융이라고만 생각하지 말자
- 전략 도출을 위한 가치 기반 분석
- 일차원적인 분석을 통해서도 해당 부서나 업무 영역에서는 상당한 효과를 얻을 수 있습니다. 하지만 대부분 업계 내부의 문제에만 포커스를 두고 있으며, 주로 부서 단위로 관리되기 때문에 비즈니스 성공에 핵심적인 역할을 기대하기는 어렵습니다.
- 일차원적인 분석을 통해 점점 분석 경험을 늘려가고 작은 성공을 거두면 분석의 활용 범위를 더 넓고 전략적으로 변화시킴으로써 전략적 인사이트를 주는 가치 기반 분석 단계로 나아가야 함
데이터 사이언스
- 데이터 사이언스
- 데이터로부터 의미 있는 정보를 추출해내는 학문
- 통계학이 정형화된 실험 데이터를 분석 대상으로 하는 것에 비해,
데이터 사이언스는 정형 또는 비정형을 막론하고 인터넷, 휴대전화, 감시용 카메라 등에서 생성되는 숫자와 문자, 영상 정보 등 다양한 유형의 데이터를 대상으로 함
- 데이터 사이언스의 핵심 구성요소
- Analytics : 분석적 영역 (기초 수학 및 통계 지식 등)
- IT (Data Management) : 데이터 처리와 관련된 IT 영역 (프로그래밍, 데이터 엔지니어링 등)
- 비즈니스 분석 : 비즈니스 컨설팅 영역 (커뮤니케이션 능력, 스토리텔링 능력, 프레젠테이션 능력 등)
- 데이터 사이언티스트의 요구 역량
- Hard Skill
- 빅데이터에 대한 이론적 지식
: 관련 기법에 대한 이해와 방법론 습득 - 분석 기술에 대한 숙련
: 최적의 분석 설계 및 노하우 축적
- 빅데이터에 대한 이론적 지식
- Soft Skill
- 통찰력 있는 분석
: 창의적 사고, 호기심, 논리적 비판 - 설득력 있는 전달
: 스토리텔링, 시각화 - 다분야 간 협력
: 커뮤니케이션
- 통찰력 있는 분석
- Hard Skill


- 인문학적 사고의 특성
- [과거] 무슨 일이 일어났는가?(보고서 작성 등)
→ 어떻게, 왜 일어났는가? (모델링, 실험 설계) - [현재] 무슨 일이 일어나고 있는가? (경고 등)
→ 차선 행동은 무엇인가? (권고) - [미래] 무슨 일이 일어날 것인가? (추측 등)
→ 최악 또는 최선의 상황은 무엇인가? (예측, 최적화, 시뮬레이션)
- [과거] 무슨 일이 일어났는가?(보고서 작성 등)
- 가치 패러다임의 변화 가치 패러다임의 변화 순서 기억해라
- 디지털화 : 아날로그의 세상을 어떻게 효과적으로 디지털화하는가가 이 시대의 가치를 창출해 내는 원천
- 연결 : 디지털화된 정보와 대상들이 서로 연결되어 이 연결이 얼마나 효과적이고 효율적으로 제공되느냐가 이 시대의 성패를 가름
- 에이전시 : 사물인터넷(IoT)의 성숙과 함께 연결이 증가하고 복잡해짐 복잡한 연결을 얼마나 효과적이고 믿을 수 있게 관리하는가가 이슈이며, 데이터 사이언스의 역량에 따라 좌우됨

코드카타 복습하기
이번 주 동안 푼 문제들을 다시 풀어보면서 막히는 문제들은 체크해놓았다.
SQL : 1 ~ 20번

없 ! 다 !
파이썬 : 1 ~ 31번
007. 두 수의 나눗셈
- int() : 소수점 이하는 버리고 정수만 출력
016. x만큼 간격이 있는 n개의 숫자
def solution(x, n):
answer = []
for i in range(1, n+1):
v = x*i
answer.append(v)
return answer
나는 이렇게 작성했다.
답을 맞히고서 다른 사람들의 풀이를 둘러보는데 for문을 한 줄로도 쓸 수 있다는 것을 알게 돼 해당 내용을 찾아보았다.
[참고] [Python_Basic] 리스트 for반복문 한줄에 작성 + if 조건문
- 결과 for 반복문 (ex. i for i in range(n))
for문 앞에 결과로 나온 값을 적어주면 한 줄에도 쓸 수 있는데 이를 대괄호를 사용하면 [] 리스트를 만드는 걸 한 줄에 할 수 있게 된다..!
def solution(x, n):
answer = [x * i for i in range(1, n+1)]
return answer
그래서 한 줄 for문을 사용하면 위에 내가 작성한 코드를 이렇게 한 줄로도 작성할 수 있게 된다.
너무 신기하다.
017. 자연수 뒤집어 배열로 만들기
def solution(n):
answer = []
for i in str(n):
answer.append(int(i))
answer.reverse()
return answer
이 문제도 위와 같이 한 번에 작성해서 바로 맞혔지만
앞선 문제에서 알게 된 한 줄 for문을 사용해서 더 짧게 작성해보고 싶어졌다.
def solution(n):
answer = [int(i) for i in str(n)]
answer.reverse()
return answer
이렇게 써도 돌아간다.
여기까지 쓴 김에 reverse()까지 한 줄에 쓰고 싶은데 방법이 없는지 궁금해졌다.
def solution(n):
answer = [int(i) for i in str(n)][::-1]
return answer
리스트를 순서를 뒤집는 방법은 3가지 있는데
- 슬라이싱
- reversed() 함수
- reverse() 메소드
신기한 게 코드가 한 줄이라고 결과가 항상 빠르진 않았다.
[::-1]을 사용한 코드보다 reverse() 메소드를 사용한 코드가 한 줄 더 길어도 결과는 더 빨리 나왔다.
참고한 블로그에서도 여러 방법이 있고 각 방법마다 장단점이 있으므로 메모리 사용량과 원래 리스트를 보존해야 하는지 등을 고려해서도 코드를 작성해야겠구나 싶었다.
원래는 어떤 코드가 더 좋은 코드인지 알고 싶었는데, 상황에 따라 좋은 코드가 달라지는 것이었다.
020. 정수 내림차순으로 배치하기
이 문제는 다시 푸니,
- list 속 값들을 원하는 대로 정렬하는 법
- 리스트 속 값들을 하나로 합칠 때 join을 사용하는 건 알겠는데 정확한 문법이 뭔지
를 기억나지 않아 다시 찾아봤다.
[참고1] [Python] 리스트(List) 정렬하기 (feat. sort(), sorted())
[참고2] [Python] join 함수 : 구분자 문자열 리스트 결합하기 (이어붙이기)
- 정렬할 때 sorted() 함수, sort() 메소드 사용
- 내림차순을 원하면 reverse 옵션에 True 값을 설정함: sorted(리스트, reverse=True), 리스트.sort(reverse=True)
- join() 메소드
- ''.join(리스트) : 리스트 내 값들을 모두 이어붙여서 문자열로 반환
- ' '.join(리스트) : 공백을 넣어서 문자열을 이어붙여서 문자열로 반환
def solution(n):
answer = [i for i in str(n)]
answer.sort(reverse=True)
answer = int(''.join(answer))
return answer
021. 하샤드 수
def solution(x):
n = [int(i) for i in str(x)]
if x % sum(n) == 0:
answer = True
else:
answer = False
return answer
처음엔 이렇게 작성했다. 이렇게 써도 통과된다.
통과하고서 다른 사람들의 풀이를 보는데 for문으로 하나씩 나오는 숫자들을 리스트에 담을 필요 없이 바로 sum()을 쓸 수 있다는 것을 알게 됐다.
def solution(x):
n = sum(int(i) for i in str(x))
if x % n == 0:
answer = True
else:
answer = False
return answer
그러니까 n을 이런 식으로 정의할 수도 있는 것이다.
022. 두 정수 사이의 합
def solution(a, b):
if a == b:
answer = a
else:
if a < b:
answer = sum(i for i in range(a, b+1))
else:
answer = sum(i for i in range(b, a+1))
return answer
이렇게 적고 통과하고서 다른 사람들의 풀이를 보니,
def solution(a, b):
if a == b:
answer = a
else:
if a < b:
answer = sum(range(a, b+1))
else:
answer = sum(range(b, a+1))
return answer
range()도 그냥 바로 sum()이 된다.
026. 음양 더하기
def solution(absolutes, signs):
answer = []
for i in range(len(signs)):
if signs[i] == false:
answer.append(-absolutes[i])
else:
answer.append(absolutes[i])
answer = sum(answer)
return answer
처음엔 이렇게 썼더니 에러 메시지에 'false가 정의돼 있지 않다'고 떴다.
[참고] [Python] False, True 관련 연산자 동작(+None)
그래서 찾아봤더니 '=='이 값 연산자라서 true와 false는 못 쓰고 true는 1로, false는 0으로 적어줘야 한다.
def solution(absolutes, signs):
answer = []
for i in range(len(signs)):
if signs[i] == 0:
answer.append(-absolutes[i])
else:
answer.append(absolutes[i])
answer = sum(answer)
return answer
이렇게 수정해주니 통과했다.
'[내배캠] 데이터분석 6기 > 본캠프 기록' 카테고리의 다른 글
| [본캠프 7일차] 아티클 스터디③, 파이썬 코드카타, SQL 공부, ADsP 공부 (2) | 2025.02.25 |
|---|---|
| [본캠프 6일차] 팀플 주제 선정, 파이썬 코드카타, SQL 코드카타, SQL 공부, ADsP 공부 (0) | 2025.02.24 |
| [본캠프 4일차] 파이썬 코드카타, 아티클 스터디②, ADsP 공부 (0) | 2025.02.20 |
| [본캠프 3일차] SQL 코드카타, 파이썬 코드카타, MySQL 설치, ADsP 공부 (0) | 2025.02.19 |
| [본캠프 2일차] 파이썬 코드카타, 아티클 스터디①, SQLD 공부 (1) | 2025.02.18 |