Python數據分析案例:對全國大學綜合數據分析,本可視化展示(附加2021全國大學排名爬蟲源碼)


前言

軟科中國大學排名以專業、客觀、透明的優勢贏得了高等教育領域和社會的廣泛關注和認可,本次將利用Python對我國大學排名和分布情況進行一番研究。

先展示下爬蟲的源碼

import requests
import parsel
import csv
f = open('排名.csv', mode='a', encoding='utf-8', newline='')
csv_writer = csv.DictWriter(f, fieldnames=['名次', '學校名稱', '綜合得分', '星級排名', '辦學層次'])
url = 'http://m.gaosan.com/gaokao/265440.html'

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'
}
response = requests.get(url=url, headers=headers)
response.encoding = response.apparent_encoding
selector = parsel.Selector(response.text)
trs = selector.css('#page tr')

for tr in trs:
    dit = {}
    ranking = tr.css('td:nth-child(1)::text').get()
    dit['名次'] = ranking
    school = tr.css('td:nth-child(2)::text').get()
    dit['學校名稱'] = school
    score = tr.css('td:nth-child(3)::text').get()
    dit['綜合得分'] = score
    star = tr.css('td:nth-child(4)::text').get()
    dit['星級排名'] = star
    level = tr.css('td:nth-child(5)::text').get()
    dit['辦學層次'] = level
    csv_writer.writerow(dit)
    print(dit)

f.close()

 

數據分析涉及到的內容

  • Pandas — 數據處理
  • Pyecharts — 數據可視化

導入模塊

from pyecharts.charts import Map,Bar,Pie
from pyecharts import options as opts
import pandas as pd

 

Pandas數據處理

讀取數據

df = pd.read_csv('中國大學綜合排名.csv',index_col=0)
df.head()

 

查看表格數據類型

df.dtypes

 

統計各省市大學數量

# 各省份大學數量
df_counts = df.groupby('省市').count()['排名']
df0 = df_counts.copy()
# 進行降序排列 並在當前df0上進行修改
df0.sort_values(ascending=False, inplace=True)
df0

 

各省市大學平均分排序

# 統計每個省份大學的數量以及平均分
# 算出平均分
df_means0 = df.groupby('省市').mean()['總分']
# 取兩位小數
df_means = df_means0.round(2)
# 合並上面的大學數量跟平均分
df1 = pd.concat([df_counts, df_means], axis=1)
# 改變列名
df1.columns = ['數量', '平均分']
# 通過 平均分 進行降序排列 並在當前df1上進行修改
df1.sort_values(by=['平均分'], ascending=False, inplace=True)
df1

 

Pyecharts數據可視化

各省市大學數量和平均分柱狀圖(橫向)

d1 = df1.index.tolist()
d2 = df1['數量'].values.tolist()
d3 = df1['平均分'].values.tolist()
bar0 = (
    Bar()
    .add_xaxis(d1)
    .add_yaxis('數量', d2)
    .add_yaxis('平均分數', d3)
    .set_global_opts(
        title_opts=opts.TitleOpts(title='中國大學排名'),
        yaxis_opts=opts.AxisOpts(name=''),
        xaxis_opts=opts.AxisOpts(name='省份'),
    )
)
bar0.render_notebook()

 

各省市大學數量和平均分柱狀圖(縱向)

df1.sort_values(by=['平均分'], inplace=True)
d1 = df1.index.tolist()
d2 = df1['數量'].values.tolist()
d3 = df1['平均分'].values.tolist()
bar1 = (
    Bar()
    .add_xaxis(d1)
    .add_yaxis('數量', d2)
    .add_yaxis('平均分數', d3)
    # 坐標軸翻轉
    .reversal_axis()
    # 數值顯示靠右
    .set_series_opts(label_opts=opts.LabelOpts(position='right'))
    .set_global_opts(
        title_opts=opts.TitleOpts(title='中國大學排名'),
        yaxis_opts=opts.AxisOpts(name='省份'),
        xaxis_opts=opts.AxisOpts(name=''),
    )
)
bar1.render_notebook()

 

各省市大學數量玫瑰圖

弗羅倫斯·南丁格爾(Florence Nightingale),一位著名的英國護士,同時她也是一位統計學家,很多人沒有想到吧?
她被號稱為數據可視化的鼻祖,就是數據可視化的祖師爺,你可能也沒有想到吧?
她是英國皇家統計學會的第一個女成員,也是美國統計協會的名譽會員。

克里米亞戰爭時期,南丁格爾發現大多數士兵不是陣亡,而是因為飢餓、營養不良、衛生條件差和野戰醫院的條件差才死於其戰傷。
於是她向上級報告了克里米亞戰爭的醫療條件,同時申請一批醫療物質來改變醫療條件。由於國會議員不會閱讀統計報告,所以她的申請一直得不到批准。於是她改用了極座標餅圖的形式來展示戰地醫院的病人死亡率在不同季節的變化,重新提交這個申請報告,沒想到馬上就得到了批准。這是這批物質改善了戰地醫院的衛生條件,僅此一項改革就大大地提高了受傷戰士的生存率。

后被這個圖就被稱為南丁格爾玫瑰圖,南丁格爾也被尊稱為數據可視化鼻祖

name = df_counts.index.tolist()
count = df_counts.values.tolist()
c0 = (
    Pie()
    .add(
        '',
        [list(z) for z in zip(name, count)],
        # 餅圖的半徑,數組的第一項是內半徑,第二項是外半徑
        # 默認設置成百分比,相對於容器高寬中較小的一項的一半
        radius=['20%', '60%'],
        # 讓圖在這個位置顯示
        center=['50%', '65%'],
        # 是否展示成南丁格爾圖,通過半徑區分數據大小,有'radius'和'area'兩種模式。
        # radius:扇區圓心角展現數據的百分比,半徑展現數據的大小
        # area:所有扇區圓心角相同,僅通過半徑展現數據大小
        rosetype="radius",
        # 顯示標簽
        label_opts=opts.LabelOpts(is_show=False),
    )
    .set_series_opts(label_opts=opts.LabelOpts(formatter='{b}: {c}'))
)
c0.render_notebook()

 

各省市大學數量南丁格爾玫瑰圖

provinces = df0.index.tolist()
num = df0.values.tolist()
c1 = (
    Pie()
    .add('', 
         [list(z) for z in zip(provinces, num)],
         radius=['30%', '105%'],
         rosetype='area'
         )
    .set_global_opts(
        title_opts=opts.TitleOpts(title='中國大學排名'),
        legend_opts=opts.LegendOpts(is_show=False),
        toolbox_opts=opts.ToolboxOpts()
    )
    .set_series_opts(
        label_opts=opts.LabelOpts(
            # 是否顯示標簽
            is_show=True,
            # 設置標簽位置
            position="inside", 
            font_size=12,
            formatter='{b}: {c}',
            # 斜體
            font_style='italic',
            # 加粗
            font_weight='bold', 
            # 微軟的雅黑字體
            font_family='Microsoft YaHei'
        )
    )
)
c1.render_notebook()

 

總結

大學數量較多的省市:江蘇、山東、河南、河北、北京、遼寧 、陝西、四川 、廣東 、湖南 、湖北、浙江等地(只看學校數量),后期探索可根據學校排名
排名前20的大學較前一年的波動較小(這也符合常理,畢竟前幾的學校都是多年沉淀下來的)
西部地區大學數量較少
本數據集不包含港、澳、台大學(網站未統計)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM