【数据可视化】世界五百强企业数据分析及可视化

119 阅读7分钟

🧑 博主简介:曾任某智慧城市类企业算法总监,CSDN / 稀土掘金 等平台人工智能领域优质创作者。

目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。


一、引言

世界五百强企业一直是全球经济的重要组成部分,它们的业绩和分布情况反映了全球经济的格局和趋势。本次分析基于一份包含世界五百强企业数据的数据集,我们将从多个维度对这些数据进行分析和可视化,帮助我们更好地理解全球经济的现状。

二、数据清洗及分析

2.1 字段含义

数据集包含以下字段:

  • rank:企业排名
  • name:企业名称
  • profit:利润(单位:百万美元)
  • revenue:收入(单位:百万美元)
  • country:国家
  • city:城市
  • industry:行业
  • staff:员工人数
  • website:企业官网

2.2 数据清洗

首先,我们需要加载数据并进行一些基本的预处理,包括处理缺失值、格式化数据等。

import pandas as pd

# 加载数据
data = pd.read_csv('data.csv')

# 查看数据的前几行
print(data.head())

# 数据清洗
# 1. 删除缺失值
data = data.dropna()

# 2. 将利润和收入转换为数值类型
data['profit'] = data['profit'].str.replace(',''').astype(float)
data['revenue'] = data['revenue'].str.replace(',''').astype(float)

# 3. 删除重复值
data = data.drop_duplicates()

# 保存清洗后的数据
data.to_csv('cleaned_data.csv', index=False)

2.3 数据查看

清洗后的数据可以用于进一步的分析。我们先查看数据的基本信息。

# 查看数据的基本信息
print(data.info())

# 查看数据的描述性统计
print(data.describe())

三、数据可视化

3.1 各国企业数量TOP10

我们将绘制一个柱状图,展示各国企业数量的前10名。

from pyecharts.charts import Bar
from pyecharts import options as opts

# 按国家统计企业数量
country_counts = data['country'].value_counts().head(10)

# 创建柱状图
bar = Bar(init_opts=opts.InitOpts(bg_color='black'))
bar.add_xaxis(country_counts.index.tolist())
bar.add_yaxis("企业数量", country_counts.values.tolist(), category_gap="50%")
bar.set_global_opts(
    title_opts=opts.TitleOpts(title="各国企业数量TOP10", subtitle="按企业数量统计", pos_left='center'),
    xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)),
    yaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts(is_show=True)),
    visualmap_opts=opts.VisualMapOpts(is_show=True, pos_top='middle', pos_right='10%', orient='vertical')
)
bar.set_series_opts(label_opts=opts.LabelOpts(is_show=True, position="insideTop"))
bar.render('country_counts.html')

3.2 各国经济实力概况表格

我们将生成一个表格,展示各国的总利润、总收入和企业数量。

from pyecharts.components import Table
country_stat = (data.groupby('country')
                  .agg({'revenue':'sum','profit':'sum','name':'count'})
                  .rename(columns={'name':'count'})
                  .sort_values('revenue', ascending=False)
                  .head(10))

table = Table()
headers = ['Country''Total Revenue($B)''Total Profit($B)''Firm Count']
rows = [[c, f"{r/1000:.2f}", f"{p/1000:.2f}", n] 
        for c,r,p,n in country_stat.itertuples()]
table.add(headers, rows)
table.set_global_opts(title_opts=opts.ComponentTitleOpts(title="经济实力速览"))
table.render('2_2_country_table.html')

3.3 行业分析散点图

我们将绘制一个散点图,展示不同行业的利润与收入的关系。

from pyecharts.charts import Scatter
from pyecharts import options as opts

# 按行业统计利润和收入
industry_summary = data.groupby('industry').agg({'profit''mean''revenue''mean'}).reset_index()
industry_summary.columns = ['行业''平均利润''平均收入']

# 创建散点图
scatter = Scatter(init_opts=opts.InitOpts(bg_color='black'))
scatter.add_xaxis(industry_summary['平均收入'].tolist())
scatter.add_yaxis("平均利润", industry_summary['平均利润'].tolist(), name="平均利润")
scatter.set_global_opts(
    title_opts=opts.TitleOpts(title="行业分析散点图", subtitle="利润与收入的关系", pos_left='center'),
    xaxis_opts=opts.AxisOpts(type_="value", name="平均收入"),
    yaxis_opts=opts.AxisOpts(type_="value", name="平均利润"),
    visualmap_opts=opts.VisualMapOpts(type_="size", max_=industry_summary['平均利润'].max(), min_=industry_summary['平均利润'].min())
)
scatter.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
scatter.render('industry_scatter.html')

3.4 头部企业分析

我们将绘制一个柱状图,展示排名前10的企业。

# 获取排名前10的企业
top10 = data.sort_values(by="rank")[:10]

# 创建柱状图
bar = Bar(init_opts=opts.InitOpts(bg_color='black'))
bar.add_xaxis(top10['name'].tolist())
bar.add_yaxis("利润", top10['profit'].tolist(), category_gap="50%")
bar.add_yaxis("收入", top10['revenue'].tolist(), category_gap="50%")
bar.set_global_opts(
    title_opts=opts.TitleOpts(title="头部企业分析", subtitle="排名前10的企业", pos_left='center'),
    xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)),
    yaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts(is_show=True)),
    visualmap_opts=opts.VisualMapOpts(is_show=True, pos_top='middle', pos_right='10%', orient='vertical')
)
bar.set_series_opts(label_opts=opts.LabelOpts(is_show=True, position="insideTop"))
bar.render('top10.html')

3.5 地理分布分析

我们将绘制一个地图,展示各国的企业分布情况。

from pyecharts.charts import Map
from pyecharts import options as opts
name_map = {
    'Singapore Rep.': '新加坡',
    'Dominican Rep.': '多米尼加',
    'Palestine': '巴勒斯坦',
    'Bahamas': '巴哈马',
    'Timor-Leste': '东帝汶',
    ....
}
swapped_dict = {v: k for k, v in name_map.items()}

# 按国家统计企业数量
def country_map_distribution():
    country_counts = data['country'].value_counts().reset_index()
    country_counts.columns = ['country''count']

    country_counts['country'] = country_counts['country'].apply(lambda x: x if x!='英国/荷兰' else '荷兰')

    world_map = (
        Map(init_opts=opts.InitOpts(bg_color='black'))
        .add(
            series_name="企业数量",
            data_pair=[list(z) for z in zip(country_counts['country'].tolist(), country_counts['count'].tolist())],
            maptype="world",
            is_map_symbol_show=False,
            label_opts=opts.LabelOpts(is_show=False),
        )
        .set_global_opts(
            title_opts=opts.TitleOpts(title="地理分布分析", subtitle="各国企业数量", pos_left='center'),
            visualmap_opts=opts.VisualMapOpts(
                max_=max(country_counts['count']),
                min_=1,
                is_calculable=True,
                range_color=['#313695''#4575b4''#74add1''#abd9e9''#e0f3f8''#ffffbf''#fee090''#fdae61''#f46d43''#d73027''#a50026'],
                textstyle_opts=opts.TextStyleOpts(color="#fff")
            ),
            tooltip_opts=opts.TooltipOpts(
                formatter=JsCode(
                    """function(params) {
                        return params.name + ': ' + params.value + '人';
                    }"""
                )
            )
        )
    )

country_map_distribution().render('country_map.html')

3.6 中美主导格局(双层柱状图)

我们将绘制一个双层柱状图,展示中美两国的企业数量和总收入。

# 获取中美两国的数据
us_data = data[data['country'] == '美国']
china_data = data[data['country'] == '中国']

# 统计企业数量和总收入
us_counts = us_data.shape[0]
china_counts = china_data.shape[0]
us_revenue = us_data['revenue'].sum()
china_revenue = china_data['revenue'].sum()

# 创建双层柱状图
bar = Bar(init_opts=opts.InitOpts(bg_color='black'))
bar.add_xaxis(['美国', '中国'])
bar.add_yaxis("企业数量", [us_counts, china_counts]stack="stack1")
bar.add_yaxis("总收入", [us_revenue, china_revenue]stack="stack1")
bar.set_global_opts(
    title_opts=opts.TitleOpts(title="中美主导格局", subtitle="企业数量与总收入", pos_left='center'),
    xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)),
    yaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts(is_show=True)),
    visualmap_opts=opts.VisualMapOpts(is_show=True, pos_top='middle', pos_right='10%', orient='vertical')
)
bar.set_series_opts(label_opts=opts.LabelOpts(is_show=True, position="insideTop"))
bar.render('us_china.html')

3.7 行业盈利能力柱状图

我们将绘制一个柱状图,展示不同行业的盈利能力。

from pyecharts.charts import Bar
from pyecharts import options as opts

# 按行业统计利润
industry_profit = data.groupby('industry')['profit'].mean().sort_values(ascending=False).head(10)

# 准备数据
x_data = industry_profit.index.tolist()  # x轴数据(行业名称)
y_data = industry_profit.values.tolist()  # y轴数据(平均利润值)

# 创建柱状图
bar = Bar(init_opts=opts.InitOpts(bg_color='black'))
bar.add_xaxis(x_data)
bar.add_yaxis(
    series_name="平均利润",
    y_axis=y_data,
    label_opts=opts.LabelOpts(is_show=True, position="top", color="white"),  # 显示数值标签(白色)
    itemstyle_opts=opts.ItemStyleOpts(color="#5793f3"),  # 设置柱子颜色(蓝色)
)

# 设置全局配置
bar.set_global_opts(
    title_opts=opts.TitleOpts(
        title="行业盈利能力柱状图",
        subtitle="按平均利润统计(前10行业)",
        pos_left='center',
        title_textstyle_opts=opts.TextStyleOpts(color="white"),
    ),
    xaxis_opts=opts.AxisOpts(
        axislabel_opts=opts.LabelOpts(rotate=45, color="white"),
        axisline_opts=opts.AxisLineOpts(linestyle_opts=opts.LineStyleOpts(color="white")),
    ),
    yaxis_opts=opts.AxisOpts(
        axislabel_opts=opts.LabelOpts(color="white"),
        axisline_opts=opts.AxisLineOpts(linestyle_opts=opts.LineStyleOpts(color="white")),
        splitline_opts=opts.SplitLineOpts(is_show=True, linestyle_opts=opts.LineStyleOpts(color="gray")),
    ),
    tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="shadow"),
    # datazoom_opts=[opts.DataZoomOpts()],  # 可选:如果数据较多,可以取消注释
)

# 渲染图表
bar.render('industry_bar.html')

3.8 科技巨头雷达图

我们将绘制一个雷达图,展示科技巨头的利润、收入和员工人数。

from pyecharts.charts import Radar
from pyecharts import options as opts

# 获取科技巨头的数据
tech_companies = data[data['industry'] == '计算机、办公设备'].head(5)

# 创建雷达图
radar = Radar(init_opts=opts.InitOpts(bg_color='black'))
radar.add_schema(schema=[{"name""利润""max": tech_companies['profit'].max()}, 
                         {"name""收入""max": tech_companies['revenue'].max()}, 
                         {"name""员工人数""max": tech_companies['staff'].max()}])
radar.add("科技巨头", [list(z) for z in zip(tech_companies['profit'].tolist(), tech_companies['revenue'].tolist(), tech_companies['staff'].tolist())], 
           label_opts=opts.LabelOpts(is_show=True))
radar.set_global_opts(title_opts=opts.TitleOpts(title="科技巨头雷达图", subtitle="利润、收入和员工人数", pos_left='center'))
radar.render('tech_radar.html')

3.9 全球亏损企业解剖图

我们将绘制一个柱状图,展示亏损企业的利润和收入情况。

# 获取亏损企业的数据
loss_companies = data[data['profit'] < 0]

# 创建柱状图
bar = Bar(init_opts=opts.InitOpts(bg_color='black'))
bar.add_xaxis(loss_companies['name'].tolist())
bar.add_yaxis("利润", loss_companies['profit'].tolist(), category_gap="50%")
bar.add_yaxis("收入", loss_companies['revenue'].tolist(), category_gap="50%")
bar.set_global_opts(
    title_opts=opts.TitleOpts(title="全球亏损企业解剖图", subtitle="亏损企业的利润和收入", pos_left='center'),
    xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)),
    yaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts(is_show=True)),
    visualmap_opts=opts.VisualMapOpts(is_show=True, pos_top='middle', pos_right='10%', orient='vertical')
)
bar.set_series_opts(label_opts=opts.LabelOpts(is_show=True, position="insideTop"))
bar.render('loss_companies.html')

四、总结

通过对世界五百强企业的数据分析和可视化,我们从多个维度展示了全球经济的现状。这些图表不仅具有视觉冲击力,还能帮助我们快速提取关键信息。如果你对全球经济数据分析感兴趣,欢迎关注我的博客!🎉


如果您在人工智能领域遇到技术难题,或是需要专业支持,无论是技术咨询、项目开发还是个性化解决方案,我都可以为您提供专业服务,如有需要可站内私信或添加下方VX名片(ID:xf982831907)

期待与您一起交流,共同探索AI的更多可能!