728x90
반응형
import numpy as np
import pandas as pd
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
# 주어진 데이터
# data = {
# '분기': ['2019_1','2019_2','2019_3','2019_4','2020_1','2020_2','2020_3','2020_4','2022_1','2022_2'],
# '서울 강남':[4.5, 4.5, 2.1, 3.1, 2.8, 2.5, 2.5, 2.5, 5.1, 3.4],
# '서울 영등포신촌':[3.1, 1.3, 3.3, 2.9, 4.8, 4.7, 5, 7.8, 7.4, 8.3],
# '서울 기타':[2.2, 2.4, 3.5, 3.9, 4.3, 4.4, 5.2, 6.8, 5.2, 5.6]
# }
data = {
'분기': ['2019_1','2019_2','2019_3','2019_4','2020_1','2020_2','2020_3','2020_4','2022_1','2022_2'],
'서울 강남':[4, 5, 6, 7, 8, 9, 10, 11, 12, 13],
'서울 영등포신촌':[2, 3, 4, 5, 6, 7, 8, 9, 10, 11],
'서울 기타':[3, 3.5, 5.5, 5.5, 7.5, 8.5, 9.5, 10, 11, 12]
}
# 데이터프레임 생성
df = pd.DataFrame(data) # 딕셔너리데이터를 DataFrame으로 만듬
X = df[['서울 강남','서울 영등포신촌','서울 기타']] # 3개 컬럼 데이터만 사용
y = df[['서울 강남','서울 영등포신촌','서울 기타']].shift(-1) # y는 다음 분기 데이터. shift(-1)은 다음 분기 데이터를 가리킴
print('X=',X)
print('y=',y)
# X = X[:-1] # y가 다음분기 데이터여서
# y = y[:-1]
split_n = 2 # 몇 개를 test용으로 사용할 것인지(뒤에서 2개)
train_x = X[:-(split_n)] # X[:-2] 앞에서부터 뒤에서 2번째 전까지
train_y = y[:-(split_n)]
test_x = X[-(split_n):] # X[-2:] 뒤에서 2번째부터 끝까지
test_y = y[-(split_n):]
print('\n\ntrain_x\n',train_x)
print('\n\ntrain_y\n',train_y)
print('\n\ntest_x\n',test_x)
print('\n\ntest_y\n',test_y)
# 모델 구축 및 학습
model = LinearRegression()
model.fit(train_x, train_y) # 학습
# 예측
# predicted = model.predict(new_df.drop('분기', axis=1))
predicted = model.predict(test_x) # 예측
print('\n\ntest_y\n',test_y)
print( '\n\npredicted\n',predicted)
# 예측 결과 시각화
# 1번째 예측
labels = X.columns.tolist()
plt.bar(labels, predicted[0])
plt.xlabel('서울 구역')
plt.ylabel('공실률')
plt.title('2022년 3분기 서울 구역별 공실률 예측')
plt.show()
# 2번째 예측(제일 끝)
plt.bar(labels, predicted[1])
plt.xlabel('서울 구역')
plt.ylabel('공실률')
plt.title('2022년 3분기 서울 구역별 공실률 예측')
plt.show()
-
X= 서울 강남 서울 영등포신촌 서울 기타
0 4 2 3.0
1 5 3 3.5
2 6 4 5.5
3 7 5 5.5
4 8 6 7.5
5 9 7 8.5
6 10 8 9.5
7 11 9 10.0
8 12 10 11.0
9 13 11 12.0
y= 서울 강남 서울 영등포신촌 서울 기타
0 5.0 3.0 3.5
1 6.0 4.0 5.5
2 7.0 5.0 5.5
3 8.0 6.0 7.5
4 9.0 7.0 8.5
5 10.0 8.0 9.5
6 11.0 9.0 10.0
7 12.0 10.0 11.0
8 13.0 11.0 12.0
9 NaN NaN NaN <= y를 다음 데이터로 했기 때문에 제일 마지막은 Nan
하지만 이 데이터는 예측용이기 때문에 문제 안됨
실제 사용시에는 이 데이터를 즉 y 값을 예측하는 것임
train_x
서울 강남 서울 영등포신촌 서울 기타
0 4 2 3.0
1 5 3 3.5
2 6 4 5.5
3 7 5 5.5
4 8 6 7.5
5 9 7 8.5
6 10 8 9.5
7 11 9 10.0
train_y
서울 강남 서울 영등포신촌 서울 기타
0 5.0 3.0 3.5
1 6.0 4.0 5.5
2 7.0 5.0 5.5
3 8.0 6.0 7.5
4 9.0 7.0 8.5
5 10.0 8.0 9.5
6 11.0 9.0 10.0
7 12.0 10.0 11.0
test_x
서울 강남 서울 영등포신촌 서울 기타
8 12 10 11.0
9 13 11 12.0
test_y
서울 강남 서울 영등포신촌 서울 기타
8 13.0 11.0 12.0
9 NaN NaN NaN
test_y
서울 강남 서울 영등포신촌 서울 기타
8 13.0 11.0 12.0
9 NaN NaN NaN
predicted
[[13. 11. 12.53846154]
[14. 12. 13.61794872]]

728x90
반응형
'프로그램' 카테고리의 다른 글
| [파이썬] 문제 : 딕셔너리에서 3학점 과목을 5학점으로 수정 (0) | 2023.06.12 |
|---|---|
| [파이썬] 문제 : 문방구의 문구류 가격과 구입 수량으로 총비용 계산 (0) | 2023.06.12 |
| [파이썬] 문제 : 6개의 점수 입력 받아 커트라인 입력 받아 합격,불합격 판단 (0) | 2023.06.09 |
| [파이썬] 터틀(turtle) 타원 그리기 (0) | 2023.06.09 |
| [파이썬] 문제 : 연락처 코드 설명 (0) | 2023.06.09 |
댓글