plotagem matplotlib
- prefácio
- Uso básico:
- Desenhe quatro tipos de diagramas
- Habilidades especiais:
- Pandas tramando
- nascido no mar
-
- Gráfico de histograma:
- Mapa de densidade do kernel kdeplot:
- Distplot do mapa de densidade do histograma:
- Countplot e barplot do gráfico de barras:
- Boxplot:
- Plotagem conjunta do gráfico de relacionamento bivariado:
- Gráfico de relacionamento pairwise pairplot:
- mapa de calor mapa de calor:
- gráfico de regressão implot®plot:
prefácio
Vue框架:
Aprenda com o projeto Vue
OJ算法系列:
máquina mágica centenas de refino - explicação detalhada
Linux操作系统:
do algoritmo de Fenghou Qimen - linux
C++11:
Tongtianlu - C++ 11
Python常用模块:
Tongtianlu - Python
Uma linha para verificar se o Pandas foi baixado:
pip list
Uma linha para baixar:
pip install pandas
Uso básico:
-
Criador de personagem token:
- Marcador de pontos: .
- marca de pixel: ,
- Marca do círculo: o
- Marca do triângulo invertido: v
-
Estilo de linha de caracteres de estilo:
- linha sólida:-
- Traços: –
- Linha pontilhada: -.
- linha pontilhada::
-
corcor:
- azul: b
- vermelho: r
- Verde: g
- Ciano: c
Bibliotecas Gráficas Necessárias
-
matplotlib
-
matplotlib.pyplot
-
nascido no mar
-
pandas
-
entorpecido
-
Observações: Existem três modos para usar o desenho plt no notebook
- %matplotlib inline: Este é o modo padrão, gera imagens estáticas diretamente no Notebook
- %matplotlib auto: Abre uma janela de desenho separada, igual ao pycharm
- %matplotlib notebook: Gera uma janela de desenho no notebook, que pode ampliar e reduzir a imagem
import matplotlib.pyplot as plt
import matplotlib
import seaborn as sns
import numpy as np
import warnings
warnings.filterwarnings("ignore")
# %matplotlib inline的用途:直接在Notebook中渲染图形
%matplotlib inline
ler conjunto de treinamento
import pandas as pd
train = pd.read_csv('./data_set/house_price_train.csv')
print(train.shape)
print(train.dtypes)
#train.head()
#train.tail()
#查看非数值型特征值:
categorical_feats = train.dtypes[train.dtypes == 'object'].index
print(type(categorical_feats))
print('*'*100)
print(categorical_feats)
#查看数值型特征值:
value_feats = train.dtypes[train.dtypes != 'object'].index
print(type(value_feats))
print('*'*100)
#特征值数组还可以回用:
print(train[value_feats].values)
(1460, 81)
Id int64
MSSubClass int64
MSZoning object
LotFrontage float64
LotArea int64
...
MoSold int64
YrSold int64
SaleType object
SaleCondition object
SalePrice int64
Length: 81, dtype: object
<class 'pandas.core.indexes.base.Index'>
****************************************************************************************************
Index(['MSZoning', 'Street', 'Alley', 'LotShape', 'LandContour', 'Utilities',
'LotConfig', 'LandSlope', 'Neighborhood', 'Condition1', 'Condition2',
'BldgType', 'HouseStyle', 'RoofStyle', 'RoofMatl', 'Exterior1st',
'Exterior2nd', 'MasVnrType', 'ExterQual', 'ExterCond', 'Foundation',
'BsmtQual', 'BsmtCond', 'BsmtExposure', 'BsmtFinType1', 'BsmtFinType2',
'Heating', 'HeatingQC', 'CentralAir', 'Electrical', 'KitchenQual',
'Functional', 'FireplaceQu', 'GarageType', 'GarageFinish', 'GarageQual',
'GarageCond', 'PavedDrive', 'PoolQC', 'Fence', 'MiscFeature',
'SaleType', 'SaleCondition'],
dtype='object')
<class 'pandas.core.indexes.base.Index'>
****************************************************************************************************
[[1.00000e+00 6.00000e+01 6.50000e+01 ... 2.00000e+00 2.00800e+03
2.08500e+05]
[2.00000e+00 2.00000e+01 8.00000e+01 ... 5.00000e+00 2.00700e+03
1.81500e+05]
[3.00000e+00 6.00000e+01 6.80000e+01 ... 9.00000e+00 2.00800e+03
2.23500e+05]
...
[1.45800e+03 7.00000e+01 6.60000e+01 ... 5.00000e+00 2.01000e+03
2.66500e+05]
[1.45900e+03 2.00000e+01 6.80000e+01 ... 4.00000e+00 2.01000e+03
1.42125e+05]
[1.46000e+03 2.00000e+01 7.50000e+01 ... 6.00000e+00 2.00800e+03
1.47500e+05]]
Título e legenda:
- xlabel: o texto sob o eixo x
- ylabel: o texto sob o eixo y
- titulo: titulo da imagem
plt.title("House-SalePrice", fontsize=16) # 设置标题
plt.xlabel("SalePrice_Log", fontsize=15) # 横坐标
plt.ylabel("count", fontsize=15) # 纵坐标
print(train['LotArea'].values)
plt.plot(train['LotArea'].index, train['LotArea'].values,
linestyle=':',marker=".",color='r')
#":"表示虚线样式,"."表示点标记,"r"表示线为红色
plt.show()
[ 8450 9600 11250 ... 9042 9717 9937]
Método de desenho de gráficos de subárea:
- subplot(): retorna gráficos e quadrantes
import matplotlib.pyplot as plt
plt.figure(figsize = (8, 8)) # 指定整体图片大小
fig, ax = plt.subplots(2, 2) # fig是图形对象,ax表示子图轴数组, 继续传参则为第几个子图
print(type(ax))
#ax用于区分象限区域内图形:
ax[0][0].set_title(1)
ax[0][1].set_title(2)
ax[1][0].set_title(3)
ax[1][1].set_title(4)
print(ax)
<class 'numpy.ndarray'>
[[<AxesSubplot:title={'center':'1'}> <AxesSubplot:title={'center':'2'}>]
[<AxesSubplot:title={'center':'3'}> <AxesSubplot:title={'center':'4'}>]]
<Figure size 800x800 with 0 Axes>
- para desenhar em caixas gráficas
plt.figure(figsize = (8, 8))
fig, ax = plt.subplots(2, 2)
'''
???
'''
print(categorical_feats[:4]) # 输出对应属性值列名
for row in range(2):
for col in range(2):
data = train[categorical_feats[row*2+col]].value_counts()
'''
???
'''F
ax[row][col].plot(data.index, data.values)
ax[row][col].set_title(f'{
categorical_feats[row*2+col]}')
fig.tight_layout() # 自动保持子图之间的正确间距。
plt.show()
Index(['MSZoning', 'Street', 'Alley', 'LotShape'], dtype='object')
<Figure size 800x800 with 0 Axes>
Desenhe quatro tipos de diagramas
histograma hist
- Descreva o número de vezes que os dados aparecem em cada valor, o eixo horizontal é o valor e o eixo vertical é a frequência
- O parâmetro de desenho tem apenas um x
parâmetro | descrever |
---|---|
x | Parâmetro obrigatório, array ou sequência de array. |
caixas | Se for um número inteiro, é o número de divisões. Se for uma matriz, é a posição específica |
faixa | Especifique o limite inferior e o limite superior do intervalo global (min, max), tipo de tupla, o valor padrão é Nenhum. |
densidade | Se True, retorna um histograma de densidade de probabilidade; o padrão é False, retorna um histograma do número de elementos no intervalo correspondente. |
tipo hist | O tipo de histograma a ser desenhado, o valor padrão é "barra", e os valores opcionais são barstacked (gráfico de barras empilhadas), step (gráfico de etapas não preenchidas) e stepfilled (gráfico de etapas preenchidas). |
plt.hist(x = train['SalePrice'],
bins=50,
density=False,
histtype='stepfilled')
plt.show()
Barra do histograma:
- Existem dois parâmetros de desenho: x e altura
parâmetro | descrever |
---|---|
x | Uma sequência escalar que representa as coordenadas x do histograma. O valor x padrão é o ponto médio de cada histograma ou pode ser a borda esquerda do histograma. |
altura | Um escalar ou sequência de escalares representando a altura do histograma. |
largura | Parâmetro opcional, escalar ou semelhante a uma matriz, a largura padrão do histograma é 0,8. |
fundo | Parâmetro opcional, escalar ou semelhante a uma matriz, a coordenada y do histograma é padronizada como Nenhum. |
algin | Existem duas opções {"center", "edge"}, o padrão é 'center', este parâmetro determina a posição do valor x no histograma. |
data = train['MSZoning'].value_counts()
print(data)
print(type(data))
plt.bar(x = data.index,
height = data.values,
width=0.5,
align='center')
RL 1151
RM 218
FV 65
RH 16
C (all) 10
Name: MSZoning, dtype: int64
<class 'pandas.core.series.Series'>
<BarContainer object of 5 artists>
Dispersão do gráfico de dispersão:
- Dois parâmetros de desenho: x+y determina as coordenadas do ponto
- Plotar pontos de dados nos eixos horizontal e vertical
parâmetro | descrever |
---|---|
x, y | Coordenadas de pontos dispersos |
s | área de pontos dispersos |
c | A cor do ponto de dispersão (o padrão é azul, 'b', as outras cores são iguais a plt.plot()) |
marcador | Estilo Scatter (o valor padrão é círculo sólido, 'o', outros estilos são iguais a plt.plot()) |
alfa | Transparência de dispersão (o número entre [0, 1], 0 significa completamente transparente, 1 significa completamente opaco) |
larguras de linha | largura da linha da borda do ponto |
cores de borda | A cor da borda do ponto de dispersão |
plt.scatter(x = train.TotalBsmtSF,
y = train.SalePrice,
c='b',
marker=',',
alpha=0.5
)
plt.scatter(x = train.BsmtUnfSF,
y = train.SalePrice,
c='r',
marker='.',
alpha=0.8
)
# 绘制多个属性到一个散点图
<matplotlib.collections.PathCollection at 0x216c67c0130>
gráfico de pizza
- Um parâmetro de desenho: x
parâmetro | descrever |
---|---|
x | Sequência da matriz, os elementos da matriz correspondem ao número de áreas em forma de leque. |
explodir | Destaque, defina o tamanho da lacuna de cada bloco |
rótulos | Uma sequência de strings de lista, anotando um nome de rótulo para cada setor. |
cor | Defina a cor para cada área em forma de leque e o padrão será definido automaticamente de acordo com o ciclo de cores. |
autopct | A string de formato "fmt%pct" formata o rótulo de cada fatia usando uma porcentagem e a coloca dentro da fatia. |
plt.figure(figsize=(8,8))
plt.pie(
x = train['MSZoning'].value_counts(),
explode = (0, 0.1, 0.2, 0, 0),
autopct = '%1.2f%%'
)
plt.show()
Habilidades especiais:
-
Logarítmico:
- Uso: a distribuição x é muito ampla, parte de y é alta
- Finalidade de uso: distribuição tende a distribuição normal
Pandas tramando
-
Pandas encapsula uma função de desenho simples baseada em matplotlib,
que pode adicionar diretamente .plot() a DataFrame e Series para desenhar -
Parâmetros .plot():
- kind: hist, scatter, pie, bar acima
desenho de série
#直接绘图
train['SalePrice'].plot()
<AxesSubplot:>
#统计某值后绘图
train['MSZoning'].value_counts().plot()
<AxesSubplot:>
#指定kind
train['MSZoning'].value_counts().plot(kind="bar") # 柱状图
<AxesSubplot:>
train['SalePrice'].plot.hist()
# 直方图,.hist()相当于kind='hist'
# train['SalePrice'].plot(kind='hist')
<AxesSubplot:ylabel='Frequency'>
Plotagem de DataFrame
# 部分数据直接绘图
train_d = train.loc[:,value_feats[1:5]]
print(train_d)
#不使用plot则多种数据分开绘图
train_d.hist(
figsize=(8, 10),
bins=50,
xlabelsize=8, #x轴说明字体大小
ylabelsize=8
)
plt.show()
MSSubClass LotFrontage LotArea OverallQual
0 60 65.0 8450 7
1 20 80.0 9600 6
2 60 68.0 11250 7
3 70 60.0 9550 7
4 60 84.0 14260 8
... ... ... ... ...
1455 60 62.0 7917 6
1456 20 85.0 13175 6
1457 70 66.0 9042 7
1458 20 68.0 9717 5
1459 20 75.0 9937 5
[1460 rows x 4 columns]
#使用plot则多种数据合并绘图
train.loc[:,['MSSubClass','LotFrontage','OpenPorchSF']].plot.hist()
<AxesSubplot:ylabel='Frequency'>
# 对属性值含有NaN的列进行统计使用柱状图显示
missing = train.isnull().sum()
print(missing)
'''
此处的missing > 0指的是?
'''
missing = missing[missing > 0]
#print(missing)
missing = missing.sort_values(ascending=False)
# ascending=False 为升序
# inplace=True 为不原地修改
missing.plot.bar()
Id 0
MSSubClass 0
MSZoning 0
LotFrontage 259
LotArea 0
...
MoSold 0
YrSold 0
SaleType 0
SaleCondition 0
SalePrice 0
Length: 81, dtype: int64
<AxesSubplot:>
nascido no mar
-
Introdução: Empacotamento simplificado de matplotlib, mas não totalmente funcional
-
Cinco estilos de tema:
- darkgrid (grade cinza)
- grade branca (grade branca)
- Preto Escuro)
- Branco Branco)
- carrapatos (cruz)
Gráfico de histograma:
import seaborn as sns
sns.set(style = "darkgrid")
sns.displot(x = train['SalePrice'])
'''
???
'''
<seaborn.axisgrid.FacetGrid at 0x216ce4078b0>
Mapa de densidade do kernel kdeplot:
- gráfico de densidade do kernel:
- Finalidade: Exibir a distribuição de dados no segmento de dados contínuo do eixo X.
- Características: Este gráfico é uma variante do histograma que usa curvas suaves para traçar valores horizontais, resultando em uma distribuição mais suave.
sns.kdeplot(x = train['SalePrice'])
<AxesSubplot:xlabel='SalePrice', ylabel='Density'>
Distplot do mapa de densidade do histograma:
- Plote o histograma e o gráfico de densidade ao mesmo tempo
sns.distplot(x = train["SalePrice"],bins=20, kde=True)
<AxesSubplot:ylabel='Density'>
Countplot e barplot do gráfico de barras:
-
countplot: um dado de parâmetro de desenho
-
barplot: dois parâmetros de desenho x&y
-
gráfico de contagem
ax = sns.countplot(
x="MSSubClass", #x轴坐标文字说明
data = train
)
- gráfico de barras:
- Ao visualizar um atributo usando um gráfico de barras, as estimativas pontuais e os intervalos de confiança dos dados são exibidos como barras retangulares.
- A linha preta de cada barra é a barra de erro, indicando o intervalo de erro de dados. Quando as barras de erro são relativamente "longas", geralmente a dispersão de dados é grande ou as amostras de dados são pequenas.
plt.figure(figsize=(10,6))
sns.barplot(x='GarageCars',y = 'SalePrice',data=train)
plt.show()
- Use o histograma para contar a proporção de NaN na coluna correspondente
# 使用矩形图统计NaN在对应列所占比例
missing = train.isnull().mean()
missing = missing.sort_values(ascending=False)[:20]
# 以条形图显示NaN值在每个属性值所占比例
sns.barplot(x=missing.index,y=missing.values)
# 将x坐标表示旋转90度
plt.xticks(rotation=90)
plt.show()
Boxplot:
- Vantagens: Mostrar a distribuição dos dados relacionados à categoria
Mostrar o máximo, mínimo, mediano e quartis superior e inferior de um conjunto de dados - Dois parâmetros de plotagem: x & y
plt.figure(figsize=(10,5))
sns.boxplot(
x = 'GarageCars',
y = 'SalePrice',
data = train
)
plt.show()
Plotagem conjunta do gráfico de relacionamento bivariado:
- Plotar um gráfico de duas variáveis usando gráficos bivariados e univariados
# 使用sns散点图,描述变量和房价之间的关系
sns.scatterplot(
x = train['TotalBsmtSF'],
y = train['SalePrice']
)
# 使用双变量图,描述变量的分布图和变量相关的散点图组合在一起
plt.figure(figsize = (4, 3))
sns.jointplot(
x = train.TotalBsmtSF,
y = train.SalePrice
)
plt.xlabel('GrLvArea')
plt.ylabel('SalePrice')
plt.title('Basis')
plt.show()
<Figure size 400x300 with 0 Axes>
Gráfico de relacionamento pairwise pairplot:
- Função: Concentre-se em desenhar relações de pares, mostrando a relação entre dois recursos
- Método: Crie uma rede Axes, para que cada variável no tipo de dados possa compartilhar 1 linha no eixo y e 1 coluna no eixo x
- Características: A linha diagonal é o histograma de cada atributo e a linha fora da diagonal é o gráfico de correlação entre diferentes atributos
train_pair = train.loc[:,["LotArea", "GarageArea", "SalePrice"]]
tmp = sns.pairplot(data = train_pair)
print(type(tmp))
<class 'seaborn.axisgrid.PairGrid'>
mapa de calor mapa de calor:
- Função: identificar variáveis preditoras e métodos de correlação de variáveis de destino
import numpy as np
sns.set(font_scale=1.1)
correlation_train = train.corr()
# 返回协方差的上三角矩阵
mask = np.triu(correlation_train.corr())
'''
???mask???
'''
plt.figure(figsize=(20, 20))
sns.heatmap(data = correlation_train,
annot = True,#是否对heatmap中每个方格写入数据。
fmt='.1f',# 注释格式
cmap='coolwarm',# 颜色列表
square=True,# 将每个单元格为方形
mask=mask,
#vmax,vmin, 图例中最大值和最小值的显示值,没有该参数时默认不显示
)
plt.show()
# 对数据的部分列进行热力图显示
plt.figure(figsize=(10, 10))
# corr_abs = train.corr().abs()
# ser_corr = corr_abs.nlargest(len(numerical_feats), "SalePrice_Log")["SalePrice_Log"]
# cols = ser_corr[ser_corr.values > 0.43].index
cols = ['SalePrice', 'OverallQual', 'GrLivArea', 'GarageCars',
'GarageArea', 'TotalBsmtSF', '1stFlrSF', 'FullBath', 'YearBuilt',
'YearRemodAdd', 'TotRmsAbvGrd', 'Fireplaces']
cm = train[cols].corr()
sns.heatmap(
data = cm,
annot=True,
square=True,
fmt='.1f'
)
plt.show()
Gráfico de regressão implot®plot:
-
Ao desenhar um gráfico de dispersão, imprima uma relação linear entre duas variáveis
-
regplot():
- os dados podem ser um DataFrame
- Os parâmetros x, y aceitam uma variedade de tipos de dados, incluindo arrays numpy, Series
-
lplot():
- O parâmetro de dados não pode estar vazio
- Os parâmetros x e y devem ser especificados como strings.
-
O formato de dados tipo array unidimensional suportado por regplot() mas não suportado por lmplot() é chamado de "dados de formato longo" ou "dados organizados"
lplot
import seaborn as sns
import pandas
train = pandas.read_csv('./data_set/house_price_train.csv')
sns.lmplot(
x = 'OverallQual',
y = 'SalePrice',
data = train
)
<seaborn.axisgrid.FacetGrid at 0x296ec3fb310>
sns.lmplot(
x = '1stFlrSF',
y = 'SalePrice',
data = train
)
<seaborn.axisgrid.FacetGrid at 0x296ec3fa680>
regplot()
sns.regplot(
x = 'YearBuilt',
y = 'SalePrice',
data = train
)
<AxesSubplot:xlabel='YearBuilt', ylabel='SalePrice'>
# order大于 1,使用numpy.polyfit来估计多项式回归,常用于进行曲线拟合的函数
sns.regplot(
x = train['YearBuilt'],
y = train['SalePrice'],
order = 3
)
<AxesSubplot:xlabel='YearBuilt', ylabel='SalePrice'>
subgrafo for loop draw
import matplotlib.pyplot as plt
# 使用for循环对属性遍历
fig, axes = plt.subplots(4, 3, figsize=(25, 30))
# flatten用于降维,将几个多维数组变成几个一维数组
axes = axes.flatten()
for columns, j in zip(train.select_dtypes(include=['number']).columns[:13], axes):
print(columns,' : ', j)
sns.regplot(
x=columns,
y="SalePrice",
data=train,
ax=j,
order=3
)
Id : AxesSubplot(0.125,0.712609;0.227941x0.167391)
MSSubClass : AxesSubplot(0.398529,0.712609;0.227941x0.167391)
LotFrontage : AxesSubplot(0.672059,0.712609;0.227941x0.167391)
LotArea : AxesSubplot(0.125,0.511739;0.227941x0.167391)
OverallQual : AxesSubplot(0.398529,0.511739;0.227941x0.167391)
OverallCond : AxesSubplot(0.672059,0.511739;0.227941x0.167391)
YearBuilt : AxesSubplot(0.125,0.31087;0.227941x0.167391)
YearRemodAdd : AxesSubplot(0.398529,0.31087;0.227941x0.167391)
MasVnrArea : AxesSubplot(0.672059,0.31087;0.227941x0.167391)
BsmtFinSF1 : AxesSubplot(0.125,0.11;0.227941x0.167391)
BsmtFinSF2 : AxesSubplot(0.398529,0.11;0.227941x0.167391)
BsmtUnfSF : AxesSubplot(0.672059,0.11;0.227941x0.167391)