ginipick commited on
Commit
76e34c2
·
verified ·
1 Parent(s): 02b02b9

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +47 -53
app.py CHANGED
@@ -5,55 +5,6 @@ from datetime import datetime, timedelta
5
  import requests
6
  from io import BytesIO
7
 
8
- def load_and_process_data():
9
- try:
10
- url = "https://huggingface.co/datasets/cfahlgren1/hub-stats/resolve/main/spaces.parquet"
11
- response = requests.get(url)
12
- df = pd.read_parquet(BytesIO(response.content))
13
-
14
- # 30일치 데이터 준비
15
- thirty_days_ago = datetime.now() - timedelta(days=30)
16
- df['createdAt'] = pd.to_datetime(df['createdAt'])
17
- df = df[df['createdAt'] >= thirty_days_ago].copy()
18
-
19
- # 날짜별 데이터 처리
20
- dates = pd.date_range(start=thirty_days_ago, end=datetime.now(), freq='D')
21
- daily_ranks = []
22
-
23
- for date in dates:
24
- # 해당 날짜의 데이터 추출
25
- date_data = df[df['createdAt'].dt.date <= date.date()].copy()
26
-
27
- # trendingScore가 같은 경우 id로 정렬하여 유니크한 순위 보장
28
- date_data = date_data.sort_values(['trendingScore', 'id'], ascending=[False, True])
29
-
30
- # 순위 계산
31
- date_data['rank'] = range(1, len(date_data) + 1)
32
- date_data['date'] = date.date()
33
-
34
- # 필요한 컬럼만 선택
35
- daily_ranks.append(
36
- date_data[['id', 'date', 'rank', 'trendingScore', 'createdAt']]
37
- )
38
-
39
- # 전체 데이터 병합
40
- daily_ranks_df = pd.concat(daily_ranks, ignore_index=True)
41
-
42
- # 최신 날짜의 top 100 추출
43
- latest_date = daily_ranks_df['date'].max()
44
- top_100_spaces = daily_ranks_df[
45
- daily_ranks_df['date'] == latest_date
46
- ].sort_values('rank').head(100).copy()
47
-
48
- print(f"Total records: {len(daily_ranks_df)}")
49
- print(f"Unique spaces: {len(daily_ranks_df['id'].unique())}")
50
- print(f"Date range: {daily_ranks_df['date'].min()} to {daily_ranks_df['date'].max()}")
51
-
52
- return daily_ranks_df, top_100_spaces
53
- except Exception as e:
54
- print(f"Error loading data: {e}")
55
- return pd.DataFrame(), pd.DataFrame()
56
-
57
  def create_trend_chart(space_id, daily_ranks_df):
58
  if space_id is None or daily_ranks_df.empty:
59
  return None
@@ -80,12 +31,10 @@ def create_trend_chart(space_id, daily_ranks_df):
80
  xaxis_title="Date",
81
  yaxis_title="Rank",
82
  yaxis=dict(
83
- autorange=False, # 자동 범위 비활성화
84
- range=[1, 100], # 1위부터 100위까지 고정
85
  tickmode='linear', # 선형 간격으로 눈금 표시
86
  tick0=1, # 첫 눈금
87
- dtick=10, # 눈금 간격 (10단위로 표시)
88
- autorange="reversed" # 1위가 위쪽에 오도록 반전
89
  ),
90
  hovermode='x unified',
91
  plot_bgcolor='white',
@@ -109,6 +58,51 @@ def create_trend_chart(space_id, daily_ranks_df):
109
  print(f"Error creating chart: {e}")
110
  return None
111
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
112
  def update_display(selection):
113
  global daily_ranks_df
114
 
 
5
  import requests
6
  from io import BytesIO
7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8
  def create_trend_chart(space_id, daily_ranks_df):
9
  if space_id is None or daily_ranks_df.empty:
10
  return None
 
31
  xaxis_title="Date",
32
  yaxis_title="Rank",
33
  yaxis=dict(
34
+ range=[100, 1], # 100위부터 1위까지 (역순으로 설정)
 
35
  tickmode='linear', # 선형 간격으로 눈금 표시
36
  tick0=1, # 첫 눈금
37
+ dtick=10 # 눈금 간격 (10단위로 표시)
 
38
  ),
39
  hovermode='x unified',
40
  plot_bgcolor='white',
 
58
  print(f"Error creating chart: {e}")
59
  return None
60
 
61
+ def load_and_process_data():
62
+ try:
63
+ url = "https://huggingface.co/datasets/cfahlgren1/hub-stats/resolve/main/spaces.parquet"
64
+ response = requests.get(url)
65
+ df = pd.read_parquet(BytesIO(response.content))
66
+
67
+ # 30일치 데이터 준비
68
+ thirty_days_ago = datetime.now() - timedelta(days=30)
69
+ df['createdAt'] = pd.to_datetime(df['createdAt'])
70
+ df = df[df['createdAt'] >= thirty_days_ago].copy()
71
+
72
+ # 날짜별 데이터 처리
73
+ dates = pd.date_range(start=thirty_days_ago, end=datetime.now(), freq='D')
74
+ daily_ranks = []
75
+
76
+ for date in dates:
77
+ # 해당 날짜의 데이터 추출
78
+ date_data = df[df['createdAt'].dt.date <= date.date()].copy()
79
+
80
+ # trendingScore가 같은 경우 id로 정렬하여 유니크한 순위 보장
81
+ date_data = date_data.sort_values(['trendingScore', 'id'], ascending=[False, True])
82
+
83
+ # 순위 계산
84
+ date_data['rank'] = range(1, len(date_data) + 1)
85
+ date_data['date'] = date.date()
86
+
87
+ # 필요한 컬럼만 선택
88
+ daily_ranks.append(
89
+ date_data[['id', 'date', 'rank', 'trendingScore', 'createdAt']]
90
+ )
91
+
92
+ # 전체 데이터 병합
93
+ daily_ranks_df = pd.concat(daily_ranks, ignore_index=True)
94
+
95
+ # 최신 날짜의 top 100 추출
96
+ latest_date = daily_ranks_df['date'].max()
97
+ top_100_spaces = daily_ranks_df[
98
+ daily_ranks_df['date'] == latest_date
99
+ ].sort_values('rank').head(100).copy()
100
+
101
+ return daily_ranks_df, top_100_spaces
102
+ except Exception as e:
103
+ print(f"Error loading data: {e}")
104
+ return pd.DataFrame(), pd.DataFrame()
105
+
106
  def update_display(selection):
107
  global daily_ranks_df
108