天气中的概率 | 连续两天的天气独立吗?

概率论中的一个重要概念是,随机变量的独立性。

只有两个随机变量A、B相互独立时,才会有联合概率等于各随机变量概率之积

P(AB)=P(A)P(B)

对于天气来说,这显然是不成立的。根据我们的人生经验(life experience),如果第一天下雨的话,第二天仍然下雨的概率将大大增加。

但没有数据证明,这一切都是鬼话。于是,我采集了一个城市一年的天气状况(不过这并不是真实的天气,而是天气预报,假定现在一天的天气预报已经十分精确了吧),来证明这是正确的。

数据用csv格式来存储,前十行是这样的

date,highTemp,lowTemp,weather,windDir,windPow
2014-01-01,17,1,晴,北风~南风,微风
2014-01-02,17,6,晴~多云,南风,微风
2014-01-03,16,2,多云,北风,微风
2014-01-04,15,5,晴,北风,微风
2014-01-05,17,6,晴,北风,微风
2014-01-06,15,8,阴~小雨,北风,微风
2014-01-07,10,5,小雨,北风,3-4级
2014-01-08,8,4,阴~多云,北风,3-4级~微风
2014-01-09,9,4,多云~阴,北风,微风
2014-01-10,9,4,小雨,北风,微风

我使用Python的pandas包来分析数据。

首先读入数据

import pandas as pd
data = pd.read_csv(‘zhuzhou_weather.csv‘)
data.head(10)

同时我认为天气中只要包含“雨”字,就人文这一天下雨,不论是小雨、中雨还是阴转小雨

利用apply方法,很容易判断天气当中是否包含“雨”字

yu = data[‘weather‘].apply(lambda x:‘雨‘ in x)
yu_prob = sum(yu)/data.shape[0]
yu_prob

yu是一个二进制相量,如果某一天下了雨,则为True

得到一天下雨的概率P(Y)=0.3929,10天里有4天在下雨,你可能猜测这座城市在江南。

如果连续两天下雨的概率相互独立,那么连续两天下雨的概率应当为

yu_prob**2

P(Y1Y2)=P(Y1)P(Y2)=0.1543

现在到了耍点小花招的时候了,用前一天是否下雨乘以后一天是否下雨,就能得到是否连续两天下雨的随机变量,只有前一天下雨同时后一天下雨,结果才为真

yu2_prob = sum((yu.shift(1)*yu)[1:])/data.shape[0]

yu.shift(1)大致就是把序列向后移了一位,

计算出真实连续两天下雨的概率为P(Y1Y2)=0.2445,显然大于假定连续两天是否下雨相互独立的情况。看来人们的经验,有时还是挺正确的。

进一步计算出知道第一天下雨,第二天仍然下雨的条件概率

P(Y2|Y1)=P(Y2Y1)/P(Y1)=0.2445/0.3929=0.6224

如果第一天下雨,第二天有超过60%的概率下雨!!

时间: 2024-11-05 22:49:39

天气中的概率 | 连续两天的天气独立吗?的相关文章

首先java中集合类主要有两大分支

本文仅分析部分原理和集合类的特点,不分析源码,旨在对java的集合类有一个整体的认识,理解各个不同类的关联和区别,让大家在不同的环境下学会选择不同的类来处理. Java中的集合类包含的内容很多而且很重要,很多数据的存储和处理(排序,去重,筛选等)都需要通过集合类来完成. 首先java中集合类主要有两大分支: (1)Collection (2)Map 先看它们的类图: (1)Collection Collection (2)Map Map 可以看到它们之间的关系纷繁复杂,如果不系统的学习一下,还真

使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用 选择调用的进程为 24 i386 getuid sys_getuid1647 i386 getgid sys_getgid16 使用库函数API方式 使用C代码中嵌入汇编代码方式

Linux中生成密钥的两种方法

Linux中生成密钥的两种方法 SSH服务支持一种安全认证机制,即密钥认证.所谓的密钥认证,实际上是使用一对加密字符串,一个称为公钥(publickey), 任何人都可以看到其内容,用于加密:另一个称为密钥(privatekey),只有拥有者才能看到,用于解密.通过公钥加密过的密文使用密钥可以轻松解密,但根据公钥来猜测密钥却十分困难. ssh的密钥认证就是使用了这一特性.服务器和客户端都各自拥有自己的公钥和密钥.如何使用密钥认证登录linux服务器呢? 在使用密钥认证远程登入linux之前,我们

实验--使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用(杨光)

使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用 攥写人:杨光  学号:20135233 ( *原创作品转载请注明出处*) ( 学习课程:<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验要求: 选择一个系统调用(13号系统调用time除外),系统调用列表参见http://codelab.shiyanlou.com/xref/linux-3.18.6/arch/x86/syscalls/sys

hdu 1437 天气情况【概率DP】

天气情况 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 638    Accepted Submission(s): 257 Problem Description 如果我们把天气分为雨天,阴天和晴天3种,在给定各种天气之间转换的概率,例如雨天转换成雨天,阴天和晴天的概率分别为0.4,0.3,0.3.那么在雨天后的第二天出现雨天,阴天和

Android网络传输中必用的两个加密算法:MD5 和 RSA (附java完成测试代码)

MD5和RSA是网络传输中最常用的两个算法,了解这两个算法原理后就能大致知道加密是怎么一回事了.但这两种算法使用环境有差异,刚好互补. 一.MD5算法 首先MD5是不可逆的,只能加密而不能解密.比如明文是yanzi1225627,得到MD5加密后的字符串是:14F2AE15259E2C276A095E7394DA0CA9  但不能由后面一大串倒推出yanzi1225627.因此可以用来存储用户输入的密码在服务器上.现在下载文件校验文件是否中途被篡改也是用的它,原理参见:http://blog.c

WORD中如何让前两页不显示页码

WORD中如何让前两页不显示页码   上稿人:ojn 点击率: 15191   我们有时在用word编辑文档时,会遇上第一.二页无需显示页码,第三页才是正文的第一页时,该如何正确插入页码呢? 以word 2010为例,方法如下: 假如第1-2页无页码,第3页开始插入页码,起始页为1. 1.将光标定位在第2页末尾处,点击“页面布局——(页面设置)分隔符——(分节符)下一页” 2.双击第3页的页脚处,进入页眉和页脚的编辑状态,点击工具栏中的“链接到前一条页眉”按钮,使其使其退出高亮状态. 3.点击“

由“Java中一个字符占两个字节”引起

起因 Java中一个字符占两个字节,这和C/C++稍有区别.在C/C++中我们可以通过sizeof运算符方便地知道某个变量类型或对象的大小,那在Java中又如何? 问题出现 Java为什么没有提供sizeof运算符? 要回答这个问题,我们可以从另一个角度来看,那就是为什么C/C++中提供sizeof运算符.这就让人忍不住想到C/C++和Java在内存管理上的区别. 在C中,内存分配和释放的任务交给了程序员,当我们尝试用malloc为某个对象分配一块堆内存时,一个无法逃避的问题是,这个即将被创建的

Java中Arrays类的两个方法:deepEquals和equals

deepEquals和equals是Java中Arrays类的两个静态方法,可是它们之间有什么样的区别呢? 代码一. import java.util.Arrays; public class Test { public static void main(String[] args) { String[][] name1 = {{ "G","a","o" },{ "H","u","a",