介绍

在数据科学和分析的领域,数据能力的释放不仅是通过提取见解的方式, 同时也要能通过有效的方式来传达见解.这就是数据可视化发挥见解的地方.

数据可视化是信息和数据的可视化呈现. 它使用可视化元素,如图表、图形、地图,使其更容易看懂原始数据中的模式、趋势及异常值.对于数据科学家和分析师来说,数据可视化是一个必不可少的工具,它有助于更快、更准确地理解数据,支持用数据讲故事.并帮助做出数据驱动的决策.

在这篇文章中, 你将学会用Python和Dash框架创建一个仪表盘来可视化Netflix的内容分布和分类.

什么是Dash?

Dash是一个开源的低代码框架,由 Plotly 开发, 用来在纯Python中创建分析型的网络应用.传统上为了实现这个目的, 可能需要使用JavaScript和HTML,要求你在后端(Python)和前端(JavaScript和HTML)有所专长.

然而,Dash 弥补了这一差距.使数据科学家和分析师只用Python就可以建立互动的、美观的仪表盘.这方面的低代码开发使Dash成为创建分析性仪表盘的合适选择,特别是对于那些主要使用Python的人.

数据集分析

现在你已经熟悉了Dash, 让我们开始我们的实践项目吧.你将使用Kaggle上Netflix电影和电视节目数据集,由 Shivam Bansal创建.

这个数据集包含截止至2021年Netflix提供的电影和电视节目详细信息,比如内容类型,标题,导演,演员,制作国家.发行年份,评级,持续时间等等.

即使该数据集创建于2021年,它仍然是发展数据可视化技能和了解媒体娱乐趋势的宝贵资源。

使用这个数据集,你的目标是创建一个仪表盘,使以下几点可视化:

  • 内容的地理分布: 一张地图,展示了多年来不同国家的内容生产情况的变化。
  • 内容分类: 这种可视化方法将Netflix的内容分为电视节目和电影,以查看哪些类型的内容最突出。

设置项目工作区

让我们开始为项目创建一个名为netflix-dashboard的目录,然后通过以下命令初始化并激活一个Python虚拟环境:

mkdir netflix-dashboard && cd netflix-dashboard

python3 -m venv netflix-venv && source netflix-venv/bin/activate

接下来,你需要安装一些外部软件包。你将使用pandas进行数据处理,dash用于创建仪表盘,plotly用于创建图表,dash-bootstrap-components用于为仪表盘添加一些样式:

pip3 install pandas dash plotly dash-bootstrap-components

清理数据集

通过Netflix的数据集,你会发现导演、演员和国家这几列的数值缺失。为了方便分析,将date_added列的字符串值转换为日期时间也很方便。

为了清理数据集,你可以创建一个新的文件clean_netflix_dataset.py,代码如下,然后运行它:

import pandas as pd

# Load the dataset
df = pd.read_csv("netflix_titles.csv")
df['director'].fillna("No director", inplace=True)
df['cast'].fillna("No cast", inplace=True)
df['country'].fillna("No country", inplace=True) # Drop missing and duplicate values
df.dropna(inplace=True)
df.drop_duplicates(inplace=True) df['date_added'] = pd.to_datetime(df['date_added'].str.strip()) # Save the cleaned dataset
df.to_csv('netflix_titles_cleaned.csv', index=False)

开始使用Dash

随着工作区的建立和数据集的清理,你已经准备好开始制作你的仪表盘了。创建一个新文件app.py,代码如下:

from dash import Dash, dash_table, html

# Initialize a Dash app

app = Dash(__name__)

# Define the app layout
app.layout = html.Div([
html.H1("Netflix Movies and TV Shows Dashboard"),
html.Hr(),
]) # Start the dash app in local development mode if __name__ == "__main__":
app.run_server(debug=True)

让我们来分析一下app.py中的代码:

  • app = Dash(__name__): 这一行初始化了一个新的Dash应用程序。可以把它看作是你的应用程序的基础。
  • app.layout = html.Div(...): app.layout属性让你写类似HTML的代码来设计你的应用程序的用户界面。上面的布局使用html.H1(...)标题元素作为仪表盘的标题,并在标题下面使用水平规则html.Hr()元素。
  • app.run(debug=True): 这一行启动一个开发服务器,在本地开发模式下为你的Dash应用提供服务。Dash使用Flask,一个轻量级的Web服务器框架,将你的应用程序提供给Web浏览器。

在运行app.py之后,你会在终端看到一条信息,表明你的Dash应用程序正在运行,并且可以访问http://127.0.0.1:8050/。在你的网络浏览器中打开这个URL来查看它:

结果看起来很普通,对吗?不要担心! 本节旨在展示最基本的Dash应用结构和组件。你很快就会添加更多的功能和组件,使之成为一个很酷的仪表板.

引入Dash Bootstrap组件

下一步是为你的仪表盘的布局编写代码,并为它添加一些样式. 为此,你可以使用Dash Bootstrap Components(DBC),这是一个为Dash提供Bootstrap组件的库,使你能够开发具有响应式布局的风格的应用程序。

仪表板将采用标签布局,这为在同一空间内组织不同类型的信息提供了一种紧凑的方式。每个标签将对应于一个独特的可视化。

让我们继续修改app.py的内容以纳入DBC:

from dash import Dash, dcc, html
import dash_bootstrap_components as dbc # Initialize a Dash app
app = Dash(__name__, external_stylesheets=[dbc.themes.BOOTSTRAP]) # Define the app layout
app.layout = dbc.Container([
dcc.Store(id='store'),
html.H1("Netflix Movies and TV Shows Dashboard"),
html.Hr(),
dbc.Tabs([
dbc.Tab(label='Geographical content distribution', tab_id='tab1'),
dbc.Tab(label='Content classification', tab_id='tab2')
],
id="tabs",
active_tab='tab2'
),
html.Div(id="tab-content", className='p-4')
]) # Start the dash app in local development mode
if __name__ == "__main__":
app.run_server(debug=True)

在这个修改后的布局中,你会看到新的组件:

dbc.Container: 使用dbc.Container作为顶层组件,将整个仪表盘布局包裹在一个响应式的、灵活的容器中。

dcc.Store: 这个Dash Core组件允许你在客户端(用户的浏览器上)存储数据,通过将数据保存在本地来提高应用程序的性能。

dbc.Tabsdbc.Tab: 每个dbc.Tab代表一个单独的标签,它将包含不同的可视化内容。标签属性是出现在标签本身上的内容,而tab_id则用于识别标签。dbc.Tabs的active_tab属性用于指定Dash应用程序启动时的活动标签。

现在运行app.py。现在产生的仪表板将有一个Bootstrap风格的布局,有两个空标签:

添加回调和可视化

当使用Dash时,互动性是通过回调函数实现的。回调函数是一个当输入属性发生变化时被自动调用的函数。它被命名为 "回调",因为每当应用程序中发生变化时,Dash就会 "回调 "这个函数。

在这个仪表盘中,你将使用回调来渲染所选标签中的相关可视化内容,每个可视化内容都将存储在自己的Python文件中,在一个新的组件目录下,以便更好地组织和模块化项目结构。

[译]使用Python和Dash 创建一个仪表盘(上)的更多相关文章

  1. 【译】采用MVC模式创建一个简单的javascript App

    原文标题:Build A Simple Javascript App The MVC Way 作者:joshcrawmer4 翻译人:huansky 初次翻译,翻译的不好,还请见谅 JavaScrip ...

  2. python+mysql+flask创建一个微博应用(持续更新)

    微博应用的结构: 用户管理,包括登录管理,会话,用户角色,个人档案及用户头像. 数据库管理,包括数据库迁移处理. Web表单支持,包括字段检验和用于防止垃圾邮件的验证码功能. 大数据的分页功能. 全文 ...

  3. python使用__new__创建一个单例模式(单例对象)

    #单例模式:使一个类只产生一个对象.他们的id地址都指向同一个内存地址 第一步:理解谁创建了对象 # 单例模式# 首先明白,我们在创建一个类的对象的时候,其实是调用的这个类的父类,即继承object, ...

  4. python web编程 创建一个web服务器

    这里就介绍几个底层的用于创建web服务器的模块,其中最为主要的就是BaseHTTPServer,很多框架和web服务器就是在他们的基础上创建的 基础知识 要建立一个Web 服务,一个基本的服务器和一个 ...

  5. 【译】Python中如何创建mock?

    原文地址:http://engineroom.trackmaven.com/blog/making-a-mockery-of-python/ 今天我们来谈论下mock的使用.当然,请不要误会,这里的m ...

  6. 用Python+qrcode库创建一个包含信息的二维码

    安装qrcode库和PIL库 在命令行中分别输入pip install qrcode 和pip install pillow 导入库格式如下: import PIL import qrcode 下面以 ...

  7. python使用wxPython创建一个简单的文本编辑器。

    ubuntu下通过'sudo apt-get install python-wxtools'下载wxPython.load和save函数用于加载和保存文件内容,button通过Bind函数绑定这两个函 ...

  8. [译]如何在GitHub仓库创建一个标签tag, 并推送到远程分支?

    问: 我在GitHub上有一个仓库,我需要给他打个tag.我在shell打了tag,但是在Github上没有显示出来.我还要做其他什么么? 我在shell中使用的命令是: git tag 2.0 当我 ...

  9. python学习--抓取一个网页上图片

    #!/bin/python # download_pic.py # download picture import os import sys from urllib.request import u ...

  10. python利用socket写一个文件上传

    1.先将一张图片拖入‘文件上传’的目录下,利用socket把这张图片写到叫‘yuan’的文件中 2.代码: #模拟服务端 import subprocess import os import sock ...

随机推荐

  1. LAL v0.35.4发布,OBS支持RTMP H265推流,我跟了

    Go语言流媒体开源项目 LAL 今天发布了v0.35.4版本. LAL 项目地址:https://github.com/q191201771/lal 老规矩,简单介绍一下: ▦ 一. OBS支持RTM ...

  2. MyQR--生成个性二维码

    1.二维码定义: 二维码(2-Dimensional Bar Code),是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的.它是指在一维条码的基础上扩展出另一 ...

  3. Prism Sample 7 Modules Directory

    这种方式用扫描目录的方式来增加模块,具备最大的灵活性 仍然在App.xaml.cs中增加了以下代码 protected override IModuleCatalog CreateModuleCata ...

  4. #Python 文本包含函数,pandas库 Series.str.contains 函数

    一:基础的函数组成 '''Series.str.contains(pat,case = True,flags = 0,na = nan,regex = True)'''测试pattern或regex是 ...

  5. 2021-09-17:给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。进阶:你能尝试使用一趟扫描实现吗?

    2021-09-17:给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点.进阶:你能尝试使用一趟扫描实现吗? 福大大 答案2021-09-17: 双指针. 1.创建虚拟头节点preHea ...

  6. uni-app Flex布局

    Flexbox #Flex 容器 Flex 是 Flexible Box 的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性. nvue布局模型基于 CSS Flexbox, ...

  7. JavaWeb概念

    1 基本概念 1.1 前言 web开发: web,网页的意思,类如:www.baidu.com 静态web: html,css 提供给所有人看到的数据始终不会改变! 动态web: 几乎所有的网站:类如 ...

  8. java设计模式【抽象工厂模式】

    java设计模式[抽象工厂模式] 抽象工厂模式 抽象工厂模式是对简单工厂模式的一个变种,它允许通过一个统一的接口来创建不同的产品实例,而无需指定具体的子类.在这个模式中,我们只关心产品的抽象接口,而将 ...

  9. linux FTP文本传输

    目录 一.文本传输协议 二.连接方式 三.程序安装 四.黑名单和白名单 五.实验 1.实验一:匿名用户下载与上传 2.实验二:关闭匿名用户登录,允许普通用户登录在家目录上传和下载 3.实验三:禁止用户 ...

  10. 现代 CSS 解决方案:CSS 原生支持的三角函数

    在 CSS 中,存在许多数学函数,这些函数能够通过简单的计算操作来生成某些属性值,例如 : calc():用于计算任意长度.百分比或数值型数据,并将其作为 CSS 属性值. min() 和 max() ...