爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 24400|回复: 18

[经验总结] 使用python进行一些气候相关统计量的计算

[复制链接]

新浪微博达人勋

发表于 2020-9-20 17:03:13 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 cwllsss 于 2020-9-20 17:26 编辑

莫名其妙就开学了.发个帖子督促自己学习.
使用python进行一些常见统计量的计算.
反正学到哪里写到哪里(总之大概是会很很落后于上课进度的)

评分

参与人数 1金钱 +15 贡献 +5 体力 +40 收起 理由
言深深 + 15 + 5 + 40 坚持总会有收获

查看全部评分

密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2020-9-20 17:26:00 | 显示全部楼层
本帖最后由 cwllsss 于 2020-9-20 19:03 编辑

平均值的计算
#使用jupyter
#导入numpy和pandas这两个库
import numpy as np
import pandas as pd
1.自定义函数
#定义mean函数求数据均值
def mean(arr):
    n = arr.shape[0]
    sum = 0
    for i in range(0,5):
        sum +=arr
    meanArr = sum/n
    return meanArr



#计算均值
#NumPy 从已有的数组创建数组
#numpy.asarray(a, dtype = None, order = None)
arr1 = [1,2,3,4,5]
arr1 = np.asarray(arr1, dtype = None, order = None)
#获得数组中元素的个数
n = arr1.shape[0]

--------------------------------------------------------------------
C]R8[)OX57X_[[~6TR`F]JX.png
--------------------------------------------------------------------

meanArr1 =  mean(arr1)
-------------------------------------------------------------------

BDH4J]QYTP5Y%I)HX7TFZZM.png

--------------------------------------------------------------------

2.也可以使用numpy的函数 numpy.mean()
'''numpy.mean()
  numpy.mean() 函数返回数组中元素的算术平均值。 如果提供了轴,则沿其计算。

算术平均值是沿轴的元素的总和除以元素的数量。'''

meanArr2 = np.mean(arr1)

#还可以使用pandas的函数 series1.mean()

arr2 = [1,2,3,4,5]
series1 = pd.Series(arr2)

series1.mean()

'''在气象数据分析上面,一个数据的维度可能为(time,latitude,longitude,level)
若有同位素HDO的数据为HDO(time,latitude,longitude,level)'''
HDO_Timemean = np.mean(HDO,0) #沿0轴(也就是time时间轴进行平均计算)
HDO_Latmean = np.mean(HDO,1) #沿0轴(也就是latitude纬度轴进行平均计算)
HDO_Lonmean = np.mean(HDO,2) #沿0轴(也就是longitude经度轴进行平均计算)
HDO_Levmean = np.mean(HDO,3) #沿0轴(也就是level高度轴进行平均计算)


3.pandas也有类似的用法
#先使用numpy生成随机数供计算
'''np.random.ranint(low,hight,size)

  生成(low,high)之间size个的随机数'''

arr3 = np.random.randint(1,100,size=[5,10])
]N101333NU)5_FP61({NE{5.png


series2 = pd.DataFrame(arr3)#生成pd的数据类型DataFrame

IL{4~79WQ8}402V2TWDT.png
#按列求平均值
series2.mean(axis=0)
#返回10列的平均值

L4S4T0W8$IHG0W)QCPV68ON.png
#axis 可以省略
series2.mean(0)


#按行求平均值
series2.mean(axis=1)
#返回5行的平均值

~T0EY8{4EZSRJY(BXW`CMJ5.png


密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-9-20 19:01:37 | 显示全部楼层
关于排序
import numpy as np
import pandas as pd



#生成随机数
arr1 = np.random.randint(1,100,size=10)


1.对于列表类型的数据
#list.sort(cmp=None, key=None, reverse=False)
#reverse -- 排序规则,reverse = True 降序, reverse = False 升序(默认)
#该种方式直接更改原始数据,不会产生副本


#转化成列表类型
list1 = list(arr1)
#list1.sort() 该种方式直接更改原始数据,不会产生副本
list1.sort()#升序

list1.sort(reverse = True)#降序

2.sorted()
#升序排序,对所有的可迭代序列都有效
sorted(arr1)
sorted(list1)


3.numpy
np.sort(arr1)#升序排序
np.sort(arr1)[::-1]#降序排序


密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-9-20 19:49:58 | 显示全部楼层
中位数的计算

import numpy as np
1.自定义函数
def median(arr):
    #获得arr的元素总数
    n = arr.size
   #排序
    arrSort = np.sort(arr)

    arrMedian = arr[0]

    if (n%2==0):
        arrMedian = (arrSort[int((n/2-1))]+arrSort[int((n/2))])/2

    elif(n%2!=0):
        arrMedian = arrSort[int((n-1)/2)]
    return arrMedian
   

#生成随机数
arr1 = np.random.randint(1,100,size=1000)

arr1Median1 = median(arr1)

2.使用np.median()函数
arr1Median2 = np.median(arr1)

密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-9-20 20:23:36 | 显示全部楼层
平均数(mean)与中位数(median)
两者都是表征中心趋势的统计量
不同之处在于

平均数(mean)易受界外影响中位数(median)更稳健 合理
譬如序列[1,1,2,2,80],平均数= 17.2 就无法准确表征中心趋势而中位数=2,则可以准确表征中心趋势


平均数常用于正态分布数据
中位数常用于偏态分布数据

密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2020-9-21 20:37:44 | 显示全部楼层
{:eb502:}鼓励!坚持!加油!!
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-9-22 09:59:25 | 显示全部楼层
urnotcotton 发表于 2020-9-21 20:37
鼓励!坚持!加油!!

会坚持的!!谢谢鼓励!!!
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2020-9-23 14:22:52 | 显示全部楼层
cwllsss 发表于 2020-9-22 09:59
会坚持的!!谢谢鼓励!!!

不错!能不能给个计算实例
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-9-23 20:51:41 | 显示全部楼层
本帖最后由 cwllsss 于 2020-9-23 20:56 编辑
珮瑶瑶 发表于 2020-9-23 14:22
不错!能不能给个计算实例

请问是指什么样的实例呢?上面需要用到数据的地方都是采用的numpy的随机数生成的数据。如果是气象类的计算的话。我可能一时之间找不到合适的数据。感觉目前写的都是很小很小的东西。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2020-9-24 08:30:18 | 显示全部楼层
用describe()就可以将mean,variance,百分位数等全部计算出来。但在处理气象数据的时候,比较麻烦的是缺测值,楼主可要当心哦。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表