python实现⽓象数据分析实验报告_Python⽓象数据分析import matplotlib.dates as mdates
气象python零基础入门教程from dateutil import parser
# 把⽇期数据转换成 datetime 的格式
# 把⽇期从 string 类型转化为标准的 datetime 类型
day_milano = [parser.parse(x) for x in x1] #x是string
# 设定时间的格式
hours = mdates.DateFormatter('%H:%M')
# 设定X轴显⽰的格式
ax.xaxis.set_major_formatter(hours)
⼀个画图过程:
# 读取⽶兰的城市⽓象数据
df_milano = pd.read_csv('milano_270615.csv')
# 取出我们要分析的温度和⽇期数据
y1 = df_milano['temp']
x1 = df_milano['day']
# 把⽇期数据转换成 datetime 的格式
day_milano = [parser.parse(x) for x in x1]
# 调⽤ subplot 函数, fig 是图像对象,ax 是坐标轴对象
fig, ax = plt.subplots()
# 调整x轴坐标刻度,使其旋转70度,⽅便查看
# 设定时间的格式
hours = mdates.DateFormatter('%H:%M')
# 设定X轴显⽰的格式
ax.xaxis.set_major_formatter(hours)
# 画出图像,day_milano是X轴数据,y1是Y轴数据,‘r’代表的是'red' 红⾊
ax.plot(day_milano ,y1, 'r')
# 显⽰图像
fig
from sklearn.svm import SVR
# 我们调⽤SVR函数,在参数中规定了使⽤线性的拟合函数
# 并且把 C 设为1000来尽量拟合数据(因为不需要精确预测不⽤担⼼过拟合)
svr_lin1 = SVR(kernel='linear', C=1e3)
svr_lin2 = SVR(kernel='linear', C=1e3)
# 加⼊数据,进⾏拟合(这⼀步可能会跑很久,⼤概10多分钟,休息⼀下:) )
svr_lin1.fit(dist1, temp_max1)
svr_lin2.fit(dist2, temp_max2)android游戏开发从入门到精通 pdf
xp1 = np.arange(10,100,10).reshape((9,1))
xp2 = np.arange(50,400,50).reshape((7,1))
yp1 = svr_lin1.predict(xp1)
yp2 = svr_lin2.predict(xp2)
# 限制了 x 轴的取值范围
ax.set_xlim(0,400)
# 画出图像
ax.plot(xp1, yp1, c='b', label='Strong sea effect')
ax.plot(xp2, yp2, c='g', label='Light sea effect')matlab解方程组步骤
fig
print f_ #斜率
print svr_lin1.intercept_ # 截距
print f_
print svr_lin2.intercept_
这⾥ np.arange(10,100,10) 会返回 [10, 20, 30,..., 90],如果把列表看成是⼀个矩阵,那么这个矩阵是 1x9 的。这⾥ reshape((9,1))函数就会把该列表变为 9x1 的, [[10], [20], ..., [90]]。这么做的原因是因为 predict() 函数的只能接受⼀个 Nx1 的列表,返回⼀个 1xN 的列表。
再学习⼀下numpy和pandas的数据结构。
from scipy.optimize import fsolve #求解⽅程
# 定义了第⼀条拟合直线
def line1(x):
a1 = f_[0][0]
b1 = svr_lin1.intercept_[0]
return a1*x + b1
# 定义了第⼆条拟合直线
def line2(x):
a2 = f_[0][0]
framework笔记本b2 = svr_lin2.intercept_[0]
return a2*x + b2
# 定义了到两条直线的交点的 x 坐标的函数
def findIntersection(fun1,fun2,x0):
return fsolve(lambda x : fun1(x) - fun2(x),x0)二进制负数原码反码补码
result = findIntersection(line1,line2,0.0)
print "[x,y] = [ %d , %d ]" % (result,line1(result))
# x = [0,10,20, ..., 300]
x = np.linspace(0,300,31)
plt.plot(x,line1(x),x,line2(x),result,line1(result),'ro')
风向频率玫瑰图
def showRoseWind(values,city_name,max_value):
N = 8
# theta = [pi*1/4, pi*2/4, pi*3/4, ..., pi*2]
theta = np.arange(0.,2 * np.pi, 2 * np.pi / N)
radii = np.array(values)
# 绘制极区图的坐标系
plt.axes([0.025, 0.025, 0.95, 0.95], polar=True)
# 列表中包含的是每⼀个扇区的 rgb 值,x越⼤,对应的color越接近蓝⾊colors = [(1-x/max_value, 1-x/max_value, 0.75) for x in radii]
# 画出每个扇区
plt.bar(theta, radii, width=(2*np.pi/N), bottom=0.0, color=colors)
# 设置极区图的标题
plt.title(city_name, x=0.2, fontsize=20)
#调⽤
hist, bin = np.histogram(df_ferrara['wind_deg'],8,[0,360])
print hist
showRoseWind(hist,'Ferrara', max(hist))
计算风速均值的分布情况
def RoseWind_Speed(df_city):
# degs = [45, 90, ..., 360]
degs = np.arange(45,361,45)
tmp = []
for deg in degs:
# 获取 wind_deg 在指定范围的风速平均值数据
tmp.append(df_city[(df_city['wind_deg']>(deg-46)) & (df_city['wind_deg'] ['wind_speed'].mean())
return np.array(tmp)
#调⽤
html网页表格制作showRoseWind(RoseWind_Speed(df_ravenna),'Ravenna',max(hist))

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。