[PYTHON- 기초통계 -01]★클래스와 인스턴스★유용한 라이브러리★numpy활용★벡터 기본연산★결측값
1. 통계분석에 유용한 라이브러리
1> Scikit-learn(사이킷-런)
==> 딥러닝을 제외한 머신러닝 라이브러리이며 머신러닝에서 가장 많이 활용되는 분류, 회귀, 랭킹 , 예측 등의 다양한 알고리즘을 내장하고 있다.
==> Python 머신러닝 app에서 수행하는 실제 연산작업 대부분은 일반적으로 c,c++ , JAVA 등으로 작성한다.
==> python은 라이브러리를 통해 이를 정리하고 상호작용
import pandas as pd
import numpy as np
import platform
import matplotlib
import seaborn as sns
from matplotlib import font_manager, rc
from matplotlib import ticker
import statsmodels.formula.api as smf # 통계 모형
import statsmodels.api as sm
import matplotlib.pyplot as plt
import scipy as sp
from scipy.stats import probplot
from sympy import Symbol, solve
sns.set()
%precision 3 # 소수점 3자리까지 표현
%matplotlib inline # 그래프를 주피터 노트북에 그리기
# Window
if platform.system() == 'Windows':
matplotlib.rc('font', family='Malgun Gothic')
elif platform.system() == 'Darwin': # Mac
matplotlib.rc('font', family='AppleGothic')
else: #linux
matplotlib.rc('font', family='NanumGothic')
# 그래프에 마이너스 표시가 되도록 변경
matplotlib.rcParams['axes.unicode_minus'] = False
# 한글 폰트 설정
font_location = 'C:/Windows/Fonts/MALGUNSL.TTF' #맑은고딕
font_name = font_manager.FontProperties(fname=font_location).get_name()
rc('font',family=font_name)
==> 라이브러리 import 하기
2. 클래스와 인스턴스
1> class 와 instance
==> 데이터 구조와 계산 로직을 한 군데서 사용할 수 있도록 함께 묶어둔 목록
==> class : 데이터와 기능을 함께 묶는 방법 제공
==> instance : class에 의해 만들어진 객체
==> method : 함수와 비슷한 개념으로 클래스에 묶여서 클래스 안에 있는 인스턴스와 관계되는 함수
==> 붕어빵 틀은 class , 붕어빵틀 안에 있는 석쇠는 method , 결과로 나오는 붕어빵은 instance
class Ex_class:
def __init__(self, data1 , data2):
self.r = data1
self.l = data2
x = Ex_class(3 , 4)
x.r + x.l
==> 한 가지 함수를 적용
class Rectangle: #붕어빵 틀
count = 0 # 클래스 변수
#초기자(iniializer)
def __init__(self , width, height): #붕어빵 석쇠
#self.* : 인스턴스 변수
self.width = width
self.height = height
Rectangle.count += 1
# 메서드
def calcArea(self):
area = self.width * self.height
return area
r = Rectangle(2,3) #인스턴스 생성 ==> self = r , width = 2 , height = 3
area = r.calcArea() #메서드 호출 ==> self = r , r.width = 2 , r.height = 3 ==> area = r.width * r.height ==> area = 6
print("area :" , area)
r.width = 10 #인스턴스 변수 액세스
print("width :" , r.width)
print(Rectangle.count) #클래스 변수 액세스
print(r.count)
==> 2가지 함수를 적용한 클래스
class Animal :
def __init__(self , name):
self.name = name
def move(self):
print('move')
def speak(self):
pass
class Dog(Animal): #파싱 클래스
def speak(self):
print('bark')
class Duck (Animal):
def speak(self):
print('quack')
dog = Dog('doggy') #부모 클래스 생성자 ==> self = dog ==> dog.name = doggy , dog.name ==> print(move)
n = dog.name #부모클래스의 인스턴스 변수
dog.move() #부모클래스의 매서드
dog.speak() #파싱클래스의 맴버
animals = [Dog('doggy') , Duck('duck')]
for a in animals:
a.speak()
move
bark
bark
quack
==> 문자열 반환
3. numpy 활용
EX-01) 국어 시험 점수를 데이터벡터로 저장
A = '96 80 76 96 88 75 78 89 92 70'
B = '67 83 96 90 85 75 82 89 92 75'
A = list(map(int , A.split(' ')))
B = list(map(int , B.split(' ')))
k_score1 = np.array([A])
k_score2 = np.array([B])
score = np.append(k_score1 , k_score2)
score
sc = np.hstack([k_score1, k_score2])
print(sc)
==> hstack() 함수를 활용하여 수평결합을 얻는다.
[[96 80 76 96 88 75 78 89 92 70 67 83 96 90 85 75 82 89 92 75]]
4. 데이터 프레임 정렬
df = pd.DataFrame({'name' : ['KIM' , 'LEE' , 'Park' , 'Bae' , 'Kang'] , 'age' : [24 , 32 , 43 , 24 , np.nan] , 'height' : [160 , 170 ,165 , 173 ,158]})
df['rank_average'] = df['age'].rank(method = 'min' , ascending = False , na_option = 'bottom')
df
==> method = 'min' 옵션은 동점일 경우 최솟값을 주고 ascending = False 옵션은 내림차순 , 값이 클수록 큰 순위
dfObj = df.sort_values(by = 'name')
dfObj
==> sort_values(by = '열이름') ==> 오름차순
dfObj = df.sort_values(by = ['name' , 'age'])
dfObj
==> sort_values(by = ['name' , 'age']) 별 오름차순 정렬
5. 벡터 기본 연산
1> x+y
x = np.array([1,2,3,4,5])
y = np.array([-1,-2,-3,-4,-5])
print(x+y)
[0 0 0 0 0]
2> x'y ==> numpy matmul 모듈 활용 ==> 2차원 행렬의 곱셈
print(np.matmul(x , y.T))
-55
x = (1,5) 행렬 , y.T = (5,1) 행렬
print(np.outer(x, y.T))
[[ -1 -2 -3 -4 -5]
[ -2 -4 -6 -8 -10]
[ -3 -6 -9 -12 -15]
[ -4 -8 -12 -16 -20]
[ -5 -10 -15 -20 -25]]
print(np.multiply(x, y.T))
[ -1 -4 -9 -16 -25]
print(np.hstack([x, y.T]))
[ 1 2 3 4 5 -1 -2 -3 -4 -5]
3>대각행렬
print(np.diag([1 for _ in range(5)]))
[[1 0 0 0 0]
[0 1 0 0 0]
[0 0 1 0 0]
[0 0 0 1 0]
[0 0 0 0 1]]
5. 데이터 프레임 결측값
b = np.arange(12).reshape(4,3)
df = pd.DataFrame(b , columns = ['X1' , 'X2' , 'X3'])
df
df.loc[1 , ['X1' , 'X3']] = np.nan
df.loc[2, 'X2'] = np.nan
df.loc[3 , 'X2'] = np.nan
df
2> 결측값을 앞방향으로 채우기
df_f = df.fillna(method = 'ffill')
df_f
df_f = df.fillna(method = 'ffill' , limit = 1)
df_f
==> limit로 채우는거 개수 제한하기
3> 결측값을 뒷방향으로 채우기
df_b = df.fillna(method = 'bfill')
df_b
'PYTHON-기초통계 > PYTHON 라이브러리' 카테고리의 다른 글
[PYTHON- 라이브러리]★PDF to DataFrame★ (0) | 2024.04.11 |
---|---|
[PYTHON- 기초통계 -02]★데이터프레임 추출★ (0) | 2023.01.20 |