Python 2.7 使用Python 2.7计算标准偏差并绘制曲线拟合
我想写一个pyhon代码来分析网页上100年数据中每个月的标准偏差() 我写的标准偏差代码是Python 2.7 使用Python 2.7计算标准偏差并绘制曲线拟合,python-2.7,pandas,Python 2.7,Pandas,我想写一个pyhon代码来分析网页上100年数据中每个月的标准偏差() 我写的标准偏差代码是 def sd(x): l = pd.DataFrame() for e in range(1, 13): r = x[x.index.str.contains("-" + str(e).zfill(2))] l = l.append(r.std().to_frame().transpose(), ignore_index=True)
def sd(x):
l = pd.DataFrame()
for e in range(1, 13):
r = x[x.index.str.contains("-" + str(e).zfill(2))]
l = l.append(r.std().to_frame().transpose(), ignore_index=True)
return l
standard = sd(df)
这里我想绘制
m_ta
与数据本身的曲线拟合。有人能帮我怎么画吗。谢谢 一个流行的绘图库是matplotlib
,pandas
有一个方便的界面。要绘制线条图,只需调用df.column\u name.plot()
无论如何,希望这有助于:
import requests
from lxml import html
# GET THE DATA
# body > div > pre > font
tree = html.fromstring(requests.get('http://owww.met.hu/eghajlat/eghajlati_adatsorok/bp/Navig/202_EN.htm').text)
lines = [l.text.split() for l in tree.xpath('//body/div/pre/font')]
# IMPORT DATA INTO PANDAS
import pandas as pd
import numpy as np
df = pd.DataFrame(lines[2:], columns = lines[0]).convert_objects(convert_numeric=True)
df['datum'] = pd.to_datetime(df.datum, format='%Y-%m')
df = df.set_index('datum')
print 'Standard deviation of m_ta: %f' % df.m_ta.std()
# PLOT
from matplotlib import pyplot as plt
df.m_ta.plot()
plt.show()
std为7.962143,图片如下:
感谢@Yakym提供了将数据加载为
df
的方法
获得后,您可以提取月份并将其用于分组:
df['month'] = df.index.month
df['monthly_mean'] = df.groupby('month').m_ta.transform('mean')
df['monthly_std'] = df.groupby('month').m_ta.transform('std')
由于在一个图表中查看的数据太多,您可能希望将每个月的数据视为一个单独的数据框。我用字典理解来做这件事
dfs = {m: df.loc[df.month == m, :] for m in df.month.unique()}
现在,您可以单独查看每个月的结果。例如,这里是一月
n = 1
dfs[n].m_ta.plot(title='Month {0}'.format(n));
dfs[n].monthly_mean.plot();
(dfs[n].monthly_mean + dfs[n].monthly_std).plot();
(dfs[n].monthly_mean - dfs[n].monthly_std).plot()
谢谢。我理解std的图表,但我仍然坚持曲线拟合。我想我误解了这个问题。无论如何,@Alexander已经结束了这个问题。@Alexander……非常感谢你。在这里,你为所有的木塔、木塔税和木塔画了图吗?不,这只是
m木塔
。似乎m_tax
和m_tan
可能分别是给定月份的最大值和最小值m_ta
:月平均温度,m_tax
:该月的日最高平均温度,m_tan
:该月的日最低平均温度
n = 1
dfs[n].m_ta.plot(title='Month {0}'.format(n));
dfs[n].monthly_mean.plot();
(dfs[n].monthly_mean + dfs[n].monthly_std).plot();
(dfs[n].monthly_mean - dfs[n].monthly_std).plot()