# 【Python数据科学手册】专题：特征工程

### 1、分类数据

data = [
{'price': 850000, 'rooms': 4, 'neighborhood': 'Queen Anne'},
{'price': 700000, 'rooms': 3, 'neighborhood': 'Fremont'},
{'price': 650000, 'rooms': 3, 'neighborhood': 'Wallingford'},
{'price': 600000, 'rooms': 2, 'neighborhood': 'Fremont'}
]

{'Queen Anne': 1, 'Fremont': 2, 'Wallingford': 3};

from sklearn.feature_extraction import DictVectorizer
vec = DictVectorizer(sparse=False, dtype=int)
vec.fit_transform(data)

neighborhood 字段转换成三列来表示三个地点标签，每一行中用1 所在的列对应一个地点。当这些分类特征编码之后，你就可以和之前一样拟合Scikit-Learn 模型了：

vec.get_feature_names()

vec = DictVectorizer(sparse=True, dtype=int)
vec.fit_transform(data)

### 2、文本特征

sample = ['problem of evil',
'evil queen',
'horizon problem']

from sklearn.feature_extraction.text import CountVectorizer

vec = CountVectorizer()
X = vec.fit_transform(sample)
X

import pandas as pd
pd.DataFrame(X.toarray(), columns=vec.get_feature_names())

from sklearn.feature_extraction.text import TfidfVectorizer
vec = TfidfVectorizer()
X = vec.fit_transform(sample)
pd.DataFrame(X.toarray(), columns=vec.get_feature_names())

### 4、衍生特征

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt

x = np.array([1, 2, 3, 4, 5])
y = np.array([4, 2, 1, 3, 7])
plt.scatter(x, y);

from sklearn.linear_model import LinearRegression
X = x[:, np.newaxis]
model = LinearRegression().fit(X, y)
yfit = model.predict(X)
plt.scatter(x, y)
plt.plot(x, yfit);

from sklearn.preprocessing import PolynomialFeatures
poly = PolynomialFeatures(degree=3, include_bias=False)
X2 = poly.fit_transform(X)
print(X2)

model = LinearRegression().fit(X2, y)
yfit = model.predict(X2)
plt.scatter(x, y)
plt.plot(x, yfit);

### 5、缺失值填充

from numpy import nan
X = np.array([[ nan, 0,   3  ],
[ 3,   7,   9  ],
[ 3,   5,   2  ],
[ 4,   nan, 6  ],
[ 8,   8,   1  ]])
y = np.array([14, 16, -1,  8, -5])


from sklearn.preprocessing import Imputer
imp = Imputer(strategy='mean')
X2 = imp.fit_transform(X)
X2

model = LinearRegression().fit(X2, y)
model.predict(X2)

### 6、特征管道

Scikit-Learn 提供了一个管道对象，如下所示：

from sklearn.pipeline import make_pipeline

model = make_pipeline(Imputer(strategy='mean'),
PolynomialFeatures(degree=2),
LinearRegression())

model.fit(X, y)  # X with missing values, from above
print(y)
print(model.predict(X))

|
3天前
|

Python数据分析高手修炼手册：线性回归算法，让你的数据说话更有力
【8月更文挑战第1天】在数据驱动时代,掌握数据分析技能至关重要。线性回归是最基础且强大的工具之一,能从复杂数据中提炼简单有效的模型。本文探索Python中线性回归的应用并通过实战示例加深理解。线性回归建立变量间线性关系模型:Y = β0 + β1*X + ε。使用scikit-learn库进行实战:首先安装必要库,然后加载数据、训练模型并评估性能。示例展示了如何使用LinearRegression模型进行房价预测,包括数据可视化。掌握线性回归,让数据“说话”更有力。
13 2
|
6天前
|

【7月更文挑战第30天】通过本文，我们了解了如何使用Python进行数据科学探索的全过程，从环境搭建、数据收集、清洗、分析到机器学习应用。Python的强大功能和丰富的库使得数据科学探索变得简单而高效。希望这篇文章能为您的数据科学之旅提供有价值的参考。随着实践的深入，您将逐渐掌握更多高级技术和方法，解锁数据背后的无限潜力。
|
6天前
|
API Python
Python高手修炼手册：精通文件系统操作，掌控I/O管理，提升编程效率
【7月更文挑战第30天】在 Python 编程中, 文件系统操作与 I/O 管理是连接程序与数据的关键。初学者常因路径错误和权限问题受挫, 而高手能自如管理文件。传统 os 和 os.path 模块易出错, pathlib 提供了更直观的对象导向 API。I/O 方面, 同步操作会阻塞程序, 异步 (如使用 aiofiles) 则能大幅提升并发能力。真正的高手不仅掌握 API, 更能预见性能瓶颈并优化代码, 实现高效与优雅。
10 1
|
17天前
|

Python大佬耗费13年，始成400页《Python工匠》手册
Python 能干的事情实在太多了，掰着指头数有点不够用。 Web 开发、数据分析、网络爬虫、自动化运维、后台开发、机器学习....... 如果你知道主攻哪个方向，只需重点去学习。不过，不论哪个方向，Python 编程的核心知识都是需要掌握的。 但是今天咱们要讨论的一件事儿，是对于一些入门了的盆友，写了不少代码，一到面试就卡bug，又或者在项目中运用Python，代码不怎么样，却自我感觉良好，结果到处出漏洞，一堆的烂摊子。 我相信，这样的朋友肯定不少，可是目前市面上能帮助大家解决这种问题的书籍又非常稀缺，今天我就给大家推荐一本能帮助你解决燃煤之急的书籍。
33 9
|
24天前
|

Python 大神修炼手册：图的深度优先&广度优先遍历，深入骨髓的解析
【7月更文挑战第12天】Python进阶必学：DFS和BFS图遍历算法。理解图概念，用邻接表建无向图，实现DFS和BFS。DFS适用于查找路径，BFS解决最短路径。通过实例代码加深理解，提升编程技能。
19 4
|
23天前
|
Python

Python (发音:[ 'paiθ(ə) n; (US) 'paiθɔn ] n. 蟒蛇，巨蛇 )，是一种面向对象的解释性的计算机程序设计语言，也是一种功能强大而完善的通用型语言，已经具有十多年的发展历史，成熟且稳定。Python 具有脚本语言中最丰富和强大的类库，足以支持绝大多数日常应用。 Python 语言的特点：
32 2
|
24天前
|

39 2
|
24天前
|

29 2
|
27天前
|

27 2
|
1月前
|

【7月更文挑战第5天】了解数据科学面试中的Python数据分析重点，包括Pandas（DataFrame）、NumPy（ndarray）和Matplotlib（图表绘制）。数据预处理涉及缺失值（dropna(), fillna()）和异常值处理。使用describe()进行统计分析，通过Matplotlib和Seaborn绘图。回归和分类分析用到Scikit-learn，如LinearRegression和RandomForestClassifier。
40 3