所想:所有的内容都是新的,之前没有接触过Markdown等内容,因此不清楚如何编辑文档,不知道如何将编辑的文档上传到网站上,一步一步来,总会有收获的,每天打卡也算是给自己一个鞭策,有点压力,尽量完成,软件、语言、编辑熟练了就好了,一定会有收获的。
我下载了MarkdownPad2编辑文档,因为看CSDN网站介绍,似乎可以直接载入md文件到网站上形成博客,上传到GitHub的方式慢慢再尝试。我将学习大纲复制到MarkdownPad2文档里,然后写上自己的注释,这样既能熟悉Markdown的编辑格式和命令,也能在学习过程中记录自己的问题和思考。
这门课的主要目的:这门课程得主要目的是通过真实的数据,以实战的方式了解数据分析的流程和熟悉数据分析python的基本操作。知道了课程的目的之后,我们接下来我们要正式的开始数据分析的实战教学,完成kaggle上泰坦尼克的任务,实战数据分析全流程。
这里有两份资料:
教材《Python for Data Analysis》和 baidu.com &
google.com(善用搜索引擎)
所想:这门课注重实战分析,基于真实数据项目让学习者对程序、算法以及编辑软件进行训练,了解了kaggle这个网址,(注册过程中没法显示验证码,数据没法下载,幸好课程包里有数据)。提到了教材《Python for Data Analysis》,队长给了电子版,边学边看边练。搜索引擎也很重要,但是上google要用vpn,之前也没用过,感觉大家全都会,自己确实太落伍了。
1 第一章:数据载入及初步观察
1.1 载入数据
数据集下载 https://www.kaggle.com/c/titanic/overview
1.1.1 任务一:导入numpy和pandas
import numpy as np
import pandas as pd
【提示】如果加载失败,学会如何在你的python环境下安装numpy和pandas这两个库
所想:numpy和pandas是python数据分析必备的两个程序包,在调用之前,要进行载入。这两个程序包都有官方文档,pandas也有中文的文档,对于新手比较友好,在文档里面介绍了如何调用程序包中的各个命令以及可以实现何种功能,以下的一些命令都是基于这两个包进行的。感觉Python的包有点像MATLAB里的工具箱,只是调用命令时,需要先载入包,然后在命令前面加上包的名字进而实现功能。MATLAB则直接调用命令就可以了。
1.1.2 任务二:载入数据
(1) 使用相对路径载入数据
(2) 使用绝对路径载入数据
df=pd.read_csv(train.csv)
所想:以上是相对路径,相对路径就是把数据下载到当前目录下,然后直接用文件名载入。
import os
path=os.path.abspath('train.csv')
df=pd.read_csv(path)
所想:以上是绝对路径。这里,在载入绝对路径的时候,首先要载入另外一个包OS,这个包可以找到数据下载硬盘中的位置,如果把这个位置存起来,那么就可以根据这个路径载入数据。这两个程序实现的功能都是一样的,df就是我们数据,df表示dataframe,也就是数据框。
【提示】相对路径载入报错时,尝试使用os.getcwd()查看当前工作目录。
所想:os.getcwd()命令返回当前目录。需要说明的是,当前目录并不是指脚本所在的目录,而是所运行脚本的目录。同时,在python中可以使用os.listdir()函数获得指定目录中的内容。例如
os.listdir(path)
参数path为要活得内容目录的路径,不指定path则默认当前目录。也可以讲两个命令结合起来,如:
import os
print os.listdir(os.getcwd())
(好像无法实现?回头再看一下)
【思考】知道数据加载的方法后,试试pd.read_csv()和pd.read_table()的不同,如果想让他们效果一样,需要怎么做?了解一下'.tsv'和'.csv'的不同,如何加载这两个数据集?
所想:TSV 是Tab-separated values的缩写,即制表符分隔值。 相对来说CSV,Comma-separated values(逗号分隔值)更常见一些。将rread_table的分隔符改为,即pd.read_table(path,sep=',')则和read_csv的效果一样
【总结】加载的数据是所有工作的第一步,我们的工作会接触到不同的数据格式(eg:.csv;.tsv;.xlsx),但是加载的方法和思路都是一样的,在以后工作和做项目的过程中,遇到之前没有碰到的问题,要多多查资料吗,使用googel,了解业务逻辑,明白输入和输出是什么。
1.1.3 任务三:每1000行为一个数据模块,逐块读取
【思考】什么是逐块读取?为什么要逐块读取呢?
所想:使用pandas来处理文件的时候,经常会遇到大文件,而有时候我们只想要读取其中一部分或对文件进行逐块处理。通过nrows参数,来设置读取文件的前多少行
data = pd.read_csv("train.csv",nrows=5)
【提示】大家用chunker(数据块)是什么类型?用for循环打印出来出处具体的样子是什么?
所想:这里没怎么听懂,似乎用chunker会改变数据的类型,由原先的dataframe变成了textfilereader,这里还是要对两个数据读取之后的类型进行了解。后面再看书试验一下,视频用的df.get_chunk()读取,但是我没实现聊,再看一下,可能是因为读取数据的时候没有用chunksize参数。
1.1.4 任务四:将表头改为中文
df.columns = ['乘客ID','是否幸存','乘客等级(1/2/3等舱位)','乘客姓名','性别 ','年龄','堂兄弟/妹个','父母与小孩个数','船票信息','票价','客舱','登船港口']
df
【思考】所谓将表头改为中文其中一个思路是:将英文列名表头替换成中文。还有其他的方法吗?
所想:
df=pd.read_csv("train.csv",names=['乘客ID','是否幸存','乘客等级(1/2/3等舱位)','乘客姓名','性别 ','年龄','堂兄弟/妹个','父母与小孩个数','船票信息','票价','客舱','登船港口'])
df
但是这种方法是加入了一个新的中文表头,而不是替换。
1.2 初步观察
导入数据后,你可能要对数据的整体结构和样例进行概览,比如说,数据大小、有多少列,各列都是什么格式的,是否包含null等
1.2.1 任务一:查看数据的基本信息
1.2.2 任务二:观察表格前10行的数据和后15行的数据
1.2.4 任务三:判断数据是否为空,为空的地方返回True,其余地方返回False
df.info()
df.describe()
df.tail(15)
df.head(10)
1.3 保存数据
1.3.1 任务一:将你加载并做出改变的数据,在工作目录下保存为一个新文件train_chinese.csv
df.to_csv('train_chinese.csv')
1.4 知道你的数据叫什么
我们学习pandas的基础操作,那么上一节通过pandas加载之后的数据,其数据类型是什么呢?
所想:dateframe类型的数据。
1.4.1 任务一:pandas中有两个数据类型DataFrame和Series,通过查找简单了解他们。然后自己写一个关于这两个数据类型的小例子🌰[开放题]
所想:Series是一维标签数据结构,类似有标签的向量;DataFrame是二维标签数据结构,类似行和列都有标签的矩阵。
sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}
example_1 = pd.Series(sdata)
example_1
data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'Nevada'],
'year': [2000, 2001, 2002, 2001, 2002, 2003],'pop': [1.5, 1.7, 3.6, 2.4, 2.9, 3.2]}
example_2 = pd.DataFrame(data)
example_2
1.4.2 任务二:根据上节课的方法载入"train.csv"文件
df = pd.read_csv('train.csv')
1.4.3 任务三:查看DataFrame数据的每列的名称
df.columns
1.4.4任务四:查看"Cabin"这列的所有值[有多种方法]
df['Carbin']
df.Cabin
所想:输出的为series类型数据
1.4.5 任务五:加载文件"test_1.csv",然后对比"train.csv",看看有哪些多出的列,然后将多出的列删除
经过我们的观察发现一个测试集test_1.csv有一列是多余的,我们需要将这个多余的列删去
test_1 = pd.read_csv('test_1.csv')
test_1.head
删除
del test_1['a']
test_1.pop('a')
1.4.6 任务六: 将['PassengerId','Name','Age','Ticket']这几个列元素隐藏,只观察其他几个列元素
test_1.drop(['PassengerId','Name','Age','Ticket'],axis=1)
【思考】对比任务五和任务六,是不是使用了不一样的方法(函数),如果使用一样的函数如何完成上面的不同的要求呢?
【思考回答】
如果想要完全的删除你的数据结构,使用inplace=True,因为使用inplace就将原数据覆盖了,所以这里没有用。
1.5 筛选的逻辑
表格数据中,最重要的一个功能就是要具有可筛选的能力,选出我所需要的信息,丢弃无用的信息。
下面我们还是用实战来学习pandas这个功能。
1.5.1 任务一: 我们以"Age"为筛选条件,显示年龄在10岁以下的乘客信息。
test_1['Age'] < 10
返回的是每项的true或者false
test_1[test_1['Age'] < 10]
返回Age小于10的乘客的信息
1.5.2 任务二: 以"Age"为条件,将年龄在10岁以上和50岁以下的乘客信息显示出来,并将这个数据命名为midage
midage = test_1[(test_1['Age'] > 10) & (test_1['Age'] < 50)]
midage.shape
以上为交集运算&,并集用 |
midage1 = test_1[(test_1['Age'] > 10) | (test_1['Age'] < 50)]
midage1.shape
并集的数据更多一些。
1.5.3 任务三:将midage的数据中第100行的"Pclass"和"Sex"的数据显示出来
midage.loc[[100], ['Pclass,'Sex','Name']]
所想:然而这个返回是在原始文件test_1中,索引为100的条目,并不是在midage中第100行的条目,因此我们用reset_index()先重置索引,然后再找到midage的第100行
midage1 = midage.reset_index(drop=True)
midage1.loc[[100], ['Pclass','Sex','Name']]
1.5.4 任务四:使用loc方法将midage的数据中第100,105,108行的"Pclass","Name"和"Sex"的数据显示出来
midage1.loc[[100,105,108], ['Pclass','Name','Sex']]
1.5.5 任务五:使用iloc方法将midage的数据中第100,105,108行的"Pclass","Name"和"Sex"的数据显示出来
midage1.iloc[[100,105,108], [3,4,5]]
【思考】对比iloc和loc的异同
如果用iloc方法就不能用名字索引,应该用这些变量在数据里的位置,即第几列来进行查找。