2016-03-30 15 views
1

Webページ(http://owww.met.hu/eghajlat/eghajlati_adatsorok/bp/Navig/202_EN.htm)からの100年間のデータの各月の標準偏差を分析するためにpyhonコードを書きたいと思います。私が書いた標準偏差を計算し、Python 2.7を使用してカーブフィットをプロットする

datum m_ta m_tax  m_taxd m_tan  m_tand 
------- ----- ----- ---------- ----- ---------- 
1901-01 -4.7 5.0 1901-01-23 -12.2 1901-01-10 
1901-02 -2.1 3.5 1901-02-06 -7.9 1901-02-15 
1901-03 5.8 13.5 1901-03-20 0.6 1901-03-01 
1901-04 11.6 18.2 1901-04-10 7.4 1901-04-23 
1901-05 16.8 22.5 1901-05-31 12.2 1901-05-05 
1901-06 21.0 24.8 1901-06-03 14.6 1901-06-17 
1901-07 22.4 27.4 1901-07-30 16.9 1901-07-04 
1901-08 20.7 25.9 1901-08-01 14.7 1901-08-29 
.... 

標準偏差コードは、私がデータ自体にm_taの湾曲フィットをプロットしたい。ここ

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) 

です。誰かが私にそれを描く方法を教えてください。ありがとう!

答えて

1

感謝。

ものが得られたら、あなたは月に抽出し、グループ化のためにそれを使用することができますあまりにも多くのデータが1つのチャートに表示することがありますので

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()} 

ここでは、毎月の結果を分離して見ることができます。例えば、1月です。

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() 

enter image description here

+0

@Alexander ....ありがとうございます。ここでは、すべてのm_ta、m_tax、m_tanについてプロットしましたか? – Userabc

+0

いいえ、これはちょうど 'm_ta'です。 'm_tax'と' m_tan'はそれぞれ与えられた月の最大値と最小値です。 'm_ta':月平均気温、' m_tax':月の日最高気温、 'm_tan':月の一日の最低平均気温 – Alexander

+0

@アレクサンダー...うわー歓声 – Userabc

2

普及しているプロットライブラリはmatplotlibであり、pandasは便利なインターフェイスを持っています。線のプロットを作成するには、単にdf.column_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では絵です:dfとしてデータをロードする方法を提供するための@Yakymへ

enter image description here

+0

感謝。私はstdのグラフを理解していますが、依然としてカーブフィッティングに固執しています。 – Userabc

+0

私は質問を誤解したと思う。とにかく、@アレキサンダーは問題をクローズしました。 –

関連する問題