pd.set_option("display.max_columns",100) # 最大显示列数
pd.set_option("display.max_rows",100) # 最大显示行数
#1.1
import matplotlib
font = {“family”:“MicroSoft YaHei”,“weight”:“bold”}
matplotlib.rc(“font”,**font)
#1.2
plt.rcParams[“font.sans-serif”] = “SimHei” # 中文显示问题
plt.rcParams[“axes.unicode_minus”] = False #解决负数坐标显示问题
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"
""" info(verbose=True,null_counts=True) """
import warnings
warnings.filterwarnings("ignore")
""" num_features = train.select_dtypes(include=[np.number/np.object]).columns """
bin = [i*10 for i in range(20)]
data["new_feature"] = pd.cut(data["power"],bin,labels=False)
data["new"+feature] = data.groupby(feature)[target].transform("mean/max/min").values
“”"
dum = pd.get_dummies(data['col1',"col2"])
data = data.join(dum)
data = data.drop(["col1","col2"],axis=1)
“”""
plt.legend(["name1","name2"],loc="upper right")
"""
关于pd.read_csv的参数:
sep="" 确定切分格式
headers=None 默认没有首行信息 , names参数:添加首航信息,列表形式
index_col=0 :使用第一列作为默认索引
parse_dates=[0] :使日期规范化
“”"
“”"
利用groupby的时候最好使用一个reset_index(),重排列索引,避免乱序问题
利用pd.concat拼接的时候也是同理,需要用到reset_index,防止出现不必要的错误,可能出现index列,删除即可!
pd.concat([],axis=0/1)
np.concatenate([])
“”"
“”"
处理数据包括:
1.检查数据
2.清理数据
3.测试数据
一般而言检查数据希望回答一下问题:1.数据格式有什么问题? 2.数据的数值有什么问题? 3.数据需要修复或者删除嘛?
干净数据:每一列代表一个特征,每一行代表一个样例
很难判断异常值是由于测量误差引起的,或者是不正确的单位及库数据,或者真正的异常,如果我们决定排除任何数据,
需要记录排除的数据并提供排除的理由。
数据探索的核心:
1.数据质量分析
2.数据特征分析:分布、对比、周期性、相关性、常见统计量等。
“”"
“”"
jieba分词系列以及wordcolud词云图分析
lcut:为精确模式,返回的是一个列表
cut:添加参数cut_all=False才为精确模式,返回的是一个迭代器
wordcolud为自己统计词频,并且绘制出词云图,可以加载停用词表。
“”"
“”"
fig = plt.figure()
ax1 = fig.add_subplot(2,1,1)
cars.plot(x,y,kind="scatter",ax=ax1)
“”"
from sklearn.metrics import mean_squared_error ,mean_absolute_error ,roc_auc_score ,roc_curve
“”"
np.random.shuffle() # 对数据进行洗牌,不会返回值
np.random.permuation() # 对索引进行洗牌,会返回值,传入的数据是索引,或者数字
“”"
交叉验证系列 ---------------现在都在model_selection模块下面
from sklearn.model_selection import KFold,train_test_split,cross_val_score
“”"
机器学习中不识别object字符类型,需要转换为数值型
机器学习关心的是数值,不同的浮动范围的特征,需要进行初始化处理
当用机器学习算法得到一个不满意的结果时,先找数据方面的问题,比如:数据与label之间的关系,数据内部是否有什么问题,
当作数据预处理时是否哪块处理错了,最后采取找模型的参数、算法、评价标准方面的错误。
“”"
“”"
pandas_profiling库的使用
pandas_profiling.ProfileReport(player) #自动生成报表视图
“”"
“”"
#流程:
1.数据背景介绍
2.数据读取与预处理
3.数据切分模块
4.缺失值可视化分析
5.特征可视化展示
6.多个特征之间关系分析
7.报表可视化分析
8。探索有意义变量之间的关系
“”"
“”"
pd.crosstab:用于计算因子的频率表
pd.crosstab(index,columns,values,aggfunc)
如果crosstab只接收两个Series,它将提供一个频率表,用a作为唯一值,统计b唯一值的出现次数
pd.pivot_table透视表是一种进行分组统计的函数,而交叉表时特殊的透视表,当只统计分组频率时更方便。
pd.pivot_table参数如下:
data:DataFrame对象
values:要聚合的列或列的列表
index:数据透视表的index,从原数据的列中筛选
columns:数据透视表的columns,从原数据的列中筛选
aggfunc:用于聚合的函数,默认为numpy.mean,支持numpy计算方法
fill_value: 用于替换缺失值的值
margin: 添加所有行/列
dropna: 不包括条目为 NaN的列,默认为True
margin_name: 当margin为True时,将包含总计的行/列的名称
pd.crosstab()参数:
index::要在行中分组的值
columns:要在列中分组的值
values:根据因子聚合的值数组,需指定aggfunc
aggfunc:如指定,还需指定value
normalize:将所有值除以值的总和进行归一化 ,为True时候显示百分比
如果crosstab只接收两个Series,它将提供一个频率表。用A的唯一值,统计B唯一值的出现次数:
“”"
plt.legend(loc=“upper right”,fancybox=True,fontsize=8)
random.randint()结果为左闭右闭,np.random.randint()结果为左闭右开。
fig = plt.figure(figsize,dpi)
ax1 = fig.add_subplot(2,1,1)
ax1.plot(np.random.randint(1,5,5),np.arange(5))
1.split:从左到右寻找以某个元素为中心,将左右分割成两个元素放入列表中。
2.数据合并之join,join默认吧行行索引相同的数据合并在一起
3.merge:则是按照指定的列将数据按照一定的方式合并在一起,默认合并方式是inner(交集).
1.reset_index() 把索引变成列
2.set_index() 把列变成索引
```python
categorical_vars = [“col1","col2","col3"]
for var in categorical_vars:
raw = pd.concat([raw,pd.get_dummies(row[var],prefix=var)],1)
raw= raw.drop(var,1)
dropna(axis=0/1,how="any/all",inplace=True)
plt.xticks(range(minruntime,maxruntime+5,5))
pd.DataFrame(np.zeros(shape(df.shape[0],len(genre),dtype=int),columns=genre)
label_map = {"汽车”:1,“财经":2,"科技":3}
df["label"] = df["label"].map(label_map)
1.现在plt.plot中添加label参数
2.再用plt.legend()
plt.plot(x,y,label="name")
plt.legend(loc="best")
_xtick_labels = [“hello{}”.format(i) for i in range(32)]
pd.date_range(start,end,period,freq=“D”)
1.start,end,freq配合
2.start、periods、freq配合
在logspace中,开始和结束点是10的幂,
例如 a=np.logspace(0,9,10) ,0表示10的0次方,9表示10的9次方。
若想改变底数,可使用base参数:
a= np.logspace(0,9,base=2)
plt.xlabel("epoch")
plt.ylabel("MAE")
plt.plot(train_mae_loss,label="train")
plt.plot(test_mae_loss,label="test")
plt.legend()
plt.xticks(range(len(_x)),_x,rotation=45)
xticks中的rotation具有倾斜属性
data["new"] = data[["col1","col2"]].mean(axis=1)
data.groupby("col1").agg({column:"nunique" for column in columns_list})
此时的合并与以往的合并不同,此时建立的是一种列表关系:
即:
a=[1,2,3,4,5]
b = [6,7,8,9,0]
np.c_[a,b] 可得【【1,6】,【2,7】,【3,8】,【4,9】,【5,0】】
建立了一种一一对应的列表关系
满足你的特殊需求,说不定哪天就遇见这种问题了。
目前已知的有一下集中合并方式
pd.DataFrame([x,examples.count(x)] for x in set(example)],columns=["words","count"])
模型就是索要学习的条件概率分布或者决策函数,模型的假设空间就是包含所有可能的条件概率分布或者决策函数,有了模型的假设空间,接下来就要考虑按什么样的准则学习或者选择最优的模型。
模型选择旨在避免过拟合并提高模型的预测能力。
监督学习:从给定的有限的训练数据出发,假设数据是独立同分布的,而且假设模型属于某个假设空间,应用某一评价准则,从假设空间中选取一个最优的模型,使他对已给的训练数据以及未知的测试数据,再给定的评价标准意义下有最准确的预测。
data["col"].value_counts().reset_idnex().sort_values("index")
# 通过设置reset_index来设置其Series变成了dataFrame类型。
#dataframe使用其他列的情况进行修改
data["col1"][data["gender"]==1] = data["col2"][data["gender"==1].apply(lambda x: 0 if x<100 else 0 ]
python中apply、map、applymap的使用方法
data.apply(lambda x:x.max() ,axis=0/1)
data.applymap(lambda x:1 if x>0 else 0)
data[["m","s","h"]] = data[["col1","col2","col3"]].applymap(lambda x:2015 if pd.isnull(x)==1 or x==-1 else x)
data["col"].map(lambda x:1 if x>0 else 0)
要想数据实现就地修改,需要先定位到数据,再用条件定位到需要进行改变的数据,实现新的复制与筛选。
one-hot编码
将数字型进行onehot编码,(但是onehot编码默认为字符型object类型),所以需要对数据先变成str类型,以及使用join方法加入到原数据框,并删除原来的变量。
data[["province","martial"]] = data[["province","mortal"]].applymap(lambda x:str(x))
dum = pd.get_dummies(data[["province","mortal"]])
data = data,join(dum)
data = data.drop(["province","mortal"],axis=1)
data["notrepaired"].replace("-",np.nan,replace=True)
EDA目标
data.head().append(data.tail())
data.info()
data.info(verbose=True,null_counts=True) #防止数据太多不显示具体信息
#1.使用missingno来识别缺失数据的可视化
import missingno as msno
msno.matrix(data.sample(500))
msno.matrix(data.sample(500))
#2.使用plt的可视化操作
df = data.isnull().sum()
df = df > 0
plt.bar(df.idnex,df.values,color="r")
sns.distplot(data["label"],kde=False,fit=stats.johsonsu)
sns.distplot(data["label"],kde=False,fit=stats.lognorm)
num_features = data.select_dtypes(include=[np.number])
catrgorical_features = data.select_dtypes(include=[np.object])
# 相关性分析
numeric = data[numeric_features]
correlation = numeric.corr()
correlation["price].sort_values(ascending=False)
sns.heatmap(correlation,square=True,vmax=0.8)
# 1.使用低配版plt实现可视化操作
plt.rcParams["font.sans-serif"] = "SimHei"
plt.figure(figsize=(10,10))
i=1
for i in range(len(cate_features)):
plt.subplots(5,2,i)
v = data[cat_features[i]].value_counts()
fig = sns.bar(v.idnex,v.values)
i+=1
for item in fig.getxtickslabel():
item.set_rotation(90)
plt.light_layout()
plt.show()
# 使用melt顶级绘图函数,pd.melt,sns.FacetGrid(),map实现
def boxplot(x,y,**kwargs):
sns.boxplot(x=categorical_feature,y="label",data=train)
x = plt.xticks(rotation=90)
# 单开一个函数主要是为了设置倾斜属性
f = pd.melt(train,vale_vars=categorica_features,id_vars=["label"])
g = sns.FacetGrid(f,col="variable",col_wrap=2,sharex=False,sharey=False,size=5)
g = g.map(bar_plot,"value","label")
#----------------------------------------------------------------
# 使用distplot直方图函数
f = pd.melt(data,value_vars=numeric_features)
g = sns.FacetGrid(f,col="variable",col_wrap=3,sharex=False,sharey=False)
g = g.map(sns.distplot,"value")
特征的unique分布
for cat_fea in categorical_features:
print("{}特征有{}个不同的值“.format(cat_fea,data[cat_fea].nunique())
print(data[col_fea].value_counts())
import pandas_prodiling
pfr = pandas_profiling.ProfileReaport(data)
pfr.to_file("./filename.html")
FacetGrid主要用于再数据集的子集中分别可视化变量的分布或者多个变量之间的关系,基本过后哦你工作流程时FacetGrid使用数据集和用于构造网格的变量初始化对象,然后可以通过调用FacetGrid.map()或者将一个或者多个绘图函数用用于每个子集FacetGrid.ma_dataframe().
pairplot参数
参数palette=“husl”
markers = [“o”,“s”,“D”,"+"]
diag_kind =“kde” 改变对角图
kind ="reg"使用回归
常见的特征工程包括:
1.异常处理
2.特征归一化/标准化
3.数据分桶:
4.缺失值的处理:
5.特征构造:
6.特征筛选
7.降维: