数据集下载:https://www.kaggle.com/c/titanic/overview
import numpy as np
import pandas as pd
注:如果导入失败,学会如何在你的python环境下安装numpy和pandas这两个库。
df = pd.read_csv('train.csv')
df_3=df.head(3)
print(df_3)
df = pd.read_csv(r'D:\WIN10桌面文件\titanic\train.csv')
df_3=df.head(3)
print(df_3)
注:在使用绝对路径读取数据文件的时候,如果发生错误,检查一下是不是吗,没有对‘ \ ’进行转义,在python中 ‘ \ ’这个是转义符号,所以读取文件的时候会出现找不到文件的情况。
提示:相对路径载入报错时,尝试使用os.getcwd()查看当前工作目录。
思考 :
1、pd.read_csv()和pd.read_table()不同
read_csv和read_table都是加载带分隔符的数据,每一个分隔符作为一个数据的标志,但二者读出来的数据格式还是不一样的,read_table是以制表符 \t 作为数据的标志,也就是以行为单位进行存储。
而 read_csv读完后是一个数组,每一个字符串作为一列,这是二者的区别。
2、想让pd.read_csv()和pd.read_table()载入数据效果相同需要怎么做?
用read_table读取数据时,指定参数seq,seq标识分隔符,分隔符为\t ,即制表符,表示列与列之间用\t分开,因为分割符为制表符,而制表符存在于txt文件每行的末尾。此时读取的数据就能够和read_csv相同
3、了解一下’.tsv’和’.csv’的不同
(1)从名称上即可知道,TSV是用制表符(Tab,’\t’)作为字段值的分隔符;CSV是用半角逗号(’,’)作为字段值的分隔符;
(2)IANA规定的标准TSV格式,字段值之中是不允许出现制表符的。
4、如何加载这两个数据集?
使用pandas读取tsv文件的代码如下:
train=pd.read_csv('test.tsv', sep='\t')
读取csv:
df = pd.read_csv(r'D:\WIN10桌面文件\titanic\train.csv')
总结:加载的数据是所有工作的第一步,我们的工作会接触到不同的数据格式(eg:.csv;.tsv;.xlsx),但是加载的方法和思路都是一样的,在以后工作和做项目的过程中,遇到之前没有碰到的问题,要多多查资料,使用googel,了解业务逻辑,明白输入和输出是什么。
chunker = pd.read_csv('train.csv', chunksize=1000)
# 对该对象进行迭代遍历,可以完成逐块统计的合并处理
for piece in chunker:
print(piece.head(10))
使用pandas来处理文件的时候,经常会遇到大文件,而有时候我们只想要读取其中的一部分数据或对文件进行逐块处理,这时就需要逐块读取。有chunksize参数可以进行逐块加载。
经测试,它的本质就是将文本分成若干块,每次处理chunksize行的数据,最终返回一个TextParser对象。
对于某些英文资料,我们可以通过翻译来更直观的熟悉我们的数据
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_5=df.head(5)
print(df_5)
导入数据后,你可能要对数据的整体结构和样例进行概览,比如说,数据大小、有多少列,各列都是什么格式的,是否包含null等。
df.info()
前10行数据
df_10=df.head(10)
print(df_10)
df_15=df.tail(15)
print(df_15)
df_is_null = df.isnull().head(10)
print(df_is_null)
# 保存数据并新命名
df.to_csv('train_chinese_change.csv')
pandas中有两个数据类型DateFrame和Series,通 过查找简单了解他们。然后自己写一个关于这两个数据类型的小例 子
import numpy as np
import pandas as pd
sdata = {'ohio': 3500, 'Texas': 71000, 'Oregon': 10000, 'Utah': 5000}
example_1 = pd.Series(sdata)
print(example_1)
data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'Nevada'],
'year': [2000, 2001, 2002, 2001, 2002, 2003, ],
'pop': [1.5, 1.7, 3.6, 2.4, 2.9, 3.2]} # 这也是一个字典
example_2 = pd.DataFrame(data)
print(example_2)
df = pd.read_csv(r'D:\WIN10桌面文件\titanic\train.csv')
df_5 = df.head(5)
print(df_5)
print(df.columns)
输出结果
Index(['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age',
'SibSp', 'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked'],dtype='object')
print(df['Cabin'].head(3)) # 方法一
输出结果:
0 NaN
1 C85
2 NaN
Name: Cabin, dtype: object
print(df.Cabin.head(5)) # 方法二
输出结果:
0 NaN
1 C85
2 NaN
3 C123
4 NaN
Name: Cabin, dtype: object
# 删除多余的列
del test_1['a']
test_1.head(3)
还有其他的删除多余的列的方式吗?
通过pandas删除列:
1.del df['columns'] #改变原始数据
2.df.drop('columns',axis=1)#删除不改表原始数据,可以通过重新赋值的方式赋值该数据
3.df.drop('columns',axis=1,inplace='True') #改变原始数据 inplace='True可以覆盖原有的数据
tt_d = tt.drop(['PassengerId', 'Name', 'Age', 'Ticket'], axis=1).head(5)
print(tt_d)
输出结果:
Pclass Sex SibSp Parch Fare Cabin Embarked
0 3 male 0 0 7.8292 NaN Q
1 3 female 1 0 7.0000 NaN S
2 2 male 0 0 9.6875 NaN Q
3 3 male 0 0 8.6625 NaN S
4 3 female 1 1 12.2875 NaN S
思考:
如果想要完全的删除你的数据结构,使用inplace=True,因为使用inplace就将原数据覆盖了,所以这里没有用
表格数据中,最重要的一个功能就是要具有可筛选的能力,选出我所需要的信息,丢弃无用的信息。
# 以年龄为条件 筛选年龄在10岁以下的乘客
df_low_10 = df[df['Age']<10].head(5)
print(df_low_10)
输出结果:
PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
7 8 0 3 Palsson, Master. Gosta Leonard male 2.0 3 1 349909 21.0750 NaN S
10 11 1 3 Sandstrom, Miss. Marguerite Rut female 4.0 1 1 PP 9549 16.7000 G6 S
16 17 0 3 Rice, Master. Eugene male 2.0 4 1 382652 29.1250 NaN Q
24 25 0 3 Palsson, Miss. Torborg Danira female 8.0 3 1 349909 21.0750 NaN S
43 44 1 2 Laroche, Miss. Simonne Marie Anne Andree female 3.0 1 2 SC/Paris 2123 41.5792 NaN C
# 以年龄为条件 筛选年龄在10岁以上50岁以下的乘客信息
mid_age = df[(df['Age'] > 10) & (df['Age'] < 50)]
mid_age_5 = mid_age.head(5)
print(mid_age_5)
输出结果:
PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
0 1 0 3 Braund, Mr. Owen Harris male 22.0 1 0 A/5 21171 7.2500 NaN S
1 2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Thayer) female 38.0 1 0 PC 17599 71.2833 C85 C
2 3 1 3 Heikkinen, Miss. Laina female 26.0 0 0 STON/O2. 3101282 7.9250 NaN S
3 4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 0 113803 53.1000 C123 S
4 5 0 3 Allen, Mr. William Henry male 35.0 0 0 373450 8.0500 NaN S
# reset_index 重新定义索引行 原有的索引行可能不连续的,所以需要重新定义索引行 drop表示替换原有的索引
mid_age = mid_age.reset_index(drop=True)
mid_age_10 = mid_age.head(10)
print(mid_age_10)
输出结果:
PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
0 1 0 3 Braund, Mr. Owen Harris male 22.0 1 0 A/5 21171 7.2500 NaN S
1 2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Thayer) female 38.0 1 0 PC 17599 71.2833 C85 C
2 3 1 3 Heikkinen, Miss. Laina female 26.0 0 0 STON/O2. 3101282 7.9250 NaN S
3 4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 0 113803 53.1000 C123 S
4 5 0 3 Allen, Mr. William Henry male 35.0 0 0 373450 8.0500 NaN S
5 9 1 3 Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg) female 27.0 0 2 347742 11.1333 NaN S
6 10 1 2 Nasser, Mrs. Nicholas (Adele Achem) female 14.0 1 0 237736 30.0708 NaN C
7 13 0 3 Saundercock, Mr. William Henry male 20.0 0 0 A/5. 2151 8.0500 NaN S
8 14 0 3 Andersson, Mr. Anders Johan male 39.0 1 5 347082 31.2750 NaN S
9 15 0 3 Vestrom, Miss. Hulda Amanda Adolfina female 14.0 0 0 350406 7.8542 NaN S
# 使用loc方法 将midage的数据中第100 105 108行的"Pclass","Name"和"Sex"的数据显示出来
mid_age_part = mid_age.loc[[100, 105, 108], ['Pclass', 'Name', "Sex"]]
print(mid_age_part)
输出结果:
Pclass Name Sex
100 3 Petranec, Miss. Matilda female
105 3 Mionoff, Mr. Stoytcho male
108 3 Rekic, Mr. Tido male
# 使用iloc方法将midage的数据中第100,105,108行 的"Pclass","Name"和"Sex"的数据显示出来
mid_age_part_1=mid_age.iloc[[100,105,108],[2,3,4]]
print(mid_age_part_1)
输出结果:
Pclass Name Sex
149 2 Byles, Rev. Thomas Roussel Davids male
160 3 Cribb, Mr. John Hatfield male
163 3 Calic, Mr. Jovo male
加载所需的库
import numpy as np
import pandas as pd
数据载入
text = pd.read_csv(r'D:\WIN10桌面文件\titanic\train.csv')
教材《Python for Data Analysis》第五章
对数据进行排序
# 让行索引升序排序
.sort_index()
# 让列索引升序排序
.sort_index(axis=1)
# 让列索引降序排序
.sort_index(axis=1, ascending=False)
# 让任选两列数据同时降序排序
.sort_values(by=['a', 'c'])
在开始我们已经导入了train.csv数据,而且前面我们也学习了导入数据过程,根据上面学习,我们直接对目标列进行排序即可head(20) : 读取前20条数据
text_order = text.sort_values(by=['Fare', 'Age'], ascending=False).head(20)
print(text_order)
输出结果:
PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
679 680 1 1 Cardeza, Mr. Thomas Drake Martinez male 36.0 0 1 PC 17755 512.3292 B51 B53 B55 C
258 259 1 1 Ward, Miss. Anna female 35.0 0 0 PC 17755 512.3292 NaN C
737 738 1 1 Lesurer, Mr. Gustave J male 35.0 0 0 PC 17755 512.3292 B101 C
438 439 0 1 Fortune, Mr. Mark male 64.0 1 4 19950 263.0000 C23 C25 C27 S
341 342 1 1 Fortune, Miss. Alice Elizabeth female 24.0 3 2 19950 263.0000 C23 C25 C27 S
88 89 1 1 Fortune, Miss. Mabel Helen female 23.0 3 2 19950 263.0000 C23 C25 C27 S
27 28 0 1 Fortune, Mr. Charles Alexander male 19.0 3 2 19950 263.0000 C23 C25 C27 S
742 743 1 1 Ryerson, Miss. Susan Parker "Suzette" female 21.0 2 2 PC 17608 262.3750 B57 B59 B63 B66 C
311 312 1 1 Ryerson, Miss. Emily Borie female 18.0 2 2 PC 17608 262.3750 B57 B59 B63 B66 C
299 300 1 1 Baxter, Mrs. James (Helene DeLaudeniere Chaput) female 50.0 0 1 PC 17558 247.5208 B58 B60 C
118 119 0 1 Baxter, Mr. Quigg Edmond male 24.0 0 1 PC 17558 247.5208 B58 B60 C
380 381 1 1 Bidois, Miss. Rosalie female 42.0 0 0 PC 17757 227.5250 NaN C
716 717 1 1 Endres, Miss. Caroline Louise female 38.0 0 0 PC 17757 227.5250 C45 C
700 701 1 1 Astor, Mrs. John Jacob (Madeleine Talmadge Force) female 18.0 1 0 PC 17757 227.5250 C62 C64 C
557 558 0 1 Robbins, Mr. Victor male NaN 0 0 PC 17757 227.5250 NaN C
527 528 0 1 Farthing, Mr. John male NaN 0 0 PC 17483 221.7792 C95 S
377 378 0 1 Widener, Mr. Harry Elkins male 27.0 0 2 113503 211.5000 C82 C
779 780 1 1 Robert, Mrs. Edward Scott (Elisabeth Walton McMillan) female 43.0 0 1 24160 211.3375 B3 S
730 731 1 1 Allen, Miss. Elisabeth Walton female 29.0 0 0 24160 211.3375 B5 S
689 690 1 1 Madill, Miss. Georgette Alexandra female 15.0 0 1 24160 211.3375 B5 S
Process finished with exit code 0
思考:排序后,如果我们仅仅关注年龄和票价两列。根据常识我知道发现票价越高的应该客舱越好,所以我们会明显看出,票价前20的乘客中存活的有14人,这是相当高的一个比例。
以进一步分析一下
票价和存活之间的关系,年龄和存活之间的关系呢?
票价最贵前20个中 女性多于男性(女性12个,男性8个)
具体请看《利用Python进行数据分析》第五章 算术运算与数据对齐部分
提醒:两个DataFrame相加后,会返回一个新的DataFrame,对应的行和列的值会相加,没有对应的会变成空值NaN。
当然,DataFrame还有很多算术运算,如减法,除法等,有兴趣的同学可以看《利用Python进行数据分析》第五章
算术运算与数据对齐部分,多在网络上查找相关学习资料。
最大的家族有多少人(‘兄弟姐妹个数’+‘父母子女个数’),我们该怎么做呢?
text_max_count = max(text['SibSp']+text["Parch"])
print(text_max_count)
输出结果
10
关键知识点示例做一遍(简单数据)
具体请看《利用Python进行数据分析》第五章 汇总和计算描述统计部分
调用 describe 函数,观察数据基本信息
'''
count : 样本数据大小
mean : 样本数据的平均值
std : 样本数据的标准差
min : 样本数据的最小值
25% : 样本数据25%的时候的值
50% : 样本数据50%的时候的值
75% : 样本数据75%的时候的值
max : 样本数据的最大值
'''
看看泰坦尼克号数据集中" 票价 "这列数据的基本统计数据
text_F=text['Fare'].describe()
print(text_F)
输出结果:
count 891.000000
mean 32.204208
std 49.693429
min 0.000000
25% 7.910400
50% 14.454200
75% 31.000000
max 512.329200
Name: Fare, dtype: float64
思考:从上面数据我们可以看出,
一共有891个票价数据,
平均值约为:32.20,
标准差约为49.69,说明票价波动特别大,
25%的人的票价是低于7.91的,50%的人的票价低于14.45,75%的人的票价低于31.00,
票价最大值约为512.33,最小值为0。
通过上面的例子,我们再看看泰坦尼克号数据集中 父母子女个数 这列数据的基本统计数据,然后可以说出你的想法
text_p = text['Parch'].describe()
print(text_p)
输出结果
count 891.000000
mean 0.381594
std 0.806057
min 0.000000
25% 0.000000
50% 0.000000
75% 0.000000
max 6.000000
Name: Parch, dtype: float64
本章内容到这里就结束啦!