- 第一节 数据载入及初步观察
- 1.1 载入数据
- 1.1.1 任务一:导入numpy和pandas
- 1.1.2 任务二:载入数据
- 扩展
- 1.1.3 任务三:每10行为一个数据模块,逐块读取
- 1.1.4 任务四:将表头改成中文,索引改为乘客ID [对于某些英文资料,我们可以通过翻译来更直观的熟悉我们的数据]
- 1.2 初步观察
- 1.2.1 任务一:查看数据的基本信息
- 1.2.2 任务二:观察表格前10行的数据和后15行的数据
- 1.2.4 任务三:判断数据是否为空,为空的地方返回True,其余地方返回False
- 1.3 保存数据
- 1.3.1 任务一:将你加载并做出改变的数据,在工作目录下保存为一个新文件train_chinese.csv
- 第二节 pandas基础
- 1.4 知道你的数据叫什么
- 1.4.1 任务一:pandas中有两个数据类型Dateframe和Series,通过查找简单了解他们。然后自己写一个关于这两个数据类型的小例子[开放题]
- Series
- Dataframe
- 1.4.2 任务二:根据上节课的方法载入"train.csv"文件
- 1.4.3 任务三:查看Dataframe数据的每列的名称
- 1.4.4任务四:查看"Cabin"这列的所有值 [有多种方法]
- 1.4.5 任务五:加载文件"test_1.csv",然后对比"train.csv",看看有哪些多出的列,然后将多出的列删除
- 1.4.6 任务六: 将['PassengerId','Name','Age','Ticket']这几个列元素隐藏,只观察其他几个列元素
- 1.5 筛选的逻辑
- 1.5.1 任务一: 我们以"Age"为筛选条件,显示年龄在10岁以下的乘客信息。
- 1.5.2 任务二: 以"Age"为条件,将年龄在10岁以上和50岁以下的乘客信息显示出来,并将这个数据命名为midage
- 1.5.3 任务三:将midage的数据中第100行的"Pclass"和"Sex"的数据显示出来
- 1.5.4 任务四:使用loc方法将midage的数据中第100,105,108行的"Pclass","Name"和"Sex"的数据显示出来
- 1.5.5 任务五:使用iloc方法将midage的数据中第100,105,108行的"Pclass","Name"和"Sex"的数据显示出来
- 第三节 探索性数据分析
- 1.6 了解你的数据吗?
- 1.6.1 任务一:利用Pandas对示例数据进行排序,要求升序
- 1.6.2 任务二:对泰坦尼克号数据(trian.csv)按票价和年龄两列进行综合排序(降序排列),从数据中你能发现什么
- 1.6.3 任务三:利用Pandas进行算术计算,计算两个Dataframe数据相加结果
- 1.6.4 任务四:通过泰坦尼克号数据如何计算出在船上最大的家族有多少人?
- 1.6.5 任务五:学会使用Pandas describe()函数查看数据基本统计信息
- 1.6.6 任务六:分别看看泰坦尼克号数据集中 票价、父母子女 这列数据的基本统计数据,你能发现什么?
- 【总结】
import numpy as np import pandas as pd1.1.2 任务二:载入数据
(1) 使用相对路径载入数据
#导入相对路径数据 df=pd.read_csv('train.csv')
(2) 使用绝对路径载入数据
#绝对路径导入数据 path=os.path.abspath('train.csv') df = pd.read_csv(path)扩展
(1)显示表格行列数
#行列数 df.shape
(2)转置表格
#转置 df.T
转置前
转置后
(3)read_table默认无分隔
#无分隔数据 pd.read_table(path)
read_csv默认用逗号分隔,table用逗号分隔需设置参数
#以逗号为分割符 pd.read_table(path,sep=',')1.1.3 任务三:每10行为一个数据模块,逐块读取
#逐块读取 df = pd.read_csv('train.csv',chunksize=10) df.get_chunk()
逐块读取是为了将长文件可以截断读取分析。
逐块读取的类型和非逐块读取类型比较:
逐块读取不可进行head显示。
PassengerId => 乘客ID
Survived => 是否幸存
Pclass => 乘客等级(1/2/3等舱位)
Name => 乘客姓名
Sex => 性别
Age => 年龄
SibSp => 堂兄弟/妹个数
Parch => 父母与小孩个数
Ticket => 船票信息
Fare => 票价
Cabin => 客舱
Embarked => 登船港口
第一种方法:
#将表头改为中文 df.columns = ['乘客ID','是否幸存','乘客等级(1/2/3等舱位)','乘客姓名','性别','年龄','堂兄弟/妹个数','父母与小孩个数','船票信息','票价','客舱','登船港口']
第二种方法:
#其他方法:多加一行 df = pd.read_csv('train.csv',names=['乘客ID','是否幸存','乘客等级(1/2/3等舱位)','乘客姓名','性别','年龄','堂兄弟/妹个数','父母与小孩个数','船票信息','票价','客舱','登船港口']) df
在读取文件时就改名,最后多加了一列,之前的列表名变为其中的行,一般不采取这种方式。(容易混淆数据)
举例:
#1.查看数据基本信息 df.info()
#2.查看基本信息 df.describe() #mean平均 std标准差1.2.2 任务二:观察表格前10行的数据和后15行的数据
head()和tail()默认显示5列。
#观察表格前10行的数据 df.head(10)
#观察表格后15行的数据 df.tail(15)1.2.4 任务三:判断数据是否为空,为空的地方返回True,其余地方返回False
#判断数据是否为空,为空的地方返回True,其余地方返回False df.isnull()1.3 保存数据 1.3.1 任务一:将你加载并做出改变的数据,在工作目录下保存为一个新文件train_chinese.csv
df.to_csv('train_chinese.csv')第二节 pandas基础 1.4 知道你的数据叫什么 1.4.1 任务一:pandas中有两个数据类型Dateframe和Series,通过查找简单了解他们。然后自己写一个关于这两个数据类型的小例子[开放题] Series
第一个例子:
#Series带索引一维数组类型,random获取随机数 s=pd.Series(np.random.randn(5),index=['a','b','c','d','e'])
第二个例子:
第三个例子:
#字典形式 s=pd.Series({'b':1,'a':0,'e':2}) sDataframe
第四个例子:
#Dataframe二维数组,可用Series生成 d = {'one' : pd.Series([1.,2.,3.],index=['a','b','c']),'two': pd.Series([4.,5.,6.,7.],index=['a','b','c','d'])}
df = pd.Dataframe(d) df1.4.2 任务二:根据上节课的方法载入"train.csv"文件
这里使用相对路径引入。
df=pd.read_csv('train.csv')1.4.3 任务三:查看Dataframe数据的每列的名称
df.columns1.4.4任务四:查看"Cabin"这列的所有值 [有多种方法]
1.4.4任务四:查看"Cabin"这列的所有值 [有多种方法]
第一种方法:
df.Cabin
第二种方法:
df['Cabin']
类型查看:
可变成Dataframe类型:
#变成Dataframe类型 df[['Cabin']]1.4.5 任务五:加载文件"test_1.csv",然后对比"train.csv",看看有哪些多出的列,然后将多出的列删除
加载文件"test_1.csv"
test_1 = pd.read_csv('test_1.csv') test_1.head()
可以发现a列多余,将多出的a列删除:
第一种方式:
#删除多余的列 del test_1['a'] test_1.head()
第二种方式:
test_1.pop('a') test_1.head()
第三种方式:
#生成删除列的数组的副本,文件本身未删除列 test_1.drop(['a'],axis=1)
第四种方式:
#不返回副本,直接保存进原文件 test_1.drop(['a'],axis=1,inplace = True) test_1.head()1.4.6 任务六: 将[‘PassengerId’,‘Name’,‘Age’,‘Ticket’]这几个列元素隐藏,只观察其他几个列元素
#列元素隐藏 test_1.drop(['PassengerId','Name','Age','Ticket'],axis=1)1.5 筛选的逻辑 1.5.1 任务一: 我们以"Age"为筛选条件,显示年龄在10岁以下的乘客信息。
#显示年龄在10岁以下的乘客信息 df[df["Age"]<10]1.5.2 任务二: 以"Age"为条件,将年龄在10岁以上和50岁以下的乘客信息显示出来,并将这个数据命名为midage
#将年龄在10岁以上和50岁以下的乘客信息显示出来,并将这个数据命名为midage midage = df[(df["Age"]>10)& (df["Age"]<50)] midage.head()
midage1 = df[(df["Age"]>10)|(df["Age"]<50)] midage1.head()
比较&与|筛选数据的区别:
#不加reset_index则会索引错误,寻找到原始数据索引100的,而不是midage中的第100行 midage.loc[[100],['Pclass','Sex','Name']]
midage1 = midage.reset_index(drop=True) midage1.head() midage1.loc[[100],['Pclass','Sex','Name']]
我们可以对比两种方式的索引,即可看出问题所在:
我们可以看出,不加reset_index则会索引错误,寻找到原始数据索引号,而而不是设置的midage中的索引号。、
#使用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"的数据显示出来
#iloc用索引 #使用iloc方法将midage的数据中第100,105,108行的"Pclass","Name"和"Sex"的数据显示出来 midage1.iloc[[100,105,108],[2,3,4]]
通过对比可知,使用iloc方法时,参数是其列的索引号。
先导入所需包和数据:
1.6 了解你的数据吗? 1.6.1 任务一:利用Pandas对示例数据进行排序,要求升序#升序排序 sample= pd.Dataframe(np.random.randn(3, 3), index=list('213'), columns=list('bca'))
#让某一列从小到大排序 sample.sort_values('b')
# 让行索引升序排序 sample.sort_index()
# 让列索引升序排序 sample.sort_index(axis=1)
# 让列索引降序排序 sample.sort_index(axis=1, ascending=False)
# 让任选两列数据同时降序排序,无法同时时,则优先选by中第一个列优先排序 sample.sort_values(by=['c', 'a'], ascending=False)1.6.2 任务二:对泰坦尼克号数据(trian.csv)按票价和年龄两列进行综合排序(降序排列),从数据中你能发现什么
#对泰坦尼克号数据(trian.csv)按票价和年龄两列进行综合排序(降序排列) text.sort_values(by=['票价','年龄'], ascending=False)
发现: 优先根据票价排序,然后再根据年龄在票价基础上排序。并且票价越高死亡率越低,其中在票价最高的人里面没有一人死亡。
#利用Pandas进行算术计算,计算两个Dataframe数据相加结果 x= pd.Dataframe(np.random.randn(3, 3), index=list('213'), columns=list('bca')) x
y= pd.Dataframe(np.random.randn(3, 3), index=list('413'), columns=list('bcd')) y
#行和列都相同才有计算结果 x+y1.6.4 任务四:通过泰坦尼克号数据如何计算出在船上最大的家族有多少人?
#通过泰坦尼克号数据如何计算出在船上最大的家族有多少人 max(text['堂兄弟/妹个数'] + text['父母与小孩个数'])1.6.5 任务五:学会使用Pandas describe()函数查看数据基本统计信息
#使用Pandas describe()函数查看数据基本统计信息,第一节运行过 text.describe()
数据显示并不是很直观,我们可以引入直方图来看:
#画直方图 from matplotlib import pyplot as plt
#注意是否有空值,有空值会报错,例如年龄 plt.hist(text['是否幸存'])
利用直方图,我们可以从图中清楚的看到幸存者人数和死亡人数分别有多少。
首先来分析一下票价:
text['票价'].describe()
可得票价平均32元,但最高票价达到512元。我们依旧可以利用图表来进行观察。
plt.hist(text['票价'])
我们可以发现票价分布具有长尾。
下面分析父母与小孩个数:
text['父母与小孩个数'].describe()
我们同样可以看出他的分布具有长尾,平均个数0.38.但最大个数为6个。下面是直方图的直观表达:
plt.hist(text['父母与小孩个数'])
我们可以明显看出独自出游的人占大多数。
本章中我们通过对基础函数的 *** 作对数据进行了初步统计查看,并逐渐构建了如何进行数据分析的思维。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)