pyecharts实现电影数据分析可视化

根据电影数据,使用pyecharts进行可视化分析。

数据介绍

import pandas as pd
data=pd.read_csv('./电影.csv')
data.head()

前5行数据如下:
在这里插入图片描述
需要安装的python库

pip install pandas
pip install pyecharts

文章目录

  • 数据介绍
  • 数据清洗
  • 数据可视化
    • 上映年份及电影数量
    • 导演及电影数量TOP10
    • 编剧及电影数量TOP10
    • 电影片长及数量
    • 电影评分及数量

数据清洗

查看缺失值

data.isnull().sum()

有部电影没有给出编剧和主演,因此没有爬取到,这不影响数据的分析及可视化。
在这里插入图片描述
之前数据介绍时可以看到,获取的数据各字段目前没有需要清洗的。这个环节就跳过吧。(想加个表情,没找到在哪加。)

数据可视化

上映年份及电影数量

Year=data['上映年份'].value_counts().reset_index()
Year.rename(columns={"index":"上映年份","上映年份":"电影数量"},inplace=True)
Year.head()

在这里插入图片描述
我是在jupyter notebook中运行的,如果你在其他编辑器中运行,更改代码最后一行bar.render_notebook()bar.render("xxx.html"),运行成功会生成一个xxx.html的文件,你打开应该就能看到可视化图表。后续代码同理。

bar = (
    Bar(init_opts=opts.InitOpts(height='700px', theme='light'))
    .add_xaxis(
        Year['上映年份'].tolist()[::-1])
    .add_yaxis(
            "电影数量",
            Year['电影数量'].tolist()[::-1],
            label_opts=opts.LabelOpts(is_show=False),
        )
    .set_series_opts(itemstyle_opts=opts.ItemStyleOpts(
            border_color='#5C3719', ))
    .set_global_opts(
                title_opts=opts.TitleOpts(
                    title='上映年份及电影数量',
                    subtitle='截止2023年3月',
                    title_textstyle_opts=opts.TextStyleOpts(
                        font_family='Microsoft YaHei',
                        font_weight='bold',
                        font_size=22,
                    ),
                    pos_top='1%'),
                legend_opts=opts.LegendOpts(is_show=True),
                xaxis_opts=opts.AxisOpts(
                    #             name='电影数量',
                    is_show=True,
                    max_=int(Year['电影数量'].max()),
                    axislabel_opts=opts.LabelOpts(
                        font_family='Microsoft YaHei',
                        font_weight='bold',
                        font_size='14'  #标签文本大小
                    )),
                yaxis_opts=opts.AxisOpts(
                    #             name='上映年份',
                    is_show=True,
                    axislabel_opts=opts.LabelOpts(
                        #interval=0,#强制显示所有y轴标签,需要可以加上
                        font_family='Microsoft YaHei',
                        font_weight='bold',
                        font_size='14'  #标签文本大小
                    )),
                tooltip_opts=opts.TooltipOpts(
                    is_show=True,
                    trigger='axis',
                    trigger_on='mousemove|clike',
                    axis_pointer_type='shadow',
                    ),
                toolbox_opts=opts.ToolboxOpts(is_show=True,
                    pos_left="right",
                    pos_top="center",
                    feature={"saveAsImage":{}}
                    )
    ).reversal_axis())
bar.render_notebook()

在这里插入图片描述
这里我没设置显示全部Y轴标签,代码中给出了强制显示所有Y轴标签的注释。根据图表得出,2010年上映的电影数量最多,为14部电影。

导演及电影数量TOP10

Director=data['导演'].value_counts()[0:11].reset_index()
Director.rename(columns={"index":"导演","导演":"电影数量"},inplace=True)
Director.head()

在这里插入图片描述

pie = (
    Pie(init_opts=opts.InitOpts(theme='light'))
    .add(
        series_name='电影类型',
        data_pair=[list(z) for z in zip(Director['导演'].to_list(), Director['电影数量'].to_list())],
        radius=["40%", "75%"],
    )
#     .set_colors(["blue", "green", "yellow", "red", "pink", "orange", "purple"])
    .set_global_opts(
        title_opts=opts.TitleOpts(
            title="导演及电影数量",
            subtitle='TOP10',
                    title_textstyle_opts=opts.TextStyleOpts(
                        font_family='Microsoft YaHei',
                        font_weight='bold',
                        font_size=22,
                    ),
            ),
        legend_opts=opts.LegendOpts(
            pos_left="left",
            pos_top="center",
            orient='vertical',
            is_show=True
            ),
        toolbox_opts=opts.ToolboxOpts(
            is_show=True,
            pos_left="right",
            pos_top="center",
            feature={"saveAsImage":{}}
            )
    )
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
)
pie.render_notebook()

在这里插入图片描述
这个只取了TOP10的数据,如果你想取更多的数据,更改

Director=data['导演'].value_counts()[0:11].reset_index()

[0:10]表示从索引0取到索引9,你可以自己更改。

编剧及电影数量TOP10

Screenwriter=data['编剧'].value_counts()[0:11].reset_index()
Screenwriter.rename(columns={"index":"编剧","编剧":"电影数量"},inplace=True)
Screenwriter.head()

在这里插入图片描述

c = (
    Pie(init_opts=opts.InitOpts(theme='light'))
    .add(
        "",
        [list(z) for z in zip(Screenwriter['编剧'].to_list(), Screenwriter['电影数量'].to_list())],
        radius=["30%", "75%"],
        rosetype="radius",
        )
    .set_global_opts(
        title_opts=opts.TitleOpts(
            title="编剧及电影数量",
            subtitle='TOP10',
        ),
        
        legend_opts=opts.LegendOpts(
            pos_left="left",
            pos_top="center",
            orient='vertical',
            is_show=True,
        )
    )
)
c.render_notebook()

在这里插入图片描述

电影片长及数量

Film_length=data['片长'].value_counts().sort_index().reset_index()
Film_length.rename(columns={"index":"片长","片长":"电影数量"},inplace=True)
Film_length

在这里插入图片描述

c = (
    Bar()
    .add_xaxis(Film_length['片长'].to_list())
    .add_yaxis(
        "电影数量", Film_length['电影数量'].to_list(),
        label_opts=opts.LabelOpts(is_show=False),
              )
    .set_global_opts(title_opts=opts.TitleOpts(title="电影片长及数量"))
)
c.render_notebook()

在这里插入图片描述
电影的片长,这个最短45分钟,最长238分钟,主要集中在98-132分钟左右。我觉得电影的质量和它的时长是没有关系的,主要还是内容吧。

电影评分及数量

Douban_score=data['豆瓣评分'].value_counts().sort_index(ascending=False).reset_index()
Douban_score.rename(columns={"index":"豆瓣评分","豆瓣评分":"电影数量"},inplace=True)
Douban_score

在这里插入图片描述

    Line()
    .set_global_opts(
        title_opts=opts.TitleOpts(title="电影豆瓣评分及数量"),
        xaxis_opts=opts.AxisOpts(type_="category"),
        yaxis_opts=opts.AxisOpts(
            type_="value",
            axistick_opts=opts.AxisTickOpts(is_show=True),
            splitline_opts=opts.SplitLineOpts(is_show=True),
        ),
    )
    .add_xaxis(xaxis_data=Douban_score['豆瓣评分'])
    .add_yaxis(
        series_name="电影数量",
        y_axis=Douban_score['电影数量'],
        symbol="emptyCircle",
        is_symbol_show=True,
        label_opts=opts.LabelOpts(is_show=False),
        itemstyle_opts=opts.ItemStyleOpts(
            color="red"),
        markpoint_opts=opts.MarkPointOpts(
            data=[opts.MarkPointItem(type_="max",name="最大值")]
        )
    )
    
)
c.render_notebook()

在这里插入图片描述
可以看出豆瓣评分最多的分值是8.9分,总共41部电影得到了此分值。每个人的喜好不同,你觉得很好的电影,别人觉得或许没那么好。这也体现出一直保持在高评分电影的可贵。

本文先写到这里,后面我再更新吧,关于pyecharts的配置有很多,具体可以根据官网文档把图表更改成自己需要的样式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/5952.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python 数据、曲线平滑处理——基于Numpy.convolve实现滑动平均滤波——详解

文章目录1 基于Numpy.convolve实现滑动平均滤波1.1 滑动平均概念1.2 滑动平均的数学原理1.3 语法1.4 滑动平均滤波示例2 曲线平滑处理——Savitzky-Golay 滤波器——详解3 基于Numpy.convolve实现滑动平均滤波——详解1 基于Numpy.convolve实现滑动平均滤波 1.1 滑动平均概念 …

linux 配置java环境

1、上传jdk包到/usr/local/java目录下 2、解压jdk的tar包 tar -zxvf jdk-8u291-linux-x64.tar.gz 3、添加配置(环境变量) 注意:JAVA_HOME值为实际jdk路径 打开配置文件 vi /etc/profile 最下面添加: #set java environment JAVA_HOME/usr/…

基于集成学习的用户流失预测并利用shap进行特征解释

基于集成学习的用户流失预测并利用shap进行特征解释 小P:小H,如果我只想尽可能的提高准确率,有什么好的办法吗? 小H:优化数据、调参侠、集成学习都可以啊 小P:什么是集成学习啊,听起来就很厉害的…

SSM—【笔记】1.2 SpringMVC

SpringMVC:用于表现层开发,同Servlet功能等同,但比Servlet技术使用更加简便,可以用更少代码量完成开发 项目结构: 后端采用的是三层架构模式: 数据层:先学的JDBC技术,后用MyBatis框架取代 表…

ThreeJS-缩放、旋转(四)

代码&#xff1a; <template> <div id"three_div"> </div> </template> <script> import * as THREE from "three"; import {OrbitControls } from three/examples/jsm/controls/OrbitControls export default { name: &quo…

在华为做了三年软件测试被裁了,我该怎么办

近年来&#xff0c;随着经济环境的变化和企业战略的调整&#xff0c;员工被裁员的情况变得越来越普遍。无论是因为企业经营困难还是因为业务调整&#xff0c;员工们都可能面临被裁员的风险。如果你也遇到了这样的情况&#xff0c;那么你应该怎么办呢&#xff1f; 首先&#xf…

centos7 SystemV 开机自启动脚本配置方法 redis集群三主三从

centos7 SystemV 开机自启动脚本配置方法 redis集群三主三从1、安装redis集群2、编写redis启动脚本2.1、建立启动脚本2.2、复制多份redis启动脚本给集群使用2.3、添加可执行权限3、配置开机自启动1、安装redis集群 参考: redis三主三从集群安装 2、编写redis启动脚本 2.1、建…

RabbitMQ 07 发布订阅模式

发布订阅模式 发布订阅模式结构图&#xff1a; 比如信用卡还款日临近了&#xff0c;那么就会给手机、邮箱发送消息&#xff0c;提示需要去还款了&#xff0c;但是手机短信和邮件发送并不一定是同一个业务提供的&#xff0c;但是现在又希望能够都去执行&#xff0c;就可以用到发…

HTTP协议发展历程-HTTP2【协议篇】

HTTP2.0 HTTP2为了解决HTTP1.1中存在的问题。其中慢启动和TCP连接竞争是TCP本身导致的&#xff0c;在H2中依赖的还是TCP协议&#xff0c;不过思路换了一下。 HTTP/2 的思路就是一个域名只使用一个 TCP 长连接来传输数据&#xff0c;这样整个页面资源的下载过程只需要一次慢启动…

【Elastic (ELK) Stack 实战教程】04、ElasticSearch 集群进阶及优化

目录 一、ES 集群故障转移 1.1 什么是故障转移 1.2 模拟节点故障 1.2.1 重新选举 1.2.2 主分片调整 1.2.3 副本分片调整 二、ES 文档路由原理 2.1 文档的创建流程 2.2 文档的读取流程 2.3 文档批量创建的流程 2.4 文档批量读取的流程 ​三、ES扩展集群节点 3.1 …

【目标检测论文阅读笔记】Multi-scene small object detection with modified YOLOv4

Abstract. 小目标检测的应用存在于我们日常生活中的许多不同场景中&#xff0c;该课题也是目标检测与识别研究中最难的问题之一。因此&#xff0c;提高小目标检测精度不仅在理论上具有重要意义&#xff0c;在实践中也具有重要意义。然而&#xff0c;当前的检测相关算法在这项任…

Node.js学习笔记——Express.js

一、express介绍 express是一个基于Node.js平台的极简、灵活的WEB应用开发框架&#xff0c;官方网址&#xff1a;https://www.expressjs.com.cn/ 二、express使用 2.1express下载 express本身是一个npm包&#xff0c;所以可以通过npm安装。 npm init npm i express 2.2expr…

Java接口

目录 抽象类 抽象类的概述 如何使用抽象类 抽象类的使用 抽象特征 关于抽象需要注意的几个事情 接口(interface) 常量 如何实现接口 接口与接口多继承 接口的注意事项 抽象类 抽象类的概述 父类中的方法&#xff0c;被它的子类们重写&#xff0c;子类各自的实现都不…

《花雕学AI》02:人工智能挺麻利,十分钟就为我写了一篇长长的故事

ChatGPT最近火爆全网&#xff0c;上线短短两个多月&#xff0c;活跃用户就过亿了&#xff0c;刷新了历史最火应用记录&#xff0c;网上几乎每天也都是ChatGPT各种消息。国内用户由于无法直接访问ChatGPT&#xff0c;所以大部分用户都无缘体验。不过呢&#xff0c;前段时间微软正…

Vulnhub:DC-3靶机

kali&#xff1a;192.168.111.111 靶机&#xff1a;192.168.111.250 信息收集 端口扫描 nmap -A -v -sV -T5 -p- --scripthttp-enum 192.168.111.250 通过nmap得知目标CMS为Joomla 3.7.0 漏洞利用 搜索发现该版本存在sql注入 利用sqlmap获取目标后台用户密码 sqlmap -u &…

测试行业3年经验,面试想拿 17K,HR说你只值 8K,该如何回答或者反驳?

面试最尴尬的不是被拒绝&#xff0c;而是直接说你不值那个价格... 最近朋友在面试的时候&#xff0c;HR 突然来了句&#xff1a;你只值 7K。朋友后面和我说了这个事。我想如果是我处在这种情况下&#xff0c;自己并不能很好地回答或者反驳。不知道大家会怎么回答或者反驳&…

基于vivado(语言Verilog)的FPGA学习(4)——FPGA选择题总结(针对华为逻辑岗实习笔试)

基于vivado&#xff08;语言Verilog&#xff09;的FPGA学习&#xff08;4&#xff09;——FPGA选择题总结 文章目录基于vivado&#xff08;语言Verilog&#xff09;的FPGA学习&#xff08;4&#xff09;——FPGA选择题总结1. 消除险象2. 建立时间和保持时间3.ISE4.DMA5.仿真器6…

【Linux】-- 权限和Shell运行原理

目录 Shell的运行原理 用户切换 su - / su sudo 权限 chmod chown chgrp 八进制方法修改文件属性 目录权限 粘滞位 umask 自定义默认权限 Shell的运行原理 广义上&#xff0c;Linux发行版 Linux内核 外壳程序 Linux 从广义上来理解它是一个操作系统 而从狭义上…

关于Map类的使用小结

目录 1. 常用Map类和区别 2. HashMap工作原理 2.1 Put()执行过程 2.2 扩容机制 3. ConcurrentHashMap 3.1 工作原理 3.2 JDK7分段锁的优缺点 1. 常用Map类和区别 Map类包含&#xff1a;HashMap、HashTable、LinkedHashMap、TreeMap。 1) 从功能上区分。 HashMap&…

多线程进阶学习11------CountDownLatch、CyclicBarrier、Semaphore详解

CountDownLatch ①. CountDownLatch主要有两个方法,当一个或多个线程调用await方法时,这些线程会阻塞 ②. 其它线程调用countDown方法会将计数器减1(调用countDown方法的线程不会阻塞) ③. 计数器的值变为0时,因await方法阻塞的线程会被唤醒,继续执行 public static void m…