欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

【Python+Flask+Echarts】可视化练习题 --- 航空火箭信息分析处理

程序员文章站 2022-02-12 07:33:34
【Python+Flask+Echarts】可视化练习题 — 航空火箭信息处理本篇的数据来源 https://www.kaggle.com/datasets该数据集源含一张张数据表,主要包含世界各地的火箭发射信息,通过一些简单的数据清洗处理绘制简单的图像 ☆ミ(o*・ω・)ノ目录:一、数据清洗1、数据提取2、数据类型转换&nb...

【Python+Flask+Echarts】可视化练习题 — 航空火箭信息处理


本篇的数据来源 https://www.kaggle.com/datasets
【Python+Flask+Echarts】可视化练习题 --- 航空火箭信息分析处理
【Python+Flask+Echarts】可视化练习题 --- 航空火箭信息分析处理
该数据集源含一张张数据表,主要包含世界各地的火箭发射信息,通过一些简单的数据清洗处理绘制简单的图像 ☆ミ(o*・ω・)ノ


目录:

一、数据清洗
      1、数据提取
      2、数据类型转换
      3、填补法处理空值
      4、简单去重
二、数据可视化
      任务一:绘制各公司总成本不为0的横向条形图
      任务二:绘制每年\每月的发射数量
      任务三:绘制任务状态统计图


一、数据清洗

原始数据:

【Python+Flask+Echarts】可视化练习题 --- 航空火箭信息分析处理

1、数据提取

# 提取有效列
data = data.iloc[:,1:]
# 重命名 ['公司','发射地点','发射基准和时间','火箭名','火箭状态','任务成本','任务状态']
data.columns = ['公司','发射地点','发射基准和时间','火箭名','火箭状态','任务成本','任务状态']
# 提取相关的发射国家信息
country_split = [x.split(', ') for x in data['发射地点']]
# 创建空数组存储国家,自定义函数提取国家
country = []
def country_select(list):
    for i in range(len(country_split)):
        country.append(list[i][-1])
    return country
# 调用方法获取国家
country_select(country_split)
# 新加一列国家
data['国家'] = country

2、数据格式处理、类型转换

#处理空格、符号
data['任务成本'] = data['任务成本'].str.replace(' ', '')
data['任务成本'] = data['任务成本'].str.replace(',', '')
# 转换数据类型,便于后续各公司成本累计求和
data['任务成本'] = data['任务成本'].astype(float)
# 转换时间序列
data['发射基准和时间'] = pd.to_datetime(data['发射基准和时间'])

返回顶部


3、填补法处理空值:

# 处理空值 --- 填充0
data_nan1 = data.isnull().sum()
data['任务成本'] = data['任务成本'].fillna(0)
data_nan2 = data.isnull().sum()

返回顶部


4、简单去重:

# 查看数据集整体信息
print(data.info())
# 获取重复记录并删除
duplicate = data[data.duplicated()]
sum1 = data.shape
data.drop_duplicates(inplace=True)
sum2 = data.shape
#data.to_csv("data/Space/Space_data_prepared.csv",index=True)

注意:在空值填补处理的时候需要先进行数据类型的转换,也就是第二步要在第三步的前面完成,否则在填值的时候数据类型不匹配无法填充,我在做的时候就是前两步颠倒了位置,导致在控制台查看data_nan1、data_nan2的时候显示空值已经被填,但是最终生成文件中nan值并没有被替换。

简单处理后的表格:

【Python+Flask+Echarts】可视化练习题 --- 航空火箭信息分析处理

返回顶部

以上步骤有关解析参见本人博客:【数据清洗实战 — Deep Dive in the Space Race】数据清洗+可视化



任务一:绘制各公司总成本不为0的横向条形图

data_info = data.dtypes
# 1.提取有效列
data_use = data[['公司','任务成本']]
sum = data_use.groupby('公司').sum().sort_values(by='任务成本',ascending=True).reset_index()
sum_final = sum[sum['任务成本']!=0]
list = sum_final.values.tolist()

app = Flask(__name__)
@app.route('/')
def index():
    sheets_list = list
    return render_template("太空_总成本.html",sheets = sheets_list)
if __name__ == '__main__':
    app.run(debug=True)
<!DOCTYPE html>
<html lang="en" style="height: 100%">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body style="height: 100%">
<div id="container" style="height: 100%"></div>
<script type="text/javascript" src="../static/echarts%20(1).js"></script>
<script type="text/javascript">

    var dom = document.getElementById("container");
    var myecharts = echarts.init(dom);

    var data1 = [{% for item in sheets %}'{{ item.0 }}',{% endfor %}];
    var data2 = [{% for item in sheets %}{{ item.1 }},{% endfor %}];

    var option = null;
    option = {
        title: {
            text: '各公司总成本不为0的横向条形排名图'
        },
        tooltip: {
            show: true,
            trigger: 'axis'
        },
        legend:{
            show:true,
            right:'4%'
        },
        gird: {
            top: '10%',
            right: '4%',
            left: '4%',
            bottom: '0%',
            containLabel:true
        },
        xAxis: {
            type: 'value'

        },
        yAxis: {
            type:'category',
            data: data1
        },
        series:{
            name:'总成本',
            type:'bar',
            data:data2
        }
    }
    if (option && typeof option=='object'){
        myecharts.setOption(option);
    }
</script>
</body>
</html>

【Python+Flask+Echarts】可视化练习题 --- 航空火箭信息分析处理


任务二:绘制每年\每月的发射数量

# -*- coding: utf-8
#  @Time    : 2020/12/7 16:11
#  @Author  : ZYX
#  @File    : 太空任务_绘制每年每月火箭发射数量柱状图.py
# @software: PyCharm
import pandas as pd
from flask import Flask,render_template
# 数据集读取
df = pd.read_csv("data/Space/Space_data_prepared.csv",index_col=0,encoding='utf-8')
# 提取相关信息
# 需要再次转换数据类型为时间格式
print(df['发射基准和时间'].dtype)
df['发射基准和时间'] = pd.to_datetime(df['发射基准和时间'])
print(df['发射基准和时间'].dtype)
#   提取时间 --- 年
df['Year'] = df['发射基准和时间'].apply(lambda datetime:datetime.year)
#   提取时间 --- 月
df['Month'] = df['发射基准和时间'].apply(lambda datetime:datetime.month)
# 提取
data_use = df[['Year','Month']]
year_count = data_use.groupby('Year').count().reset_index()
month_count = data_use.groupby(['Month']).agg(count=('Month','count')).reset_index()
list_year = year_count.values.tolist()
list_month = month_count.values.tolist()
list = [list_month,list_year]

app = Flask(__name__)
@app.route('/')
def index():
    sheet_list = list
    return render_template("太空_发射数量.html",sheets=sheet_list)
if __name__ == '__main__':
    app.run(debug=True)
<!DOCTYPE html>
<html lang="en" style="height: 100%">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body style="height: 100%">
<div id="container1" style="height: 50%;width: 50%"></div>
<div id="container2" style="height: 50%;width: 50%"></div>
<script type="text/javascript" src="../static/echarts%20(1).js">
</script>
<script type="text/javascript">
    var  dom = document.getElementById("container1");
    var myecharts = echarts.init(dom);
    var data1 = [{% for item in sheets.0%}'{{ item.0 }}',{% endfor %}];
    var data2 = [{% for item in sheets.0%}{{ item.1}},{% endfor %}];
    var option = null;
    option = {
        title:{
            text:'每个月发射火箭总数'
        },
        tooltip:{
            show:true,
            trigger:'axis',
            axisPointer: {
                style:"shadow"
            }
        },
        legend:{
            show:true,
            right:'4%',
            top:'5%'
        },
        xAxis:{
            type:'category',
            data:data1,
            containLabel:true
        },
        yAxis:{
            type:'value',
        },
        series:{
            name:'火箭发射总数',
            type:'bar',
            data:data2
        }
    }
    if (option && typeof option=='object'){
        myecharts.setOption(option);
    }
</script>
<script type="text/javascript">
    var  dom = document.getElementById("container2");
    var myecharts = echarts.init(dom);
    var data1 = [{% for item in sheets.1%}'{{ item.0 }}',{% endfor %}];
    var data2 = [{% for item in sheets.1%}{{ item.1}},{% endfor %}];
    var option = null;
    option = {
        title:{
            text:'每年发射火箭总数'
        },
        tooltip:{
            show:true,
            trigger:'axis',
            axisPointer: {
                style:"shadow"
            }
        },
        legend:{
            show:true,
            right:'4%',
            top:'5%'
        },
        xAxis:{
            type:'category',
            data:data1,
            containLabel:true
        },
        yAxis:{
            type:'value',
        },
        series:{
            name:'火箭发射总数',
            type:'bar',
            data:data2
        }
    }
    if (option && typeof option=='object'){
        myecharts.setOption(option);
    }
</script>
</body>
</html>

【Python+Flask+Echarts】可视化练习题 --- 航空火箭信息分析处理

返回顶部


任务三:绘制任务状态统计图 — 统计各国家火箭发射成功状态的排名图

# -*- coding: utf-8
#  @Time    : 2020/12/8 9:02
#  @Author  : ZYX
#  @File    : 太空任务_任务状态统计图.py
# @software: PyCharm
import pandas  as pd
from flask import Flask,render_template

data = pd.read_csv('data/Space/Space_data_prepared.csv',index_col=0)

# 提取任务状态为Success的记录
data_use = data[data['任务状态']=='Success']
# 提取国家、任务状态相关列
data_final = data_use[['国家','任务状态']].groupby('国家').agg(count=('任务状态','count')).sort_values('count').reset_index()
list = data_final.values.tolist()

# 可视化
app = Flask(__name__)
@app.route('/')
def index():
    sheets_list = list
    return render_template("太空_任务状态.html",sheets = sheets_list)
if __name__ == '__main__':
    app.run(debug=True)
<!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 src="../static/echarts%20(1).js" type="text/javascript"></script>
<script type="text/javascript">
    var dom = document.getElementById("container");
    var myecharts = echarts.init(dom);

    var data1 = [{% for item in sheets %}'{{ item.0 }}',{% endfor %}];
    var data2 = [{% for item in sheets %}{{ item.1 }},{% endfor %}];

    var option = null;
    option = {
        title: {
            text: '各国家火箭发射成功状态的排名图'
        },
        grid:{
          top:'5%',
          right:'4%',
          left:'4%',
          bottom:'3%',
          containLabel:true
        },
        tooltip: {
            show: true,
            trigger: 'axis',
            axisPointer: {
                type: 'shadow'
            }
        },
        legend:{
            show:true,
            right:'4%'
        },
        xAxis: {
            type: 'value'
        },
        yAxis: {
            type: 'category',
            data: data1
        },
        series: [
            {
                name: '火箭发射状态',
                type: 'bar',
                data: data2
            }
        ]
    }
    if (option&&typeof option=='object'){
        myecharts.setOption(option);
    }
</script>
</body>
</html>

【Python+Flask+Echarts】可视化练习题 --- 航空火箭信息分析处理

返回顶部


本文地址:https://blog.csdn.net/qq_45797116/article/details/110820317