绘制地图:图形化显示海地地震危机数据
2018-04-04 16:10
489 查看
再修改部分代码后,可执行代码如下:from mpl_toolkits.basemap import Basemap
from pandas import DataFrame,Series
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
def to_cat_list(catstr):
stripped = (x.strip() for x in catstr.split(','))
return [x for x in stripped if x]
def get_all_categories(cat_series):
cat_sets = (set(to_cat_list(x)) for x in cat_series)
return sorted(set.union(*cat_sets))
def get_english(cat):
code,names = cat.split('.')
if '|' in names:
names = names.split('|')[1]
return code,names.strip()
def get_code(seq):
return [x.split('.')[0] for x in seq if x]
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 m
data = pd.read_csv("D:\pythonAnalysis\Python for Data Analysis-1st-edition\pydata-book-1st-edition\ch08\Haiti.csv")
data = data[(data.LATITUDE > 18)&(data.LATITUDE < 20)&(data.LONGITUDE > -75)&(data.LONGITUDE < -70)&data.CATEGORY.notnull()]
all_cats = get_all_categories(data.CATEGORY)
english_mapping = dict(get_english(x) for x in all_cats)
# print(english_mapping)
all_codes = get_code(all_cats)
code_index = pd.Index(np.unique(all_codes))
dummy_frame = DataFrame(np.zeros((len(data),len(code_index))),index=data.index,columns=code_index)
for row,cat in zip(data.index,data.CATEGORY):
codes = get_code(to_cat_list(cat))
dummy_frame.ix[row,codes] = 1
# print(dummy_frame)
data = data.join(dummy_frame.add_prefix('category_')) #连接两个数据框,并先给dummy_frame的列索引加上前缀category_
fig, 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
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['category_%s'%code]==1]
x,y = m(cat_data.LONGITUDE.values,cat_data.LATITUDE.values)
m.plot(x,y,'k.',alpha=0.5)
ax.set_title('%s: %s' % (code, english_mapping[code]))
刚加载出来的数据,不要急着使用,查看一下有没有异常数据,这是很重要的,例如对于
使用data.describe()函数查看一下数据的数值型的数据的正常值,再和原数据比较,相差
太远的应该处理掉。
data = data[(data.LATITUDE > 18)&(data.LATITUDE < 20)&(data.LONGITUDE > -75)&(data.LONGITUDE < -70)&data.CATEGORY.notnull()]二:
这里还有一个重点就是 列表推导式[x
4000
for x in data]和生成器(x for x in data)
在处理大数据时最好使用生成器,他是一个一个处理数据,节约内存,两者用法差不多。 set转换为集合的形式,*cat_sets在python中表示将cat_sets的值所有作为参数传入使用set.union()联合所有重复的值,再使用sorted排序。
三:
a = np.unique(A) 对于一维数组或者列表,unique函数去除其中重复的元素,并按元素由大到小返回一个新的无元素重复的元组或者列表
np.zeros((4,5)) 创建4行5列的全0的DataFrame,行列索引可以根据原数据引用
join、merge的合理使用
from pandas import DataFrame,Series
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
def to_cat_list(catstr):
stripped = (x.strip() for x in catstr.split(','))
return [x for x in stripped if x]
def get_all_categories(cat_series):
cat_sets = (set(to_cat_list(x)) for x in cat_series)
return sorted(set.union(*cat_sets))
def get_english(cat):
code,names = cat.split('.')
if '|' in names:
names = names.split('|')[1]
return code,names.strip()
def get_code(seq):
return [x.split('.')[0] for x in seq if x]
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 m
data = pd.read_csv("D:\pythonAnalysis\Python for Data Analysis-1st-edition\pydata-book-1st-edition\ch08\Haiti.csv")
data = data[(data.LATITUDE > 18)&(data.LATITUDE < 20)&(data.LONGITUDE > -75)&(data.LONGITUDE < -70)&data.CATEGORY.notnull()]
all_cats = get_all_categories(data.CATEGORY)
english_mapping = dict(get_english(x) for x in all_cats)
# print(english_mapping)
all_codes = get_code(all_cats)
code_index = pd.Index(np.unique(all_codes))
dummy_frame = DataFrame(np.zeros((len(data),len(code_index))),index=data.index,columns=code_index)
for row,cat in zip(data.index,data.CATEGORY):
codes = get_code(to_cat_list(cat))
dummy_frame.ix[row,codes] = 1
# print(dummy_frame)
data = data.join(dummy_frame.add_prefix('category_')) #连接两个数据框,并先给dummy_frame的列索引加上前缀category_
fig, 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
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['category_%s'%code]==1]
x,y = m(cat_data.LONGITUDE.values,cat_data.LATITUDE.values)
m.plot(x,y,'k.',alpha=0.5)
ax.set_title('%s: %s' % (code, english_mapping[code]))
部分问题总结如下:
一:刚加载出来的数据,不要急着使用,查看一下有没有异常数据,这是很重要的,例如对于
使用data.describe()函数查看一下数据的数值型的数据的正常值,再和原数据比较,相差
太远的应该处理掉。
data = data[(data.LATITUDE > 18)&(data.LATITUDE < 20)&(data.LONGITUDE > -75)&(data.LONGITUDE < -70)&data.CATEGORY.notnull()]二:
这里还有一个重点就是 列表推导式[x
4000
for x in data]和生成器(x for x in data)
在处理大数据时最好使用生成器,他是一个一个处理数据,节约内存,两者用法差不多。 set转换为集合的形式,*cat_sets在python中表示将cat_sets的值所有作为参数传入使用set.union()联合所有重复的值,再使用sorted排序。
三:
a = np.unique(A) 对于一维数组或者列表,unique函数去除其中重复的元素,并按元素由大到小返回一个新的无元素重复的元组或者列表
np.zeros((4,5)) 创建4行5列的全0的DataFrame,行列索引可以根据原数据引用
join、merge的合理使用
相关文章推荐
- 2015-03-29-绘图和可视化(3)-绘制地图:图形化显示海地地震危机数据
- 绘制地图:图形化显示海地地震危机数据
- 第8章 图形化显示地震危机数据(海地)
- 用 Raphaël 绘制中国地图 + 显示数据
- 用 Raphaël 绘制中国地图 + 显示数据
- ArcGis For Silverlight API,地图显示Gis,绘制点,线,绘制图等(三)--绘制点、线、圆,显示提示信息
- ArcGis For Silverlight API,地图显示Gis,绘制点,线,绘制图等(三)--绘制点、线、圆,显示提示信息
- 【百度地图API】如何利用自己的数据制作社交地图?只显示可视区域内的标注
- 利用vmstat命令监控Linux资源使用并将数据通过图形化方式显示
- 天地图专题五:在天地图上绘制电子区域并保存数据
- 如何在iOS地图上高效的显示大量数据
- arcgis server 发布的mdb格式空间数据无法显示地图
- 一个显示地图数据,并实现简单浏览查询程序源码(SDK编写)
- [ios3-地图] 如何在iOS地图上高效的显示大量数据 [转]
- (Android)百度地图--只定位获取数据不显示地图
- ArcGis For Silverlight API,地图显示Gis,绘制点,线,绘制图等(三)--绘制点、线、圆,显示提示信息
- GPS模块数据放入谷歌地图显示,不准
- arcgis server 发布的mdb格式空间数据无法显示地图
- ArcGis For Silverlight API,地图显示Gis,绘制点,线,绘制图等(一)