我正在通过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')
答案 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])