目录
1.1 载入数据
1.1.1 任务一:导入numpy和pandas1.1.2 任务二:载入数据1.1.3 任务三:每1000行为一个数据模块,逐块读取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 1.1 载入数据
数据集下载 https://www.kaggle.com/c/titanic/overview
1.1.1 任务一:导入numpy和pandas
#写入代码import numpy as npimport pandas as pd
【提示】如果加载失败,学会如何在你的python环境下安装numpy和pandas这两个库
1.1.2 任务二:载入数据
(1) 使用相对路径载入数据
(2) 使用绝对路径载入数据
#写入代码A = pd.read_csv("train.csv")A.head(3)
| PassengerId | Survived | Pclass | Name | Sex | Age | SibSp | Parch | Ticket | Fare | Cabin | Embarked | 0 | 103Braund, Mr、Owen Harrismale22.010A/5 211717.2500NaNS
1 | 211Cumings, Mrs、John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
2 | 313Heikkinen, Miss、Lainafemale26.000STON/O2、31012827.9250NaNS
#写入代码B = pd.read_csv("C:/Users/hp/Desktop/动手学数据分析/第一单元项目集合/train.csv",engine='python')B.head(3)
| PassengerId | Survived | Pclass | Name | Sex | Age | SibSp | Parch | Ticket | Fare | Cabin | Embarked | 0 | 103Braund, Mr、Owen Harrismale22.010A/5 211717.2500NaNS
1 | 211Cumings, Mrs、John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
2 | 313Heikkinen, Miss、Lainafemale26.000STON/O2、31012827.9250NaNS
【提示】相对路径载入报错时,尝试使用os.getcwd()查看当前工作目录。
【思考】知道数据加载的方法后,试试pd.read_csv()和pd.read_table()的不同,如果想让他们效果一样,需要怎么做?了解一下’.tsv’和’.csv’的不同,如何加载这两个数据集?
【总结】加载的数据是所有工作的第一步,我们的工作会接触到不同的数据格式(eg:.csv;.tsv;.xlsx),但是加载的方法和思路都是一样的,在以后工作和做项目的过程中,遇到之前没有碰到的问题,要多多查资料吗,使用googel,了解业务逻辑,明白输入和输出是什么。
import osos.getcwd()
'C:\Users\hp\Desktop\动手学数据分析\第一单元项目集合'
A = pd.read_table("train.csv",sep=",")#pd.read_table()默认"t"分隔A.head(3)
| PassengerId | Survived | Pclass | Name | Sex | Age | SibSp | Parch | Ticket | Fare | Cabin | Embarked | 0 | 103Braund, Mr、Owen Harrismale22.010A/5 211717.2500NaNS
1 | 211Cumings, Mrs、John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
2 | 313Heikkinen, Miss、Lainafemale26.000STON/O2、31012827.9250NaNS 1.1.3 任务三:每1000行为一个数据模块,逐块读取
#写入代码chunker = pd.read_csv('train.csv', chunksize=1000)
【思考】什么是逐块读取?为什么要逐块读取呢?
【提示】大家可以chunker(数据块)是什么类型?用for循环打印出来出处具体的样子是什么?
答:使用pandas来处理文件的时候,经常会遇到大文件,而有时候我们只想要读取其中的一部分数据或对文件进行逐块处理。
#设置chunksize参数,来控制每次迭代数据的大小chunker = pd.read_csv("train.csv",chunksize=400)for piece in chunker: print(type(piece))# print(len(piece)) #第一次循环:400 #第二次循环:400 #第三次循环:91
40040091
1.1.4 任务四:将表头改成中文,索引改为乘客ID
PassengerId => 乘客ID
Survived => 是否幸存
Pclass => 乘客等级(1/2/3等舱位)
Name => 乘客姓名
Sex => 性别
Age => 年龄
SibSp => 堂兄弟/妹个数
Parch => 父母与小孩个数
Ticket => 船票信息
Fare => 票价
Cabin => 客舱
Embarked => 登船港口
方法一:读取数据的时候设定表头
df = pd.read_csv('train.csv', names=['乘客ID','是否幸存','仓位等级','姓名','性别','年龄','兄弟姐妹个数','父母子女个数','船票信息','票价','客舱','登船港口'],index_col='乘客ID',header=0)df.head()
| 是否幸存 | 仓位等级 | 姓名 | 性别 | 年龄 | 兄弟姐妹个数 | 父母子女个数 | 船票信息 | 票价 | 客舱 | 登船港口 | 乘客ID | | | | | | | | | | | | 1 | 03Braund, Mr、Owen Harrismale22.010A/5 211717.2500NaNS
2 | 11Cumings, Mrs、John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
3 | 13Heikkinen, Miss、Lainafemale26.000STON/O2、31012827.9250NaNS
4 | 11Futrelle, Mrs、Jacques Heath (Lily May Peel)female35.01011380353.1000C123S
5 | 03Allen, Mr、William Henrymale35.0003734508.0500NaNS
方法二:使用rename方法(可以修改部分或者全部)
df=pd.read_csv('train.csv')df.rename(columns={'Survived':'是否幸存', 'Pclass':'仓位等级', 'name':'姓名'}, inplace = True)df.head()
| PassengerId | 是否幸存 | 仓位等级 | Name | Sex | Age | SibSp | Parch | Ticket | Fare | Cabin | Embarked | 0 | 103Braund, Mr、Owen Harrismale22.010A/5 211717.2500NaNS
1 | 211Cumings, Mrs、John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
2 | 313Heikkinen, Miss、Lainafemale26.000STON/O2、31012827.9250NaNS
3 | 411Futrelle, Mrs、Jacques Heath (Lily May Peel)female35.01011380353.1000C123S
4 | 503Allen, Mr、William Henrymale35.0003734508.0500NaNS
方法三:使用columns方法(新列名和之前的名字要一一对应)
df = pd.read_csv('train.csv')df.columns=['乘客ID','是否幸存','仓位等级','姓名','性别','年龄','兄弟姐妹个数','父母子女个数','船票信息','票价','客舱','登船港口']df.set_index('乘客ID', inplace=True)#将乘客ID设置为索引df.head()
| 是否幸存 | 仓位等级 | 姓名 | 性别 | 年龄 | 兄弟姐妹个数 | 父母子女个数 | 船票信息 | 票价 | 客舱 | 登船港口 | 乘客ID | | | | | | | | | | | | 1 | 03Braund, Mr、Owen Harrismale22.010A/5 211717.2500NaNS
2 | 11Cumings, Mrs、John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
3 | 13Heikkinen, Miss、Lainafemale26.000STON/O2、31012827.9250NaNS
4 | 11Futrelle, Mrs、Jacques Heath (Lily May Peel)female35.01011380353.1000C123S
5 | 03Allen, Mr、William Henrymale35.0003734508.0500NaNS 1.2 初步观察
导入数据后,你可能要对数据的整体结构和样例进行概览,比如说,数据大小、有多少列,各列都是什么格式的,是否包含null等
1.2.1 任务一:查看数据的基本信息
df = pd.read_csv('train.csv')df.info()
RangeIndex: 891 entries, 0 to 890Data columns (total 12 columns):PassengerId 891 non-null int64Survived 891 non-null int64Pclass 891 non-null int64Name 891 non-null objectSex 891 non-null objectAge 714 non-null float64SibSp 891 non-null int64Parch 891 non-null int64Ticket 891 non-null objectFare 891 non-null float64Cabin 204 non-null objectEmbarked 889 non-null objectdtypes: float64(2), int64(5), object(5)memory usage: 83.6+ KB
【提示】有多个函数可以这样做,你可以做一下总结
1.2.2 任务二:观察表格前10行的数据和后15行的数据
df.head(10)
| 是否幸存 | 仓位等级 | 姓名 | 性别 | 年龄 | 兄弟姐妹个数 | 父母子女个数 | 船票信息 | 票价 | 客舱 | 登船港口 | 乘客ID | | | | | | | | | | | | 1 | 03Braund, Mr、Owen Harrismale22.010A/5 211717.2500NaNS
2 | 11Cumings, Mrs、John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
3 | 13Heikkinen, Miss、Lainafemale26.000STON/O2、31012827.9250NaNS
4 | 11Futrelle, Mrs、Jacques Heath (Lily May Peel)female35.01011380353.1000C123S
5 | 03Allen, Mr、William Henrymale35.0003734508.0500NaNS
6 | 03Moran, Mr、JamesmaleNaN003308778.4583NaNQ
7 | 01McCarthy, Mr、Timothy Jmale54.0001746351.8625E46S
8 | 03Palsson, Master、Gosta Leonardmale2.03134990921.0750NaNS
9 | 13Johnson, Mrs、Oscar W (Elisabeth Vilhelmina Berg)female27.00234774211.1333NaNS
10 | 12Nasser, Mrs、Nicholas (Adele Achem)female14.01023773630.0708NaNC
df.tail(15)
| 是否幸存 | 仓位等级 | 姓名 | 性别 | 年龄 | 兄弟姐妹个数 | 父母子女个数 | 船票信息 | 票价 | 客舱 | 登船港口 | 乘客ID | | | | | | | | | | | | 877 | 03Gustafsson, Mr、Alfred Ossianmale20.00075349.8458NaNS
878 | 03Petroff, Mr、Nedeliomale19.0003492127.8958NaNS
879 | 03Laleff, Mr、KristomaleNaN003492177.8958NaNS
880 | 11Potter, Mrs、Thomas Jr (Lily Alexenia Wilson)female56.0011176783.1583C50C
881 | 12Shelley, Mrs、William (Imanita Parrish Hall)female25.00123043326.0000NaNS
882 | 03Markun, Mr、Johannmale33.0003492577.8958NaNS
883 | 03Dahlberg, Miss、Gerda Ulrikafemale22.000755210.5167NaNS
884 | 02Banfield, Mr、Frederick Jamesmale28.000C.A./SOTON 3406810.5000NaNS
885 | 03Sutehall, Mr、Henry Jrmale25.000SOTON/OQ 3920767.0500NaNS
886 | 03Rice, Mrs、William (Margaret Norton)female39.00538265229.1250NaNQ
887 | 02Montvila, Rev、Juozasmale27.00021153613.0000NaNS
888 | 11Graham, Miss、Margaret Edithfemale19.00011205330.0000B42S
889 | 03Johnston, Miss、Catherine Helen "Carrie"femaleNaN12W./C、660723.4500NaNS
890 | 11Behr, Mr、Karl Howellmale26.00011136930.0000C148C
891 | 03Dooley, Mr、Patrickmale32.0003703767.7500NaNQ 1.2.4 任务三:判断数据是否为空,为空的地方返回True,其余地方返回False
df.isnull().head()
| 是否幸存 | 仓位等级 | 姓名 | 性别 | 年龄 | 兄弟姐妹个数 | 父母子女个数 | 船票信息 | 票价 | 客舱 | 登船港口 | 乘客ID | | | | | | | | | | | | 1 | FalseFalseFalseFalseFalseFalseFalseFalseFalseTrueFalse
2 | FalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
3 | FalseFalseFalseFalseFalseFalseFalseFalseFalseTrueFalse
4 | FalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
5 | FalseFalseFalseFalseFalseFalseFalseFalseFalseTrueFalse
【总结】上面的操作都是数据分析中对于数据本身的观察
【思考】对于一个数据,还可以从哪些方面来观察?找找答案,这个将对下面的数据分析有很大的帮助
答:还可以从数据的特征,如平均值、方差、极差等进行观察
1.3 保存数据 1.3.1 任务一:将你加载并做出改变的数据,在工作目录下保存为一个新文件train_chinese.csv
df.to_csv('train_chinese.csv')
【总结】数据的加载以及入门,接下来就要接触数据本身的运算,我们将主要掌握numpy和pandas在工作和项目场景的运用。