第8章 图形化显示地震危机数据(海地)

import pandas as pd
import numpy as np
from pandas import Series,DataFrame
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap##################################数据处理#################################
data = pd.read_csv(r'E:\pydata-book-2nd-edition\pydata-book-2nd-edition\datasets\haiti\haiti.csv')
data.info()###可以看出CATEGORY列中有数据缺失需要处理
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3593 entries, 0 to 3592
Data columns (total 10 columns):
Serial            3593 non-null int64
INCIDENT TITLE    3593 non-null object
INCIDENT DATE     3593 non-null object
LOCATION          3592 non-null object
DESCRIPTION       3593 non-null object
CATEGORY          3587 non-null object
LATITUDE          3593 non-null float64
LONGITUDE         3593 non-null float64
APPROVED          3593 non-null object
VERIFIED          3593 non-null object
dtypes: float64(2), int64(1), object(7)
memory usage: 280.8+ KBdata.describe()####可以看出有异常地理位置
Out[16]: Serial     LATITUDE    LONGITUDE
count  3593.000000  3593.000000  3593.000000
mean   2080.277484    18.611495   -72.322680
std    1171.100360     0.738572     3.650776
min       4.000000    18.041313   -74.452757
25%    1074.000000    18.524070   -72.417500
50%    2163.000000    18.539269   -72.335000
75%    3088.000000    18.561820   -72.293570
max    4052.000000    50.226029   114.174287####对异常数据的处理
data = data[(data.LATITUDE > 18)&(data.LATITUDE < 20)&(data.LONGITUDE > -75)&(data.LONGITUDE < -70)&data.CATEGORY.notnull()]
data.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 3569 entries, 0 to 3592
Data columns (total 10 columns):
Serial            3569 non-null int64
INCIDENT TITLE    3569 non-null object
INCIDENT DATE     3569 non-null object
LOCATION          3568 non-null object
DESCRIPTION       3569 non-null object
CATEGORY          3569 non-null object
LATITUDE          3569 non-null float64
LONGITUDE         3569 non-null float64
APPROVED          3569 non-null object
VERIFIED          3569 non-null object
dtypes: float64(2), int64(1), object(7)
memory usage: 306.7+ KB###CATEGORY中的存储类型
#2. Urgences logistiques | Vital Lines, 2d. Refuge | Shelter needed, 2a. Penurie d'aliments | Food Shortage, ##对一个字符串提取出','分隔的每个元素
def to_cat_list(catstr):stripped = (x.strip() for x in catstr.split(','))return [x for x in stripped if x]###利用上一个函数对整个Series操作
def get_all_categories(cat_series):cat_sets = (set(to_cat_list(x)) for x in cat_series)return sorted(set.union(*cat_sets))#修剪出编码和后面的英文名称
#'2.Urgences logistiques | Vital Lines' →('2', 'Vital Lines')
def get_english(cat):code,names = cat.split('.')if '|' in names:names = names.split(' | ')[1]return code,names.strip()all_cats = get_all_categories(data.CATEGORY)###制作字典,将编码和英文名称对应
english_mapping = dict(get_english(x) for x in all_cats)
#english_mapping['2a']
#Out[25]: 'Food Shortage'
#english_mapping['6c']
#Out[26]: 'Earthquake and aftershocks'####抽取出所有的编码
def get_code(seq):return [x.split('.')[0] for x in seq if x]all_codes = get_code(all_cats)##所有编码组成的list###用抽取出的不同编码组成索引
code_index = pd.Index(np.unique(all_codes))
###建立一个空DataFrame,行索引与data一样,列索引是不同的编码
dummy_frame = DataFrame(np.zeros((len(data),len(code_index))),index = data.index,columns = code_index)
#dummy_frame.ix[:,:6].info()
#<class 'pandas.core.frame.DataFrame'>
#Int64Index: 3569 entries, 0 to 3592
#Data columns (total 6 columns):
#1     3569 non-null float64
#1a    3569 non-null float64
#1b    3569 non-null float64
#1c    3569 non-null float64
#1d    3569 non-null float64
#2     3569 non-null float64
#dtypes: float64(6)
#memory usage: 195.2 KB###对dummy_frame中每一行适当的值设为1
for row,cat in zip(data.index,data.CATEGORY):codes = get_code(to_cat_list(cat))dummy_frame.ix[row,codes] = 1
##dummy_frame与data连接,并在列名加前缀
data = data.join(dummy_frame.add_prefix('catagory_'))
#data.ix[:,10:15].info()
#<class 'pandas.core.frame.DataFrame'>
#Int64Index: 3569 entries, 0 to 3592
#Data columns (total 5 columns):
#catagory_1     3569 non-null float64
#catagory_1a    3569 non-null float64
#catagory_1b    3569 non-null float64
#catagory_1c    3569 non-null float64
#catagory_1d    3569 non-null float64
#dtypes: float64(5)
#memory usage: 327.3 KB##################################画图####################################绘制黑白海地地图
def basic_haiti_map(ax = None,lllat=17.25,urlat=20.25,lllon=-75,urlon=-71):m = Basemap(ax=ax,projection='stere',lon_0=(urlon+lllon)/2,lat_0=(urlat+lllat)/2,llcrnrlat=lllat,urcrnrlat=urlat,llcrnrlon=lllon,urcrnrlon=urlon,resolution='f')m.drawcoastlines()m.drawstates()m.drawcountries()return mfig,axes = plt.subplots(nrows=2,ncols=2,figsize=(12,10))
fig.subplots_adjust(hspace = 0.05,wspace = 0.05)to_plot=['2a','1','3c','7a']lllat = 17.25
urlat = 20.25
lllon = -75
urlon = -71###在每个subplot内画一张地图
for code,ax in zip(to_plot,axes.flat):m = basic_haiti_map(ax,lllat=lllat,urlat=urlat,lllon=lllon,urlon=urlon)cat_data = data[data['catagory_%s' % code] == 1]
###计算地图的投影坐标
######注意此处按书上运行不出来,需要先将Series格式转为arrayx,y = m(np.array(cat_data.LONGITUDE),np.array(cat_data.LATITUDE))
###在地图上画点m.plot(x,y,'k.',alpha=0.5)ax.set_title('%s: %s' % (code,english_mapping[code]))

############叠加道路信息画出反应太子港地区食物短缺的图
fig = plt.figure()###创建画布
ax = fig.add_subplot(1,1,1)####添加一个图
###设定合适的经纬度
lllat = 18.43;urlat = 18.69;lllon = -72.57;urlon = -72.08
####利用上面创建绘制海地地图的函数画出太子港地区黑白地图
m = basic_haiti_map(ax,lllat = lllat,urlat=urlat,lllon=lllon,urlon=urlon)
#######叠加道路数据
shapefile_path='E:\pydata-book-2nd-edition\pydata-book-2nd-edition\datasets\haiti\PortAuPrince_Roads\PortAuPrince_Roads'
#####注意这里的路径加上文件名但不加后缀
m.readshapefile(shapefile_path,'road')
code = '2a'
##读取出现食物短缺的条目
cat_data = data[data['catagory_%s' % code]==1]
####将条目中的经纬度映射到xy坐标
x,y = m(np.array(cat_data.LONGITUDE),np.array(cat_data.LATITUDE))
##画图并设置标题
m.plot(x,y,'k.',alpha = 0.5)
ax.set_title('%s reported in Port-au-Prince' % english_mapping[code])
##保存图片
plt.savefig(r'E:\pycode\data\food_shortage.png',dpi=400,bbox_inches = 'tight')

第8章 图形化显示地震危机数据(海地)相关推荐

  1. python数据分析二一:图形化显示海地地震危机数据

    知识点回顾 zip() >>>a = [1,2,3] >>> b = [4,5,6] >>> c = [4,5,6,7,8] >>&g ...

  2. 2015-03-29-绘图和可视化(3)-绘制地图:图形化显示海地地震危机数据

    --------------------------------------------------------------------------------------- -----(三)绘制地图 ...

  3. 数据分析练习Ⅱ----图形化显示海地地震危机数据

    Ushahidi是一家非盈利软件公司,人们可以通过短信向其提供有关自然灾害和地缘政治事件的信息.这些数据会被发布在他们的网站上以提供分析和图形化.本节,利用2010年海底地震及其余震期间搜集的数据. ...

  4. 绘制地图:图形化显示海地地震危机数据

    再修改部分代码后,可执行代码如下: from mpl_toolkits.basemap import Basemap from pandas import DataFrame,Series impor ...

  5. Basemap实战---图形化显示海地地震危机数据

    数据来源 https://github.com/wesm/pydata-book >>> import pandas as pd >>> from pandas i ...

  6. 《信息物理融合系统(CPS)设计、建模与仿真——基于 Ptolemy II 平台》——第2章 图形化建模 2.1开始...

    本节书摘来自华章出版社<信息物理融合系统(CPS)设计.建模与仿真--基于 Ptolemy II 平台>一书中的第2章,第2.1节,作者:[美]爱德华·阿什福德·李(Edward Ashf ...

  7. 【逆向工具】IDA使用5-( string、图形化与视图的切换、图形化显示反汇编地址、自动注释、标签使用)...

    分析petya病毒时新学会的技巧. IDA技巧1 : string 提取文件中的字符串内容,如果看到一些文件字符串可以定位到关键的函数中. view -> open subview -> ...

  8. jetson nano 远程登录及关闭图形化显示

    在nano上编译工程时总卡,最好用的解决方案就是远程登录并关闭图形化显示. 1.在另一台win上下载远程登录软件PuTTY,下载链接,提取码:ig0e 2.在nano上用ifconfig命令查看IP地 ...

  9. 图形化显示变量波形 代替串口你知道如何操作么?

    ///插播一条:我自己在今年年初录制了一套还比较系统的入门单片机教程,想要的同学找我拿就行了免費的,私信我就可以哦~点我头像黑色字体加我地球呺也能领取哦.最近比较闲,带做毕设,带学生参加省级或以上比赛 ...

最新文章

  1. 2021-2027全球与中国经颅磁刺激仪(TMS)市场现状及未来发展趋势
  2. 深入理解 Spring Boot Starters 原理
  3. python2.面向对象学生管理系统
  4. 我想站在巨人的肩上——记成都之行
  5. xxx is not mapped 错误 解决方案
  6. html评分图标,Bootstrap图标实现移动端的星星评分功能
  7. 图像的三次B样条插值原理与C++实现
  8. 阿里云香港服务器速度快吗?
  9. cpm,cpc,cps和cpa分别是什么意思
  10. 面试记录-蚂蚁金服-算法工程师(共四面)通过
  11. java导出帆软pdf,java后台把fineRepo图表导出pdf格式时发生错误!
  12. python制作简单网页_用python制作简单网页
  13. [网易2017实习生编程题] 魔力手环
  14. 基于simulink的AMT自动变速汽车换档智能控制
  15. c语言程序设计中常用语句,单片机C语言编程常用语句
  16. 【从0到1搭建LoRa物联网】2、终端设备开发方式
  17. 使用ERDAS对国产卫星影像进行控制点正射校正—以高分二号卫星(GF2)为例
  18. E - Selling Souvenirs(动态规划 + 贪心 + 思维(缩小时间复杂度和空间复杂度))
  19. 2021年中国私营工业企业数量及经营情况分析[图]
  20. 2005-04-21

热门文章

  1. Mat.at 函数使用
  2. 常见的作业调度和进程调度算法
  3. 秒杀系统面临哪些技术难题
  4. 【Keil】Keil Cx51 编译器中文用户手册介绍
  5. JAVA删除字符串固定下标的字串
  6. python安装AES库及使用
  7. matlab如何泰勒公式用求近似值_泰勒公式及其用典型例题.doc
  8. python编程输入数字输出月份英文_编程题:输入英文月份单词,输出对应月的数字形式。...
  9. IP Camera (IPC),CHIPUP
  10. audio设备--ASOC框架--PCM等接口分析