您的位置:首页 > 其它

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

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的合理使用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: