特征工程

2023-05-16

一、数据读取

1.1 读取CSV文件

1.1.1 原文件内容

原文件内容

1.1.2 读取csv

import csv
csv_file = "/home/aistudio/data/data20465/cities.csv"
f = open(csv_file)
data = csv.reader(f)    # ①
for line in data:
    print(line)

1.1.3 pandas读取

import pandas as pd
df = pd.read_csv(csv_file)    # ②
df

1.1.4 查看信息

diabetes =pd.read_csv(csv_file, index_col=0) # 不读取index
diabetes.shape #查看形状
diabetes.head() #查看前5行数据
diabetes.info() #查看描述信息
diabetes.dtypes #查看各列数据类型

1.2 读取excel文件

1.2.1 安装第三方模块

# 安装第三方模块到上述目录
!pip install xlrd -t /home/aistudio/external-libraries
!pip install openpyxl -t /home/aistudio/external-libraries

1.2.2 读取excel

jiangsu = pd.read_excel("/home/aistudio/data/data20465/jiangsu.xls")

1.2.3 写入excel

jiangsu.to_excel('work/files/jiangsu.xlsx')

1.2.4 基础操作

cpi = pd.read_excel("/home/aistudio/data/data20465/cpi.xls")
cpi.columns = cpi.iloc[1]    # ⑤
cpi = cpi[2:]    # ⑥
cpi.drop([11, 12], axis=0, inplace=True)    # ⑦
cpi['cpi_index'] = ['总体消费', '食品烟酒', '衣着', '居住', '生活服务', '交通通信', '教育娱乐', '医保', '其他']    # ⑧
cpi.drop(['指标'], axis=1, inplace=True)    # ⑨
cpi.reset_index(drop=True, inplace=True)    # ⑩
cpi.columns.rename('', inplace=True)    # ⑪
cpi

1.3 读取数据库数据

import pymysql
mydb = pymysql.connect(host="localhost",    # ①
                       user='root',
                       password='1q2w3e4r5t',
                       db="books",
                      )
cursor = mydb.cursor()    # ②
sql = "select * from mybooks"    # ③
cursor.execute(sql)    # ④
datas = cursor.fetchall()    # ⑤
for data in datas:
    print(data)
sql_count = "SELECT COUNT(1) FROM city"
cursor.execute(sql_count)
n = cursor.fetchone()    # 获得一个返回值
n

1.4 读取来着API的数据

import requests
response = requests.get("https://api.github.com/users/qiwsir")    # ①
response.json()

在这里插入图片描述

import pandas as pd
data = response.json()    # ②
login = data['login']     # ③
name = data['name']
blog = data['blog']
public_repos = data['public_repos']
followers = data['followers']
html_url = data['html_url']
df = pd.DataFrame([[login, name, blog, public_repos, followers, html_url]], 
                  columns=['login', 'name', 'blog', 'public_repos', 'followers', 'html_url'])    # ④
df

在这里插入图片描述

二、数据清理

2.1 数据查看

import pandas as pd
df = pd.read_csv("/home/aistudio/data/data20505/pm2.csv")
df.sample(10)

在这里插入图片描述

df.shape  # (264, 4)
df.info() #查看信息

在这里插入图片描述

df.dtypes

在这里插入图片描述

2.2 转换数据类型

import pandas as pd
df = pd.DataFrame([{'col1':'a', 'col2':'1'}, 
                           {'col1':'b', 'col2':'2'}])
df.dtypes

在这里插入图片描述

df['col2-int'] = df['col2'].astype(int)    # ①
df.dtypes

在这里插入图片描述

s = pd.Series(['1', '2', '4.7', 'pandas', '10'])    
s.astype(float, errors='ignore')

在这里插入图片描述

pd.to_numeric(s, errors='coerce')

在这里插入图片描述

import pandas as pd
df = pd.read_csv('/home/aistudio/data/data20506/sales_types.csv') 
df.info()

在这里插入图片描述

df[['Customer Number']]

在这里插入图片描述

df['Customer Number'].astype(int).astype(str)

在这里插入图片描述

df[['2016', '2017']]

在这里插入图片描述

def convert_money(value):
    new_value = value.replace("$","").replace(",","")  # ②
    return float(new_value)

df['2016'].apply(convert_money)    # ③
df[['Percent Growth']]

在这里插入图片描述

df['Percent Growth'].apply(lambda x: float(x.replace("%", "")) / 100)

在这里插入图片描述

df[['Active']]

在这里插入图片描述

import numpy as np
np.where(df['Active']=='Y', 1, 0)

在这里插入图片描述

df[['Year', 'Month', 'Day']]

在这里插入图片描述

pd.to_datetime(df[['Month', 'Day', 'Year']])

在这里插入图片描述

2.3 处理重复数据

import pandas as pd
d = {'Name':['Newton', 'Galilei', 'Einstein', 'Feynman', 'Newton', 'Maxwell', 'Galilei'],
             'Age':[26, 30, 28, 28, 26, 39, 40],
             'Score':[90, 80, 90, 100, 90, 70, 90]}
df = pd.DataFrame(d,columns=['Name','Age','Score'])
df

在这里插入图片描述

df.duplicated()

在这里插入图片描述

df.duplicated('Age', keep='last')  #保留最后一个

在这里插入图片描述

df.duplicated(['Age', 'Score'])
df.drop_duplicates() #删除重复值
#df.drop_duplicates('Age', keep='last')

在这里插入图片描述

2.4 缺失值处理

2.4.1 判断缺失值

df = pd.DataFrame({"one":[1, 2, np.nan], "two":[np.nan, 3, 4]})
df.isna()
hitters = pd.read_csv("/home/aistudio/data/data20507/Hitters.csv")
hitters.isna().any()

在这里插入图片描述

(hitters.shape[0] - hitters.count()) / hitters.shape[0]

在这里插入图片描述

2.4.2 删除缺失值

df.dropna(axis=0, how='all')    # how声明删除条件
df.dropna(thresh=2)    # 非缺失值小于2的删除
new_hitters = hitters.dropna()
new_hitters.isna().any()

2.4.3 用指定值填充缺失值

df = pd.DataFrame({'ColA':[1, np.nan, np.nan, 4, 5, 6, 7], 'ColB':[1, 1, 1, 1, 2, 2, 2]})
df['ColA'].fillna(method='ffill')
pdf['Height-na'].fillna(pdf['Height-na'].mean(), inplace=True)   
pdf
pdf2 = persons.sample(20)
pdf2['Height-na'] = np.where(pdf2['Height'] % 5 == 0, np.nan, pdf2['Height'])    # 制造缺失值

from sklearn.impute import SimpleImputer
imp_mean = SimpleImputer(missing_values=np.nan, strategy='mean')    # ③
col_values = imp_mean.fit_transform(pdf2['Height-na'].values.reshape((-1, 1)))    # ④
col_values

2.5 处理异常值

2.5.1 查看异常值

%matplotlib inline
import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv("/home/aistudio/data/data20510/experiment.csv", index_col=0)

fig, ax = plt.subplots()
ax.scatter(df['alpha'], df['belta'])

在这里插入图片描述

import seaborn as sns
sns.set(style="whitegrid")

tips = sns.load_dataset("tips")    #加载数据集
tips.sample(5)

在这里插入图片描述

sns.boxplot(x="day", y="tip", data=tips, palette="Set3")

在这里插入图片描述

ax = sns.boxplot(x="day", y="tip", data=tips)
ax = sns.swarmplot(x="day", y="tip", data=tips, color=".25")   

三、特征变换

3.1 特征数值化

import pandas as pd
df = pd.DataFrame({"gene_segA": [1, 0, 0, 1, 1, 1, 0, 0, 1, 0],
                   "gene_segB": [1, 0, 1, 0, 1, 1, 0, 0, 1, 0],
                   "hypertension": ["Y", 'N', 'N', 'N', 'N', 'N', 'Y', 'N', 'Y', 'N'],
                   "Gallstones": ['Y', 'N', 'N', 'N', 'Y', 'Y', 'Y', 'N', 'N', 'Y']
                  })
df

在这里插入图片描述

df.replace({"N": 0, 'Y': 1})

在这里插入图片描述

from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
le.fit_transform(df['hypertension'])
le.fit_transform([1, 3, 3, 7, 3, 1])
le.inverse_transform([0, 1, 1, 2, 1, 0])

在这里插入图片描述

from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()    # ①
le.fit(['white', 'green', 'red', 'green', 'white'])    # ②
le.classes_    # ③
#out : array(['green', 'red', 'white'], dtype='<U5')
le.transform(["green", 'green', 'green', 'white'])    # ④
# array([0, 0, 0, 2])

3.2 特征二值化

import pandas as pd
pm25 = pd.read_csv("/home/aistudio/data/data20505/pm2.csv")
pm25.head()

在这里插入图片描述

import numpy as np
pm25['bdays'] = np.where(pm25["Exposed days"] > pm25["Exposed days"].mean(), 1, 0)
pm25.sample(10)

在这里插入图片描述

from sklearn.preprocessing import Binarizer
bn = Binarizer(threshold=pm25["Exposed days"].mean())    # ①
result = bn.fit_transform(pm25[["Exposed days"]])   # ②
pm25['sk-bdays'] = result
pm25.sample(10)

在这里插入图片描述

3.3 OneHot编码

persons = pd.DataFrame({"name":["Newton", "Andrew Ng", "Jodan", "Bill Gates"], 'color':['white', 'yellow', 'black', 'white']})
persons

在这里插入图片描述

from sklearn.preprocessing import OneHotEncoder
ohe = OneHotEncoder()
features = ohe.fit_transform(persons[['color']])
features.toarray()

在这里插入图片描述

size_mapping = {'XL': 3, 'L': 2, 'M': 1}
df['size'] = df['size'].map(size_mapping)    # ②
df

在这里插入图片描述

3.4 数据变换

import numpy as np
data.drop([0], inplace=True)    # 去掉0,不计算log0
data['logtime'] = np.log10(data['time'])    # ①
data['logloc'] = np.log10(data['location'])    # ②
data.head()

3.5 特征离散化

ages2 = pd.DataFrame({'years':[10, 14, 30, 53, 300, 32, 45], 'name':['A', 'B', 'C', 'D', 'E', 'F', 'G']})
klass2 = pd.cut(ages2['years'], 3, labels=['Young', 'Middle', 'Senior'])    # ②
ages2['label'] = klass2
ages2
ages2 = pd.DataFrame({'years':[10, 14, 30, 53, 300, 32, 45], 'name':['A', 'B', 'C', 'D', 'E', 'F', 'G']})
klass2 = pd.cut(ages2['years'], bins=[9, 30, 50, 300], labels=['Young', 'Middle', 'Senior'])    # ③
ages2['label'] = klass2
ages2

在这里插入图片描述

3.6 数据规范化

from sklearn import datasets
from sklearn.preprocessing import StandardScaler 
iris = datasets.load_iris()
iris_std = StandardScaler().fit_transform(iris.data) 

在这里插入图片描述

from sklearn.preprocessing import MinMaxScaler
iris_mm = MinMaxScaler().fit_transform(iris.data)    # ②
iris_mm[:5]

四、特征选择

4.1 过滤器法


from sklearn.datasets import load_iris
from sklearn.feature_selection import SelectKBest    # ①
from sklearn.feature_selection import chi2    
iris = load_iris()
X, y = iris.data, iris.target
skb = SelectKBest(chi2, k=2)    # ②
result = skb.fit(X, y)    # ③
print("X^2 is: ", result.scores_)
print("P-values is: ", result.pvalues_)

4.2 嵌入法

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.feature_selection import SelectFromModel
from sklearn.linear_model import LogisticRegression

df_wine = pd.read_csv("/home/aistudio/data/data20527/wine_data.csv")
X, y = df_wine.iloc[:, 1:], df_wine.iloc[:, 0].values
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0, stratify=y)

std = StandardScaler()
X_train_std = std.fit_transform(X_train)
X_test_std = std.fit_transform(X_test)

lr = LogisticRegression(C=1.0, penalty='l1')    # ①
model = SelectFromModel(lr, threshold='median')    # ②
X_new = model.fit_transform(X_train_std, y_train)
X_new.shape

五、特征抽取

5.1 无监督特征抽取

from sklearn.decomposition import PCA
import numpy as np
pca = PCA()    # ①
X_pca = pca.fit_transform(X)    # ②
np.round(X_pca[: 4], 2)    # ③
pca = PCA(n_components=2)    # ④
X_pca = pca.fit_transform(X)
X_pca[: 4]

from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
X_train, X_test, y_train, y_test = train_test_split(X, iris.target,
                                                   test_size=0.3, 
                                                    random_state=0)
clf = DecisionTreeClassifier()
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)

X_train_pca, X_test_pca, y_train_pca, y_test_pca = train_test_split(X_pca, iris.target,
                                                   test_size=0.3, 
                                                    random_state=0)
clf2 = DecisionTreeClassifier()
clf2.fit(X_train_pca, y_train_pca)
y_pred_pca = clf2.predict(X_test_pca)
accuracy2 = accuracy_score(y_test_pca, y_pred_pca)

print("dataset with 4 features: ", accuracy)
print("dataset with 2 features: ", accuracy2)

5.2 有监督特征抽取

from sklearn.datasets.samples_generator import make_classification
X,y = make_classification(n_samples=1000,
                          n_features=4,
                          n_redundant=0,
                          n_classes=3,
                          n_clusters_per_class=1,
                          class_sep=0.5,
                          random_state=10)
X.shape, y.shape
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

特征工程 的相关文章

随机推荐

  • 几种经典非线性滤波算法简单概括(EKF,UKF,CKF,PF)

    几种经典非线性滤波算法概括 xff08 EKF xff0c UKF xff0c CKF xff0c PF xff09 上一篇文章阐述了Kalman滤波算法 xff0c 该算法是在线性高斯下的最优滤波估计算法 但是在实际控制系统中 xff0c
  • 扩展卡尔曼滤波(EKF)算法详细推导及仿真(Matlab)

    扩展卡尔曼滤波 xff08 EKF xff09 算法详细推导及仿真 xff08 Matlab xff09 扩展卡尔曼滤波算法是解决非线性状态估计问题最为直接的一种处理方法 xff0c 尽管EKF不是最精确的 最优 滤波器 xff0c 但在过
  • uio驱动编写 实例1

    AUTHOR xff1a Joseph Yang 杨红刚 lt eagle rtlinux 64 gmail com gt CONTENT uio驱动编写 实例1 NOTE xff1a linux 3 0 LAST MODIFIED xff
  • raspberry pi pico, 如何在macos平台使用picoprobe,vscode来debug程序

    debugprobe 80元人民币 再买一块pico 刷上debug程序 xff0c 仅要16元 xff0c 当然用便宜的 在mac上的vs code总是遇见问题 单独运行openocd时 xff0c 也有问题 xff0c 出现错误 CMS
  • 1—类、域、方法和实例对象

    Java 是面向对象的高级编程语言 xff0c 类和对象是 Java 程序的构成核心 围绕着 Java 类和 Java 对象 xff0c 有三大基本特性 xff1a 封装是 Java 类的编写规范 继承是类与类之间联系的一种形式 而多态为系
  • 常用数学公式汇总

    常用数学公式汇总 一 基础代数公式 1 平方差公式 xff1a xff08 a xff0b b xff09 xff08 a xff0d b xff09 xff1d a2 xff0d b2 2 完全平方公式 xff1a xff08 a b x
  • Kubernetes--API Server资源隔离

    Kubernetes的一些功能特性也与公有云提供商密切相关 xff0c 例如 xff1a 负载均衡服务 弹性公网IP 存储服务等 xff0c 具体实现也需要与API Server通信 xff0c 也属于运行商内部重点保障的安全区域 此外 x
  • 公式提取方法

    Mathpix Snipping Tool和MathType配合用法 Mathpix Snipping Tool是一个可以提取数学公式的工具 xff0c 当我们写毕业论文或者结课报告或者参加数学建模等比赛的用到的公式 xff0c 可以用这款
  • (学习unix编程)关于文件流与文件描述符的区别

    文件描述符 xff08 就是整数 xff09 用于在一个进程内唯一的标识打开的文件 这假定了内核能够在用户进程的描述符和内核内部使用的机构之间 xff0c 建立一种关联 xff08 深入linux内核架构 xff09 由于唯一标识进程的结构
  • 2000页kubernetes操作手册,内容详细代码清晰,小白也能看懂

    现如今 xff0c Kubernetes业务已成长为新时代的IT基础设施 xff0c 并成为高级运维工程师 架构师 后端开发工程师的必修技术栈 毫无疑问 xff0c Kubernetes是云计算发展演进的一次彻底革命性的突破 xff0c 只
  • Linux安装nodejs和npm

    最近window系统转向linux系统开发 xff0c linux系统的确适合程序员的开发 作为前端安装了nodejs和npm xff0c 遇到了一些坑 xff0c 赶紧记录下来 第一种安装方法 xff1a 安装nodejs xff1a s
  • 查看core dumped的详细错误原因

    什么是Core Dump Core的意思是内存 Dump的意思是扔出来 堆出来 开发和使用Unix程序时 有时程序莫名其妙的down了 却没有任何的提示 有时候会提示core dumped 这时候可以查看一下有没有形如core 进程号的文件
  • IntelliJ IDEA创建Servlet最新方法 Idea版本2020.2.2以及IntelliJ IDEA创建Servlet 404问题(超详细)

    第一次用IntelliJ IDEA写java代码 xff0c 之前都是用eclipse xff0c 但eclipse太老了 下面为兄弟们奉上IntelliJ IDEA创建Servlet方法 xff0c 写这个的目的也是因为在网上找了很多资料
  • Linux下做C语言/C++开发的一些建议

    相对于Linux下的C C 43 43 开发 xff0c 在windows下的初学者往往容易入门 xff0c 原因是visual studio 这个强大的工具隐藏了很多的细节 xff0c 好多人甚至以为拖拖控件 xff0c 写写消息响应函数
  • Target ‘STM32F4xx‘ uses ARM-Compiler ‘Default Compiler Version 5‘ which is not available.找不到v5版本解决方法

    现在官网上没有v5的版本了 xff0c keil默认安装的是v6的版本 xff0c 如果工程想要运行以前的工程 xff0c 可以设置将工程的编辑器从v5转到v6 xff0c 下面是方法 xff1a 1 使用MDK打开工程 2 选择 Proj
  • 关于imu的介绍

    1 imu时惯性运动丹云 xff0c 包含加速度计和陀螺传感器的组合 它被用来检查加速度和角速度 xff08 IMU传感器 xff0c 你所需要知道的全部 知乎 xff09 虽然时外文翻译的 xff0c 凡是整体风格清晰 2 imu的使用
  • LSTM与GRU

    LSTM 与 GRU 一 综述 LSTM 与 GRU是RNN的变种 xff0c 由于RNN存在梯度消失或梯度爆炸的问题 xff0c 所以RNN很难将信息从较早的时间步传送到后面的时间步 LSTM和GRU引入门 xff08 gate xff0
  • Pytorch 实战RNN

    一 简单实例 span class token comment coding utf8 span span class token keyword import span torch span class token keyword as
  • Pytorch : Dataset和DataLoader

    一 综述 Dataset 对数据进行抽象 xff0c 将数据包装为Dataset类 DataLoader 在 Dataset之上对数据进行进一步处理 xff0c 包括进行乱序处理 xff0c 获取一个batch size的数据等 二 Dat
  • 特征工程

    一 数据读取 1 1 读取CSV文件 1 1 1 原文件内容 1 1 2 读取csv span class token keyword import span csv csv file span class token operator 6