A. 주제

주제: 데이터 시각화 101: ①데이터 시각화는 왜 중요할까?, 신유진, 2022.10.21

데이터 시각화 101: ① 데이터 시각화는 왜 중요할까? | 요즘IT (wishket.com)

 

B.요약

데이터 시각화의 중요성과 효과를 다루었다.. 시각화를 통해 데이터를 쉽게 이해하고, 인사이트를 발견할 수 있는 방법을 설명하였다. 사례를 통해 시각화가 의사결정에 도움을 주는 방식을 보여주었다.특히, 시각 정보의 빠른 처리 능력과 직관적인 이해가 데이터 분석에 중요한 역할을 한다 강조하였다.

 

C. 주요포인트

1. 일상 속 데이터 시각화

a. 교통 정보(노선 정보, 총 소요시간, 경로의 위치 정보 등)

b. 태풍의 예상경로 지도

c. 설문조사 How people in America Spend Their Day 결과

d. 미국의 범죄자 수용 비용과 그들의 출신지역간의 상관관계

 

2. 시각화를 통해 데이터가 공유되는 이유

a. 시각정보는 쉽게 알아볼 수 있음

b. 뇌가 그래픽 정보를 처리하는 순간 인사이트 발견 가능

c. 의사결정에 도움을 줌

 

3. 정보가 시각요소로 매핑되는 과정이 적절히 디자인되어야 함

 

D.용어 정리

1. 매핑: 어떤 값을 다른 값에 대응시키는 과정

 

A-1.  한 걸음 더 나아가고자 하는 코드

SELECT *
FROM CAR_RENTAL_COMPANY_CAR
WHERE OPTIONS LIKE '%네비게이션%'
ORDER BY CAR_ID DESC

- 기존에 자주 사용하던 LIKE 를 사용하지 않고 해당 문자열을 포함하는 데이터만 추출하고자 한다.

 

A-2. 한 걸음 더 나아간 코드

SELECT *
FROM CAR_RENTAL_COMPANY_CAR cr
WHERE INSTR(OPTIONS,'네비게이션') > 0
ORDER BY CAR_ID DESC

▶ INSTR('기준문자열' , '찾고자 하는 문자열')

▷ 기준 문자열에서 찾고자 하는 문자열이 있을 경우 존재하는 문자열의 위치값을 알려준다.

 - OPTIONS 문자열에서 '네비게이션'을 포함하는 데이터를 추출하고자 한다.

- INSTR 사용 시 '네비게이션'이 문자열에 있다면 위치값을 표시함으로 0보다 큰 값 추출된다.

- SQL의 경우 첫 번째 문자열의 위치값 = 1

 

B-1. 한 걸음 더 나아가고자 하는 코드

SELECT U.USER_ID
     , U.NICKNAME
     , CONCAT(U.CITY,' ' , U.STREET_ADDRESS1,' ',U.STREET_ADDRESS2) '전체주소'
     , CONCAT(SUBSTRING(U.TLNO,1,3), '-', SUBSTRING(U.TLNO,4,4),'-',SUBSTRING(U.TLNO,8,4)) '전화번호'
FROM USED_GOODS_BOARD B INNER JOIN USED_GOODS_USER U ON B.WRITER_ID = U.USER_ID
GROUP BY U.USER_ID
HAVING COUNT(U.USER_ID)>=3
ORDER BY USER_ID DESC

- 전화번호의 형식을 다음과 같이 변경하고자 한다.

- '01012341234' → '010-1234-1234'

- 기존 SUBSTRING을 사용하여 기준위치부터 원하는 길이만큼 잘라 하이폰(-)과 함께  CONCAT 으로 이어붙였다.

 

B-2. 한 걸음 더 나아간 코드

SELECT U.USER_ID
      ,U.NICKNAME
      ,CONCAT_WS(' ', U.CITY, U.STREET_ADDRESS1, 
                              U.STREET_ADDRESS2) AS 전체주소 
      ,CONCAT_WS('-', SUBSTRING(U.TLNO, 1,3), 
                      SUBSTRING(U.TLNO, 4,4), 
                      SUBSTRING(U.TLNO, 8,4)) AS 전화번호
FROM USED_GOODS_BOARD B INNER JOIN USED_GOODS_USER U ON B.WRITER_ID = U.USER_ID
GROUP BY U.USER_ID
HAVING COUNT(U.USER_ID)>=3
ORDER BY USER_ID DESC

▶ CONCAT_WS ('구분자' , '문자열1', '문자열2')

▷ 구분자를 사용하여 문자열을 연결할 때 사용되는 함수

- 구분자는 결과 문자열의 각 구성 요소 사이에 삽입된다.

- 문자열 개수는 필요한 만큼 늘릴 수 있다.

- 구분자를 사용하여 문자열을 나누고 연결할 때 주로 사용한다.

- CONCAT과의 차이점

  * 구분자를 사용하지 않고 문자열을 단순히 연결한다.

  * 구분자를 사용하고자 한다면, 문자열 사이에 구분자를 일일이 작성하여야 한다.

- 구분자 사용여부에 따라 선택하여 문자열을 연결하면 된다.

A. 데이터베이스와 데이터 분석

- 데이터베이스(DataBase, DB): 저장된 데이터

- 데이터를 다룰 사람으로써 각각의 데이터를 어떤 방식으로 저장할 것인지, 어떤 방법으로 구조화하고자 하는지 알 필요가 있다.

 

B. DBMS(Database Management System)

- 데이터를 체계적으로 저장하고 관리할 수 있게 도와주는 프로그램

- 데이터를 효율적으로 관리하기 위해 사용 → 데이터를 어떻게 관리할 것인지, 어떤 구조로 만들지 고민해야한다.

- 해당 프로그램을 통해 저장, 검색, 수정, 삭제 할 수 있다.

- 핵심: 키, 정규화, 제약조건

 

C. 키

- 데이터를 고유하게 식별

- 키를 통해 데이터베이스 내 특정 데이터를 찾기 쉽다.

1) 기본키(Primary Key)

  - 테이블에서 각 행을 유일하게 식별

  - 유일성과 최소성 만족, 후보키에서 선택된다.

  - 중복X, NULL X

2) 후보키 (Candidate Key)

  - 유일성과 최소성 만족

3) 대체키 (Alternate Key)

  - 후보키에서 선택 안된 키이다.

4) 외래키(Foreign Key)

  - 다른 테이블의 기본 키 참조한다.

  - 테이블들 간의 관계를 나타내기 위해 사용한다.

 

D. 정규화 (Normalization)

- 데이터 중복을 최소화하고 데이터를 구조화하는 과정이다.

- 데이터베이스의 무결성 유지 및 쉬운 관리를 위해 사용한다.

   ▶ 데이터베이스의 무결성

      *데이터무결성: 데이터의 정확성과 일관성을 유지한다.

       * 특징: 데이터를 신뢰할 수 있게 한다.

       * 유형: 참조 무결성    : 외래키가 참조하는 값 반드시 존재하여야 한다.

                  도메인 무결성 : 데이터가 정의된 도메인에 속한다.

                  엔터티 무결성 : 기본키는 중복되거나 NULL이 될 수 없다.

 

1) 1NF (제1정규형)

- 모든 필드가 원자값을 갖는다.

 

2) 2NF (제2정규형)

- 1NF만족 & 부분적 함수 종속 제거한다.

- 데이블에 관련된 정보만 넣는다.

 

3) 3NF

- 2NF 만족 & 이행적 함수 종속 제거한다.

- 그 테이블 내에서 중복된 데이터 제거한다.

- 테이블이 구조화되고 중복이 최소화된다.

- 성능 저하 가능서이 있다.

 

 

E. 제약조건

- 데이터가 특정 규칙을 따르도록 함

- 이유: 데이터의 무결성 유지를 위함

- 데이터베이스의 테이블이 상식적이어야 함

- 오염되지 않은 데이터가 있는지 확인 가능함

 

 

F. DB 공부 방법

- RAW 데이터를 가지고 직접 관계를 만들어 보는 것이 가장 큰 도움이 되었다.

- DB 처리 속도 차이를 확인해보는 것이 큰 도움이 될 것이다.

- 데이터 분석가에게 원하는 데이터를 만들어낼 역량이 있는가도 생각해 봐야겠다.

A. 어떤 문제가 있었는지

- 딕셔너리는 인덱싱이 안되었다.

- for문을 사용하였지만 player_positins 리스트 각각의 결과가 나오지 않고 값 한개만 출력되었다.


B. 내가 시도해본 것

player_positions = {
    "John Doe": [(0, 0), (1, 1), (2, 2), (5, 5)],
    "Jane Smith": [(2, 2), (3, 8), (6, 8)],
    "Mike Brown": [(0, 0), (3, 4), (6, 8)]
}

def calculate_total_distances(player_positions):
    name = player_positions.keys()
    for i in name:
        spot = list(player_positions[i])
        for j in range(len((spot))):
            x1= spot[j-1][0]
            x2= spot[j][0]
            y1= spot[j-1][1]
            y2= spot[j][1]
            distance = (((x1-x2)**2) + ((y1-y2)**2))**(1/2)
            distance += distance
        break
    return distance
    
result=calculate_total_distances(player_positions)
print(result)

출력값: 8.48528137423857


C. 어떻게 해결했는지

import math

def calculate_total_distances(player_positions):
    for player, positions in player_positions.items():
        total_distance = 0.0
        for i in range(1, len(positions)):
            x1, y1 = positions[i - 1]
            x2, y2 = positions[i]
            distance = math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2)
            total_distance += distance
        print(f"{player}의 총 누적 이동 거리: {total_distance:.2f} 미터")

# 선수별 위치 데이터
player_positions = {
    "John Doe": [(0, 0), (1, 1), (2, 2), (5, 5)],
    "Jane Smith": [(2, 2), (3, 8), (6, 8)],
    "Mike Brown": [(0, 0), (3, 4), (6, 8)]
}

# 총 누적 이동 거리 계산 실행
calculate_total_distances(player_positions)

# 실행 결과
# John Doe의 총 누적 이동 거리: 7.07 미터
# Jane Smith의 총 누적 이동 거리: 9.08 미터
# Mike Brown의 총 누적 이동 거리: 10.00 미터


D. 무엇을 새롭게 알았는지
- for문에 변수 지정을 1개 이상 할 수 있다.

- 디버깅을 하면 코드 흐름을 따라가며 오류 수정이 가능하다.

A. 어떤 문제가 있었는지

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

제한 조건
- x는 -10000000 이상, 10000000 이하인 정수입니다.
- n은 1000 이하인 자연수입니다.

- 어떻게 풀어야 하는지 모르겠다.

- 구조를 어떻게 짜면 좋을지 아이디어가 떠오르지 않았다.


B. 내가 시도해본 것

- X부터 X만큼 건너뛰어 N개의 수를 구하기 위하여 for 문을 활용하여 answer 리스트를 채우고자 하였다.

- answer 리스트에 들어가는 개수가 n과 같다면 그 i를 answer 리스트에 넣어 그 값을 구하고자 하였다.

- 틀린 이유: answer = [ i, i*n , i ] 는 입력값으로 출력될 뿐 그 안에 i부터 i*n까지 i만큼 건너뛰지는 않았다.

 

- answer 리스트에 i 와 i*n의 값만 들어가므로 n이 2인 테스트는 통과하였으나 그 외의 테스트는 통과하지 못하였다.

 

- answer 리스트 안에 for문을 넣어 range를 사용해 범위를 지정해주었다.

- range( ) 범위 지정 시, 그 특성에 따라 시작값 x, 끝값 x*n, 건너뛸 숫자x 를 작성했다.

- x부터 시작하여 x만큼 건너뛰어 n개를 출력하고자 하였다.

- len( )을 이용하여 answer 리스트의 요소 개수가 n개 일 때 answer를 반환하고자 하였다.

- 테스트 중 1개 항목에서 런타임 에러로 실패하였다.

- 실패 요인 중 하나로 n == 0 일 때 처리 방법을 지정하지 않았다.

- 그 외에 어떤 요인들이 테스트 항목에서 예외를 발생시켰는지 알 길이 없다.


C. 어떻게 해결했는지

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

- for 문을 통해  리스트의 개수를 설정하는 방법이다.

- len()을 통해서만 리스트의 개수를 제한할 수 있는 것은 아니다.

- range(n)을 통해 1부터 n까지의 i를 반환한다.

- 기존 x 값에 for문을 통해 불러온 i (1~n)*x 를 더하면 x, x*1, x*2, x*3 .... 의 리스트가 완성된다.

- 해당 값을 기존 answer 리스트에 추가하는 append ( ) 메서드를 사용하면 return 값으로 [x,x*1,x*2,x*3...] 의 결과가 추출된다.

 

D. 무엇을 새롭게 알았는지

- 문제를 읽고 문장이 뜻하는 바를 먼저 생각하자.

- 하나의 방법에 빠지지 말아야 한다는 것을 배웠다.

- x부터 x만큼 건너뛰고, n개를 추출하라는 이야기는 x의 곱셈과 무엇이 다르단 말인가.

- 곱셈 정의: 덧셈의 반복

- x+x  → x*2  →  x부터 x만큼 건너뛰고, n=2 → x, x*2 → 2개 반환

- x+x+x → x*3 → x부터 x만큼 건너뛰고, n=3 → x,x*2,x*3 → 3개 반환

 

번외) Programmers에 있는 해당 문제 타인의 풀이

def number_generator(x, n):
    return [i * x + x for i in range(n)]

천재인가 보다...

A. 어떤 문제가 있었는지

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

 

오류가 발생하지 않지만 테스트 통과가 불가능했다.

 

B. 내가 시도해본 것

def solution(n):
    for i in range(2,n):
        n % i == 1
    return i

 

11개의 테스트 중 4개 항목만 통과되어 36.4점의 정확도를 나타냈다.

 

C. 어떻게 해결했는지

for 반복문에 break를 걸어줌으로써 정확도를 높일 수 있었다.

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


D. 무엇을 새롭게 알았는지

1) break 정의: 반복문 흐름을 제어하고자 사용하는 함수

2) break 사용 이유: 루프를 조기에 종료하여 불필요한 반복을 피하기 위하여 사용된다.

 

코드 단계별 설명

def solution(n):
    answer = 0    	    # 변수 초기화, 조건을 만족하는 i 값 저장
    
    for i in range(1,n):    # i를 1부터 n-1까지 순차적으로 증가시키며 반복
        if n%i == 1:        # n을 i로 나눈 나머지가 1인지 검사 
            answer = i      # 조건이 True 인 경우, answer 변수에 현재 i 값 저장
            break           # 루프 조기 종료
  
    return answer           # answer 값 반환

 

break를 사용하면 조건을 만족하는 첫번째 i 를 찾았을 때 바로 루프가 종료되어 불필요한 반복을 피할 수 있어 효율적이다.

break가 없는 코드는 조건을 만족하는 i를 찾은 후에도 루프를 계속해서 실행하므로 정확도가 낮을 수 밖에 없다.

 

A. 어떤 문제가 있었는지

Python 기초 내용 정리가 필요함.


B. 내가 시도해본 것

[내용 정리]

1. 데이터 타입

* sequence : (일련의) 연속적인 사건들[행동들/숫자들 등], (사건,행동 등의) 순서, 차례

 

2. 리스트, 튜플, 딕셔너리

구분 리스트 튜플 딕셔너리
정의 여러 항목을 담을 수 있는 가변한 시퀀스 자료형 변경할 수 없는 시퀀스 자료형 키-값 쌍의 데이터를 저장하는 자료 구조
특징 리스트 내 요소 추가, 삭제, 수정 가능 튜플 내 요소 추가, 삭제, 수정 불가 각 키는 유일해야하지만 지정 값은 중복 가능
생성 my_list = [1,2,"hello",[3,4]] my_tuple=( 1,2,'hello" ) my_dic = {'name' : 'John',
                 'age' : 85}
인덱싱 print(my_list[0])  #출력: 1 print(my_tuple[0])  #출력: 1 print(my_dic['age'])  #출력: 85

 

인덱싱: 자료형에서 특정 위치의 값에 접근하는 방법, 0부터 값을 가짐.

my_list = [1,2,"hello",[3,4]] 0 1 2 3 4
리스트 내
순서
  1 2 hello [3,4]
인덱스 번호 1 2 hello [3,4]  

해당 리스트의 4번째 값은 없음.


C. 어떻게 해결했는지

비교하여 정리하고, 예제를 풀어봄.


D. 무엇을 새롭게 알았는지

튜플은 해당 값을 추가, 삭제, 수정할 수 없어 해당 데이터를 보호할 때 사용함.

A. 어떤 문제가 있었는지

SQL 코드카타 중 JOIN 문제에 대하여 계속 같은 오류가 발생하였다.

Column 'ANIMAL_ID' in field list is ambiguous

 

B. 내가 시도해본 것

칼럼명 앞에 테이블 이름을 작성하였다.


C. 어떻게 해결했는지

해당 오류는 칼럼명이 모호하기에 나타나며, 이를 해결하기 위하여 칼럼명 앞에 테이블 이름을 작성하였다.

SELECT I.ANIMAL_ID, I.NAME
FROM ANIMAL_INS I INNER JOIN ANIMAL_OUTS O ON I.ANIMAL_ID = O.ANIMAL_ID
ORDER BY O.DATETIME - I.DATETIME DESC LIMIT 2


D. 무엇을 새롭게 알았는지

SQL의 기본에 충실해야한다.

FROM > WHERE > GROUP BY > HAVING > SELECT > ORDER BY

 

※ 추가적인 사항

SQL과 Python 수강 완료 후 어떤 것들을 추가적으로 공부하면 좋을지에 대한 의문.

의미있는 시간을 보내고 싶었음.

튜터에게 현 상황을 설명하고 어떤 것을 공부하면 좋을지에 대해 조언을 받음.

[가장 우선적으로 할 것]

1. ADsP 및 SQLD 자격증 취득

2. 관련 교양 책 (데이터 문해력, 그로스 해킹 등)

3. 통계 관련 기초 지식 쌓기

이후 데이터분석 학습법에 대한 특별 강의가 이루어져 멘토링과 해당 강의를 들으면서 어떤 준비들을 해 나아가야할지 고민하는 시간을 가졌고, 앞으로 어떤 준비들을 해야할지 대략적인 방향을 잡을 수 있었다.

A. 어떤 문제가 있었는지

SQL 코드카타 중 SQL WHERE절에 LIKE문, IN문의 사용 방식이 익숙하지 않다.

문제
보호소의 동물이 중성화되었는지 아닌지 파악하려 합니다.
중성화된 동물은 
SEX_UPON_INTAKE 컬럼에 'Neutered' 또는 'Spayed'라는 단어가 들어있습니다.
동물의 아이디와 이름, 중성화 여부를 아이디 순으로 조회하는 SQL문을 작성해주세요.
이때 중성화가 되어있다면 'O', 아니라면 'X'라고 표시해주세요.

 

B. 내가 시도해본 것

1. WHERE절에 IF문 활용

SELECT ANIMAL_ID, NAME,SEX_UPON_INTAKE
FROM ANIMAL_INS
WHERE IF (SEX_UPON_INTAKE IN ('Neutered','Spayed'),'O','X') 중성화
ORDER BY ANIMAL_ID

 

2-1. SELECT 절에 CASE문 활용

SELECT ANIMAL_ID, NAME,
CASE WHEN SEX_UPON_INTAKE LIKE '%Neutered%' THEN 'O',
WHEN SEX_UPON_INTAKE LIKE '%Spayed%' THEN 'O',
ELSE 'X' END 중성화
FROM ANIMAL_INS
ORDER BY ANIMAL_ID

 

2-2. SELECT 절에  CASE문 활용

SELECT ANIMAL_ID, NAME,
CASE WHEN SEX_UPON_INTAKE LIKE '%Neutered%'
OR SEX_UPON_INTAKE LIKE '%Spayed%' THEN 'O',
ELSE 'X' END 중성화
FROM ANIMAL_INS
ORDER BY ANIMAL_ID

 

2-3. SELECT 절에  CASE문 활용

SELECT ANIMAL_ID, NAME,
CASE WHEN SEX_UPON_INTAKE LIKE '%Neutered%' THEN 'O'
WHEN SEX_UPON_INTAKE LIKE '%Spayed%' THEN 'O'
ELSE 'X' END 중성화
FROM ANIMAL_INS
ORDER BY ANIMAL_ID

ERROR

/* You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '중성화 ORDER BY ANIMAL_ID' at line 6 */

 

3. SELECT 절에 IF 문 활용

SELECT ANIMAL_ID, NAME,
IF((SEX_UPON_INTAKE LIKE 'Nuatered%' OR SEX_UPON_INTAKE LIKE 'Spayed%'),'O','X') 중성화
FROM ANIMAL_INS
ORDER BY ANIMAL_ID

정답이 아님.

 

C. 어떻게 해결했는지

1. SELECT절에 CASE문 활용

SELECT ANIMAL_ID, NAME,
CASE WHEN SEX_UPON_INTAKE LIKE '%Neutered%'
OR SEX_UPON_INTAKE LIKE '%Spayed%' THEN 'O'
ELSE 'X'
END 중성화
FROM ANIMAL_INS
ORDER BY ANIMAL_ID

 

2. SELECT절에 IF문 활용

SELECT ANIMAL_ID, NAME,
IF((SEX_UPON_INTAKE LIKE 'Neutered%' OR SEX_UPON_INTAKE LIKE 'Spayed%'),'O','X') 중성화
FROM ANIMAL_INS
ORDER BY ANIMAL_ID

 

D. 무엇을 새롭게 알았는지

1. WHERE 절에 IF문을 사용하지 않음. WHERE절이 이미 IF문과 비슷한 역할을 함. 이에 여러 조건을 내걸고 싶다면 AND, OR 등을 사용한다.

2. CASE문을 사용할 때 여러 조건을 사용할 시 CASE WHEN ~ WHEN~ END 로 중간 쉼표(,)를 사용한다.

3. 오타에 주의해야 한다.

 

그 외 문제를 풀면서 새롭게 안 사실

1. HOUR 함수를 사용하면 DATE의 '시' 만 출력한다.

SELECT HOUR(DATETIME) HOUR, COUNT(ANIMAL_ID) COUNT
FROM ANIMAL_OUTS
WHERE HOUR(DATETIME) BETWEEN 9 AND 19
GROUP BY HOUR(DATETIME)
ORDER BY HOUR(DATETIME)

 

2. MySQL 5.8 이상부터는 성능 이슈로 인해 SELECT에 포함되지 않은 컬럼으로 정렬할 수 없다.

SELECT FLAVOR
FROM FIRST_HALF
GROUP BY FLAVOR
ORDER BY SUM(TOTAL_ORDER) DESC, SHIPMENT_ID

 

3. WHERE 절에 REGEXP함수를 사용하면 LIKE 연산자를 여러 번 사용한 코드와 같은 결과를 출력한다.

SELECT CAR_TYPE,COUNT(*) CARS
FROM CAR_RENTAL_COMPANY_CAR
WHERE OPTIONS REGEXP ('통풍시트|열선시트|가죽시트')
GROUP BY CAR_TYPE
ORDER BY CAR_TYPE
SELECT CAR_TYPE,COUNT(*) CARS
FROM CAR_RENTAL_COMPANY_CAR
WHERE OPTIONS LIKE '%통풍시트%'
OR OPTIONS LIKE '%열선시트%'
OR OPTIONS LIKE '%가죽시트%'
GROUP BY CAR_TYPE
ORDER BY CAR_TYPE

 

A. 어떤 문제가 있었는지

'데이터 리터러시'에 대하여 이해하고, 나에게 적용할 수 있는 방법을 찾을 수 있는 점을 찾는 것이 어려움.

 

B. 내가 시도해본 것

내일배움캠프에서 제공한 '데이터 리터러시' 강의 수강 및 관련 아티클을 찾아봄.

 

C. 어떻게 해결했는지

추천 책인 '데이터 문해력'과 '로지컬 씽킹' 이라는 도서를 찾아봄.

완벽한 해결책을 찾지는 못하였으나, 아티클에서 본 아래의 방법을 사용하여 그동안 다루었던 데이터를 재분석하고자함.

[데이터/실험 기반 사고방식]

1. 해결하려는 문제 → 문제 정의

2. 관련  OKR → 분석 목표와  align 되어있는지

3. 측정 지표 → 문제와 지표가  align 되어있는지, 측정 가능한 것인지

4. 가설 검증 기준 → 성공 여부를 어떻게 판단할 것인지

5. 검증 후 변화될 액션 의미 없는 액션을 하는게 아닌지

6. 결과 → 검증 기준으로 결과가 나왔는지

7. 학습한 점 → 어떤 학습을 했고, 다음 실험에는 어떻게 반영될 것인지

데이터 리터러시(Data Literacy)를 올리는 방법, 화해팀, 2022.08.08 아티클 中

 

D. 무엇을 새롭게 알았는지

데이터 분석가의 필수 역량은 데이터를 추출하는 능력이 전부라고 생각하였으나, 전혀 그렇지 않음.

문제의 정의가 얼마나 중요하고, 어떤 문제를 중심으로 어떤 이에게 결과를 보여줄 것인지 고민하고, 그에 따른 문제 해결 방법 등의 결론을 도출하는 것이 얼마나 중요한지를 새롭게 알게됨.

데이터를 표와 그래프만을 바라보는 것이 아니라 어떤 방법으로 얼마나 논리적으로 해석해낼 수 있어야 하는지에 대하여 고민함.

+ Recent posts