2020东京奥运会奖牌数据可视化

人工智能58

目录

文章目录

前言

一、导入模块

二、Pandas数据处理

2.1 读取数据

2.2 是否有缺失值

2.3 查看中国每日数据

2.4 统计中国、美国、日本、澳大利亚4个国家数据

三、Pyecharts绘图

3.1 绘制基础折线图

3.2 加载样式

3.3 动态展示中国每日金牌数据

3.4 增加其他国家每日金牌数据

3.5 2020东京奥运会奖牌数世界分布

3.6 2020东京奥运会金牌世界分布

3.7 2020东京奥运会奖牌世界分布(动态)

总结

前言

刚刚过去的东京奥运会,中国队取得了不错的成绩。本文将分别基于Pandas和Pyecharts进行数据处理和数据可视化,并利用可视化图表对奥运会相关信息进行展示。

一、导入模块

import pandas as pd
from pyecharts.charts import Timeline, Line, Tree
from pyecharts import options as opts
from pyecharts.commons.utils import JsCode
from pyecharts.globals import ThemeType

二、Pandas数据处理

2.1 读取数据

df = pd.read_csv('D:/天池数据/2020东京奥运会奖牌数据可视化/2020东京奥运会奖牌数据.csv', index_col=0, encoding = 'gb18030')
df.head(10)

2020东京奥运会奖牌数据可视化

2.2 是否有缺失值

df.isnull().any()

2020东京奥运会奖牌数据可视化

各列数据均不存在确实情况。

2.3 查看中国每日数据

# 方法一
df1 = df[df['国家']=='中国']
df1

# 方法二
df1 = df[df.国家 == '中国']
df1

2020东京奥运会奖牌数据可视化

2.4 统计中国、美国、日本、澳大利亚4个国家数据

all_country_data = []
flg = {}
cols = ['国家']
countrys = ['中国','美国','日本','澳大利亚']
for country in countrys:
    df1 = df[df['国家']==country]
    df_t = df1.copy()
    df2 = df.loc[df['国家']==country,['金牌','银牌','铜牌','总计']]
    if len(df2.index.tolist()) >= len(cols):
        cols += df2.index.tolist()
    flg[country] = df1.iloc[:1, -1].values[0]

    one_country_data = [country]
    datasss = []
    for i in range(df2.shape[0]):
        datasss.append(df2[:i+1].apply(lambda x:x.sum()).values.tolist())
    d1 = pd.DataFrame(data=datasss, columns=['金牌','银牌','铜牌','总计'])
    for col in d1.columns:
        df_t[col] = d1[col].values
    df_t1 = df_t.loc[:,['金牌']]
    one_country_data += df_t['金牌'].values.tolist()
    all_country_data.append(one_country_data)
all_country_data

2020东京奥运会奖牌数据可视化

生成新的Dataframe:

d2 = pd.DataFrame(data=all_country_data,columns=cols)
d2 = d2.fillna(method = 'ffill',axis=1)
d2

2020东京奥运会奖牌数据可视化

method='ffill':用前一个非缺失值去填充缺失值。

method='bfill':用下一个非缺失值去填充缺失值。

这里采用前一个非缺失值对缺失值进行填充。同时,可根据需要获取多个国家数据,改变 countrys列表即可。

三、Pyecharts绘图

3.1 绘制基础折线图

CHN = []
x_data=cols[1:]
for d_time in cols[1:]:
    CHN.append(d2[d_time][d2['国家']=='中国'].values.tolist()[0])
l1 = (
    Line()
    .add_xaxis(x_data)
    # 中国线条
    .add_yaxis(
        '中国',
        CHN,
        label_opts=opts.LabelOpts(is_show=True))
    .set_global_opts(
        title_opts=opts.TitleOpts(
            title='中国金牌',
            pos_left='center',
        ),
        yaxis_opts=opts.AxisOpts(
            name='金牌/枚',
            is_scale=True,
            max_=40),
        legend_opts=opts.LegendOpts(is_show=False),
    )
)
l1.render_notebook()

2020东京奥运会奖牌数据可视化

3.2 加载样式

# 背景色
background_color_js = (
    "new echarts.graphic.LinearGradient(0, 0, 0, 1, "
    "[{offset: 0, color: '#c86589'}, {offset: 1, color: '#06a7ff'}], false)"
)

# 线条样式
linestyle_dic = { 'normal': {
                    'width': 4,
                    'shadowColor': '#696969',
                    'shadowBlur': 10,
                    'shadowOffsetY': 10,
                    'shadowOffsetX': 10,
                    }
                }

timeline = Timeline(init_opts=opts.InitOpts(bg_color=JsCode(background_color_js),
                                            width='980px',height='600px'))
timeline.add_schema(is_auto_play=True, is_loop_play=True,
                    is_timeline_show=True, play_interval=500)

CHN = []
x_data=cols[1:]
for d_time in cols[1:]:
    CHN.append(d2[d_time][d2['国家']=='中国'].values.tolist()[0])

line = (
    Line(init_opts=opts.InitOpts(bg_color=JsCode(background_color_js),
                                 width='980px',height='600px'))
    .add_xaxis(x_data)
    # 中国线条
    .add_yaxis(
        '中国',
        CHN,
        symbol_size=10,
        is_smooth=True,
        label_opts=opts.LabelOpts(is_show=True),
        markpoint_opts=opts.MarkPointOpts(
                data=[opts.MarkPointItem(
                      name="",
                      type_='max',
                      value_index=0,
                      symbol='image://'+ flg['中国'],
                      symbol_size=[40, 25],
                    )],
                label_opts=opts.LabelOpts(is_show=False),
            )
    )
    .set_series_opts(linestyle_opts=linestyle_dic,label_opts=opts.LabelOpts(font_size=12, color='red' ))
    .set_global_opts(
        title_opts=opts.TitleOpts(
            title='中国金牌',
            pos_left='center',
            pos_top='2%',
            title_textstyle_opts=opts.TextStyleOpts(
                    color='#DC143C', font_size=20)
        ),
        xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=14, color='red'),
                                 axisline_opts=opts.AxisLineOpts(is_show=True,
                                    linestyle_opts=opts.LineStyleOpts(width=2, color='#DB7093'))),
        yaxis_opts=opts.AxisOpts(
            name='金牌/枚',
            is_scale=True,
            max_=40,
            name_textstyle_opts=opts.TextStyleOpts(font_size=16,font_weight='bold',color='#FFD700'),
            axislabel_opts=opts.LabelOpts(font_size=13,color='red'),
            splitline_opts=opts.SplitLineOpts(is_show=True,
                                              linestyle_opts=opts.LineStyleOpts(type_='dashed')),
            axisline_opts=opts.AxisLineOpts(is_show=True,
                                    linestyle_opts=opts.LineStyleOpts(width=2, color='#DB7093'))
        ),
        legend_opts=opts.LegendOpts(is_show=False, pos_right='1.5%', pos_top='2%',
                                    legend_icon='roundRect',orient = 'horizontal'),
    )
)
line.render_notebook()

2020东京奥运会奖牌数据可视化

3.3 动态展示中国每日金牌数据

# 背景色
background_color_js = (
    "new echarts.graphic.LinearGradient(0, 0, 0, 1, "
    "[{offset: 0, color: '#c86589'}, {offset: 1, color: '#06a7ff'}], false)"
)

# 线条样式
linestyle_dic = {'normal': {
    'width': 4,
    'shadowColor': '#696969',
    'shadowBlur': 10,
    'shadowOffsetY': 10,
    'shadowOffsetX': 10,
}
}

timeline = Timeline(init_opts=opts.InitOpts(bg_color=JsCode(background_color_js),
                                            width='980px', height='600px'))
timeline.add_schema(is_auto_play=True, is_loop_play=True,
                    is_timeline_show=True, play_interval=500)

CHN = []
x_data = cols[1:]

for d_time in cols[1:]:
    CHN.append(d2[d_time][d2['国家'] == '中国'].values.tolist()[0])
    line = (
        Line(init_opts=opts.InitOpts(bg_color=JsCode(background_color_js),
                                     width='980px', height='600px'))
        .add_xaxis(x_data)
        # 中国线条
        .add_yaxis(
            '中国',
            CHN,
            symbol_size=10,
            is_smooth=True,
            label_opts=opts.LabelOpts(is_show=True),
            markpoint_opts=opts.MarkPointOpts(
                data=[opts.MarkPointItem(
                    name="",
                    type_='max',
                    value_index=0,
                    symbol='image://' + flg['中国'],
                    symbol_size=[40, 25],
                )],
                label_opts=opts.LabelOpts(is_show=False),
            )
        )
        .set_series_opts(linestyle_opts=linestyle_dic, label_opts=opts.LabelOpts(font_size=12, color='red'))
        .set_global_opts(
            title_opts=opts.TitleOpts(
                title='中国金牌',
                pos_left='center',
                pos_top='2%',
                title_textstyle_opts=opts.TextStyleOpts(color='#DC143C', font_size=20)),
            xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=14, color='red'),
                                     axisline_opts=opts.AxisLineOpts(is_show=True,
                                                                     linestyle_opts=opts.LineStyleOpts(width=2, color='#DB7093'))),
            yaxis_opts=opts.AxisOpts(
                name='金牌/枚',
                is_scale=True,
                max_=40,
                name_textstyle_opts=opts.TextStyleOpts(
                    font_size=16, font_weight='bold', color='#FFD700'),
                axislabel_opts=opts.LabelOpts(
                    font_size=13, color='red', rotate=15),
                splitline_opts=opts.SplitLineOpts(is_show=True,
                                                  linestyle_opts=opts.LineStyleOpts(type_='dashed')),
                axisline_opts=opts.AxisLineOpts(is_show=True,
                                                linestyle_opts=opts.LineStyleOpts(width=2, color='#DB7093'))
            ),
            legend_opts=opts.LegendOpts(is_show=True, pos_right='1%', pos_top='2%',
                                        legend_icon='roundRect', orient='vertical'),
        )
    )
    timeline.add(line, '{}'.format(d_time))

timeline.render_notebook()

2020东京奥运会奖牌数据可视化

3.4 增加其他国家每日金牌数据

# 背景色
background_color_js = (
    "new echarts.graphic.LinearGradient(0, 0, 0, 1, "
    "[{offset: 0, color: '#c86589'}, {offset: 1, color: '#06a7ff'}], false)"
)

# 线条样式
linestyle_dic = { 'normal': {
                    'width': 4,
                    'shadowColor': '#696969',
                    'shadowBlur': 10,
                    'shadowOffsetY': 10,
                    'shadowOffsetX': 10,
                    }
                }

timeline = Timeline(init_opts=opts.InitOpts(bg_color=JsCode(background_color_js),
                                            width='980px',height='600px'))
timeline.add_schema(is_auto_play=True, is_loop_play=True,
                    is_timeline_show=True, play_interval=500)

CHN, USA, JPN, AUS = [], [], [], []
x_data=cols[1:]
for d_time in cols[1:]:
    CHN.append(d2[d_time][d2['国家']=='中国'].values.tolist()[0])
    USA.append(d2[d_time][d2['国家']=='美国'].values.tolist()[0])
    JPN.append(d2[d_time][d2['国家']=='日本'].values.tolist()[0])
    AUS.append(d2[d_time][d2['国家']=='澳大利亚'].values.tolist()[0])
    line = (
        Line(init_opts=opts.InitOpts(bg_color=JsCode(background_color_js),
                                     width='980px',height='600px'))
        .add_xaxis(x_data)
        # 中国线条
        .add_yaxis(
            '中国',
            CHN,
            symbol_size=10,
            is_smooth=True,
            label_opts=opts.LabelOpts(is_show=True),
            markpoint_opts=opts.MarkPointOpts(
                    data=[  opts.MarkPointItem(
                            name="",
                            type_='max',
                            value_index=0,
                            symbol='image://'+ flg['中国'],
                            symbol_size=[40, 25],
                        )],
                    label_opts=opts.LabelOpts(is_show=False),
                )
        )
        # 美国线条
        .add_yaxis(
            '美国',
            USA,
            symbol_size=5,
            is_smooth=True,
            label_opts=opts.LabelOpts(is_show=True),
            markpoint_opts=opts.MarkPointOpts(
                    data=[
                        opts.MarkPointItem(
                            name="",
                            type_='max',
                            value_index=0,
                            symbol='image://'+ flg['美国'],
                            symbol_size=[40, 25],
                        )
                    ],
                    label_opts=opts.LabelOpts(is_show=False),
                )
        )
        # 日本线条
        .add_yaxis(
            '日本',
            JPN,
            symbol_size=5,
            is_smooth=True,
            label_opts=opts.LabelOpts(is_show=True),
            markpoint_opts=opts.MarkPointOpts(
                    data=[  opts.MarkPointItem(
                            name="",
                            type_='max',
                            value_index=0,
                            symbol='image://'+ flg['日本'],
                            symbol_size=[40, 25],
                        )],
                    label_opts=opts.LabelOpts(is_show=False),
                )
        )
        # 澳大利亚线条
        .add_yaxis(
            '澳大利亚',
            AUS,
            symbol_size=5,
            is_smooth=True,
            label_opts=opts.LabelOpts(is_show=True),
            markpoint_opts=opts.MarkPointOpts(
                    data=[  opts.MarkPointItem(
                            name="",
                            type_='max',
                            value_index=0,
                            symbol='image://'+ flg['澳大利亚'],
                            symbol_size=[40, 25],
                        )],
                    label_opts=opts.LabelOpts(is_show=False),
                )
        )
        .set_series_opts(linestyle_opts=linestyle_dic)
        .set_global_opts(
            title_opts=opts.TitleOpts(
                title='中国 VS 美国 VS 日本 VS 澳大利亚',
                pos_left='center',
                pos_top='2%',
                title_textstyle_opts=opts.TextStyleOpts(
                        color='#DC143C', font_size=20)
            ),
            xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=14, color='red'),
                         axisline_opts=opts.AxisLineOpts(is_show=True,
                            linestyle_opts=opts.LineStyleOpts(width=2, color='#DB7093'))),
            yaxis_opts=opts.AxisOpts(
                name='金牌/枚',
                is_scale=True,
                max_=40,
                name_textstyle_opts=opts.TextStyleOpts(font_size=16,font_weight='bold',color='#FFD700'),
                axislabel_opts=opts.LabelOpts(font_size=13,color='red',rotate=15),
                splitline_opts=opts.SplitLineOpts(is_show=True,
                                                  linestyle_opts=opts.LineStyleOpts(type_='dashed')),
                axisline_opts=opts.AxisLineOpts(is_show=True,
                                        linestyle_opts=opts.LineStyleOpts(width=2, color='#DB7093'))
            ),
            legend_opts=opts.LegendOpts(is_show=True, pos_right='1%', pos_top='2%',
                                        legend_icon='roundRect',orient = 'vertical'),
        ))
    timeline.add(line, '{}'.format(d_time))

timeline.render_notebook()

2020东京奥运会奖牌数据可视化

3.5 2020东京奥运会奖牌数世界分布

import requests
from pyecharts.charts import Map

# 获取数据:
url = 'https://app-sc.miguvideo.com/vms-livedata/olympic-medal/total-table/15/110000004609'
r = requests.get(url, timeout=30)
r.raise_for_status()
r.encoding = r.apparent_encoding
datas = r.json()['body']['allMedalData']
df = pd.DataFrame()
for data in datas:
    df = df.append([[
        data['countryName'],
        data['goldMedalNum'],
        data['silverMedalNum'],
        data['bronzeMedalNum'],
        data['totalMedalNum']]])
df.columns = ['国家', '金牌', '银牌', '铜牌', '奖牌']
df = df.reset_index(drop=True)
df['国家'].replace('俄奥委会','俄罗斯',inplace=True)
name_map = {
    'Singapore Rep.': '新加坡',
    ...

    'Comoros': '科摩罗'
}
m0 = (
    Map()
    .add("奖牌数", [list(z) for z in zip(df['国家'].values, df['奖牌'].values)], "world", is_map_symbol_show=False,
         is_roam=False, name_map=name_map)
    .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
    .set_global_opts(
        title_opts=opts.TitleOpts(title="2020东京奥运会奖牌数世界分布"),
        legend_opts=opts.LegendOpts(is_show=False),
        visualmap_opts=opts.VisualMapOpts(
            is_show=True,
            max_=120,
            is_piecewise=True,
            split_number = 8,
        ),
    )
)
m0.render_notebook()

2020东京奥运会奖牌数据可视化

首先,利用requests库爬取相关数据,并对数据进行相应的处理;之后,利用pyecharts绘制map地图对奖牌数的世界发布进行可视化。

3.6 2020东京奥运会金牌世界分布

m1 = (
    Map()
    .add("金牌", [list(z) for z in zip(df['国家'].values, df['金牌'].values)], "world", is_map_symbol_show=False,
         is_roam=False, name_map=name_map)
    .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
    .set_global_opts(
        title_opts=opts.TitleOpts(title="2020东京奥运会金牌世界分布"),
        legend_opts=opts.LegendOpts(is_show=False),
        visualmap_opts=opts.VisualMapOpts(is_show=True, max_=40,
                                          is_piecewise=True,
                                          split_number = 8,
                                          range_color=['#FFFFE0', '#FFA07A', '#CD5C5C', '#8B0000']
                                         ),
    )
)
m1.render_notebook()

2020东京奥运会奖牌数据可视化

3.7 2020东京奥运会奖牌世界分布(动态)

timeline = Timeline(init_opts=opts.InitOpts(theme=ThemeType.DARK))
timeline.add_schema(is_auto_play=True, is_loop_play=True,
                    is_timeline_show=False, play_interval=800)
colls=['奖牌','金牌','银牌','铜牌']
maxx = [120,40,40,40]
for index, col in enumerate(colls):
    m = (
        Map()
        .add(col, [list(z) for z in zip(df['国家'].values, df[col].values)], "world", is_map_symbol_show=False,
             is_roam=False, name_map=name_map)
        .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
        .set_global_opts(
            legend_opts=opts.LegendOpts(is_show=False),
            visualmap_opts=opts.VisualMapOpts(is_show=False,
                                              max_=maxx[index],
                                              is_piecewise=True,
                                              split_number = 20,
                                             ),
            graphic_opts=[opts.GraphicGroup(graphic_item=opts.GraphicItem(
            rotation=JsCode("Math.PI / 4"),
            bounding="raw",
            right=110,
            bottom=110,
            z=100),
            children=[
            opts.GraphicRect(
                graphic_item=opts.GraphicItem(
                    left="center", top="center", z=100
                ),
                graphic_shape_opts=opts.GraphicShapeOpts(
                    width=400, height=50
                ),
                graphic_basicstyle_opts=opts.GraphicBasicStyleOpts(
                    fill="rgba(0,0,0,0.3)"
                ),
            ),
            opts.GraphicText(
                graphic_item=opts.GraphicItem(
                    left="center", top="center", z=100
                ),
                graphic_textstyle_opts=opts.GraphicTextStyleOpts(
                    text="2020奥运会{}分布".format(col),
                    font="bold 26px Microsoft YaHei",
                    graphic_basicstyle_opts=opts.GraphicBasicStyleOpts(
                        fill="#fff"
                    ),
                ),
            ),
        ],
        )
        ],
        )
    )
    timeline.add(m, "{}分布".format(col))

timeline.render_notebook()

2020东京奥运会奖牌数据可视化

总结

本文利用Pandas对数据进行处理,并利用Pyecharts绘制折线图(Line)和地图(Map),并通过添加时间轴组件(Timeline)对奥运会数据进行动态的可视化展示。Pyecharts相关的参数说明以及其他类型的图表制作可以参阅Pyecharts的官方文档简介 - pyecharts - A Python Echarts Plotting Library built with love.

Original: https://blog.csdn.net/JUV_7/article/details/120938481
Author: 黄金猎犬
Title: 2020东京奥运会奖牌数据可视化



相关阅读

Title: conda安装指定版本TensorFlow

文章目录

*
- 一、系统环境
- 二、安装步骤

一、系统环境

操作系统:Windows7 64位,
Python环境:Python3.7;conda 4.10.3
目标版本:TensorFlow1.14.0

二、安装步骤

预处理:在开始安装之前,建议检查一下环境变量是否配置正常,在Path中查看

D:\anaconda\condabin
D:\anaconda\Scripts
D:\anaconda\Library\bin
D:\anaconda\

如果后面出现"WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available"异常,大概率是环境变量问题。
1.如果先前配置过清华等镜像地址,建议首先执行

conda config --remove-key channels

将Anaconda的源恢复为默认
出现报错

CondaKeyError: 'channels': key 'channels' is not in the config file

即为恢复成功。
关于源的配置在"C:\Users\Administrator.condarc"文件中,恢复成功后可以看到:

show_channel_urls: true

2.然后需要配置源

conda config --add channels http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/win-64
conda config --add channels http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/win-64
conda config --add channels http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/win-64
conda config --add channels http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/win-64
conda config --set show_channel_urls yes

注意,这里要配置位http,配置https会出现关于ssl异常的报错
此外,在镜像地址后都添加了/win-64,这是根据清华镜像文件存放位置决定的,清华镜像地址为:https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
2020东京奥运会奖牌数据可视化
如果pip某些包发生"当前平台不存在该文件"异常,可以通过镜像目录查找文件地址
配置完成后,同样可以进入"C:\Users\Administrator.condarc"文件中进行确认

show_channel_urls: true
channels:
  - http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/win-64
  - http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/win-64
  - http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/win-64
  - http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/win-64

如果存在"- default",请进行删除
3.上面两步都是针对镜像源的配置,接下来才是TensorFlow的流程。首先要配置虚拟环境。

conda create -n

如果出现了"CondaHTTPError: HTTP 000 CONNECTION FAILED for url"异常,就是上两步配置错了,就不要继续下面的步骤了。(这里主要考虑镜像地址问题,还有http问题)
4.安装完成后,需要激活虚拟环境,我这里是

activate tensorflow

有些人是"conda activate tensorflow",但我这里会报错,找不到该命令。
然后对TensorFlow进行安装,我这里网络安装没有成功,所以直接下载了TensorFlow1.14.0文件
从镜像源处下载tensorflow并安装,镜像源地址:
https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/tensorflow/
找到对应自己python版本的文件
2020东京奥运会奖牌数据可视化
注意,这里首先是找TensorFlow版本,即1.14.0,然后是python版本号,对应cp37,如果是python3.5就是cp35;最后是平台,即win_amd64
下载完成后,在激活的虚拟环境中执行

pip install D:\tensorflow-1.14.0-cp37-cp37m-win_amd64.whl

2020东京奥运会奖牌数据可视化
安装成功!!!

Original: https://blog.csdn.net/weixin_48289706/article/details/124981481
Author: finallhz
Title: conda安装指定版本TensorFlow

相关文章
Android文字转语音播报 人工智能

Android文字转语音播报

文章目录 前言 一、实现方式 * 1.Android系统自带TTS 2.第三方语音框架:云知声离线语音(32位:armeabi-v7a)、... 二、Android系统自带TTS * 1.集成工具类T...
地理空间聚类:种类和用途 人工智能

地理空间聚类:种类和用途

详细综述的所有不同类型的集群与他们的用例 地理空间聚类(Geospatial Clustering) 地理空间聚类是将一组空间对象分组为称为"聚类"的组的方法。簇内的对象表现出高度的相似性,而簇则尽可...
损失函数小结 人工智能

损失函数小结

损失函数用于衡量真实值y_true和预测值y_pred之间的差异。通常情况下y_true和y_pred维度相同,但特殊情况下维度不同,一般来讲框架(包括tensorflow和mindspore)会支持...
如何实现声音克隆? 人工智能

如何实现声音克隆?

声音克隆项目地址 https://github.com/babysor/MockingBird 介绍 Python 深度学习AI - 声音克隆、声音模仿,是一个三阶段的深度学习框架,允许从几秒钟的音频...