Загружаем каталог…
Загружаем каталог…
오늘의 명언 : A discovery is said to be an accident meeting a prepared mind. _ Albert Szent-Gyorgyi "발견은 준비된 사람이 맞닥뜨린 우연이다." _ 알베르트 센트죄르지 오늘은 새로운 챕터인 전처리 및 시각화 파트에 들어갔다. 사실 가장 기대하고 또 열심히 해야겠다고 생각한 파트이기도 하다.. 최선을 다해서 달려보자~! 데이터 전처리 및 시각화 Day 1 오늘부터 새로운 과정인 데이터 전처리 및 시각화 를 시작했다. 그런데 첫날이라 그런지 본격적으로 Pandas를 이용해서 데이터를 만진다기보다는 데이터 분석은 왜 하는가? 데이터 전처리는 왜 필요한가? 앞으로 무엇을 배우게 되는가? 를 먼저 알아보는 오리엔테이션에 가까운 수업이었다. 그래서 오늘은 강의 내용 자체는 가볍게 정리하고 코드카타에서 새롭게 배운 부분을 조금 더 자세하게 기록해보려고 한다. 1. 데이터 분석은 왜 할까? 처음에는 데이터 분석이라고 하면 단순히 데이터를 계산하고 정리하는 일이라고 생각하기 쉬운데 오늘 강의에서는 데이터의 목적을 설득 이라고 표현했다. 데이터를 분석하는 것 자체가 목적이 아니라 어떤 문제가 있는지 확인하고 데이터를 통해 근거를 만들고 그 결과를 다른 사람에게 전달하고 의사결정을 할 수 있도록 만드는 것 까지가 중요하다는 의미였다. 특히 데이터가 아무리 많아도 전달하려는 내용이 명확하지 않으면 의미가 없기 때문에 시각화 역시 단순히 그래프를 예쁘게 만드는 기술이 아니라 분석 결과를 빠르게 이해시키기 위한 방법이라고 볼 수 있었다. 2. 전처리부터 무작정 시작하면 안 된다 오늘 가장 기억에 남았던 부분이다. 데이터를 받자마자 바로 가공하는 것이 아니라 먼저 목표 무엇을 확인하려고 데이터를 분석하는가? 예상 산출물 최종적으로 어떤 결과를 만들 것인가? As-is 현재 어떤 문제가 있는가? To-be 분석을 통해 무엇을 개선하고 싶은가? 를 생각해야 한다. 예를 들어 품질 데이터가 있다고 하면 단순히 "불량 데이터를 정리해야겠다" 가 아니라 "최근 불량률이 증가한 원인을 확인하기 위해 생산라인별 불량률을 비교할 수 있도록 데이터를 가공한다." 처럼 목적부터 정하는 것이 더 중요하다는 것이다. 품질관리에서도 꽤 중요한 사고방식이라고 느꼈다. 3. 데이터 전처리란? 데이터 전처리는 쉽게 말해서 내가 원하는 데이터를 보기 위해 데이터를 가공하는 모든 과정 이라고 이해했다. 실제 데이터는 생각보다 깔끔하지 않다. 예를 들어 성별 데이터가 남 남성 여 여자 여성 처럼 작성되어 있을 수도 있고 전화번호도 010-1234-5678 01012345678 010-12345678 처럼 형식이 제각각일 수 있다. 이런 데이터를 분석하려면 먼저 같은 의미를 가진 데이터들을 동일한 형식으로 맞춰야 한다. 품질 데이터에서도 비슷할 것 같다. 치수불량 치수 불량 치수NG Dimension NG 같은 데이터가 있다면 그대로 분석하기보다 하나의 기준으로 통일하는 작업이 먼저 필요할 것이다. 앞으로 이런 작업을 Pandas를 이용해서 배우게 된다. 4. Excel과 Pandas Excel도 데이터를 다루는 데 굉장히 좋은 도구지만 Pandas는 Python 코드로 데이터를 처리하기 때문에 반복적인 작업을 자동화하기 좋다는 장점이 있다. 특히 앞으로 배우게 될 작업은 데이터 정렬 데이터 필터링 집계 결측값 처리 데이터 가공 시각화 등이다. 오늘은 깊게 들어가지는 않았고 Pandas에서 사용하는 데이터 구조를 간단히 살펴봤다. DataFrame 표 형태의 데이터 Excel의 표를 생각하면 이해하기 쉽다. 제품 생산량 불량수 0 A 100 3 1 B 120 5 2 C 90 2 Series DataFrame에서 하나의 열을 가져온 형태라고 생각하면 된다. 예를 들어 생산량 100 120 90 하나의 속성을 가진 데이터 집합이다. 아직은 개념만 알아두고 앞으로 실제 Pandas 코드를 사용하면서 익숙해지면 될 것 같다. 5. 오늘의 코드카타 오늘도 Python 코드카타를 진행했다. 오늘은 특히 문자열 처리와 zip() 그리고 반복문을 이용한 누적 계산 문제가 많이 나왔다. 6. 수박수박수박수... 길이 n 에 맞게 수박수박수박... 패턴을 만드는 문제였다. 처음에는 이런 아이디어를 전혀 생각하지 못했다. 가장 간단한 방법은 def solution(n): return ("수박" * n)[:n] 이었다. 예를 들어 "수박" * 3 을 하면 수박수박수박 이 되고 [:3] 으로 앞의 세 글자만 가져오면 수박수 가 된다. 문자열도 숫자처럼 * 를 이용해서 반복할 수 있다는 것을 다시 확인했다. 하지만 지금 나한테 더 이해하기 쉬운 정석 풀이는 아래 방식이었다. def solution(n): answer = "" for i in range(n): if i % 2 == 0: answer += "수" else: answer += "박" return answer 인덱스가 0 1 2 3 4 ... 로 진행되기 때문에 짝수 → 수 홀수 → 박 을 넣는 방식이다. 오늘의 포인트 같은 문제라도 반복문으로 직접 구현하는 방법 문자열의 규칙을 이용해서 간단하게 만드는 방법 둘 다 존재할 수 있다. 아직은 정석적인 반복문 풀이를 먼저 이해하고 짧은 풀이는 새로운 아이디어로 챙겨가는 게 좋은 것 같다. 7. 두 배열의 내적과 zip() 두 리스트의 같은 위치에 있는 숫자를 곱한 뒤 모두 더하는 문제였다. a = [1, 2, 3] b = [4, 5, 6] 이라면 1 × 4 2 × 5 3 × 6 을 모두 더하면 된다. 인덱스를 이용하면 def solution(a, b): answer = 0 for i in range(len(a)): answer += a[i] * b[i] return answer 으로 해결할 수 있다. 그런데 이전에도 한 번 배웠던 zip() 을 사용하면 더 직관적으로 표현할 수 있었다. def solution(a, b): answer = 0 for x, y in zip(a, b): answer += x * y return answer zip(a, b) 는 같은 위치의 값을 묶어준다. a = [1, 2, 3] b = [4, 5, 6] 이면 (1, 4) (2, 5) (3, 6) 처럼 짝을 만들어준다. 그래서 for x, y in zip(a, b): 라고 하면 각각의 값을 바로 사용할 수 있다. 기억하기 zip() = 여러 리스트의 같은 위치 값을 묶어준다. 개인적으로 range(len()) 보다 zip() 방식이 더 직관적으로 느껴졌다. 8. 약수의 개수가 짝수인지 홀수인지 left 부터 right 까지의 숫자 중 약수의 개수가 짝수 → 더하기 약수의 개수가 홀수 → 빼기 를 하는 문제였다. 우선 약수를 직접 세는 방식으로 풀 수 있다. def solution(left, right): answer = 0 for n in range(left, right + 1): count = 0 for i in range(1, n + 1): if n % i == 0: count += 1 if count % 2 == 0: answer += n else: answer -= n return answer 여기서는 반복문이 두 번 사용된다. 첫 번째 반복문은 for n in range(left, right + 1): 각 숫자를 확인하기 위한 것이고 두 번째 반복문은 for i in range(1, n + 1): 해당 숫자의 약수를 찾기 위한 것이다. 그리고 if n % i == 0: 이면 나누어떨어지는 것이므로 i 가 약수라는 뜻이다. 추가로 새로운 규칙도 알게 되었다. 제곱수는 약수의 개수가 홀수이다. 예를 들어 16 은 1 × 16 2 × 8 4 × 4 에서 4 × 4 처럼 같은 숫자가 짝을 이루기 때문에 약수의 개수가 홀수가 된다. 그래서 제곱수인지 확인하는 방식으로도 문제를 풀 수 있다. if int(n ** 0.5) ** 2 == n: 예전에 완전제곱수 문제에서 봤던 코드가 다시 등장했다. 9. 문자열 내림차순 정렬 문자열을 큰 문자부터 작은 문자 순으로 정렬하는 문제였다. 처음부터 한 줄로 작성하기보다 단계별로 풀면 def solution(s): answer = list(s) answer.sort(reverse=True) answer = "".join(answer) return answer 이 된다. 흐름은 문자열 ↓ list() ↓ sort(reverse=True) ↓ join() ↓ 문자열 이다. 예를 들어 s = "Zbcdefg" 를 list(s) 하면 ['Z', 'b', 'c', 'd', 'e', 'f', 'g'] 가 되고 answer.sort(reverse=True) 하면 ['g', 'f', 'e', 'd', 'c', 'b', 'Z'] 가 된다. 마지막으로 "".join(answer) 을 사용하면 gfedcbZ 라는 문자열이 된다. 예전에 숫자를 내림차순으로 정렬했던 문제와 거의 같은 구조였다. 이번에는 처음부터 문자열이기 때문에 마지막에 다시 int() 로 변환할 필요가 없다는 차이가 있다. 10. 놀이기구 이용료 계산 놀이기구를 탈 때마다 가격이 1번째 → price × 1 2번째 → price × 2 3번째 → price × 3 ... 으로 증가하는 문제였다. 정석적으로 풀면 def solution(price, money, count): total = 0 for i in range(1, count + 1): total += price * i if total > money: return total - money else: return 0 으로 해결할 수 있다. 예를 들어 price = 3 money = 20 count = 4 라면 3 × 1 = 3 3 × 2 = 6 3 × 3 = 9 3 × 4 = 12 총 이용료는 3 + 6 + 9 + 12 = 30 이 되고 가진 돈이 20이므로 30 - 20 = 10 이 부족하다. 이 문제는 내가 지금까지 많이 연습했던 answer = 0 for ... answer += ... if ... 형태의 누적 계산 문제라 이전보다 훨씬 익숙하게 느껴졌다. 11. 오늘 새롭게 익힌 것 오늘 코드카타를 하면서 다시 느낀 것은 문제를 보고 바로 짧은 코드를 떠올리지 못해도 괜찮다는 것이다. 일단 내가 알고 있는 for if range % list sort join 같은 문법으로 하나씩 구현할 수 있으면 된다. 그다음 다른 사람의 풀이를 보면서 ("수박" * n)[:n] 처럼 문자열의 특성을 이용하거나 zip(a, b) 처럼 기존 반복문을 더 직관적으로 표현하는 방법을 하나씩 추가하면 된다. 특히 오늘 기억할 것은 zip() → 같은 위치의 값 묶기 "문자열" * n → 문자열 반복 [:n] → 앞에서 n개까지 자르기 sort(reverse=True) → 내림차순 정렬 "".join(list) → 문자 리스트를 문자열로 합치기 n % i == 0 → 약수인지 확인 answer += 값 → 반복하면서 값 누적 이다. 12. Day 1 마무리 오늘 데이터 전처리 및 시각화 수업은 본격적인 실습보다는 앞으로 무엇을 배우게 될지 방향을 잡는 시간에 가까웠다. 그래도 분석 목적 설정 → 필요한 데이터 전처리 → 분석 → 시각화 → 의사결정 이라는 전체적인 흐름을 먼저 이해할 수 있었다. 다음 수업부터 Pandas를 본격적으로 사용하게 되면 오늘 배운 왜 데이터를 전처리하는가? 라는 질문을 계속 생각하면서 코드를 작성해봐야겠다. 코드카타에서는 점점 새로운 문법 자체보다 기존에 배운 문법을 어떻게 조합해서 문제를 해결할지가 중요해지고 있는 것 같다. 특히 오늘은 zip() 을 다시 사용해본 것과 문자열 반복 + 슬라이싱처럼 내가 쉽게 떠올리지 못했던 풀이를 본 것이 가장 기억에 남았다. 이.해.완.료
То, что RADAR обнаружил и классифицировал для этой возможности. Это опубликованный источником текст, а не подтверждение, что предложение ещё действует.
[261002] 데이터 전처리, 시각화 Day 1. 오늘의 명언 : A discovery is said to be an accident meeting a prepared mind. _ Albert Szent-Gyorgyi "발견은 준비된 사람이 맞닥뜨린 우연이다." _ 알베르트 센트죄르지 오늘은 새로운 챕터인 전처리 및 시각화 파트에 들어갔다. 사실 가장 기대하고 또 열심히 해야겠다고 생각한 파트이기도 하다.. 최선을 다해서 달려보자~! 데이터 전처리 및 시각화 Day 1 오늘부터 새로운 과정인 데이터 전처리 및 시각화 를 시작했다. 그런데 첫날이라 그런지 본격적으로 Pandas를 이용해서 데이터를 만진다기보다는 데이터 분석은 왜 하는가? 데이터 전처리는 왜 필요한가? 앞으로 무엇을 배우게 되는가? 를…
Открыть источник