일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 코딩테스트
- 텐서플로우
- 빅분기
- 인공지능
- 딥러닝
- 컴퓨터비전
- TensorFlow
- 파이썬
- Deeplearning
- 데이터전처리
- Python
- 케라스
- 빅분기실기
- 데이터모델링
- 데이터분석가
- ComputerVision
- mnist
- resnet
- 데이터분석
- Keras
- 데이터사이언스
- 통계
- 빅데이터분석기사
- 의학논문
- CNN
- 머신러닝
- 의학통계
- machinelearning
- 데이터EDA
- AI
- Today
- Total
Be Brave, Be Humble
빅데이터 분석기사 실기 Part2. 파이썬에 발 담그기 (프리렉) 본문
Open in Colab 누르면 코랩으로 이동 가능
과거의 나는 왜 스파이더로 작성했을까요.. 왜..
한 블럭 안에 들어가서 가독성 제로인 점 양해를.. ㅠ
In [ ]:
# -*- coding: utf-8 -*-
"""
Created on Mon Jun 6 22:08:36 2022
@author: FullSun
"""
###############################################
########### Part2. 파이썬에 발 담그기 ###########
###############################################
#---------------------------------------------
# 1. 너무 쉬운 파이썬
#---------------------------------------------
#--------- <1.3> 내 안에 모든 것을 저장하기 : 데이터 타입, 변수 ---------#
if 2 > 1:
print('맞습니다')
type(123)
type('123')
type(123.0)
### [1] 독자적인 그릇: 기본 데이터 타입
#1) bool
# bool: 0이 아닌 숫자나 문자는 모두 True
type(False)
type(True)
bool(1) #True
bool('123') #True
bool(0) #False
#2) integer
# 양수, 0, 음수
type(500)
type(0)
type(-1000)
int(-3.2) #소수점 버림 -> 3
int(3.2)
int(3.5)
int(3.7)
int(True) #1
#3) float
type(3.2)
1e8 #1x10^8
type(1e8)
123.e-06
float(0)
float(True) #1.0
#4) string
'I Love FullSun'
"""I
Love
FullSun"""
str(True)
str(123)
##### [2] 함께하는 그릇: 응용 데이터 타입
# 1) tuple
''' 2개 이상의 데이터가 포함된 데이터 타입.
수정, 추가, 삭제 불가능. '''
mountain = ('한라산', '지리산', '설악산', '북한산')
mountain
type(mountain)
mountain[0]
mountain[-1]
mountain[-4]
# 2) list
''' 2개 이상의 데이터를 포함하는 데이터 타입.
튜플보다 자유로움. 수정, 삭제, 추가 가능
slicing -> [시작 : 마지막+1] '''
mountain = ['한라산', '지리산', '설악산', '북한산']
mountain
type(mountain)
mountain[1]
mountain[-1]
mountain[0:1]
mountain[0:2]
mountain[:]
mountain[-1:-3] #빈 리스트 출력
mountain[-3:-1] #['지리산', '설악산']
mountain+mountain
mountain*3
mountain[2] = '설악산~' #원소 변경
del mountain[2] #원소 삭제
mountain.append('태백산') #원소 추가
mountain.insert(2, '설악산') #데이터 끼워넣기 insert
mountain.insert(0, '태백산') #중복 데이터도 삽입 가능
mountain.count('태백산') #태백산이 몇 개 있는지
mountain.remove('태백산') #중복 데이터 중 가장 앞의 데이터만 삭제
mountain.pop() #마지막에 있는 값 삭제
mountain.sort() #오름차순 정렬
len(mountain)
# 3) dictionary
NCT = { '드림' : '해찬',
'원투세븐' : '도영',
'유' : '재현',
'슈퍼엠' : '마크' }
type(NCT)
NCT #딕셔너리에서 각각은 독립이기 때문에 순서는 의미 없음
NCT['드림']
NCT['유']
NCT['웨이븨'] = '샤오쥔' #새로운 쌍 추가
NCT
NCT['웨이븨'] = '윈윈' #같은 키값으로 설정하면 덮어쓰워짐
NCT
NCT['유'] = '태용'
del NCT['웨이븨']
del NCT['드림']
NCT
NCT['드림'] = '이동혁'
NCT
# 4) 집합set
''' 튜플, 리스트, 딕셔너리와 같이 다수의 숫자 or 문자를 포함.
중복된 데이터가 없고, 데이터간 순서 없음 '''
헬로우 = set("hello")
헬로우 #중복 허용하지 않기 때문에 l은 한 번만 들어가며 순서도 재정렬 됨
하이 = set('hi')
하이
헬로우.intersection(하이) #교집합
헬로우 & 하이 #교집합
헬로우.union(하이) #합집합
헬로우|하이 #합집합
헬로우-하이 #차집합
하이-헬로우 #차집합 (연산 순서에 영향 받음)
헬로우.add('!') #원소 추가
헬로우.update(['w','o','w']) #여러 문자열 한번에 추가
헬로우.add(2)
헬로우.remove(2)
#--------- <1.4> 이거해라 저거해라 ---------#
##### [1] 산술 공부하기: 산술 연산자
2//5 #2를 5로 나눈 몫
5//2
2%5 #2를 5로 나눈 나머지
5%2
2**5 #2^5
##### [2] 누가누가 더 클까?: 비교 연산자
# >, <, >=, <=, ==, !=
##### [3] 논리적으로 질문하기: 논리 연산자
##### ~날아감...#####
#---------------------------------------------
# 2. 파이썬의 잠재력 활용하기
#---------------------------------------------
#--------- <2.1> 내 생각을 그대로 보여주기: if/elif/else/in/lambda ---------#
##### [1] 만약 ~하다면: If문
##### [2] ~하는 동안에: for문
NCT = ['해찬','도영', '재현', '태일']
for i in NCT:
print(i)
for i in NCT:
if i == '재현':
break #재현이면 for문 탈출
print(i)
for i in NCT:
if i == '재현':
continue #재현이면 아래 명령어 실행하지 않고 for문으로 돌아가기
print(i)
##### [3] ~하는 동안에 2탄: while문
num = 0
while num < 10:
num = num + 1
print(num)
num = 0
while num < 10:
print(num)
num = num + 1
else:
print("Finish")
##### [4] 나만의 코드: 함수(function)
''' 내장함수: 별도의 import필요X
외장함수: import 필요
사용자정의함수: def키워드로 작성 '''
#외장함수
import random
random.random()
def plus (num1, num2):
print(num1+num2)
plus(1,2)
def who (): #parameter는 필수 아님
print("It's Full-Sun")
who()
def squared (num):
print(num*num)
squared(10)
xx = squared(10)
xx #squared는 단순히 print만 하고 끝나기 때문에 xx에 아무런 값도 저장되지 않음. return 사용할 것
def squared3(num):
return(num*num*num)
squared3(10)
xx = squared3(10)
xx
#--------- <2.2> 라이브러리 활용하기 ---------#
##### [1] pandas: 2차원 데이터로 놀기
## 판다스 데이터 타입 알아보기
''' 행렬로 구성된 1, 2차원 데이터를 가공하는 라이브러리.
판다스 전용 데이터타입: Series(시리즈), DataFrame(데이터프레임)
-Series: 1차원 데이터 타입. 각 데이터의 행에는 index라는 기본값 존재.
(그냥 일반적인 col 1개짜리 DF 생각하면 될 듯)
-DataFrame: 2차원 데이터 타입. row방향의 인덱스와 column으로 구성.
분석 대상을 판다스로 가공하고자 한다면 pd.Series(), pd.DataFrame()으로 변환 필요.'''
import pandas as pd
NCT = ['해찬','도영', '재현', '태일']
NCT_seires = pd.Series(NCT)
type(NCT_seires)
NCT_seires #인덱스와 데이터로 구성되며, 인덱스는 0부터 시작.
import pandas as pd
NCT = ( ['해찬', 23, 'dream&127'], ['도영', 27, '127'],
['재현', 26, '127'], ['태일', 29, '127'])
NCT
type(NCT) #tuple
NCT_DF = pd.DataFrame(NCT)
NCT_DF
type(NCT_DF)
#인덱스 변경하기
NCT_DF.index = ['1번', '2번', '3번', '4번']
NCT_DF
#col_name 변경하기
NCT_DF.columns = ['이름', '나이', '유닛']
NCT_DF
## 일부 열 값을 뽑기: []
NCT_DF['나이']
NCT_DF[['이름', '나이']] #두 개 이상 추출하려면 대괄호로 묶기
## 일부 행 추출하기: []
NCT_DF[1:3] # 1,2번째 행 추출 >>끝-1<< !!!!
NCT_DF['2번':'3번']
#인덱스 이름 사용해서 행 추출 -> loc
NCT_DF.loc['1번'] #행 추출
NCT_DF.loc[['1번','2번']] #두 개 이상 추출하려면 대괄호로 묶기
NCT_DF.loc['1번':'3번'] #슬라이싱 기능 사용 가능
#인덱스 number 사용해서 행 추출 -> iloc
NCT_DF.iloc[0]
NCT_DF.iloc[0:3]
# + 행과 열 한번에 추출하기
''' 1) .loc[인덱스, 컬럼]
2) .iloc[행 번호, 열 번호] '''
NCT_DF.loc['1번', ['이름', '나이']]
NCT_DF.iloc[0:3, 0:2]
NCT_DF.iloc[:3, :]
## 파일 읽고 쓰기: read_csv, to_csv
# 제 2유형은 데이터 파일이 CSV로 주어짐.
import pandas as pd
data = pd.read_csv("경로") #데이터 import
data.to_csv("경로") #데이터 export
pd.read("경로") #데이터 읽기
##### [2] sklearn: 진짜 머신러닝 하기
''' sklearn은 머신러닝 수행하는 라이브러리로 풀네임은 scikit-learn(사이킷런)
데이터 전처리(preprocessing)-데이터 변환-모델 선택-검증 수행
-주요 모듈과 내부 함수
*preprocessing모듈: StandardScaler/ MinMaxScaler/ RobustScaler/ OneHotEncoder/ LabelEncoder...
*model_selection모듈: train_test_split/ cross_validation/ learning_curve/ validation_curve/ Grid_searchCV ...
*linear_model모듈: LogisticRegression/ Perceptron ...
*tree모듈: DecisionTreeClassifier/ DecisionTreeRegressor ...
사용법: from sklearn.모듈 import 함수 '''
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
##### [3] numpy: 수학 계산하기
''' numpy는 벡터, 행렬 등 수치 연산을 수행하는 선형대수 라이브러리. '''
import numpy as np
np.zeros((2,3)) #2행3열
type(np.zeros((2,3))) #numpy.ndarray
np.ones((3,4))
np.full((2,3), 10) #10으로 채워진 2x3행렬
np.array(range(20)) #0부터 20개 숫자 만들기
np.array(range(20)).reshape(4,5) #4x5행렬로 reshape
np.array((4,5), np.nan)
# + nan 행렬 만들기
a = np.empty((3,3,))
a.fill(np.nan)
#--------- <2.3> 유용한 내장 함수 활용하기 ---------#
import pandas as pd
import numpy as np
data = {
'age' : [20, 23, 49, 38, 32, 29, 25, 30, 32, 26],
'gender' : ['남', '여', '남', '여', '여', '여', '여', '여', '남', np.nan]
}
type(data) #dict
len(data['age'])
len(data['gender'])
data = pd.DataFrame(data)
data
type(data)
##### [1] 숫자를 계산하는 함수
## 합계 구하기: sum
data.iloc[:, 0].sum()
sum(data.iloc[:, 0])
## 최댓값 구하기: max
data.iloc[:, 0].max()
max(data.iloc[:, 0])
## 평균값 구하기: mean
data.iloc[:, 0].mean()
## 분산 구하기: var
data.iloc[:, 0].var()
## 표준편차 구하기: std
data.iloc[:, 0].std()
## 중앙값 구하기: median
data.iloc[:, 0].median()
## 사분위수 구하기: quantile
data.quantile(0.25) #1사분위
data.quantile(0.75) #3사분위
data.iloc[:, 0].quantile(0.75)
data.quantile((0.25, 0.75)) #1, 3사분위
## 거듭제곱 구하기: pow
pow( data.iloc[:, 0], 3 ) #나이 열의 세제곱
## 반올림 구하기: round
#parameter는 몇 번째 자리까지 표현할 지를 나타냄
round(123.456, 2) #123.46
round(123.456, 1) #123.5
round(data['age']/7, 2) #age열을 셋째 자리에서 반올림
# + 올림, 내림 함수
import math
math.ceil(123.456) #올림. 124
math.floor(123.456) #버림. 123
##### [2] 겉모습을 살피는 함수
## 모양 구하기: shape
data.shape
data['age'].shape
len(data['age']) #.shape과 같은 결과
## 길이 구하기: len
len(data) #10
len('Superhuman')
len('12345678')
len(123) #TypeError: object of type 'int' has no len()
len(str(123)) #문자열로 변경해서 구해야함
## 크기 구하기: size
#변수 안에 들어있는 값들의 개수 출력. 즉, 데이터의 양
data.size #10행 2열이므로 20개의 데이터가 있음
## 상위 데이터 가져오기: head
data.head()
data.head(3)
## 하위 데이터 가져오기: tail
data.tail()
## 열 이름 구하기: columns
data.columns
## 행 이름 구하기: index
data.index #RangeIndex(start=0, stop=10, step=1) => 0부터 9까지
##### [3] 데이터 요약 관련 함수
## 값의 개수 세기: value_counts
data['gender'].value_counts()
## 중복 제거하기: unique
data['gender'].unique() #array(['남', '여', nan], dtype=object)
## null 여부 확인하기: isnull
data.isnull()
data['gender'].isnull()
data['gender'].isnull().sum()
sum(data['gender'].isnull())
## 개수 세기: count
# nan인 값은 제외함
data.count() #age=10, gender=9로 조회 됨.
'Be brave, Be humble'.count('B') #대소문자 구별X
## 정보 조회하기: info
# 데이터의 구조, null 수, 데이터 타입, 인덱스, 열이름 조회
data.info()
## 데이터 표현하기: describe
# n, mean, std, min, max, quantile
data.describe() # 연속형 변수에 대해서만 출력함
##### [4] 데이터 변형 관련 함수
## 열과 행 위치 바꾸기: transpose, T
data.transpose()
data.T
## 행/열 이름으로 데이터 가져오기: loc
''' row: df.loc['행 이름']
col: df.loc[:, '열 이름']
row&col: df.loc['행 이름', '열 이름'] '''
data.loc[3] #index=3인 값 확인
data.loc[3:7] #index=3인 값부터 index=7행 >>index이름으로 조회하는 거라 -1 없음<<
data.loc[:,'gender']
data.loc[:, ['gender', 'age']]
data.loc[data['gender'] == '남'] # 남자인 행 추출
data.loc[data['gender'] == '여']
## 행/열 위치값으로 데이터 가져오기: iloc
data.iloc[3] #행 위치가 3인 값
data.iloc[4:8]
data.iloc[4:8, 1] # 4부터 7까지!! >>index num으로 조회하는 거라 -1 !! <<
data.iloc[:, 1]
data.iloc[:, 0:2] # 0부터 1열까지!!
## 값을 정렬하기: sort_values
data.sort_values('age') #default=ascending
data.sort_values('age', ascending=False)
data.sort_values(['age', 'gender']) #앞에 나열한 변수 순서대로 sort
## 결측치 메꾸기: fillna
''' ** R은 NA와 Null을 구분하지만, Python은 구분없이 NaN으로 통일'''
data['gender2'] = data['gender'].fillna('남') #결측치를 '남'으로 메꾼 gender2 변수 생성
## 결측치 삭제하기: dropna
data2 = data.dropna()
data2 # NaN 존재하는 열 삭제
## 행/열 제거하기: drop
data.drop(index = [0, 2, 4, 6, 8]) #행 삭제
data.drop(columns = ['gender']) #열 삭제
## 값 바꾸기: replace
# gender2 변수를 생성해서 여/남 -> F/M 으로 교체하기
data['gender2'] = data['gender'].replace('여', 'F').replace('남', 'M')
data
'Statistics > Data Science' 카테고리의 다른 글
빅데이터 분석기사 실기 Part5. 파이썬으로 초보 분석가 탈출하기_1 (프리렉) (0) | 2022.10.25 |
---|---|
빅데이터 분석기사 실기 Part4. 파이썬으로 초보 분석가 되기 (프리렉) (0) | 2022.10.25 |
빅데이터 분석기사 실기 part3. 파이썬으로 데이터 분석 준비하기 (프리렉) (0) | 2022.10.25 |
머신러닝 프로세스 A to Z/ 빅데이터 분석기사 실기 (0) | 2022.10.25 |
빅데이터 분석기사 자격증 합격 후기 및 공부법: 필기 (0) | 2022.08.02 |
Comments