感谢 Dr.鱼 的耐心讲解和细致回答。
本次课的作业如下:
根据第一课所学的知识,对天气数据进行简单分析。
前言
虽然给出的数据表是 .csv 可以用Excel处理的,但是技术白还是想把它当做一个未知领域用Python一点点剥开它神秘的面纱。于是在之前几个月黑风高的杀人夜,技术白放弃了高床软枕和肥皂剧,一点点和 pandas 的方法过招。虽然最终还是以技术白的完败告终(有几个想法就是死活实现不了),还好最终还是勉强写出了这么一份极水的“作业”来。阅卷老师看了莫要恼了才好,技术白指天发誓,真的已经用了洪荒之力了。
另,虽然知晓本次开题是为了检验技术白对 pandas 方法的掌握程度,但是作为一个前咨询行业从业者,现互联网行业PM,且上升星座为处女座的耿(jiao)直(jin)Girl 来说,还是会从数据解读角度来对待这次作业的。时间赶的吃瓜群众可以绕开正文中大段的文字描述,只看代码行和输出结果即可,技术白已在其中注释出每一个函数的用途。给大家带来的阅读不便,技术小白这厢先请罪了。
好,闲言少叙 [小白知道已经贫了好多了(✿◡‿◡)],那就来吧,互相伤害吧~
阅卷老师请留步
前文所述,学生在和 pandas 过招中,有一些地方死活就是搞不出来,书也翻了,狗也放了,无奈资质平庸,未得要领,所以还是要麻烦老师代为解答。为了阅读的连贯性,学生会将所遇疑问在讲述过程中以 [疑问] 方式进行提出,在全文后也会将所有疑问进行归纳总结,若是老师甚忙,可以直接跳看文末,学生这厢有礼了~~
运行环境
Windows 7
Anaconda 1.6.2(没有从 anaconda 打开 jupyter)
Jupyter 5.0.0(直接从 [ 开始-键入程序 ] 打开)
Python 2.7
终于可以正式开始了
1.导入 pandas、numpy 数据分析扩展包,调用 matplotlib 绘图
[备注] 也可导入matplotlib.pyplot扩展包实现绘图功能,但需在代码中调用 plt.show 方法
2.导入数据源,用 .info 查看下数据表基本信息,定义“Date”为主键
[思路] 先查看统计信息是为了了解下数据规模和包含的字段情况。
1)一共有365条数据,是2013年全年的天气数据。但是events有158个缺失值,这点等下要看看原因是什么。
2)数据表一共包含8个字段,分别是:
日期 (按照规律定义日期为主键最方便查看数据)
温度、湿度、能见度、风速 和 云量为 int 类型(整形数)
SeaLevelPressureIn(英语差且不懂气象学的同学表示不知道这是个什么鬼?海平面气压?)为float类型(浮点数)
事件 为 object 类型(对象)
[疑问] 试了半天没试出来如何脱离读取数据函数定义主键,所以只好 info 完再回去添加定义主键重新跑 %>_<%
3.查看三行数据
[思路]主要想看下数据是什么样的,尤其是类型为 object 的 event 。原来是风雨雪云晴 :-D
4.用 .describe 看下基础统计情况,更立体的了解下数据结构
[思路] 通过查看基础统计项,可以大致描绘出样本的数据结构,但是由于对气象本身并没有深入了解,所以在对数据解读时仅能从数字本身进行推测。
通过对几项指标的观察,这个城市全年气温在 9-80℉(-13 - 27℃)之间,湿度在 34-97% 之间,能见度在 1-10 (这个不晓得单位是什么,问度娘能见度应该是按英里/公里计算,但是看给出数值并不像是长度计量单位,故此处仅能解读数值)之间,风速在 1-21MPH(0-5级风) 之间,云量在 0-8 之间(问度娘得知云量取值范围为0-10),再参考中位数、均值和标准差,初步判断这个城市为温带季风气候,冬季寒冷,夏季高温多雨,待后续确认。
[疑问]能不能定义输出的浮点位数?有时并不用精确到6位那么多,这个默认值看着好晕 +_+
5.按月查看各统计量(均值、标准差、中位数、最大值、最小值)
[思路] 通过查看月度数据发现全年月度最高温差异较小,但最低温在1-5月、10-12月差异较大,导致标准差较大。通过观察均值,进一步佐证此结论。湿度也呈与温度类似的变化,夏天风小些,冬天风大些,云量倒是全年都差不太多。后面可以再出图看看是不是这样。
[疑问] 为什么最大值和最小值可以计算 object 类型数据?计算的依据是什么?如何在用 .resample('M') 计算时生成一列月份信息,而非仅主键显示汇总月的最后一天?
6.数字看起来好累,出个图看一看
[思路] 通过全量数据图看湿度比温度的季节性表现更强烈。
再看看那个 Sea Level Pressure In,这个海什么全年都显示的好平稳,日差值只有1-2位,年差值不到1位,看起来好稳定的样子。
还是比较关心温度和湿度,单切出它俩的趋势图看一下。如图所示,可以很明显的看出 5-9 月两组数据缠绵度那是相当的高,夏季高温高湿,这个城市有些海洋气候的意思。
再看看温度和湿度月均值的表现,看起来在1-2月的时候低温高湿,那真是相当的湿冷湿冷啊。(考虑到标准差巨大,均值只能做参考用,不具备结论佐证效力)
最后再看看我们的好天气(无风无雨也无厚云)吧。笨得要死的小白经过无数次试验和翻阅资料,愣是没找到如何计算空值,所以只好计算非缺失值,然后口算减法算好天儿(技术白已哭晕在洗手间)
看起来这个城市的天气蛮好啊,2月的时候只有5天不太好,最差也就4月,哪还有将近一半儿日子是好天儿呢。(生活在帝都,看到 "人家的城市" 的小白再次哭晕在洗手间)
[疑问] 应该如何计算列中的空值频次?
到此为止,小白对这个城市2013年的天气已经有了比较立体的认知了。虽然没有降水量来参考,但是综合考虑温度、湿度、风速和云量,基本可以判定这个城市应该是温带海洋气候。小白猜测这应该是北美的某个城市?不知道猜的对不对 (ˇˍˇ)~
Question:(老师老师,看这里看这里哦)
1. 如何脱离读取数据函数定义主键?
2. .describe() 如何定义输出的浮点位数?
3. 为什么在用 .max .min 计算最大值和最小值时可以计算 object 类型数据?计算的依据是什么?
4. 如何在用 .resample('M') 计算时生成一列月份信息,而非仅主键显示汇总月的最后一天?
5. 如何计算列中的空值频次?
尾声
作业终于写完了,啰哩吧嗦又说了这么一大堆,有用的没几句。通过本次的实践,技术白深深的感受到了自己 “开发思维” 的迟钝。即便看了帮助,也是要试验几次才能出来想要的效果。当然更深的感受便是 -- 代码不写不快,不要让自己停留在想上,还是多动动手的好~
小白记得以后会尽量言简意赅的写作业,节省彼此的时间,I'm sorry /(ㄒoㄒ)/~~
今天就到这里啦,撒花~
感谢您的时间。