重大地震,1965年至2016年
所有震级为5.5级以上的地震的日期,时间和地点
import numpy as np
import pandas as pd
import datetime
path='/Users/zhongyaode/Desktop/kaggle-data/'
df=pd.read_csv(path+'database.csv')
df.head()
指标一:平均每年发生多少次;
指标二:年均的级数,;
指标三:级数大于平均级数的总次数;
指标五:地震趋势;
把Date转换成日期格式
magnitude-地震级数;Depth-地震深度;Magnitude Typ-地震类型
df['Date']=pd.to_datetime(df['Date'])
df.iloc[0,0]
Timestamp('1965-01-02 00:00:00')
start_date=df.iloc[0,0]
end_date=df.iloc[-1,0]
print start_date
1965-01-02 00:00:00
print end_date
2016-12-30 00:00:00
delta=(end_date-start_date)/np.timedelta64(1,'D')
#delta=(endTime-startTime)/np.timedelta64(1,'D')
year=delta/365
delta
18990.0
year
52.027397260273972
count=len(df['Time'])
count
23412
#平均每年发生多少次
year_cishu=count/year
year_cishu
449.99368088467617
#这里可以看出每年平均发生450次地震
print df['Magnitude'].sum()
137721.81
total=0
for x in df['Magnitude']:
total=total+x
print total
137721.81
#平均每次的地震级数
pingjunjishu=total/count
pingjunjishu
5.8825307534600029
#可以看出每年平均发生500次,每次地震的平均级数是5.88级
cishu=0
for x in df['Magnitude']:
if x >pingjunjishu:
x=1
cishu+=1
print cishu
9304
dayu7=0
for x in df['Magnitude']:
if x >7:
x=1
dayu7+=1
print dayu7
570
dayu8=0
for x in df['Magnitude']:
if x >8:
x=1
dayu8+=1
print dayu8
27
dayu9=0
for x in df['Magnitude']:
if x >9:
x=1
dayu9+=1
print dayu9
2
#有9304的地震大于平均级数
#有570次大于7级
#27次大于8级
#两次大于9级
#画级数的直方图,动态分布图,
import matplotlib.pyplot as plt
from scipy import stats
size_data=df['Magnitude']
size_data.shape
(23412,)
fig=plt.figure()
x=df['Magnitude']
ax=fig.add_subplot(111)
numBins=20
ax.hist(x,numBins,color='red',alpha=0.8,rwidth=0.9)
plt.title(u'jishusize')
plt.show()
#级数的动态分布
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
%config InlineBackend.figure_format='retina'
def normfun(x,mu,sigma):
pdf=np.exp(-((x-mu)**2)/(2*sigma**2))/(sigma*np.sqrt(2*np.pi))
return pdf
mean=df['Magnitude'].mean()
std=df['Magnitude'].std()
x=np.arange(3,10,1)
y=normfun(x,mean,std)
plt.plot(x,y)
plt.hist(df['Magnitude'],bins=10,rwidth=0.9,normed=True)
plt.title('IQ distribution')
plt.xlabel('Porbability')
plt.show()
def trendF(dataframe):
trend=dataframe.loc[:,['Date','Magnitude']]
trend['date']=pd.to_datetime(trend['Date'])
trend=trend.set_index('Date')
#按周分割并计算周消费总和
s=trend['Magnitude'].resample('Y').sum()
trendNew=pd.Series.to_frame(s)
#index format 将年月日改为年周
trendNew.index=trendNew.index.format(formatter=lambda x:x.strftime('%y'))
print (df1)
trendNew.plot()
#自变量是纬度,因变量为地震级数的散点图(气泡的大小可以弄个变量哦);
#简单的数据预处理和分析,下次继续改进哈
plt.scatter(df['Latitude'],df['Magnitude'])
<matplotlib.collections.PathCollection at 0x11209a450>
#地震与时间的趋势图
dny_ts=df.ix[['Magnitude'],'Date'].T
pl.plot(b,c)
[<matplotlib.lines.Line2D at 0x117eb0a90>]
%matplotlib inline
import matplotlib.pyplot as plt