370 KiB
370 KiB
In [3]:
from selenium import webdriver from selenium.webdriver.chrome.options import Options options = Options() options.headless = True driver = webdriver.Chrome("/usr/bin/chromedriver", options=options) driver.get("https://www.baidu.com/") print(driver.title) driver.quit()
百度一下,你就知道
In [3]:
import pygrib as pg
In [4]:
data = pg.open('./data/20230816/gfs.t18z.pgrb2.0p25.f001')
In [5]:
data.seek(0)
In [6]:
data.select(name="Downward short-wave radiation flux")
Out[6]:
[1:Downward short-wave radiation flux:W m**-2 (avg):regular_ll:surface:level 0:fcst time 0-1 hrs (avg):from 202308160000]
In [9]:
for grb in data: break
In [10]:
grb.latlons()[1]
Out[10]:
array([[0.0000e+00, 2.5000e-01, 5.0000e-01, ..., 3.5925e+02, 3.5950e+02, 3.5975e+02], [0.0000e+00, 2.5000e-01, 5.0000e-01, ..., 3.5925e+02, 3.5950e+02, 3.5975e+02], [0.0000e+00, 2.5000e-01, 5.0000e-01, ..., 3.5925e+02, 3.5950e+02, 3.5975e+02], ..., [0.0000e+00, 2.5000e-01, 5.0000e-01, ..., 3.5925e+02, 3.5950e+02, 3.5975e+02], [0.0000e+00, 2.5000e-01, 5.0000e-01, ..., 3.5925e+02, 3.5950e+02, 3.5975e+02], [0.0000e+00, 2.5000e-01, 5.0000e-01, ..., 3.5925e+02, 3.5950e+02, 3.5975e+02]])
In [11]:
lat = grb.latlons()[0][:, 0] lon = grb.latlons()[1][0]
In [14]:
lon
Out[14]:
array([0.0000e+00, 2.5000e-01, 5.0000e-01, ..., 3.5925e+02, 3.5950e+02, 3.5975e+02])
In [13]:
len(lat)
Out[13]:
721
In [ ]:
import pandas as pd
In [15]:
grb.values
Out[15]:
array([[18.56 , 15.12 , 13.168, ..., 0. , 0. , 0. ], [17.664, 15.136, 14.656, ..., 0. , 0. , 0. ], [17.904, 16.4 , 16.8 , ..., 0. , 0. , 0. ], ..., [ 2.592, 2.816, 2.48 , ..., 0. , 0. , 0. ], [ 3.408, 2.688, 2.816, ..., 0. , 0. , 0. ], [ 6.816, 5.712, 2.768, ..., 0. , 0. , 0. ]])
In [22]:
import matplotlib.pyplot as plt
In [23]:
plt.matshow(data.select(name="Downward short-wave radiation flux")[0].values)
Out[23]:
<matplotlib.image.AxesImage at 0x7faab5bb55e0>
In [24]:
import os import urllib3
In [20]:
url = "https://nomads.ncep.noaa.gov/pub/data/nccf/com/gfs/prod/"
In [28]:
import requests
In [29]:
import datetime as dt
In [36]:
dt.datetime.strftime(dt.datetime.now() - dt.timedelta(days=1), "%Y%m%d")
Out[36]:
'20230815'
In [35]:
import numpy as np from logzero import logger import os import pandas as pd
In [49]:
date = '20230816' file_path = f"./data/{date}/" files = [f"{file_path}/{x}" for x in os.listdir(file_path) if x.startswith('gfs')] pred = list() for file in files: data = pg.open(file) try: grb = data.select(name="Downward short-wave radiation flux")[0] values = grb.values except Exception as e: logger.info(f"error occurs when read {file}") values = np.full([721, 1440], np.nan) print(values) finally: pred.append(values) rst = np.asarray(pred)
In [51]:
rst.shape
Out[51]:
(109, 721, 1440)
In [54]:
timeseries = pd.date_range('2023-08-15 18:00:00', '2023-08-20 17:00:00', freq='H')
In [55]:
len(timeseries)
Out[55]:
120
In [58]:
timeseries.values
Out[58]:
array(['2023-08-15T18:00:00.000000000', '2023-08-15T19:00:00.000000000', '2023-08-15T20:00:00.000000000', '2023-08-15T21:00:00.000000000', '2023-08-15T22:00:00.000000000', '2023-08-15T23:00:00.000000000', '2023-08-16T00:00:00.000000000', '2023-08-16T01:00:00.000000000', '2023-08-16T02:00:00.000000000', '2023-08-16T03:00:00.000000000', '2023-08-16T04:00:00.000000000', '2023-08-16T05:00:00.000000000', '2023-08-16T06:00:00.000000000', '2023-08-16T07:00:00.000000000', '2023-08-16T08:00:00.000000000', '2023-08-16T09:00:00.000000000', '2023-08-16T10:00:00.000000000', '2023-08-16T11:00:00.000000000', '2023-08-16T12:00:00.000000000', '2023-08-16T13:00:00.000000000', '2023-08-16T14:00:00.000000000', '2023-08-16T15:00:00.000000000', '2023-08-16T16:00:00.000000000', '2023-08-16T17:00:00.000000000', '2023-08-16T18:00:00.000000000', '2023-08-16T19:00:00.000000000', '2023-08-16T20:00:00.000000000', '2023-08-16T21:00:00.000000000', '2023-08-16T22:00:00.000000000', '2023-08-16T23:00:00.000000000', '2023-08-17T00:00:00.000000000', '2023-08-17T01:00:00.000000000', '2023-08-17T02:00:00.000000000', '2023-08-17T03:00:00.000000000', '2023-08-17T04:00:00.000000000', '2023-08-17T05:00:00.000000000', '2023-08-17T06:00:00.000000000', '2023-08-17T07:00:00.000000000', '2023-08-17T08:00:00.000000000', '2023-08-17T09:00:00.000000000', '2023-08-17T10:00:00.000000000', '2023-08-17T11:00:00.000000000', '2023-08-17T12:00:00.000000000', '2023-08-17T13:00:00.000000000', '2023-08-17T14:00:00.000000000', '2023-08-17T15:00:00.000000000', '2023-08-17T16:00:00.000000000', '2023-08-17T17:00:00.000000000', '2023-08-17T18:00:00.000000000', '2023-08-17T19:00:00.000000000', '2023-08-17T20:00:00.000000000', '2023-08-17T21:00:00.000000000', '2023-08-17T22:00:00.000000000', '2023-08-17T23:00:00.000000000', '2023-08-18T00:00:00.000000000', '2023-08-18T01:00:00.000000000', '2023-08-18T02:00:00.000000000', '2023-08-18T03:00:00.000000000', '2023-08-18T04:00:00.000000000', '2023-08-18T05:00:00.000000000', '2023-08-18T06:00:00.000000000', '2023-08-18T07:00:00.000000000', '2023-08-18T08:00:00.000000000', '2023-08-18T09:00:00.000000000', '2023-08-18T10:00:00.000000000', '2023-08-18T11:00:00.000000000', '2023-08-18T12:00:00.000000000', '2023-08-18T13:00:00.000000000', '2023-08-18T14:00:00.000000000', '2023-08-18T15:00:00.000000000', '2023-08-18T16:00:00.000000000', '2023-08-18T17:00:00.000000000', '2023-08-18T18:00:00.000000000', '2023-08-18T19:00:00.000000000', '2023-08-18T20:00:00.000000000', '2023-08-18T21:00:00.000000000', '2023-08-18T22:00:00.000000000', '2023-08-18T23:00:00.000000000', '2023-08-19T00:00:00.000000000', '2023-08-19T01:00:00.000000000', '2023-08-19T02:00:00.000000000', '2023-08-19T03:00:00.000000000', '2023-08-19T04:00:00.000000000', '2023-08-19T05:00:00.000000000', '2023-08-19T06:00:00.000000000', '2023-08-19T07:00:00.000000000', '2023-08-19T08:00:00.000000000', '2023-08-19T09:00:00.000000000', '2023-08-19T10:00:00.000000000', '2023-08-19T11:00:00.000000000', '2023-08-19T12:00:00.000000000', '2023-08-19T13:00:00.000000000', '2023-08-19T14:00:00.000000000', '2023-08-19T15:00:00.000000000', '2023-08-19T16:00:00.000000000', '2023-08-19T17:00:00.000000000', '2023-08-19T18:00:00.000000000', '2023-08-19T19:00:00.000000000', '2023-08-19T20:00:00.000000000', '2023-08-19T21:00:00.000000000', '2023-08-19T22:00:00.000000000', '2023-08-19T23:00:00.000000000', '2023-08-20T00:00:00.000000000', '2023-08-20T01:00:00.000000000', '2023-08-20T02:00:00.000000000', '2023-08-20T03:00:00.000000000', '2023-08-20T04:00:00.000000000', '2023-08-20T05:00:00.000000000', '2023-08-20T06:00:00.000000000', '2023-08-20T07:00:00.000000000', '2023-08-20T08:00:00.000000000', '2023-08-20T09:00:00.000000000', '2023-08-20T10:00:00.000000000', '2023-08-20T11:00:00.000000000', '2023-08-20T12:00:00.000000000', '2023-08-20T13:00:00.000000000', '2023-08-20T14:00:00.000000000', '2023-08-20T15:00:00.000000000', '2023-08-20T16:00:00.000000000', '2023-08-20T17:00:00.000000000'], dtype='datetime64[ns]')
In [42]:
import pandas as pd
In [43]:
data = pd.read_excel('./config/各市最佳倾角.xlsx')
In [44]:
data['省份'].ffill(inplace=True)
In [45]:
data.columns
Out[45]:
Index(['省份', '安装角度(°)', '峰值日照时数h/day', '每瓦首年发电量(kWh)/W', '年有效利用小时数(h)', '城市'], dtype='object')
In [46]:
new_dict = dict() for i in range(data.shape[0]): prov = data.iloc[i]['省份'] city = data.iloc[i]['城市'] values= data.iloc[i][['安装角度(°)', '峰值日照时数h/day', '每瓦首年发电量(kWh)/W','年有效利用小时数(h)']].values.tolist() values = [float(x) for x in values] if prov not in new_dict: new_dict[prov] = {} new_dict[prov].update({city:values})
In [47]:
with open('./config/angle.json', 'w', encoding='utf-8') as fw: import json fw.write(json.dumps(new_dict))
In [48]:
list(new_dict.get('山东省').values())
Out[48]:
[[32.0, 4.27, 1.231, 1231.25], [30.0, 3.38, 0.975, 974.62], [35.0, 4.9, 1.413, 1412.92], [36.0, 4.98, 1.436, 1435.98], [35.0, 4.9, 1.413, 1412.92], [35.0, 4.94, 1.424, 1424.45], [32.0, 4.11, 1.349, 1185.12], [33.0, 4.94, 1.424, 1424.45], [32.0, 4.72, 1.361, 1361.01], [36.0, 4.93, 1.422, 1421.57], [33.0, 4.7, 1.355, 1355.25], [33.0, 4.77, 1.375, 1375.43], [35.0, 5.0, 1.442, 1441.75], [36.0, 4.93, 1.422, 1421.57], [37.0, 5.03, 1.45, 1450.4], [32.0, 4.72, 1.361, 1361.01]]
In [49]:
with open('./config/angle.json', 'r', encoding='utf-8') as fr: config = json.load(fr)
In [50]:
config
Out[50]:
{'北京市': {'北京市': [35.0, 4.21, 1.214, 1213.95]}, '上海市': {'上海市': [25.0, 4.09, 1.179, 1179.35]}, '天津市': {'天津市': [35.0, 4.57, 1.318, 1317.76]}, '重庆市': {'重庆市': [8.0, 2.38, 0.686, 686.27]}, '黑龙江省': {'哈尔滨市': [40.0, 4.3, 1.268, 1239.91], '齐齐哈尔市': [43.0, 4.81, 1.388, 1386.96], '牡丹江市': [40.0, 4.51, 1.301, 1300.46], '佳木斯市': [43.0, 4.3, 1.241, 1239.91], '鸡西市': [41.0, 4.53, 1.308, 1306.23], '鹤岗市': [43.0, 4.41, 1.272, 1271.62], '双鸭山市': [43.0, 4.41, 1.272, 1271.62], '黑河市': [46.0, 4.9, 1.415, 1412.92], '大庆市': [41.0, 4.61, 1.331, 1329.29], '大兴安岭地区': [49.0, 4.8, 1.384, 1384.08], '伊春市': [45.0, 4.73, 1.364, 1363.9], '七台河市': [42.0, 4.41, 1.272, 1271.62], '绥化市': [42.0, 4.52, 1.304, 1303.34]}, '吉林省': {'长春市': [41.0, 4.74, 1.367, 1366.78], '延边朝鲜族自治州': [38.0, 4.27, 1.231, 1231.25], '白城市': [42.0, 4.74, 1.369, 1366.78], '松原市': [40.0, 4.63, 1.336, 1335.06], '吉林市': [41.0, 4.68, 1.351, 1349.48], '四平市': [40.0, 4.66, 1.344, 1343.71], '辽源市': [40.0, 4.7, 1.355, 1355.25], '通化市': [37.0, 4.45, 1.283, 1283.16], '白山市': [37.0, 4.31, 1.244, 1242.79]}, '辽宁省': {'沈阳市': [36.0, 4.38, 1.264, 1262.97], '朝阳市': [37.0, 4.78, 1.378, 1378.31], '阜新市': [38.0, 4.64, 1.338, 1337.94], '铁岭市': [37.0, 4.4, 1.269, 1268.74], '抚顺市': [37.0, 4.41, 1.274, 1271.62], '本溪市': [36.0, 4.4, 1.271, 1268.74], '辽阳市': [36.0, 4.41, 1.272, 1271.62], '鞍山市': [35.0, 4.37, 1.262, 1260.09], '丹东市': [36.0, 4.41, 1.273, 1271.62], '大连市': [32.0, 4.3, 1.241, 1239.91], '营口市': [35.0, 4.4, 1.269, 1268.74], '盘锦市': [36.0, 4.36, 1.258, 1257.21], '锦州市': [37.0, 4.7, 1.358, 1355.25], '葫芦岛市': [36.0, 4.66, 1.344, 1343.71]}, '河北省': {'石家庄市': [37.0, 5.03, 1.453, 1450.4], '保定市': [32.0, 4.1, 1.182, 1182.24], '承德市': [42.0, 5.46, 1.574, 1574.39], '唐山市': [36.0, 4.64, 1.338, 1337.94], '秦皇岛市': [38.0, 5.0, 1.442, 1441.75], '邯郸市': [36.0, 4.93, 1.422, 1421.57], '邢台市': [36.0, 4.93, 1.422, 1421.57], '张家口市': [38.0, 4.77, 1.375, 1375.43], '沧州市': [37.0, 5.07, 1.462, 1461.93], '廊坊市': [40.0, 5.17, 1.491, 1490.77], '衡水市': [36.0, 5.0, 1.442, 1441.75]}, '山西省': {'太原市': [33.0, 4.65, 1.341, 1340.83], '大同市': [36.0, 5.11, 1.474, 1473.47], '朔州市': [36.0, 5.16, 1.489, 1487.89], '阳泉市': [33.0, 4.67, 1.348, 1346.59], '长治市': [28.0, 4.04, 1.165, 1164.93], '晋城市': [29.0, 4.28, 1.234, 1234.14], '忻州市': [34.0, 4.78, 1.378, 1378.31], '晋中市': [33.0, 4.65, 1.342, 1340.83], '临汾市': [30.0, 4.27, 1.231, 1231.25], '运城市': [26.0, 4.13, 1.193, 1190.89], '吕梁市': [32.0, 4.65, 1.341, 1340.83]}, '内蒙古自治区': {'呼和浩特市': [35.0, 4.68, 1.349, 1349.48], '包头市': [41.0, 5.55, 1.6, 1600.34], '乌海市': [39.0, 5.51, 1.589, 1588.81], '赤峰市': [41.0, 5.35, 1.543, 1542.67], '通辽市': [44.0, 5.44, 1.569, 1568.62], '呼伦贝尔市': [47.0, 4.99, 1.439, 1438.87], '兴安盟': [46.0, 5.2, 1.499, 1499.42], '鄂尔多斯市': [40.0, 5.55, 1.6, 1600.34], '锡林郭勒盟': [43.0, 5.37, 1.548, 1548.44], '阿拉善盟': [36.0, 5.35, 1.543, 1542.67], '巴彦淖尔市': [41.0, 5.48, 1.58, 1580.16], '乌兰察布市': [40.0, 5.49, 1.574, 1583.04]}, '河南省': {'郑州市': [29.0, 4.23, 1.22, 1219.72], '开封市': [32.0, 4.54, 1.309, 1309.11], '洛阳市': [31.0, 4.56, 1.315, 1314.88], '焦作市': [33.0, 4.68, 1.349, 1349.48], '平顶山市': [30.0, 4.28, 1.234, 1234.14], '鹤壁市': [33.0, 4.73, 1.364, 1363.9], '新乡市': [33.0, 4.68, 1.349, 1349.48], '安阳市': [30.0, 4.32, 1.246, 1245.67], '濮阳市': [33.0, 4.68, 1.349, 1349.48], '商丘市': [31.0, 4.56, 1.315, 1314.88], '许昌市': [30.0, 4.4, 1.269, 1268.74], '漯河市': [29.0, 4.16, 1.2, 1199.54], '信阳市': [27.0, 4.13, 1.191, 1190.89], '三门峡市': [31.0, 4.56, 1.315, 1314.88], '南阳市': [29.0, 4.16, 1.2, 1199.54], '周口市': [29.0, 4.16, 1.2, 1199.54], '驻马店市': [28.0, 4.34, 1.251, 1251.44], '济源市': [28.0, 4.1, 1.182, 1182.24]}, '湖南省': {'长沙市': [20.0, 3.18, 0.917, 916.95], '张家界市': [23.0, 3.81, 1.099, 1098.61], '常德市': [20.0, 3.38, 0.975, 974.62], '益阳市': [16.0, 3.16, 0.912, 911.19], '岳阳市': [16.0, 3.22, 0.931, 928.49], '株洲市': [19.0, 3.46, 0.998, 997.69], '湘潭市': [16.0, 3.23, 0.933, 931.37], '衡阳市': [18.0, 3.39, 0.978, 977.51], '郴州市': [18.0, 3.46, 0.998, 997.69], '永州市': [15.0, 3.27, 0.944, 942.9], '邵阳市': [15.0, 3.25, 0.937, 937.14], '怀化市': [15.0, 2.96, 0.853, 853.52], '娄底市': [16.0, 3.19, 0.921, 919.84], '湘西土家族苗族自治州': [15.0, 2.83, 0.817, 816.03]}, '湖北省': {'武汉市': [20.0, 3.17, 0.914, 914.07], '十堰市': [26.0, 3.87, 1.116, 1115.91], '襄阳市': [20.0, 3.52, 1.016, 1014.99], '荆门市': [20.0, 3.16, 0.913, 911.19], '孝感市': [20.0, 3.51, 1.012, 1012.11], '黄石市': [25.0, 3.89, 1.122, 1121.68], '咸宁市': [19.0, 3.37, 0.972, 971.74], '荆州市': [23.0, 3.75, 1.081, 1081.31], '宜昌市': [20.0, 3.44, 0.992, 991.92], '随州市': [22.0, 3.59, 1.036, 1035.18], '鄂州市': [21.0, 3.66, 1.057, 1055.36], '黄冈市': [21.0, 3.68, 1.063, 1061.13], '恩施土家族苗族自治州': [15.0, 2.73, 0.788, 787.2], '仙桃市': [17.0, 3.29, 0.949, 948.67], '天门市': [18.0, 3.15, 0.91, 908.3], '神农架林区': [21.0, 3.23, 0.934, 931.37], '潜江市': [27.0, 3.89, 1.122, 1121.68]}, '四川省': {'成都市': [16.0, 2.76, 0.798, 795.85], '广元市': [19.0, 3.25, 0.937, 937.14], '绵阳市': [17.0, 2.82, 0.813, 813.15], '德阳市': [17.0, 2.79, 0.805, 804.5], '南充市': [14.0, 2.81, 0.81, 810.26], '广安市': [13.0, 2.77, 0.8, 798.73], '遂宁市': [11.0, 2.8, 0.808, 807.38], '内江市': [11.0, 2.59, 0.747, 746.83], '乐山市': [17.0, 2.77, 0.799, 798.73], '自贡市': [13.0, 2.62, 0.756, 755.48], '泸州市': [11.0, 2.6, 0.75, 749.71], '宜宾市': [12.0, 2.67, 0.771, 769.89], '攀枝花市': [27.0, 5.01, 1.445, 1444.63], '巴中市': [17.0, 2.94, 0.849, 847.75], '达州市': [14.0, 2.82, 0.814, 813.15], '资阳市': [15.0, 2.73, 0.789, 787.2], '眉山市': [16.0, 2.72, 0.786, 784.31], '雅安市': [16.0, 2.92, 0.842, 841.98], '甘孜藏族自治州': [30.0, 4.17, 1.203, 1202.42], '凉山彝族自治州': [25.0, 4.39, 1.266, 1265.86], '阿坝藏族羌族自治州': [35.0, 5.28, 1.523, 1522.49]}, '云南省': {'昆明市': [25.0, 4.4, 1.271, 1268.74], '曲靖市': [25.0, 4.24, 1.224, 1222.6], '玉溪市': [24.0, 4.46, 1.288, 1286.04], '丽江市': [29.0, 5.18, 1.494, 1493.65], '普洱市': [21.0, 4.33, 1.25, 1248.56], '临沧市': [25.0, 4.63, 1.335, 1335.06], '德宏傣族景颇族自治州': [25.0, 4.74, 1.367, 1366.78], '怒江傈僳族自治州': [27.0, 4.68, 1.35, 1349.48], '迪庆藏族自治州': [28.0, 5.01, 1.446, 1444.63], '楚雄彝族自治州': [25.0, 4.49, 1.296, 1294.69], '昭通市': [22.0, 4.25, 1.225, 1225.49], '大理白族自治州': [27.0, 4.91, 1.416, 1415.8], '红河哈尼族彝族自治州': [23.0, 4.56, 1.314, 1314.88], '保山市': [29.0, 4.66, 1.344, 1343.71], '文山壮族苗族自治州': [22.0, 4.52, 1.303, 1303.34], '西双版纳傣族自治州': [20.0, 4.47, 1.291, 1288.92]}, '贵州省': {'贵阳市': [15.0, 2.95, 0.852, 850.63], '六盘水市': [22.0, 3.84, 1.107, 1107.26], '遵义市': [13.0, 2.79, 0.805, 804.5], '安顺市': [13.0, 3.05, 0.879, 879.47], '毕节市': [21.0, 3.76, 1.086, 1084.2], '黔西南布依族苗族自治州': [20.0, 3.85, 1.111, 1110.15], '铜仁市': [15.0, 2.9, 0.836, 836.22]}, '西藏自治区': {'拉萨市': [28.0, 6.4, 1.845, 1845.44], '阿里地区': [32.0, 6.59, 1.9, 1900.23], '昌都市': [32.0, 5.18, 1.494, 1493.65], '林芝市': [30.0, 5.33, 1.537, 1536.91], '日喀则市': [32.0, 6.61, 1.906, 1905.99], '山南市': [32.0, 6.13, 1.758, 1767.5], '那曲市': [35.0, 5.84, 1.648, 1683.96]}, '新疆维吾尔自治区': {'乌鲁木齐市': [33.0, 4.22, 1.217, 1216.84], '昌吉回族自治州': [33.0, 4.22, 1.217, 1216.84], '克拉玛依市': [41.0, 4.87, 1.404, 1404.26], '吐鲁番市': [42.0, 5.55, 1.6, 1600.34], '哈密市': [40.0, 5.33, 1.537, 1536.91], '石河子市': [38.0, 5.12, 1.478, 1476.35], '伊犁哈萨克自治州': [40.0, 4.95, 1.427, 1427.33], '巴音郭楞蒙古自治州': [41.0, 5.42, 1.563, 1562.86], '和田地区': [35.0, 5.59, 1.612, 1611.88], '阿勒泰地区': [44.0, 5.17, 1.494, 1490.77], '塔城地区': [41.0, 4.88, 1.407, 1407.15], '阿克苏地区': [40.0, 5.35, 1.543, 1542.67], '博尔塔拉蒙古自治州': [40.0, 4.91, 1.416, 1415.8], '克孜勒苏柯尔克孜自治州': [40.0, 4.92, 1.419, 1418.68], '喀什地区': [40.0, 4.92, 1.419, 1418.68], '图木舒克市': [37.0, 5.0, 1.442, 1441.75], '阿拉尔市': [38.0, 4.92, 1.419, 1418.68], '五家渠市': [36.0, 4.65, 1.341, 1340.83]}, '陕西省': {'西安市': [26.0, 3.57, 1.029, 1029.41], '宝鸡市': [30.0, 4.28, 1.234, 1234.14], '咸阳市': [26.0, 3.57, 1.029, 1029.41], '渭南市': [31.0, 4.45, 1.283, 1283.16], '铜川市': [33.0, 4.65, 1.341, 1340.83], '延安市': [35.0, 4.99, 1.439, 1438.87], '榆林市': [38.0, 5.4, 1.557, 1557.09], '汉中市': [29.0, 4.06, 1.171, 1170.7], '安康市': [26.0, 3.85, 1.11, 1110.15], '商洛市': [26.0, 3.57, 1.029, 1029.41]}, '甘肃省': {'兰州市': [29.0, 4.21, 1.214, 1213.95], '酒泉市': [41.0, 5.54, 1.597, 1597.46], '嘉峪关市': [41.0, 5.54, 1.597, 1597.46], '张掖市': [42.0, 5.59, 1.612, 1611.88], '天水市': [32.0, 4.51, 1.3, 1300.46], '白银市': [38.0, 5.31, 1.531, 1531.14], '定西市': [38.0, 5.2, 1.499, 1499.42], '甘南藏族自治州': [32.0, 4.51, 1.3, 1300.46], '金昌市': [39.0, 5.6, 1.615, 1614.76], '临夏回族自治州': [38.0, 5.2, 1.499, 1499.42], '陇南市': [28.0, 4.51, 1.3, 1300.46], '平凉市': [34.0, 4.76, 1.373, 1372.55], '庆阳市': [34.0, 4.69, 1.352, 1352.36], '武威市': [40.0, 5.17, 1.491, 1490.77]}, '宁夏回族自治区': {'银川市': [36.0, 5.06, 1.459, 1459.05], '石嘴山市': [39.0, 5.54, 1.597, 1597.46], '固原市': [34.0, 4.76, 1.373, 1372.55], '中卫市': [37.0, 5.39, 1.554, 1554.21], '吴忠市': [38.0, 5.3, 1.528, 1528.26]}, '青海省': {'西宁市': [34.0, 4.7, 1.355, 1355.25], '果洛藏族自治州': [36.0, 5.19, 1.497, 1496.54], '海北藏族自治州': [34.0, 4.7, 1.355, 1355.25], '海东市': [34.0, 4.7, 1.355, 1355.25], '海南藏族自治州': [38.0, 5.88, 1.695, 1695.5], '海西蒙古族藏族自治州': [41.0, 5.65, 1.629, 1629.18], '黄南藏族自治州': [39.0, 5.81, 1.675, 1675.31], '玉树藏族自治州': [34.0, 5.37, 1.548, 1548.44]}, '广东省': {'广州市': [20.0, 3.16, 0.91, 911.19], '清远市': [19.0, 3.43, 0.989, 989.04], '韶关市': [18.0, 3.67, 1.06, 1058.24], '河源市': [18.0, 3.66, 1.056, 1055.36], '梅州市': [20.0, 3.92, 1.132, 1130.33], '潮州市': [19.0, 4.0, 1.156, 1153.4], '汕头市': [19.0, 4.02, 1.16, 1159.17], '揭阳市': [18.0, 3.97, 1.147, 1144.75], '汕尾市': [17.0, 3.81, 1.1, 1098.61], '惠州市': [18.0, 3.74, 1.079, 1078.43], '东莞市': [17.0, 3.52, 1.017, 1014.99], '深圳市': [17.0, 3.78, 1.089, 1089.96], '珠海市': [17.0, 4.0, 1.153, 1153.4], '中山市': [17.0, 3.88, 1.118, 1118.8], '江门市': [17.0, 3.76, 1.084, 1084.2], '佛山市': [18.0, 3.43, 0.99, 989.04], '肇庆市': [18.0, 3.48, 1.003, 1003.46], '云浮市': [17.0, 3.53, 1.018, 1017.88], '阳江市': [16.0, 3.9, 1.127, 1124.57], '茂名市': [16.0, 3.84, 1.108, 1107.26], '湛江市': [14.0, 3.9, 1.125, 1124.57]}, '广西壮族自治区': {'南宁市': [14.0, 3.62, 1.044, 1043.83], '桂林市': [17.0, 3.35, 0.967, 965.97], '百色市': [15.0, 3.79, 1.094, 1092.85], '玉林市': [16.0, 3.74, 1.079, 1078.43], '钦州市': [14.0, 3.67, 1.059, 1058.24], '北海市': [14.0, 3.76, 1.085, 1084.2], '梧州市': [16.0, 3.63, 1.046, 1046.71], '柳州市': [16.0, 3.46, 0.998, 997.69], '河池市': [14.0, 3.46, 0.998, 997.69], '防城港市': [14.0, 3.67, 1.059, 1058.24], '贺州市': [17.0, 3.54, 1.02, 1020.76], '来宾市': [14.0, 3.55, 1.024, 1023.64], '崇左市': [14.0, 3.74, 1.078, 1078.43], '贵港市': [15.0, 3.61, 1.042, 1040.94]}, '海南省': {'海口市': [10.0, 4.33, 1.25, 1248.56], '三亚市': [15.0, 4.75, 1.371, 1369.66], '琼海市': [12.0, 4.71, 1.358, 1358.13], '白沙黎族自治县': [15.0, 4.76, 1.374, 1372.55], '保亭黎族苗族自治县': [15.0, 4.74, 1.368, 1366.78], '昌江黎族自治县': [13.0, 4.55, 1.314, 1311.99], '澄迈县': [13.0, 4.55, 1.313, 1311.99], '儋州市': [13.0, 4.48, 1.294, 1291.81], '定安县': [10.0, 4.32, 1.246, 1245.67], '东方市': [14.0, 4.84, 1.396, 1395.61], '乐东黎族自治县': [16.0, 4.77, 1.376, 1375.43], '临高县': [12.0, 4.51, 1.302, 1300.46], '陵水黎族自治县': [15.0, 4.74, 1.366, 1366.78], '琼中黎族苗族自治县': [13.0, 4.72, 1.362, 1361.01], '屯昌县': [13.0, 4.68, 1.351, 1349.48], '万宁市': [13.0, 4.67, 1.346, 1346.59], '文昌市': [10.0, 4.28, 1230.0, 1234.0], '五指山市': [15.0, 4.8, 1.387, 1384.08]}, '江苏省': {'南京市': [23.0, 3.71, 1.07, 1069.78], '徐州市': [25.0, 3.95, 1.139, 1138.98], '连云港市': [26.0, 4.13, 1.19, 1190.89], '盐城市': [25.0, 3.98, 1.147, 1147.63], '泰州市': [23.0, 3.8, 1.097, 1095.73], '镇江市': [23.0, 3.68, 1.062, 1061.13], '南通市': [23.0, 3.92, 1.13, 1130.33], '常州市': [23.0, 3.73, 1.076, 1075.55], '无锡市': [23.0, 3.71, 1.07, 1069.78], '苏州市': [22.0, 3.68, 1.062, 1061.13], '淮安市': [25.0, 3.98, 1.148, 1147.63], '宿迁市': [25.0, 3.96, 1.141, 1141.87], '扬州市': [22.0, 3.69, 1.065, 1064.01]}, '浙江省': {'杭州市': [20.0, 3.42, 0.988, 986.16], '绍兴市': [20.0, 3.56, 1.028, 1026.53], '宁波市': [20.0, 3.67, 1.057, 1058.24], '湖州市': [20.0, 3.7, 1.067, 1066.9], '嘉兴市': [20.0, 3.66, 1.057, 1055.36], '金华市': [20.0, 3.63, 1.047, 1046.71], '丽水市': [20.0, 3.77, 1.089, 1087.08], '温州市': [18.0, 3.77, 1.088, 1087.08], '台州市': [23.0, 3.8, 1.098, 1095.73], '舟山市': [20.0, 3.76, 1.085, 1084.2], '衢州市': [20.0, 3.69, 1.064, 1064.01]}, '福建省': {'福州市': [17.0, 3.54, 1.021, 1020.76], '莆田市': [16.0, 3.59, 1.035, 1035.18], '南平市': [18.0, 4.17, 1.204, 1202.42], '厦门市': [17.0, 3.89, 1.121, 1121.68], '泉州市': [17.0, 3.92, 1.131, 1130.33], '漳州市': [18.0, 3.87, 1.116, 1115.91], '三明市': [18.0, 3.92, 1.132, 1130.33], '龙岩市': [20.0, 3.92, 1.13, 1130.33], '宁德市': [18.0, 3.62, 1.045, 1043.83]}, '山东省': {'济南市': [32.0, 4.27, 1.231, 1231.25], '青岛市': [30.0, 3.38, 0.975, 974.62], '淄博市': [35.0, 4.9, 1.413, 1412.92], '东营市': [36.0, 4.98, 1.436, 1435.98], '潍坊市': [35.0, 4.9, 1.413, 1412.92], '烟台市': [35.0, 4.94, 1.424, 1424.45], '枣庄市': [32.0, 4.11, 1.349, 1185.12], '威海市': [33.0, 4.94, 1.424, 1424.45], '济宁市': [32.0, 4.72, 1.361, 1361.01], '泰安市': [36.0, 4.93, 1.422, 1421.57], '日照市': [33.0, 4.7, 1.355, 1355.25], '临沂市': [33.0, 4.77, 1.375, 1375.43], '德州市': [35.0, 5.0, 1.442, 1441.75], '聊城市': [36.0, 4.93, 1.422, 1421.57], '滨州市': [37.0, 5.03, 1.45, 1450.4], '菏泽市': [32.0, 4.72, 1.361, 1361.01]}, '江西省': {'南昌市': [16.0, 3.59, 1.036, 1035.18], '九江市': [20.0, 3.56, 1.026, 1026.53], '景德镇市': [20.0, 3.63, 1.047, 1046.71], '上饶市': [20.0, 3.76, 1.084, 1084.2], '鹰潭市': [17.0, 3.68, 1.062, 1061.13], '宜春市': [15.0, 3.37, 0.973, 971.74], '萍乡市': [15.0, 3.33, 0.962, 960.21], '赣州市': [16.0, 3.67, 1.059, 1058.24], '吉安市': [16.0, 3.59, 1.037, 1035.18], '抚州市': [16.0, 3.64, 1.049, 1049.59], '新余市': [15.0, 3.55, 1.025, 1023.64]}, '安徽省': {'合肥市': [27.0, 3.69, 1.064, 1064.01], '芜湖市': [26.0, 4.03, 1.162, 1162.05], '黄山市': [25.0, 3.84, 1.107, 1107.26], '安庆市': [25.0, 3.91, 1.127, 1127.45], '蚌埠市': [25.0, 3.92, 1.13, 1130.33], '亳州市': [23.0, 3.86, 1.115, 1113.03], '池州市': [22.0, 3.64, 1.048, 1049.59], '滁州市': [23.0, 3.66, 1.056, 1055.36], '阜阳市': [28.0, 4.21, 1.214, 1213.95], '淮北市': [30.0, 4.49, 1.295, 1294.69], '六安市': [23.0, 3.69, 1.065, 1064.01], '马鞍山市': [22.0, 3.68, 1.061, 1061.13], '宿州市': [30.0, 4.47, 1.289, 1288.92], '铜陵市': [22.0, 3.65, 1.054, 1052.48], '宣城市': [23.0, 3.65, 1.052, 1052.48], '淮南市': [28.0, 4.24, 1.223, 1222.6]}, '香港特别行政区': {'香港特别行政区': [17.0, 3.78, 1.089, 1089.96]}, '澳门特别行政区': {'澳门特别行政区': [17.0, 4.0, 1.153, 1153.4]}, '台湾省': {'台北市': [24.0, 3.75, 1.081, 1081.31]}}
In [13]:
import numpy as np
In [14]:
230 * 0.2 * np.asarray( [201.2, 2001.5])
Out[14]:
array([ 9255.2, 92069. ])
In [1]:
import datetime as dt
In [2]:
start = dt.datetime(2023,8,11, 19) + dt.timedelta(hours=8) end = dt.datetime(2023,8,21, 19) + dt.timedelta(hours=8)
In [4]:
import pandas as pd
In [8]:
pd.date_range(start+dt.timedelta(hours=8), end+dt.timedelta(hours=8), freq='H').astype(str).to_list()
Out[8]:
['2023-08-12 11:00:00', '2023-08-12 12:00:00', '2023-08-12 13:00:00', '2023-08-12 14:00:00', '2023-08-12 15:00:00', '2023-08-12 16:00:00', '2023-08-12 17:00:00', '2023-08-12 18:00:00', '2023-08-12 19:00:00', '2023-08-12 20:00:00', '2023-08-12 21:00:00', '2023-08-12 22:00:00', '2023-08-12 23:00:00', '2023-08-13 00:00:00', '2023-08-13 01:00:00', '2023-08-13 02:00:00', '2023-08-13 03:00:00', '2023-08-13 04:00:00', '2023-08-13 05:00:00', '2023-08-13 06:00:00', '2023-08-13 07:00:00', '2023-08-13 08:00:00', '2023-08-13 09:00:00', '2023-08-13 10:00:00', '2023-08-13 11:00:00', '2023-08-13 12:00:00', '2023-08-13 13:00:00', '2023-08-13 14:00:00', '2023-08-13 15:00:00', '2023-08-13 16:00:00', '2023-08-13 17:00:00', '2023-08-13 18:00:00', '2023-08-13 19:00:00', '2023-08-13 20:00:00', '2023-08-13 21:00:00', '2023-08-13 22:00:00', '2023-08-13 23:00:00', '2023-08-14 00:00:00', '2023-08-14 01:00:00', '2023-08-14 02:00:00', '2023-08-14 03:00:00', '2023-08-14 04:00:00', '2023-08-14 05:00:00', '2023-08-14 06:00:00', '2023-08-14 07:00:00', '2023-08-14 08:00:00', '2023-08-14 09:00:00', '2023-08-14 10:00:00', '2023-08-14 11:00:00', '2023-08-14 12:00:00', '2023-08-14 13:00:00', '2023-08-14 14:00:00', '2023-08-14 15:00:00', '2023-08-14 16:00:00', '2023-08-14 17:00:00', '2023-08-14 18:00:00', '2023-08-14 19:00:00', '2023-08-14 20:00:00', '2023-08-14 21:00:00', '2023-08-14 22:00:00', '2023-08-14 23:00:00', '2023-08-15 00:00:00', '2023-08-15 01:00:00', '2023-08-15 02:00:00', '2023-08-15 03:00:00', '2023-08-15 04:00:00', '2023-08-15 05:00:00', '2023-08-15 06:00:00', '2023-08-15 07:00:00', '2023-08-15 08:00:00', '2023-08-15 09:00:00', '2023-08-15 10:00:00', '2023-08-15 11:00:00', '2023-08-15 12:00:00', '2023-08-15 13:00:00', '2023-08-15 14:00:00', '2023-08-15 15:00:00', '2023-08-15 16:00:00', '2023-08-15 17:00:00', '2023-08-15 18:00:00', '2023-08-15 19:00:00', '2023-08-15 20:00:00', '2023-08-15 21:00:00', '2023-08-15 22:00:00', '2023-08-15 23:00:00', '2023-08-16 00:00:00', '2023-08-16 01:00:00', '2023-08-16 02:00:00', '2023-08-16 03:00:00', '2023-08-16 04:00:00', '2023-08-16 05:00:00', '2023-08-16 06:00:00', '2023-08-16 07:00:00', '2023-08-16 08:00:00', '2023-08-16 09:00:00', '2023-08-16 10:00:00', '2023-08-16 11:00:00', '2023-08-16 12:00:00', '2023-08-16 13:00:00', '2023-08-16 14:00:00', '2023-08-16 15:00:00', '2023-08-16 16:00:00', '2023-08-16 17:00:00', '2023-08-16 18:00:00', '2023-08-16 19:00:00', '2023-08-16 20:00:00', '2023-08-16 21:00:00', '2023-08-16 22:00:00', '2023-08-16 23:00:00', '2023-08-17 00:00:00', '2023-08-17 01:00:00', '2023-08-17 02:00:00', '2023-08-17 03:00:00', '2023-08-17 04:00:00', '2023-08-17 05:00:00', '2023-08-17 06:00:00', '2023-08-17 07:00:00', '2023-08-17 08:00:00', '2023-08-17 09:00:00', '2023-08-17 10:00:00', '2023-08-17 11:00:00', '2023-08-17 12:00:00', '2023-08-17 13:00:00', '2023-08-17 14:00:00', '2023-08-17 15:00:00', '2023-08-17 16:00:00', '2023-08-17 17:00:00', '2023-08-17 18:00:00', '2023-08-17 19:00:00', '2023-08-17 20:00:00', '2023-08-17 21:00:00', '2023-08-17 22:00:00', '2023-08-17 23:00:00', '2023-08-18 00:00:00', '2023-08-18 01:00:00', '2023-08-18 02:00:00', '2023-08-18 03:00:00', '2023-08-18 04:00:00', '2023-08-18 05:00:00', '2023-08-18 06:00:00', '2023-08-18 07:00:00', '2023-08-18 08:00:00', '2023-08-18 09:00:00', '2023-08-18 10:00:00', '2023-08-18 11:00:00', '2023-08-18 12:00:00', '2023-08-18 13:00:00', '2023-08-18 14:00:00', '2023-08-18 15:00:00', '2023-08-18 16:00:00', '2023-08-18 17:00:00', '2023-08-18 18:00:00', '2023-08-18 19:00:00', '2023-08-18 20:00:00', '2023-08-18 21:00:00', '2023-08-18 22:00:00', '2023-08-18 23:00:00', '2023-08-19 00:00:00', '2023-08-19 01:00:00', '2023-08-19 02:00:00', '2023-08-19 03:00:00', '2023-08-19 04:00:00', '2023-08-19 05:00:00', '2023-08-19 06:00:00', '2023-08-19 07:00:00', '2023-08-19 08:00:00', '2023-08-19 09:00:00', '2023-08-19 10:00:00', '2023-08-19 11:00:00', '2023-08-19 12:00:00', '2023-08-19 13:00:00', '2023-08-19 14:00:00', '2023-08-19 15:00:00', '2023-08-19 16:00:00', '2023-08-19 17:00:00', '2023-08-19 18:00:00', '2023-08-19 19:00:00', '2023-08-19 20:00:00', '2023-08-19 21:00:00', '2023-08-19 22:00:00', '2023-08-19 23:00:00', '2023-08-20 00:00:00', '2023-08-20 01:00:00', '2023-08-20 02:00:00', '2023-08-20 03:00:00', '2023-08-20 04:00:00', '2023-08-20 05:00:00', '2023-08-20 06:00:00', '2023-08-20 07:00:00', '2023-08-20 08:00:00', '2023-08-20 09:00:00', '2023-08-20 10:00:00', '2023-08-20 11:00:00', '2023-08-20 12:00:00', '2023-08-20 13:00:00', '2023-08-20 14:00:00', '2023-08-20 15:00:00', '2023-08-20 16:00:00', '2023-08-20 17:00:00', '2023-08-20 18:00:00', '2023-08-20 19:00:00', '2023-08-20 20:00:00', '2023-08-20 21:00:00', '2023-08-20 22:00:00', '2023-08-20 23:00:00', '2023-08-21 00:00:00', '2023-08-21 01:00:00', '2023-08-21 02:00:00', '2023-08-21 03:00:00', '2023-08-21 04:00:00', '2023-08-21 05:00:00', '2023-08-21 06:00:00', '2023-08-21 07:00:00', '2023-08-21 08:00:00', '2023-08-21 09:00:00', '2023-08-21 10:00:00', '2023-08-21 11:00:00', '2023-08-21 12:00:00', '2023-08-21 13:00:00', '2023-08-21 14:00:00', '2023-08-21 15:00:00', '2023-08-21 16:00:00', '2023-08-21 17:00:00', '2023-08-21 18:00:00', '2023-08-21 19:00:00', '2023-08-21 20:00:00', '2023-08-21 21:00:00', '2023-08-21 22:00:00', '2023-08-21 23:00:00', '2023-08-22 00:00:00', '2023-08-22 01:00:00', '2023-08-22 02:00:00', '2023-08-22 03:00:00', '2023-08-22 04:00:00', '2023-08-22 05:00:00', '2023-08-22 06:00:00', '2023-08-22 07:00:00', '2023-08-22 08:00:00', '2023-08-22 09:00:00', '2023-08-22 10:00:00', '2023-08-22 11:00:00']
In [10]:
import pygrib as pg
In [13]:
data = pg.open('./data/20230822/gfs.t18z.pgrb2.0p25.f001')
In [12]:
data.close()
In [16]:
data.seek(0)
In [1]:
import pandas as pd import numpy as np
In [4]:
pd.DataFrame(np.random.rand(721, 1440)).to_csv('./data/test.csv', index=False, encoding='utf-8-sig')
In [23]:
tmp = np.random.rand(120, 721, 1440)
In [19]:
len(np.arange(-90, 90.1, 0.25))
Out[19]:
721
In [21]:
np.arange(0, 360, step=0.25)
Out[21]:
array([0.0000e+00, 2.5000e-01, 5.0000e-01, ..., 3.5925e+02, 3.5950e+02, 3.5975e+02])
In [22]:
len(np.arange(0, 360, step=0.25))
Out[22]:
1440
In [31]:
sum(np.arange(90, -90.1, -0.25) == lat) == 721
Out[31]:
True
In [34]:
sum(np.arange(0, 360, step=0.25) == lon) == 1440
Out[34]:
True
In [35]:
721 * 1440 * 120
Out[35]:
124588800
In [1]:
import jieba
In [5]:
jieba.lcut("阿勒泰地区", cut_all=True)
Out[5]:
['阿勒', '阿勒泰', '阿勒泰地区', '地区']
In [6]:
import pandas as pd
In [30]:
angle = pd.read_excel('./config/各市最佳倾角.xlsx') city = pd.read_excel('city.xlsx', header=None)
In [31]:
city.columns = ['prov', 'city']
In [32]:
angle = angle.ffill()
In [38]:
def check_name(x, y): for c in y: if x in c: return c
In [34]:
prov_list = city.prov.unique().tolist()
In [35]:
prov_list
Out[35]:
['河北省', '山西省', '内蒙古自治区', '辽宁省', '吉林省', '黑龙江省', '江苏省', '浙江省', '安徽省', '福建省', '江西省', '山东省', '河南省', '湖北省', '湖南省', '广东省', '广西壮族自治区', '海南省', '四川省', '贵州省', '云南省', '西藏自治区', '陕西省', '甘肃省', '青海省', '宁夏回族自治区', '新疆维吾尔自治区']
In [36]:
angle['省份'] = angle['省份'].apply(lambda x: check_name(x, prov_list))
In [37]:
angle
Out[37]:
省份 | 城市 | 安装角度(°) | 峰值日照时数h/day | 每瓦首年发电量(kWh)/W | 年有效利用小时数(h) | |
---|---|---|---|---|---|---|
0 | 北京市 | 北京市 | 35 | 4.21 | 1.214 | 1213.95 |
1 | 上海市 | 上海市 | 25 | 4.09 | 1.179 | 1179.35 |
2 | 天津市 | 天津市 | 35 | 4.57 | 1.318 | 1317.76 |
3 | 重庆市 | 重庆市 | 8 | 2.38 | 0.686 | 686.27 |
4 | 黑龙江省 | 哈尔滨 | 40 | 4.30 | 1.268 | 1239.91 |
... | ... | ... | ... | ... | ... | ... |
356 | 安徽省 | 宣城 | 23 | 3.65 | 1.052 | 1052.48 |
357 | 安徽省 | 淮南 | 28 | 4.24 | 1.223 | 1222.60 |
358 | 香港特别行政区 | 香港特别行政区 | 17 | 3.78 | 1.089 | 1089.96 |
359 | 澳门特别行政区 | 澳门特别行政区 | 17 | 4.00 | 1.153 | 1153.40 |
360 | 台湾省 | 台北市 | 24 | 3.75 | 1.081 | 1081.31 |
361 rows × 6 columns
In [39]:
angle['地级行政区'] = angle.apply(lambda x: check_name(x['城市'], city[city.prov==x['省份']].city.values.tolist()), axis=1)
In [41]:
angle.to_excel('./各市最佳倾角.xlsx', index=False)
In [ ]: