Choose one of Udacity's curated datasets and investigate it using NumPy and Pandas. Go through the entire data analysis process, starting by posing a question and finishing by sharing your findings.
P2的课已经达到要求了,虽然code重新提交了两次才通过,完整的报告已经放在了自己的github上,点这里, 不过这一个学到了太多新的东西,还是需要好好消化一下,完善一下笔记。
目录(简书竟然不支持目录!)
ANACONDA 和 JUPYTER NOTEBOOKS
数据分析过程
用Numpy和Pandas分析一维数据
用Numpy和Pandas分析二维数据
ANACONDA AND JUPYTER NOTEBOOKS
这两个对我来说是用于数据分析的新工具,但是感觉非常的好的用,有几个我认为比较重要的指令:
conda upgrade --all
conda install jupyter notebook #安装jupyter notebook
conda create -n py2 python=2 #用于创造一个新的python2的环境,py2可替换成任意环境名字
jupyter notebook #启动notebook
一开始我创建新指令之后,在notebook中并没有能够找到我新环境的选项,如图所示:
后来我才发现,在创建了心的conda环境之后,其实要再安装一遍jupyter notebook,不然不会在界面中显示出来。
在Jupyter notebook中书写格式主要是代码和markdown。其实之前接触过一点markdown,所以不算陌生,基本写法可以参考这里,再有,对数据分析比较重要的是数学公式的书写,可以参考这里。
数据分析过程
读取CSV
with open(filename, 'rb') as f:
reader = unicodecsv.DictReader(f)
result = list(reader)
(之后pandas提供了更简单的函数,这个基本现在用不上了)
注意在数据处理过程中,用int(), float()对数据根据要求进行相应的转换。
虽然说只要过一遍计算机导论,python就够用了,其实还是有些新的内容,又学了几个写法:
#在dictionary中遍历的方法,a,b in [dictionary].item(), a是key, b是值,比如:
for key, data_points in grouped_data.items()
#values()--This method returns a list of all the values available in a given dictionary.
total_minutes = total_minutes_by_account.values()
#set()的使用,利用set(),可以建立一个没有重复项的合集,比如:
pass_subway_project = set()
关于set()更多的用法可以参考这里
pyplot的使用
%pylab inline #可以让图标在notebook中直接打开
import matplotlib.pyplot as plt
import numpy as np #缩写
# Summarize the given data
def describe_data(data,bin = None):
print 'Mean:', np.mean(data)
print 'Standard deviation:', np.std(data)
print 'Minimum:', np.min(data)
print 'Maximum:', np.max(data)
if bin == None:
plt.hist(data)
else:
plt.hist(data, bins = bin)
这里的describe_data
我引入了两个parameters
,data
和bin =None
,这是从cs101地方学来的,如果用的时候不考虑bin,我在用函数时候,只要填写data这个参量就可以,如果要设定bin,填写数字参量。然后在function内添加一个if判断就可以实现了。
用Numpy和Pandas分析一维数据
Numpy作为python的数据库,可以进行多项运算
具体的代码笔记已经放在github上。
在code review中,reviewer给我推荐了用 kernel density estimates,来理清性别和生存率的关系,他给我了这么一张图,我觉得挺高大上的,于是我就研究了一个下午:
kde(kernel density estimation)是核密度估计。核的作用是根据离散采样,估计连续密度分布。
参考了知乎的一篇文章,写的很生动(python的seaborn.kdeplot有什么用?)(https://www.zhihu.com/question/43415333)虽然大部分我还是没看懂
seaborn中有个seaborn.kdeplot就是用来算这个的,我的目标是先把1D data的搞清楚:
import seaborn as sns
female_df_age = titanic_df[titanic_df['Sex'] == 'female']['Age'].dropna()
#注意这种df[df[] ==""]按照条件提取相对应数组的手法
male_df_age = titanic_df[titanic_df['Sex'] == 'male']['Age'].dropna()
sns.kdeplot(female_df_age, shade=True, shade_lowest=False,label='Female')
sns.kdeplot(male_df_age, shade=True, shade_lowest=False,label='Male')
最后画出来了这是样的,我就可以根据随意一个年龄去推算他的在船上出现的概率,然后与生存率相结合着来看(其实说实话我觉得他的那个图好看是好看,可还是有点看不懂)
用Numpy和Pandas分析二维数据
具体的代码笔记已经放在github上,这一块有三个笔记,包括了最后的制图。
Pandas里dataframes的几个join方式
这个也是比较搞脑子的,参数不一样合并的结果不一样,重点注意how这个参量的变化,outer是全部合并,inner是合并除了有无效值的row, right保留右边的数据(虽然合并之后左边会是无效值)left就恰好相反,详细的还是要看完整的合并指南,每次忘记怎么合并了,再看看。
当两边的df数据key值不一样,要用left_on和right_on来对左右数据做一一的匹配才能保证正确合并。
Matlab的使用
这一块要再有空的时候继续加强,特别是作图的时候,熟悉几个用法还是很重要的。
Pyplot tutorial
pandas.DataFrame.plot
其实我有时候会搞混的,现在终于知道个大概:
*New in version 0.17.0:* Each plot kind has a corresponding method on the DataFrame.plot accessor:
df.plot(kind='line') is equivalent to df.plot.line()
.
这章节已经完结(2017年1月7日)