# Python和R概率统计算法建模评估气象和运动

<details>

<summary>关键词</summary>

Python | R | 概率 | 统计 | 算法 | 气象 | 降水 | 数学公式 | 温度 | 直方图 | 曲线 | 全景图 | 维度 | 样本 | 置信区间 | 泊松分布 | 差异 | 建模 | 拟合 | 相关性 | 观测值 | 回归 | 矩阵 | 时间序列 | 线性 | 非线性 | 变量 | 全球 | 地理坐标 | 二氧化碳 | 频谱 | 傅里叶 | 季节 | 模拟 | 聚类 | K均值 | 随机森林 | 可靠性 | 广义线性 | 投注 | 主成分分析 | 降维 | 运动学 | 动力学 | 大语言模型 | 推理

</details>

{% embed url="https://viadean.notion.site/Python-R-17479a38111c47498505399e6ba3692f" %}

{% content-ref url="../zhi-dian-mi-jin-brief" %}
[zhi-dian-mi-jin-brief](../zhi-dian-mi-jin-brief)
{% endcontent-ref %}

### 🎯要点

1. 概率统计数学：🎯Python和R计算和算法实现
2. 气象学：
   1. 计算和可视化：🎯全球陆地-海洋平均年平均表面温度：🖊直方图温度异常，🖊显示分位数-分位数，🖊绘制线性趋势线，🖊绘制温度空间图，🖊温度空间图的全景图，🖊一维空间一维时间数据和霍夫莫勒图，🖊三维空间和一维时间文件及其地图绘制。🖊ChatGPT生成全球温度。
   2. 概率统计计算和绘制：🎯气象变量：🖊日降水量，🖊干旱期的概率分布函数和累计分布函数，二项分布和正态分布、🖊气候数据集估计平均值、方差、偏度和峰度，🖊降水量泊松分布。🎯估算：🖊给定日期地面气温异常平均值和置信区间，🖊计算气温异常假设检验，🖊计算气温统计学有效样本大小，🖊计算给定期间气温统计学上明显差异，🖊计算平均晴天、部分多云、多云天数，🖊将月降雨量数据拟合到伽玛分布，🖊使用累积分布的柯尔莫哥洛夫-斯米尔诺夫检验检查观测值和预期值拟合度，🖊对Kendall tau 检验既存同类数据关系，🖊曼-肯德尔趋势检验。
   3. 回归建模：🎯温度：🖊下降率和近似线性建模，单变量线性回归的假设和公式推导，斜率和相关性关系，置信区间预测，🖊鉴于地理坐标的温度下降率多线性回归建模，🖊全球温度的多线性回归非线性拟合。
   4. 矩阵数据：🎯数学线性计算：🖊奇异值分解海平面压力，🖊计算和可视化温度异常的时空因子的样本协方差矩阵，🖊计算和绘制赤道纬向带上温度异常的协方差矩阵特征值的曲线图，🖊德宾-沃森独立性测试样本，🖊指定特征值和标准误差条的碎石图。
   5. 时间序列：🎯二氧化碳数据：🖊基林曲线，🖊误差趋势和季节分解时间序列数据，🖊基林曲线的预测和观测数据的拟合，🖊最低气温观测数据及其趋势、季节周期和随机残差，🖊模拟自回归序列，🖊频谱分析，傅里叶变换。
   6. 机器学习：🎯气温和风：🖊每日天气数据的 K 均值聚类，散列图显示温度和风向关系，🖊聚类凸包数据分析，🖊随机森林回归城市每日臭氧层数据。
   7. 🎯气候和干旱指数：气候指数算法代码实现
3. 运动学：
   1. 🎯可靠与不可靠性数据分析：🖊过滤、🖊汇总、🖊绘制，🖊专业运动员级成功可靠性。
   2. 🎯一般和多线性回归建模：🖊使用探索性数据分析绘制数据、🖊建模，拟合模型，运行模型获得汇总结果、🖊使用统计模型多线性建模和拟合模型，汇总模型结果。
   3. 🎯广义线性模型：🖊建模，绘制逻辑曲线、🖊从模型获取运动超出预期的完成百分比、🖊计算超出预期的完成百分比 vs 完成百分比的可靠性。
   4. 🎯泊松回归和体彩投注：🖊计算泊松概率分布，直方图观察比赛变化，🖊建模，从收支平衡计算投注方式，🖊计算泊松回归系数对模型结果的影响。
   5. 🎯主成分分析和聚类：🖊散列图分析运动员身体特征及运动特点、🖊降维（主成分分析）分析运动员成绩，🖊聚类算法：K均值法计算运动员和比赛结果。
   6. 机器学习：🎯视频计算人体运动学和动力学，大语言模型推理运动模式。

### 🍇Python分析网格降水量

```python
 import glob
 import matplotlib.pyplot as plt
 import urllib.request
 import xarray as xr
```

```python
 for yr in range(2011,2015): 
     url = f'https://downloads.precip.V1.0.{yr}.nc'
     savename = url.split('/')[-1]
     urllib.request.urlretrieve(url,savename)
```

让我们从简单开始：打开两年的数据并将它们连接到一个文件：

```python
 ds2011 = xr.open_dataset('precip.V1.0.2011.nc')
 ds2012 = xr.open_dataset('precip.V1.0.2012.nc')
 ds2011_2012 = xr.concat([ds2011,ds2012], dim='time')
```

现在，让我们尝试类似的操作，但通过更有效的方式（特别是文件数量超过两个）：

```python
 ds2011_2014 = xr.open_mfdataset('precip.V1.0.*.nc', concat_dim='time', combine='nested')
```

现在让我们关注 2012 年并提取每月降水量总和并绘制其中一个月的简单绘图：

上面的图很简单，质量不高。现在，我们将为所有 12 个月制定一个更加个性化的情节，如下所示：

```python
 import calendar 
 landmask = ds2012.precip.sum(dim='time')>0
```

```python
 fig = plt.figure(figsize=[12,8], facecolor='w')
 plt.subplots_adjust(bottom=0.15, top=0.96, left=0.04, right=0.99, 
                     wspace=0.2, hspace=0.27) 
 nrows = 3
 ncols = 4
 for i in range(1, 13):
     plt.subplot(nrows, ncols, i)
     dataplot = ds2012_mon.precip[i-1, :, :].where(landmask) 
     p = plt.pcolormesh(ds2012_mon.lon, ds2012_mon.lat, dataplot,
                    vmax = 400, vmin = 0, cmap = 'nipy_spectral_r',
                    ) 
     plt.xlim([233,295])
     plt.ylim([25,50])
     plt.title(calendar.month_name[dataplot.month.values], fontsize = 13, 
               fontweight = 'bold', color = 'b')
     plt.xticks(fontsize = 11)
     plt.yticks(fontsize = 11)
     if i % ncols == 1: 
         plt.ylabel('Latitude', fontsize = 11, fontweight = 'bold')
     if i > ncols*(nrows-1): 
         plt.xlabel('Longitude', fontsize = 11, fontweight = 'bold')
 ​
 cax = fig.add_axes([0.25, 0.06, 0.5, 0.018])
 cb = plt.colorbar(cax=cax, orientation='horizontal', extend = 'max',)
 cb.ax.tick_params(labelsize=11)
 cb.set_label(label='Precipitation (mm)', color = 'k', size=14)
 ​
 plt.savefig('Fig_prec_mon_2012.png', format = 'png', dpi = 300)
```

现在假设我们想要提取特定边界的数据并查看该感兴趣区域内的平均条件。为简单起见，我们可以考虑一个矩形框。对于本例，让我们看一个几乎与此地类似的矩形框

```python
 top = 40
 bottom = 37
 left = 258
 right = 265.4
```

```python
 ds_sel = ds2011_2014.isel(lon=(ds2011_2014.lon >= left) & (ds2011_2014.lon <= right),
                           lat=(ds2011_2014.lat >= bottom) & (ds2011_2014.lat <= top),
                           )
 ds_sel_avg = ds_sel.mean(dim=['lat','lon'])
```

现在让我们绘制所选区域每年的累计日降水量。为了让事情变得更简单，让我们从记录中的所有闰年中删除 2 月 29 日。

```python
 ds_sel_avg_noleap = ds_sel_avg.sel(
     time=~((ds_sel_avg.time.dt.month == 2) & (ds_sel_avg.time.dt.day == 29)))
```

结果如下：

```python
 ds_sel_avg_noleap
```
