动手学数据分析学习报告task1
1 第一章:数据载入及初步观察
1.1 载入数据
1.1.1 任务一:导入numpy和pandas
import numpy as np
import pandas as pd
import os
1.1.2 任务二:载入数据
(1) 使用相对路径载入数据
(2) 使用绝对路径载入数据
os.getcwd()
pd.read_csv('../data/train.csv') #相对路径
TrainSet=pd.read_csv('D:/Python_programme/HandOndataAnalysis/titanic/data/train.csv') #绝对路径
TrainSet.head()
#pd.read_table('D:/Python_programme/HandOndataAnalysis/titanic/data/train.csv').head()
输出结果
1.1.3 任务三:每1000行为一个数据模块,逐块读取
ChunkerTrainSet=pd.read_csv('../data/train.csv',chunksize=1000)
print(type(ChunkerTrainSet))
ChunkerTrainSet.get_chunk()
1.1.4 任务四:将表头改成中文,索引改为乘客ID [对于某些英文资料,我们可以通过翻译来更直观的熟悉我们的数据]
TrainSet.columns=['乘客ID','是否幸存','乘客等级(1/2/3等舱位)','乘客姓名','性别','年龄','堂兄弟/妹个数','父母与小孩个数','船票信息','票价','客舱','登船港口'] #直接在原数据上修改
#TrainSet.rename(columns={"PassengerId":"乘客ID", "Survived":"是否幸存", "Pclass":"乘客等级(1/2/3等舱位)", "Name":"乘客姓名", "Sex":"性别", "Age":"年龄", "SibSp":"堂兄弟/妹个数", "Parch":"父母与小孩个数", "Ticket":"船票信息", "Fare":"票价", "Cabin":"客舱", "Embarked":"登船港口"},inplace=True)#在原表上修改
TrainSet.set_index('乘客ID',inplace=True)
TrainSet
1.2 初步观察
1.2.1 任务一:查看数据的基本信息
TrainSet.info()
TrainSet.describe()
1.2.2 任务二:观察表格前10行的数据和后15行的数据
TrainSet.head(11) #前10行数据
TrainSet.tail(15) #后15行数据
1.2.4 任务三:判断数据是否为空,为空的地方返回True,其余地方返回False
TrainSet.isnull()
1.3 保存数据
1.3.1 任务一:将你加载并做出改变的数据,在工作目录下保存为一个新文件train_chinese.csv
TrainSet.to_csv("train_chinese.csv",encoding = 'utf-8')
1.4 知道你的数据叫什么
1.4.1 任务一:pandas中有两个数据类型DateFrame和Series,通过查找简单了解他们。然后自己写一个关于这两个数据类型的小例子?
'''
DateFrame
基础构造函数
pandas.DataFrame(data=None, index=None, columns=None, dtype=None, copy=False)
data:ndarray、list 或dict
index:行索引
columns:列名列表
dtype:数据类型,默认值是None,推断(infer)列的数据类型,也可以为列指定具体的数据类型。
copy:从数据输入复制数据
'''
#1.使用字典来创建数据框
DicData = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada'],'year': [2000, 2001, 2002, 2001, 2002],'pop': [1.5, 1.7, 3.6, 2.4, 2.9]}
row_index = ['one', 'two', 'three', 'four', 'five']
col_names=['year', 'state', 'pop']
df1=pd.DataFrame(data=DicData,index=row_index,columns=col_names)
print(df1)
#2.使用列表(列表项是List)来创建数据框
ListData = [ ['jack', 34, 'Sydeny'] ,
['Riti', 30, 'Delhi' ] ,
['Aadi', 16, 'New York'] ]
df2=pd.DataFrame(data=ListData)
print(df2)
#3.使用列表(列表项是元组)来创建数据框
TupleData = [ ('jack', 34, 'Sydeny') ,
('Riti', 30, 'Delhi' ) ,
('Aadi', 16, 'New York') ]
df3 = pd.DataFrame(data=TupleData)
print(df3)
#4.使用from_dict创建数据框
#在data参数中指定列名:
FdicData = {'col_1': [3, 2, 1, 0], 'col_2': ['a', 'b', 'c', 'd']}
df4 = pd.DataFrame.from_dict(data=FdicData)
print(df4)
'''
Series(系列)
Series 是带标签的一维数组,可存储整数、浮点数、字符串、Python 对象等类型的数据。轴标签统称为索引,它由两部分组成。
values:一组数据(ndarray类型)
index:相关的数据索引标签
基础构造函数
pandas.Series(data=None, index=None, dtype=None, name=None, copy=False)
data:一组数据(ndarray 类型)。
index:数据索引标签,如果不指定,默认从 0 开始。
dtype:数据类型,默认会自己判断。
name:设置名称。
copy:拷贝数据,默认为 False。
'''
#1.使用列表创建系列
SListData = [1,3,5,6,10,23]
S1 = pd.Series(data=SListData)
print(S1)
#2.使用numpy创建系列
S2 = pd.Series(np.random.randint(1,10,size=(3,)),index=['a','b','c'])
print(S2)
#3.使用字典创建系列
SDicData = {"A":1,"B":2,"C":3,"D":2}
S3 = pd.Series(data=SDicData)
print(S3)
1.4.2 任务二:根据上节课的方法载入"train.csv"文件
TrainDataSet = pd.read_csv('../data/train.csv')
1.4.3 任务三:查看DataFrame数据的每列的名称
#方法1 通过columns字段获取,返回一个numpy型的array
print(TrainDataSet.columns.values)
#方法2 直接使用 list 关键字,返回一个list
print(list(TrainDataSet))
#方法3 链表推倒式
print([column for column in TrainDataSet])
1.4.4任务四:查看"Cabin"这列的所有值[有多种方法]
#方法1 loc方法
#loc方法是通过行、列的名称或者标签来寻找我们需要的值
print(TrainDataSet.loc[ : ,"Cabin"])
#方法2 iloc方法
#iloc方法是通过索引行、列的索引位置[index, columns]来寻找值
print(TrainDataSet.iloc[:, 10])
1.4.5 任务五:加载文件"test_1.csv",然后对比"train.csv",看看有哪些多出的列,然后将多出的列删除
TestData = pd.read_csv('../data/test_1.csv')
print(TestData.head())
#del TestData['a']
#print(TestData.head())
【思考】还有其他的删除多余的列的方式吗?
TestData=TestData.drop(['a'],axis=1)
print(TestData.head())
1.4.6 任务六: 将[‘PassengerId’,‘Name’,‘Age’,‘Ticket’]这几个列元素隐藏,只观察其他几个列元素
TrainDataSet.drop(['PassengerId','Name','Age','Ticket'],axis=1).head()
TrainDataSet.head()
1.5 筛选的逻辑
1.5.1 任务一: 我们以"Age"为筛选条件,显示年龄在10岁以下的乘客信息。
TrainDataSet[TrainDataSet["Age"]<10].head()
1.5.2 任务二: 以"Age"为条件,将年龄在10岁以上和50岁以下的乘客信息显示出来,并将这个数据命名为midage
midage=TrainDataSet[(TrainDataSet["Age"]>10) & (TrainDataSet['Age']<50)]
midage
1.5.3 任务三:将midage的数据中第100行的"Pclass"和"Sex"的数据显示出来
midage = midage.reset_index(drop=True)
print(midage.head())
midage.loc[[100],['Pclass','Sex']]
1.5.4 任务四:使用loc方法将midage的数据中第100,105,108行的"Pclass","Name"和"Sex"的数据显示出来
midage.loc[[100,105,108],['Pclass','Name','Sex']]
1.5.5 任务五:使用iloc方法将midage的数据中第100,105,108行的"Pclass","Name"和"Sex"的数据显示出来
midage.iloc[[100,105,108],[2,3,4]]
1.6 了解你的数据吗?
1.6.1 任务一:利用Pandas对示例数据进行排序,要求升序
TrainDataSet = pd.read_csv('train_chinese.csv')
TrainDataSet.sort_values('年龄',ascending=True)#按年龄升序排列
1.6.2 任务二:对泰坦尼克号数据(trian.csv)按票价和年龄两列进行综合排序(降序排列),从数据中你能发现什么
TrainDataSet.sort_values(by=['票价', '年龄'], ascending=False).head()
1.6.3 任务三:利用Pandas进行算术计算,计算两个DataFrame数据相加结果
frame1 = pd.DataFrame(np.arange(9.).reshape(3, 3),
columns=['a', 'b', 'c'],
index=['one', 'two', 'three'])
frame2 = pd.DataFrame(np.arange(12.).reshape(4, 3),
columns=['a', 'e', 'c'],
index=['first', 'one', 'two', 'second'])
frame1
frame2
frame1+frame2
1.6.4 任务四:通过泰坦尼克号数据如何计算出在船上最大的家族有多少人?
max(TrainDataSet['堂兄弟/妹个数'] + TrainDataSet['父母与小孩个数'])
10
1.6.5 任务五:学会使用Pandas describe()函数查看数据基本统计信息
TrainDataSet
TrainDataSet.describe()
1.6.6 任务六:分别看看泰坦尼克号数据集中 票价、父母子女 这列数据的基本统计数据,你能发现什么?
1.票价的分布范围非常广,跨度非常大。
2.大部分人是独自一人上船的