Продолжая исследование открытого набора данных Земельной книги с использованием SparkR, я хотел узнать, на какой дороге в Великобритании было больше всего продаж недвижимости за последние 20 лет.
Напомним, что вот так выглядит фрейм данных:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
. /spark-1 .5.0-bin-hadoop2.6 /bin/sparkR --packages com.databricks:spark-csv_2.11:1.2.0 > sales <- read . df (sqlContext, "pp-complete.csv" , "com.databricks.spark.csv" , header= "false" ) > head (sales) C0 C1 C2 C3 C4 C5 1 {0C7ADEF5-878D-4066-B785-0000003ED74A} 163000 2003-02-21 00:00 UB5 4PJ T N 2 {35F67271-ABD4-40DA-AB09-00000085B9D3} 247500 2005-07-15 00:00 TA19 9DD D N 3 {B20B1C74-E8E1-4137-AB3E-0000011DF342} 320000 2010-09-10 00:00 W4 1DZ F N 4 {7D6B0915-C56B-4275-AF9B-00000156BCE7} 104000 1997-08-27 00:00 NE61 2BH D N 5 {47B60101-B64C-413D-8F60-000002F1692D} 147995 2003-05-02 00:00 PE33 0RU D N 6 {51F797CA-7BEB-4958-821F-000003E464AE} 110000 2013-03-22 00:00 NR35 2SF T N C6 C7 C8 C9 C10 C11 1 F 106 READING ROAD NORTHOLT NORTHOLT 2 F 58 ADAMS MEADOW ILMINSTER ILMINSTER 3 L 58 WHELLOCK ROAD LONDON 4 F 17 WESTGATE MORPETH MORPETH 5 F 4 MASON GARDENS WEST WINCH KING'S LYNN 6 F 5 WILD FLOWER WAY DITCHINGHAM BUNGAY C12 C13 C14 1 EALING GREATER LONDON A 2 SOUTH SOMERSET SOMERSET A 3 EALING GREATER LONDON A 4 CASTLE MORPETH NORTHUMBERLAND A 5 KING'S LYNN AND WEST NORFOLK NORFOLK A 6 SOUTH NORFOLK NORFOLK A |
Этот документ объясняет данные, хранящиеся в каждом поле, и для этого конкретного запроса мы заинтересованы в полях C9-C12. Планируется сгруппировать фрейм данных по этим полям, а затем отсортировать по частоте в порядке убывания.
При группировании по нескольким полям легче всего создать новое поле, которое объединит их все, а затем сгруппировать по ним.
Я начал со следующего:
1
2
3
|
> sales$address = paste (sales$C9, sales$C10, sales$C11, sales$C12, sep= ", " ) Error in as.character.default(<S4 object of class "Column" >) : no method for coercing this S4 class to a vector |
Не так удачно! Далее я пошел еще более примитивно:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
> sales$address = sales$C9 + ", " + sales$C10 + ", " + sales$C11 + ", " + sales$C12 > head (sales) C0 C1 C2 C3 C4 C5 1 {0C7ADEF5-878D-4066-B785-0000003ED74A} 163000 2003-02-21 00:00 UB5 4PJ T N 2 {35F67271-ABD4-40DA-AB09-00000085B9D3} 247500 2005-07-15 00:00 TA19 9DD D N 3 {B20B1C74-E8E1-4137-AB3E-0000011DF342} 320000 2010-09-10 00:00 W4 1DZ F N 4 {7D6B0915-C56B-4275-AF9B-00000156BCE7} 104000 1997-08-27 00:00 NE61 2BH D N 5 {47B60101-B64C-413D-8F60-000002F1692D} 147995 2003-05-02 00:00 PE33 0RU D N 6 {51F797CA-7BEB-4958-821F-000003E464AE} 110000 2013-03-22 00:00 NR35 2SF T N C6 C7 C8 C9 C10 C11 1 F 106 READING ROAD NORTHOLT NORTHOLT 2 F 58 ADAMS MEADOW ILMINSTER ILMINSTER 3 L 58 WHELLOCK ROAD LONDON 4 F 17 WESTGATE MORPETH MORPETH 5 F 4 MASON GARDENS WEST WINCH KING'S LYNN 6 F 5 WILD FLOWER WAY DITCHINGHAM BUNGAY C12 C13 C14 address 1 EALING GREATER LONDON A NA 2 SOUTH SOMERSET SOMERSET A NA 3 EALING GREATER LONDON A NA 4 CASTLE MORPETH NORTHUMBERLAND A NA 5 KING'S LYNN AND WEST NORFOLK NORFOLK A NA 6 SOUTH NORFOLK NORFOLK A NA |
Это по крайней мере скомпилировано, но все адреса были «NA», что не то, что мы хотим. После небольшого поиска я понял, что есть функция concat, которую я мог использовать именно для этой задачи:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
> sales$address = concat_ws(sep= ", " , sales$C9, sales$C10, sales$C11, sales$C12) > head (sales) C0 C1 C2 C3 C4 C5 1 {0C7ADEF5-878D-4066-B785-0000003ED74A} 163000 2003-02-21 00:00 UB5 4PJ T N 2 {35F67271-ABD4-40DA-AB09-00000085B9D3} 247500 2005-07-15 00:00 TA19 9DD D N 3 {B20B1C74-E8E1-4137-AB3E-0000011DF342} 320000 2010-09-10 00:00 W4 1DZ F N 4 {7D6B0915-C56B-4275-AF9B-00000156BCE7} 104000 1997-08-27 00:00 NE61 2BH D N 5 {47B60101-B64C-413D-8F60-000002F1692D} 147995 2003-05-02 00:00 PE33 0RU D N 6 {51F797CA-7BEB-4958-821F-000003E464AE} 110000 2013-03-22 00:00 NR35 2SF T N C6 C7 C8 C9 C10 C11 1 F 106 READING ROAD NORTHOLT NORTHOLT 2 F 58 ADAMS MEADOW ILMINSTER ILMINSTER 3 L 58 WHELLOCK ROAD LONDON 4 F 17 WESTGATE MORPETH MORPETH 5 F 4 MASON GARDENS WEST WINCH KING'S LYNN 6 F 5 WILD FLOWER WAY DITCHINGHAM BUNGAY C12 C13 C14 1 EALING GREATER LONDON A 2 SOUTH SOMERSET SOMERSET A 3 EALING GREATER LONDON A 4 CASTLE MORPETH NORTHUMBERLAND A 5 KING'S LYNN AND WEST NORFOLK NORFOLK A 6 SOUTH NORFOLK NORFOLK A address 1 READING ROAD, NORTHOLT, NORTHOLT, EALING 2 ADAMS MEADOW, ILMINSTER, ILMINSTER, SOUTH SOMERSET 3 WHELLOCK ROAD, , LONDON, EALING 4 WESTGATE, MORPETH, MORPETH, CASTLE MORPETH 5 MASON GARDENS, WEST WINCH, KING 'S LYNN, KING' S LYNN AND WEST NORFOLK 6 WILD FLOWER WAY, DITCHINGHAM, BUNGAY, SOUTH NORFOLK |
Это больше походит на это! Теперь посмотрим, на каких улицах продано больше всего недвижимости:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
|
> byAddress = summarize(groupBy(sales, sales$address), count = n(sales$address)) > head (arrange(byAddress, desc(byAddress$count)), 10) address count 1 BARBICAN, LONDON, LONDON, CITY OF LONDON 1398 2 CHRISTCHURCH ROAD, BOURNEMOUTH, BOURNEMOUTH, BOURNEMOUTH 1313 3 MAIDA VALE, LONDON, LONDON, CITY OF WESTMINSTER 1305 4 ROTHERHITHE STREET, LONDON, LONDON, SOUTHWARK 1253 5 SLOANE AVENUE, LONDON, LONDON, KENSINGTON AND CHELSEA 1219 6 THE STRAND, BRIGHTON MARINA VILLAGE, BRIGHTON, BRIGHTON AND HOVE 1218 7 FAIRFIELD ROAD, LONDON, LONDON, TOWER HAMLETS 1217 8 QUEENSTOWN ROAD, , LONDON, WANDSWORTH 1153 9 UPPER RICHMOND ROAD, LONDON, LONDON, WANDSWORTH 1123 10 QUEENSTOWN ROAD, LONDON, LONDON, WANDSWORTH 1079 |
Далее мы углубимся в данные, но это для другого поста.
Ссылка: | SparkR: добавьте новый столбец во фрейм данных, объединив другие столбцы от нашего партнера по JCG Марка Нидхэма в блоге Марка Нидхэма . |