DatabricksマーケットプレイスのFoursquareのサンプルを試してみる

マーケットプレイスを眺めていたら[Foursquareのデータセット](https://marketplace.databricks.com/details/2020d2f3-c30e-4d09-8ceb-df6596dc0062/Foursquare_Places-Free-New-York-City-Sample)を見つけました。十数年前に[こちらのサービス](https://prtimes.jp/main/html/rd/p/000000001.000000208.html)の開発・運営に携わっていたこともあり、当時はFoursquareにも注目して、結構使っていました。

![Screenshot 2024-02-23 at 18.07.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/a2a08fc7-503f-42f4-9037-aa6ed0d3b0cb.png)

無料のサンプルなのでこちらを試してみます。

# データへのアクセスを取得

カタログを指定してデータにアクセスできるようにします。
![Screenshot 2024-02-23 at 18.07.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/270bfa9d-378c-a315-ad73-f027f7cc2940.png)

データにアクセスできるようになりました。
![Screenshot 2024-02-23 at 18.08.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/07b0ad48-18d7-c6f1-d211-53adf65a89bb.png)
![Screenshot 2024-02-23 at 18.08.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/7738e41f-426a-58ec-1d8b-cda9f9362937.png)

サンプルノートブックもあるのでインポートします。

# ノートブックのウォークスルー

`h3`を使うのでライブラリをインストールします。ちなみに、Databricksではネイティブで[h3の機能](https://qiita.com/taka_yayoi/items/369d9b37daa3f7be3297)をサポートしていますが今回はサンプルノートブックに従います。

```py
%pip install h3
```
```py
import pyspark.sql.functions as F
import h3
```

# PySparkでテーブルを表示

テーブルを読み込みます。カタログ名は上の手順で設定したものを指定します。こちらはPySparkの例。
```py
places_nyc = spark.sql("SELECT * FROM `taka_foursquare_places_free_new_york_city_sample`.`quickstart_schema`.`places_us_nyc`")

display(places_nyc)
```
![Screenshot 2024-02-23 at 19.21.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/c45ba92d-612c-4f52-ea1f-d8b365387675.png)

# SQLでテーブルを表示

SQLの例です。

```sql
%sql
SELECT * FROM `taka_foursquare_places_free_new_york_city_sample`.`quickstart_schema`.`places_us_nyc`;
```

同じ結果が返ってきます。
![Screenshot 2024-02-23 at 19.21.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/b45a7be0-1738-74fc-3beb-7e543561776e.png)

# New York DMA(Direct Marketing Area)におけるすべてのスターバックスの位置を教えて (PySpark)

```py
# NYCのサンプルデータ
display(
  places_nyc.filter(
  (F.array_contains(F.col("fsq_chain_name"), "Starbucks"))
))
```
![Screenshot 2024-02-23 at 19.22.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/97652d1c-4e4f-f0ac-d027-db24be7dee5a.png)

# New York DMA(Direct Marketing Area)におけるすべてのスターバックスの位置を教えて (SQL)

これもSQLの例ですが、PySparkと同じ結果が返ってきます。

```sql
%sql
SELECT * FROM `taka_foursquare_places_free_new_york_city_sample`.`quickstart_schema`.`places_us_nyc` WHERE ARRAY_CONTAINS(fsq_chain_name, 'Starbucks')
```
![Screenshot 2024-02-23 at 19.23.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/2d4df367-70a7-e3b4-26c5-51db3984b29e.png)

# ZIPコード10010のエリアにはいくつのカフェがある？(PySpark)

```py
places_nyc.filter(
(F.arrays_overlap(F.col("fsq_category_ids"), F.array([F.lit(id) for id in range(10032, 10037)]))) & # Dining and Drinking > Cafes, Coffee, and Tea Houses  
(F.col("postcode") == '10010'))\
    .count()
```
```
28
```

# ZIPコード10010のエリアにはいくつのカフェがある？(SQL)

```sql
%sql
SELECT * FROM `taka_foursquare_places_free_new_york_city_sample`.`quickstart_schema`.`places_us_nyc` WHERE ARRAYS_OVERLAP(fsq_category_ids, ARRAY(10032, 10033, 10034, 10035, 10036)) AND postcode == 10010
```
![Screenshot 2024-02-23 at 19.25.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/601a2a59-1229-af3e-f704-4cef0198a5c7.png)

なお、結果を表示した状態で[可視化を追加](https://docs.databricks.com/ja/visualizations/index.html)するとこれらのカフェを地図上にプロットすることができます。
![Screenshot 2024-02-23 at 19.28.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/7a871b92-1679-6c75-09e9-4c805314b489.png)
![Screenshot 2024-02-23 at 19.28.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/f1fb687d-6423-749b-1424-b16f82e91a9b.png)


ノートブックにはこれ以外のサンプルコードも入っているのですが、それらを試すには有料のデータが必要でした。**東京で人気のラーメン店はどこ？** みたいな質問も入っています。試してみたい…。


### はじめてのDatabricks

[はじめてのDatabricks](https://qiita.com/taka_yayoi/items/8dc72d083edb879a5e5d)

### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)