前言
本文章为天池“动手学数据分析”小组学习的Task01-学习日志,旨在了解数据载入及初步观察,进一步探索性的数据分析,以及补充一些pandas基础知识。
学习网址添加链接描述:添加链接描述
一、数据载入及初步了解
1.引入库并载入数据
代码如下:
import pandas as pd
import numpy as np
import os
#1.1 读入文件
#读取需要文件的路径
print(os.getcwd())
#绝对路径
path='D:\python\ITEM\hands-on-data-analysis-master\hands-on-data-analysis-master\Data'
T_train=pd.read_csv(os.path.join(path, 'train.csv'), sep=',')
print(T_train.head(3))
输出结果如下:
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
注:读取文件可分为绝对路径读入和相对路径读入,相对路径一般会容易报错,读取函数的具体参数如下(参考文章:添加链接描述 ):
2.逐块读取数据
数据过多时,可以分批处理,提高处理速度
分块码如下:
path1='D:/python/ITEM/hands-on-data-analysis-master/hands-on-data-analysis-master/Data/'
chunker = pd.read_csv(path1+'train.csv', chunksize=1000)
T_train_C.to_csv('D:/python/ITEM/hands-on-data-analysis-master/hands-on-data-analysis-master/Data/train_chinese.csv',encoding='utf_8_sig')
3.修改标题和主键并存入新文件
代码如下:
T_train_C= pd.read_csv(os.path.join(path, 'train.csv'), names=['乘客ID','是否幸存','仓位等级','姓名','性别','年龄',
'兄弟姐妹个数','父母子女个数','船票信息','票价','客舱','登船港口'],index_col='乘客ID',header=0,encoding='utf_8_sig')
T_train_C.to_csv('D:/python/ITEM/hands-on-data-analysis-master/hands-on-data-analysis-master/Data/train_chinese.csv',encoding='utf_8_sig')
4.初步观察数据
1)查看数据基本信息,代码如下:
T_train.info()
1)结果如下:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 891 entries, 0 to 890
Data columns (total 12 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 PassengerId 891 non-null int64
1 Survived 891 non-null int64
2 Pclass 891 non-null int64
3 Name 891 non-null object
4 Sex 891 non-null object
5 Age 714 non-null float64
6 SibSp 891 non-null int64
7 Parch 891 non-null int64
8 Ticket 891 non-null object
9 Fare 891 non-null float64
10 Cabin 204 non-null object
11 Embarked 889 non-null object
dtypes: float64(2), int64(5), object(5)
注:info()函数可以了解每个变量相应的非空个数及变量数据类型
2)提取数据前后几行,代码如下:
print(T_train.head(10).append(T_train.tail(15)))
2)结果如下:
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
876 877 0 3 ... 9.8458 NaN S
877 878 0 3 ... 7.8958 NaN S
878 879 0 3 ... 7.8958 NaN S
879 880 1 1 ... 83.1583 C50 C
880 881 1 2 ... 26.0000 NaN S
881 882 0 3 ... 7.8958 NaN S
882 883 0 3 ... 10.5167 NaN S
883 884 0 2 ... 10.5000 NaN S
884 885 0 3 ... 7.0500 NaN S
885 886 0 3 ... 29.1250 NaN Q
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
3)查看某一列的值,代码如下:
print(T_train['Cabin'].head(3))
print(T_train.Cabin.head(3))
4)俩文件比较删除多于列:
print(T_train.columns)
T_test=pd.read_csv(os.path.join(path,'test_1.csv'),sep=',')
print(T_test.columns)
del T_test['a']
print(T_test.head(3))
4)注意,drop的三种使用方法:
dt = dt.drop(['密度', '含糖率'], axis=1) # axis=1 表示删除列,['密度', '含糖率'] 要删除的col的列表,可一次删除多列
dt.drop(['密度', '含糖率'], axis=1, inplace=True) # inplace=True, 直接从内部删除
dt.drop(dt.columns[[0, 4, 8]], axis=1, inplace=True) # dt.columns[[0, 4, 8]] 直接使用索引查找列
5)判断是否为空,代码如下:
print(T_train.isnull().head(3))
5)结果如下:
PassengerId Survived Pclass Name ... Ticket Fare Cabin Embarked
0 False False False False ... False False True False
1 False False False False ... False False False False
2 False False False False ... False False True False
5)注:返回为如果为None则返回为TURE反之返回为false的一张表格
二、数据筛选和排序
1.不等式筛选
代码如下:
midage=T_train[(T_train['Age']>10)&(T_train['Age']<50)]
print(midage.head(3))
2.数据切片
1)将midage的数据中第100行的“Pclass”和“sex"显示出来,代码如下:
midage1=midage.reset_index(drop=True) #reset_index()主要用于重置索引,将会将原来的索引index作为新的一列
print(midage1.loc[[100],['Pclass','Sex']])
2)使用loc方法将midage的数据中第100,105,108行的"Pclass","Name"和"Sex"的数据显示出来(方法一),代码如下:
midage1=midage.reset_index(drop=True) #reset_index()主要用于重置索引,将会将原来的索引index作为新的一列
print(midage1.loc[[100],['Pclass','Sex']])
2)用iloc方法将midage的数据中第100,105,108行的"Pclass","Name"和"Sex"的数据显示出来(方法二),代码如下:
print(midage1.iloc[[100,105,108],[2,3,4]])
2)注:利用loc、iloc提取指定行、指定列数据
1)二者取整行一致
2)对列切片loc通过列名,iloc通过index
3.升降序
按票价和年龄两列进行综合排序(降序排列),代码如下:
print(T_train.sort_values(by=['Fare', 'Age'], ascending=False).head(3))
三.查看基本统计信息
代码如下
TD01=T_train['Fare'].describe()
TD02=T_train['Pclass'].describe()
TD03=T_train['Sex'].describe()
TD04=T_train['Age'].describe()
TD05=T_train['SibSp'].describe()
TD06=T_train['Parch'].describe()
TD07=T_train['Fare'].describe()
print(TD01)
print(TD02)
print(TD03)
print(TD04)
print(TD05)
print(TD06)
print(TD07)
结果如下:
[3 rows x 12 columns]
10
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
count 891.000000
mean 2.308642
std 0.836071
min 1.000000
25% 2.000000
50% 3.000000
75% 3.000000
max 3.000000
Name: Pclass, dtype: float64
count 891
unique 2
top male
freq 577
Name: Sex, dtype: object
count 714.000000
mean 29.699118
std 14.526497
min 0.420000
25% 20.125000
50% 28.000000
75% 38.000000
max 80.000000
Name: Age, dtype: float64
count 891.000000
mean 0.523008
std 1.102743
min 0.000000
25% 0.000000
50% 0.000000
75% 1.000000
max 8.000000
Name: SibSp, dtype: float64
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
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
数据分析:
(1)费用(与船舱等级相结合):大多数乘客为三等舱低票价且标准差较大,数据离散型较大
(2)年龄:青壮年居多
(3)乘客大多为独自乘坐,家族乘坐较少