在上一节(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()
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()
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()
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()
10.1.5. 箱线图(Box plot)
箱线图主要用于展示变量的中位数、四分位数和异常值,适用于连续的数值变量。
import matplotlib.pyplot as plt
import numpy as np
data = np.random.randn(1000)
plt.boxplot(data)
plt.show()
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()
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()
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()
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()
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.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>
可通过镜像站把数据集下载到本地,下载地址(二选一):
下载完成后,可在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"])
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")
echarts自从诞生以来,经过不断迭代,目前可支持的图表有了很大的扩充,为用户提供了及其丰富的图表类型。而另一方面,因为其html的支持和轻量化的设计,在数据类应用中得到了广泛的运用。关于echarts的使用和说明,后续将继续研究和探索。有关echarts的说明可以参见官方网站:echarts.apache.org/zh/index.ht…
总而言之,无论是用什么可视化工具,我们把数据做可视化的目的是为了更好地了解数据,这些工具只是辅助分析的一部分,在后续的分析中,不要局限于可视化本身,要灵活地应用各类数据化工具,来帮助分析数据,说明问题,用数据说话。