UK House Price Analysis: Part 3







Part 3: Connecting House Sales In the Same Year

Instead of grouping all the sales made of the same house in the same year, we can analyse the total number of time the same house was sold in the same year.

To do this, we return to our original data, inner join each year to itself, remove any rows where the second date of transfer is before the first then remove any duplicates of the first date of transfer.

This returns us with a table that has each sale of the same house in order, pairing consecutive sales together.

In [52]:
data.head()
Out[52]:
ID Price Date of Transfer Post Code Property Type Old/New Duration Address 1 Address 2 Address 3 Town/City District Borough Region PPDCategoryType RecordStatus Year AdjustedPrice LondonCheck
0 {5BBE9CB3-6332-4EB0-9CD3-8737CEA4A65A} 42000 1995-12-21 NE4 9DN S N F 8 NaN MATFEN PLACE FENHAM NEWCASTLE UPON TYNE NEWCASTLE UPON TYNE TYNE AND WEAR A A 1995 76860.0 Rest of UK
1 {20E2441A-0F16-49AB-97D4-8737E62A5D93} 95000 1995-03-03 RM16 4UR S N F 30 NaN HEATH ROAD GRAYS GRAYS THURROCK THURROCK A A 1995 173850.0 Rest of UK
2 {D893EE64-4464-44B5-B01B-8E62403ED83C} 74950 1995-10-03 CW10 9ES D Y F 15 NaN SHROPSHIRE CLOSE MIDDLEWICH MIDDLEWICH CONGLETON CHESHIRE A A 1995 137158.5 Rest of UK
3 {F9F753A8-E56A-4ECC-9927-8E626A471A92} 43500 1995-11-14 TS23 3LA S N F 19 NaN SLEDMERE CLOSE BILLINGHAM BILLINGHAM STOCKTON-ON-TEES STOCKTON-ON-TEES A A 1995 79605.0 Rest of UK
4 {E166398A-A19E-470E-BB5A-83B4C254CF6D} 63000 1995-09-08 CA25 5QH S N F 8 NaN CROSSINGS CLOSE CLEATOR MOOR CLEATOR MOOR COPELAND CUMBRIA A A 1995 115290.0 Rest of UK
In [53]:
# Seperate each year into its own table

data1995_2 = data.loc[data['Year']==1995]
data1996_2 = data.loc[data['Year']==1996]
data1997_2 = data.loc[data['Year']==1997]
data1998_2 = data.loc[data['Year']==1998]
data1999_2 = data.loc[data['Year']==1999]
data2000_2 = data.loc[data['Year']==2000]
data2001_2 = data.loc[data['Year']==2001]
data2002_2 = data.loc[data['Year']==2002]
data2003_2 = data.loc[data['Year']==2003]
data2004_2 = data.loc[data['Year']==2004]
data2005_2 = data.loc[data['Year']==2005]
data2006_2 = data.loc[data['Year']==2006]
data2007_2 = data.loc[data['Year']==2007]
data2008_2 = data.loc[data['Year']==2008]
data2009_2 = data.loc[data['Year']==2009]
data2010_2 = data.loc[data['Year']==2010]
data2011_2 = data.loc[data['Year']==2011]
data2012_2 = data.loc[data['Year']==2012]
data2013_2 = data.loc[data['Year']==2013]
data2014_2 = data.loc[data['Year']==2014]
data2015_2 = data.loc[data['Year']==2015]
data2016_2 = data.loc[data['Year']==2016]
data2017_2 = data.loc[data['Year']==2017]
In [98]:
dfs2 = [data1995_2, data1996_2,data1996_2,data1997_2,
        data1998_2,data1999_2,data2000_2,data2001_2,data2002_2,
        data2003_2,data2004_2,data2005_2,data2006_2,data2007_2,data2008_2,
        data2009_2,data2010_2,data2011_2,data2012_2,data2013_2,data2014_2,
        data2015_2,data2016_2,data2017_2]


d2={}
for j in range(0,23):
    d2["data_" +str(j+1995) +"_"+str(j+1995)] = dfs2[j].merge(dfs2[j],  on = ['Post Code', 'Address 1','Address 3','Property Type'], how = 'inner')
    d2["data_" +str(j+1995) +"_"+str(j+1995)] = d2["data_" +str(j+1995) +"_"+str(j+1995)].loc[(d2["data_" +str(j+1995) +"_"+str(j+1995)]['Date of Transfer_x'] < d2["data_" +str(j+1995) +"_"+str(j+1995)]['Date of Transfer_y'] ),]
    d2["data_" +str(j+1995) +"_"+str(j+1995)] = d2["data_" +str(j+1995) +"_"+str(j+1995)].sort_values(by = ['Date of Transfer_x'])
    d2["data_" +str(j+1995) +"_"+str(j+1995)] = d2["data_" +str(j+1995) +"_"+str(j+1995)].drop_duplicates(subset = ['Date of Transfer_x'])
    d2["data_" +str(j+1995) +"_"+str(j+1995)] = d2["data_" +str(j+1995) +"_"+str(j+1995)][['Year_x','AdjustedPrice_x', 'Date of Transfer_x', 'Year_y','AdjustedPrice_y','Date of Transfer_y', 'LondonCheck_x']]
In [99]:
(d2["data_2017_2017"])
Out[99]:
Year_x AdjustedPrice_x Date of Transfer_x Year_y AdjustedPrice_y Date of Transfer_y LondonCheck_x
2546487 2016 173400.00 2016-01-01 2016 147900.00 2016-02-04 Rest of UK
348683 2016 151470.00 2016-01-02 2016 168300.00 2016-05-23 Rest of UK
2583128 2016 397800.00 2016-01-04 2016 457980.00 2016-12-21 GREATER LONDON
1638018 2016 52989.00 2016-01-05 2016 51571.20 2016-11-02 Rest of UK
2857251 2016 656880.00 2016-01-06 2016 534480.00 2016-01-14 GREATER LONDON
1984502 2016 255000.00 2016-01-07 2016 300900.00 2016-04-20 Rest of UK
2457006 2016 340680.00 2016-01-08 2016 334560.00 2016-02-04 GREATER LONDON
2444674 2016 367194.90 2016-01-09 2016 515100.00 2016-07-14 GREATER LONDON
749395 2016 18360.00 2016-01-10 2016 20145.00 2016-08-15 Rest of UK
1514973 2016 132594.90 2016-01-11 2016 114234.90 2016-02-05 Rest of UK
1526645 2016 124944.90 2016-01-12 2016 101994.90 2016-02-17 Rest of UK
2948156 2016 254949.00 2016-01-13 2016 316200.00 2016-02-05 Rest of UK
1515540 2016 132594.90 2016-01-14 2016 114234.90 2016-02-05 Rest of UK
2440610 2016 495669.00 2016-01-15 2016 708900.00 2016-05-12 GREATER LONDON
880047 2016 174420.00 2016-01-16 2016 191250.00 2016-02-03 Rest of UK
2765389 2016 173400.00 2016-01-17 2016 214200.00 2016-11-08 Rest of UK
1277447 2016 443694.90 2016-01-18 2016 453894.90 2016-01-29 GREATER LONDON
449586 2016 528360.00 2016-01-19 2016 357000.00 2016-02-19 GREATER LONDON
459768 2016 571837.50 2016-01-20 2016 520200.00 2016-02-05 GREATER LONDON
284694 2016 252399.00 2016-01-21 2016 510000.00 2016-08-05 GREATER LONDON
3214244 2016 102000.00 2016-01-22 2016 96900.00 2016-12-08 Rest of UK
3073451 2016 188700.00 2016-01-23 2016 109650.00 2016-10-05 Rest of UK
1278781 2016 285594.90 2016-01-25 2016 387594.90 2016-03-24 GREATER LONDON
615399 2016 802791.00 2016-01-26 2016 1437078.00 2016-04-22 GREATER LONDON
3287916 2016 304980.00 2016-01-27 2016 216240.00 2016-07-12 GREATER LONDON
1098797 2016 257244.00 2016-01-28 2016 554065.02 2016-02-18 GREATER LONDON
1185478 2016 59262.00 2016-01-29 2016 67314.90 2016-05-13 Rest of UK
2681360 2016 97914.90 2016-01-30 2016 146874.90 2016-02-15 Rest of UK
2935225 2016 188700.00 2016-01-31 2016 142800.00 2016-03-23 Rest of UK
2449593 2016 323850.00 2016-02-01 2016 306000.00 2016-02-26 GREATER LONDON
34041 2016 147339.00 2016-11-16 2016 155499.00 2016-11-17 Rest of UK
2668896 2016 443700.00 2016-11-17 2016 397009.50 2016-11-23 GREATER LONDON
1954586 2016 438600.00 2016-11-18 2016 302303.52 2016-11-30 GREATER LONDON
1320371 2016 609450.00 2016-11-21 2016 401370.00 2016-11-28 GREATER LONDON
932816 2016 188700.00 2016-11-22 2016 201960.00 2016-12-16 Rest of UK
2139546 2016 25500.00 2016-11-23 2016 25500.00 2016-11-25 Rest of UK
2668210 2016 498178.20 2016-11-24 2016 391817.70 2016-12-19 GREATER LONDON
1158413 2016 1198500.00 2016-11-25 2016 1354050.00 2016-12-20 GREATER LONDON
2414651 2016 200685.00 2016-11-27 2016 332469.00 2016-12-30 Rest of UK
2667289 2016 646231.20 2016-11-28 2016 720426.00 2016-11-30 GREATER LONDON
1938323 2016 331500.00 2016-11-29 2016 321300.00 2016-12-07 GREATER LONDON
2660765 2016 474300.00 2016-11-30 2016 387600.00 2016-12-02 Rest of UK
932911 2016 255000.00 2016-12-01 2016 204000.00 2016-12-06 Rest of UK
2772466 2016 688500.00 2016-12-02 2016 877200.00 2016-12-13 GREATER LONDON
2225795 2016 415650.00 2016-12-05 2016 415650.00 2016-12-19 GREATER LONDON
2146366 2016 25500.00 2016-12-06 2016 25500.00 2016-12-16 Rest of UK
2226428 2016 357000.00 2016-12-07 2016 438600.00 2016-12-20 GREATER LONDON
1960482 2016 1203600.00 2016-12-08 2016 670650.00 2016-12-20 GREATER LONDON
1565503 2016 273650.70 2016-12-09 2016 248880.00 2016-12-14 Rest of UK
3456922 2016 105315.00 2016-12-12 2016 162690.00 2016-12-14 GREATER LONDON
2085638 2016 349350.00 2016-12-13 2016 334764.00 2016-12-16 GREATER LONDON
1544593 2016 180238.08 2016-12-14 2016 261951.30 2016-12-21 Rest of UK
1548443 2016 272308.38 2016-12-15 2016 218454.42 2016-12-20 Rest of UK
1345488 2016 611994.90 2016-12-16 2016 459000.00 2016-12-19 GREATER LONDON
2403490 2016 1091400.00 2016-12-19 2016 887986.50 2016-12-23 GREATER LONDON
2877875 2016 1995681.00 2016-12-20 2016 1024029.00 2016-12-21 GREATER LONDON
1334638 2016 759818.40 2016-12-21 2016 993276.00 2016-12-23 GREATER LONDON
465307 2016 632400.00 2016-12-22 2016 663000.00 2016-12-28 GREATER LONDON
1998103 2016 136674.90 2016-12-23 2016 132594.90 2016-12-28 Rest of UK
1310938 2016 275400.00 2016-12-29 2016 307020.00 2016-12-30 GREATER LONDON

326 rows × 7 columns

In [103]:
HouseCountComparisonSameYear = pd.DataFrame([])
for j in range(1996,2018):
    #print(str(i) + "-" +str(j) +": " + str(len(d["data_"+str(i)+"_"+str(j)])))
    count = len(d2["data_"+str(j)+"_"+str(j)])
    HouseCountComparisonSameYear2 = pd.DataFrame([[j,j,count]])
    HouseCountComparisonSameYear = HouseCountComparisonSameYear.append(HouseCountComparisonSameYear2)

HouseCountComparisonSameYear.columns = ['Year1', 'Year2', 'Count']
In [105]:
HouseCountComparisonSameYear
Out[105]:
Year1 Year2 Count
0 1996 1996 340
0 1997 1997 340
0 1998 1998 346
0 1999 1999 347
0 2000 2000 348
0 2001 2001 349
0 2002 2002 349
0 2003 2003 351
0 2004 2004 353
0 2005 2005 358
0 2006 2006 356
0 2007 2007 356
0 2008 2008 353
0 2009 2009 338
0 2010 2010 315
0 2011 2011 311
0 2012 2012 299
0 2013 2013 300
0 2014 2014 311
0 2015 2015 320
0 2016 2016 327
0 2017 2017 326
In [107]:
HouseCountComparisonSameYearMatrix = HouseCountComparisonSameYear.pivot("Year1", "Year2")
HouseCountComparisonSameYearMatrix
Out[107]:
Count
Year2 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017
Year1
1996 340.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1997 NaN 340.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1998 NaN NaN 346.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1999 NaN NaN NaN 347.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2000 NaN NaN NaN NaN 348.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2001 NaN NaN NaN NaN NaN 349.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2002 NaN NaN NaN NaN NaN NaN 349.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2003 NaN NaN NaN NaN NaN NaN NaN 351.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2004 NaN NaN NaN NaN NaN NaN NaN NaN 353.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2005 NaN NaN NaN NaN NaN NaN NaN NaN NaN 358.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2006 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2007 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2008 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 353.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN
2009 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 338.0 NaN NaN NaN NaN NaN NaN NaN NaN
2010 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 315.0 NaN NaN NaN NaN NaN NaN NaN
2011 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 311.0 NaN NaN NaN NaN NaN NaN
2012 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 299.0 NaN NaN NaN NaN NaN
2013 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 300.0 NaN NaN NaN NaN
2014 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 311.0 NaN NaN NaN
2015 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 320.0 NaN NaN
2016 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 327.0 NaN
2017 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 326.0

22 rows × 22 columns

In [122]:
with sns.axes_style("white"):
    ax = sns.heatmap(HouseCountComparisonSameYearMatrix, linewidth=0.2, cmap = "BuPu")
ax.set_title('Number of times the same house was sold in the same year')
ax.set_ylabel('First Year')
ax.set_xlabel('Second Year')
plt.show()

Lastly we combine both comparison tables into one and create our final heat map

In [111]:
HouseCountComparisonSameALLYEARS = pd.concat([HouseCountComparisonSameYear,HouseCountComparison])
In [121]:
HouseCountComparisonSameALLYEARSMatrix = HouseCountComparisonSameALLYEARS.pivot("Year1", "Year2")
HouseCountComparisonSameALLYEARSMatrix
Out[121]:
Count
Year2 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017
Year1
1995 41411.0 59742.0 70056.0 81331.0 75023.0 81053.0 83171.0 72617.0 68735.0 58641.0 31323.0 30049.0 32854.0 31944.0 30721.0 35737.0 41852.0 40432.0 39510.0 38705.0
1996 340.0 55778.0 71386.0 92036.0 88154.0 97713.0 100047.0 86866.0 83032.0 70706.0 36892.0 36445.0 39939.0 38260.0 36780.0 43111.0 50163.0 48507.0 47024.0 45863.0
1997 NaN 340.0 64354.0 95593.0 100646.0 112797.0 117502.0 101954.0 96957.0 82096.0 42906.0 42022.0 45872.0 44137.0 42793.0 49669.0 58293.0 55985.0 54437.0 52990.0
1998 NaN NaN 346.0 71381.0 90138.0 109241.0 117177.0 102661.0 97799.0 82544.0 42351.0 41429.0 45152.0 43112.0 41648.0 48724.0 57188.0 54632.0 53533.0 52050.0
1999 NaN NaN NaN 347.0 77513.0 110513.0 129669.0 116165.0 112524.0 94211.0 48219.0 46636.0 52056.0 49159.0 46910.0 55079.0 64674.0 62143.0 60735.0 59063.0
2000 NaN NaN NaN NaN 348.0 81739.0 117606.0 114519.0 111228.0 93367.0 47798.0 45145.0 49780.0 47464.0 45384.0 52924.0 63254.0 60362.0 59075.0 57444.0
2001 NaN NaN NaN NaN NaN 349.0 97005.0 118047.0 121367.0 104986.0 53218.0 50551.0 55410.0 52310.0 49955.0 58681.0 69116.0 66838.0 65614.0 63586.0
2002 NaN NaN NaN NaN NaN NaN 349.0 101658.0 126434.0 114171.0 59158.0 54441.0 59928.0 56349.0 54135.0 63868.0 75952.0 73323.0 72276.0 69640.0
2003 NaN NaN NaN NaN NaN NaN NaN 351.0 94401.0 99209.0 56542.0 50567.0 56048.0 52551.0 50108.0 59274.0 71001.0 68469.0 68089.0 66409.0
2004 NaN NaN NaN NaN NaN NaN NaN NaN 353.0 80681.0 57412.0 50900.0 57047.0 53480.0 51506.0 61045.0 74183.0 71310.0 70105.0 68200.0
2005 NaN NaN NaN NaN NaN NaN NaN NaN NaN 358.0 49477.0 44848.0 51345.0 49290.0 46746.0 55899.0 67224.0 65194.0 64471.0 62356.0
2006 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 51640.0 49068.0 58801.0 57874.0 56827.0 68036.0 83082.0 79954.0 79391.0 77982.0
2007 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 42596.0 39735.0 49530.0 50495.0 52028.0 64747.0 81648.0 79232.0 79283.0 77544.0
2008 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 353.0 24754.0 27681.0 28895.0 29766.0 37198.0 45380.0 44464.0 44157.0 42814.0
2009 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 338.0 26807.0 28439.0 30560.0 38600.0 45038.0 43930.0 43085.0 41503.0
2010 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 315.0 27622.0 30065.0 39477.0 48695.0 48294.0 47474.0 45908.0
2011 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 311.0 27123.0 34896.0 45450.0 47312.0 48154.0 46467.0
2012 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 299.0 30836.0 41424.0 46911.0 49421.0 49042.0
2013 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 300.0 40829.0 48750.0 54953.0 56769.0
2014 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 311.0 48980.0 58367.0 63745.0
2015 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 320.0 50229.0 57077.0
2016 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 327.0 48427.0
2017 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 326.0

23 rows × 22 columns

In [133]:
with sns.axes_style("white"):
    ax = sns.heatmap(HouseCountComparisonSameALLYEARSMatrix, linewidth=0.2, cmap = "BuPu")
ax.set_title('Number of times the same house was sold in a second year')
ax.set_ylabel('First Year')
ax.set_xlabel('Second Year')
plt.show()

 

 

Leave a Reply