케찹고백
나는 사실 금요일을 너무 기다렸다.
오늘은 내일은 쉴 수 있다는 생각에 힘내서 할 일들을 얼른 해치웠다..!
휴일 버프로 집중도 더 잘 되고 그랬다.
오늘은 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 |