1.数据载入及初步观察
1.1导入numpy和pandas
import pandas as pd
import numpy as np
1.2载入数据
(1) 使用相对路径载入数据
(2) 使用绝对路径载入数据
df = pd.read_csv('train.csv')
df.head()
#相对路径要让文件处于jupyter的文件目录下
df = pd.read_csv('/Users\Administrator\Desktop\组对学习\hands-on-data-analysis-master\第一单元项目集合/train.csv')
df.head()
#绝对路径只用知道文件位置就好
df=pd.read_table('train.csv',sep=',')
df.head()#这样可让pd.read_csv()和pd.read_table()读取分隔符不一样,sep可让相同显示。
1.3每1000行为一个数据模块,逐块读取
chunker = pd.read_csv('train.csv',chunksize=1000)
for i in chunker:
print(i)
1.4将表头改成中文,索引改为乘客ID [对于某些英文资料,我们可以通过翻译来更直观的熟悉我们的数据]
df = pd.read_csv('train.csv',names=['乘客ID','是否幸存','乘客等级(1/2/3等舱位)','乘客姓名','性别','年龄','堂兄弟/妹个数','父母与小孩个数','船票信息','票价','客舱','登船港口'],index_col = '乘客ID',header = 0)
df.head()
df = pd.read_csv('train.csv',names=['乘客ID','是否幸存','乘客等级(1/2/3等舱位)','乘客姓名','性别','年龄','堂兄弟/妹个数','父母与小孩个数','船票信息','票价','客舱','登船港口'],index_col = '乘客ID',skiprows=[0] )
df.head()
1.5查看数据的基本信息
df.info()
df.head(10)#前10行
df.tail(15)#后15行
pd.isnull(df).head()#查看缺失值
1.6保存数据
df.to_csv('train_chinese.csv')
2.Pandas基础
2.1pandas中有两个数据类型DateFrame和Series,通过查找简单了解他们。然后自己写一个关于这两个数据类型的小例子
import numpy as np
import pandas as pd
data1 = {'a': 50,'b': 60,'c':70,'d':80}
ep1=pd.Series(data1)
ep1
data2 = {'a':['1','2','3','4'],'b':['5','6','7','8'],'c':['9','10','11','12']}
ep2=pd.DataFrame(data2)
ep2
2.2根据上节课的方法载入"train.csv"文件,查看DataFrame数据的每列的名称
df = pd.read_csv('train.csv')
df.head()
df.columns
2.3查看"Cabin"这列的所有值[有多种方法]
df['Cabin']
df.Cabin
2.4加载文件"test_1.csv",然后对比"train.csv",看看有哪些多出的列,然后将多出的列删除
df1 = pd.read_csv('test_1.csv')
df1.head()
del df1['a']
df1.head()
df1 = pd.read_csv('test_1.csv')
df1.drop('a',axis=1,inplace=True)
df1.head()
2.5将['PassengerId','Name','Age','Ticket']这几个列元素隐藏,只观察其他几个列元素
df.drop(['PassengerId','Name','Age','Ticket'],axis=1)
df.head()
#del 改变原数据
#df1.drop('a',axis=1),不改变原数据,可以重新赋值
#df1.drop('a',axis=1,inplace=True)改变原数据
2.6我们以"Age"为筛选条件,显示年龄在10岁以下的乘客信息
df= df[df['Age']<10]
df.head()
2.7 以"Age"为条件,将年龄在10岁以上和50岁以下的乘客信息显示出来,并将这个数据命名为midage
midage = df[(df['Age']>10)&(df['Age']<50)]
midage.head(3)# | (或) &(且) ,等于必须是==
midage = midage.reset_index(drop=True)
midage.head(3)#reset_index()函数的作用是重置索引,没有索引不了,会出错
2.8将midage的数据中第100行的"Pclass"和"Sex"的数据显示出来;使用loc方法将midage的数据中第100,105,108行的"Pclass","Name"和"Sex"的数据显示出来;使用iloc方法将midage的数据中第100,105,108行的"Pclass","Name"和"Sex"的数据显示出来
midage.loc[[100],['Pclass','Sex']]
midage.loc[[100,105,108],['Pclass','Name','Sex']]
midage.iloc[[100,105,108],[2,3,4]]
#loc通过数据标签来选择,iloc通过整数标签来选择,即0,1,2。
3.数据探索性分析
import numpy as np
import pandas as pd
#载入之前保存的train_chinese.csv数据
df = pd.read_csv('train_chinese.csv')
df.head()
3.1利用Pandas对数据进行排序,要求升序
df1 = pd.DataFrame(np.arange(10).reshape((2,5)),index=[2,1],columns=['a','c','b','d','f'])
df1
df1.sort_values(by='a')#数据默认升序排列
3.2让行索引升序排序;让列索引升序排序;让列索引降序排序;让任选两列数据同时降序排序
df1.sort_index()
df1.sort_index(axis=1)
df1.sort_index(axis=1,ascending=False)
df1.sort_values(by=['f','a'],ascending=False)
3.3对泰坦尼克号数据(trian.csv)按票价和年龄两列进行综合排序(降序排列),从这个数据中你可以分析出什么?
df= df.sort_values(by=['票价','年龄'],ascending=False)
df.head(20)
df= df.sort_values(by=['乘客等级(1/2/3等舱位)','年龄'],ascending=False)
df.head(30)
df= df.sort_values(by=['乘客等级(1/2/3等舱位)','年龄'])
df.head(30)
#根据仓位等级和年龄降序排序,仓位等级3,30个数据中,存活数只有3人,仓位等级1,存活24人,很大程度和仓位等级有关。
3.4利用Pandas进行算术计算,计算两个DataFrame数据相加结果
framel_a = pd.DataFrame(np.arange(12.).reshape(3,4),columns=['a','b','c','d'],index=['one', 'two', 'three'])
framel_b = pd.DataFrame(np.arange(16.).reshape(4,4),columns=['a','e','c','d'],index=['one', 'two', 'three','four'])
framel_a
framel_b
framel_a+framel_b
3.5通过泰坦尼克号数据如何计算出在船上最大的家族有多少人?
max(df['堂兄弟/妹个数']+df['父母与小孩个数'])
df2=df['堂兄弟/妹个数']+df['父母与小孩个数']
df2.head(20)
df3=df['堂兄弟/妹个数']+df['父母与小孩个数']+df['是否幸存']
df3.head(20)
#根据上述相加,家里人是1的,11个中死2个,家里大于2的9个中死2个,家里人口基数大的存活低。
3.6学会使用Pandas describe()函数查看数据基本统计信息
frame2 = pd.DataFrame([[1,2],[3,np.nan],[np.nan,5]],index=['one','two','thtee'],columns=['a','b'])
frame2.describe()
#count : 样本数据大小
#mean : 样本数据的平均值
#std : 样本数据的标准差
#min : 样本数据的最小值
#25% : 样本数据25%的时候的值
#50% : 样本数据50%的时候的值
#75% : 样本数据75%的时候的值
#max : 样本数据的最大值
3.7分别看看泰坦尼克号数据集中 票价、父母子女 这列数据的基本统计数据,你能发现什么?
df['票价'].describe()
df['父母与小孩个数'].describe()
df['是否幸存'].describe()
#结合票价和存活数,前50%的幸存数是0,而且前面票价都很低,说明票价高低很大影响存活率。