这门课程得主要目的是通过真实的数据,以实战的方式了解数据分析的流程和熟悉数据分析python的基本操作。知道了课程的目的之后,我们接下来我们要正式的开始数据分析的实战教学,完成kaggle上泰坦尼克的任务,实战数据分析全流程。
这里有两份资料: 教材《Python for Data Analysis》和 baidu.com & google.com(善用搜索引擎)
import numpy as np # 科学计算库
import pandas as pd # 结构化数据(dataframe)处理库
import os # 操作系统交互库(operation system)
df = pd.read_csv('train.csv')
df = pd.read_csv('/Users/zephyrin/Desktop/hands-on-data-analysis-master/第一单元项目集合/train.csv')
print("当前工作目录 : %s" % os.getcwd())
read_csv():默认读取用逗号分隔符的文件,不需要用sep来指定分隔符。如果读的是用非逗号分隔符的文件,必须要用sep指定分割符,不然读出来的是原文件的样子,数据没被分割开。
read_table():读取文件时必须要用sep来指定分隔符,否则读出来的数据是原始文件,没有分割开。
上图read_table()–>read_csv():
df = pd.read_table('/Users/zephyrin/Desktop/hands-on-data-analysis-master/第一单元项目集合/train.csv', sep = ',')
.tsv(Tab-separated values):是用制表符(Tab,’\t’)作为字段值的分隔符;
.csv(Comma-separated values):是用半角逗号(’,’)作为字段值的分隔符;
chunker = pd.read_csv('train.csv', chunksize=1000)
for m in chunker:
print(len(m))
print(m)
什么是逐块读取:通过指定一个chunksize分块大小来读取文件,返回的是一个可迭代的对象TextFileReader
为什么要逐块读取:数据太大时需要逐块读取文本数据进行分块
df = pd.read_csv('train.csv', names=['乘客ID','是否幸存','仓位等级','姓名','性别','年龄','兄弟姐妹个数','父母子女个数','船票信息','票价','客舱','登船港口'],index_col='乘客ID',header=0)
df.head()
查看数据基本信息:
df.info(): # 打印摘要
df.describe(): # 描述性统计信息
df.values: # 数据
df.to_numpy() # 数据 (推荐)
df.shape: # 形状 (行数, 列数)
df.columns: # 列标签
df.columns.values: # 列标签
df.index: # 行标签
df.index.values: # 行标签
df.head(n): # 前n行
df.tail(n): # 尾n行
pd.options.display.max_columns=n: # 最多显示n列
pd.options.display.max_rows=n: # 最多显示n行
df.memory_usage(): # 占用内存(字节B)
df.isnull(). # 判断数据是否为空,空的返回True,其他返回False
将你加载并做出改变的数据,在工作目录下保存为一个新文件train_chinese.csv:
df.to_csv('train_chinese.csv')
数据的加载以及入门,接下来就要接触数据本身的运算,我们将主要掌握numpy和pandas在工作和项目场景的运用。
数据分析的第一步,加载数据我们已经学习完毕了。当数据展现在我们面前的时候,我们所要做的第一步就是认识他,今天我们要学习的就是了解字段含义以及初步观察数据。
pandas中有两个数据类型:DateFrame和Series
sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}
example_1 = pd.Series(sdata)
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)
example_2
(1)
import pandas as pd
data = [[1, 2, 3], [4, 5, 6]]
index = ['a', 'b']
column = ['left', 'center', 'right']
df = pd.DataFrame(data=data, index=index, columns=column)
print(df)
frame = pd.DataFrame(np.arange(8).reshape((2, 4)),
index=['2', '1'],
columns=['d', 'a', 'b', 'c'])
frame
代码解析:
(3)构建一个有数字有空值的DataFrame数据:
frame2 = pd.DataFrame([[1.4, np.nan],
[7.1, -4.5],
[np.nan, np.nan],
[0.75, -1.3]
], index=['a', 'b', 'c', 'd'], columns=['one', 'two'])
frame2
(1)查看所有列:
df.columns
(2)查看具体某列的所有项:
df['Cabin'] #方法一
df.Cabin #方法二
(3)删除某一列:
```方法一```
del test_1['a'] #改变原始数据
```方法二```
df = test_1.drop(['a'], axis = 1, inplace = True) # drop()函数默认隐藏行,隐藏列要加 axis=1;默认不改变原始数据,改变要加 inplace = True
(4)隐藏某一列观察其他元素:
df.drop(['PassengerId','Name','Age','Ticket'],axis=1)
表格数据中,最重要的一个功能就是要具有可筛选的能力,选出我所需要的信息,丢弃无用的信息。
下面我们还是用实战来学习pandas这个功能
以"Age"为条件,将年龄在10岁以上和50岁以下的乘客信息显示出来,并将这个数据命名为midage:
midage = df[(df['Age']>10) & (df['Age']<50)]
(1)将midage的数据中第100行的"Pclass"和"Sex"的数据显示出来:
midage = midage.reset_index(drop = True)
midage.loc[[100],['Pclass','Sex']]
(2)将midage的数据中第100,105,108行的"Pclass"和"Sex"的数据显示出来:
```方法一```
midage.loc[[100,105,108],['Pclass','Sex']]
```方法二```
midage.iloc[[100,105,108],[2,4]]
(3) loc()、iloc()、ix()的区别:
在前面我们已经学习了Pandas基础,知道利用Pandas读取csv数据的增删查改,今天我们要学习的就是探索性数据分析,主要介绍如何利用Pandas进行排序、算术计算以及计算描述函数describe()的使用。
具体请看《利用Python进行数据分析》第五章 排序和排名 部分
df.sort_values(by='c', ascending=True) # 根据某一列升序排列
df.sort_index() # 根据行索引升序排序
df.sort_index(axis=1) # 根据列索引升序排序
df.sort_index(axis=1, ascending=False) # 根据列索引降序排序
frame.sort_values(by=['a', 'c'], ascending=False) # 两列同时降序排序
具体请看《利用Python进行数据分析》第五章 算术运算与数据对齐 部分
# 构建DataFrame
frame1_a = pd.DataFrame(np.arange(9.).reshape(3, 3),
columns=['a', 'b', 'c'],
index=['one', 'two', 'three'])
frame1_b = pd.DataFrame(np.arange(12.).reshape(4, 3),
columns=['a', 'e', 'c'],
index=['first', 'one', 'two', 'second'])
# 将frame1_a和frame1_b进行相加
frame1_a + frame1_b
【提醒】两个DataFrame相加后,会返回一个新的DataFrame,对应的行和列的值会相加,没有对应的会变成空值NaN。
当然,DataFrame还有很多算术运算,如减法,除法等,有兴趣的同学可以看《利用Python进行数据分析》第五章 算术运算与数据对齐 部分,多在网络上查找相关学习资料。
max(df['兄弟姐妹个数'] + df['父母子女个数'])
是的,如上,很简单,我们只需找出兄弟姐妹个数和父母子女个数之和最大的数就行,先让这两列相加返回一个DataFrame,然后用max函数求出最大值,当然你还可以想出很多方法和思考角度,欢迎你来说出你的看法。
具体请看《利用Python进行数据分析》第五章 汇总和计算描述统计 部分
df['票价'].describe()
'''
count : 样本数据大小
mean : 样本数据的平均值
std : 样本数据的标准差
min : 样本数据的最小值
25% : 样本数据25%的时候的值
50% : 样本数据50%的时候的值
75% : 样本数据75%的时候的值
max : 样本数据的最大值
'''
分析:从上面数据我们可以看出, 一共有891个票价数据, 平均值约为:32.20, 标准差约为49.69,说明票价波动特别大, 25%的人的票价是低于7.91的,50%的人的票价低于14.45,75%的人的票价低于31.00, 票价最大值约为512.33,最小值为0。
本节中我们通过Pandas的一些内置函数对数据进行了初步统计查看,这个过程最重要的不是大家得掌握这些函数,而是看懂从这些函数出来的数据,构建自己的数据分析思维,这也是第一章最重要的点,希望大家学完第一章能对数据有个基本认识,了解自己在做什么,为什么这么做,后面的章节我们将开始对数据进行清洗,进一步分析。