1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Databricksユーザー会JEDAIのメンバー数を分析する

Last updated at Posted at 2023-10-08

Databricks入社以来、ユーザー会JEDAIのステアリングコミッティーメンバーなのです。

かれこれ3年を迎えようとしている中、「メンバー数の変遷を見てみたい」と思った次第です。おかげさまで1400人を超えています。

しかし、connpassではメンバー一覧を参照することはできますが、データとしては取得ができませんでした。

ということで、スクレイピングさせていただきました。

注意
スクレイピングする際には、利用規約などに準拠するように注意してください。

メンバー数の取得

connpassのメンバー一覧ページはページネーションされているのですが、何ページまでかがレスポンスコードで判別できなかったので、メンバー数から計算します。

import requests, datetime, re
from bs4 import BeautifulSoup

user_agent = 'Mozilla/5.0'

url = 'https://jedai.connpass.com/participation/'
r = requests.get(url, headers={"User-Agent": user_agent})
soup = BeautifulSoup(r.text, "html.parser")
num_members = soup.find("h3", "title inline").get_text()
print(num_members)

num_members = re.search(r'\d+', num_members).group()
print(num_members)
他のメンバー(1438人)
1438

ページ数の計算

管理者数含めてないのでザックリと計算。

member_per_page = 100
page_total = int(int(num_members) / member_per_page) + 1
print(page_total)
15

メンバー加入日の抽出

def drug_data(page):
  url = 'https://jedai.connpass.com/participation/?page=' + str(page)
  print(url)
  
  r = requests.get(url, headers={"User-Agent": user_agent})
  soup = BeautifulSoup(r.text, "html.parser")
        
  ret_text_list = []
  elems = soup.find_all("td", "join_date")
  for element in elems:
    join_date_str = element.get_text()
    join_date_str = re.sub("\(*.\)", "", join_date_str)
    #print(join_date_str)
    dte = datetime.datetime.strptime(join_date_str, '%Y/%m/%d')

    ret_text_list.append(dte)

  return ret_text_list
members = []
count = 1

while(count <= page_total):
  ret_text_list = drug_data(count)

  for element in ret_text_list:
    members.append(element)

  count = count + 1
https://jedai.connpass.com/participation/?page=1
https://jedai.connpass.com/participation/?page=2
https://jedai.connpass.com/participation/?page=3
https://jedai.connpass.com/participation/?page=4
https://jedai.connpass.com/participation/?page=5
https://jedai.connpass.com/participation/?page=6
https://jedai.connpass.com/participation/?page=7
https://jedai.connpass.com/participation/?page=8
https://jedai.connpass.com/participation/?page=9
https://jedai.connpass.com/participation/?page=10
https://jedai.connpass.com/participation/?page=11
https://jedai.connpass.com/participation/?page=12
https://jedai.connpass.com/participation/?page=13
https://jedai.connpass.com/participation/?page=14
https://jedai.connpass.com/participation/?page=15

メンバー数の確認

len(members)

合ってました(管理者も含まれています)。

1445
import pandas as pd
df_members = pd.DataFrame(members)
df_members.columns = ['join_date']
df_members = df_members.sort_values("join_date")
display(df_members)

ビルトインの可視化機能で日毎の参加者数は確認できます。
Screenshot 2023-10-08 at 21.18.51.png

日毎の加入者の集計

累積値を計算するために日毎の合計加入者を計算します。

df_members_groupby_data = df_members.groupby('join_date').size().to_frame('size').reset_index()
display(df_members_groupby_data)

Screenshot 2023-10-08 at 21.20.43.png

累積メンバー数の計算

累積値を計算します。

df_members_groupby_data['cum_size'] = df_members_groupby_data['size'].cumsum()
display(df_members_groupby_data)

Screenshot 2023-10-08 at 21.21.42.png

可視化を設定して、累積値と日毎の加入者を表示します。
Screenshot 2023-10-08 at 21.22.13.png
Screenshot 2023-10-08 at 21.22.26.png

できました!
Screenshot 2023-10-08 at 21.22.41.png

イベントをマッピングすることで、さらに情報を得ることができます。
Screenshot 2023-10-08 at 21.31.54.png

Databricksクイックスタートガイド

Databricksクイックスタートガイド

Databricks無料トライアル

Databricks無料トライアル

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?