数据可视化怎么才能更简单?这5个技能是关键
John Loewen开智学堂
作者:John Loewen 来源:Substack,开智学堂翻译
全球有 54% 的程序员选择 Python 作为他们的编程语言,其中 47% 用它来完成数据分析任务(来源:2023 年 Statista 报告)。这让 Python 的受欢迎程度迅速上升,目前仅次于 Javascript,成为全球第二大最流行的编程语言。
Python 的一个重要特点是它在数据可视化方面的强大功能。然而,数据可视化的过程往往较为复杂且耗时。
有没有办法让数据可视化变得更简单呢?
下面介绍 5 项关键技能,帮助你优化 Python 的数据可视化工作流程。
1. 掌握 Python 数据可视化库
熟悉 Python 中常用的数据可视化库,比如 Matplotlib, Seaborn 和 Plotly。每个库都有其独特的优势和适用场景。
例如,Matplotlib 非常适合创建静态、动画和交互式图表。
Seaborn 是基于 Matplotlib 开发的高级工具,能够方便地绘制美观且信息丰富的统计图形。
而 Plotly 则以其强大的交互式图表功能而闻名。
示例:
以下是使用 Matplotlib 创建折线图的一个简单示例:
import matplotlib.pyplot as pltx = [1, 2, 3, 4, 5]y = [1, 4, 9, 16, 25]plt.plot(x, y)plt.show()
对于 Seaborn,你可以用它来方便地创建直方图:
import seaborn as snsdata = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]sns.histplot(data)plt.show()
而使用 Plotly,则可以生成交互式的散点图:
import plotly.express as pxdf = px.data.iris()
fig = px.scatter( df, x="sepal_width", y="sepal_length", color="species", color_discrete_sequence=["#FFA500", "#FFD700", "#FFB347"], # Shades of orange and yellow title="Sepal Dimensions Scatter Plot (Yellow & Orange Theme)", labels={"sepal_width": "Sepal Width", "sepal_length": "Sepal Length"})
fig.show()
需要注意的事项: 建议不要试图一次性学习所有的可视化库。从一个库开始,先熟练掌握它,再逐步学习其他库。
这样可以帮助你打下扎实的基础,同时避免学习过程中出现混淆。
2. 理解数据清洗与预处理
当你掌握了基本的可视化方法后,下一步就需要深入学习如何清洗和预处理数据集。
在数据集中,经常会遇到一些问题,比如如何处理缺失值、删除重复数据,或者对数据进行格式转换。
在这个过程中,了解 pandas 库是非常必要的。
Pandas 是一个功能强大的 Python 数据处理库,目前已经成为整理数据集以用于可视化的主流工具。
示例:
以下是一个用 pandas 处理缺失值的简单示例:
import pandas as pddf = pd.DataFrame({"A": [1, 2, np.nan], "B": [5, np.nan, np.nan], "C": [1, 2, 3]})df.fillna(value=df.mean(), inplace=True)
此外,还可以轻松去除 DataFrame 中的重复数据:
df = pd.DataFrame({"A": [1, 2, 2], "B": [5, 5, 6], "C": [1, 2, 3]})df.drop_duplicates(inplace=True)
常见误区: 切勿忽略数据清理步骤。使用未经清理的数据会导致可视化结果不准确,甚至得出误导性的结论。
当你掌握了可视化的基础知识,并学会如何创建一个 DataFrame 时,就可以将两者结合起来。
例如,利用一个关于全球幸福指数的简单数据集,我们可以通过 pandas 访问数据集,然后创建一个简单的折线图:
import pandas as pdimport matplotlib.pyplot as plt
# Load the datasetdf = pd.read_csv('happiness_years02.csv')
# Extract the data for Canadacanada_data = df[df['Country'] == 'Canada'].iloc[:, 1:8] # Selecting columns from 2015 to 2021
# Extract the years as they will be our x-axisyears = canada_data.columns
# Plottingplt.figure(figsize=(10, 6))plt.plot(years, canada_data.iloc[0], linestyle='-', color='red')plt.title('Happiness Score in Canada (2015-2021)')plt.xlabel('Year')plt.ylabel('Happiness Score')
plt.show()
在上面的代码中,我们导入了 pandas 和 matplotlib 两个库。借助 pandas 的内置函数 read_csv(),我们可以读取数据集。接着,通过 iloc() 函数提取出加拿大的数据。
获取加拿大的数据后,我们可以将年份设置为 x 轴,然后使用 matplotlib 的 plot() 函数绘制折线图。最后,添加标题和坐标轴标签,图表就完成了。
最终生成的可视化图表:
3. 使用 ChatGPT 掌握模块化提示
模块化提示(Modular Prompting)是一种通过向 ChatGPT 提供特定指令(Prompt)来生成 Python 代码片段的方法。
要掌握这一技能,首先需要学会如何有效地组织提示的结构。
例如,如果你希望使用 Seaborn 绘制柱状图,可以输入这样的提示:“请生成一个 Seaborn 柱状图,数据来源为 DataFrame ‘df’,其中 ‘x’ 为横轴,‘y’ 为纵轴。”
示例: 以下是一个使用提示生成 Seaborn 柱状图的案例:
ChatGPT 提示:
请生成一个 Seaborn 柱状图,数据来源为 DataFrame ‘df’,其中 ‘x’ 为横轴,‘y’ 为纵轴。
ChatGPT 回复:
import seaborn as snssns.barplot(x='x', y='y', data=df)plt.show()
以上一节的示例数据为例,如果您拥有 GPT-4 的使用权限,可以上传数据文件,让 GPT-4 展示其强大的数据可视化能力。
您只需点击“附件”图标上传文件,然后输入提示即可:
以下是一个简单的例子:
GPT-4 会快速生成可用的 Python Plotly 代码(注意:您可能需要修改 read_csv() 函数中的路径,以确保正确指向您的 CSV 文件):
import plotly.graph_objects as goimport pandas as pd
# Load the datasetdf = pd.read_csv('happiness_years02.csv')
# only data for top 5 from 2015-2021df_top5 = df.sort_values(by='2021', ascending=False).head(5)
# Create a figure to plot the datafig = go.Figure()
# Loop through the top 5 countriesfor index, row in df_top5.iterrows(): fig.add_trace(go.Scatter(x=df.columns[1:8], y=row[1:8], mode='lines', name=row['Country']))
fig.update_layout(title='Happiness Score of Top 5 Countries (2015-2021)', xaxis_title='Year', yaxis_title='Happiness Score', legend_title='Country')
# Show the figurefig.show()
运行代码后,您将看到生成的数据可视化结果(此示例是在我的 PyCharm IDE 中运行的):
是不是很简单?
需要避免的错误:不要使用模糊或过于复杂的提示。提示越具体清晰,生成的代码就越准确。建议以模块化的方式逐步进行,这样在需要回溯时会更加方便。
4. 探索聚合数据可视化
数据聚合是指通过对数据进行总结和归纳,使趋势或模式更加清晰。这种方法可以简化复杂的数据集,减少干扰(例如离群值或无关细节),让我们更专注于数据背后的洞察。
使用 Seaborn 实现简单的聚合示例:
import seaborn as snsimport matplotlib.pyplot as pltimport pandas as pd
# Example datasetdata = { 'Category': ['A', 'A', 'B', 'B', 'C', 'C', 'C', 'D', 'D', 'D'], 'Value': [10, 15, 20, 25, 30, 35, 40, 20, 10, 15]}df = pd.DataFrame(data)
# Aggregate the data: calculate the mean value for each categoryaggregated_data = df.groupby('Category', as_index=False)['Value'].mean()
# Create the bar plotplt.figure(figsize=(8, 5))sns.barplot(x='Category', y='Value', data=aggregated_data, palette='Yellow_d')
# Customize the plotplt.title('Aggregated Values by Category', fontsize=16)plt.xlabel('Category', fontsize=12)plt.ylabel('Average Value', fontsize=12)plt.show()
为了汇总数据(类别和值):
- 使用
groupby
函数按类别对数据进行分组。 - 使用
.mean()
方法计算每个类别的平均值。 - 例如,类别 “C” 的平均值为
(30 + 35 + 40) / 3 = 35
。
接下来,可以将汇总后的数据进行可视化:
- 柱状图通过每个类别对应的柱子高度来表示平均值。
- 这让我们可以轻松地一眼比较类别 “A”、”B”、”C” 和 “D” 的平均值。
需要注意的误区: 如果选择了不合适的统计指标(比如在适合用中位数的情况下却选择了平均值),可能会导致数据被误解。因此,在选择聚合指标时,一定要结合数据集的特点和背景来判断(例如,对于偏态分布的数据使用中位数,对于分类数据使用众数)。
5. 打牢 Python 基础
实用建议: 虽然模块化提示(Modular Prompting)和 ChatGPT 能显著简化编码过程,但学习 Python 的核心基础依然至关重要。这包括掌握 Python 的语法、控制流以及常见的数据结构。
推荐资源:
- Codecademy 的 Python 课程:这是一门互动式课程,涵盖了 Python 的基础知识,从语法和数据类型到控制流和函数,特别适合初学者入门。
- LeetCode: LeetCode 提供了丰富的编程练习题库,可以帮助你提升 Python 编程能力,尤其是在算法与问题解决方面。
- Python.org 的官方文档: 官方文档是 Python 最全面的参考资料,适合初学者查阅,也能满足有经验程序员的深度学习需求。
需要注意的误区: 不要完全依赖 ChatGPT 等 AI 工具来写代码。它们可以用来提高效率,但不能完全替代你对编程的理解和掌控。
总结
提升数据可视化能力并没有万能工具或单一技能,最有效的方法是综合学习和实践。
通过深入学习 Python 的可视化库,掌握模块化提示的用法,熟练处理和清理数据,打牢 Python 编程基础,并保持持续学习和适应新技术的习惯,你可以大幅提升自己的数据可视化效率。
这样一来,你可以把更多精力放在思考数据可视化的目标上,而不是耗费大量时间在琢磨如何实现这些目标。
Python 依然是全球最流行的编程语言之一——尽早掌握它会让你受益匪浅。■