728x90
In [1]:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
plt.rcParams['font.family'] = 'Malgun Gothic' # 한글 폰트 사용
plt.rcParams['font.size'] = 20 # Matplotlib 폰트 사이즈 변경
plt.rcParams['axes.unicode_minus'] = False # 한글 폰트 사용 시, 마이너스 글자가 깨지는 현상해결
데이터 확인¶
In [2]:
sunny = pd.read_csv('c:\py_temp\태양열에너지생산데이터.csv', encoding = 'cp949')
sunny.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 52560 entries, 0 to 52559
Data columns (total 9 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Day 52560 non-null int64
1 Hour 52560 non-null int64
2 Minute 52560 non-null int64
3 DHI 52560 non-null int64
4 DNI 52560 non-null int64
5 WS 52560 non-null float64
6 RH 52560 non-null float64
7 T 52560 non-null int64
8 TARGET 52560 non-null float64
dtypes: float64(3), int64(6)
memory usage: 3.6 MB
In [3]:
# 상위 10개
sunny.head(10)
Out[3]:
Day | Hour | Minute | DHI | DNI | WS | RH | T | TARGET | |
---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 1.5 | 69.08 | -12 | 0.0 |
1 | 0 | 0 | 30 | 0 | 0 | 1.5 | 69.06 | -12 | 0.0 |
2 | 0 | 1 | 0 | 0 | 0 | 1.6 | 71.78 | -12 | 0.0 |
3 | 0 | 1 | 30 | 0 | 0 | 1.6 | 71.75 | -12 | 0.0 |
4 | 0 | 2 | 0 | 0 | 0 | 1.6 | 75.20 | -12 | 0.0 |
5 | 0 | 2 | 30 | 0 | 0 | 1.5 | 69.29 | -11 | 0.0 |
6 | 0 | 3 | 0 | 0 | 0 | 1.5 | 72.56 | -11 | 0.0 |
7 | 0 | 3 | 30 | 0 | 0 | 1.4 | 72.55 | -11 | 0.0 |
8 | 0 | 4 | 0 | 0 | 0 | 1.3 | 74.62 | -11 | 0.0 |
9 | 0 | 4 | 30 | 0 | 0 | 1.3 | 74.61 | -11 | 0.0 |
각 Columns 의미 파악¶
In [4]:
sunny.columns
Out[4]:
Index(['Day', 'Hour', 'Minute', 'DHI', 'DNI', 'WS', 'RH', 'T', 'TARGET'], dtype='object')
Day: 일
Hour: 시간
Minute: 분
DHI: 수평면 산란일사량
DNI: 직달 일사량
WS: 풍속
T: 기온
Target: 태양광 발전량
In [5]:
# DHI, DNI 기준으로 큰 값부터 정렬
sunny1 = sunny.sort_values(['DHI','DNI'], ascending = False)
sunny1.head(10)
Out[5]:
Day | Hour | Minute | DHI | DNI | WS | RH | T | TARGET | |
---|---|---|---|---|---|---|---|---|---|
7752 | 161 | 12 | 0 | 528 | 377 | 3.1 | 57.21 | 19 | 83.413342 |
8232 | 171 | 12 | 0 | 526 | 375 | 3.0 | 20.35 | 32 | 83.213793 |
8328 | 173 | 12 | 0 | 524 | 374 | 0.9 | 22.26 | 31 | 82.839444 |
43608 | 908 | 12 | 0 | 523 | 392 | 3.6 | 18.40 | 30 | 84.435243 |
8856 | 184 | 12 | 0 | 523 | 374 | 2.8 | 28.17 | 31 | 82.651812 |
43561 | 907 | 12 | 30 | 523 | 368 | 3.5 | 13.13 | 33 | 82.087112 |
7992 | 166 | 12 | 0 | 523 | 366 | 2.2 | 43.75 | 24 | 82.001411 |
26472 | 551 | 12 | 0 | 522 | 379 | 3.3 | 16.27 | 32 | 83.026163 |
8376 | 174 | 12 | 0 | 522 | 367 | 2.8 | 23.56 | 29 | 82.090722 |
26136 | 544 | 12 | 0 | 521 | 375 | 2.5 | 29.33 | 28 | 82.560719 |
In [6]:
# DHI > 500이면서 DNI >= 350인 데이터를 T 컬럼 값 기준 오름차순 정렬
sunny2 = sunny.loc[(sunny['DHI'] > 500) & (sunny['DNI'] >= 350),['Day', 'DHI', 'DNI', 'WS', 'RH', 'T','TARGET']].sort_values(['T'])
sunny2
Out[6]:
Day | DHI | DNI | WS | RH | T | TARGET | |
---|---|---|---|---|---|---|---|
24551 | 511 | 512 | 370 | 5.8 | 67.06 | 10 | 80.887980 |
41783 | 870 | 504 | 388 | 0.6 | 37.73 | 15 | 81.446529 |
6936 | 144 | 511 | 408 | 1.2 | 41.97 | 16 | 84.166744 |
7463 | 155 | 511 | 397 | 3.5 | 80.98 | 17 | 83.415176 |
7752 | 161 | 528 | 377 | 3.1 | 57.21 | 19 | 83.413342 |
24168 | 503 | 504 | 368 | 1.4 | 30.38 | 20 | 79.846990 |
42024 | 875 | 502 | 361 | 5.0 | 29.01 | 21 | 79.189329 |
24793 | 516 | 510 | 397 | 2.6 | 31.46 | 22 | 83.222941 |
24407 | 508 | 512 | 387 | 4.7 | 21.60 | 22 | 82.284689 |
7559 | 157 | 504 | 417 | 1.8 | 36.10 | 22 | 84.536494 |
42265 | 880 | 505 | 367 | 1.5 | 30.02 | 23 | 80.032005 |
7367 | 153 | 514 | 390 | 3.0 | 36.87 | 23 | 83.034378 |
7560 | 157 | 515 | 361 | 2.1 | 34.15 | 23 | 80.782598 |
24648 | 513 | 502 | 426 | 1.8 | 25.51 | 23 | 85.192334 |
7993 | 166 | 503 | 421 | 1.9 | 43.74 | 24 | 84.909928 |
43705 | 910 | 517 | 380 | 3.7 | 23.95 | 24 | 82.470526 |
7992 | 166 | 523 | 366 | 2.2 | 43.75 | 24 | 82.001411 |
9336 | 194 | 504 | 363 | 2.2 | 41.46 | 25 | 79.748779 |
24888 | 518 | 518 | 370 | 2.9 | 30.01 | 25 | 81.812865 |
8759 | 182 | 509 | 391 | 3.4 | 51.63 | 25 | 82.657264 |
9143 | 190 | 508 | 377 | 1.0 | 31.97 | 25 | 81.156111 |
8473 | 176 | 506 | 409 | 4.4 | 46.38 | 25 | 84.252240 |
7655 | 159 | 506 | 413 | 2.1 | 31.46 | 27 | 84.438027 |
42648 | 888 | 515 | 408 | 3.4 | 28.18 | 27 | 85.000948 |
25079 | 522 | 507 | 362 | 3.2 | 24.22 | 27 | 79.934666 |
9432 | 196 | 507 | 366 | 0.5 | 26.10 | 28 | 80.215244 |
9433 | 196 | 508 | 386 | 0.6 | 26.10 | 28 | 81.903986 |
7656 | 159 | 501 | 434 | 2.3 | 30.30 | 28 | 86.032022 |
8711 | 181 | 511 | 378 | 2.4 | 34.66 | 28 | 81.716348 |
26136 | 544 | 521 | 375 | 2.5 | 29.33 | 28 | 82.560719 |
42695 | 889 | 506 | 419 | 1.8 | 15.70 | 29 | 84.905261 |
43657 | 909 | 512 | 405 | 1.1 | 18.75 | 29 | 84.342353 |
8376 | 174 | 522 | 367 | 2.8 | 23.56 | 29 | 82.090722 |
25848 | 538 | 505 | 426 | 2.9 | 24.61 | 30 | 85.748680 |
43608 | 908 | 523 | 392 | 3.6 | 18.40 | 30 | 84.435243 |
8855 | 184 | 501 | 362 | 2.9 | 27.55 | 30 | 79.275311 |
8328 | 173 | 524 | 374 | 0.9 | 22.26 | 31 | 82.839444 |
43897 | 914 | 512 | 390 | 3.7 | 16.94 | 31 | 83.027076 |
8856 | 184 | 523 | 374 | 2.8 | 28.17 | 31 | 82.651812 |
8232 | 171 | 526 | 375 | 3.0 | 20.35 | 32 | 83.213793 |
26615 | 554 | 503 | 371 | 0.4 | 14.96 | 32 | 80.117902 |
43223 | 900 | 509 | 365 | 2.0 | 16.91 | 32 | 80.399347 |
26472 | 551 | 522 | 379 | 3.3 | 16.27 | 32 | 83.026163 |
44185 | 920 | 512 | 373 | 1.8 | 21.72 | 32 | 81.337495 |
43561 | 907 | 523 | 368 | 3.5 | 13.13 | 33 | 82.087112 |
43225 | 900 | 511 | 362 | 2.1 | 16.19 | 33 | 80.398463 |
43273 | 901 | 520 | 378 | 2.2 | 16.38 | 33 | 82.649995 |
In [7]:
# T 컬럼을 기준으로 그룹화하고 TARGET 컬럼의 합계 계산
sunny3 = sunny2.groupby(['T'])['TARGET'].sum().reset_index()
# T 컬럼 값을 기준으로 오름차순 정렬
sunny3 = sunny3.sort_values(['T'], ascending=True)
sunny3
Out[7]:
T | TARGET | |
---|---|---|
0 | 10 | 80.887980 |
1 | 15 | 81.446529 |
2 | 16 | 84.166744 |
3 | 17 | 83.415176 |
4 | 19 | 83.413342 |
5 | 20 | 79.846990 |
6 | 21 | 79.189329 |
7 | 22 | 250.044124 |
8 | 23 | 329.041315 |
9 | 24 | 249.381865 |
10 | 25 | 409.627259 |
11 | 27 | 249.373641 |
12 | 28 | 412.428320 |
13 | 29 | 251.338335 |
14 | 30 | 249.459233 |
15 | 31 | 248.518332 |
16 | 32 | 408.094700 |
17 | 33 | 245.135569 |
시각화¶
In [12]:
# 변수 지정
T = sunny3['T']
TARGET = sunny3['TARGET']
# 색상을 데이터 건수만큼 랜덤으로 생성하기
colors = [np.random.rand(3,) for _ in T]
# Bar Chart (가로 10, 세로 6)
plt.figure(figsize=(10, 6))
plt.bar(T, TARGET, color = colors)
# label 생성
plt.xlabel('온도')
plt.ylabel('발전량')
plt.title('온도별 태양광 발전 현황')
Out[12]:
Text(0.5, 1.0, '온도별 태양광 발전 현황')
수평면 산란 일사량과 태양열 발전량의 상관관계¶
In [13]:
sns.set(font_scale=1.5)
sns.set(style="whitegrid")
sns.scatterplot(x = sunny1['DHI'], y = sunny1['TARGET'], data=sunny1, color = 'red')
plt.xlabel('Diffuse horizontal irradiance (DHI)')
plt.ylabel('Solar Power Generation (TARGET)')
plt.title('Relationship between DHI and Solar Power Generation')
plt.xticks(rotation=45)
Out[13]:
(array([-100., 0., 100., 200., 300., 400., 500., 600.]),
[Text(-100.0, 0, '-100'),
Text(0.0, 0, '0'),
Text(100.0, 0, '100'),
Text(200.0, 0, '200'),
Text(300.0, 0, '300'),
Text(400.0, 0, '400'),
Text(500.0, 0, '500'),
Text(600.0, 0, '600')])
In [14]:
# DHI, TARGET 사이의 상관 계수 구하기
DT_corr = np.corrcoef(sunny1['DHI'], sunny1['TARGET'])[0, 1]
DT_corr
Out[14]:
0.6669080729265234
풍속과 태양열 발전량의 상관관계¶
In [15]:
sns.set(font_scale=1.5)
sns.set(style="whitegrid")
sns.set_palette("Paired")
sns.scatterplot(x = sunny1['WS'], y = sunny1['TARGET'], data=sunny1, color = 'red')
plt.xlabel('Wind Speed (WS))')
plt.ylabel('Solar Power Generation (TARGET)')
plt.title('Relationship between DHI and Solar Power Generation')
plt.xticks(rotation=45)
Out[15]:
(array([-2., 0., 2., 4., 6., 8., 10., 12., 14.]),
[Text(-2.0, 0, '-2'),
Text(0.0, 0, '0'),
Text(2.0, 0, '2'),
Text(4.0, 0, '4'),
Text(6.0, 0, '6'),
Text(8.0, 0, '8'),
Text(10.0, 0, '10'),
Text(12.0, 0, '12'),
Text(14.0, 0, '14')])
In [16]:
# WS, TARGET 사이의 상관 계수 구하기
WT_corr = np.corrcoef(sunny1['WS'], sunny1['TARGET'])[0, 1]
WT_corr
Out[16]:
0.2385214806368927
In [ ]:
728x90
'PYTHON > 기타' 카테고리의 다른 글
Jupyter Notebook에 아나콘다 가상환경 커널 생성 및 연결하기 (2) | 2024.02.16 |
---|---|
[나도코딩] 파이썬 웹 스크래핑(Web Scraping)(User_Agent, BeautifulSoup4) (2) | 2024.01.10 |
[데이터 분석] Matplotlib, Seaborn 연습 (0) | 2024.01.05 |
[데이터 분석] Pandas 연습 (0) | 2024.01.05 |
[나도코딩] 파이썬 웹스크래핑(Web Scraping)(HTML, XPath, Requests, 정규식) (2) | 2023.12.23 |