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

上篇文章pyecharts实现电影数据分析可视化已经实现了pyecharts可视化,这篇文章主要实现Django结合pyecharts做一个可视化的小网站/系统。
我是在Centos7虚拟机上用Sublime Text写的,你们随意即可。

创建python虚拟环境

我使用的是Python 3.6.8,只要你们不是Python2或者更老的版本,运行应该没什么问题。
进入到你存放python虚拟环境的目录,我的是/home/xwk/Desktop/python_vens

[xwk@forpython ~]$ cd Desktop/python_vens/
[xwk@forpython python_vens]$ pwd
/home/xwk/Desktop/python_vens
[xwk@forpython python_vens]$ python3 -V
Python 3.6.8

创建一个名为books的python虚拟环境

[xwk@forpython python_vens]$ python3 -m venv books

如果发现创建错了名称怎么办,我做的电影可视化,应该创建movies
如果你已经安装了pip库,不想一个一个重新安装的话,执行

导出已安装的pip库的名称及版本
pip freeze > requirements.txt

重新创建好虚拟环境后,根据导出的库的名称及版本重新安装
pip install -r requirements.txt

删除创建错的环境,直接删除books这个虚拟环境目录即可,注意别删错了。

[xwk@forpython python_vens]$ rm -rf books/

重新创建名为movies的虚拟环境

[xwk@forpython python_vens]$ python3 -m venv movies

进入虚拟环境

[xwk@forpython python_vens]$ cd movies/
[xwk@forpython movies]$ source ./bin/activate
(movies) [xwk@forpython movies]$ 

退出虚拟环境

(movies) [xwk@forpython movies]$ deactivate 
[xwk@forpython movies]$

这里只是演示,如何进入和退出虚拟环境,代码的运行需要进入虚拟环境。
重新进入虚拟环境

[xwk@forpython movies]$ source ./bin/activate
(movies) [xwk@forpython movies]$

安装所需python库

pip install django
pip install pyecharts
pip install pandas
pip install pymysql

pip应该会自动安装相关依赖包,查看安装的包

(movies) [xwk@forpython movies]$ pip list

在这里插入图片描述

不同版本库,代码可能会有差异,比如Django,如果你不是上述版本,代码如果有报错,可以自行搜索修改,这个不难,因为肯定不会只有你一个人遇到过类似的问题。

创建Django项目

进入到你存放python虚拟环境的目录,我的是/home/xwk/Desktop/python_projects

(movies) [xwk@forpython movies]$ cd /home/xwk/Desktop/python_projects
(movies) [xwk@forpython python_projects]$

创建一个名为movies的Django项目

django-admin startproject movies
(movies) [xwk@forpython python_projects]$ cd movies/
(movies) [xwk@forpython movies]$ ls
manage.py  movies

配置mysql数据库,你可以根据自己需求来
创建一个名为movies的数据库。本文主要使用pandas,mysql只是django需要,你们也可以把csv文件导入mysql,用sql语句做查询,万变不离其宗。

mysql> create database movies;
Query OK, 1 row affected (0.00 sec)
(movies) [xwk@forpython movies]$ pwd
/home/xwk/Desktop/python_projects/movies/movies
(movies) [xwk@forpython movies]$ ls
asgi.py  __init__.py  __pycache__  settings.py  urls.py  wsgi.py

配置该目录下的settings.py文件,更改DATABASES内容为:

DATABASES = {
    
    
    'default': {
    
    
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'movies',
        'USER': 'root',
        'PASSWORD': 'root',
        'HOST': 'localhost',
        'PORT': '3306',
    }
}

向该目录下__init__.py添加

import pymysql
pymysql.install_as_MySQLdb()

创建Django应用

创建一个名为movies_pyecharts的Django应用程序
进入该目录下

(movies) [xwk@forpython movies]$ pwd
/home/xwk/Desktop/python_projects/movies
(movies) [xwk@forpython movies]$ ls
manage.py  movies
(movies) [xwk@forpython movies]$ python ./manage.py startapp movies_pyecharts
(movies) [xwk@forpython movies]$ cd movies
(movies) [xwk@forpython movies]$ ls
asgi.py  __init__.py  __pycache__  settings.py  urls.py  wsgi.py

编辑settings.py文件
向INSTALLED_APPS添加'movies_pyecharts',
在这里插入图片描述

(movies) [xwk@forpython movies]$ cd ../movies_pyecharts/
(movies) [xwk@forpython movies_pyecharts]$ ls
admin.py  __init__.py  models.py  tests.py
apps.py   migrations   templates  views.py

编辑(没有就新建)urls.py文件

from django.urls import path
from . import views

urlpatterns = [
    path('', views.index),
]
(movies) [xwk@forpython movies_pyecharts]$ cd ../movies
(movies) [xwk@forpython movies]$ ls
asgi.py  __init__.py  __pycache__  settings.py  urls.py  wsgi.py

编辑urls.py(注意目录的切换)

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('movies_pyecharts/', include('movies_pyecharts.urls')),
]

先在 movies_pyecharts 文件夹下新建 templates 文件夹
将 pyecharts 模板,位于 pyecharts.render.templates 具体位置参考(/home/xwk/Desktop/python_vens/movies/lib/python3.6/site-packages/pyecharts/render/templates

拷贝至刚新建的 templates 文件夹
把获取的数据文件也复制到movies_pyecharts文件夹下

第一个可视化页面

编辑movies_pyecharts/views.py

from jinja2 import Environment, FileSystemLoader
from pyecharts.globals import CurrentConfig
from django.http import HttpResponse
CurrentConfig.GLOBAL_ENV = Environment(loader=FileSystemLoader("./movies_pyecharts/templates"))
import pandas as pd
from pyecharts.charts import Bar,Pie,Line
import pyecharts.options as opts

data=pd.read_csv('./movies_pyecharts/电影.csv')

Year=data['上映年份'].value_counts().reset_index()
Year.rename(columns={
    
    "index":"上映年份","上映年份":"电影数量"},inplace=True)
def index(request):
	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())
	return HttpResponse(bar.render_embed())

现在打开http://127.0.0.1:8000/movies_pyecharts/,就可以看到图表了!
在这里插入图片描述
这只是一个网页,我尝试增加网页。

增加更多可视化页面

编辑movies_pyecharts/urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('', views.index,name='index'),
    path('director/',views.director,name='director'),
]

movies_pyecharts/views.py增加如下代码:

def director(request):
    Director = data['导演'].value_counts()[0:11].reset_index()
    Director.rename(columns={
    
    "index": "导演", "导演": "电影数量"}, inplace=True)
    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}"))
    )
    return HttpResponse(pie.render_embed())

打开http://127.0.0.1:8000/movies_pyecharts/director/
在这里插入图片描述
增加更多页面方法就是这样,我就不再增加了。

如果要更改网页标题
改类似如下代码

Bar(init_opts=opts.InitOpts(height='700px', theme='light',page_title ='上映年份及电影数量'))

更多配置参考pyecharts官网文档
Django的功能很强大,我做的这个可视化仅仅只是入门而已。

猜你喜欢

转载自blog.csdn.net/weixin_46322367/article/details/129950003