2.5节对数据属性间的处理做了一个大致的介绍,本节将使用这些方法来解决一个实际问题。
随着中原经济区的发展和城镇化水平的提高,城市用水日趋紧张,为合理调度和利用水资源,需要找到降水量的变化及分布规律。现有一个河南省的降水量数据集,名为rain.csv,记录了从2000年到2011年之间的每月降水量数据,本节将对其降水量进行统计计算,找出降水量变化规律并进行分析。
一般情况下,降雨量会随着春夏秋冬的交替呈现一个不同的状态,横向是一个过程。对于不同的年份来说,每月的降雨量应该在一个范围内浮动,而不应偏离均值太大。不同年份的相同月份统计见程序2-13。
from pylab import * import pandas as pd import matplotlib.pyplot as plot filePath = ("c://rain.csv") dataFile = pd.read_csv(filePath) summary = dataFile.describe() print(summary) array = dataFile.iloc[:,1:13].values boxplot(array) plot.xlabel("month") plot.ylabel(("rain")) show()
打印结果如下:
0 1 2 3 4 count 12.000000 12.000000 12.000000 12.000000 12.000000 mean 2005.500000 121.083333 67.833333 102.916667 263.416667 std 3.605551 103.021144 72.148626 137.993714 246.690258 min 2000.000000 0.000000 0.000000 0.000000 70.000000 25% 2002.750000 17.750000 9.750000 3.000000 136.250000 50% 2005.500000 125.000000 39.500000 51.500000 155.000000 75% 2008.250000 204.500000 123.250000 150.000000 232.500000 max 2011.000000 295.000000 192.000000 437.000000 833.000000 5 6 7 8 9 count 12.000000 12.000000 12.000000 12.000000 12.000000 mean 1134.583333 2365.666667 2529.000000 1875.500000 1992.416667 std 618.225240 705.323180 1120.231226 603.135821 670.834414 min 218.000000 766.000000 865.000000 746.000000 621.000000 25% 685.500000 2117.000000 1770.250000 1723.500000 1630.000000 50% 951.500000 2440.500000 2023.500000 1943.500000 1961.000000 75% 1599.000000 2723.750000 3603.000000 2321.750000 2231.750000 max 2134.000000 3375.000000 4163.000000 2508.000000 3097.000000 10 11 12 count 12.000000 12.000000 12.000000 mean 1219.250000 159.333333 38.333333 std 743.534938 124.611639 34.494620 min 328.000000 0.000000 0.000000 25% 612.250000 64.000000 18.750000 50% 1208.500000 123.000000 25.500000 75% 1672.250000 278.250000 46.250000 max 2561.000000 357.000000 100.000000
从打印结果可以看到,程序对每个月份的降雨量进行了计算,获得了其偏移值、均值以及均方差的大小。
通过四分位数的计算,可以获得一个波动范围,具体结果如图2.15所示。
从图2.15中可以直观地看到,不同月份之间,降雨量有很大的差距,1~4月降雨量较少,5月份开始降雨量明显增多,而在7月份达到顶峰后开始回落,12月又达到了一个最低的降雨量。
同时可以看到,有几个月份的降雨量有明显的偏移,即出现离群值,这一点可能跟年度情况有关,需要继续进行分析。
图2.15
正常情况下,每年降雨量都呈现一个平稳的增长或者减少的过程,其下降的坡度即趋势线应该是一样的。程序2-14展示了这种趋势。
from pylab import * import pandas as pd import matplotlib.pyplot as plot filePath = ("c://rain.csv") dataFile = pd.read_csv(filePath) summary = dataFile.describe() minRings = -1 maxRings = 99 nrows = 11 for i in range(nrows): dataRow = dataFile.iloc[i,1:13] labelColor = (dataFile.iloc[i,12] - minRings) / (maxRings - minRings) dataRow.plot(color=plot.cm.RdYlBu(labelColor), alpha=0.5) plot.xlabel("Attribute") plot.ylabel(("Score")) show()
最终打印结果如图2.16所示。
从图2.16中可以明显地看到,降雨的月份并不是一个规律的上涨或下跌状态,而是呈现一个不规则的浮动状态,增加最快的为6~7月,下降最快的为7~8月,之后有一个明显的回升过程。
图2.16
理论上来说每月的降雨量应该是相互独立的,即每月的降雨量和其他月份没有关系。但是实际是这样的吗?每月降雨量之间的相关性见程序2-15。
from pylab import * import pandas as pd import matplotlib.pyplot as plot filePath = ("c:// rain.csv") dataFile = pd.read_csv(filePath) summary = dataFile.describe() corMat = DataFrame(dataFile.iloc[1:20,1:20].corr()) plot.pcolor(corMat) plot.show()
通过计算,最终结果如图2.17所示。
图2.17
从图2.17中可以看到,颜色分布(图片请参看下载资源中的相关文件)比较平均,表示相关性不强,因此可以认为每月的降雨是独立行为,每个月的降雨量和其他月份没有关系。