Study/연습

빅데이터시스템개발 - test, train Data target/Shuffle/저장

상맹 2021. 10. 26. 14:30
반응형

1. 파이썬 pip를 활용하여 numpypandas 라이브러리를 설치한다.

- pip install numpy (python -m pip install numpy)

- pip install pandas

- pip install sqlalchemy

 

2. 파이썬을 활용하여 fish csv 파일을 로드한다.

bream_length = pd.read_csv("bream_length.csv").to_numpy().flatten()
bream_weight = pd.read_csv("bream_weight.csv").to_numpy().flatten()
smelt_length = pd.read_csv("smelt_length.csv").to_numpy().flatten()
smelt_weight = pd.read_csv("smelt_weight.csv").to_numpy().flatten()

 

3. 로드한 도미와 빙어 데이터를 x축은 length, y축은 weight로 하여 matplot으로 시각화한다.

plt.scatter(bream_length, bream_weight)
plt.scatter(smelt_length, smelt_weight)
plt.show()

 

4. 도미와 빙어 데이터를 1차원 배열 length, weight로 합친 뒤 2차원 배열로 만들고 shape을 확인할 수 있다.

[ [길이, 무게], [길이, 무게], ... ]

도미와 빙어를 구분할 수 있게 도미를 찾는 타겟 데이터를 만든다.

 

도미, 빙어 데이터 length, weight 끼리 합치기

fish_length = np.concatenate((bream_length, smelt_length))
fish_weight = np.concatenate((bream_weight, smelt_weight))

fish_data = np.column_stack((fish_length, fish_weight))
print(fish_data)

 

5. 도미 1, 빙어 0 으로 구분!!

print(bream_length.shape)
print(smelt_length.shape)

fish_target = np.concatenate((np.ones(35), np.zeros(14)))
print(fish_target)

6. shuffle을 이용하여 데이터를 섞는다.

 - 인덱스 만들기

indexes = np.arange(49)

 

 - 인덱스 기반으로 셔플하기

np.random.shuffle(indexes)
print(indexes)

 

 - 실제데이터를 인덱스로 섞기

fish_data = fish_data[indexes]
fish_target = fish_target[indexes]
print(fish_data)
print(fish_target)

7. 테스트 데이터와 훈련 데이터로 구분한다

 - 훈련 데이터와 검증(테스트) 데이터로 나누기 : Cross-Validation (80:20 → 39개, 10개)

train_data = fish_data[:39]
train_target = fish_target[:39]
test_data = fish_data[39:]
test_target = fish_data[39:]

8. 훈련 데이터를 x축은 length, y축은 weight로 하여 matplot으로 시각화한다.

plt.scatter(train_data[:, 0], train_data[:, 1])
plt.show()

9. train_target, train_length, train_weight 형태로 pandas에 저장한 뒤 MariaDB로 저장한다.(테이블명 train)

 - pandas 로 변환하기

train_target = train_target.reshape(39, 1)
train = np.hstack((train_data, train_target))

train_dataFrame = pd.DataFrame(
    train, columns=["train_length", "train_weight", "train_target"])

 - MariaDB에 저장

engine = db.create_engine("mariadb+mariadbconnector://python:python1234@127.0.0.1:3306/pythondb")
train_dataFrame.to_sql("train",engine, index=False,if_exists="replace")

 - DB 조회

SELECT * FROM train;

10. test_target, test_length, test_weight 형태로 pandas에 저장한 뒤 MariaDB로 저장한다.(테이블명 test)

 - pandas 로 변환하기

test_target = test_target.reshape(10, 1)
test = np.hstack((test_data, test_target))

test_dataFrame = pd.DataFrame(
    test, columns=["test_length", "test_weight", "test_target"])

 - MariaDB에 저장

engine = db.create_engine("mariadb+mariadbconnector://python:python1234@127.0.0.1:3306/pythondb")
test_dataFrame.to_sql("test",engine, index=False,if_exists="replace")

 - DB 조회

SELECT * FROM test;

 


<전체 코드>

# 1. 라이브러리 설치
import numpy as np
import pandas as pd
import sqlalchemy as db
import matplotlib.pyplot as plt

# 2. CSV 로드하기
bream_length = pd.read_csv("bream_length.csv").to_numpy().flatten()
bream_weight = pd.read_csv("bream_weight.csv").to_numpy().flatten()
smelt_length = pd.read_csv("smelt_length.csv").to_numpy().flatten()
smelt_weight = pd.read_csv("smelt_weight.csv").to_numpy().flatten()

# print(bream_length)

# 3. CSV 데이터 시각화하기
plt.scatter(bream_length, bream_weight)
plt.scatter(smelt_length, smelt_weight)
# plt.show()

# 4. 도미, 빙어 데이터 length, weight 끼리 합치기
fish_length = np.concatenate((bream_length, smelt_length))
fish_weight = np.concatenate((bream_weight, smelt_weight))

fish_data = np.column_stack((fish_length, fish_weight))
# print(fish_data)

# 5. 타겟 데이터 만들기
# print(bream_length.shape)
# print(smelt_length.shape)

fish_target = np.concatenate((np.ones(35), np.zeros(14)))
# print(fish_target)

# 6. 데이터 셔플하기 (샘플링 편향 막기)

indexes = np.arange(49)
np.random.shuffle(indexes)
# print(indexes)

fish_data = fish_data[indexes]
fish_target = fish_target[indexes]
# print(fish_data)
# print(fish_target)

# 7. 훈련 데이터와 검증(테스트) 데이터로 나누기 (80:20) (39개, 10개)
train_data = fish_data[:39]
train_target = fish_target[:39]
test_data = fish_data[39:]
test_target = fish_data[39:]

# 8. 훈련 데이터 시각화 하기
plt.scatter(train_data[:, 0], train_data[:, 1])
# plt.show()

# 9. 데이터를 판다스로 변환하기

# (1) train
train_target = train_target.reshape(39, 1)
train = np.hstack((train_data, train_target))

train_dataFrame = pd.DataFrame(
    train, columns=["train_length", "train_weight", "train_target"])


# (2) test
test_target = test_target.reshape(10, 1)
test = np.hstack((test_data, test_target))

test_dataFrame = pd.DataFrame(
    test, columns=["test_length", "test_weight", "test_target"])

# 10 . DB에 insert 하기
engine = db.create_engine("mariadb+mariadbconnector://python:python1234@127.0.0.1:3306/pythondb")
train_dataFrame.to_sql("train",engine, index=False,if_exists="replace")
test_dataFrame.to_sql("test",engine, index=False,if_exists="replace")
반응형