728x90
반응형

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 결측값

df.loc[1 , ['X1' , 'X3']] = np.nan
df.loc[2, 'X2'] = np.nan
df.loc[3 , 'X2'] = np.nan
df

df 결측값

2> 결측값을 앞방향으로 채우기

 

df_f = df.fillna(method = 'ffill')
df_f

df 결측값 앞방향 채우기

df_f = df.fillna(method = 'ffill' , limit = 1)
df_f

df 결측값 앞방향 채우기

==> limit로 채우는거 개수 제한하기

 

3> 결측값을 뒷방향으로 채우기

 

df_b = df.fillna(method = 'bfill')
df_b

df 결측값 뒷방향 채우기

 

728x90
반응형

+ Recent posts