1. 数据载入及初步观察
1.1 载入数据
此处略
1.1.1 任务一:导入numpy和pandas
import numpy as np
import pandas as pd
1.1.2 任务二:载入数据
(1) 使用相对路径载入数据
把数据文件安置在和.py
同个文件夹下就可以
'''使用相对路径以及打印前十行'''
df1 = pd.read_csv("train.csv")
df2 = pd.read_csv("test.csv")
print(df1.head(10))
# PassengerId Survived Pclass ... Fare Cabin Embarked
# 0 1 0 3 ... 7.2500 NaN S
# 1 2 1 1 ... 71.2833 C85 C
# 2 3 1 3 ... 7.9250 NaN S
# 3 4 1 1 ... 53.1000 C123 S
# 4 5 0 3 ... 8.0500 NaN S
# 5 6 0 3 ... 8.4583 NaN Q
# 6 7 0 1 ... 51.8625 E46 S
# 7 8 0 3 ... 21.0750 NaN S
# 8 9 1 3 ... 11.1333 NaN S
# 9 10 1 2 ... 30.0708 NaN C
#
# [10 rows x 12 columns]
(2)使用相对路径
这里的路径我是手打的
'''使用绝对路径以及打印前五行'''
df3 = pd.read_csv("E:\Python\python操作\datawhale数据分析\\train.csv")
df4 = pd.read_csv("E:\Python\python操作\datawhale数据分析\\test.csv")
print(df3.head(5))
# PassengerId Survived Pclass ... Fare Cabin Embarked
# 0 1 0 3 ... 7.2500 NaN S
# 1 2 1 1 ... 71.2833 C85 C
# 2 3 1 3 ... 7.9250 NaN S
# 3 4 1 1 ... 53.1000 C123 S
# 4 5 0 3 ... 8.0500 NaN S
#
# [5 rows x 12 columns]
1.1.3 任务三:每1000行为一个数据模块,逐块读取
【思考】什么是逐块读取?为什么要逐块读取呢?
【回答】chunksize是在对数据进行逐块提取时使用的参数,是每次块数据的大小。它的本质就是将文本分成若干块。而使用逐块读取的原因是使用pandas来处理文件的时候,经常会遇到大文件,直接使用pandas的read_csv()方法去读取这个csv文件,服务器的内存是会吃不消的,所以就非常有必要使用chunksize去分块处理,而经过chunksize后将得到一个可迭代的返回结果。
'''每1000行为一个数据模块,逐块读取'''
chunker = pd.read_csv('train.csv', chunksize=1000)
print(type(chunker))
# <class 'pandas.io.parsers.TextFileReader'>
for chunk in chunker:
print(chunk)
# PassengerId Survived Pclass ... Fare Cabin Embarked
# 0 1 0 3 ... 7.2500 NaN S
# 1 2 1 1 ... 71.2833 C85 C
# 2 3 1 3 ... 7.9250 NaN S
# 3 4 1 1 ... 53.1000 C123 S
# 4 5 0 3 ... 8.0500 NaN S
# .. ... ... ... ... ... ... ...
# 886 887 0 2 ... 13.0000 NaN S
# 887 888 1 1 ... 30.0000 B42 S
# 888 889 0 3 ... 23.4500 NaN S
# 889 890 1 1 ... 30.0000 C148 C
# 890 891 0 3 ... 7.7500 NaN Q
#
# [891 rows x 12 columns]
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()
这里是参考资料[2]
写的,直接修改columns
,这里我把测试集也改了
'''表头改成中文'''
'''直接修改columns'''
df1.columns =['乘客ID','是否幸存','仓位等级','姓名','性别','年龄','兄弟姐妹个数','父母子女个数','船票信息','票价','客舱','登船港口']
print(df1.head())
# 乘客ID 是否幸存 仓位等级 ... 票价 客舱 登船港口
# 0 1 0 3 ... 7.2500 NaN S
# 1 2 1 1 ... 71.2833 C85 C
# 2 3 1 3 ... 7.9250 NaN S
# 3 4 1 1 ... 53.1000 C123 S
# 4 5 0 3 ... 8.0500 NaN S
#
# [5 rows x 12 columns]
df1 = df1.set_index(keys=['乘客ID', '是否幸存' ]) # 最后还要设置一个新索引
print(df1.head())
# 仓位等级 姓名 ... 客舱 登船港口
# 乘客ID 是否幸存 ...
# 1 0 3 Braund, Mr. Owen Harris ... NaN S
# 2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th... ... C85 C
# 3 1 3 Heikkinen, Miss. Laina ... NaN S
# 4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) ... C123 S
# 5 0 3 Allen, Mr. William Henry ... NaN S
#
# [5 rows x 10 columns]
1.2 初步观察
导入数据后,你可能要对数据的整体结构和样例进行概览,比如说,数据大小、有多少列,各列都是什么格式的,是否包含null等
1.2.1 任务一:查看数据的基本信息
'''查看数据的基本信息'''
print(df1.info())
# <class 'pandas.core.frame.DataFrame'>
# MultiIndex: 891 entries, (1, 0) to (891, 0)
# Data columns (total 10 columns):
# 仓位等级 891 non-null int64
# 姓名 891 non-null object
# 性别 891 non-null object
# 年龄 714 non-null float64
# 兄弟姐妹个数 891 non-null int64
# 父母子女个数 891 non-null int64
# 船票信息 891 non-null object
# 票价 891 non-null float64
# 客舱 204 non-null object
# 登船港口 889 non-null object
# dtypes: float64(2), int64(3), object(5)
# memory usage: 79.4+ KB
# None
1.2.2 任务二:观察表格前10行的数据和后15行的数据
'''观察表格前10行的数据和后15行的数据'''
print(df1.head(10))
# 仓位等级 姓名 ... 客舱 登船港口
# 乘客ID 是否幸存 ...
# 1 0 3 Braund, Mr. Owen Harris ... NaN S
# 2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th... ... C85 C
# 3 1 3 Heikkinen, Miss. Laina ... NaN S
# 4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) ... C123 S
# 5 0 3 Allen, Mr. William Henry ... NaN S
# 6 0 3 Moran, Mr. James ... NaN Q
# 7 0 1 McCarthy, Mr. Timothy J ... E46 S
# 8 0 3 Palsson, Master. Gosta Leonard ... NaN S
# 9 1 3 Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg) ... NaN S
# 10 1 2 Nasser, Mrs. Nicholas (Adele Achem) ... NaN C
#
# [10 rows x 10 columns]
print(df1.tail(15))
# 仓位等级 姓名 ... 客舱 登船港口
# 乘客ID 是否幸存 ...
# 877 0 3 Gustafsson, Mr. Alfred Ossian ... NaN S
# 878 0 3 Petroff, Mr. Nedelio ... NaN S
# 879 0 3 Laleff, Mr. Kristo ... NaN S
# 880 1 1 Potter, Mrs. Thomas Jr (Lily Alexenia Wilson) ... C50 C
# 881 1 2 Shelley, Mrs. William (Imanita Parrish Hall) ... NaN S
# 882 0 3 Markun, Mr. Johann ... NaN S
# 883 0 3 Dahlberg, Miss. Gerda Ulrika ... NaN S
# 884 0 2 Banfield, Mr. Frederick James ... NaN S
# 885 0 3 Sutehall, Mr. Henry Jr ... NaN S
# 886 0 3 Rice, Mrs. William (Margaret Norton) ... NaN Q
# 887 0 2 Montvila, Rev. Juozas ... NaN S
# 888 1 1 Graham, Miss. Margaret Edith ... B42 S
# 889 0 3 Johnston, Miss. Catherine Helen "Carrie" ... NaN S
# 890 1 1 Behr, Mr. Karl Howell ... C148 C
# 891 0 3 Dooley, Mr. Patrick ... NaN Q
#
# [15 rows x 10 columns]
1.2.4 任务三:判断数据是否为空,为空的地方返回True,其余地方返回False
print(df1.isnull().head())
# 仓位等级 姓名 性别 年龄 ... 船票信息 票价 客舱 登船港口
# 乘客ID 是否幸存 ...
# 1 0 False False False False ... False False True False
# 2 1 False False False False ... False False False False
# 3 1 False False False False ... False False True False
# 4 1 False False False False ... False False False False
# 5 0 False False False False ... False False True False
#
# [5 rows x 10 columns]
1.3 保存数据
1.3.1 任务一:将你加载并做出改变的数据,在工作目录下保存为一个新文件train_chinese.csv
'''1.3 保存数据'''
df1.to_csv('train_chinese.csv')
df2.to_csv('test_chinese.csv')
[1]https://nbviewer.jupyter.org/github/andongBlue/Thinking-Ddata/blob/master/%E7%AC%AC%E4%B8%80%E5%8D%95%E5%85%83%E9%A1%B9%E7%9B%AE%E9%9B%86%E5%90%88/%E7%AC%AC%E4%B8%80%E7%AB%A0%EF%BC%9A%E7%AC%AC%E4%B8%80%E8%8A%82%E6%95%B0%E6%8D%AE%E8%BD%BD%E5%85%A5%E5%8F%8A%E5%88%9D%E6%AD%A5%E8%A7%82%E5%AF%9F.ipynb#1.1.3-任务三:每1000行为一个数据模块,逐块读取
[2]https://www.cnblogs.com/recoverableTi/p/13526941.html
[3]https://blog.csdn.net/weixin_41903171/article/details/108053159