[데이터 분석 부트캠프] 4주차 진행 및 학습일지
[패스트 캠퍼스] 데이터 분석 부트캠프 4주차!!
이번주에도 계속해서 '데이터 분석을 위한 Tool, Python'을 배웠고, 마무리가 되었습니다!!
어느덧 7월의 중순,,,
어떤 내용들을 배웠는지 저의 솔직한 리얼 후기&반성&회고를 통해서 만나보시죠!!
무엇을 했는지 모르게 시간이 빨리가네요!! 이제는 배운 파이썬을 기반으로(배운거 맞나? 그만큼 사실 기초 배우고 바로 시작 ㅠㅠ)
다음주는 미니 프로젝트를 진행합니다~!! 패스트 캠퍼스는 데이터분석 부트캠프에서는 미니프로젝트 총 3번 + 파이널 프로젝트 4번으로 이루어져있는데요~ 그리고 패스트캠퍼스는 다른 부트캠프중에서 가장 기간이 짧죠!! 그게 장/단점인거 같은데,, 프로젝트 기간에는 프로젝트를 다 마친 후에 짧게나마 미니 프로젝트 회고로 찾아올테니 패스캠퍼스 부트캠프 수강 원하시는분들은 참고하시면 좋을 것 같습니다!! 언제나 문의 사항은 댓글로 알려주세용~!! 😆😆
[4주차 : Python 학습 및 정리 내용]
- 리스트 조작하기
- append 활용, extned(리스트) 활용, pop() 활용
- a = [0,1,2,3,4,5] # a의 리스트 인덱스 값을 사용함 0번째부터 하나씩 쓰고, 리스트가 뒤에서 하나씩 없어짐
- remomve() 활용 : remove()는 가장 처음 찾은 인덱스만을 삭제
- 스택은 LIFO(Last In First Out)구조를 갖는 자료(FILO First In Last Out) -> 먼저 들어가면 나중에, 나중에 들어가면 먼저 빼냄 ex) 접시 쌓기,인터넷 방문 기록
- 큐는 FIFO(First in Fisrt out) 구조를 가진 자료구조. (LILO Last In Last Out)
2. 리스트 할당과 복사 알아보기
a [0,0,0,0,0] , b = a.copy a의 주소를 복사해옴. 백업하거나, 따로 뽑아서 사용하고 싶을때 주로 사용
3. 리스트 표현식: [식 for 변수 in 리스트], list (식 for 변수 in 리스트 if 조건식)
4. 함수
- 파이썬은 함수(function)라는 기능을 제공하는데 특정 용도의 코드를 한 곳에 모아 놓은 것을 뜻함. 그래서 함수는 처음 한 번만 작성해 놓으면 나중에 필요할 때 계속 불러 쓸 수 있는 것이 매우 큰 장범. print, input 등도 모두 파이썬에서 미리 만들어 둔 함수.
- 함수 사용시 장점
- 코드의 용도를 구분할 수 있다.
- 코드를 재사용할 수 있다.
- 실수를 줄일 수 있다.
- 파이썬 스크립트에서 hello 함수의 실행 순서
- 함수의 덧셈, 결과를 반환(반환값)
- return으로 반환하는 값은 반환값이라고 하며 함수를 호출해준 바깥에 결과를 알려주기 위해 사용
- 함수에서 값을 여러 개 반환
- return으로 값을 여러 개 반환하면 실제로는 튜플을 반환. 다음과 같이 add_sub의 결과를 변수 한 개에 저장해서 출력해보면 튜플이 반환되는 것을 볼 수 있음.
5. 람다 표현식 : 이름이 없는 함수를 만들기에, 익명 함수라고도 함. 매개변수, 연산자, 값 등을 조합한 식으로 반환값을 만드는 방식임.
- 람다 표현식 안에서는 변수를 만들 수 없다, 변수 없이 한줄로 표현해야함
- 변수 선언하고 싶으면 밖에 지정해야함.
- 람다 표현식에 조건부 표현식 사용하기 lambda 매개변수들 : 식1 if 조건식 ese 조건식2
- map 함수를 사용하여 리스트 a에서 3의 배수를 문자열로 변환함
- 람다 안에서는 elif 사용불가, 식1 if 조건식1 else 식2, if 조건식2 else
별로 복잡하지 않은 조건인데도 알아보기가 힘듬. 이런 경우에는 억지로 람다 표현식을 사용하기 보다는,
그냥 def로 함수를 만들고 if, elif, else를 사용하는 것을 권장
>>> def f(x):
... if x == 1:
... return str(x)
... elif x == 2:
... return float(x)
... else:
... return x + 10
...
>>> a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> list(map(f, a))
['1', 2.0, 13, 14, 15, 16, 17, 18, 19, 20]
복잡하고 어렵게 코드를 작성하면 나중에 시간이 지나서 자기가 만든 코드인데도 못 알아보는 경우가 생기기에, 코드는 길이가 조금 길어지더라도 알아보기 쉽게 작성하는 것이 좋음.
- map에 객체를 여러 개 넣기 → 여러 객체를 받을때는 map을 사용 but 한가지로 받을때는 list를 써줘야함.
- 매개변수에 맞게 반복 가능한 객체도 콤마로 구분해서 넣으면 됨
a = [1,2,3,4,5]
b = [2,4,5,6,8,10]
list(map(lambda x,y : x*y, a,b))
- 파이썬은 대단히 친절하여 문법이 다양함, 새로운 문법이 나오면 여러가지를 확인하며 정리해야함.
6. 람다 표현식과 map, filter, reduce 함수 활용하기
- filter 사용하기
- def f(x) : return x > 5 and x < 10 a = [8,3,2,10,15,7,1,9,0,11] list(filter(f,a))
- reduce 사용하기 : 반복 가능한 객체의 각 요소를 함수 처리후 그 결과를 누적해서 함수에 반환
a = [1,2,3,4,5]
from functools import reduce
reduce(lambda x,y : x+y,a)
7. 클로저 사용하기
- 전역 변수 → 우리나라 한국은행 돈 / 지역 변수 → 지역 화폐(특정 지역,영역에서만 사용가능)
- 전역변수, 전역범위(global variable, global scope)
# 클로저 사용 - 변수의 사용범위 알아보기(전역변수)
x = 101 #전역 변수
def foo():
print(x) #전역 변수 출력
foo()
print(x) #전역 변수 출력
# 클로저 사용 - 변수의 사용범위 알아보기(지역변수)
def foo():
x = 10 # foo의 지역 변수
print(x) # foo의 지역 변수 출력
foo()
print(ㅌ) # 에러, foo의 지역 변수는 출력할 수 없음
# 클로저 사용 - 전역 변수 변경하기
def foo():
global g # g를 전역 변수로 만듬
g = 20 # g는 전역 변수
print(g)
foo() # 함수 출력
print(g) # 전역 변수 출력
# 클로저 사용 - 함수 안에 함수 만들기
def print_hello(): #2번
hello = 'hello, world!' # 3번
def print_message(): # 5번
print(hello) # 6번
print_message() # 4번
print_hello() # 1번, 7번
# 클로저 사용 - 함수 안에 함수 만들기 / 지역 변수 변경하기
def A():
x = 10 # A의 지역 변수 x
def B() :
x=20 # x에 20 할당
B()
print(x) # A의 지역 변수 x = 10 출력 / B() = 20이지만 B()의 지역변수라 A()의 변수에 영향 X
A()
- nonlocal이 변수를 찾는 순서 : 바깥쪽에 있는 지역 변수를 찾을때 가장 가까운 함수를 찾음 → 없으면 더 바깥쪽 함수를 찾음. 위의 y는 def A()까지 가게됨, y가 정의된게 def A() 라서.
- 클로저 사용하기 - mul_add 함수 사용
def calc():
a = 3
b = 5
def mul_add(x):
return a * x + b **# 함수 바깥쪽에 있는 지역 변수 a, b를 사용하여 계산**
return mul_add **# mul_add 함수를 반환 / 함수안에 있는 함수를 리턴함**
c = calc() # calc() = mul_add 가 됨. mul_add는 calc()의 a,b를 씀
print(c(1), c(2), c(3), c(4), c(5))
8. 파일의 입출력 과정
- 파일의 입출력 과정을 알기 전에 폴더 / 디렉토리의 개념에 대해서 알아야 이해하기 쉽다(전반적인 컴퓨터 지식이 필요함)
→ 요즘 코딩도 대신해준다는 chatgpt에 대한 답변을 한번 들어보자
디렉토리는 컴퓨터 시스템에서 파일을 구조적으로 저장하고 관리하기 위한 개념입니다. 디렉토리는 파일 시스템의 일부로서, 파일이나 다른 디렉토리를 포함할 수 있는 컨테이너 역할을 합니다.
일반적으로 디렉토리는 계층적인 구조로 구성되어 있습니다. 최상위 디렉토리는 루트 디렉토리라고도 하며, 그 아래에 다른 디렉토리와 파일들이 위치할 수 있습니다. 각 디렉토리는 고유한 이름을 가지고 있으며, 경로를 통해 접근할 수 있습니다. 경로는 디렉토리의 계층 구조를 따라 디렉토리와 파일을 찾는 데 사용됩니다.
디렉토리는 파일을 구조적으로 분류하고 관리하기 위해 사용됩니다. 예를 들어, 여러 개의 문서 파일을 '문서' 디렉토리에 저장하고, 사진 파일을 '사진' 디렉토리에 저장할 수 있습니다. 이렇게 함으로써 파일을 찾기 쉽고 조직적으로 관리할 수 있습니다.
또한, 디렉토리는 파일 시스템에서 접근 권한을 설정하는 데 사용될 수도 있습니다. 디렉토리에 대한 읽기, 쓰기, 실행 등의 권한을 설정하여 사용자 또는 프로그램이 해당 디렉토리와 그 안에 있는 파일들에 접근할 수 있는지 제어할 수 있습니다.
디렉토리의 개념은 다양한 운영 체제에서 사용되며, 예를 들어 Windows 운영 체제에서는 디렉토리를 '폴더'라고도 부르기도 합니다.
- 키보드로 입력하는 것은 표준 입력, 모니터로 출력하는 것은 표준 출력 키보드 + 모니터 합쳐서 콘솔이라고 함
- input 함수와 print는 키보드 및 모니터의 입출력
- 텍스트 파일 입출력 방법
# 텍스트 파일 입출력 방법
inFp = open("/content/drive/MyDrive/data1.txt", "r", encoding ="utf-8")
→ 파일 경로는 코랩을 구글 드라이브랑 마운트 시켜서 구글 드라이브에 있는 경로를 가져옴!!
9. GUI & Tkinter → chatgpt에 대한 답변
1) GUI는 Graphic User Interface로, 사용자 그래픽 인터페이스를 말합니다.
GUI는 컴퓨터 사용시에 유저가 그래픽을 이용하여 상호작용할 수 있도록 도와줍니다.
보통 우리가 컴퓨터로 환경설정을 할 때 뜨는 창, 버튼 등등을 GUI라고 할 수 있습니다. 이런 UI를 사용하면 사용자 입장에서 더 쉽고 직관적으로 컴퓨터를 조작할 수 있습니다.파이썬에서도 UI를 만들 수 있는데요, tkinter(티케이인터)라는 모듈로 구현이 가능합니다.
2) tkinter는 python에서 많이 사용하는 GUI모듈입니다.
kinter는 파이썬에 기본으로 내장되어 있어 따로 설치할 필요 없이 바로 사용이 가능합니다.
창을 생성하고, 버튼, 레이블(텍스트) 등의 위젯을 사용하여 프로그램 제작도 할 수 있습니다.
Tkinter를 사용하면 기본적인 UI + 기능 함수를 실행해 프로그램을 만듭니다.
Tkinter로 프로그램 생성시 크게 4단계로 진행이 됩니다.
이어서 파이썬의 핵심이라고 부르는 오픈 소스 라이브러리인 Numpy, Pandas, Matplotlibe, Seaborn까지 배운 내용을 구글 Colab을 통해서 진행하였는데요~!! 관련해서 실습한 흔적들도 올립니다!! (매우 적었다는게 너무 아쉬움 ㅠㅠ )
1. Numpy에 대하여
- 많은 숫자 데이터를 하나의 변수에 넣고 관리할때 리스트는 속도가 느리고 메모리를 많이 차지하는 단점이 있음. 배열을 사용하면 적은 메모리로 데이터를 빠르게 처리할 수 있음
- 수치해석용 파이썬 패키지. 다차원의 배열 자료구조.
- 벡터화 연산 : 배열 객체는 배열의 각 원소(요소)에 대한 반복 연산을 하나의 명령어이로 처리하는 벡터화 연산.
2. Pandas에 대하여
- 시리즈 클래스와 데이터프레임 클래스를 제공
- 시리즈(Serise)클래스 : 넘파이에서 제공하는 1차원 배열과 비슷하지만(데이터의 형태가), 인덱스가 숫자가 아니라 데이터 의미를 표시하는 인덱스를 붙일 수 있다. 데이터 자체는 값이라고 함.
- Pandas 시리즈 생성 : 인덱스 라벨(값), 인덱스 라벨은 문자,날짜,시간,정수도 가능
- 시리즈 = 값(array) + 인덱스(판다스에 제공하는 인덱스), 만약 인덱스를 지정하지 않고 시리즈를 만들면 시리즈의 인덱스는 0부터 시작하는 정수값이 됨 // index는 판다스에서 제공하는 함수임!!
- 시리즈의 인덱싱 : 문자로 인덱싱할때는 ‘마지막 인덱스’ 포함!! 판다스의 문법임!!
- 라벨값이 영문 문자열인 경우에는 속성인 것처럼 점(.)을 이용해서 접근도 가능하다.
- ??.notnull(), Null이 아닌 위치에 True, 누락된 데이터를 탐색하기 좋음
- DataFrame : 2차원 배열이라고 생각하면 편함
- 데이터프레임은 전치(transpose)를 포함하여 넘파이 2차원 배열이 가지는 대부분의 속성이나 매서드를 지원. (df.T(transpose)는 값을 할당해줘야지만 바뀜, 안하면 원본유지)
- df[열인덱스][행인덱스] ↔넘파이에서는 array[행인덱스][열인덱스]
3. Matplotlib : 파이썬에서 자료를 차트를 플롯으로 시각화하는 패키지. 정황화된 차트나 플롯 이외에도 가능함.
파이썬,, 쉽지 않은 녀석을 맞닥뜨렸습니다,, 후,, 쉽지 않은 녀석이네요,,, 그래도 끝까지 파이팅!!
잘 정복할 수 있으려는지,, 부트캠프에서는 '기초적인 수학 + 기초적인 컴퓨터 지식 + 기초적인 프로그래밍 능력' 필수인 것 같군요. 안그럼 못따라갑니다 따흑 ㅠㅠ 저처럼 ㅠㅠㅠㅠㅠㅠㅠ 책도 몇권 읽고 유튜브 기초 대애충 한번 돌려서는 절대 불가이고 시간낭비입니당 ㅠㅠ 일단 시작했으니 완주까지는 달려볼께요 진짜 솔직 후기 기대해주세용 :) ㅎㅎ 😎😎