# ์ญ ์ด๋ฆ์์ผ๋ก ์ ๋ ฌ
data = self.passengers.sort_values(by='์ญ๋ช
') # = station_location.sort_values(by='์ญ๋ช
')
# ์ฌ์ฉํ ํธ์ ์ธ 2ํธ์ ๋ง ์ถ์ถ
line2 = data[data["๋
ธ์ ๋ช
"] == "2ํธ์ "]
print(line2)
์๋ณธ ๋ฐ์ดํฐ์์๋ ์น์ฐจ์ด์น๊ฐ์์ ํ์ฐจ์ด์น๊ฐ์๋ง ๋์์์ด์ y๊ฐ์ผ๋ก ์ฌ์ฉํ ์ปฌ๋ผ์ด ์๋ ์ํ์ด๋ฏ๋ก ๊ฐ ์ผ์๋ณ ์นํ์ฐจ ๋ณ๋์ ๋ํ๋ด๋ ์ปฌ๋ผ์ ์ถ๊ฐ
for i, j in enumerate(data['์น์ฐจ์ด์น๊ฐ์']):
if i != 0:
on_rate.append(round((data['์น์ฐจ์ด์น๊ฐ์'][i] - data['์น์ฐจ์ด์น๊ฐ์'][i-1])/data['์น์ฐจ์ด์น๊ฐ์'][i-1]*100, 2))
off_rate.append(round((data['ํ์ฐจ์ด์น๊ฐ์'][i] - data['ํ์ฐจ์ด์น๊ฐ์'][i-1])/data['ํ์ฐจ์ด์น๊ฐ์'][i-1]*100, 2))
else:
on_rate.append(0)
off_rate.append(0)
else:
pass
df_on = pd.DataFrame(on_rate, columns=['์น์ฐจ๋ณ๋(%)'])
df_off = pd.DataFrame(off_rate, columns=['ํ์ฐจ๋ณ๋(%)'])
df = pd.concat([data, df_on, df_off], axis=1)
print(df)
df.to_csv(path_or_buf=f"./data/rate/{k}์ญ.csv", index=False)
print(f"{k}์ญ ์ ์ฅ ์๋ฃ")
on_rate.clear()
off_rate.clear()
data = pd.read_csv('./data/sorted_subway.csv')
meta = self.count_index()
df_rows = []
# ์ญ ์ด๋ฆ๋ณ๋ก csv ํ์ผ ๋ถ๋ฆฌ
for k in meta:
for i, j in enumerate(data['์ญ๋ช
']):
if j == k:
df_rows.append(data.loc[i])
else:
pass
df = pd.DataFrame(df_rows, columns=['์ฌ์ฉ์ผ์', '์ญ๋ช
', '์น์ฐจ์ด์น๊ฐ์', 'ํ์ฐจ์ด์น๊ฐ์'])
df.to_csv(path_or_buf=f"{k}์ญ.csv", index=False)
print(f"{k}์ญ ์ ์ฅ ์๋ฃ")
df_rows.clear()
meta = self.count_index()
on_rate = []
off_rate = []
for k in meta:
data = pd.read_csv(f'./data/save/{k}์ญ.csv')
for i, j in enumerate(data['์น์ฐจ์ด์น๊ฐ์']):
if i != 0:
on_rate.append(round((data['์น์ฐจ์ด์น๊ฐ์'][i] - data['์น์ฐจ์ด์น๊ฐ์'][i-1])/data['์น์ฐจ์ด์น๊ฐ์'][i-1]*100, 2))
off_rate.append(round((data['ํ์ฐจ์ด์น๊ฐ์'][i] - data['ํ์ฐจ์ด์น๊ฐ์'][i-1])/data['ํ์ฐจ์ด์น๊ฐ์'][i-1]*100, 2))
else:
on_rate.append(0)
off_rate.append(0)
else:
pass
df_on = pd.DataFrame(on_rate, columns=['์น์ฐจ๋ณ๋(%)'])
df_off = pd.DataFrame(off_rate, columns=['ํ์ฐจ๋ณ๋(%)'])
df = pd.concat([data, df_on, df_off], axis=1)
print(df)
df.to_csv(path_or_buf=f"./data/rate/{k}์ญ.csv", index=False)
print(f"{k}์ญ ์ ์ฅ ์๋ฃ")
on_rate.clear()
off_rate.clear()
์ ์ฒ๋ฆฌ ์ด์
์๋น์ค ๋์ ์ง์ญ ์ถ์
๊ฐ ์ญ๋ณ csv ์์ฑ
y๊ฐ์ธ ์นํ์ฐจ ์น๊ฐ์ ๋ณ๋ ์ปฌ๋ผ ์ถ๊ฐ
numerator = data - np.min(data, 0)
denominator = np.max(data, 0) - np.min(data, 0)
return numerator / (denominator + 1e-7) # 0์ผ๋ก ๋๋๋ ์๋ฌ๊ฐ ๋ฐ์์ ๋ง๊ธฐ ์ํด ๋งค์ฐ ์์ ๊ฐ(1e-7)์ ๋ํด์ ๋๋๋ค
df = pd.read_csv('./data/rate/๊ฐ๋จ์ญ.csv')
dfx = df[['์ฌ์ฉ์ผ์', '์น์ฐจ์ด์น๊ฐ์', 'ํ์ฐจ์ด์น๊ฐ์']]
dfx = self.min_max_scaler(dfx)
dfy = df[['์น์ฐจ๋ณ๋(%)']]
print(f'dfx : {dfx.head()}')
print(f'0~1 : {dfx.describe()}')
print(f'y : {dfy}')
๊ณํ : ๊ฐ ์ญ๋ณ๋ก ์ผ๋ณ ์นํ์ฐจ์ด์น๊ฐ์๋ฅผ ๋ฐํ์ผ๋ก ํ์ฐจ์ด์น๊ฐ์๋ฅผ ์์ธกํ๋ค
import gmaps
import keras
import pandas as pd
import numpy as np
from keras import Sequential
from keras.layers import Dropout, LSTM, Dense
from matplotlib import pyplot as plt
from preprocess import Preprocess
class Forecast_model():
def init(self):
pass
def model(self):
meta = Preprocess()
for k in meta.count_index():
df = pd.read_csv(f'./data/rate/{k}์ญ.csv')
dfx = df[['์ฌ์ฉ์ผ์', '์น์ฐจ์ด์น๊ฐ์', 'ํ์ฐจ์ด์น๊ฐ์']]
dfx = meta.min_max_scaler(dfx)
dfy = df[['ํ์ฐจ๋ณ๋(%)']]
print(f'1. min max ํ์ธ')
print(dfx.describe())
print('#####################################')
print('2. ํ์ฐจ ๋ณ๋')
print(dfy)
X = dfx.values.tolist()
y = dfy.values.tolist()
window_size = 10
data_X = []
data_y = []
for i in range(len(y) - window_size):
_X = X[i: i + window_size] # ๋ค์ ๋ ์ข
๊ฐ(i+windows_size)๋ ํฌํจ๋์ง ์์
_y = y[i + window_size] # ๋ค์ ๋ ์ข
๊ฐ
data_X.append(_X)
data_y.append(_y)
print(_X, "->", _y)
print(data_X[0])
print('์ ์ฒด ๋ฐ์ดํฐ์ ํฌ๊ธฐ :')
print(len(data_X), len(data_y))
train_size = int(len(data_y) * 0.7)
train_X = np.array(data_X[0: train_size])
train_y = np.array(data_y[0: train_size])
test_size = len(data_y) - train_size
test_X = np.array(data_X[train_size: len(data_X)])
test_y = np.array(data_y[train_size: len(data_y)])
print('ํ๋ จ ๋ฐ์ดํฐ์ ํฌ๊ธฐ :', train_X.shape, train_y.shape)
print('ํ
์คํธ ๋ฐ์ดํฐ์ ํฌ๊ธฐ :', test_X.shape, test_y.shape)
model = Sequential()
model.add(LSTM(units=20, activation='relu', return_sequences=True, input_shape=(10, 3))) #!!!ValueError: Input 0 of layer "sequential" is incompatible with the layer: expected shape=(None, 10, 4), found shape=(None, 10, 3)
model.add(Dropout(0.1))
model.add(LSTM(units=20, activation='relu'))
model.add(Dropout(0.1))
model.add(Dense(units=1))
model.summary()
model.compile(optimizer='adam', loss='mean_squared_error')
model.fit(train_X, train_y, epochs=70, batch_size=30)
pred_y = model.predict(test_X)
plt.figure()
plt.plot(test_y, color='red', label='floating off')
plt.plot(pred_y, color='blue', label='pred off')
plt.title(f'{k} floating population', family='Malgun Gothic')
plt.xlabel('time')
plt.ylabel('off passengers')
plt.legend()
plt.show()
model.save(f'./model/{k}์ญ_์์ธก.h5')
if name == 'main':
Forecast_model().model()

> ## ๋ณด์์ฌํญ
๊ฐ ์ญ๋ณ๋ก ๋ชจ๋ธ์ ๋ง๋ค๊ณ ๊ฐ์ ๊ธฐ๊ฐ๋์ ์งํ์ฒ ์น๊ฐ ๋ณ๋์ด ๊ฐ์ฅ ์ฌํ ์ง์ญ ์์ฃผ๋ก ์ง๋์ ๋ํ๋ด๋๊ฒ ๊ธฐ์กด์ ๊ณํ์ด์์ผ๋ ๋ชจ๋ ์ญ์ด ์์ผ์ ๊ธฐ์ค์ผ๋ก ๊ฑฐ์ ์ผ์ ํ ์๋์ธ๊ตฌ ๋ณํ๋ฅผ ๋ํ๋ด๊ธฐ ๋๋ฌธ์ ์งํ์ฒ ์ ์ด์ฉํ ์น๊ฐ ๋ณํ๋ฅผ ํตํด ํ์ตํ ๋ชจ๋ธ์ ๋ฉ๋ฆฌํธ๊ฐ ๋จ์ด์ง๋ค.
>
> ## ๋์
๋ชจ๋ ์ญ์ ๋ํ ์์์์ธก ํ ๋น๊ต๋ผ๋ ์ด๋ฐ์ ๋ฐฉ์์ ๋ฒ๋ฆฌ๊ณ ํ๋์ ์ญ์ ๋ํ ์์
์ฐ์ ์งํ
๊ฐ๋จ ํ๋๋ง ์ง์ด์ ๋ ์จ ๋ฑ ๋ค๋ฅธ ๋ณ์ ์ถ๊ฐ (2023-02-27)
# 2. 2์ฐจ(๋ ์จ ์ถ๊ฐ)
## 2.1 ์ ์ฒ๋ฆฌ
- ์ด์ ๋จ๊ณ์์ ์ฌ์ฉํ ๋ฐ์ดํฐ์
์๋ ๋ณ์๊ฐ ๋๋ฌด ์ ๊ธฐ ๋๋ฌธ์ ํ๋์ ์ญ์ ์ ํด์ ๊ฐ์ ์ฌ๋ถ๋ฅผ ์ถ๊ฐ
import pandas as pd
class Weather():
def adding_y(self):
data = pd.read_csv('./data/rate/๊ฐ๋จ์ญ.csv')
rain = pd.DataFrame(pd.read_csv('./data/extremum_20230306105846.csv', encoding= 'euc-kr')['์ผ๊ฐ์๋(mm)'])
print(f'์๋ณธ ์ธ๋ฑ์ค ์ : {len(data.index)}')
print(f"๊ฐ์๋ ์ธ๋ฑ์ค ์ : {len(pd.read_csv('./data/extremum_20230306105846.csv', encoding= 'euc-kr').index)}")
rain_data = rain.rename(columns={'์ผ๊ฐ์๋(mm)': '๊ฐ์์ฌ๋ถ'})
add = []
for i in rain_data['๊ฐ์์ฌ๋ถ']:
if i > 0.0:
add.append(i)
else:
add.append(i)
rain_add = pd.DataFrame(add, columns=['๊ฐ์์ฌ๋ถ'])
df = pd.concat([data, rain_add], axis=1)
df.to_csv('./data/rain/๊ฐ๋จ์ญ.csv')
## 2.2 ํ์ต
### 2.2.1 ๊ฒฐ๊ณผ
- ์๋น์ค ํญ๋ชฉ์ธ ์ฐ์ฐ๊ณผ ๋น์ทํ๊ฒ ๋ ์จ์ ์ํฅ์ ๋ฐ๋ ์ํ์ ์์ ๋ณํ๋ฅผ ๋ณ์๋ก ๋ ํ์๊ฐ ์๋ค
> **๋ ์จ ์ถ๊ฐ ํ**

๐
๋ค์ ์๊ฐํด๋ณด๋ ๋ ์จ๊ฐ ์งํ์ฒ ์ ์ด์ฉ๋์ ์ํฅ์ ๋ฏธ์น์ง ์๊ณ ์ด๊ฑธ ๋ฝ์๋ด๋๋ผ๋ ์ฐ์ฐ ๋์ฌ์ ๊ด๋ จ์ด ์๋ค
---
# 3. 3์ฐจ(๋ฐ๋ฆ์ด ๋์ฌ์ ๋ณด ์ถ๊ฐ)
## 3.1 ์ ์ฒ๋ฆฌ
> ์ฐ์ฐ๊ณผ ์์๊ฐ ๋ฐ๋น๋กํ๋ ๋ฐ๋ฆ์ด์ ์๋ฃ๋ฅผ ๊ฐ์ ธ์ค๊ณ y๊ฐ์ ์นํ์ฐจ ๋ณ๋๋ฅ ์ด ์๋๋ผ ๋ฐ๋ฆ์ด ๋์ฌ๋์ผ๋ก ๋ฐ๊พธ๊ธฐ ์ํด ์ ์ฒ๋ฆฌ ๊ณผ์ ์ ๊ฑฐ์นจ'
### 3.1.1 ์์ธ์ญ ์นํ์ฐจ์ ๋ณด ์ถ์ถ
- ์์ธ์ญ์ ์ญ๋ณ ์นํ์ฐจ ์ ๋ณด์ ๋ฐ๋ฆ์ด ๋์ฌ์ ์์น์ ๋ณด ๊ฐ์ ์ฐ๊ฒฐ์ด ๊ฐ์ฅ ์์ํ๊ธฐ ๋๋ฌธ์ ๊ฐ๋จ์ญ์ ๋์์ผ๋ก ํ ์ด์ ์ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฒ๋ฆฌ๊ณ ์์ธ์ญ์ผ๋ก ๋ค์ ์งํ
data = self.passengers.sort_values(by='์ญ๋ช
') # ์ญ ์ด๋ฆ๋ณ๋ก ์ ๋ ฌ
data = data[data["๋
ธ์ ๋ช
"] == "1ํธ์ "] # ํธ์ ๋ง ๋ฐํ
data = data[data["์ญ๋ช
"] == "์์ธ์ญ"] # ์์ธ์ญ๋ง ๋ฐํ
print(sorted_csv.isnull().sum()) # ๋ ์ฒดํฌ
sorted_data = data.sort_values(by='์ฌ์ฉ์ผ์')
print(sorted_data)
sorted_data.to_csv(f"{self.save_dir}/sorted_์์ธ์ญ.csv", index=False)

### 3.1.2 ๋ฐ๋ฆ์ด ๋์ฌ๋ ์ถ์ถ
> 1๋
์น ๋ฐ๋ฆ์ด ๋์ฌ์ ๋ณด๊ฐ ํ๋ฃจ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๊ฒ๋ 5๋ง์์ 20๋ง๊ฐ์ ๋ฐ์ดํฐ๊ฐ ๋ชจ์ฌ์์ด์ ์ ์ฒ๋ฆฌ๊ฐ ํ์

- ์์ธ์ญ ์นํ์ฐจ ์ ๋ณด์ ๋ฐ๋ฆ์ด ๋์ฌ๋ join
data = self.passengers.sort_values(by='์ญ๋ช
') # ์ญ ์ด๋ฆ๋ณ๋ก ์ ๋ ฌ
data = data[data["๋
ธ์ ๋ช
"] == "1ํธ์ "] # ํธ์ ๋ง ๋ฐํ
data = data[data["์ญ๋ช
"] == "์์ธ์ญ"] # ์์ธ์ญ๋ง ๋ฐํ
print(sorted_csv.isnull().sum()) # ๋ ์ฒดํฌ
sorted_data = data.sort_values(by='์ฌ์ฉ์ผ์')
print(sorted_data)
sorted_data.to_csv(f"{self.save_dir}/sorted_์์ธ์ญ.csv", index=False)
ttareungi = pd.read_csv(f"{self.save_dir}/์์ธ์ญ_๋ฐ๋ฆ์ด_๋์ฌ๋.csv")
ttareungi = ttareungi['๋ฐ๋ฆ์ด ๋์ฌ๋']
join_df = pd.concat([sorted_data, ttareungi], axis=1)
join_df.to_csv(f"{self.save_dir}/ttareungi_์์ธ์ญ.csv", index=False)
- 365๊ฐ์ csv ํ์ผ ์ค ์ผ๋ถ ํ์ผ์ ๋ฉํ๋ฐ์ดํฐ, ์ธ์ฝ๋ฉ ๋ฐฉ์์ด ์ผ์นํ์ง ์์์ ์๋ฌ ๋ฐ์

>์์ ์ฝ๋ ์์ ์๋ ์ฝ๋ ์ถ๊ฐ
>```
dirs = os.listdir('.\\data\\tpss')
for i in dirs: # ์
dir = os.listdir(f'.\\data\\tpss\\{i}')
for j in dir: # ์ผ
try:
df = pd.read_csv(f'.\\data\\tpss\\{i}\\{j}', encoding='cp949')
if df.columns[2] != '์์_๋์ฌ์_ID':
df.rename(columns={df.columns[2]: '์์_๋์ฌ์_ID'}, inplace=True)
df.to_csv(f'.\\data\\tpss\\{i}\\{j}')
except UnicodeDecodeError as df:
df = pd.read_csv(f'.\\data\\tpss\\{i}\\{j}', encoding='utf8')
if df.columns[2] != '์์_๋์ฌ์_ID':
df.rename(columns={df.columns[2]: '์์_๋์ฌ์_ID'}, inplace=True)
df.to_csv(f'.\\data\\tpss\\{i}\\{j}')
print(f'{j}์ผ ์ข
๋ฃ')
## 3.2 ํ์ต
### 3.2.1 ๊ฒฐ๊ณผ
- epoch : 80

- epoch : 800

> ๋ ์จ ๋ฐ์ดํฐ๊ฐ ๋น ์ง ์ฑ๋ก ํ์ตํด์ ๊ทธ๋ฐ๊ฑฐ๋ผ๊ณ ์๊ฐ๋๋ค
---
# 4. 4์ฐจ(๊ธฐ์จ, ํ์ ์ถ๊ฐ)
## 4.1 ์ ์ฒ๋ฆฌ
- 3์ฐจ ์๊ธฐ์ ๋ฐ์ดํฐ์ ๊ธฐ์จ, ํ์ ๋ฑ ๋ณ์ ์ถ๊ฐ

## 4.2 ํ์ต
### 4.2.1 ๊ฒฐ๊ณผ
- 3์ฐจ ์๋ ๋๋ณด๋ค๋ loss๊ฐ ๊ฐ์ํ๋ค

### 4.2.2 epoch, batch_size์ ๋ฐ๋ฅธ ๊ฒฐ๊ณผ ๋น๊ต
- 400,30

- 700,30

- 400,20

- 300, 20

- 500, 20

- 600, 12

- 800, 15

-4000, 64


### 4.2.3 batch size
> ๊ฐ ์ฌ์ด์ฆ ํ
์คํธ์ ์ํฌํฌ๋ 1000
history = model.fit(train_X, train_y, batch_size=32, epochs=10, validation_split=0.2)
# ์์ค ๊ทธ๋ํ
plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])
plt.title('Model loss')
plt.ylabel('Loss')
plt.xlabel('Epoch')
plt.legend(['Train', 'Validation'], loc='upper left')
plt.show()
# ์ ํ๋ ๊ทธ๋ํ
plt.plot(history.history['accuracy'])
plt.plot(history.history['val_accuracy'])
plt.title('Model accuracy')
plt.ylabel('Accuracy')
plt.xlabel('Epoch')
plt.legend(['Train', 'Validation'], loc='upper left')
- batch : 64

- batch : 30

- batch : 20

- batch : 15

### 4.2.4 ํ๋์ฉ ์ฐพ์๋ณด๊ธฐ ํ๋ค์ด์ก๋ค ํ ๋ฒ์ ์์๋ณด์
batch_sizes = [๋น๊ตํ batch ์ฌ์ด์ฆ๋ค]
losses = []
for batch_size in batch_sizes:
history = model.fit(train_X, train_y, epochs=10, batch_size=batch_size, verbose=0)
losses.append(history.history['loss'])
for i in range(len(batch_sizes)):
plt.plot(np.arange(1, 11), losses[i], label='batch_size=' + str(batch_sizes[i]))
plt.title('Model loss by batch size')
plt.ylabel('Loss')
plt.xlabel('Epoch')
plt.legend(loc='upper right')
plt.show()
- 16 ๋จ์๋ก batch ์ฌ์ด์ฆ ๋น๊ต

- 5 ๋จ์๋ก ๋น๊ต

---
# ?. ์๋ฌ๐ณ
## ?.1 ํ๊ธ ๊นจ์ง

> ๋ฌธ์ ๋ฐ์์ง์ ์
```, family='Malgun Gothic'``` ์ถ๊ฐ
## ?.2 ValueError: Length of values (18200) dose not match length of index (18250)
>#### **์์ธ**
> - ์ด์ ์ผ์์ ๋น๊ตํด์ y๊ฐ์ ๋ง๋ค๋ ค๊ณ ํ์ผ๋ i์ i+1์ ์ญ์ด๋ฆ์ด ๋ค๋ฅธ ์ง์ ๋ค์์๋ nall๊ฐ์ด ๋ฐ์

> - ์ ํํ ์ญ์ ์ข
๋ฅ๋งํผ value์ ๊ธธ์ด๊ฐ ์ค์ด๋ค์๋ค๋ ๊ฒ์ ํ์ธ
> ---
> #### **๊ณํ ๋ณ๊ฒฝ**
- ๋ชจ๋ ์ญ์ ํ ๋ฒ์ ๋น๊ตํ๊ธฐ๋ณด๋ค ๊ฐ ์ญ๋ณ ์ด๋์ธ๊ตฌ ๋ณ๋์จ์ ์์ธกํ๊ณ ์ด๋ฅผ ๋น๊ตํ๋ ๋ฐฉํฅ์ผ๋ก ๋ณ๊ฒฝ
- 2.1.2์์ y๊ฐ ์ถ๊ฐ์ ์ธ๋ฑ์ค์ ๊ธธ์ด๊ฐ ๋ง์ง ์์ ๋ฐ์ํ ์๋ฌ ํด๊ฒฐ
- ๋ชจ๋ ์ญ์ ํ ๋ฒ์ ๋น๊ตํ ๊ฒฝ์ฐ ํจ์จ์ด ๋ฎ์
## ?.3

> ์์ธ
365๊ฐ์ csv ํ์ผ ์ค ์ผ๋ถ ํ์ผ์ ๋ฉํ๋ฐ์ดํฐ, ์ธ์ฝ๋ฉ ๋ฐฉ์์ด ์ผ์นํ์ง ์์์ ์๋ฌ ๋ฐ์
> ํด๊ฒฐ
๋ฐ๋ก ์ ํด์ง ๋ฐฉ์์ ์๊ณ ์๋ ์ฝ๋๋ฅผ ํตํด ํด๊ฒฐ
dirs = os.listdir('.\data\tpss')
for i in dirs: # ์
dir = os.listdir(f'.\data\tpss\{i}')
for j in dir: # ์ผ
try:
df = pd.readcsv(f'.\data\tpss\{i}\{j}', encoding='cp949')
if df.columns[2] != '์์๋์ฌ์ID':
df.rename(columns={df.columns[2]: '์์๋์ฌ์ID'}, inplace=True)
df.to_csv(f'.\data\tpss\{i}\{j}')
except UnicodeDecodeError as df:
df = pd.read_csv(f'.\data\tpss\{i}\{j}', encoding='utf8')
if df.columns[2] != '์์๋์ฌ์ID':
df.rename(columns={df.columns[2]: '์์๋์ฌ์_ID'}, inplace=True)
df.to_csv(f'.\data\tpss\{i}\{j}')
print(f'{j}์ผ ์ข
๋ฃ')
## ?.4 TypeError: numpy boolean subtract,
> ํด๊ฒฐ
MinMaxScale ๊ณผ์ ์์ String๊ฐ์ ๊ฐ์ง๋ ์ปฌ๋ผ๊น์ง ํฌํจ๋ผ์ ๋ฐ์ํ ๋ฌธ์ ๋ก int๊ฐ๋ง ์ฌ์ฉ๋ ์ ์๋๋ก ๋ฐ๊ฟ์ค๋ค