行業資料與氣象資料的相關性探索
- 行業資料與氣象資料的相關性探索
- 缺失值的處理方式
- 定性資料的賦值方式
- 1.行業型別
- 2.天氣狀況
- 3.風向情況
- 4.溫度資料
- 5.時間資料
- 資料預處理
- 符號說明
- 程式碼實現
- 結論說明
缺失值的處理方式
透過篩查,發現行業表中各類行業均缺失2021年1月26日的資料,對此天的氣象資料選擇跳過,其餘進行連線
定性資料的賦值方式
1.行業型別
普通工業通常指的是一般性的工業生產活動,如製造業,採礦業,建築業等;非普通工業用電則可能指的是一些特殊或非常規的工業用電活動,包括如高能耗行業,高汙染行業,高技術含量行業;商業用電主要指的是商業場所和辦公場所的用電,包括商店,辦公樓,餐廳,酒店等地方的用電;大工業用電通常指的是工業生產中大型工廠,製造業,重工業等領域的用電需求。
所以我們賦值為:大工業用電:4;非普通用電:3;普通工業用電:2;商業用電:1
2.天氣狀況
- 晴:4
- 晴間多雲:3
- 區域性多雲:2
- 多雲:1
- 陰/霧:0
- 小雨:-1
- 中雨:-2
- 陣雨:-3
- 大雨:-4
- 雷陣雨:-5
- 暴雨:-6
一般來說,天氣越惡劣,對電力需求的影響越大,所以分數按照這個順序來賦值。分數越高表示天氣對電力需求的影響越好,分數越低表示天氣對電力需求的影響越壞。
3.風向情況
- 東風8-9級:9
- 東南風4-5級:8
- 南風4~5級:7
- 東風3~4級:6
- 西南風3-4級:5
- 南風3-4級:5
- 東南風3-4級:5
- 東北風3-4級:4
- 東北偏東風2:3
- 西南風1-2級:3
- 南風1-2級:3
- 東南風1-2級:3
- 東風1-2級:3
- 東北風1-2級:2
- 北風4-5級:1
- 北風3~4級:1
- 北風3:1
- 北風1-2級:1
- 無持續風向1-2級:2
- 無持續風向<3級:2
- 無持續風向微風:2
- 微風<3級:2
通常來說,風向對電力需求的影響主要取決於其風力大小和氣候條件。這種評分方式考慮了風力大小和氣候條件對電力需求的影響,分數越高表示對電力需求的影響越好,分數越低表示影響越不利。但實際影響還可能受到其他因素的影響,比如地理位置、季節等。
4.溫度資料
去掉其後的單位,轉化為純資料。
5.時間資料
考慮到格式不同,這裡選擇直接忽略這列資料。但是或許有進行累計等的更好的處理方式。
資料預處理
因為直接進行相關性分析效果不是很理想,我們選擇對每列資料分別進行標準化。
符號說明
- job 行業型別
- ele_most(kw) 有功功率最大值(kw)
- ele_least(kw) 有功功率最小值(kw)
- weather 天氣狀況
- day_wind 白天風力風向
- night_wind 夜晚風力風向
- low_tem 最低溫度
- high_tem 最高溫度
程式碼實現
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns ;sns.set(color_codes=True)#用color_codes預定的顏色
import chardet#用於判斷表中資料的型別
from sklearn.preprocessing import StandardScaler#為了標準化
#df = pd.read_csv("python_play.csv")
# 讀取CSV檔案
#df.head()
# 顯示資料框的前幾行
#with open('python_play.csv', 'rb') as f:
# content = f.read()
# print(content)
with open('python_play.csv', 'rb') as f:
content = f.read()
encoding = chardet.detect(content)['encoding']
print(encoding)
out:
ascii
# 讀取CSV檔案,指定編碼為ascii
df = pd.read_csv('python_play.csv', encoding='ascii',usecols=lambda column: column != 'time')
df.head()
out:
job | ele_most(kw) | ele_least(kw) | weather | day_wind | night_wind | low_tem | high_tem | |
---|---|---|---|---|---|---|---|---|
0 | 4 | 117888.3300 | 51526.5690 | 0.0 | 2 | 2 | 7 | 12 |
1 | 4 | 126843.7914 | 63638.4294 | -1.0 | 2 | 2 | 6 | 11 |
2 | 4 | 130286.1294 | 102048.2754 | 0.0 | 2 | 2 | 9 | 15 |
3 | 4 | 133018.6344 | 104466.0762 | -0.5 | 2 | 2 | 12 | 17 |
4 | 4 | 133504.4784 | 99507.3528 | -0.5 | 2 | 2 | 12 | 17 |
scaler = StandardScaler()
# 初始化標準化器
df_normalized = pd.DataFrame(scaler.fit_transform(df), columns=df.columns)
# 對每列資料進行標準化
df_normalized.head()
out:
job | ele_most(kw) | ele_least(kw) | weather | day_wind | night_wind | low_tem | high_tem | |
---|---|---|---|---|---|---|---|---|
0 | 1.336246 | 1.027821 | 0.658652 | 0.148206 | 0.375726 | 0.375726 | -2.237758 | -2.574969 |
1 | 1.336246 | 1.183029 | 0.992150 | -0.253312 | 0.375726 | 0.375726 | -2.404345 | -2.737512 |
2 | 1.336246 | 1.242688 | 2.049759 | 0.148206 | 0.375726 | 0.375726 | -1.904584 | -2.087342 |
3 | 1.336246 | 1.290045 | 2.116332 | -0.052553 | 0.375726 | 0.375726 | -1.404822 | -1.762257 |
4 | 1.336246 | 1.298465 | 1.979795 | -0.052553 | 0.375726 | 0.375726 | -1.404822 | -1.762257 |
job,ele_most(kw),ele_least(kw)與電力系統相關;weather,day_wind,night_wind,low_tem,high_tem與天氣相關。
df_normalized.corr()
out:
job | ele_most(kw) | ele_least(kw) | weather | day_wind | night_wind | low_tem | high_tem | |
---|---|---|---|---|---|---|---|---|
job | 1.000000 | 0.126761 | 0.645022 | 0.009319 | -0.017214 | -0.017214 | -0.005267 | -0.001947 |
ele_most(kw) | 0.126761 | 1.000000 | 0.710800 | -0.099735 | 0.108485 | 0.108485 | 0.205206 | 0.182597 |
ele_least(kw) | 0.645022 | 0.710800 | 1.000000 | -0.039749 | 0.041487 | 0.041487 | 0.100280 | 0.087170 |
weather | 0.009319 | -0.099735 | -0.039749 | 1.000000 | -0.093055 | -0.093055 | -0.364826 | -0.206647 |
day_wind | -0.017214 | 0.108485 | 0.041487 | -0.093055 | 1.000000 | 1.000000 | 0.131514 | 0.074132 |
night_wind | -0.017214 | 0.108485 | 0.041487 | -0.093055 | 1.000000 | 1.000000 | 0.131514 | 0.074132 |
low_tem | -0.005267 | 0.205206 | 0.100280 | -0.364826 | 0.131514 | 0.131514 | 1.000000 | 0.935022 |
high_tem | -0.001947 | 0.182597 | 0.087170 | -0.206647 | 0.074132 | 0.074132 | 0.935022 | 1.000000 |
sns.pairplot(df_normalized)
下面為警告:
D:\anaconda3\envs\FLpyth38\lib\site-packages\seaborn\axisgrid.py:123: UserWarning: The figure layout has changed to tight
self._figure.tight_layout(*args, **kwargs)
out:
<seaborn.axisgrid.PairGrid at 0x1f4418dd430>
sns.heatmap(df_normalized.corr())
out:
<Axes: >
sns.clustermap(df_normalized.corr())
out:
<seaborn.matrix.ClusterGrid at 0x1f446394d60>
species=df_normalized.pop("job")
g=sns.clustermap(df_normalized)
out:
sns.jointplot(x='ele_most(kw)',y='low_tem',data=df_normalized)
out:
<seaborn.axisgrid.JointGrid at 0x1f4480fa9d0>
sns.jointplot(x='ele_most(kw)',y='low_tem',data=df_normalized,kind='hex')
out:
<seaborn.axisgrid.JointGrid at 0x1f448ba1640>
sns.jointplot(x='ele_most(kw)',y='low_tem',data=df_normalized,kind='reg')
out:
<seaborn.axisgrid.JointGrid at 0x1f4439012b0>
直線旁的灰色是上下95%的置信區間
結論說明
以目前的資料處理方式,電力系統與天氣狀況類的資料相關程度最高為ele_most(kw)與low_tem,相關程度為0.205206,最低為job與high_tem,相關程度為-0.001947