Mathematica数据处理(4)
今天的第二篇,当时觉得一天写一篇不是很多,现在觉得还是挺多的,都来不及看电影了.........
好吧,那这一篇就来看一个例子,把数据处理的流程我们走一遍
第一步:数据获取
我数据的获取就直接用了Mathematica自带的,只是做个演示(●'◡'●)
data = Table[{ CountryData[country, "Name"], CountryData[country, "LifeExpectancy"] }, {country, CountryData[][[All, 2]]} ]
这里获取了每个国家的人均寿命
{"Australia", Quantity[82.496, "Years"]}
得到类似这样的数据
第二步:转换格式
我们首先查看获得的数据的格式
Head /@ data[[1]]
得到
{String, Quantity}
为了方便起见,我们要把第二个数据,也就是年龄的数据转换成real
QuantityMagnitude[data[[All, 2]]]
这样就把格式转换好了,转换格式是为了让我们更好的处理
第三步:过滤
MatchQ[data, {{_String, _Real} ..}]
得到的结果是
False,说明有些数据缺失了
于是我们查看是哪些数据缺失了
Cases[data, Except[{_String, _Real}]]
得到
{"Christmas Island", Missing["NotAvailable"]}
可见是一些小的国家的数据没有统计进去
这里我们的做法就是把这些数据全部去掉
filterdata = Cases[data, {_String, _Real}]
第四步:挖掘
这里我们只算出这组数据中的最大值和最小值。
这里我们只算出这组数据中的最大值和最小值。
range = #[filterdata[[All, 2]]] & /@ {Min, Max}
得到
{45.561, 84.36}
第五步:表示
这一步我们要做的就是将数据用图形的形式展示出来,这是一个十分关键的环节
我们先表示一下缺失的国家,后面画图的时候会用上
invaildata = Complement[data, filterdata];然后开始画图
pics = Graphics[{EdgeForm[Gray], Table[ {FaceForm[ColorData[{"TemperatureMap", range}][c[[2]]]], CountryData[c[[1]], "Polygon"]}, {c, filterdata}], Table[{FaceForm[Black], CountryData[ic[[1]], "Polygon"]}, {ic, invaildata}] } , ImageSize -> Large]
上面的代码解释:将有数据的国家根据大小寿命不同标上不同的颜色,没有数据的国家用黑色表示
得到下面的图像
得到下面的图像
第六步:修饰
上面的图像没有图例,没有标题,这些我们都要在修饰里面加上
Column[{Style["全球人口寿命分布图", "Subsubsection"], pics, BarLegend[{"TemperatureMap", range}, LegendLayout -> "Row", LegendMarkerSize -> 500, LabelStyle -> {FontSize -> 20}] }, Center]
于是得到了下面的图
第七步:交互
关于交互,比如我们可以做出点击一个国家,可以显示更多的信息,这些我们都先放着,把前面的都掌握好了。
总结:
数据获得
格式转换:Head,QuantityMagnitude
过滤:Case
挖掘
表示
修饰:Column
交互
以上,所有
2016/8/10