行業與氣象資料的相關性探索

岁月月宝贝發表於2024-05-25

行業資料與氣象資料的相關性探索

目錄
  • 行業資料與氣象資料的相關性探索
    • 缺失值的處理方式
    • 定性資料的賦值方式
      • 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.風向情況

  1. 東風8-9級:9
  2. 東南風4-5級:8
  3. 南風4~5級:7
  4. 東風3~4級:6
  5. 西南風3-4級:5
  6. 南風3-4級:5
  7. 東南風3-4級:5
  8. 東北風3-4級:4
  9. 東北偏東風2:3
  10. 西南風1-2級:3
  11. 南風1-2級:3
  12. 東南風1-2級:3
  13. 東風1-2級:3
  14. 東北風1-2級:2
  15. 北風4-5級:1
  16. 北風3~4級:1
  17. 北風3:1
  18. 北風1-2級:1
  19. 無持續風向1-2級:2
  20. 無持續風向<3級:2
  21. 無持續風向微風:2
  22. 微風<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>

png

sns.heatmap(df_normalized.corr())

out:

<Axes: >

png


sns.clustermap(df_normalized.corr())

out:

<seaborn.matrix.ClusterGrid at 0x1f446394d60>

png


species=df_normalized.pop("job")
g=sns.clustermap(df_normalized)

out:

png


sns.jointplot(x='ele_most(kw)',y='low_tem',data=df_normalized)

out:

<seaborn.axisgrid.JointGrid at 0x1f4480fa9d0>

png


sns.jointplot(x='ele_most(kw)',y='low_tem',data=df_normalized,kind='hex')

out:

<seaborn.axisgrid.JointGrid at 0x1f448ba1640>

png


sns.jointplot(x='ele_most(kw)',y='low_tem',data=df_normalized,kind='reg')

out:

<seaborn.axisgrid.JointGrid at 0x1f4439012b0>

png


直線旁的灰色是上下95%的置信區間

結論說明

以目前的資料處理方式,電力系統與天氣狀況類的資料相關程度最高為ele_most(kw)與low_tem,相關程度為0.205206,最低為job與high_tem,相關程度為-0.001947

相關文章