使用Python

时间:2015-05-10 22:14:06

标签: python pandas

我正在通过Pandas使用Python读取CSV文件并创建数据框。以下是显示每小时数据的打印声明的一部分:

      Location                Time         Count      Speed    Parameter1...
0         CCNY 2010-01-01 06:00:00             1      48.00    35.8
1         CCNY 2010-01-01 07:00:00             2      18.00    32.6
...        ...                 ...           ...        ...    ...
97775     PS19 2013-12-31 21:00:00           178       9.27    12.8
97776     PS19 2013-12-31 22:00:00           190       8.90    11.7

(时间是一列,同时包含日期和时间。)

这就是我需要做的事情:

  • 每日绘制速度与每个位置的各种参数(数据保存每小时信息)。我没有在上面的打印示例中显示各种参数,但它们保存在每行的其他列中。对于每个CCNY位置,有速度和其他4个参数。对于PS19位置,只有速度和另外一个参数。因此,对于1月份,将有31个CCNY用于速度与参数1的图表,31个用于CCNY用于速度与参数2的图表,31个用于CCNY用于速度与参数3的图表,以及31个用于CCNY用于速度与参数4的图表。对于PS19的另一个位置,与参数1相比,只有31个速度图。如果这令人困惑,请评论!

  • 接下来,对于每个图,我需要添加最佳拟合线并计算斜率和r平方值。

鉴于所有大输出,我想将所有绘图作为图像输出到文件夹,并将每个位置和天的斜率和r平方值输出为CSV。

我正在创建数据框,如下所示:

def parse_date(raw_date):
    return datetime.strptime(raw_date, '%Y-%m-%d %H:%M:%S')

df = pd.read_csv('part-00000', delimiter=',')
df['Time'] = df['Time'].map(parse_date)

这是我到目前为止的尝试,但它无法正常运行:

locations = { 'CCNY': ('Parameter1', 'Parameter2', 'Parameter3', 'Parameter4'),
             'PS19': ('Parameter1') }

for location in locations.keys():
    for i in xrange(0, len(locations[location])):  
        df.groupby(df['Time'].dt.day).plot(x='Average_Speed', y=locations[location][i], style = 'o', title=location+": "+locations[location][i]+" "+str(i))
        plt.savefig('plots/plot'+str(location)+str(locations[location][i])+'_'+str(i)+'.png') 

1 个答案:

答案 0 :(得分:0)

我解决了这个问题:

首先,需要循环遍历groupby创建的组,这就是为什么它只生成4个图:

for i, group in df.groupby(df['Time'].dt.date)

其次,要计算斜率和r值,可以使用SciPy:

from scipy.stats import linregress

并在循环中添加:

slope, intercept, r, p, stderr = linregress(group['Speed'], group[Parameter])