行业与气象数据的相关性探索
行业数据与气象数据的相关性探索
缺失值的处理方式
通过筛查,发现行业表中各类行业均缺失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