python进行数据分析学习第一章


行话:
数据规整(Munge/Munging/Wrangling) 指的是将非结构化和(或)散乱数据处理为结构化或整洁形式的整个过程。这几个词已经悄悄成为当今数据黑客们的行话了。Munge这个词跟Lunge押韵。

伪码(Pseudocode) 算法或过程的“代码式”描述,而这些代码本身并不是实际有效的源代码。

语法糖(Syntactic sugar) 这是一种编程语法,它并不会带来新的特性,但却能使代码更易读、更易写。

如果本身有python的话需要卸掉再安装anaconda比较好,不然导入库的时候就很麻烦
会一直报错

数据基础操作
数据清洗与重构
建模和评估。

数据基础操作:我们将得到一个要分析的数据,要学习如何加载数据,查看数据,然后学习Pandas的一些基础操作,最后尝试探索性的数据分析。
数据清洗与重构:当我们可以比较熟练的操作数据并认识这个数据之后,我们需要将原始数据变为一个可用好用的数据,为之后放入模型做准备
建模和评估:我们根据任务需求不同,要考虑建立什么模型,我们将使用流行的sklearn库,建立模型。评估我们模型的好坏,对模型做优化

数据加载

首先导入numpy和pandas
载入数据
pd.read_csv('')
os.getcwd()查看当前工作目录

tsv和csv,xlsx之间的不同之处:
这三者都属于文本文件
csv和tsv文件的字段分别由逗号和tab键分开

pd.read_csv()和pd.read_table()的不同
在这里插入图片描述

分块读取数据
chunker = pd.read_csv('train.csv', chunksize=1000)
逐块读取之后用for循环每块每块处理
for chunk in df print(chunk)

chunker是什么类型
:DataFrame类型
dataframe类型是什么类型
Pandas 数据结构 - DataFrame

DataFrame 是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型值)。DataFrame 既有行索引也有列索引,它可以被看做由 Series 组成的字典(共同用一个索引)
DataFrame 构造方法如下:
pandas.DataFrame( data, index, columns, dtype, copy)
参数说明:
data:一组数据(ndarray、series, map, lists, dict 等类型)。
index:索引值,或者可以称为行标签。
columns:列标签,默认为 RangeIndex (0, 1, 2, …, n) 。
dtype:数据类型。
copy:拷贝数据,默认为 False。
Pandas DataFrame 是一个二维的数组结构,类似二维数组
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
names修改列名是直接添加一行

columns在原有的基础上修改

在这里插入图片描述

在这里插入图片描述
如果只是单纯的read_csv得到的数据类型是DataFrame
如果加了chunksize那么得到的类型是TextFileReader 就会有一个迭代器

数据类型变了

初步观察

查看数据的基本信息
chunker.info()

在这里插入图片描述

df.describe()查看
在这里插入图片描述

Series可以用字典实例化
值 index键

观察数据

观察前面10行数据

chunker.head(10)

观察后面5行数据

chunker.tail(5)

在这里插入图片描述

判断数据是否为空
chunker.isnull().head()

在这里插入图片描述

保存数据

chunker.to_csv('',encoding=‘utf-8/'GBK')

pandas 基础

1.4知道你的数据叫什么

pandas的两个数据类型DataFrame和Series

DataFrame可以理解为Excel中的一张表,
Series可以理解为一张Excel表的一行或一列数据。
Series可以理解为一维数组,它和一维数组的区别,在于Series具有索引

Series

1.创建Series
默认索引

money_series = pd.Series([200,300,10,15],name="money")
未设置索引的情况下自动从0开始
根据索引获取具体的值

money_series = money_series.sort_values()
# 根据值进行排序


自定义索引
money_series = pd.Series([200, 300, 10, 5], index=['d', 'c', 'b', 'a'], name='money') 

money_series.index #查看索引
money_series=money_series.sort_index()#根据索引进行排序
money_series.iloc[-1]

切片
money_series = pd.Series({'d':200,'c':300,'b':10,'a':5},name='money')

money_series.loc['c':'a':-1]#从c取到a 倒序

money_series.loc[['d', 'a']] # d, a的值,等价于 money_series[['d', 'a']]


money_series[money_series > 50] # 选取大于50的值

money_series[lambda x: x ** 2 > 50] # 选取值平方大于50的值
DataFrame

1.创建DataFrame

  • 从字典中创建
df = pd.DataFrame({'单价': [100, 200, 30], '数量': [3, 3, 10]}) 

df = pd.DataFrame({'单价': [100, 200, 30], '数量': [3, 3, 10]}, index=['T001', 'T002', 'T003'])
  • 通过Series创建
price_series = pd.Series([100, 200, 30], index=['T001', 'T002', 'T005'])
quantity_series = pd.Series([3, 3, 10, 2], index=['T001', 'T002', 'T003', 'T004'])
df = pd.DataFrame({'单价': price_series, '数量': quantity_series})
  • 通过excel文件读取 demo.dat

任务一:

sdata = {‘Ohio’: 35000, ‘Texas’: 71000, ‘Oregon’: 16000, ‘Utah’: 5000}在这里插入图片描述
在这里插入图片描述
任务二
在这里插入图片描述
任务三
在这里插入图片描述
任务四
在这里插入图片描述
在这里插入图片描述
任务五
在这里插入图片描述
删除命令del
思考题:

DataFrame删除指定的行和列

drop()

DataFrame指定的行删除
按行名指定(行标签)
它由第一个参数labels和第二个参数axis指定。行指定axis= 0。
print(df.drop(‘Charlie’, axis=0))

按行号指定
print(df.drop(index=‘Charlie’))
删除多行(列表)
print(df.drop([‘Bob’, ‘Dave’, ‘Frank’]))
print(df.drop(index=[‘Bob’, ‘Dave’, ‘Frank’]))

未设置行名,则index默认为整数序号

DataFrame指定的列删除
按列名指定(列标签)
它由第一个参数labels和第二个参数axis指定。列指定axis= 1。
按列号指定
df.drop(columns=‘state’)
关于inplace参数
是否在原对象基础上进行修改
inplace = True:不创建新的对象
直接对原始对象进行修改; inplace = False:
对数据进行修改,创建并返回新的对象承载其修改结果。默认是False
可以通过同时指定参数index和column来删除多行/多列

删除缺失值NaN和删除具有重复元素的行,

Pandas删除,替换并提取其中的缺失值NaN(dropna,fillna,isnull)
当使用pandas读取csv文件时,如果元素为空,则将其视为缺失值NaN(非数字)
使用**dropna()方法删除缺失值,使用fillna()**方法用其他值替换(填充)缺失值。

替换

1.用通用值统一替换
如果指定要用参数替换的值,则所有缺少的值NaN都将替换为该值。
print(df.fillna(0))
为每列替换不同的值
**2.**将字典指定为参数时,每列将替换一个不同的值。字典键是列标签(列名),而值是要替换的值。未指定的列仍缺少值NaN。
print(df.fillna({‘name’: ‘XXX’, ‘age’: 20, ‘point’: 0}))
3.指定pandas.Series。具有与pandas.Series中的标签匹配的列标签(列名)的列中缺少的值将替换为pandas.Series值
s_for_fill = pd.Series([‘ZZZ’, 100], index=[‘name’, ‘age’])
print(s_for_fill)
print(df.fillna(s_for_fill))
4. mean()方法计算每列的平均值
print(df.fillna(df.mean()))
5.要替换中位数,请使用中位数()方法。在偶数的情况下,两个中心值的平均值是中值。
print(df.fillna(df.median()))
6最频繁值的取得。mode()返回pandas.DataFrame,因此iloc [0]将第一行作为pandas.Series。
print(df.fillna(df.mode().iloc[0]))
7.替换为上一个或下一个值
通过使用
method参数
,可以替换之前和之后的值,而不是指定的值。 如果
method =‘ffill’
,它将被以前的值替换;如果
method =‘bfill’
,将被后面的值替换。对于时间序列数据很有用。
**8.**指定连续更换的最大数量
使用参数limit,可以指定连续替换的最大数量
print(df.fillna(method=‘bfill’, limit=1))

print(df[df[‘point’].isnull()])
print(df[‘point’].isnull())

如果要选择并检查特定列中包含缺失值的行,通过isull()方法,并通过布尔索引引用进行检查提取。
如果要提取包含缺失值的行或列,使用**isnull(),也可以使用numpy.isnan()和math.isnan()**方法确定元素是否缺失。

提取

df2 = df.dropna(how=‘all’).dropna(how=‘all’, axis=1)
print(df2)

pandas.DataFrame isnull()方法确定每个元素是否为缺失值,并返回为True或False的pandas.DataFrame。

print(df2.isnull())
如果任何行或列包含True,则any方法将返回True。如果参数axis= 1,则在该行上执行处理。 axis=0在该列上处理
print(df2.isnull().any(axis=1))
print(df2[df2.isnull().any(axis=1)])

删除

del 或者用pop 方法删除内容
drop方法

删除所有值均缺失的行/列
指定了参数how =‘any’,则将删除至少包含一个缺失值的行。默认值为how =‘any’。
print(df2.dropna(how=‘any’))
如果指定了参数
how =‘all’
,则将删除所有缺少值的行。
print(df.dropna(how=‘all’))

如果设置axis = 1,则将删除所有缺少值的
print(df.dropna(how=‘all’, axis=1))
axis=0删除所有缺失值的
axis = [0,1],则会删除所有缺失值的行和列
从版本0.23.0开始,将不推荐使用(不推荐使用)轴列表和元组规范。 如果要同时应用于行和列,则可以重复应用dropna()

根据不缺少值的元素数量删除行/列

参数thresh中指定数字,可以根据不缺少值的元素数量删除行和列。
如果thresh = 3,则保留包含三个或更多个不丢失值的元素的行,并删除其他行(包含两个或更多个不丢失值的元素的行)。
如果axis= 1,则应用于列。
print(df.dropna(thresh=3, axis=1))

删除特定行/列中缺少值的列/行

如果要基于特定的行/列删除,请在列表的参数子集中指定要定位的行/列标签
例如subset = [‘name’]
name属性有缺失的行删除
如果指定了多列,则默认为删除所有缺少指定值的行。
print(df.dropna(subset=[‘age’, ‘state’]))A||B
如果参数how =‘all’,则仅删除所有指定列均缺少值的行。
A&&B

如果数据是一维pandas.Series,则只需调用dropna()。缺少的值将被删除。

注意,用==与np.nan或math.nan比较会返回False。

Pandas中缺失值NaN的介绍
在Pandas中,如果列包含任何缺失值NaN,则即使所有其他值均为整数int,该列的dtype也将被视为浮点。
浮点类型列的缺失值是NumPy的numpy.float64

如果包含字符串str值,则其pandas.Series(和pandas.DataFrame列)数据类型将为object。 None不会转换为numpy.float64的nan并保持为None,但是它是dropna()和fillna()的对象
如果有一个您想当作缺失值的值,例如字符串“ NaN”,则可以使用replace()方法将其替换为缺失值。

s_nan_str_replace = s_nan_str.replace({'NaN': pd.np.nan, 'nan': pd.np.nan})
print(s_nan_str_replace)

将缺失值作为Pandas中的缺失值NaN
缺失值NaN的删除方法

  • 删除所有值均缺失的行/列
  • 删除至少包含一个缺失值的行/列
  • 根据不缺失值的元素数量删除行/列
  • 删除特定行/列中缺失值的列/行
    pandas.Series
    替换(填充)缺失值
    用通用值统一替换
    为每列替换不同的值
    用每列的平均值,中位数,最频繁值等替换
    替换为上一个或下一个值
    指定连续更换的最大数量
    pandas.Series
    提取缺失值
    提取特定行/列中缺少值的列/行
    提取至少包含一个缺失值的行/列
任务六

drop将
在这里插入图片描述
drop隐藏列元素axis=1
如果要完全删除就用inplace=true

1.5筛选的逻辑

在这里插入图片描述
以age为条件,将年龄在10岁和50岁一下的乘客信息显示出来,并将这个数据命名为midage

midage = df[(df[“Age”]>10)& (df[“Age”]<50)]
midage.head(3)
在这里插入图片描述
一定要加括号
在这里插入图片描述

任务三reset_index

在这里插入图片描述
reset_index的作用是重新设置dataframe的index,范围为0~len(df)。 。 reindex的作用是按照原有的列进行重新生成一个新的df。
数据清洗时,会将带空值的行删除,此时DataFrame或Series类型的数据不再是连续的索引,可以使用reset_index()重置索引。
在获得新的index,原来的index变成数据列,保留下来。
不想保留原来的index,使用参数 drop=True,默认 False。

在这里插入图片描述
reset_index之后
在这里插入图片描述

loc方法

在这里插入图片描述

iloc方法

indexlocation
在这里插入图片描述

iloc和loc区别
loc和iloc函数都是用来选择某行的,iloc与loc的不同是:iloc是按照行索引所在的位置来选取数据,参数只能是整数。 而loc是按照索引名称来选取数据,参数类型依索引类型而定

3rd探索性数据分析

1.6了解你的数据吗

np.arrange()

#一个参数 默认起点0,步长为1 输出:[0 1 2]
a = np.arange(3)

#两个参数 默认步长为1 输出[3 4 5 6 7 8]
a = np.arange(3,9)

#三个参数 起点为0,终点为3,步长为0.1 输出[ 0.   0.1  0.2  0.3  0.4  0.5  0.6  0.7  0.8  0.9  1.   1.1  1.2  1.3  1.4 1.5  1.6  1.7  1.8  1.9  2.   2.1  2.2  2.3  2.4  2.5  2.6  2.7  2.8  2.9]
a = np.arange(0, 3, 0.1)

numpy.arange(n).reshape(a, b) 依次生成n个自然数,并且以a行b列的数组形式显示
mat (or array).reshape(c, -1) 必须是矩阵格式或者数组格式,才能使用 .reshape(c, -1) 函数, 表示将此矩阵或者数组重组,以 c行d列的形式表示
-1自动计算d:d=数组或者矩阵里面所有的元素个数/c, d必须是整数,不然报错)
numpy.arange(a,b,c) 从 数字a起, 步长为c, 到b结束,生成array
numpy.arange(a,b,c).reshape(m,n) :将array的维度变为m 行 n列。
reshape(1,-1)转化成1行
reshape(2,-1)转换成两行:
在这里插入图片描述

frame.sort_index()
frame.sort_index(axis=1)

frame.sort_index(axis=1, ascending=False)
frame.sort_values(by=‘c’, ascending=True)

frame.sort_values(by=[‘a’, ‘c’], ascending=False)
text.sort_values(by=[‘票价’, ‘年龄’], ascending=False).head(3)
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

这里的点的作用是加小数点

在这里插入图片描述

pandas最重要的一个功能是,它可以对不同索引的对象进行算术运算。在将对象相加时,如果存在不同的索引对,则结果的索引就是该索引对的并集。对于有数据库经验的用户,这就像在索引标签上进行自动外连接。看一个简单的例子:

自动的数据对齐操作在不重叠的索引处引入了NA值。缺失值会在算术运算过程中传播

在算术方法中填充值
在对不同索引的对象进行算术运算时,你可能希望当一个对象中某个轴标签在另一个对象中找不到时填充一个特殊值(比如0)

使用df1的add方法,传入df2以及一个fill_value参数:
在这里插入图片描述

这两句话是等价的

 1 / df1
df1.rdiv(1)

在这里插入图片描述
带有重复标签的轴索引
直到目前为止,我所介绍的所有范例都有着唯一的轴标签(索引值)。虽然许多pandas函数(如reindex)都要求标签唯一,但这并不是强制性的。我们来看看下面这个简单的带有重复索引值的Series
索引的is_unique属性可以告诉你它的值是否是唯一的
如果某个索引对应多个值,则返回一个Series;而对应单个值的,则返回一个标量值
在这里插入图片描述

pandas describe()喊出查看

函数应用和映射

NumPy的ufuncs(元素级数组方法)也可用于操作pandas对象
另一个常见的操作是,将函数应用到由各列或行所形成的一维数组上。DataFrame的apply方法即可实现此功能
这里的函数f,计算了一个Series的最大值和最小值的差,在frame的每列都执行了一次。结果是一个Series,使用frame的列作为索引。
如果传递axis=’columns’到apply,这个函数会在每行执行
许多最为常见的数组统计功能都被实现成DataFrame的方法(如sum和mean),因此无需使用apply方法。
传递到apply的函数不是必须返回一个标量,还可以返回由多个值组成的Series
元素级的Python函数也是可以用的。假如你想得到frame中各个浮点值的格式化字符串,使用applymap即可
之所以叫做applymap,是因为Series有一个用于应用元素级函数的map方法

在排序时,任何缺失值默认都会被放到Series的末尾
当排序一个DataFrame时,你可能希望根据一个或多个列中的值进行排序。将一个或多个列的名字传递给sort_values的by选项即可达到该目的

在这里插入图片描述

from matplotlib import pyplot as plt
这个包主要用来画图用的

hist直方图
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
numpy.random模块对Python内置的random进行了补充,增加了一些用于高效生成多种概率分布的样本值的函数。例如,你可以用normal来得到一个标准正态分布的4×4样本数组

在这里插入图片描述
在这里插入图片描述
import matplotlib.pyplot as plt

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值