Intro
- 데이터 종류
- Numpy 와 Pandas
- 데이터 불러오기
- 데이터 살펴보기
- 새로운 열 만들기
- 특정 조건으로 검색
- 결측치
- 이상치
데이터 사이언스란?
- 데이터로부터 원하는 내용을 얻기 위해 과학적인 방법을 사용하는 모든 분야를 통틀어서 부르는 용어
- 데이터를 통해 얻은 지식과 인사이트를 신제품 개발이나 마케팅 등 여러가지 필요한 목적에 따라 활용
- 여러가지 분석방법을 알고 있을 수록 데이터가 가지고 있는 숨은 가치를 발견할 확률이 높아짐
데이터의 종류
데이터의 구성 형태에 따른 분류
정형 데이터
- 규칙에 따라 정리된 데이터
- 정해 놓은 형식과 구조에 맞게 저장
- 데이터에 대한 부분 검색이나 갱신, 삭제, 연산, 분석 작업이 편리
- 학교의 성적 데이터, 회사의 매출 데이터
비정형 데이터
- 미리 설정된 구조가 없는 데이터를 뜻함
- SNS나 웹에서 끊임없이 생성되고 있는 글, 사진, 동영상 등이 모두 비정형 데이터에 속함
Numpy 와 Pandas
Numpy
- 파이썬에서 산술적인 계산을 할 때 핵심적으로 사용되는 라이브러리
- Numerical Python (수에 관한)
- 선형대수를 계산, 난수 생성, 다차원 배열 객체를 다룸
Pandas
- 형태가 정해져 있는 정형 데이터를 손쉽게 다룰 수 있도록 제작됨
- MS EXcel과 비슷한 기능
Pandas 알아보기
데이터 불러오기
‘import 라이브러리이름’ 을 작성하면 해당 라이브러리를 불러올 수 있음
Excel과 CSV 파일
- csv 파일을 불러올 때는 pandas에 있는 read_csv 기능을 사용
- data = pd.read_csv('데이터파일경로와이름')
import pandas as pd
data = pd.read_csv('./public/csv/practice01.csv')
print(data)
# 데이터의 처음,끝 5개 줄을 보는 코드는 데이터 이름 뒤에 .head()를 붙여 사용합니다.
data.head()
data.tail()
데이터 살펴보기
특정 데이터 검색
- data[시작숫자 : 끝다음숫자] → 행 검색의 시작과 끝을 정할 수 있음
- 시작부터 특정 번호까지
- data[ : 번호숫자]
- 특정 번호부터 끝까지
- data[번호숫자 : ]
데이터의 특성 이름 확인하여 출력
- print(data.columns)
특성을 통한 데이터 선택
- data[‘특성이름’]
행(Row)과 열(Column)을 동시에!
- iloc이라는 기능을 활용하면 행과 열을 동시에 고려하여 데이터를 선택할 수 있음
- 데이터 뒤에 .iloc[,]을 입력하고 쉼표를 기준으로 앞쪽은 행, 뒤쪽은 열
- data.iloc[행의숫자,열의숫자]
여러개의 행과 여러개의 열 선택
- data.iloc[시작행숫자 : 끝행다음숫자, 시작열숫자 : 끝열다음숫자])
#3~5번 행, 2~3번 열을 선택하여 출력해(print) 보세요
import pandas as pd
data = pd.read_csv('./public/csv/practice01.csv')
print(data.iloc[2:5,1:3])
데이터의 복사
1. 전체 데이터 복사
- 데이터를 복사하는 방법은 데이터 뒤에 .copy()를 붙여서 새로운 이름에 저장하는 것
- 새로운 이름 = data.copy()
2. 원하는 특성만 골라서 복사
- 때에 따라선 데이터의 전체가 아니라 필요한 특성만 선정하여 복사하고 사용할 수 있음
- 새로운이름 = data[['특성이름','특성이름']]
특성의 생성과 삭제
특성 이름 바꾸기
- 기본적인 변경은 특성의 이름을 바꾸는 것
- 수정할 때는 rename기능을 사용
- data.rename(columns={‘기존특성이름':'변경할특성이름'}, inplace =True)
#’price’ 특성의 이름을 ‘sales’로 바꾸고 특성이름을(.columns) 출력해(print) 보세요
import pandas as pd
data = pd.read_csv('./public/csv/practice01.csv')
data.rename(columns={'price':'sales'}, inplace=True)
print(data.columns)
새로운 특성 생성 (mutate in R)
- 데이터에 변형을 가하여 새로운 특성을 만들어 내는 것
- 예를 들어, 데이터에 있는 time 특성이 시간 단위로 설정되어 있다고 가정. 분 단위의 분석을 하고 싶은 사람은 ‘시간’ 특성을 이용하여서 ‘분’ 특성을 만들 수 있음
- data[‘새로운특성이름’] = data[‘기존특성’]을 이용한 수식이나 함수
- ex) data[‘time_minute'] = data['time'] * 60
# ’time’ 특성에 60을 곱하여 ‘time_minute’특성을 새로 생성해 보세요.
# 데이터의 앞부분을(head) 출력하여(print) 확인해 보세요
import pandas as pd
data = pd.read_csv('./public/csv/practice01.csv')
data['time_minute'] = data['time'] * 60
print(data.head())
특정 조건으로 탐색
등호와 부등호
- ‘A == B’ A와 B가 같다
- ‘A != B’ A와 B가 같지 않다
- ‘A < B’ A가 B보다 작다
- ‘A > B’ A가 B보다 크다
- ‘A <= B’ A가 B보다 작거나 같다
- ‘A >= B’ A가 B보다 크거나 같다
조건을 가진 탐색
- 특성에 조건을 붙여 필요한 데이터를 검색
- data2 = data[(data[‘특성이름’]조건)]
- ex) data[(data[‘grade’] > 3)]
#data2에 성별이(gender) 남성과(male) 같은(==) 데이터만 할당하여 출력해 보세요
import pandas as pd
data = pd.read_csv('./public/csv/practice01.csv')
data2 = data[data['gender'] == 'male']
print(data2)
#data2에 나이가(age) 30 미만(<)인 데이터만 할당하여 출력해 보세요
import pandas as pd
data = pd.read_csv('./public/csv/practice01.csv')
data2 = data[data['age'] < 30]
print(data2)
- 두 개 이상 조건 → and , or 안돼 ! & | 쓰셈
#data2에 성별이(gender) 남성(male) 그리고(&) 나이가(age) 30 미만(<)인 데이터만 저장하여 출력해(print) 보세요
import pandas as pd
data = pd.read_csv('./public/csv/practice01.csv')
data2 = data[(data['age']<30) & (data['gender'] == 'male')]
print(data2)
결측치(Missing Value)
보통 데이터가 없는 부분에는 'Na', 'NaN' 혹은 'Null'이라고 표현 또는 빈칸인 경우도 있음
결측치의 종류
- 완전 무작위 결측
- 실수로 마킹을 하지 못해서 생기거나 데이터 수집 시스템의 오류 등, 예기치 못하게 발생하는 결측치
- 비 무작위 결측
- 여러 문항 중에 유독 너무 어려운 문제가 있어 답변을 못한 학생이 많다면, 문항의 난이도가 결측치에 영향을 미쳤을 지도 모름. 결측치로 신중한 관찰이 필요. → ‘어렵다’ 라는 의미 내포
결측치 찾기
결측치 개수 확인 : info()
- 'info()' 함수를 사용하면 어떤 특성(칼럼, 열)에 결측치가 얼마나 있는지 한 눈에 확인
- 데이터 변수의 이름 뒤에 .info()를 입력
- RangeIndex 항목에 전체 데이터 수가 표시
- Data columns 항목에 데이터 특성의 수가 표시
- Non-Null Count 항목에 각 특성별 결측이 아닌 값이 표시
결측치 위치 확인 : isna(), isnull()
- data.isna()
- data.isnull()
- T 또는 F 반환
이상치(outliers)
- 데이터의 값이 나머지 다른 데이터와는 극명하게 다른 경우가 있습니다. 이런 데이터를 이상치(Outlier)
- 파이썬에서 히스토그램(Histogram)을 그리기 위해 'matplotlib' 라이브러리를 사용
- import matplotlib.pyplot as plt
- plt.hist(data['특성이름'])
# 'grade'특성의 히스토그램을 출력 해보세요.
import pandas as pd
import matplotlib.pyplot as plt
data = pd.read_csv('./public/csv/practice01.csv')
plt.hist(data['grade'])
이상치의 위치 확인
- data[(data['특성이름']조건)].index
# 'grade' 특성이 30보다 크다면 이상치로 판단됩니다.
# 'grade' 특성에 조건을 사용하여 이상치의 인덱스를 출력해보세요.
import pandas as pd
data = pd.read_csv('./public/csv/practice01.csv')
print(data[(data['grade']>30)].index)
결측치와 이상치의 처리
결측치와 이상치는 원활한 데이터 분석에 방해가 되는 요소
결측치의 제거 : dropna()
- 가장 간단한 방법은 해당 데이터를 제거하는 것
- 결측치에 비해 데이터의 수가 많으면 결측치를 제거해도 데이터의 손실이 크지 않음
- 특히 완전 무작위 결측 같이 오류나 실수로 인해 발생한 결측치는 제거하는 것이 가장 효율적인 방법
- 새로운데이터변수 = data.dropna()
- 결측치가 있는 행을 삭제
이상치의 제거 : drop()
- 그 자체로 의미를 가지는 이상치의 경우에는 삭제를 하기 전에 신중하게 판단
- drop 함수의 괄호 안에 인덱스 번호와 axis = 0 이 입력되면 해당 인덱스의 행이 삭제됨
- 인덱스번호 = data[(data['특성이름']조건)].index
- data.drop(인덱스번호, axis = 0)
# 'grade' 특성이 30보다 크다면 이상치로 판단됩니다.
# 'grade' 특성에 조건을 사용하여 이상치의 인덱스를 index_number 변수에 할당 해보세요.
# index_number 변수를 활용하여 이상치를 제거하고 data2에 할당 해보세요.
# data2 변수를 출력(print) 해보세요.
import pandas as pd
data = pd.read_csv('./public/csv/practice01.csv')
index_number = data[(data['grade']>30)].index
data2 = data.drop(index_number, axis = 0)
print(data2)
'Statistics > ML | Python' 카테고리의 다른 글
머신러닝이 뭐야 7탄 (feat. 그래프 그리기, KNN) (0) | 2023.02.18 |
---|---|
머신러닝이 뭐여 6탄 (feat. EDA !! ) (2) | 2023.02.18 |
머신러닝이 뭐여 4탄 (feat. 반복문, 모듈) (0) | 2023.02.18 |
머신러닝이 뭐여 3탄 (feat. 파이썬 연산자) (0) | 2023.02.18 |
머신러닝이 뭐여 2편 (feat. 파이썬) (0) | 2023.02.18 |