概率论中的一个重要概念是,随机变量的独立性。
只有两个随机变量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%的概率下雨!!