我从本地地铁列表中下载了数据,我想分析该地区的不同市场趋势。我有工具来分析metro-list网站上的趋势,但我想更熟悉使用Pandas和matplotlib进行绘图。
目前,这就是我所拥有的。
train_20901 = pd.read_csv('C:/Users/Damanjit/Documents/marketTrends/data/area20901.csv')
train_20901.head()
#small snippet of the full data, to see full data see images.
Address - Zip Code Listing Date Listing Price
0 95242 10/15/2012 15000
1 95240 2/14/2011 67900
2 95240 12/18/2008 31900
3 95240 8/24/2011 22000
4 95240 7/15/2012 25000
#Need to create Days on Market for training data
train_20901['Listing Date'] = pd.to_datetime(train_20901['Listing Date'])
train_20901['Pending Date'] = pd.to_datetime(train_20901['Pending Date'])
train_20901['Selling Date'] = pd.to_datetime(train_20901['Selling Date'])
train_20901['Days on Market'] = train_20901['Pending Date'] - train_20901['Listing Date']
train_20901['Days on Market'] = (train_20901['Days on Market'] / np.timedelta64(1, 'D')).astype(int)
train_20901.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 6185 entries, 0 to 6184
Data columns (total 9 columns):
Address 6185 non-null object
Address - Zip Code 6185 non-null int64
Listing Date 6185 non-null datetime64[ns]
Listing Price 6185 non-null int64
Pending Date 6185 non-null datetime64[ns]
Price Per Sq Ft 6185 non-null float64
Selling Date 6185 non-null datetime64[ns]
Selling Price 6185 non-null int64
Days on Market 6185 non-null int32
dtypes: datetime64[ns](3), float64(1), int32(1), int64(3), object(1)
memory usage: 410.8+ KB
train_20901.groupby(train_20901['Address - Zip Code']).median()
Address - Zip Code Listing Price Price Per Sq Ft Selling Price Days on Market
95240 169900 122.820 168000 35.0
95242 267750 150.945 265000 35.5
95258 265000 148.620 258050 41.0
打开数据并准备
按邮政编码分组数据
我希望能够做的是使用上市日期来描绘上市价格的中位数随时间的变化情况。日期从2008年10月22日开始到2016年12月29日结束。我想收集日期,以便只显示日期和年份。例如,我想绘制12/09中三个不同邮政编码95242,95240和95258的上市价格中位数。因此,在12/09的时间段内,应该有三个不同的点。我希望在10月8日到12月16日期间的所有不同时段都这样做。图表总共应该有99个箱子。我感到困惑的是如何在DataFrame中构建我的数据以完成此任务并绘制它。我已经尝试过pandas.resample和pandas.pivot,但没有让它发挥作用。正确方向的任何小提示都将非常受欢迎。
我猜我的桌子应该在最后看起来像是:
Listing Date Zip Code Median Home Prices
10/08 95240 168000
10/08 95242 216500
10/08 95258 210000
11/08 95240 171400
11/08 95242 219000
11/08 95258 212100
...依此类推,每个邮政编码在特定时间段内都有自己的中位数价格。我可以使用字典为每个月和每年硬编码,并找到某种邮政编码的中位房价,但我觉得大熊猫应该有更简单的方法来处理大数据集。
修改
------------------------------------------------------------------------------
因此,当我使用resample时,我会为时间序列数据创建二进制文件,但我想单独获取不同的邮政编码。我重拍时有这个
train_20901.resample('M', on = 'Selling Date').median()
Selling Date Zip Code Days on Market Listing Price Price Per Sq Ft Selling Price
2008-10-31 95240 21.0 160500 122.575 150000
2008-11-30 95240 36.0 179400 136.710 180000
2008-12-31 95240 32.0 165400 126.665 165025
2009-01-31 95240 37.5 165200 122.075 165000
2009-02-28 95240 52.0 174700 116.925 172500
2009-03-31 95240 48.5 129900 99.300 124950
2009-04-30 95240 35.5 164950 114.900 163250
2009-05-31 95240 21.0 159000 122.860 165000
2009-06-30 95240 36.0 134900 110.470 126000
2009-07-31 95240 14.0 174900 121.800 177500
我是否使用groupby函数,但如果是这样,我如何将索引保留为时间序列,但获取不同的邮政编码,而不是中位数?
解决
通过这样做我弄清楚了。
resampled = train_20901.set_index('Selling Date').groupby('Address - Zip Code').resample('M').median()
这正是我想要的,现在我只需绘制。
答案 0 :(得分:0)
如上所示,这是通过以下方式解决的:
resampled = train_20901.set_index('Selling Date').groupby('Address - Zip Code').resample('M').median()