大家好,在数据科学领域,精心制作的叙述方式对于数据很重要,它能让数据变得易于理解和有趣。Python的Plotly库是一种在有意义的方式上可视化数据集的强大工具,以下是关于如何使用Python plotly库以相关、有意义和可视化的方式为数据增色的5个专业技巧。
描述:在进行数据可视化之前,了解正在处理的数据集非常重要。
了解数据的结构、内容和背景可以对所讲述的故事产生重大影响。
本指南中使用的数据集是“选举民主指数(Electoral Democracy Index)”,请点击如下链接获取。
【数据集】:https://ourworldindata.org/grapher/democracy-index-polity
该数据集中的字段包括:
国家:国家或地区的名称。
代码:ISO 3个字母国家代码。
年份:记录数据的年份。
选举民主指数:表示给定年份该实体的选举民主指数的数值。该指数可用于衡量选举中的民主实践水平。
访问此数据集的Python代码可以使用以下代码:
import pandas as pd
# CSV文件的路径
file_path = 'path_to/electoral-democracy-index.csv'
# 加载数据集
data = pd.read_csv(file_path)
# 显示数据帧的前几行,以了解其结构
print(data.head())
代码说明:此代码片段演示了如何使用pandas
加载选举民主指数数据集。使用read_csv
函数读取CSV文件(确保路径与CSV文件的位置一致),data.head()
用于显示数据帧的前几行。
现在已经有了一些相关数据可供使用,接下来要介绍的是使用技巧。
每个精彩的数据故事都始于一个有趣的叙述。这种叙述是数据展示的主干,它提供了背景,并以一种相关和有洞察力的方式来构建数据。
import pandas as pd
import plotly.express as px
data = pd.read_csv('electoral-democracy-index.csv')
latest_year_data = data[data['Year'] == max(data['Year'])]
fig = px.choropleth(latest_year_data, locations="Code",
color="Electoral democracy index",
hover_name="Entity",
color_continuous_scale=px.colors.sequential.Plasma)
fig.show()
代码说明:此代码使用选举民主指数数据集中的最新可用数据生成一个区域地图。它提供了各个国家之间民主水平的视觉表示,便于对民主趋势进行全球分析。
数据可视化:
从CSV文件创建的简单Plotly区域地图
对于以国家为单位表示的定量值,区域地图是提供即时全球可视化比较工具的好方法。
数据故事叙述的核心在于突出显示数据中的关键要点。从定量的角度来看,就是要引导受众的注意力转向你试图从数据中提取的最重要数字。
代码:
countries_of_interest = ['United States', 'Canada', 'Sweden', 'India', 'Brazil']
filtered_data = data[data['Entity'].isin(countries_of_interest)]
fig = px.line(filtered_data, x='Year', y='Electoral democracy index', color='Entity')
fig.show()
代码说明:此折线图可跟踪选定国家的民主指数随时间的变化。通过它可以轻松比较民主趋势,突出显示不同国家在民主治理方面的发展情况。
Plotly折线图展示5个知名国家民主随时间演变的情况
交互式可视化是现代数据故事叙述的核心。它能够吸引观众,让他们以更加亲身参与的方式探索数据。
top_10_2020 = data[data['Year'] == 2020].nlargest(10, 'Electoral democracy index')
fig = px.bar(top_10_2020, x='Entity', y='Electoral democracy index', color='Electoral democracy index')
fig.show()
代码说明:这个交互式柱状图显示了2020年民主指数排名前十的国家。它允许用户与数据进行交互,从而提供了对民主治理领先国家的另一种视角。
交互式的Plotly柱状图显示2020年民主指数排名前十的国家
通过将鼠标悬停在可视化图表中的每个柱状图上,用户可以找到所显示的每个国家的更多详细信息。
将交互式滑块整合到仪表盘中,让用户可以动态地改变显示的数据。对于跨度长达数年的数据集,这一点尤其有用,因为它可以让用户观察时间上的趋势和变化。
import dash
from dash import html, dcc
from dash.dependencies import Input, Output
import plotly.express as px
import pandas as pd
# 加载数据集
data = pd.read_csv('electoral-democracy-index.csv')
# 过滤掉1900年之前的数据并创建一个“Decade”列
data = data[data['Year'] >= 1900]
data['Decade'] = (data['Year'] // 10) * 10
# 初始化Dash应用程序
app = dash.Dash(__name__)
# 定义应用程序的布局
app.layout = html.Div([
html.H1("Global Electoral Democracy Index by Decade"),
dcc.Slider(
id='decade-slider',
min=data['Decade'].min(),
max=data['Decade'].max(),
value=data['Decade'].max(),
marks={str(decade): str(decade) for decade in data['Decade'].unique()},
step=None
),
dcc.Graph(id='graph-with-slider')
])
# 定义回调函数来更新图形
@app.callback(
Output('graph-with-slider', 'figure'),
[Input('decade-slider', 'value')])
def update_figure(selected_decade):
filtered_data = data[data.Decade == selected_decade]
fig = px.choropleth(filtered_data, locations="Code",
color="Electoral democracy index",
hover_name="Entity",
color_continuous_scale=px.colors.sequential.Viridis)
fig.update_layout(
title=f'Electoral Democracy Index in the {selected_decade}s',
geo=dict(showframe=False, showcoastlines=False, projection_type='equirectangular'),
transition_duration=500
)
return fig
# 运行应用程序
if __name__ == '__main__':
app.run_server(debug=True)
代码说明:这个Dash应用程序包含一个滑块和一个区域地图。滑块设置为允许用户从数据集中选择年份(为便于阅读,按十年为单位设置),当用户移动滑块时,地图会更新显示所选年代的选举民主指数数据。这种动态交互是通过Dash中的回调函数实现的,该函数会监听滑块值的变化,并相应地更新图表。
带有滑块的Plotly交互式仪表盘,用户可通过滑块选择年份(按十年为单位)
Plotly仪表盘是允许用户进行交互的一种绝妙方式。通过这个例子,用户可以通过点击滑块(按十年为单位),查看选举民主指数随时间的演变(或退化)。
讲述数据故事的最后一步是分享你的故事。Plotly能够以各种格式导出可视化结果,使这一步变得轻松无缝。
fig.write_image("democracy_index.png") # 保存为图片
fig.write_html("democracy_index.html") # 保存为交互式HTML
代码说明:这段代码演示了如何将Plotly的可视化结果导出为静态图片和交互式HTML文件,以便于分享和传播数据故事。
综上所述,Python Plotly是一个非常出色的库,可以锤炼在讲述数据故事艺术方面的技能。从研究选举民主指数数据集到创建相关且有趣的可视化图表,我们亲眼见证了Plotly为现代数据故事讲述者提供了详细的选项和交互功能。