前言
作为数据分析系列的第一次学习。主要是载入数据并观察,查看一下数据的相关特征。同时作为自己的一个学习过程记录。
一、载入数据
加载数据集的第一步就是用head查看一下数据集长什么样子。
import numpy as np
import pandas as pd
df = pd.read_csv('train.csv')
df.head(3)
然后这里了解到CSV
与TSV
文件的区别:前者是以逗号作为分隔符的,而后者是以Tab作为分隔符。
还有read_csv
与read_table
的区别:其实也是分隔符与制表符的区别。前者默认为,
,后者默认为\t
。但指明分隔符参数sep
那其实两者就相同了
分块加载
加载数据时,如果数据集较大,而一次性读入内存会导致崩溃,那就需要考虑分块读取.
#写入代码
df1 = pd.read_csv('train.csv', chunksize=500)
print(df1)
for chunk in df1:
print(chunk.head(3))
这里chunksize
参数指明了每个块的大小为500(最后一个块可能由于不整除,那还剩多少大小就为多少).在后续的操作其实只是对每个块进行同样的处理,所以用for
就能处理。
二、初步观察
导入数据后可以对数据进行一个初步观察。可以查看数据的基本信息。
df.info() # 查看基本信息
df.isnull().head(3) # 判断是否是空,对每个元素给个判断,然后用bool表示每个值所在位置是否为空
还学习到一些pandas的函数:
pd.drop()
:可以删除某些行列
# 多了一个unnamed列和a列,将该列删除
df = pd.read_csv('test_1.csv')
df.head(3)
df.drop(columns=['a','Unnamed: 0'],axis=1, inplace=True) # 默认按行删除,axis=1代表从列角度,inplace表示是否覆盖原表
df.head(3)
pd.loc()
:可以对df行列索引进行取值操作。传的可以是值,也可以是列表,也可以是不等式,也可以是bool列表。
以"Age"为条件,将年龄在10岁以上和50岁以下的乘客信息显示出来,并将这个数据命名为midage
midage = df.loc[(df['Age'] > 10) & (df['Age'] < 50)] # 只有1个值,对行操作
midage.head(3)
(这里需要注意的是:在对原表执行某些取值操作形成了一个新表后,需要对新表执行reset_index
操作来更新索引,否则还是使用的原表的索引。以下面问题为例)
将midage的数据中第100行的"Pclass"和"Sex"的数据显示出来
df.loc[100]
midage.loc[100,['Pclass','Sex']] # 可以看到这个索引100定位的是df的第100行
midage # 没有rest_index,用的还是df的索引
midage = midage.reset_index(drop=True)
midage # reset后可以看到index又连续了.
midage.loc[100,['Pclass','Sex']]
midage是按照符合条件的Age选择的df的行,所以会有隔行,但是使用的还是原df的index.所以需要reset_index
使index连续.否则就会出现上面的问题,用100取的是index为100(对于原df来说确实是第100行)而不是位置为100的行
三、探索性分析
对泰坦尼克号数据(trian.csv)按票价和年龄两列进行综合排序(降序排列)
df.sort_values(['票价','年龄'], ascending=False).head(10)
通过观察可以看到,票价高的仓位等级就好,幸存的可能性就大。所以可以从观察初步得到数据特征的一些关系。
对兄弟姐妹个数做排序
df.sort_values(['兄弟姐妹个数'],ascending=False).head(10)
年龄高的,幸存下来的也少; 兄弟姐妹多的,往往仓位等级也不是很好,所以幸存率的也低.
(总之,在这种预测问题上,可以先观察数每个特征数据的对于最后预测结果的影响,也就是按照列索引排个序,观察值与值之间的关系)
小结
作为数据分析的第一次学习,主要是了解了对于一个新数据拿到手的第一步该如何做。给我的感觉就是,首先将数据读进来观察,可以通过一些pandas的方法来观察数据并简单从分布特点给予一个初步的评判。
比如info()
和describe()
方法,可以看到行列,也可以看到行列的值的一种特征分布;
比如对某列的数据做一个sort_values()
,简单观察特征与需要预测的关系;
顺便了解了一下pandas的一些方法:
reset_index()
,在根据某些条件从原表重组后需要更新行索引;loc
与iloc
索引的方法,一个是根据索引值,一个是根据位置;sort_values()
来对索引下面的值进行排序;value_counts()
可以统计某列的唯一值的数量等等。