Oracle DB에서 데이터 가져오기, 머신러닝 라이브러리인 scikit-learn을 이용하여 붓꽃 데이터 분류하는 모델 만들기를 실시하였다.

여기 나오는 내용은 "파이썬을 이용한 머신러닝, 딥러닝, 실전 개발 입문"에 나오는 내용이다.



====================== Python ======================

# cx_Oracle

import cx_Oracle as xe

# ImportError: DLL load failed => 설치된 오라클 bin => oci.dll => Lib/site-package

# dsn: data source name   데이터 원본 이름

dsn = xe.makedsn("127.0.0.1", 1521, "xe")  # ip, port, SID

conn = xe.connect("id", "pw", dsn)  # id, pw, dsn자료

    # print(dsn)  # 데이터 확인

    # print(conn)  # 데이터 확인

# 커서 => 일련의 데이터에 순차적으로 엑세스 할 때, 검색, 현재 위치를 포함하는 요소이다.

# 커서 => 현재 작업중인 레코드를 가리키는 오브젝트이다.

# 관계형 데이터 베이스에서 연산을 전체 행의 집합에 적용된다.

cursor = conn.cursor()

    # print(cursor)  # 데이터 확인

# 자원해제를 반드시 해야한다. 메모리에 계속 유지할 수 있기 때문이다.

cursor.close()


# 자료검색

dsn = xe.makedsn("127.0.0.1", 1521, "xe")  # ip, port, SID

conn = xe.connect("java00", "java00", dsn)  # id, pw, dsn자료

cursor = conn.cursor()

cursor.execute("select * from board")

row = cursor.fetchall()  # 위의 쿼리에서 나온 값을 전부 저장하는 .fetchall()

    # print(row)  # 리스트로 저장


    # for row in cursor.fetchall():  # 리스트를 보기 좋게 출력

    #     print(row)

cursor.close()






from tinydb import TinyDB, Query


# 데이터베이스 연결하기

filepath = "test-tinydb.json"

db = TinyDB(filepath)


# 기존의 테이블이 있다면 제거하기

db.purge_table('fruits')


# 테이블 생성/추출하기

table = db.table('fruits')


# 테이블에 데이터 추가하기

table.insert({'name': 'Banana', 'price': 6000})

table.insert({'name': 'Orange', 'price': 12000})

table.insert({'name': 'Mango', 'price': 8400})


# 모든 데이터를 추출해서 출력하기

print(table.all())


# 특정 데이터 추출하기

# Orange 검색하기

Item = Query()

res = table.search(Item.name == 'Orange')

print('Orange is', res[0]['price'])


# 가격이 8000원 이상인 것 추출하기

print("8000원 이상인 것:")

res = table.search(Item.price >= 8000)

for it in res:

    print("-", it['name'])






from sklearn import svm, metrics

import random, re


# 붓꽃의 CSV 데이터 읽어 들이기

csv = []

with open('iris.csv', 'r', encoding='utf-8') as fp:

    # 한 줄씩 읽어 들이기

    for line in fp:

        line = line.strip()  # 줄바꿈 제거

        cols = line.split(',')  # 쉼표로 자르기

        # 문자열 데이터를 숫자로 변환하기

        fn = lambda n: float(n) if re.match(r'^[0-9\.]+$', n) else n

        cols = list(map(fn, cols))

        csv.append(cols)


# 가장 앞 줄의 헤더 제거

del csv[0]


# 데이터 셔플하기

random.shuffle(csv)


# 학습 전용 데이터와 테스트 전용 데이터 분할하기

total_len = len(csv)

train_len = int(total_len * 2/3)

train_data = []

train_label = []

test_data = []

test_label = []

for i in range(total_len):

    data = csv[i][0:4]

    label = csv[i][4]

    if i < train_len:

        train_data.append(data)

        train_label.append(label)

    else:

        test_data.append(data)

        test_label.append(label)


# 데이터를 학습시키고 예측하기

clf = svm.SVC()

clf.fit(train_data, train_label)

pre = clf.predict(test_data)


# 정답률 구하기

ac_score = metrics.accuracy_score(test_label, pre)

print('정답률 =', ac_score)







from sklearn import svm, metrics

import pandas as pd

from sklearn.model_selection import train_test_split


# 붓꽃의 CSV 데이터 읽어 들이기

csv = pd.read_csv('iris.csv')


# 필요한 열 추출하기

csv_data = csv[["SepalLength", "SepalWidth", "PetalLength", "PetalWidth"]]

csv_label = csv["Name"]


# 학습 전용 데이터와 테스트 전용 데이터로 나누기

train_data, test_data, train_label, test_label = \

    train_test_split(csv_data, csv_label)


# 데이터 학습시키고 예측하기

clf = svm.SVC()

clf.fit(train_data, train_label)

pre = clf.predict(test_data)


# 정답률 구하기

ac_score = metrics.accuracy_score(test_label, pre)

print("정답률 =", ac_score)


====================== Python ======================

+ Recent posts