[내배캠] 데이터분석 6기/본캠프 기록

[본캠프 3일차] SQL 코드카타, 파이썬 코드카타, MySQL 설치, ADsP 공부

물맨두 2025. 2. 19. 18:02

오늘은 알람이 울리기도 전에 눈이 떠졌다. 15분 더 못 잔 게 아쉽지만 그냥 일어났다.

근데 알람이 일어나기도 전에 스스로 일어났으면서 왜 피곤한 거지?

 

오늘 이것저것 많이 했는데 가장 빅 이벤트는 노트북 대여 신청(…)이다.

250219 노트북.. 신청하다.....

SQL 실시간 수업 1회차를 들었는데, 다음 수업까지 학습 환경을 세팅해야 해서 시키는 대로 MySQL도 설치하고(..결국 설치하게 되는구나) 그랬는데,

아마 MySQL 설치가 치명적이었던 것 같다.

사실 전부터 계속 zep에 접속하며 강의 듣고, TIL 작성하느라 티스토리 켜놓고, 프로그래머스에서 코드카타 풀고 등 여러 활동을 하면서 갑자기 크롬이 접속이 끊겨서 튕기곤 했다.

근데 오늘은 차원이 다르게 MySQL 설치 이후 노트북이 먹통이 되는 때가 잦아졌다😥

 

솔직히 성능이 구려도 내 노트북으로 이것저것 하는 게 편하니까 노트북 대여할 생각이 없었는데 오늘 결국 신청하게 됐다. (내 노트북아 조금만 버텨라.. 대여한 노트북 오면 여기에 이번에 설치한 프로그램들 전부 삭제해줄게, 고생 많았다)

 

아무튼, 노트북 대여 신청을 비롯해 오늘 한 일은,

  • 파이썬 공부
    • [코드카타] 파이썬 문제 11~20번 풀기
  • SQL 공부
    • [코드카타] SQL 문제 12번 풀기
    • [라이브 세션] 1회차 듣기
  • 직무 특강 듣기
  • ADsP 강의 듣기

 


 

파이썬 공부: 코드카타 풀기 (11~20번)

013. 자릿수 더하기

자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.
예를 들어, N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.

def solution(n):
    answer = 0
    
    for i in str(n):
        answer += int(i)

    return answer

일단 들어오는 자연수 n을 str() 함수를 사용해 문자열로 바꿔준 것을 for문을 사용해 하나씩 각 자릿수의 숫자를 가져오도록 한다.

 

그 숫자들을 현재 0인 answer에 순서대로 하나씩 더하도록 쓰는데,

이때 덧셈 연산이 가능하도록 현재 문자 데이터인 i를 int() 함수를 통해 숫자 데이터로 바꿔서 에러가 발생하지 않도록 주의한다.

 


 

014. 약수의 합

정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요.

def solution(n):
    answer = 0
    for i in range(1,n+1):
        if (n % i == 0):
            answer += i
    
    return answer

정수 n의 약수를 찾을 때에 for문에 if문을 사용해 작성했다.

range() 함수를 1부터 n까지의 숫자들을 i라 할 때, n을 i로 나눴을 때 나머지가 없는 수가 n의 약수이니까
이런 숫자들을 answer에 더해주었다.

 


 

015. 나머지가 1이 되는 수 찾기

자연수 n이 매개변수로 주어집니다. n을 x로 나눈 나머지가 1이 되도록 하는 가장 작은 자연수 x를 return 하도록 solution 함수를 완성해주세요. 답이 항상 존재함은 증명될 수 있습니다.

def solution(n):
    for x in range(1, n+1):
        if n % x == 1:
            answer = x
            break
    return answer

x를 찾아야 하니 for문을 x를 사용해서 적었다.

 

if문으로 n을 x로 나눴을 때 나머지가 1인 조건을 주면서 x가 나오면 주어진 범위 끝까지 연산하지 않고 멈추도록 break를 사용했다.

해당 for문에서 break를 사용할 수 있는 건 for문은 주어진 범위를 순서대로 반복하기 때문에 굳이 모든 x들을 받아 그 중 최솟값을 찾는 수고를 할 필요가 없기 때문이다.

 


 

016. x만큼 간격이 있는 n개의 숫자

함수 solution은 정수 x와 자연수 n을 입력 받아, x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 합니다. 다음 제한 조건을 보고, 조건을 만족하는 함수, solution을 완성해주세요.

def solution(x, n):
    answer = []
    for i in range(x, x*n+1, x):
        answer.append(i)
    return answer

처음에는 위와 같이 작성했다.

250219 그냥 문제 없을 땐 몰랐는데, 오류가 발생하면 (~˘▾˘)~ 이모티콘이 좀 킹받는다

그랬더니 x로 음수가 주어졌을 때 오류가 발생했다.

 

작성한 내용을 다시 살펴보니 range() 함수의 변수 중 두 번째 변수에서 문제가 발생했다.

 

def solution(x, n):
    answer = []
    for i in range(1, n+1):
        answer.append(i*x)
    return answer

그래서 위와 같이 수정했다.

i를 1부터 n까지로 변경하고, answer 리스트에 x배한 i들을 담기로 했다.

 


 

017. 자연수 뒤집어 배열로 만들기

자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.

def solution(n):
    answer = []
    for i in str(n) :
        answer.append(int(i))
        answer.reverse()
    return answer

처음에는 위와 같이 작성했다.

근데 reverse()를 썼는데 왜 나는 순서가 [5, 3, 1, 2, 4]로 뒤죽박죽인 거지..

 

def solution(n):
    answer = []
    for i in str(n) :
        answer.append(int(i))
    answer.reverse()
    return answer

근데 여기서 더욱 더 놀라운 건 이것저것 함수도 바꿔서 사용해보고 시도하다가 '혹시나..' 하며

'answer.reverse()' 행의 들여쓰기를 수정했더니 코드가 정상적으로 작동했다..! 들여쓰기가 문제였다니, 왜지?

 

250219 빠르고 친절한 답변 다시 한 번 감사드립니다!

그래서 해당 질문을 슬랙의 질문방에 질문을 했더니 답변을 받고 단박에 이해가 갔다.

for문 안에서 reverse()까지도 계속 반복되면서 list를 뒤집고, 또 뒤집고 반복하며 숫자가 뒤죽박죽(나름 패턴은 있지만 어쨌든) 들어가게 된 것이었다.

 


 

019. 정수 제곱근 판별

임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.
n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.

def solution(n):
    x = n**0.5
    if n % x == 0:
        answer = (x+1)**2
    else:
        answer = -1
    return answer

(이건 솔직히 수학 문제)

파이썬에서 제곱을 나타내는 연산자는 **이다.

0.5 제곱을 하는 건 ½ 제곱을 하라는 의미인데, 이는 n² = n×n이듯 n** ½ = n÷n이다.

그래서 if문을 사용해서 n이 x로 나눴을 때 나머지가 없다면 x가 n의 제곱근이라는 의미로,

True면 (x+1)**2를 연산한 값을 반환하고, False면 -1을 반환하도록 작성했다.

 


 

020. 정수 내림차순으로 배치하기

함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다.

def solution(n):
    answer = int(''.join(sorted(str(n), reverse = True)))
    return answer

이 문제는 보기엔 한 줄로 간단하지만 여러 함수를 중첩시켜서 코드를 작성했다.

 

해당 내용을 풀어보면, 

우선 입력되는 정수를 각각의 숫자로 쪼개기 위해 str() 함수를 사용한다.

그리고 이를 sorted() 함수로 정렬하는데 내림차순으로 정렬하기 위해 reverse = True 값을 준다.

현재 리스트 형태로 들어있는 값들을 하나로 합치기 위해 join을 사용하고

마지막으로 문자 데이터를 숫자 데이터로 바꿔준다.

 


 

SQL 공부: 라이브 세션 1회차

250219

오늘은 SQL 실습에 앞서서 기본적으로 알아둘 개념들을 공부하는 시간이었다.

 

그리고 실습을 할 수 있는 환경을 세팅하기 위해,

  • D Beaver 설치
  • MySQL 설치
  • 새로운 데이터 베이스 생성 및 데이터 불러와 테이블 생성

위의 3가지를 해야 했는데 다른 건 문제가 없었는데 MySQL 설치가 좀 시간이 걸렸지만 그래도 잘 설치했다.

 

My SQL 설치 시 참고한 글들 : 

 


 

ADsP 공부: [ADsP 자격증 챌린지] 수강하기

ADsP 시험 정보

  • 데이터 이해를 바탕으로 데이터분석 기획, 데이터 분석 능력을 갖추고 있는지 평가하는 것 !
구분 시험 과목 세부 과목
1과목 데이터 이해 - 데이터의 이해
- 데이터의 가치와 미래
- 가치 창조를 위한 데이터 사이언스와 전략 인사이트
2과목 데이터분석 기획 - 데이터분석 기획의 이해
- 분석 마스터 플랜
3과목 데이터분석  - R기초와 데이터 마트
- 통계분석
- 정형 데이터 마이닝

 

  • 실기 없이 필기만, PBT (객관식 : 50문제 (문항당 2점))
  • 시험 시간 : 90분
  • 합격 기준 : 60/100점 (과락: 과목별 40% 미만)

 

데이터

데이터의 특성

  • 존재적 특성: 있는 그대로의 객관적 사실
  • 당위적 특성 : 추론, 예측, 전망, 추정을 위한 근거로서 기능
  • 데이터는 축적되어 사용되므로 개별 데이터는 중요하지 않음 달랑 1개 있어봤자 의미 없다

데이터의 유형

  • 정성적 / 정량적
    • 정성적 데이터
      • 언어 · 문자 등으로 표현됨
      • 형태가 명확하게 정해져 있지 않기 때문에 상대적으로 많은 비용과 기술적 투자가 필요
    • 정량적 데이터 
      • 수치 · 기호 · 도형으로 표현됨
      • 데이터의 양이 증가하더라도 데이터 관리 시스템 (ex.DBMS)에 저장 · 검색 · 분석하여 활용하기가 용이
  • 정형 / 비정형 / 반정형
    • 정형(structured) 데이터 : 고정된 틀이 있음, 연산 가능 (CSV, 엑셀, 관계형 데이터베이스 등)
    • 비정형(unstructured) 데이터 : 고정된 틀 없음, 연산 불가능 (NoSQL, 영상, 음성 등)
    • 반정형(semi-structured) 데이터 : 고정된 틀 있음, 연산 불가능 (HTML, JSON 등)
  • 암묵지와 형식지
    • 암묵지
      • 학습과 체험을 통해 개인에게 습득되어 있지만 겉으로 드러나지 않는 지식
      • 외부로 표출되지 않기 때문에 공유와 전달이 어려움
    • 형식지
      • 교과서, 매뉴얼 등과 같이 형상화된 지식
      • 유형의 대상이 있기 때문에 공유와 전달이 용이함
    • 암묵지와 형식지의 상호작용
      • 표출화 (암묵지→형식지) :
        개인의 내면에 있는 지식(=암묵지)를 기호, 숫자 등의 형태롤 통해 표출화를 거쳐 형식지가 됨
      • 연결화
      • 내면화 (형식지→암묵지) :
        형식지는 개인의 지식으로 연결하여 그 바탕 위에서 새로운 경험을 부가해 다시 내면화되어 암묵지가 됨
      • 공통화

 

DIKW 피라미드

  • DIKW 피라미드 : 데이터에서 지혜를 얻어내는 과정을 설명하는 계층구조
    • [D] 데이터(Data) : 존재형식을 불문하고 타 데이터와의 상관관계가 없는 가공하기 전의 순수한 수치나 기호를 의미
    • [I] 정보(Information) : 데이터의 가공 및 상관관계간 이해를 통해 패턴을 인식하고 그 의미를 부여한 데이터
    • [K] 지식(Knowledge) : 상호 연결된 정보 패턴을 이해하여 이를 토대로 추론한 것
    • [W] 지혜(Wisdom) : 근본 원리에 대한 깊은 이해를 바탕으로 도출되는 창의적 아이디어 (예측)
       - 지혜와 지식을 혼동하지 말 것; 지혜는 지식에서 한 발 더 나아간 것!

 

데이터베이스

데이터베이스

  • DB와 DBMS의 차이
    • DB : 데이터가 모여있는 정보의 집합체
    • DBMS : 데이터베이스를 관리하는 프로그램
  • 데이터베이스의 종류
    • 관계형 데이터베이스(Relational Database)
      • 데이터를 행과 열로 표현된 표 형식으로 저장
      • SQL을 사용해 데이터를 조작
    • 비관계형 데이터베이스(NoSQL, Not Only SQL/Non-SQL)
      • 관계형 데이터베이스(Relational Database)가 아닌 다른 형태의 데이터베이스 관리 시스템
      • 비정형 데이터와 대용량의 데이터 분석 및 분산 처리에 용이

데이터베이스의 특징

  • 데이터베이스의 일반적인 특징
    • 통합된 데이터 : 동일한 내용의 데이터가 중복되어 있지 않음
    • 저장된 데이터 : 컴퓨터가 접근할 수 있는 저장 매체에 저장되어 있음
    • 공용 데이터 : 다수의 사용자가 다양한 목적으로 데이터를 이용함
    • 변화되는 데이터 : 삽입, 삭제, 갱신으로 변화하면서도 항상 정확한 데이터 상태를 유지
  • 특정 측면에서 본 데이터베이스의 특징
    • 정보의 축적 및 전달 측면 기계의 입장에서
      • 기계가독성 : 대량의 정보를 일정한 형식에 따라 컴퓨터 등의 정보처리기기가 읽고 쓸 수 있음
      • 검색가능성 : 다양한 방법으로 필요한 정보를 검색 가능
      • 원격조작성 : 정보통신망을 통해 원거리에서도 온라인 이용 가능
    • 정보 이용 측면 사용자 입장에서
      • 다양한 정보를 신속하게 획득
      • 원하는 정보를 정확하고 경제적으로 찾아낼 수 있음
    • 정보 관리 측면 데이터를 관리하는 입장
      • 정보를 일정한 질서와 구조에 따라 정리·저장 · 검색 · 관리할 수 있도록 하여 대량의 정보를 체계적으로 축적하고 새로운 내용 추가나 갱신이 용이함
    • 정보기술 발전의 측면
      • 정보처리, 검색·관리 소프트웨어, 관련 하드웨어, 정보 전송을 위한 네트워크 기술 등의 발전을 견인할 수 있음
    • 경제·산업적 측면
      • 다양한 정보를 필요에 따라 신속하게 제공하고 이용할 수 있는 인프라의 특성을 가지고 있어 경제, 산업, 사회 활동의 효율성을 제고하고 국민의 편의를 증진하는 수단으로서 의미를 가짐

데이터베이스의 활용

  • 기업내부 데이터베이스 : OLTPOLAP
    • OLTP(Online Transaction Processing) : 정보시스템, 데이터 갱신 위주
    • OLAP(Online Analytical Processing) : 분석 중심의 시스템
    • OLTP → OLAP로 넘어가는 추세
  • 기업 DB 구축 관련 화두
    • CRM(Customer Relationship Management, 고객 관계 관리)
      : 고객의 구매이력 데이터를 분석하여 고객에 대한 이해도를 높이고 이를 바탕으로 효과적이고 효율적인 마케팅 전략을 펼치는 것
  • 기업 내부 데이터베이스 종류 정리
    • ERP(Enterprise Resource Planning, 경영 자원 통합 관리)
      : 기업이 보유한 자원을 효율적인 활용과 분배를 위한 목적
    • RTE(Real Time Enterprise, 실시간 기업)
      : 업무 프로세스 중 발생하는 정보들에 신속한 대응을 하기 위한 목적
  • 사회기반구조로서의 데이터베이스
    • 물류 부문
      • ‘실시간 차량 추적’을 위한 종합물류정보망 구축
      • CVO 서비스(Commercial Vehicle Operation System, 화물운송정보)
      • EDI 서비스 : 주문서, 납품서, 청구서 등 무역에 필요한 여러 서류를 표준화된 양식을 통해 컴퓨터통신망을 이용하여 거래처에 전송하는 시스템
      • VAN : 부가가치통신망, 공중 전기통신사업자(예컨대 한국전기통신공사)로부터 통신회선을 차용하여 독자적인 네트워크를 형성하는 것
      • CALS(Commerce At Light Speed) : 제품의 설계, 개발, 생산에서 유통, 폐기에 이르기까지 제품의 라이프사이클 전반에 관련된 데이터를 통합하고 공유, 교환할 수 있도록 한 경영통합정보시스템
      • PORT-MIS : 해양수산부의 항만운영정보시스템
      • KROIS : 철도청의 철도운영정보시스템
      • 데이터베이스 서비스(물류정보), 부가서비스로 구성
    • 지리 부문
      • 지리정보유통망이 가시화 : 국토교통부의 지리정보 유통센터를 중심으로 지리정보통합 관리소 운영, 지리정보 수요자에게 정보 제공
      • GIS 응용에 활용하는 4S 통합기술
      • GIS(Geographic Information System): 지리정보시스템
      • RS(Remote Sensing) : 원격탐사
      • GPS(Global Positioning System) : 범지구위치결정시스템
      • LBS(Location-Based Service) : 위치정보서비스
      • SIM(Spatial Information Management) : 공간정보 관리시스템
    • 교통 부문
      • ITS(Intelligent Transport system) : 지능형교통시스템
      • 교통정보, 기초자료 및 통계 제공 등 대국민서비스 확대
    • 의료 부문
      • 의료정보시스템 : 처방전달시스템, 임상병리, 전자의무기록, 영상처리시스템, 병원의 멀티미디어, 원격의료, 지식정보화
      • HL7 국내 표준화 작업에 따라 전국적인 진료 정보 공유 체계 구축 계획 수립
      • PACS (Picture Archiving and Communications System)
      • U헬스 (Ubiquitous-Health)
    • 교육 부문
      • NEIS (National Education Information System) 교육행정정보시스템
      • 첨단 정보통신기술(ICT)을 활용한 각종 교육정보 개발 및 보급, 정보 활용 교육,
      • 대학정보화 및 교육행정정보화 위주로 사업을 추진

 


 

…노트북이 얼른 왔으면 좋겠다.

오늘 내 노트북도, 그리고 나도 너무 많이 무리했다.