
正文
python核密度函数 核密度估计matlab程序
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
114 11 个案例掌握 Python 数据可视化--美国气候研究
自哥本哈根气候会议之后,全球日益关注气候变化和温室效应等问题,并于会后建立了全球碳交易市场,分阶段分批次减碳。本实验获取了美国 1979 - 2011 年间 NASA 等机构对美国各地日均最高气温、降雨量等数据,研究及可视化了气候相关指标的变化规律及相互关系。
输入并执行魔法命令 %matplotlib inline, 并去除图例边框。
数据集介绍:
本数据集特征包括美国 49 个州(State),各州所在的地区(Region),统计年(Year),统计月(Month),平均光照(Avg Daily Sunlight),日均最大空气温度(Avg Daily Max Air Temperature ),日均最大热指数(Avg Daily Max Heat Index ),日均降雨量(Avg Daily Precipitation ),日均地表温度(Avg Day Land Surface Temperature)。
各特征的年度区间为:
导入数据并查看前 5 行。
筛选美国各大区域的主要气候指数,通过 sns.distplot 接口绘制指数的分布图。
从运行结果可知:
光照能量密度(Sunlight),美国全境各地区分布趋势大致相同,均存在较为明显的两个峰(强光照和弱光照)。这是因为非赤道国家受地球公转影响,四季光照强度会呈现出一定的周期变化规律;
从地理区位能看出,东北部光照低谷明显低于其他三个区域;
日均最高空气温度(Max Air Temperature),美国全境各地区表现出较大差异,东北部和中西部趋势大致相同,气温平缓期较长,且包含一个显著的尖峰;西部地区平缓期最长,全年最高温均相对稳定;南部分布则相对更为集中;
日均地表温度(Land Surface Temperature),与最高空气温度类似,不同之处在于其低温区分布更少;
最大热指数(Max Heat Index),西部与中西部分布较为一致,偏温和性温度,东北部热指数偏高,南部偏低;
降雨量(Precipitation),西部明显偏小,南部与东北部大致相同,中西部相对较多。
结合地理知识做一个总结:
东北部及大多数中西部地区,属于温带大陆性气候,四季分明,夏季闷热,降雨较多。
西部属于温带地中海气候,全年气候温和,并且干燥少雨,夏季气候温和,最高温度相对稳定。
南部沿海一带,终年气候温暖,夏季炎热,雨水充沛。
按月计算美国各地区降雨量均值及标准偏差,以均值 ± 一倍标准偏差绘制各地区降雨量误差线图。
从运行结果可知:
在大多数夏季月份,西部地区降雨量远小于其他地区;
西部地区冬季月降雨量高于夏季月;
中西部地区是较为典型的温带大陆性气候,秋冬降雨逐渐减少,春夏降雨逐渐升高;
南部地区偏向海洋性气候,全年降雨量相对平均。
需要安装joypy包。
日均最高气温变化趋势
通过 joypy 包的 joyplot 接口,可以绘制带堆积效应的直方分布曲线,将 1980 年 - 2008 年的日均最高温度按每隔 4 年的方式绘制其分布图,并标注 25%、75% 分位数。
从运行结果可知:
1980 - 2008 年区间,美国全境日均最高温度分布的低温区正逐渐升高,同时高温区正逐渐降低,分布更趋向于集中;
1980 - 2008 年区间,美国全境日均最高温度的 25% 分位数和 75% 分位数有少量偏离但并不明显。
日均降雨量变化趋势
同样的方式对降雨量数据进行处理并查看输出结果。
筛选出加州和纽约州的日均降雨量数据,通过 plt.hist 接口绘制降雨量各月的分布图。
从运行结果可知:
加州地区降雨量多集中在 0 - 1 mm 区间,很少出现大雨,相比而言,纽约州则显得雨量充沛,日均降雨量分布在 2 - 4 mm 区间。
直方图在堆积效应下会被覆盖大多数细节,同时表达聚合、离散效应的箱线图在此类问题上或许是更好的选择。
通过 sns.boxplot 接口绘制加州和纽约州全年各月降雨量分布箱线图.
从箱线图上,我们可以清晰地对比每个月两个州的降雨量分布,既可以看到集中程度,例如七月的加州降雨量集中在 0.1 - 0.5 mm 的窄区间,说明此时很少会有大雨;又可以看到离散情况,例如一月的加州,箱线图箱子(box)部分分布较宽,且上方 10 mm 左右存在一个离散点,说明此时的加州可能偶尔地会出现大到暴雨。
视觉上更为美观且简约的是摆动的误差线图,实验 「美国全境降雨量月度分布」 将所有类别标签的 x 位置均放于同一处,导致误差线高度重合。可通过调节 x 坐标位置将需要对比的序列紧凑排布。
从输出结果可以看出,加州冬季的降雨量不确定更强,每年的的十一月至次年的三月,存在降雨量大,且降雨量存在忽多忽少的现象(误差线长)。
上面的实验均在研究单变量的分布,但经常性地,我们希望知道任意两个变量的联合分布有怎样的特征。
核密度估计 , 是研究此类问题的主要方式之一, sns.kdeplot 接口通过高斯核函数计算两变量的核密度函数并以等高线的形式绘制核密度。
从运行结果可知:
加州在高温区和低降雨期存在一个较为明显的高密度分布区(高温少雨的夏季);
纽约州在高温及低温区均存在一个高密度的分布区,且在不同温区降雨量分布都较为均匀。
将美国全境的降雨量与空气温度通过 plt.hist2d 接口可视化。
从运行结果可知:
美国全境最高密度的日均高温温度区域和降雨量区间分别为,78 F (约等于 25 C)和 2.2 mm 左右,属于相对舒适的生活气候区间。
美国全境降雨量与空气温度的关系-核密度估计
在上面实验基础上,在 x, y 轴上分别通过 sns.rugplot 接口绘制核密度估计的一维分布图,可在一张绘图平面上同时获取联合分布和单变量分布的特征。
美国全境降雨量与空气温度的关系-散点分布和直方分布
sns.jointplot 接口通过栅格的形式,将单变量分布用子图的形式进行分别绘制,同时通过散点图进行双变量关系的展示,也是一种较好的展现数据分布的方式。
上面两个实验研究了双变量分布的可视化,以下研究 3 变量聚合结果的可视化。
通过 sns.heatmap 接口可实现对透视数据的可视化,其原理是对透视结果的值赋予不同的颜色块,以可视化其值的大小,并通过颜色条工具量化其值大小。
上面的两个实验可视化了各州随年份日均最高温度的中位数变化趋势,从图中并未看出有较为显著地变化。
以下通过 t 检验的方式查看统计量是否有显著性差异。stats.ttest_ind 接口可以输出 1980 年 与 2010 年主要气候指数的显著性检验统计量及 p 值。
从运行结果可以看出:
检验结果拒绝了降雨量相等的原假设,即 1980 年 与 2010 年两年间,美国降雨量是不同的,同时没有拒绝日均日照、日均最大气温两个变量相等的原假设,说明气温未发生显著性变化。
相关问答
Q1: python的seaborn.kdeplot有什么用
kde(kernel density estimation)是核密度估计。核的作用是根据离散采样,估计连续密度分布。
如果原始采样是《阴阳师》里的式神,那么kernel(核函数)就相当于御魂。
假设现在有一系列离散变量X = [4, 5, 5, 6, 12, 14, 15, 15, 16, 17],可见5和15的概率密度应该要高一些,但具体有多高呢?有没有三四层楼那么高,有没有华莱士高?如果要估计的是没有出现过的3呢?这就要自己判断了。
核函数就是给空间的每个离散点都套上一个连续分布。最简单的核函数是Parzen窗,类似一个方波:
这时候单个离散点就可以变成区间,空间或者高维空间下的超立方,实质上是进行了升维。
设h=4,则3的概率密度为:
(只有4对应的核函数为1,其他皆为0)
kernel是非负实值对称可积函数,表示为K,且一本满足:
这样才能保证cdf仍为1。
实际上应用最多的是高斯核函数(Gaussian Kernel),也就是标准正态分布。所谓核密度估计就是把所有离散点的核函数加起来,得到整体的概率密度分布。核密度估计在很多机器学习算法中都有应用,比如K近邻、K平均等。
在支持向量机里,也有“核”的概念,同样也是给数据升维,最常用的还是高斯核函数,也叫径向基函数(Radial Basis Funtion)。
seaborn.kdeplot内置了多种kerne,总有一款适合你。
Q2: python三个重要的内置函数(map, filter,reduce)-
map函数第一个参数是一个函数function,第二个参数是一个可迭代的对象iterable,他的功能是将可迭代对象iterable里面的每一项都应用到函数function中,然后返回一个迭代器。
可迭代器里面有多少个元素则结果就包含多少个元素
filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。
该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。
reduce() 函数会对参数序列中元素进行累积。
函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。
Q3: 在python中快速浏览数据集应该调用那个函数
python sns绘制回归线_python快速浏览整体数据集分布
快速浏览数据集,观察数据分布。便于合理的解释统计分析的结果。还可能为做亚组分析提供思路。
快速浏览数据集可以使用pairplot()。默认情况下,此函数使用散点图和直方图,还可以在非对角线上绘制回归图,在对角线上绘制核密度估计图。
609ae4893729a124ffa1e2ccbc37bd8e.png
这是在rrt分组下不同数据相互关系的分布情况,图太大,不能完全展示。
9530c1d5caee8fddf75c2d9cae1a3561.png
这是整体数据的核密度分布,只是展示了部分结果。
其他几种方法来可视化数据的单变量或双变量分布。
sns.displot(data, x="age", hue="rrt", multiple="stack")
6208af93adc00e6493a2cee77e62c794.png
堆砌条形图
05275683333dba405248c28d89c4581d.png
密度图
035bcf1f555699e20fd5a9bacbb69134.png
分布概率图
每种方法都有相对的优势和劣势,数据量较大时,可以从不同角度直观观察数据的分布情况,可能会发现异常值。并能够对统计分析的结果可以更合理的解释,或者为做亚组分析提供思
Q4: python 8个常用内置函数解说
8个超好用内置函数set(),eval(),sorted(),reversed(),map(),reduce(),filter(),enumerate()
python中有许多内置函数,不像print那么广为人知,但它们却异常的强大,用好了可以大大提高代码效率。
这次来梳理下8个好用的python内置函数
1、set()
当需要对一个列表进行去重操作的时候,set()函数就派上用场了。
用于创建一个集合,集合里的元素是无序且不重复的。集合对象创建后,还能使用并集、交集、差集功能。
2、eval()之前有人问如何用python写一个四则运算器,输入字符串公式,直接产生结果。用eval()来做就很简单:eval(str_expression)作用是将字符串转换成表达式,并且执行。
3、sorted()在处理数据过程中,我们经常会用到排序操作,比如将列表、字典、元组里面的元素正/倒排序。这时候就需要用到sorted() ,它可以对任何可迭代对象进行排序,并返回列表。对列表升序操作:
对元组倒序操作:
使用参数:key,根据自定义规则,按字符串长度来排序:
根据自定义规则,对元组构成的列表进行排序:
4、reversed()如果需要对序列的元素进行反转操作,reversed()函数能帮到你。reversed()接受一个序列,将序列里的元素反转,并最终返回迭代器。
5、map()做文本处理的时候,假如要对序列里的每个单词进行大写转化操作。这个时候就可以使用map()函数。
map()会根据提供的函数,对指定的序列做映射,最终返回迭代器。也就是说map()函数会把序列里的每一个元素用指定的方法加工一遍,最终返回给你加工好的序列。举个例子,对列表里的每个数字作平方处理:
6、reduce()前面说到对列表里的每个数字作平方处理,用map()函数。那我想将列表里的每个元素相乘,该怎么做呢?这时候用到reduce()函数。
reduce()会对参数序列中元素进行累积。第一、第二个元素先进行函数操作,生成的结果再和第三个元素进行函数操作,以此类推,最终生成所有元素累积运算的结果。再举个例子,将字母连接成字符串。
你可能已经注意到,reduce()函数在python3里已经不再是内置函数,而是迁移到了functools模块中。这里把reduce()函数拎出来讲,是因为它太重要了。
7、filter()一些数字组成的列表,要把其中偶数去掉,该怎么做呢?
filter()函数轻松完成了任务,它用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象。filter()函数和map()、reduce()函数类似,都是将序列里的每个元素映射到函数,最终返回结果。我们再试试,如何从许多单词里挑出包含字母w的单词。
8、enumerate()这样一个场景,同时打印出序列里每一个元素和它对应的顺序号,我们用enumerate()函数做做看。
enumerate翻译过来是枚举、列举的意思,所以说enumerate()函数用于对序列里的元素进行顺序标注,返回(元素、索引)组成的迭代器。再举个例子说明,对字符串进行标注,返回每个字母和其索引。
python核密度函数的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于核密度估计matlab程序、python核密度函数的信息别忘了在本站进行查找喔。





