最近、Xiao Bengcongは、ステーションBで各国のGDPランキングの変化を示す非常に燃えているビデオを見ました。中国が世界のナンバー1を超えていることを知ったとき、そのプライドが生まれました!
WeChat 公式アカウントへの元のリンク(CSDNはビデオをアップロードできません)
Xiaobencongはため息をついている間、そのような視覚的なチャートがどのように作成されるかについても興味がありますか?著者のJannchieが出会ったBステーションのホームページを見つけました。
哔哩哔哩 ( ゜- ゜)つロ 乾杯~ Bilibilispace.bilibili.com
内側をクリックして、そのような興味深いクールなビデオをたくさん見つけてください。
まあ、私も学びたいです!
彼はどうやってそれを達成したのですか?彼はJavaScriptライブラリを使用してデータを動的グラフィックで表示することがわかりました:D3.js。では、D3.jsを実行できない場合、それを実行できないのでしょうか。もちろん、そうではありません。Jannchieは、シンプルなハンドツーハンドチュートリアルを非常にうまく提供しました。ハンドツーハンドチュートリアルを参照してください
最も重要なことは、彼がプログラムのソースコードも開いたことです。これは、たった2つのステップで実行できます。
- 彼のGithubホームページにアクセスして、ソースコードをローカルコンピューターにダウンロードします。https://github.com/Jannchie/Historical-ranking-data-visualization-based-on-d3.js
- フォルダー内のファイルを開き、
exampe.csv
表示するデータを入力し、ブラウザーを使用してbargraph.html
Webページを開くと、動的な効果を得ることができます。使用するデータ形式の要件に注意してください。
Xiaobencongのアプリケーション例を以下に示します。まず、大学のランキングのデータをクロールして処理し、次にソースコードを使用してデータを視覚化します。
事前に効果を感じてください
1.大学ランキングデータのクロール
(1)データソース
世界で最も権威のある大学のランキングには、次の4つのカテゴリがあります。
- 上海交通大学の元ARWU(ソフトブランチ)
http://www.shanghairanking.com/ARWU2018.html - 英国教育機関のQS
https://www.topuniversities.com/university-rankings/world-university-rankings/2018 - テムズTHE
https://www.timeshighereducation.com/world-university-rankings - 米国のUsnews
https://www.usnews.com/best-colleges/rankings
ここでは、比較的信頼性が高く、国家の状況に沿った最初の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. 放浪地球映画レビュー
あなたの「いいね」と注意が私の最大のサポートです!
スキャンコードを保存し、公開番号に注意してください