使用Python的数据可视化

Tavish Aggarwal.
I 在进行一步以进一步预测数据之前,对于先对我们的数据来说至关重要。数据可视化是使用各种可视化技术提取有关数据信息的过程。

在此帖子中,我将解释关于工具箱中的主要元素的各种曲线。我将在这篇文章中覆盖一分识别的地块。

在这篇文章中,我将使用 示例数据集 从卡格竞赛中。我也在分享我的 jupyter笔记本 如果您在通过帖子的同时被封锁任何地方。

让我们开始吧。

导入包

做任何事情之前的第一步是导入用于创建可视化的包。

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np 

阅读数据集

导入数据后,接下来我们需要将CSV文件加载到Pandas DataSet。

housePropertyDataset = pd.read_csv('house_property_sales.csv')

海运图书馆

有一个海运库,可以使用我们可以生成详细图表表示。

sns.set()

plt.plot(housePropertyDataset['SalePrice'])

plt.legend(loc='upper right')
plt.show()
输出:
这里在上面显示的考试中,我们使用传奇来显示图例并将其定位在右上角。

可视化

一旦我们在熊猫的数据框中导入数据,我们就可以生成可视化。我们可以从数据集生成不同类型的可视化。在这里,我们将重点关注:

  1. 放大轴
  2. 生成子图
  3. 二维情节
  4. 生成回归图
  5. 网格网格
  6. 剥离情节
  7. 骚扰图
  8. 小提琴情节
  9. 热线图情节
  10. 联合情节
  11. ecdf情节
  12. 箱形图

让我们开始吧。

变焦轴

您现在将创建与海运库介绍中创建的相同图形。但此时间设置轴使用PLT.xlim()和PLT.YLIM()扩展。这些命令允许您缩放或展开绘图或设置轴范围以包括重要值(例如原点)。

笔记 :创建绘图后,我们可以使用plt.savefig()导出为文件生成的图像。

sns.set()

# We can use the styles for the plot
# print(plt.style.available) used to print all available styles
plt.style.use('ggplot')

plt.plot(housePropertyDataset['SalePrice'])

plt.xlabel('Property ID')
plt.ylabel('Sales Price')

plt.xlim(1100,1200)
plt.ylim(100000,800000)

plt.title('Price of various property located')

plt.show()

输出:

使用子图()函数

使用子点是使用PLT.AXES()的更好的替代方案。我们可以在同一个数字中手动添加多个绘图。

子图接受三个参数,
子图(n_rows,n_columns,n_subplot)

子图排序是行明智的左上角。

plt.style.use('ggplot')

plt.subplot(1,2,1)
plt.plot(housePropertyDataset['SalePrice'], color='red')
plt.title('Property Sale Price variation')
plt.xlabel('Property ID')
plt.ylabel('Sales Price')

plt.subplot(1,2,2)
plt.scatter(housePropertyDataset['GarageArea'],housePropertyDataset['SalePrice'], color='green')
plt.title('Top 10 Female Population')
plt.xlabel('Property Sales Price')
plt.ylabel('Garbage Area')


# Improve the spacing between subplots and display them
plt.tight_layout()
plt.show()
输出:

箱形图

箱形图 是重要的EDA图,有助于准确了解数据。当我们绘制一个盒子情节时,它会提供以下详细信息:

  1. 异常值:这些是数据集中的极端值。我们需要选择数据集中是否需要这些异常值,或者我们可以将其删除为准确的结果。
  2. 四分位数范围(IQR):上四分位数(第75百分位数)和低四分位数(25百分位数)之间的差异是差异。
  3. 第75百分位数:它是数据集的第75百分位数。
  4. 50百分位数:它是数据集的50百分位数。也称为中位数。
  5. 25百分位数:它是数据集的第25百分位数。
  6. 数据程度:晶须延伸到数据的1.5 IQR的数据的极端,以较少极端。

考虑下面显示的示例:

sns.boxplot(x='Street', y='SalePrice', data=housePropertyDataset)
plt.title('Sale price by Street')
plt.show()

输出:

 箱形图 例子

两维直方图

我们还可以使用HIST2D函数生成2D直方图。让我们来看看下面显示的一个例子:

x = housePropertyDataset['GarageArea']
y = housePropertyDataset['SalePrice']
plt.hist2d(x,y, bins=(10,20), range=((0, 1500), (0, 700000)), cmap='viridis')

plt.colorbar()

plt.xlabel('Garbage Area')
plt.ylabel('Property Sales Price')

plt.tight_layout()
plt.show()

输出:

如上所示,我们为2D阵列创建了矩形箱。以类似的方式,我们也可以产生六角形箱。

x = housePropertyDataset['GarageArea']
y = housePropertyDataset['SalePrice']
plt.hexbin(x,y, gridsize=(15,10),extent=(0, 1500, 0, 700000), cmap='winter')

plt.colorbar()

plt.xlabel('Garbage Area')
plt.ylabel('Sales Price')
plt.show()

输出:

线性回归

We can also generate a regression plot using the seaborn library. We will be understanding regression plot in detail later. Seaborn provides lmplot() function to generate regression plots.

# Plot a linear regression between 'GarageArea' and 'SalePrice'
sns.lmplot(x='GarageArea', y='SalePrice', data=housePropertyDataset, 
           col='Street') # We can also use 'hue' parameter instead of col parameter to plt on the same graph

# Display the plot
plt.show()

输出:

笔记:  有更多的选项可以配置。参考 海运LMPLOT文件.

剩余情节

As we can see from the above plot that all points are not passing through the straight line. Therefore we have residuals in the plot. Seaborn provides residplot() function using which we can generate residual plot:

sns.residplot(x='GarageArea', y='SalePrice', data=housePropertyDataset, color='blue')

# Display the plot
plt.show()
输出:

笔记:  有更多的选项可以配置。参考 海运Residplot文件.

绘制二阶回归图

It is also possible to generate higher order regression plots using order argument in regplot function provided by seaborn.

plt.scatter(housePropertyDataset['GarageArea'],housePropertyDataset['SalePrice'], label='data', 
            color='red', marker='o')

sns.regplot(x='GarageArea', y='SalePrice', data=housePropertyDataset
            , scatter=None, color='blue', label='order 1', order=1)

sns.regplot(x='GarageArea', y='SalePrice', data=housePropertyDataset
            , scatter=None, color='green', label='order 2', order=2)
plt.legend(loc='lower right')
plt.show()

输出:

笔记:  有更多的选项可以配置。参考 海运regplot文件.

网格网格

MeshGrid将Vectors x和y指定的域变为阵列x和y,可用于评估两个变量的函数。

Here in the example shown below, we are calculating: 3 * sqrt(x^2 + y^2).

u = list(range(1, 10))
v = list(range(11, 20))
X,Y = np.meshgrid(u,v)
Z  = 3*np.sqrt(X**2 + Y**2)

plt.subplot(2,1,1)
plt.contour(X, Y, Z)

plt.subplot(2,1,2)
plt.contour(X, Y, Z, 20) # 20 contour


plt.show()

输出:

As we have seen above contour function generate lines, but to get lines filled with colors we can use a contourf() function.

u = list(range(1, 10))
v = list(range(11, 20))
X,Y = np.meshgrid(u,v)
Z  = 3*np.sqrt(X**2 + Y**2)

plt.subplot(2,1,1)
plt.contourf(X, Y, Z)

plt.subplot(2,1,2)
plt.contourf(X, Y, Z, 20, cmap='winter') # 20 contour will be mapped


plt.show()

输出:

剥离情节

Seaborn provides stripplot() function which gives us the ability to visualize data categorically. Refer to the example shown below:

plt.subplot(1,2,1)
sns.stripplot(x='Street', y='SalePrice', data=housePropertyDataset, jitter=True, size=3)
plt.xticks(rotation=90)

plt.subplot(1,2,2)
sns.stripplot(x='Neighborhood', y='SalePrice', data=housePropertyDataset, jitter=True, size=3)
plt.xticks(rotation=90)

plt.subplots_adjust(right=3)
plt.show()

输出:

笔记: 在上面所示的示例中,我们使用了抖动标志来避免相同的数据点重叠。有更多的选项可以配置。参考 海运Stribplot文件.

骚扰图

骚扰图 是针对直方图图的替代推荐。为什么?

当我们使用直方图绘制数据时,曲线基于所选的箱子看起来不同。因此,可以基于所选的箱子赋予不同的结果。为了从直方图克服偏见的结果,建议使用Swarn图。

条带绘图也是可视化数据的好方法。但是当我们有大量数据时,数据点往往相互重叠。替代方案是使用Swarn曲线图,其中数据点不相互重叠。

plt.subplot(1,2,1)
sns.swarmplot(x='Street', y='SalePrice', data=housePropertyDataset, hue='SaleCondition')
plt.xticks(rotation=90)

plt.subplot(2,2,2)
sns.stripplot(x='Neighborhood', y='SalePrice', data=housePropertyDataset, hue='SaleCondition')
plt.xticks(rotation=90)

plt.subplots_adjust(right=3)
plt.show()

输出:

笔记: 有更多的选项可以配置。参考 海运Swarmplot文件.

ecdf情节

有时,当我们有大量的数据和数据点开始,在Swarn Plot中重叠以适应。在这种情况下,骚乱绘图并没有给出精确的结果进行学习。建议使用ECDF(经验累积分布函数)。

X轴已对数据和Y轴具有均匀间隔的数据点。

def ecdf(data):
    # Number of data points: n
    n = len(data)
    # x-data for the ECDF: x
    x = np.sort(data)
    # y-data for the ECDF: y
    y = np.arange(1, n+1) / n
    return x, y

SalePrice = housePropertyDataset['SalePrice']
x_vers, y_vers = ecdf(SalePrice)

plt.plot(x_vers, y_vers, marker = '.', linestyle = 'none')

plt.ylabel('ECDF')

plt.show()

输出:

ECDF示例

小提琴情节

小提琴图类似于盒子图。因为它们还显示了最大,最小和数据集的中位数。在小提琴图中,分布是厚度较厚的浓度。

plt.subplot(2,1,1)
sns.violinplot(x='SaleType', y='SalePrice', data=housePropertyDataset)

plt.subplot(2,1,2)
sns.violinplot(x='SaleType', y='SalePrice', data=housePropertyDataset, color='lightgray', inner=None)

sns.stripplot(x='SaleType', y='SalePrice', data=housePropertyDataset, jitter=True, size=1.5)

plt.show()
输出:

笔记:  我们还可以生成一个组合的绘图。在上面所示的示例中,第二曲线是条带图和小提琴图的组合。有更多的选项可以配置。参考 海运violinplot文件.

联合情节

关节图显示了在Y轴发生变化时如何在x轴上变化。联合图也计算Pearson系数和P值。我将在即将到来的帖子中解释Pearson系数和P值的更多信息。

fig = plt.figure(figsize = (16,89))
sns.jointplot(x='GarageArea', y='SalePrice', data=housePropertyDataset)
plt.xticks(rotation=90)
plt.show()

输出:

笔记:  我们还可以将参数类型传递给联合图。要了解有关亲切属性的更多信息 海运联合情节文件。

暖步

当我们需要了解该功能如何依赖于另一个时,Heatmap Plot非常有用。 

在下面所示的示例中,我们已经绘制了数据集的特征的相关热图。我们可以看到较浅的颜色描绘了正相关。

numeric_features = housePropertyDataset.select_dtypes(include=[np.number])
sns.heatmap(numeric_features.corr())
plt.title('Correlation heatmap')
plt.show()

输出:

笔记:  有更多的选项可以配置。参考 海运热爱文档.

对情节

它是使用我们可以快速瞥见数据的图。在这里,我们可以绘制数据集中的功能(列)的可能组合。考虑下面显示的示例:

data = housePropertyDataset[['SaleCondition', 'SalePrice','OverallQual',
             'TotalBsmtSF','GrLivArea','GarageArea','FullBath','YearBuilt','YearRemodAdd']]
sns.pairplot(data, hue='SaleCondition')
plt.show()
输出:

笔记:  使用对图我们只能绘制数据集的数字列。有更多的选项可以配置。参考 海运Birplot文件.

在这篇文章中,我们已经看到使用海运图书馆以及Matplotlib库的优势。海运图书馆提供了更先进的可视化,可以帮助我们了解我们的数据集。

希望你从这篇文章中学到了一些新的东西。要知道使用Bokeh可视化数据的技术 使用Python中的Bokeh包的数据可视化.

 

作者信息

Tavish Aggarwal.

网站: http://tavishaggarwal.com

Tavish Aggarwal.是一个数据科学家 在一个海德拉巴工作,具有广泛的经验,在跨电子商务,财务,医疗保健等等不同领域解决现实世界的业务问题。 他对技术充满热情,喜欢在团队中工作。

类别