728x90
반응형
출처 : https://book.naver.com/bookdb/book_detail.nhn?bid=21488029
*해당 글은 학습을 목적으로 위의 도서 내용 중 일부 내용만을 요약하여 작성한 포스팅입니다.
상세 내용 및 전체 내용 확인을 원하신다면 도서 구매를 추천드립니다.
파이썬 자료구조
리스트
- 파이썬은 하나의 리스트에 다양한 유형의 데이터를 담을 수 있다.
- 심지어 리스트 내에 리스트 추가도 가능하다.
- 파이썬에서의 리스트는 대괄호 ([ ])로 표현된다.
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 |