中国の大学の学術ランキングの変化の20秒の概要

最近、Xiao Bengcongは、ステーションBで各国のGDPランキングの変化を示す非常に燃えているビデオを見ました。中国が世界のナンバー1を超えていることを知ったとき、そのプライドが生まれました!

WeChat   公式アカウントへの元のリンク(CSDNはビデオをアップロードできません)

Xiaobencongはため息をついている間、そのような視覚的なチャートがどのように作成されるかについても興味がありますか?著者のJannchieが出会ったBステーションのホームページを見つけました。

哔哩哔哩 ( ゜- ゜)つロ 乾杯~ Bilibili​space.bilibili.com

 

内側をクリックして、そのような興味深いクールなビデオをたくさん見つけてください。

 

まあ、私も学びたいです!

彼はどうやってそれを達成したのですか?彼はJavaScriptライブラリを使用してデータを動的グラフィックで表示することがわかりました:D3.js。では、D3.jsを実行できない場合、それを実行できないのでしょうか。もちろん、そうではありません。Jannchieは、シンプルなハンドツーハンドチュートリアルを非常にうまく提供しました。ハンドツーハンドチュートリアルを参照してください

最も重要なことは、彼がプログラムのソースコードも開いたことです。これは、たった2つのステップで実行できます。

 

  • フォルダー内のファイルを開き、exampe.csv表示するデータを入力し、ブラウザーを使用してbargraph.htmlWebページを開くと、動的な効果を得ることができます。使用するデータ形式の要件に注意してください。

Xiaobencongのアプリケーション例を以下に示します。まず、大学のランキングのデータをクロールして処理し、次にソースコードを使用してデータを視覚化します。

事前に効果を感じてください

 

1.大学ランキングデータのクロール

(1)データソース

世界で最も権威のある大学のランキングには、次の4つのカテゴリがあります。

ここでは、比較的信頼性が高く、国家の状況に沿った最初のARWUランキング結果を選択します。公式サイトを開くと、2003年から2018年までのランキングの英語版と中国語版を見ることができます。中国語版はこちらから選択してください。

データソースを特定すると、データをクロールできます。

(2)URLを分析してコンテンツを取得する

WebページのURLは非常にシンプルですが、年によって変化します。10年分のデータをキャプチャし、メインでforループを作成するだけで、URL形式がコードに表示されます。さらに、異なる年に使用されたWebページはエンコードが異なることに注意してください。response.testを返すと文字化けしますが、response.contentを返すと文字化けしません。

 1 def get_one_page(year):
 2    try:
 3        headers = {
 4                'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36'
 5        }
 6        # 英文版
 7        # url = 'http://www.shanghairanking.com/ARWU%s.html' % (str(year))
 8        # 中文版
 9        url = 'http://www.zuihaodaxue.com/ARWU%s.html' % (str(year))
10        response = requests.get(url,headers = headers)
11        # 2009-2015用'gbk',2016-2018用'utf-8'
12        if response.status_code == 200:
13            return response.content
14        return None
15    except RequestException:
16        print('爬取失败')

(3)構文解析フォーム

read_html関数を使用してテーブルを取得し、テーブルに対して必要な処理を実行します。

 1 def parse_one_page(html,i):
 2    tb = pd.read_html(html)[0]
 3    # 重命名表格列,不需要的列用数字表示
 4    tb.columns = ['world rank','university', 2,3, 'score',4]
 5    tb.drop([2,3],axis = 1,inplace = True)
 6
 7    # rank列100名后是区间,需唯一化,增加一列index作为排名
 8    tb['index_rank'] = tb.index
 9    tb['index_rank'] = tb['index_rank'].astype(int) + 1
10    # 增加一列年份列
11    tb['year'] = i
12    # read_html没有爬取country,需定义函数单独爬取
13    tb['country'] = get_country(html)
14    print(tb) # 测试表格ok
15    return tb
16    print(tb.info()) # 查看表信息

国が取得されていないため、現時点でのテーブルデータは不完全です。国コードの場所を特定できるため、国はウェブページ上の画像で表されます。

脱いで。国コードの場所を特定できるため、国はウェブページ上の画像で表されます。

アメリカ合衆国が英語USAで表現されていることがわかります。次に、src属性を個別に抽出し、regularを使用して国名を抽出します。

 1 def get_country(html):
 2    soup = BeautifulSoup(html,'lxml')
 3    countries = soup.select('td > a > img')
 4    lst = []
 5    for i in countries:
 6        src = i['src']
 7        pattern = re.compile('flag.*\/(.*?).png')
 8        country = re.findall(pattern,src)[0]
 9        lst.append(country)
10    return lst

 

 world rank    university  score     ...       index_rank  year      country
0            1          哈佛大学  100.0     ...                1  2018          USA
1            2         斯坦福大学   75.6     ...                2  2018          USA
2            3          剑桥大学   71.8     ...                3  2018           UK
3            4        麻省理工学院   69.9     ...                4  2018          USA
4            5      加州大学-伯克利   68.3     ...                5  2018          USA
5            6        普林斯顿大学   61.0     ...                6  2018          USA
6            7          牛津大学   60.0     ...                7  2018           UK
7            8        哥伦比亚大学   58.2     ...                8  2018          USA
8            9        加州理工学院   57.4     ...                9  2018          USA
9           10         芝加哥大学   55.5     ...               10  2018          USA
10          11      加州大学-洛杉矶   51.2     ...               11  2018          USA
11          12         康奈尔大学   50.7     ...               12  2018          USA
12          12          耶鲁大学   50.7     ...               13  2018          USA
13          14     华盛顿大学-西雅图   50.0     ...               14  2018          USA
14          15     加州大学-圣地亚哥   47.8     ...               15  2018          USA
15          16       宾夕法尼亚大学   46.4     ...               16  2018          USA
16          17        伦敦大学学院   46.1     ...               17  2018           UK
17          18      约翰霍普金斯大学   45.4     ...               18  2018          USA
18          19     苏黎世联邦理工学院   43.9     ...               19  2018  Switzerland
19          20    华盛顿大学-圣路易斯   42.1     ...               20  2018          USA
20          21      加州大学-旧金山   41.9     ...               21  2018          USA
21          22          东京大学   41.5     ...               22  2018        Japan
22          23         多伦多大学   40.9     ...               23  2018       Canada
23          24        伦敦帝国学院   40.1     ...               24  2018           UK
24          25    西北大学(埃文斯顿)   39.9     ...               25  2018          USA
25          26          杜克大学   39.7     ...               26  2018          USA
26          27     密歇根大学-安娜堡   39.4     ...               27  2018          USA
27          28    威斯康星大学-麦迪逊   38.9     ...               28  2018          USA
28          29        哥本哈根大学   38.7     ...               29  2018      Denmark
29          30        洛克菲勒大学   37.9     ...               30  2018          USA

(4)データ処理

以前に生成されたUniversity.csvファイルをさらに処理します。さらに、このコードは本土の大学のランキングを取得できるだけでなく、香港、マカオ、台湾を含むランキングとアメリカの大学のランキングも取得できます。Xiaobencongはまた、トップ20の大学のリストを年ごとに見つけることができるtopn関数も定義しました。

 1def analysis():
 2    df = pd.read_csv('university.csv')
 3    # 内地
 4    df = df.query("(country == 'China')")[['university','year','index_rank']]
 5
 6    df['index_rank_score'] = df['index_rank']
 7    # 将index_rank列转为整形
 8    df['index_rank'] = df['index_rank'].astype(int)
 9    # 含港澳台
10    # df = df.query("(country == 'China')|(country == 'China-hk')|(country == 'China-tw')|
      # (country == 'China-HongKong')|(country == 'China-Taiwan')|(country == 'Taiwan,China')|(country == 'HongKong,China')")[['university','year','index_rank']]
11    # 美国
12    # df = df.query("(country == 'UnitedStates')|(country == 'USA')")[['university','year','index_rank']]
13    #求topn名
14    def topn(df):
15        top = df.sort_values(['year','index_rank'],ascending = True)
16        return top[:20].reset_index()
17    df = df.groupby(by =['year']).apply(topn)
18    # 更改列顺序
19    df = df[['university','index_rank_score','index_rank','year']]
20    # 重命名列
21    df.rename (columns = {'university':'name','index_rank_score':'type','index_rank':'value','year':'date'},inplace = True)
22    # 输出结果
23    df.to_csv('university_ranking.csv',mode ='w',encoding='utf_8_sig', header=True, index=False)

取得した表データの影響は次のとおりです。

2.データの視覚化

奇数Githubのホーム・ページを参照してくださいするにはまずソースコードをダウンロードし、その後、  bargraph.html  ブラウザにドラッグし、クリックし  、ファイルを選択するためにちょうど良い、ダウンロード university_ranking.csvの ファイルが選択されている、あなたは、動的なデータのチャートを見ることができます。

ただし、フォントサイズ、列の色、データアイテムの位置、グラフの反転など、改善が必要な点がいくつかあります。これらのパラメーターは、ソースコードファイルで変更できます。もちろん、より便利な方法は、まずWebページのCSSスタイルシートで変更してから、ソースコードで変更することです。

ソースコードには、パラメータを簡単に変更できる4つのファイルがあります。

  • config.js  :カラーマッチング、フォント、グラフを反転するかどうかなど、各機能のスイッチを構成します。
  • color_ranges.js  :縦棒グラフの色を変更します。
  • stylesheet.css  :カラーマッチング、フォント、テキスト名などのcssスタイルを具体的に変更します。
  • visual.js  :チャートの透明度などのさらなる変更。

もちろん、あなたが怠惰であるなら、私はあなたのためにそれをすでに修正しました(実際、修正するのは簡単ではありません...)。

 

以上が大学ランキングデータをクロールして動的なアイコンを作成する分析プロセスです。

 

WeChatパブリックアカウント「プログラミングを学ぶ金融学習者」「バックエンド」「大学ランキング」ソースコードを取得します。

WeChat公式アカウントへの元のリンク

 

過去におすすめ

1. 自家製音楽プレーヤー

2. 放浪地球映画レビュー

3. 北上海、広州、深センの貸出図書

 

あなたの「いいね」と注意が私の最大のサポートです!

スキャンコードを保存し、公開番号に注意してください

元の記事を11件公開 受賞11件 ビュー5722

おすすめ

転載: blog.csdn.net/weixin_39270299/article/details/95115333