λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

κ΅λ‚΄ν™œλ™

파이썬으둜 λ°°μš°λŠ” λ°μ΄ν„°μ‹œκ°ν™”

2020 μˆ™λͺ… Women IN Engineering 

파이썬으둜 λ°°μš°λŠ” 데이터 μ‹œκ°ν™” κ°•μ˜λ‚΄μš© μ°Έκ³ 

μˆ™λͺ…μ—¬μžλŒ€ν•™κ΅ κΈ°μ΄ˆκ΅μ–‘λŒ€ν•™ μœ΅ν•©ν•™λΆ€ λ°•μ˜λ―Όκ΅μˆ˜λ‹˜ | 곡학박사 

 

1. Numpy 뢄석 ν•¨μˆ˜

- numpy ν•¨μˆ˜ κ°œμš”

numpy (numerical python) : 과학계산을 μœ„νŒŒμ΄μ¬ 데이터 뢄석 νŒ¨ν‚€μ§€, 닀차원 배열을 μ²˜λ¦¬ν•˜λŠ”λ° ν•„μš”ν•œ μ—¬λŸ¬ μœ μš©ν•œ κΈ°λŠ₯ 제곡, 데이터 뢄석을 μœ„ν•΄μ„œλŠ” pandas와 ν•¨κ»˜ ν•„μˆ˜μ μœΌλ‘œ μˆ™μ§€ν•΄μ•Όν•˜λŠ” νŒ¨ν‚€μ§€

닀차원배열 (ndarray) : 같은 μžλ£Œν˜•μ˜ 데이터λ₯Ό 담을 수 μžˆλŠ” 포괄적인 닀차원 λ°°μ—΄, ndarray의 λͺ¨λ“  μ›μ†ŒλŠ” 같은 μžλ£Œν˜•λ§Œ μ‚¬μš©κ°€λŠ₯ν•˜λ©° λ°°μ—΄μ˜ 차원을 rank라 ν•˜κ³ , 각 μ°¨μ›μ˜ 크기λ₯Ό νŠœν”Œλ‘œ ν‘œμ‹œν•˜λŠ” 것을 shape라고 ν•œλ‹€

- numpy ν•¨μˆ˜ 닀루기

numpy λ°°μ—΄ 생성

λͺ…렁어 : np.array (리슀트 ν˜•νƒœλ‘œ 데이터 μž…λ ₯)

λ°°μ—΄ λ§Œλ“€κΈ° : μ—°μ†λ˜κ±°λ‚˜ μΌμ •ν•œ κ·œμΉ™μ„ 가진 숫자 λ˜λŠ” ν…Œμ΄ν„° νƒ€μž… λͺ…μ‹œ

λͺ…λ Ήμ–΄ : np.arrange (μ‹œμž‘κ°’, 끝값, 간격) or np.arrange (끝값)

ν–‰λ ¬λ§Œλ“€κΈ°

λͺ…λ Ήμ–΄ : np.reshape (ν–‰, μ—΄, 차원 order = 'C' or 'F')

order = 'C' : 값을 ν–‰λΆ€ν„° μ±„μ›Œλ„£μŒ (κΈ°λ³Έκ°’, μƒλž΅κ°€λŠ₯), order = 'F' : 값을 μ—΄λΆ€ν„° μ±„μ›Œλ„£μŒ

행렬계산 np.add : λ§μ…ˆ, np.subtract : λΊ„μ…ˆ, np.multiply : κ³±μ…ˆ, np.dot : ν–‰λ ¬μ—°μ‚°

닀차원배열 λ§Œλ“€κΈ°

λͺ…λ Ήμ–΄ : np.reshape (ν–‰, μ—΄, 차원 order = 'C' or 'F')

order = 'C' : 값을 ν–‰λΆ€ν„° μ±„μ›Œλ„£μŒ (κΈ°λ³Έκ°’, μƒλž΅κ°€λŠ₯), order = 'F' : 값을 μ—΄λΆ€ν„° μ±„μ›Œλ„£μŒ

닀차원 λ°°μ—΄μ—μ„œ μš”μ†Œμ˜ μ΅œλŒ“κ°’ 및 μ΅œμ†Ÿκ°’ λ°˜ν™˜ _ λͺ…λ Ήμ–΄ : np.amax : μ΅œλŒ“κ°’, np.amin : μ΅œμ†Ÿκ°’

닀차원 λ°°μ—΄μ—μ„œ 데이터 νƒ€μž… 확인 _ λͺ…λ Ήμ–΄ : λ³€μˆ˜λͺ….dtype

닀차원 λ°°μ—΄μ—μ„œ ν–‰, μ—΄, 차원 확인 _ λͺ…λ Ήμ–΄ : λ³€μˆ˜λͺ….shape

- numpy 제곡 ν•¨μˆ˜

abs, fabs : μ ˆλŒ“κ°’μ„ 리턴, λ³΅μ†Œμˆ˜κ°€ μ•„λ‹Œ κ²½μš°μ—λŠ” λΉ λ₯Έ 연산을 μœ„ν•΄ fabs 이용 numpy.abs(arr)

sqrt : 제곱근 계산 numpy.sqrt(arr)

square : μ œκ³±κ³„μ‚° numpy.square(arr)

exp : μ§€μˆ˜κ³„μ‚° numpy.exp(arr)

Log : λ‘œκ·Έκ³„μ‚° numpy.Log(arr)

add : 두 배열을 λ”ν•œλ‹€ numpy.add(arr1, arr2)

subtract : 첫번째 λ°°μ—΄μ—μ„œ λ‘λ²ˆμ§Έ 배열을 λΊ€λ‹€ numpy.subtract(arr1, arr2)

multiply : 두 배열을 κ³±ν•œλ‹€ numpy.multiply(arr1, arr2)

2. Pandas ν•¨μˆ˜μ™€ 데이터 닀루기

- pandas ν•¨μˆ˜ κ°œμš”

pandas : 자료ꡬ쑰 및 데이터 뢄석/처리λ₯Ό μœ„ν•œ 파이썬 νŒ¨ν‚€μ§€, 기본적으둜 μ •μ˜λ˜λŠ” 자료ꡬ쑰인 Series와 DataFrameμ‚¬μš©

Series : index와 value의 ν˜•νƒœλ₯Ό κ°–κ³  μžˆλŠ” pandas의 자료ꡬ쑰, Series의 index와 value둜 κ΅¬μ„±λœλ‹€λŠ” μ μ—μ„œ value만 κ°–λŠ” λ¦¬μŠ€νŠΈμ™€ ꡬ뢄, indexλŠ” κΈ°λ³Έκ°’μœΌλ‘œ 0, 1, 2, 3 ... 으둜 μžλ™μƒμ„±

- DataFrameκ³Ό 데이터 뢈러였기

 1 ) DataFrameκ³Ό 데이터 파일 뢈러였기

import pandas as pd

df = pd.read_csv('file name.csv') CSV 파일 뢈러 올 경우

df = pd.read_excel('file name.xlsx) Excel νŒŒμΌ 뢈러 올 경우

df

μ—‘μ…€κ³Ό 같이 숫자, 문자 λ“± λ‹€μ–‘ν•œ 데이터λ₯Ό ν•˜λ‚˜μ˜ ν‘œμ— 담을 수 μžˆλŠ” 자료ꡬ쑰

각 열은 μ„œλ‘œ λ‹€λ₯Έ μžλ£Œν˜•μ΄ 될 수 있고 μ—΄ 이름, ν–‰ 이름을 가진닀

 2 ) DataFramerκ³Ό 데이터 μ‚΄νŽ΄λ³΄κΈ°

df.head() : 데이터 μ•ž λͺ‡κ°œμ˜ ν–‰ 뢈러옴, 곡백인 경우 5개

df.tail() : 데이터 λ’€ λͺ‡κ°œμ˜ ν–‰ 뢈러옴, 곡백인 경우 5개

df[1:6] : 1μ—μ„œ 5κΉŒμ§€ 좜λ ₯

λͺ…λ Ήμ–΄ : λ³€μˆ˜λͺ… [처음 좜λ ₯ν•  ν–‰ : λ§ˆμ§€λ§‰μœΌλ‘œ 좜λ ₯ν•  ν–‰ + 1]

λ°μ΄ν„°ν”„λ ˆμž„ νŠΉμ • μ—΄ 뢈러였기 : df['amount'], df[df.columns[[1, 3, 10]]], df.loc[:, 'decision':'location']

 3 ) DataFrameκ³Ό 데이터 λ³€ν™˜ν•˜κΈ°

볡사, μΆ”κ°€ , μ‚­μ œ : df_columns = df.copy(), df_columns.columns, df_columns = df_columns[['a', 'b', 'c']], df_olumns.head()

λ³€μˆ˜μ΄λ¦„ λ³€κ²½, ν–‰ μΆ”κ°€ 및 μ‚­μ œ : df_columns.rename(columns={'a' : 'b'}, inplace=True), df['a'] = df['b']*1.1, del df['a']

데이터 μΌ€μ΄μŠ€ μΆ”μΆœ : df_a = df[(df['a']=1)], df_a : a 쀑 1만 μΆ”μΆœν•˜μ—¬ λ³„λ„μ˜ ν”„λ ˆμž„ λ§Œλ“€κΈ°

google colab

3. 뢄석데이터 μ‚΄νŽ΄λ³΄κΈ°

- μ‹€μŠ΅μš© 데이터 λ‘˜λŸ¬λ³΄κΈ°

데이터 속성

뢄석λͺ¨ν˜•

- μžλ£Œμ™€ 뢄석 κ°„μ˜ 관계

μ²™λ„μ˜ μ’…λ₯˜ : λͺ…λͺ©μ²™λ„, μ„œμ—΄μ²™λ„, 등간척도, λΉ„μœ¨μ²™λ„

μžλ£Œμœ ν˜•κ³Ό 뢄석 방법 :

척도와 λΆ„μ„κ°„μ˜ 관계 λ…λ¦½λ³€μˆ˜
λ²”μ£Όν˜• 자료 μ—°μ†ν˜• 자료
μ’…μ†λ³€μˆ˜ λ²”μ£Όν˜• 자료 ꡐ차뢄석

λ‘œμ§€μŠ€ν‹± νšŒκ·€λΆ„μ„, 

νŒλ³„λΆ„μ„, ꡰ집뢄석

μ—°μ†ν˜• 자료 t-test, 뢄산뢄석 상관관계뢄석, μ„ ν˜•νšŒκ·€λΆ„μ„

ꡐ차뢄석 : λ…λ¦½λ³€μˆ˜μ™€ μ’…μ†λ³€μˆ˜κ°€ λͺ¨λ‘ λ²”μ£Όν˜•μΈ 경우 두 λ³€μˆ˜κ°„μ˜ 관계λ₯Ό νŒŒμ•…ν•˜λŠ” 톡계뢄석방법

t-test, 뢄산뢄석 : λ…λ¦½λ³€μˆ˜κ°€ λ²”μ£Όν˜•μ΄κ³ , μ’…μ†λ³€μˆ˜κ°€ μ—°μ†ν˜• μžλ£Œκ°„μ˜ 관계λ₯Ό νŒŒμ•…ν•˜λŠ” 톡계뢄석방법

상관관계, μ„ ν˜•νšŒκ·€λΆ„μ„ : λ…λ¦½λ³€μˆ˜μ™€ μ’…μ†λ³€μˆ˜κ°€ λͺ¨λ‘ μ—°μ†ν˜•μΈ 경우 두 λ³€μˆ˜ κ°„μ˜ 관계λ₯Ό νŒŒμ•…ν•˜λŠ” 톡계뢄석방법

- μ‹€μŠ΅μš© 데이터 λΆ„μ„ν•˜κΈ°

자료 κ°„μ˜ μ–΄λ–€ 뢄석이 μ ν•©ν•œμ§€ μƒκ°ν•˜κΈ°

4. 데이터 탐색과 λΉˆλ„λΆ„μ„

- 데이터 탐색

κ°œλ… : 데이터 뢄석을 μˆ˜ν–‰ν•˜κΈ° 전에 각 λ³€μˆ˜ 및 λ³€μˆ˜κ°„μ˜ 관계λ₯Ό 탐색적 λͺ©μ μœΌλ‘œ νŒŒμ•…ν•˜λŠ” 것

         λ°μ΄ν„° 탐색이 μΆ©μ‹€ν•΄μ•Ό μ„±λŠ₯ 쒋은 λͺ¨λΈμ„ 얻을 수 μžˆλ‹€

λͺ©μ  : μžλ£Œμž…λ ₯의 μ‹€μˆ˜λ‚˜ 이상값 탐지, λΆ„μ„μ˜ 가정이 μΆ©μ‘±λ˜μ—ˆλŠ”μ§€ νŒŒμ•…, μ μ ˆν•œ λͺ¨λΈ 선택을 μœ„ν•œ 초기 진단, λ³€μˆ˜λ“€ κ°„ 관계가 μ‘΄μž¬ν•˜λŠ”μ§€ νŒŒμ•…ν•¨μœΌλ‘œμ¨ λ…λ¦½λ³€μˆ˜μ™€ μ’…μ†λ³€μˆ˜κ°„μ— +관계인지 -관계인지, μ–Όλ§ˆλ‚˜ 관련성이 큰지λ₯Ό 평가

단일 λ³€μˆ˜μ˜ 데이터 탐색 뢄석 : μ •κ·œμ„±, μ΄μƒμΉ˜

λ³€μˆ˜λ“€ κ°„μ˜ 데이터 탐색 뢄석 : μ„ ν˜•μ„±, μ΄μƒμΉ˜

- λΉˆλ„λΆ„μ„

뢄석 및 자료의 νŠΉμ„± : λ²”μ£Όν˜• 자료의 μ‘λ‹΅μž, νΌμ„ΌνŠΈλ₯Ό κ΅¬ν•˜λŠ” 뢄석방법, λ²”μ£Όν˜•μžλ£Œκ°€ λΆ„μ„μ˜ λŒ€μƒ

뢄석λͺ©μ  : λ²”μ£Όν˜• 자료의 응닡 및 ꡬ성 ν‘œλ³Έμˆ˜μ™€ λΉ„μœ¨ νŒŒμ•…, λͺ¨λ“  λ³€μˆ˜μ— λŒ€ν•΄ 잘λͺ» μž…λ ₯된 κ°’, ν˜Ήμ€ μ΄μƒμΉ˜κ°€ μžˆλŠ”μ§€ νŒŒμ•…, ν•˜μœ„λ²”μ£Όκ°€ μ μ •ν•œμ§€ κ²€ν† 

- λΉˆλ„λΆ„μ„ μ‹€μŠ΅

γ…‡γ…‡λ³€μˆ˜μ— λŒ€ν•œ λΉˆλ„λΆ„μ„ μˆ˜ν–‰ 

원, λ§‰λŒ€ κ·Έλž˜ν”„ 등을 μ΄μš©ν•œ λΉˆλ„λΆ„μ„ μ‹œκ°ν™”

replaceν•¨μˆ˜λ₯Ό μ΄μš©ν•œ μ—΄ 이름 λ³€κ²½

5. 데이터 탐색과 κΈ°μˆ ν†΅κ³„λΆ„μ„

- 기술 톡계뢄석

뢄석 및 자료의 νŠΉμ„± : μ—°μ†ν˜• 자료의 평균.ν‘œμ€€νŽΈμ°¨.μ™œλ„.첨도λ₯Ό κ΅¬ν•˜λŠ” 뢄석방법, μ—°μ†ν˜•μžλ£Œκ°€ λΆ„μ„μ˜ λŒ€μƒ

뢄석λͺ©μ  : μ—°μ†ν˜• 자료의 쀑심, 자료의 퍼짐, 치우침과 뾰쑱함 λ“±μ˜ νŠΉμ„± μš”μ•½μ„ νŒŒμ•…, ν‘œμ€€ν™”μ μˆ˜λ₯Ό κ³„μ‚°ν•˜μ—¬ 각 μ‘λ‹΅κ°’μ˜ ν‘œμ€€ν™”μ μˆ˜λ₯Ό μ €μž₯

- μ—°μ†ν˜• 자료의 ν†΅κ³„λŸ‰

쀑심화경ν–₯ : 평균, μ€‘μœ„μˆ˜, μ΅œλΉˆκ°’

산포도 : λΆ„μ‚°, ν‘œμ€€νŽΈμ°¨, λ²”μœ„, μ‚¬λΆ„μœ„λ²”μœ„

뢄포도 : μ™œλ„, 첨도

- 데이터 탐색을 μœ„ν•œ κΈ°μˆ ν†΅κ³„ ν•¨μˆ˜

count, describe, min/max, argmin/argmax, idxmin/idxmax, quantile, sum, mean, median, mad, var, std, skew, kurt, cumsum, summin/cummax, cumprod, diff, pct_change, corr, cov

- κΈ°μˆ ν†΅κ³„λΆ„μ„ μ‹€μŠ΅

 1 ) 데이터 νŠΉμ„± 뢄석 및 기술

λ°μ΄ν„°μ˜ 쀑심화경ν–₯, 산포도, 뢄포도 기술 톡계뢄석

μ΅œλŒ“κ°’, μ΅œμ†Ÿκ°’, 합계, 평균, λΆ„μ‚°, ν‘œμ€€νŽΈμ°¨, μ™œλ„, 첨도 λ“± μš”μ•½ 및 정리

dataλͺ….info()

dataλͺ….describe()

dataλͺ…['λ³€μˆ˜λͺ…'].describe()

 2 ) κ·Έλž˜ν”„ μ‹œκ°ν™”

import matplotlib.pyplot as plt

df.hist(bins = a, figsize = (b, c))

df_a = df['d'] : dλ³€μˆ˜λ§Œ 보기

df_d.hist(bins = a, figsize = (b, c))

df_a = df['e'] : eλ³€μˆ˜λ§Œ 보기

df_e.hist(bins = a, figsize = (b, c))

seabornνŒ¨ν‚€μ§€ 이용 : import seaborn as sns

sns.distplot(df_d, rug=True)

sns.jointplot(x="d", y="e", data=df) : d와 eκ°„ 산점도/뢄포 그렀보기

- μ΄μƒμΉ˜ 제거

 1 ) IQR κΈ°μ€€ μ΄μƒμΉ˜ 제거

μ‚¬μœ„μˆ˜λ₯Ό μ΄μš©ν•œ μ΄μƒμΉ˜ 제거

df.quantile()

Q1 = df['λ³€μˆ˜λͺ…'].quantile(q=0.25)

Q2 = df['λ³€μˆ˜λͺ…'].quantile(q=0.50)

Q3 = df['λ³€μˆ˜λͺ…'].quantile(q=0.75)

IQR = Q3 - Q1

df[(df['λ³€μˆ˜λͺ…']<Q3+IQR*1.5) & df['λ³€μˆ˜λͺ…']>Q1-IQR*1.5)]

 2 ) μ—°κ΅¬μž κΈ°μ€€ μ΄μƒμΉ˜ 제거

aλŠ” 5 미만, bλŠ” 10 미만으둜 데이터 필터링

ndf = df.filter(['a','b'])

ndf = ndf[(ndf['b']<10) & (ndf['a']<5)]

ndf.hist(bins=50, figsize=(15,10))

sns.jointplot(x='a', y='b', data=ndf)

 3 ) log λ³€ν™˜ν›„ κ²°κ³Ό

import numpy as np

ndf['logamount']=np.log(ndf['a'])

sns.jointplot(x='a', y='b', data=ndf, kind="kde", space=0, zorder=0, n_levels=6)