《利用python进行数据分析》第二版 第13章-Python建模库介 学习笔记

一、pandas与建模代码结合

用DataFrame.values属性将DataFrame转换为NumPy数组

import pandas as pd
import numpy as np
data = pd.DataFrame({
   
    'x0': [1, 2, 3, 4, 5],
    'x1': [0.01, -0.01, 0.25, -4.1, 0.],
    'y': [-1.5, 0., 3.6, 1.3, -2.]})
data
x0 x1 y
0 1 0.01 -1.5
1 2 -0.01 0.0
2 3 0.25 3.6
3 4 -4.10 1.3
4 5 0.00 -2.0
data.columns
'''Index(['x0', 'x1', 'y'], dtype='object')'''

# 用DataFrame.values属性将DataFrame转换为NumPy数组
data.values
'''
array([[ 1.  ,  0.01, -1.5 ],
       [ 2.  , -0.01,  0.  ],
       [ 3.  ,  0.25,  3.6 ],
       [ 4.  , -4.1 ,  1.3 ],
       [ 5.  ,  0.  , -2.  ]])
'''

向pd.DataFrame()传递含有列名的二维ndarray,可将数组转换为DataFrame

# 向pd.DataFrame()传递含有列名的二维ndarray,可将数组转换为DataFrame
df2 = pd.DataFrame(data.values, columns=['one', 'two', 'three'])
df2
one two three
0 1.0 0.01 -1.5
1 2.0 -0.01 0.0
2 3.0 0.25 3.6
3 4.0 -4.10 1.3
4 5.0 0.00 -2.0

选取DataFrame列的子集转换为ndarray

# 用loc选取列子集
model_cols = ['x0', 'x1']
data.loc[:, model_cols].values
'''
array([[ 1.  ,  0.01],
       [ 2.  , -0.01],
       [ 3.  ,  0.25],
       [ 4.  , -4.1 ],
       [ 5.  ,  0.  ]])
'''

# 用iloc选取列子集
data.iloc[:, :-2].values
# 直接选取列名
data[['x0', 'x1']].values
# 用reindex(),传递columns=[]
data.reindex(columns=['x0','x1']).values

用pd.Categorical([与行数相对应的每行的分类组成的列表], categories=[不同分类组成的列表])添加分类列

data['category'] = pd.Categorical(['a', 'b', 'a', 'a', 'b'], categories=['a', 'b'])
data
x0 x1 y category
0 1 0.01 -1.5 a
1 2 -0.01 0.0 b
2 3 0.25 3.6 a
3 4 -4.10 1.3 a
4 5 0.00 -2.0 b

用虚拟变量替换category列,要先创建虚拟变量,在删除category列,最后连接结果

# 用pd.get_dummies(df.category列名, prefix='category列名')创建虚拟变量,prefix设置新列名前缀
dummies = pd.get_dummies(data.category, prefix='category')
# df.drop('列名', axis=1)删除原来的分类列
# join将删除分类列的数据与虚拟变量连接
data_with_dummies = data.drop('category', axis=1).join(dummies)
data_with_dummies
x0 x1 y category_a category_b
0 1 0.01 -1.5 1 0
1 2 -0.01 0.0 0 1
2 3 0.25 3.6 1 0
3 4 -4.10 1.3 1 0
4 5 0.00 -2.0 0 1
# the same as above
# pd.get_dummies(df)会将df中不是数值型的列全部转换为虚拟变量,并在结果中字段将数值型列放在虚拟变量前
data_with_dummies2 = pd.get_dummies(data)
data_with_dummies2

# 但是要注意,如果原df中的数据列类似于 【是否已婚,是用1表示,否用0表示】,则需要先将此列转换为字符串,再用上面的方法。涉及到的转换方法见:https://www.pypandas.cn/docs/getting_started/basics.html#数据类型

二、用patsy创建模型描述

Patsy是一用于描述统计模型(尤其是线性模型)的Python库,能够很好的支持statsmodels中特定的线性模型。

Patsy的公式是特殊字符串语法,如:y ~ x0 + x1,这里的相加表示为模型创建的设计矩阵。即y、x0、x1表示向量的意思。

data = pd.DataFrame({
   
    'x0': [1, 2, 3, 4, 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值