본문 바로가기
자격증/빅데이터 분석기사 (실기)

01. 파이썬 기초

by 이민우 2022. 5. 27.
728x90
반응형

출처 : https://book.naver.com/bookdb/book_detail.nhn?bid=21488029 

 

공개적 빅데이터분석기사 실기

본 도서는 한국데이터산업진흥원에서 실시하는 빅데이터분석기사 국가기술자격 실기시험 대비 도서입니다.본 교재는 PYTHON을 활용하여 쉽고 빠른 자격증 취득으로 이어질 수 있도록 도움을 줄

book.naver.com

*해당 글은 학습을 목적으로 위의 도서 내용 중 일부 내용만을 요약하여 작성한 포스팅입니다.

 상세 내용 및 전체 내용 확인을 원하신다면 도서 구매를 추천드립니다.


파이썬 자료구조

 

리스트

  • 파이썬은 하나의 리스트에 다양한 유형의 데이터를 담을 수 있다.
  • 심지어 리스트 내에 리스트 추가도 가능하다.
  • 파이썬에서의 리스트는 대괄호 ([ ])로 표현된다.
arr = [1,2,3,4,5]

print(arr) # [1 2 3 4 5]
print(arr[0]) # 1
print(arr[1:3]) # [2 3]
print(arr[3:]) # [4 5]
print(arr[:3]) # [1 2 3]
  • 리스트 안에서의 추가는 append 함수를 사용하며, 리스트의 가장 뒤에 포함된다.
  • 수정은 [index] 를 사용한다.
  • 삭제는 del 명령어를 사용한다.
arr = [1,2,3,4,5]

# 추가
arr.append(6)
print(arr) # [1 2 3 4 5 6]

# 수정
arr[5] = 0
print(arr) # [1 2 3 4 5 0]

# 삭제
del arr[0]
print(arr) # [2 3 4 5 0]
  • 두 개 이상의 리스트는 + 키워드를 통해 합쳐질 수 있다.
  • * 사용시 곱한 만큼의 리스트가 뒤에 붙으며 합쳐진다.
arr1 = [1, 2]
arr2 = [3, 4]

# 리스트 합치기
arr3 = arr1+arr2
print(arr3) # [1 2 3 4]

# 늘리기
arr3 = arr3 * 2 
print(arr3) # [1 2 3 4 1 2 3 4]

 

 

튜플

  • 튜플은 소괄호 (( )) 로 표현된다.
tup = (1, 2, 3)

print(tup) # (1, 2, 3)
print(tup[1]) # 2
print(tup[1:3]) # (2, 3)
print(tup[1:]) # (2, 3)
print(tup[:2]) # (1, 2)
  • 리스트와 비슷하나 값을 변경할 수 없다는 차이점이 있다.
tup = (1, 2, 3)

tup[1] =  99 # error
del tup1[2] # error
  • 리스트와 마찬가지로 합과 곱으로 튜플들을 합치거나 반복된 튜플을 구성할 수 있다.
tup1 = (1, 2, 3)
tup2 = (4, 5)

print(tup1 + tup2) # (1 2 3 4 5)
print((tup1 + tup2) * 2) # (1 2 3 4 5 1 2 3 4 5)

 

집합 (Set)

  • 집합은 순서가 존재하지 않는 리스트이다.
  • 또한 중복이 허용되지 않는다.
  • 파이썬에서 집합은 중괄호 ({ })로 표현된다.
  • 파이썬 집합의 연산은 아래와 같이 수행할 수 있다.
test_set = {1, 2, 3, 4, 5, 5}

print(test_set) # {1 2 3 4 5}

# add : 한 개 추가
test_set.add(6)
print(test_set) # {1 2 3 4 5 6}

# update : 여러 개 추가
test_set.update({7, 8})
print(test_set) # {1 2 3 4 5 6 7 8}

# remove : 한 개 삭제
test_set.remove(2)
print(test_set) # {1 3 4 5 6 7 8}

# clear : 전부 삭제
test_set.clear()
print(test_set) # set()
  • 파이썬의 집합은 일반 집합처럼 교집합, 합집합, 차집합 연산이 가능하다.
set1 = {1, 2, 3}
set2 = {3, 4, 5}

# & : 교집합
print(set1 & set2) # {3}

# | : 합집합
print(set1 | set2) # {1 2 3 4 5}

# - : 차집합
print(set1 - set2) # {1 2}

 

사전 (Dictionary)

  • 사전은 키-값 으로 이루어진 자료형이다.
  • 집합과 마찬가지로 중괄호 ({ }) 로 표현된다.
  • 인덱스는 숫자가 아닌 키를 이용해 값을 조회하거나 수정한다.
dic = {"kim" : 90, "lee" : 80, "park" : 70}

print(dic["kim"]) # 90


# 추가
dic["song"] = 60
print(dic) # {'kim': 90, 'lee': 80, 'park': 70, 'song': 60}

# 삭제
del dic["kim"]
print(dic) # {'lee': 80, 'park': 70, 'song': 60}

# 수정
dic["lee"] = 100
print(dic) # {'lee': 100, 'park': 70, 'song': 60}

 

 

Numpy

  • numpy란 과학 계산을 위한 파이썬 데이터 분석 패키지이다.
  • 다차원 배열을 처리하는 데 필요한 여러 유용한 기능을 제공한다.
  • 다차원 배열이란 같은 자료형의 데이터를 담을 수 있는 배열이다.
  • numpy는 자료를 다루는 함수이기에 다음과 같은 연산들을 기본적으로 제공한다.
함수 설명
abs, fabs 절대값 (복소수가 아닌 경우 fabs 사용 시 빠른 연산 가능)
sqrt 제곱근 계산
square 제곱 계산
exp 지수 계산
log 로그 계산
add 두 배열 덧셈
subtract 두 배열 뺄셈
multiply 두 배열 곱셈

 

 

numpy 배열 생성

  • numpy 배열은 아래와 같이 다양한 방법으로 만들 수 있다.
  • 타입은 자동으로 할당하지만, 만약 특정 타입을 만들고 싶다면 dtype 키워드를 사용할 수 있다.
import numpy as np

v1 = np.array([1, 2, 3])
v2 = np.array([1, 2, 3], dtype=float)

print(v1) # [1 2 3]
print(v2) # [1. 2. 3.]

v3 = np.arange(3)
print(v3) # [0 1 2]

v4 = np.arange(3)**2 # 제곱값
print(v4) # [0 1 4]

 

numpy 행렬 생성

  • numpy는 배열을 행렬로 변경할 수 있다.
  • 이 때 함수는 reshape이 사용된다.
  • 파라미터 중 order는 'C'가 디폴트이며, 'C'일 경우 행부터, 'F'일 경우 열부터 채워넣는다.
  • 아래와 같은 방식으로 비단 2차원 배열 뿐 아니라 3차원 배열도 생성 가능하다.
import numpy as np

v1 = np.arange(4).reshape(2, 2)
print(v1)
'''
[[1 2]
 [3 4]]
'''

v2 = np.arange(4).reshape(2, 2, order='F')
print(v2)
'''
[[1 3]
 [2 4]]
'''

v3 = np.arange(8).reshape(2, 2, 2)
print(v3)
'''
[[[0 1]
  [2 3]]
 [[4 5]
  [6 7]]]
'''
  • numpy 행렬은 다음 함수를 통해 연산이 가능하다.
import numpy as np

v1 = np.arange(4).reshape(2, 2) # [[0 1] [2 3]]
v2 = np.arange(4, 8).reshape(2, 2) #[[4 5] [6 7]]

# add : 덧셈
print(np.add(v1, v2))
'''
[[ 4  6]
 [ 8 10]]
'''
# substract : 뺄셈
print(np.subtract(v1, v2))
'''
[[-4 -4]
 [-4 -4]]
'''
# multiply : 곱셈
print(np.multiply(v1, v2))
'''
[[ 0  5]
 [12 21]]
'''
# dot : 행렬연산
print(np.dot(v1, v2))
'''
[[ 6  7]
 [26 31]]
'''
  • 행렬은 직접 눈으로 데이터를 일일이 확인하기 어려운 경우가 많다.
  • 이럴 때 최대값, 최소값 등을 확인하기 위해 다음 명령어들이 사용된다.
import numpy as np

v1 = np.arange(4).reshape(2, 2) # [[0 1] [2 3]]

# amax : 최대값
print(np.amax(v1)) # 3
# amin : 최소값
print(np.amin(v1)) # 0
# dtype : 타입 정보
print(v1.dtype) # int64
# shape : 행렬수
print(v1.shape) # (2, 2)

 

 

 

Pandas

  • 자료구조 및 데이터 분석과 처리를 위한 파이썬의 핵심 패키지
  • Series와 DataFrame의 형태로 나뉜다.
  • Series는 index와 value의 형태를 가진 자료구조이다.
  • value만 갖는 리스트와는 달리 index를 가지며, 이 index는 0부터 자동으로 생성된다.
  • index는 별도로 지정해줄 수 있다.
import pandas as pd
from pandas import Series, DataFrame

a = Series([1, 2, 3, 4])
print(a)
'''
0    1
1    2
2    3
3    4
'''


b = Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])
print(b)
'''
a    1
b    2
c    3
d    4
'''

a.index=['a', 'b', 'c', 'd']
a['a'] = 0
print(a)
'''
a    0
b    2
c    3
d    4

'''
  • DataFrame은 2차원 행렬구조이다.
  • Pandas는 csv, excel 등의 파일을 불러와 DataFrame으로 변환하여 사용할 수 있다.
  • 이 때 csv는 read_csv, excel은 read_excel 함수를 사용하여 불러온다.
  • 만약 한글이 포함된 파일이면 불러올 때 깨질 수 있기에 encoding 파라미터를 추가함으로써 글자 깨짐을 방지할 수 있다.
  • 데이터 다운로드 : https://www.kaggle.com/code/lottoexpecter/python-6-regularization/data
import pandas as pd

df = pd.read_csv('/tmp/EX_GrapeData.csv', encoding='euc-kr')
df
  • DataFrame은 head, tail, 혹은 행과 열의 이름을 통해 데이터를 확인할 수 있다.
import pandas as pd

df = pd.read_csv('/tmp/EX_GrapeData.csv')


# head : 앞에서부터 x개 확인 (5개 Default)
df.head(2) # 개 확인
'''
	continent	brand	size	period	price
0	2	2	10.7	47.65	144
1	2	3	14.0	63.13	215
'''

# tail : 뒤에서부터 x개 확인 (5개 Default)
df.tail(2)
'''
continent	brand	size	period	price
61	2	3	13.0	20.0	
62	2	3	31.0	19.0	
'''

# index : 배열처럼 잘라서 사용
# 일반 배열과 똑같이 사용
df[2:4]
'''
continent	brand	size	period	price
2	2	2	9.0	58.76	105
3	1	1	8.0	34.88	69
'''

df[['brand']]
'''
	brand
0	2
1	3
2	2
3	1
4	2
...	...
58	1
59	1
60	2
61	3
62	3
'''

df[['brand', 'price']] # 숫자로 줄 수도 있음
'''
brand	price
0	2	144
1	3	215
2	2	105
3	1	69
4	2	134
...	...	...
58	1	21.5
59	1	
60	2	
61	3	
62	3	
'''
  • 행과 열을 모두 지정하여 불러올 수도 있다.
import pandas as pd

df = pd.read_csv('/tmp/EX_GrapeData.csv')


# loc : 열 불러오기
df.loc[:, 'size':'price']
'''
size	period	price
0	10.7	47.65	144
1	14.0	63.13	215
2	9.0	58.76	105
3	8.0	34.88	69
4	10.0	55.53	134
...	...	...	...
58	5.0	16.66	21.5
59	21.0	43.00	
60	5.0	12.00	
61	13.0	20.00	
62	31.0	19.00	
'''

# iloc : 행과 열 모두 불러오기
df.iloc[1:3, 0:2]
'''
	continent	brand
1	2	3
2	2	2
'''

# at : 특정 값 가져오기
df.at[2, 'price'] # 105
  • 데이터 칼럼은 다음과 같이 변경할 수 있다.
  • 파라미터 중 inplace는 true일 경우 원본 데이터가 변경된다.
import pandas as pd

df = pd.read_csv('/tmp/EX_GrapeData.csv')

# copy : 값을 복사하여 새로운 df 생성
df_cp = df.copy()

# rename : 칼럼명 변경
# priod -> time
df_cp.rename(columns={'period':'time'}, inplace=True)

# 새로운 칼럼 생성
df_cp['test'] = df_cp['size'] / df_cp['time']

# 칼럼 삭제
del df_cp['test']
  • 혹은 특정 조건들을 검색하여 새로운 df를 생성할 수 있다.
import pandas as pd

df = pd.read_csv('/tmp/EX_GrapeData.csv')

# continent가 1이고, size가 10 이상인 것들만 모아놓은 df
df_new = df[(df['continent'] == 1) & (df['size'] >= 10)]

df_new.head()
  • 데이터 값을 일괄적으로 변경할 수 있다. 방법은 replace를 사용할 수도 있고, 함수를 사용할 수도 있다.
import pandas as pd

df = pd.read_csv('/tmp/EX_GrapeData.csv')

print(df['brand'].value_counts())
'''
2 24
1 23
3 16
'''

# 2와 1을 통합
# replace 사용
recode_brand = {"brand" : {1:1, 2:1, 3:2}} # 1,2 -> 1 / 3 -> 2
df_cp = df.copy().replace(recode_brand)
print(df_cp['brand'].value_counts())
'''
1    47
2    16
'''

# 함수 사용 (apply)
def brand_groups(series) :
  if series == 1 : 
    return 1
  elif series == 2 :
    return 1
  else :
    return 2

df['re_brand'] = df['brand'].copy().apply(brand_groups)
print(df['re_brand'].value_counts())
'''
1    47
2    16
'''

 

 

 

Numpy to Pandas & Pandas to Numpy

import pandas as pd

df = pd.read_csv('/tmp/EX_GrapeData.csv')

# pandas to numpy
df_num = df.to_numpy()

print(df_num)
'''
array([[2, 2, 10.7, 47.65, '144'],
       [2, 3, 14.0, 63.13, '215'],
        ...
       [2, 3, 31.0, 19.0, ' ']], dtype=object)

'''

# numpy to pandas
df_pd = pd.DataFrame(df_num)
print(df_pd)
'''
    0  1     2      3     4
0   2  2  10.7  47.65   144
1   2  3  14.0  63.13   215
2   2  2   9.0  58.76   105
3   1  1   8.0  34.88    69
4   2  2  10.0  55.53   134
.. .. ..   ...    ...   ...
58  1  1   5.0  16.66  21.5
59  2  1  21.0   43.0      
60  2  2   5.0   12.0      
61  2  3  13.0   20.0      
62  2  3  31.0   19.0     
'''

# numpy to pandas (columns)
df_pd2 = pd.DataFrame(data = df_num, columns = ["continent", "brand", "size", "period", "price"])
print(df_pd2)
'''
   continent brand  size period price
0          2     2  10.7  47.65   144
1          2     3  14.0  63.13   215
2          2     2   9.0  58.76   105
3          1     1   8.0  34.88    69
4          2     2  10.0  55.53   134
..       ...   ...   ...    ...   ...
58         1     1   5.0  16.66  21.5
59         2     1  21.0   43.0      
60         2     2   5.0   12.0      
61         2     3  13.0   20.0      
62         2     3  31.0   19.0     
'''

 

 

728x90
반응형

'자격증 > 빅데이터 분석기사 (실기)' 카테고리의 다른 글

03_02. 회귀  (0) 2022.06.04
03_01. 분류  (0) 2022.05.30
03_머신러닝 프로세스  (0) 2022.05.30
02_01. 데이터 정제 실전 과제  (0) 2022.05.30
02_데이터 탐색과 데이터 정제  (0) 2022.05.30