🧑 博主简介:曾任某智慧城市类企业算法总监,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的更多可能!