首頁 > 軟體

利用Python對中國500強排行榜資料進行視覺化分析

2022-05-18 13:01:14

一、前言

今天來跟大家分析一下2020年中國500強企業排行榜資料,從不同角度去對資料進行統計分析,視覺化展示。

主要分析內容

中國500強企業-省份分佈。

中國500強企業-營業收入年增率。

中國500強企業-營業收入年減率。

中國500強企業-利潤年增率。

中國500強企業-利潤年減率。

中國500強企業-排名上升最快。

中國500強企業-排名下降最快。

中國500強企業-資產區間分佈。

中國500強企業-市值區間分佈。

中國500強企業-營業收入區間分佈。

中國500強企業-利潤區間分佈。

中國500強企業-排名前10營業收入、利潤、資產、市值、股東權益等情況。

下面開始從資料採集到資料統計分析,最後進行視覺化!!!

二、資料採集

1.開始爬取

獲取企業列表

url="http://www.fortunechina.com/fortune500/c/2020-07/27/content_369925.htm"
res = requests.get(url,headers=headers)
res.encoding = 'utf-8'
text = res.text

獲取企業對應url

for i in range(0,len(table_tr)):
    try:
        #name = i.xpath('.//td/a/text()')[0]
        href = table_tr[i].xpath('.//td/a/@href')[0].replace("../../../../","http://www.fortunechina.com/")
        column_list = get_detail(href)
        for k in range(0,len(column_list)):
             outws.cell(row=count, column=k+1, value=column_list[k])
        print(count)
        count = count+1
    except:
        pass

獲取每一個企業相關資料

name = selector.xpath('//*[@class="comp-name"]/text()')[0]
r1 = selector.xpath('//*[@class="con"]/em[@class="r1"]/text()')[0]
r2 = selector.xpath('//*[@class="con"]/span/em/font[@class="ft-red"]/text()')[0]
address = selector.xpath('//*[@class="info"]/p')[0].xpath('.//text()')[0].replace(" ", "")
table_tbody_tr = selector.xpath('//*[@class="table"]/table/tr')

2.儲存到Excel

outwb = openpyxl.Workbook()
outws = outwb.create_sheet(index=0)
outws.cell(row=1, column=1, value="企業名稱")
outws.cell(row=1, column=2, value="2020年排名")
outws.cell(row=1, column=3, value="2019年排名")
outws.cell(row=1, column=4, value="總部地址")
outws.cell(row=1, column=5, value="營業收入")
outws.cell(row=1, column=6, value="營業收入年增減")
outws.cell(row=1, column=7, value="利潤")
outws.cell(row=1, column=8, value="利潤年增減")
outws.cell(row=1, column=9, value="資產")
outws.cell(row=1, column=10, value="市值")
outws.cell(row=1, column=11, value="股東權益")
outwb.save("中國500強排行榜資料.xlsx")  # 儲存

資料就已經儲存到Excel中,下面開始進行統計分析視覺化!

三、視覺化分析

1.省份分佈

匯入相關視覺化庫

from pyecharts import options as opts
from pyecharts.charts import Line
from pyecharts.charts import Map
import pandas as pd
from pyecharts import options as opts
from pyecharts.globals import ThemeType
from pyecharts.charts import Bar

統計資料

從excel中中取出:總部地址,然後取出前兩位(省份),統計每一個省份的500強分佈情況

address = pd_data['總部地址']
address = address.tolist()
address_03 = []
for i in address:
    ###取省份(前兩位)
    address_03.append(i[0:2])
data =[]
address_03_set = set(address_03)  #address_03_set是另外一個列表,裡面的內容是address_03裡面的無重複 項
for item in address_03_set:
  data.append((item,address_03.count(item)))

地圖視覺化

def map_china() -> Map:
  c = (
    Map()
    .add(series_name="企業數量", data_pair=data, maptype="china",zoom = 1,center=[105,38])
    .set_global_opts(
      title_opts=opts.TitleOpts(title="中國500強企業省份分佈"),
      visualmap_opts=opts.VisualMapOpts(max_=9999,is_piecewise=True,
              pieces=[{"max": 9, "min": 0, "label": "0-9","color":"#FFE4E1"},
                  {"max": 99, "min": 10, "label": "10-99","color":"#FF7F50"},
                  {"max": 499, "min": 100, "label": "100-499","color":"#F08080"},
                  {"max": 999, "min": 500, "label": "500-999","color":"#CD5C5C"},
                  {"max": 9999, "min": 1000, "label": ">=1000", "color":"#8B0000"}]
                       )
    )
  )
  return c

2.營業收入年增率

從excel中中取出:營業收入年增減,統計增加率最大的前50名和減少率(負數)最大的前50名

income_rate = pd_data['營業收入年增減']
compare_name = pd_data['企業名稱']
income_rate = income_rate.tolist()
compare_name = compare_name.tolist()
m = income_rate
# 求一個list中最大的50個數,並排序
max_number = heapq.nlargest(50, m)
# 最大的2個數對應的,如果用nsmallest則是求最小的數及其索引
max_index = map(m.index, heapq.nlargest(50, m))
# max_index 直接輸出來不是數,使用list()或者set()均可輸出
#print(set(max_index)) ###{235, 140, 273, 148, 86}
max_index = list(set(max_index))
#ss = [m.index(j) for j in max_number]
name =[compare_name[k] for k in set(max_index)]
outwb = openpyxl.Workbook()
outws = outwb.create_sheet(index=0)

3.營業收入年減率

income_rate = income_rate.tolist()
compare_name = compare_name.tolist()
m = income_rate
# 求一個list中最小的50個數,並排序
min_number = heapq.nsmallest(60, m)
min_index = [m.index(j) for j in min_number]
name =[compare_name[k] for k in set(min_index)]

4.利潤年增率

從excel中中取出:利潤年增減,統計增加率最大的前50名和減少率(負數)最大的前50名

5.利潤年減率

6.排名上升最快20家企業

從excel中中取出:2020年排名和2019年排名,進行對比,統計排名上升最大的前20家企業,和排名下降最大的前20家企業。

###折線圖
def LinePic(x_data,y_data,name):
    (
        Line()
            # 進行全域性設定
            .set_global_opts(
            tooltip_opts=opts.TooltipOpts(is_show=True),  # 顯示提示資訊,預設為顯示,可以不寫
            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),
            ),
        )
            # 新增x軸的點
            .add_xaxis(xaxis_data=x_data)
            # 新增y軸的點
            .add_yaxis(
            series_name=name,
            y_axis=y_data,
            symbol="emptyCircle",
            is_symbol_show=True,
            label_opts=opts.LabelOpts(is_show=True),
        )
            # 儲存為一個html檔案
            .render(name+".html")
    )

7.排名下降最快20家企業

8.資產區間分佈

從excel中中取出:資產,為9000 間隔進行區間劃分,並統計每一個區間的個數。

for k, g in groupby(sorted(assets_list), key=lambda x: x // 90000):
    name.append(str(k * 90000) + "~" + str((k + 1) * 90000 - 1))
    dict_value.append(int(len(list(g))))

9.市值區間分佈

從excel中中取出:市值,為7000 間隔進行區間劃分,並統計每一個區間的個數。

for k, g in groupby(sorted(assets_list), key=lambda x: x // 7000):
    name.append(str(k * 7000) + "~" + str((k + 1) * 7000 - 1))
    dict_value.append(int(len(list(g))))

10.營業收入區間分佈

從excel中中取出:營業收入,為50000 間隔進行區間劃分,並統計每一個區間的個數。

for k, g in groupby(sorted(assets_list), key=lambda x: x // 50000):
    name.append(str(k * 50000) + "~" + str((k + 1) * 50000 - 1))
    dict_value.append(int(len(list(g))))

11.利潤區間分佈

從excel中中取出:利潤5000 間隔進行區間劃分,並統計每一個區間的個數。

for k, g in groupby(sorted(assets_list), key=lambda x: x//5000):
    name.append(str(k*5000)+"~"+str((k+1)*5000-1))
    dict_value.append(int(len(list(g))))

12.中國500強企業-排名前10營業收入、利潤、資產、市值、股東權益

從excel中中取出排名前10: **營業收入、**利潤、資產、市值、股東權益、

name = pd_data['企業名稱'][0:11].tolist()
data_1 = pd_data['營業收入'][0:11].tolist()
data_2 = pd_data['利潤'][0:11].tolist()
data_3 = pd_data['資產'][0:11].tolist()
data_4 = pd_data['市值'][0:11].tolist()
data_5 = pd_data['股東權益'][0:11].tolist()
# 鏈式呼叫
c = (
    Bar(
        init_opts=opts.InitOpts(  # 初始設定項
            theme=ThemeType.MACARONS,
            animation_opts=opts.AnimationOpts(
                animation_delay=1000, animation_easing="cubicOut"  # 初始動畫延遲和緩動效果
            ))
    )
        .add_xaxis(xaxis_data=name)  # x軸
        .add_yaxis(series_name="營業收入", yaxis_data=cleardata(data_1))  # y軸
        .add_yaxis(series_name="利潤", yaxis_data=cleardata(data_2))  # y軸
        .add_yaxis(series_name="資產", yaxis_data=cleardata(data_3))  # y軸
        .add_yaxis(series_name="市值", yaxis_data=cleardata(data_4))  # y軸
        .add_yaxis(series_name="股東權益", yaxis_data=cleardata(data_5))  # y軸
        .set_global_opts(
        title_opts=opts.TitleOpts(title='', subtitle='排名前10經濟情況',  # 標題設定和調整位置
                                  title_textstyle_opts=opts.TextStyleOpts(
                                      font_family='SimHei', font_size=25, font_weight='bold', color='red',
                                  ), pos_left="90%", pos_top="10",
                                  ),
        xaxis_opts=opts.AxisOpts(name='企業名稱', axislabel_opts=opts.LabelOpts(rotate=20)),
        # 設定x名稱和Label rotate解決標籤名字過長使用
        yaxis_opts=opts.AxisOpts(name='單位:百萬美元'),
 
    )
        .render("2020年中國500強-排名前10名經濟情況.html")
)

四、總結

本文主要對以下12個方面進行統計分析,最後繪製視覺化圖

中國500強企業-省份分佈。

中國500強企業-營業收入年增率。

中國500強企業-營業收入年減率。

中國500強企業-利潤年增率。

中國500強企業-利潤年減率。

中國500強企業-排名上升最快。

中國500強企業-排名下降最快。

中國500強企業-資產區間分佈。

中國500強企業-市值區間分佈。

中國500強企業-營業收入區間分佈。

中國500強企業-利潤區間分佈。

中國500強企業-排名前10營業收入、利潤、資產、市值、股東權益等情況。

到此這篇關於利用Python對中國500強排行榜資料進行視覺化分析的文章就介紹到這了,更多相關Python資料視覺化內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com