データセット
この記事のデータソースは https://www.kaggle.com/gpreda/covid-world-vaccination-progressです。
主な情報:
国-これはワクチン接種情報を提供する国です;
国のISOコード-国のISOコード;
日付-データ日付を入力します。一部の日付では、毎日のワクチン接種のみがあり、他の日では、(累積)合計のみがあります。
ワクチン接種の総数-これは、国
のワクチン接種の総数の絶対値です。人数の合計です。ワクチン接種-異なる免疫スケジュールに従って、人は1つ以上(通常は2)のワクチンでワクチン接種されます;特定の瞬間に、ワクチン接種の数は人々の数より多いかもしれません;
完全にされた人々の総数ワクチン接種-これは、免疫計画に従ってセット全体を受け取ることです(通常2回)免疫された人の数;特定の瞬間に、特定の数の人がワクチンを接種され、別の(より少ない)グループの人々がワクチンを接種される場合があります計画中のすべてのワクチンを接種されている;
(プリミティブ)毎日ワクチン接種、特定のデータ入力-for、日付/国の予防接種の数、
毎日の予防接種いくつかのデータ入力-for、日付/国の予防接種の数。
ワクチン接種の総数/国内の日付時点でのワクチン接種の数と総人口集団間の割合(割合) ;
100人の人口の予防接種あたりの予防接種を受けた人々の総数、国内の日付に対する総人口の比率(割合) ) ;
100人あたりのワクチン接種者の総数-人口は完全に免疫され、総人口は国内比率(パーセンテージ)の日付に達します;
1日あたりのワクチン接種数-その日の
1日あたりのワクチン接種数と国/地域; 100万日あたりのワクチン接種数-国の当日のワクチン接種数と総人口の比率(ppm);
で使用されるワクチン国-その国で使用されている数ワクチンの総数(最新);
ソース名-情報ソース(国の管轄当局、国際組織、地方組織など);
ソースWebサイト-情報ソースWebサイト。
要求する
このデータセットは最新のCOVID-19ワクチン接種統計です。何らかの理由で、データセット内の多くの特定の情報が欠落しています。いくつか閲覧した後、この国で使用されているワクチンの列は比較的高いデータ整合性を持っていることがわかりました。したがって、この列を使用して、すべてのワクチンの種類と国の使用に関する統計を作成し、最も広く使用されている種類のワクチンを理解してください。
主なアイデアは次のとおりです。
- 国の2つの有効な列とその国で使用されているワクチンを抽出します
- 必要なのは
国家->使用疫苗类型
キーと値のペアのフォームデータであるため、抽出されたデータを重複排除します - ワクチンの種類をグループ化および集約
- Flaskフレームワークはデータを送信します
- HTMLレンダリングの視覚化
コード
①Pythonデータの前処理
import pandas as pd
from flask import Flask,render_template
# 读取数据集
data = pd.read_csv("G:\Projects\pycharmeProject-C\Flask\dataset\country_vaccinations.csv")
data.columns = ['国家','国家代码','日期','疫苗接种总数','接种的总人数','已完全接种疫苗的总人数','每日疫苗接种(原始)','每日疫苗接种','截至该国日期为止的总疫苗接种量/接种人数与总人口之间的百分率(百分比)','总人数每百接种疫苗','人每百全接种总数','每百万日接种量','该国使用的疫苗','来源名称','来源网站']
# 填补缺失值
data.fillna(0,inplace=True)
# 统计各国使用的疫苗种类
data_use = data[['国家','该国使用的疫苗']].drop_duplicates()
# 统计不同疫苗的在不同国家的使用情况
count = data_use['该国使用的疫苗'].value_counts()
# counts = data_use.groupby('该国使用的疫苗').agg(count=('该国使用的疫苗','count')).reset_index()
list = count.reset_index().values.tolist()
②Flaskフレームワークはデータを送信します
# 可视化
app = Flask(__name__)
@app.route("/")
def index():
sheets = list
return render_template("country_vaccinations02.html",sheet = sheets)
if __name__ == '__main__':
app.run(debug=True)
③HTMLレンダリング
<!DOCTYPE html>
<html lang="en" style="height:100%">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body style="height:100%">
<div style="height:100%" id="container"></div>
<script type="text/javascript" src="../static/echarts.min.js"></script>
<script type="text/javascript">
var dom = document.getElementById("container");
var myChart = echarts.init(dom);
var data = [{
% for item in sheet %}'{
{ item.0 }}',{
% endfor %}];
var data1 = [{
% for item in sheet %}{
{
item.1 }},{
% endfor %}];
var option = null;
option = {
title:{
text:'不同类型疫苗使用占比图',
},
tooltip:{
trigger:'item',
formatter:'{a}</br>{b}:{c}({d}%)'
},
legend:{
show:true,
left:'5%',
top:'5%',
orient:'vertical'
},
series:[
{
name:'疫苗使用情况',
type:'pie',
roseType:'area',
radius:['10%','50%'],
center:['50%','50%'],
data:[
{
name:data[0],value:[data1[0]]},
{
name:data[1],value:[data1[1]]},
{
name:data[2],value:[data1[2]]},
{
name:data[3],value:[data1[3]]},
{
name:data[4],value:[data1[4]]},
{
name:data[5],value:[data1[5]]},
{
name:data[6],value:[data1[6]]},
{
name:data[7],value:[data1[7]]},
{
name:data[8],value:[data1[8]]},
],
emphasis: {
itemStyle: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0.5)'
}
}
}
]
};
if (option && typeof option == "object"){
myChart.setOption(option);
}
</script>
</body>
</html>