数据分析:基于Pandas的全球自然灾害分析与可视化

  • 问题描述
    • 处理流程
  • 数据预处理
    • 数据提取
    • 按主要类别与年份统计灾害数
    • 统计每类灾害影响的人数
    • 统计从1990到2021年的每类灾害造成的死亡人数
    • 统计每个洲由于灾害受影响人数与死亡人数与与经济损失并求出百分
  • 代码下载

问题描述

本次课程设计选题来源于对数据源为《1900-2021世界自然灾害统计》的数据进行分析,大概1.6w条数据,实现了各种分析,最后可视化展示。

数据下载:
链接: https://pan.baidu.com/s/15f3z_H6_ygGEBsZVakEtJA?pwd=g6ce 提取码: g6ce
–来自百度网盘超级会员v1的分享

处理流程

DataSet以excel文件形式储存,通过Jupyter Notebook 调用Pandas库来读取数据,把按照老师的分析对数据进行数据清洗,数据规约,数据探查,以及统计等工作,数据整理好后,把数据用Excel,PowerBi,PowerPoint进行数据可视化。

数据预处理

数据提取

excel中元数据为路径,通过观察,数据存在规则有序的噪声,通过excel的替换功能与正则表达式进行筛洗,消除噪声。 遍历所有数据到jupyter内存。

import pandas as pd
io = '/Users/hanze/Desktop/副本自然灾害数据库(1)(1).xlsx'
data = pd.read_excel(io)
data.head()

按主要类别与年份统计灾害数

建立一个空字典,首先把数据读进字典,年份作为key,发生的灾害名称作为value,然后利用dict.items()方法和两个for循环遍历外层字典与内层values,统计没年每种灾害发生的次数,然后把1900-2021的所有每年的发生的灾害求和,这样就得到了全部的结果,代码如下:

import csv
data1=dict()
f = open('feng.csv','w',encoding='utf-8')# 2. 基于文件对象构建 csv写入对象
csv_writer = csv.writer(f)
for i in data.values:keys = list(data1.keys())
#     print(keys,i[1],i[5])if i[1] in keys:data1[i[1]].append(i[6])
#         print(1)else:data1[i[1]]=[]data1[i[1]].append(i[6])
temp={}
temp2={}
a=[]
for i,v in data1.items():templist=[]for v1 in v:if v1 not in templist:templist.append(v1)for v2 in templist:if v2=='Storm':num = v.count(v2)print(v2,num ,i)csv_writer.writerow([i,num,v2])
#             a.append([i,num,v2])

统计每类灾害影响的人数

读取数据到jupyter 内存中,把数据读取进字典,key为年份。value为每类灾害影响人数,然后把相同的灾害影响人数相加求个,最后把每年灾害的影响人数放进一个数据。最后通过count函数统计1900-2021年的每类灾害的所有人数,代码如下:

data1=dict()
for i in data.values:keys = list(data1.keys())
#     print(keys,i[1],i[5])if i[1] in keys:data1[i[1]].append(i[6])
#         print(1)else:data1[i[1]]=[]data1[i[1]].append(i[6])
temp={}
a=[]
temp2={}
for i,v in data1.items():templist=[]for v1 in v:if v1 not in templist:templist.append(v1)for v2 in templist:num = v.count(v2)
#         print(v2,num ,i)a.append([v2,num])temp={}
for i in a:keys = list(temp.keys())if i[0] not in keys:temp[i[0]]=int(i[1])elif i[0] in keys:temp[i[0]]+=int(i[1])
sum=int(0)
for i in temp.items():sum+=int(i[1])for i in temp.items():
#     print(i[1],sum)print(round(int(i[1])/int(sum),2),i[0],i[1])

统计从1990到2021年的每类灾害造成的死亡人数

这个分析比较简单,直接提取数据,把每类灾害的费用放在一个变量里面,然后循环累加求和就可以得到最终的死亡人数,代码如下:

dict4={}
for i in data.values:
#     print(i[6],i[35])keys=list(dict4.keys())if i[6] in keys and pd.isnull(i[34]) is False:dict4[i[6]]+=int(i[34])
#         print(1)elif i[6] not in keys and pd.isnull(i[34]) is False:dict4[i[6]]=int(i[34])
#         print(2)
#     else:
#         continue
print(dict4)

统计每个洲由于灾害受影响人数与死亡人数与与经济损失并求出百分

首先利用for循环提取出每年的受影响人数,死亡人数,经济损失与属于那个洲,把上一步骤的ouput作为第二个step的input然后再次遍历提取,利用if筛选出每个洲的数据,最后得到每个洲总的数据,然后汇总求和,代码如下:

dict8={}
for i in data.values:keys=list(dict7.keys())if i[13] in keys and pd.isnull(i[44]) is False and pd.isnull(i[34]) is False and pd.isnull(i[38]) is False:dict7[i[13]].append([i[5],i[34],i[38],i[44]])elif i[13] not in keys and pd.isnull(i[44]) is False and pd.isnull(i[34]) is False and pd.isnull(i[38]) is False:dict7[i[13]]=[[i[5],i[34],i[38],i[44]]]#     print(i[10],i[13],i[34],i[38],i[44])
# print(dict7)
a=[]
for i in dict7.items():if i[0] =='Africa':death=0affect=0economic=0for v in i[1]:
#             print(vif v[0]=='Geophysical':death+=v[1]affect+=v[2]economic+=v[3]a.append([death,affect,economic])if i[0] =='Americas':death=0affect=0economic=0for v in i[1]:
#             print(v[0])if v[0]=='Geophysical':death+=v[1]affect+=v[2]economic+=v[3]a.append([death,affect,economic])
#     print(death,affect,economic)if i[0] =='Asia':death=0affect=0economic=0for v in i[1]:#             print(v)if v[0]=='Geophysical':death+=v[1]affect+=v[2]economic+=v[3]
#     print(death,affect,economic)a.append([death,affect,economic])if i[0] =='Oceania':death=0affect=0economic=0for v in i[1]:  if v[0]=='Geophysical':death+=v[1]affect+=v[2]economic+=v[3]a.append([death,affect,economic])if i[0] =='Europe':death=0affect=0economic=0for v in i[1]:#             print(v)if v[0]=='Geophysical':death+=v[1]affect+=v[2]economic+=v[3]a.append([death,affect,economic])
# #     print(death,affect,economic)
sum1=int(0)
sum2=0
sum3=0
for i in a:print(i)
#     i[0]+=sum1
#     i[1]+=sum2
#     i[2]+=sum3
# print(sum1,sum2,sum3)
# for i in a:
#     print(i[0]/sum1)
#     print(i[1]/sum2)
#     print(i[2]/sum3)

代码下载

链接: https://pan.baidu.com/s/1Qq0Smfl2lctkrUQcci65SA?pwd=hyu2 提取码: hyu2
–来自百度网盘超级会员v1的分享

可视化
链接: https://pan.baidu.com/s/1JApFuLmUcmSKtmpNc8P5xw?pwd=zqq5 提取码: zqq5
–来自百度网盘超级会员v1的分享

数据分析:基于Pandas的全球自然灾害分析与可视化相关推荐

  1. 数据分析毕业设计 大数据京东消费行为分析与可视化 - python 机器学习

    1 前言

  2. Python数据分析实战,,美国总统大选数据可视化分析[基于pandas]

    目录 前言 一.任务详情 二.数据集来源 三.实现过程 四.运行代码 前言 在学习Python数据分析的过程中,是离不开实战的. 今天跟大家带来数据分析可视化经典项目,美国总统大选数据可视化分析,希望 ...

  3. 基于python的智能文本分析 书_推荐一本Python数据分析必备工具书

    身处大数据领域,我们每天都不得不与各种各样的数据打交道,无论是围绕数据去进行计算还是分析,它们都分属大数据领域的一个细分领域.在数据分析领域,Python语言一直一枝独秀,本文作者在数据分析领域深耕多 ...

  4. Python数据分析:实时更新全国全球疫情分析

    实时更新全国全球疫情分析 简介 步骤流程 准备数据集(获取数据集) 国内数据集 国外数据集 国内分析 生成网页版 国外分析 生成网页版 后记 简介 运用到Python爬虫request库,Excel ...

  5. c#split方法拆分为数据_Dexplot:基于pandas,比matplotlib更简单的数据可视化和数据分析工具...

    Dexplot:建议准备学matplotlib和seaborn的数据可视化新手或者数据可视化爱好者食用 适用于长数据 比如网站用户留言的统计 特色是不用matplotlib 而用pandas导入数据( ...

  6. 利用Python进行数据分析(7) pandas基础: Series和DataFrame的简单介绍 一、pandas 是什么 pandas 是基于 NumPy 的一个 Python 数据分析包,主

    利用Python进行数据分析(7) pandas基础: Series和DataFrame的简单介绍 一.pandas 是什么 pandas 是基于 NumPy 的一个 Python 数据分析包,主要目 ...

  7. 网站数据分析:基于用户细分的比较分析

    从网站的用户层面,我们根据用户访问的行为特征将用户细分成各种类型,因为用户行为各异,行为统计指标各异,分析的角度各异,所以如果要对用户做细 分,可以从很多角度根据各种规则实现各种不同的分类,看到过有些 ...

  8. python朋友圈数据分析_基于Python的微信朋友圈数据可视化分析之地点

    前提 朋友圈的相关数据请参照上一篇文章<基于Python的微信朋友圈数据可视化分析之个性签名>获取,本篇文章默认需要的数据已经下载保存至本地的 csv 文件中了. 将好友的地点按照省份进行 ...

  9. 用python做成绩分析做表格_excel成绩表-懂Excel就能轻松入门Python数据分析包pandas(三):制作成绩条...

    转发本文并私信我"python",即可获得Python资料以及各种心得(持续更新的) 经常听别人说 Python 在数据领域有多厉害,结果学了很长时间,连数据处理都麻烦得要死.后来 ...

最新文章

  1. ArcGIS API for Silverlight 点沿着线流动
  2. java web 显示项目下的图片_[适合初中级Java程序员修炼手册从0搭建整个Web项目](一)...
  3. python入门代码示例-这可能是最好玩的python GUI入门实例!
  4. 太相信书的人,格局不会太大
  5. bzoj 1901: Zju2112 Dynamic Rankings
  6. 所以Apache基金会不受美国法律约束?
  7. Oracle BBED 工具介绍
  8. memcached搭建缓存系统
  9. Ubuntu 18.04 8T硬盘挂载
  10. 在虚拟机的ubuntu 中配置 tftp 服务器(2021-4-14)
  11. 海量数据处理 算法总结
  12. 计算机桌面任务栏为白色,电脑中锁定在任务栏的图标无法正常显示变成白色如何解决...
  13. 回归中的相关度和决定系数及应用
  14. java实现堆栈 打印英文字母表
  15. JavaScript 数组array 插入[ push() ] 与 删除[ splice() ]
  16. 2021年大庆高考成绩查询,2021年大庆高考状元是谁分数多少分,历年大庆高考状元名单...
  17. 这有一套完整的微信公众号代运营方案
  18. [PHP]进阶教程:将wav文件转换成图像文件并在页面中显示
  19. 一位4年的JAVA工程师的面试总结:面试应该先从注意整体的节奏,然后从这些地方下手(数据结构、算法、JVM、多线程、数据库)
  20. 王者荣耀扫码登录源码,游戏扫码登录源码

热门文章

  1. 计算机网络术语中rt是什么意思?今天就来给你解答
  2. java opengl 图片文字_如何通过opengl显示相机预览
  3. Matlab 基于IRLS的加权Cauchy稳健估计算法之二
  4. LED数码管段码生成
  5. SpringBoot初始化过程核心源码剖析
  6. chrome浏览器拦截广告_如何禁用Chrome的新广告拦截器(在某些网站或所有网站上)...
  7. 【逻辑与计算理论】λ演算、组合子逻辑的历史背景
  8. 论文笔记:Show, Control and Tell:A Framework for Generating Controllable and Grounded Captions
  9. cc2640软件用c语言开发,CC2640R2FTI-RTOS 拿到 TI CC2640R2F 开发板 第三件事就是使用 TI-RTOS 创建 一个任务 和 使用 信号量 超时来闪烁 LED灯...
  10. python tushare获取股票数据_python调用tushare获取沪股通、深股通成份股数据