[anaconda]아나콘다, 주피터노트북
1. 아나콘다(Anaconda)란?
아나콘다는 파이썬의 배포판이다. 이때 배포판이란 ‘원래 프로그램 + 많이 쓰이는 유틸리티’를 의미한다. 즉, 아나콘다는 파이썬으로 데이터분석을 쉽게 할 수 있도록 하는 배포판으로, 파이썬 + 파이썬 라이브러리(numpy, pandas 등등)의 구성을 가진다.
2. 주피터 노트북(jupyter notebook)이란?
아나콘다에 포함되어 있는 파이썬 편집환경으로 데이터 분석할 때 많이 사용된다. 그 이유로는 주피터노트북은 데이터 분석에 대한 결과를 마크다운으로 바로바로 작성할 수 있어서 분석에 대한 발표가 용이하기 때문이다. 또한 pdf같은 파일로 변환도 용이해서 발표에 좋다.
- 명령모드( Esc로 진입, Enter로 해제 )
- a : 선택된 셀 위에 셀 추가
- b : 선택된 셀 아래에 셀 추가
- dd : 선택된 셀 삭제
- x : 선택된 셀 잘라내기
- z : 뒤로 돌리기
- c : 선택된 셀 복사하기
- v : 복사한 셀 붙이기
- m : 마크다운 작성 실행
- 숫자 : 마크다운 작성 + 숫자만큼의 제목 미리 타이핑해둠
- 입력모드
- shift + enter : 실행하고 다음 셀로 이동
- ctrl + enter : 실행하고 현재 셀에 머무름
- ctrl + shift + - : 셀 자르기
3. 아나콘다 제공 패키지
- conda install 패키지명
- conda update 패키지명
- conda remove 패키지명
- conda list
- conda list 패키지명
4. 가상환경 생성 및 이용
4.1 가상환경이란?
만약 파이썬 3.9버전에서 A프로그램을 개발하고, 파이썬 3.8버전에서 B프로그램을 개발한다고 가정한다. 그러면 해당 파이썬 버전에 대한 두 개의 개발환경이 필요하다. 이를 위해서 PC자체를 두 개 준비하기에는 무리가 있으므로 하나의 PC에서 여러개의 개발환경을 구축할 수 있도록 하는 방식이 가상환경이다. 가상환경1에는 파이썬3.9, 가상환경2에는 파이썬3.8을 설치하면 하나의 PC로도 여러 개발환경을 이용할 수 있게 된다.
4.2 아나콘다에서 가상환경
기본적으로 아나콘다의 기본 가상환경은 base다. 기본상태에서 “conda info -e”를 이용해 가상환경 목록을 조회하면 base라는 이름의 가상환경 하나만 존재하는 것을 알 수 있다.
- 가상환경 명령어
- conda info -e : 가상환경 목록 조회
- conda create -n 가상환경이름 python=파이썬버전 : 해당 파이썬버전으로 가상환경을 생성해줌
- conda remove -n 가상환경이름 –all : 해당 가상환경 모두 삭제
- conda activate : 가상환경 활성화
- conda deactivate : 가상환경 비활성화
- conda install 패키지명1, 패키지명2, … : 현재 가상환경에 해당 패키지들 설치
- conda list : 현재 가상환경에 설치된 패키지 조회
- conda remove -n 가상환경이름 패키지명 : 해당 가상환경 속 해당 패키지 삭제
5. Pandas(Numpy)
Pandas는 데이터 분석과 관련된 다양한 기능을 제공하는 패키지다. 보통 pd라는 별칭으로 호출한다( import pandas as pd ) 이때 pandas는 numpy라는 패키지를 이용하므로 numpy에 대한 내용도 같이 본다.(보통 import numpy as np 로 호출함)
5.1 주요구성 클래스
- Series : 행, 열과 같은 1차원 구조
- Series로 만들기(튜플, 리스트, 넘파이배열(array)를 받는다)
data = ["안녕","하세","요"] result = pd.Series(data)
- index : 일반적인 index와 딕셔너리 key 성질을 합친 느낌이다. 디폴트값으로 0,1,2… 의 숫자값이 부여되고 따로 설정할 경우 딕셔너리의 key처럼 직접 인덱스명을 설정할 수 있다. 즉, 하나의 데이터는 index명과 index(정수0,1,2…) 두 가지 값을 가지는 것이다.
data = ["안녕","하세","요"] result = pd.Series(scores, index=["첫번째","두번째","세번째"]) result.index=[바꿀인덱스명들] # 모든 인덱스를 적어줘야 한다. 특정 인덱스명만 바꾸려면 다른 방식 이용해야 한다.
- indexing : Series 원소 중 한 개만 호출
Series객체명[index명 / index] # 이 방법은 기본적으로 index명으로 조회를 하게 된다. index명에 존재하지 않으면 그 뒤에 index에서 찾는다. # 예를 들어 index명이 100이고 index는 0 인 value값은 "Series객체명[100]"으로 호출해야 조회가 된다. 이때 index명대신 index로 조회하고 싶다면 # "Series객체명.iloc[index]" 로 조회해야 한다. 즉, "Series객체명[100]" 과 "Series객체명.iloc[0]"는 같은 것이다.
- fancy indexing : 조회할 인덱스들을 리스트로 묶어서 여러개 호출해 Series로 반환
Series객체명[[index명1,index명2,index명3,...]]
- fancy indexing : 조회할 인덱스들을 리스트로 묶어서 여러개 호출해 Series로 반환
- slicing : Series 원소 중 일부분 잘라내기
Series객체명[start index : end index : step] # start 이상 end 미만 # 혹은 Series객체명[start index명 : end index명 : step] # start 이상 end 이하
이때 조심해야 할 것이 파이썬에서 list의 slicing은 deep copy지만, pandas의 Series의 slicing은 shallow copy로 원본이 바뀌면 슬라이싱한 부분도 같이 바뀌게 된다. 만약 deep copy하고 싶다면 copy()를 사용한다.
s=pd.Series([1,2,3,4,5]) s2=s[2:].copy() print(s,s2) # copy메서드로 deep copy 실행함 print("_________________________________") s[3]=99 print(s,s2)
- boolean 연산 : True나 False를 이용해 True인 값들만 뽑아내는 방식. and,or,not 대신 &,|,~ 를 사용한다.
import numpy as np s=pd.Series(np.random.randint(10,20,20)) s[(s > 15) & (s < 18) ] # s에서 해당조건을 만족하는(True인) 값들만 반환 np.where((s > 15) & (s < 18)) # s에서 해당조건을 만족하는 값들의 index값들을 array로 반환
- head / tail 메서드 : 앞에서 혹은 뒤에서부터 지정한 개수만큼 반환(디폴트값 : 5개)
- size 속성 : 데이터 개수 반환
- dtype 속성 : value 타입 반환
- astpye 메서드 : value 타입 변경해서 새로운 Series객체로 반환
- sort_values 메서드 : 값을 기준으로 오름차순 정렬 후 새로운 Series객체로 반환
- 매개변수 ascending = True / False 로 오름차순 / 내림차순 가능
- sort_index 메서드 : index명을 기준으로 오름차순 정렬 후 새로운 Series객체로 반환
- 매개변수 ascending = True / False 로 오름차순 / 내림차순 가능
-
isin 메서드 : iterable(리스트, 튜플 등)을 매개변수로 받아 해당 값들이 Series에 있는지 없는지 확인 후 True, False 값으로 Series객체 반환( (Series객체명==체크값1) (Series객체명==체크값2) … 와 같다 ) - 통계 메서드
- min() : 최댓값
- max() : 최솟값
- mean() : 평균값
- median() : 중위값
- sum() : 총합
- std() : 표준편차
- var() : 분산
- quantile(q=[나눌위치들(ex. 0.1, 0.5)]) : 분위수로 나누기
- describe() : 수치형 Series는 데이터개수,4분위수,min,max,평균,표준편차를 반환 / 범주형 Series는 데이터개수,최빈값개수,최빈값,고유값개수 반환
- 결측치 메서드
- 결측치 제외 개수 : count()
- 결측치 확인 : notnull() / isnul() / np.isnan(“Series객체명”)
- 결측치 제거 : dropna()
- 결측치 다른값으로 대체 : fillna(대체할값)
- inplace : True / False 를 통해 Series객체에 대체한 내용 적용시킬지 결정
- Series로 만들기(튜플, 리스트, 넘파이배열(array)를 받는다)
- Dataframe : 행렬과 같은 2차원 구조
- columns 속성 : colum명 조회
- index 속성 : index명 조회
- shape 속성 : 행, 열 개수 조회
- info 메서드 : 인덱스 정보, 컬럼 정보를 조회
- 통계 메서드
- min() : 컬럼별 최댓값
- max() : 컬럼별 최솟값
- mean() : 컬럼별 평균값
- median() : 컬럼별 중위값
- std() : 컬럼별 표준편차
- var() : 컬럼별 분산
- quantile(q=[나눌위치들(ex. 0.1, 0.5)]) : 컬럼별 분위수로 나누기
- describe() : 요약 통계량 제공
- 결측치 메서드
- 결측치 제외 개수 : count()
- 결측치 확인 : notnull() / isnul() / np.isnan(“Series객체명”)
- 결측치 제거 : dropna()
- 결측치 다른값으로 대체 : fillna(대체할값)
- inplace : True / False 를 통해 Series객체에 대체한 내용 적용시킬지 결정