Python数据分析实战七:数据可视化

74 阅读6分钟

在上一节(juejin.cn/post/729759… )中,我们介绍了数据分析结果如何给输出到文件中,pandas提供了很多输出到文件的方法。在数据分析中,我们还可以采用一些数据可视化的方法,帮助我们分析数据集的特征,本节主要介绍python数据可视化的方法。

10.Python数据可视化

关于Python数据可视化,在Python中有很多相关的数据可视化包可以做到交互式的数据可视化,非常方便,接下来介绍几个常用的Python数据可视化的包。

10.1 Matplotlib

Matplotlib是Python中最常用的绘图库,它提供了一整套和MATLAB类似的API,非常适合交互式地进行制图。并且也可以将它作为绘制图形的底层库,利用其他库对matplotlib进行包装,如seaborn, pandas等。

可支持多种不同种类的图类型,根据数据集的不同,下面给出了用Matplotlib生成图的基本代码。

10.1.1. 折线图(Line plot)

折线图主要用于表示数据随时间或有序类别的变化趋势,适用于时间序列数据或有序类别数据。

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [1, 4, 9, 16, 25]

plt.plot(x, y)
plt.show()

Figure_1.png

10.1.2. 散点图(Scatter plot)

散点图主要用于展示两个变量之间的关系,适用于连续的数值变量。

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [1, 4, 9, 16, 25]

plt.scatter(x, y)
plt.show()

2.png

10.1.3. 柱状图(Bar plot)

柱状图主要用于比较各类别的大小,适用于类别数据。对于横轴为时间的柱状图,也可以反映某种随着时间增长的趋势。

import matplotlib.pyplot as plt

x = ['A', 'B', 'C', 'D', 'E']
y = [3, 10, 7, 5, 3]

plt.bar(x, y)
plt.show()

3.png

10.1.4. 直方图(Histogram)

直方图主要用于展示单个变量的分布情况,适用于连续的数值变量。

import matplotlib.pyplot as plt
import numpy as np

data = np.random.randn(1000)

plt.hist(data, bins=30)
plt.show()

4.png

10.1.5. 箱线图(Box plot)

箱线图主要用于展示变量的中位数、四分位数和异常值,适用于连续的数值变量。

import matplotlib.pyplot as plt
import numpy as np

data = np.random.randn(1000)

plt.boxplot(data)
plt.show()

5.png

10.1.6. 饼图(Pie chart)

饼图主要用于展示各类别的占比,适用于类别数据。

import matplotlib.pyplot as plt

sizes = [215, 130, 245, 210]
labels = ['A', 'B', 'C', 'D']

plt.pie(sizes, labels=labels)
plt.show()

6.png

10.1.7. 热力图(Heatmap)

热力图主要用于展示变量之间的相关性,适用于连续的数值变量。

import matplotlib.pyplot as plt
import numpy as np

data = np.random.rand(10, 10)

plt.imshow(data, cmap='hot', interpolation='nearest')
plt.show()

7.png

10.1.8. 等高线图(Contour plot)

等高线图主要用于展示三维数据的等高线,适用于三维的数值变量。

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-1, 1, 100)
y = np.linspace(-1, 1, 100)
X, Y = np.meshgrid(x, y)
Z = np.sqrt(X**2 + Y**2)

plt.contour(X, Y, Z)
plt.show()

8.png

10.1.9. 3D图(3D plot)

3D图主要用于展示三维数据的分布,适用于三维的数值变量。

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

x = np.random.standard_normal(100)
y = np.random.standard_normal(100)
z = np.random.standard_normal(100)

ax.scatter(x, y, z)
plt.show()

9.png

10.1.10. 极坐标图(Polar plot)

极坐标图主要用于展示各方向或各角度的数据,适用于方向或角度的数据。

import matplotlib.pyplot as plt
import numpy as np

r = np.arange(0, 2, 0.01)
theta = 2 * np.pi * r

plt.polar(theta, r)
plt.show()

10.png

10.2 Seaborn

Seaborn是一个基于matplotlib的Python数据可视化库,它提供了更高级别的接口和更好看的默认主题。

10.2.1 加载内置数据集

要了解Seaborn的使用,可以使用其自带的数据集。加载数据集的方式非常简单:

import seaborn as sns  
import matplotlib.pyplot as plt  
  
# 载入内置数据集  
tips = sns.load_dataset("tips")

该命令会自动下载自带数据集,关于Seabron的数据集,可以参见其官方文档。由于是外网的原因,大概率会出现如下的报错:

urllib.error.URLError: <urlopen error [Errno 11004] getaddrinfo failed>

可通过镜像站把数据集下载到本地,下载地址(二选一):

link.zhihu.com/?target=htt…

github.com/mwaskom/sea…

下载完成后,可在load_dataset方法中指定数据集的路径,直接从本地加载数据

tips = sns.load_dataset("tips", cache=True, data_home="C:\Python36\Lib\site-packages\seaborn\seaborn-data")

10.2.2 seaborn的优势

前面说过,seaborn是基于Matplotlib发展来的,相对于前者,seaborn的优势主要体现在以下几个方面:

Seaborn对dataframede数据结构的支持更友好

例如,Seaborn能够直接处理Pandas的DataFrame数据结构,你可以直接将列名作为参数传递给绘图函数。在下面的例子中,对于同一个datagframe,seaborn的代码相对于前者,显得更加优雅。

import matplotlib.pyplot as plt
import pandas as pd
df = pd.DataFrame({"A": range(10), "B": range(10, 20)})
# 用matplotlib实现:
plt.scatter(df["A"], df["B"])
plt.show()
# 用seaborn实现:
import seaborn as sns
sns.scatterplot(data=df, x="A", y="B")
plt.show()

Seaborn生成的图更加灵活

相比于Matplotlib,Seaborn提供了更丰富的图形类型,如热力图、箱线图、小提琴图等。这些图形类型在Matplotlib中可能需要编写大量代码才能实现。

import seaborn as sns  
import matplotlib.pyplot as plt  
  
# 加载内置的鸢尾花数据集  
iris = sns.load_dataset("iris", cache=True, data_home="C:\Python36\Lib\site-packages\seaborn\seaborn-data")  
  
# 选择一个特征(例如:花瓣长度,"petal_length")绘制核密度图  
sns.kdeplot(iris["petal_length"])  
plt.show()_length")绘制核密度图  
sns.kdeplot(iris["petal_length"])

9999.png

10.3 Pyecharts

pyecharts是一个功能强大且易于使用的Python数据可视化库,通过其简单的API接口和丰富的配置选项,用户可以轻松地创建出各种交互式、个性化的图表和可视化效果。无论是数据探索、数据分析还是结果展示,pyecharts都是一个非常有用的工具。

from pyecharts import options as opts  
from pyecharts.charts import Bar  
  
# 定义 x 轴数据和 y 轴数据  
x_data = ['A', 'B', 'C', 'D', 'E']  
y_data = [10, 20, 30, 40, 50]  
  
# 创建柱状图对象  
bar_chart = (  
Bar()  
.add_xaxis(x_data)  
.add_yaxis("Y 轴标题", y_data)  
.set_global_opts(title_opts=opts.TitleOpts(title="柱状图示例"))  
)  
  
# 生成 HTML 文件并可在浏览器中打开  
bar_chart.render("bar_chart.html")

1699284391(1).png

echarts自从诞生以来,经过不断迭代,目前可支持的图表有了很大的扩充,为用户提供了及其丰富的图表类型。而另一方面,因为其html的支持和轻量化的设计,在数据类应用中得到了广泛的运用。关于echarts的使用和说明,后续将继续研究和探索。有关echarts的说明可以参见官方网站:echarts.apache.org/zh/index.ht…

总而言之,无论是用什么可视化工具,我们把数据做可视化的目的是为了更好地了解数据,这些工具只是辅助分析的一部分,在后续的分析中,不要局限于可视化本身,要灵活地应用各类数据化工具,来帮助分析数据,说明问题,用数据说话。