<jupyter_start><jupyter_text>Basic Static Analysis & EDA<jupyter_code>train = pd.read_csv('./data/energy/train.csv', encoding='cp949')
test = pd.read_csv('./data/energy/test.csv', encoding='cp949')
submission = pd.read_csv('./data/energy/sample_submission.csv', encoding='cp949')
train.info()
# 분포 보는 법
# feature scaling -> 정확한 비교를 위해서 모든 데이터의 수치 범위(scale)을 0과 1 사이로 맞춰줍니다.

train.describe()<jupyter_output><empty_output><jupyter_text>Scaling Distribution Comparision<jupyter_code># feature scaling
# x' = (x-x_min) / (x_max - x_min) (min_max scaling) -> 모든 값이 0-1 사이에 들어온다.
from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler()
scaled_data = scaler.fit_transform(train.drop(["date_time"], axis=1))
scaled_data
temp = pd.DataFrame(data = scaled_data, 
                    columns = L,
                    index = train.index)
temp.describe()
L = train.columns.to_list()
L.remove("date_time")<jupyter_output><empty_output><jupyter_text>Feature EDA<jupyter_code>train.head()
plt.figure(figsize=(15,6))
sns.countplot(data=train, x="num")
plt.show()
# datetime type 변환, 시간 계산 용이, 실수 계산도 함께 가능

train.date_time = pd.to_datetime(train.date_time)
train.head()<jupyter_output><empty_output><jupyter_text>Numeric Feature EDA   - 전력사용량, 기온, 풍속, 습도, 강수량, 일조량<jupyter_code>train.columns
figure = plt.figure(figsize=(10,5))
sns.histplot(data=train, x="풍속(m/s)", bins = 30)
plt.show()
figure = plt.figure(figsize=(10,5))
sns.histplot(data=train, x='전력사용량(kWh)', bins = 30)
plt.show()
figure = plt.figure(figsize=(10,5))
sns.histplot(data=train, x='기온(°C)', bins = 30)
plt.show()
figure = plt.figure(figsize=(10,5))
sns.histplot(data=train, x='습도(%)', bins = 30)
plt.show()
figure = plt.figure(figsize=(10,5))
sns.histplot(data=train, x='강수량(mm)', bins = 30)
plt.show()
figure = plt.figure(figsize=(10,5))
sns.histplot(data=train, x='일조(hr)', bins = 30)
plt.show()
test.info()
sns.countplot(data=train, x='비전기냉방설비운영')
plt.show()
fig = plt.figure(figsize=(13,6))
sns.boxplot(data=train)
plt.show()
# scale의 차이를 위에서는 반영하지 못했으므로, 반영해서 분포 경향을 파악한다.

fig = plt.figure(figsize=(13,6))
sns.boxplot(data=temp.drop(['num'], axis =1 ))
plt.show()<jupyter_output><empty_output><jupyter_text>Correlation Matrix<jupyter_code>corr = train.corr()
corr.head()
plt.figure(figsize=(8,8))
sns.heatmap(corr, square=True, annot=True, fmt='.4f', cmap='YlOrRd')
plt.show()
## 1번 건물에 대한 corr_heatmap

t_1 = train[train.num == 1]

plt.figure(figsize=(8,8))
sns.heatmap(t_1.corr(), square=True, annot=True, fmt='.4f', cmap='YlOrRd')
plt.show()
# 1:1이 아닌 조합이 어떤 의미를 주는지 보기 위해서, 회귀 분석을 통해 상관계수를 확인!<jupyter_output><empty_output><jupyter_text>PreProcessing  Feature Engineering<jupyter_code># train.drop(['date_time'], axis =1, inplace=True) # time_series_analysis를 안하므로.
train_ohe = pd.get_dummies(data = train, columns=["num"]) # one-hot_encoding, 범주형 변수 학습하려면
train_ohe<jupyter_output><empty_output><jupyter_text>Treat Missing Value<jupyter_code>train.info()
test.info()
# drop_duplicates() : num를 일대일 매칭해서 그 값을 쭉 복사해서 채워넣어주기 위해서

building_info = train[['num', '비전기냉방설비운영', '태양광보유']].drop_duplicates()
building_info
test.drop(['비전기냉방설비운영', '태양광보유'], axis=1, inplace=True)
test = pd.merge(test, building_info, on='num') # 건물 번호에 맞는 값을 매칭해서 broadcasting해서 채워줘라!
test
# interpolation 자동으로 선형적 관계를 고려하여 사이사이를 빈틈으로 채워준다.
test = test.interpolate(method='linear')
test
test.info()<jupyter_output><class 'pandas.core.frame.DataFrame'>
Int64Index: 10080 entries, 0 to 10079
Data columns (total 9 columns):
 #   Column        Non-Null Count  Dtype  
---  ------        --------------  -----  
 0   num           10080 non-null  int64  
 1   date_time     10080 non-null  object 
 2   기온(°C)        10080 non-null  float64
 3   풍속(m/s)       10080 non-null  float64
 4   습도(%)         10080 non-null  float64
 5   강수량(mm, 6시간)  10080 non-null  float64
 6   일조(hr, 3시간)   10080 non-null  float64
 7   비전기냉방설비운영     10080 non-null  float64
 8   태양광보유         10080 non-null  float64
dtypes: float64(7), int64(1), object(1)
memory usage: 787.5+ KB<jupyter_text>test data feature engineering<jupyter_code>test.drop(['date_time'], axis=1, inplace=True)
test_ohe = pd.get_dummies(data=test, columns=['num'])
test_ohe<jupyter_output><empty_output><jupyter_text>Modeling<jupyter_code>from sklearn.linear_model import LinearRegression

X = train_ohe.drop(['전력사용량(kWh)'], axis =1) # independent - Matrix
y = train_ohe['전력사용량(kWh)'] # dependent - vector
model = LinearRegression()
model.fit(X,y)
model.intercept_ #b == 회귀 계수
model.coef_ #W, a == 회귀 계수
pred = model.predict(test_ohe) # 예측한 전력 사용량
submission["answer"] = pred
submission<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.16020783719419787, 'fraction_numerical': 0.03615501190733925, 'mean_word_length': 5.07095926412615, 'pattern_counts': {'":': 0, '<': 37, '<?xml version=': 0, '>': 39, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '9', 'dir': 'jupyter-structured-clean-dedup', 'id': '445989', 'license': 'MIT', 'n_tokens_mistral': 2244, 'n_tokens_neox': 2379, 'n_words': 370, 'path': 'python/Eletric_Power_Usage-EDA.ipynb', 'repo_name': 'jaechanjo/TIL', 'size': '4619'}