Don’t let yesterday take up too much of today.
Hi,同学们,本周是P2阶段的最后一周了,我们用了两周时间学习了数据类型、控制流以及脚本编写等Python基础内容,还学习了Python做数据分析两个关键的第三方包——NumPy和Pandas,接下来用了一周的时间挑战项目二,相信大家经过了高强度的学习+实战化项目,对Python及Pandas一定有了更深刻更扎实的了解,那么,本周呢我们的针对P2的知识点进行总结回顾,对项目二进行修缮拓展,为下一阶段打好基础!
时间 | 学习重点 | 对应课程 |
---|---|---|
第1周 | Python基础内容 | 数据类型和运算符、控制流、函数、脚本编写 |
第2周 | Python数据处理内容 | Numpy & Pandas - 第一、二部分 |
第3周 | 完成项目 | 项目:探索美国共享单车数据 |
第4周 | 项目修改与通过 | 修改项目、查缺补漏、休息调整 |
对于非小白同学来说 ,本阶段内容不是很难,希望你们能在三周内完成并通过项目;
对于小白来说,本阶段可能是个挑战,请一定要保持自信,请一定要坚持学习和总结,如果遇到任何课程问题请参照如下顺序进行解决:
- 先自行查找问题答案(注意提取关键词),参考:谷歌/百度搜索、菜鸟教程、CSDN、stackoverflow、Python for Data Analysis, 2nd Edition 、Python Cookbook
- 若问题未解决,请将问题及其所在课程章节发送至微信群,并@助教即可
饭要一口一口吃,路要一步一步走,大家不要被任务吓到,跟着导学一步一步来,肯定没问题哒!那我们开始吧!
注:本着按需知情原则,所涉及的知识点都是在数据分析过程中必须的、常用的,而不是最全面的,想要更丰富,那就需要你们课下再进一步的学习和探索!
本周目标
- 顺利通过项目二,自行总结P2阶段的知识点。
学习计划
时间 | 学习资源 | 学习内容 |
---|---|---|
周二 | 微信群 - 每周导学 | 预览每周导学 |
周三、周四 | Udacity - Classroom | 项目二 |
周五 | 微信/Classin - 1V1 | 课程难点 |
周六 | Classin - 优达日 | 本周学习总结、答疑 |
周日 | 笔记本 | 总结沉淀 |
周一 | 自主学习 | 查漏补缺 |
阶段总结
在本阶段,我们学习了:
- Python的数据类型和运算符
- Python的循环、判断语句
- 如何自定义Python函数
- NumPy&Pandas的基本操作
除此之外,你还掌握了一些软件的操作:
- Python IDE的使用(Spyder/Atom)
- Jupyter Notebook的使用
- Python拓展包的安装部署
不知不觉间,你还锻炼了一些软技能:
- 编程思维(把复杂的问题分解;把新问题变成老问题;凝练解决问题的核心;算法最优解)
- 自主学习能力(效率更高,方法更优,持续时间更长)
- 独立解决问题的能力
- 更积极、更自信
经过这一个月的学习,大家收获颇丰。除了硬技能之外,更重要的是软技能的锻炼,不论你从事何种工作,甚至是在生活中,编程思维和自主学习能力都会让你尝到甜头,所以请继续加油吧!
知识要点
第二周必学知识点:
-
可以先自行回想一下,python的数据类型有哪些?运算符有哪些?在这一个月的练习和项目中,他们的用途都有哪些?自己在这一章节有没有薄弱点?
-
重点要熟练掌握:一个条件语句和两个循环语句的用法,两个循环语句的区别,break与continue的用法,再就是enumerate函数的用法。
-
函数的定义及变量的作用域是要熟练掌握的,lambda的话,了解就好。
第三周必学知识点:
Pandas数据结构
对于Pandas中两大最重要的数据类型:Series(一维)和DataFrame(二维),熟悉他们的结构和特点,这是你用python Pandas做数据分析的基础。
Pandas数据操作
本阶段主要是对Pandas中数据的基本操作进行了讲解,在P3阶段会有更多的操作技巧及练习等着大家!
Pandas自定义函数的调用
常用的是apply,但两者的区别要搞清楚
Pandas常用数据筛选函数
这个的话,本章涉及不多,可以等到P3学完一起总结,按照数据分析的流程,把各个阶段常用的函数做个用法列举,效果更好。
- 分类筛选groupby
项目优化
虽然收到了项目二的通关邮件,但是你对自己的代码或者项目的完成度满意吗?大家在Uda学习,也是为生活所迫,想求上进,那既然是求上进,就别上到90%就放松下来,做就做到100%,一定要对自己负责,所以大家通关后,我会拉大家到【代码互评】的微信群,大家分享代码、分享思路,交流心得,相互挑刺,想想就觉得很棒!所以说,大家讨论完之后,这个板块还会再进行更新~
废话不多说,那么,我先来抛砖引玉,给大家简单展示下我认为的一些可以尝试去改进的地方:
get_filters()函数
用户输入错误时提示再次输入;
1
2
3
4if ... in ...:
...
else:
print('提示:')兼容大小写,只要用户输入了正确数据,即可进行响应,比如说用户想要筛选城市chicago的数据,但是不小心输成了Chicago,也能进行正确响应。
1
city = city_input.lower()
利用循环和函数简化重复性代码
比如说,最开始我写的代码是:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31def get_filters():
print('Hello! Let\'s explore some US bikeshare data!')
#定义列表
city_list = ['chicago','new york city','washington']
month_list = ['all','january','february','march','april','may','june']
day_list = ['all','monday','tuesday','wednesday','thursday','friday','saturday','sunday']
while True:
city = input('Q1/3:which city do you want to analyst?(chicago,new york city or washington)\n')
if city in city_list:
break
else:
print('please ensure your input is one of the examples!')
while True:
month = input('Q2/3:which month do you want to analyst?(all,january, february, ... , june)\n')
if month in month_list:
break
else:
print('please ensure your input is one of the examples!')
while True:
day = input('Q3/3:which day do you want to analyst?(all, monday, tuesday, ... sunday)\n')
if day in day_list:
break
else:
print('please ensure your input is one of the examples!')
print('-'*40)
return (city, month, day)如上,对于city、month和day三个变量来说,代码是重复的,只是变量不同输出的话术不同而已,那么就可以将这三个变量和话术对应成某个函数的参数,然后通过调用这个函数,就可以简化重复的代码。
这个函数大概可以是这样:
1
2
3
4
5
6def phrase_input(input_prompt,err_prompt,option_list):
user_input = input(input_prompt)
while user_input not in option_list:
user_input = input(err_prompt)
return (user_input)改善后的代码如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32def phrase_input(input_prompt,err_prompt,option_list,get_value):
user_input = input(input_prompt)
while get_value(user_input) not in option_list:
user_input = input(err_prompt)
return (user_input.title())
def get_filters():
print('Hello! Let\'s explore some US bikeshare data!')
#定义列表
city_list = ['chicago','new york city','washington']
month_list = ['all','january','february','march','april','may','june']
day_list = ['all','monday','tuesday','wednesday','thursday','friday','saturday','sunday']
#定义话术
city_prompt = 'Q1/3:which city do you want to analyst?(Chicago,New York city or Washington)\n'
month_prompt = 'Q2/3:which month do you want to analyst?(All,January, February, ... , June)\n'
day_prompt = 'Q3/3:which day do you want to analyst?(All, Monday, Tuesday, ... Sunday)\n'
err_prompt = 'Please ensure your input is one of the examples above. Please input it again:\n'
#定义get_value函数,取输入的小写值
get_value = lambda x: x.lower()
#调用函数
city = phrase_input(city_prompt,err_prompt,city_list,get_value)
month = phrase_input(month_prompt,err_prompt,month_list,get_value)
day = phrase_input(day_prompt,err_prompt,day_list,get_value)
print('-'*40)
print('Your input is : \n')
print(city, month, day)
trip_duration_stats()函数
这个函数最大的问题就是,输出不够人性化,因为计算得来的时间计算值是xxx秒
,而我们平时生活中,对于大于60s的时间更偏向于说xxx分
,或者xxx小时
、xxx天
。所以这里,为了优化输出,需要我们定义一个时间转换函数
,把计算结果,更人性化地呈现。
最终代码如下:
1 | import math |
出现的一些不熟悉的代码/函数详解可以戳:
user_stats()函数
这个函数面临的问题是由于数据集导致的,因为在Washington的数据缺失了性别和出生年份列,所以本函数在调用Washington数据的时候会报错,那这里就需要try和except登场进行异常处理了。
这里的相关知识可以参考第二周导学。
其他待优化的问题
比如说,你还想对数据中的哪些问题感兴趣,可以自定函数进行展示;
或者,你的代码并不符合PEP8的标准,可以参考第二周导学,进行查证。
…
最后
经过如上的过程,大家也能了解到代码都不是一蹴而就的,而是随着你项目的深入不断进行修改调试的过程,这和你的学习一样,是一个不断试错,螺旋上升的过程。所以说,不要怕不会,更不要怕做错,不要丢了信心和耐心,把不会的掌握,把问题解决,这才是你应该做的,大家加油!!!