pax-dare-lab commited on
Commit
3114f5a
·
1 Parent(s): 7a6c3fd

メニューを変更

Browse files
Files changed (1) hide show
  1. create_object.py +16 -65
create_object.py CHANGED
@@ -2,58 +2,22 @@ import plotly.graph_objects as go
2
  import plotly.express as px
3
 
4
  # 分析メニュー
5
- analysis_menu_list = ["ABC分析", "バスケット分析","時系列分析"]
6
 
7
  # 分析メニューごとのSQL
8
  def create_sql(analysis_menu, country, start_date, end_date):
9
- if analysis_menu == "ABC分析":
10
  sql = f"""
11
- WITH
12
- t_base AS(
13
- -- 商品コードごとの売上(単価×個数)の合計値を算出
14
- -- 期間を、2011年1~6月に絞る
15
- SELECT
16
- StockCode, Description,
17
- SUM(UnitPrice * Quantity) AS SalesTotal
18
- FROM df
19
- WHERE CAST(InvoiceDate AS DATE) BETWEEN DATETIME '{start_date}' AND DATETIME '{end_date}'
20
- AND {country}
21
- GROUP BY StockCode, Description
22
- ),
23
- t_standard AS(
24
- -- 全体の売上のうち、70%を占める売上額・90%を占める売上額を算出
25
- SELECT
26
- SUM(SalesTotal) AS Sum_SalesTotal,
27
- FROM t_base
28
- ),
29
- t_cumulative AS(
30
- -- 売上を降順(高い順)でソートし、先頭からの累計売上額を算出
31
- SELECT
32
- StockCode,
33
- Description,
34
- SalesTotal,
35
- SUM(SalesTotal) OVER (ORDER BY SalesTotal DESC) AS SalesCumulative
36
- FROM t_base
37
- ORDER BY SalesTotal DESC
38
- )
39
-
40
  SELECT
41
- StockCode,
42
- Description,
43
- SalesTotal,
44
- SalesCumulative,
45
- SalesCumulative / Sum_SalesTotal AS Percentage_SalesCumulative,
46
- -- 累計売上額が売上合計の70%以下の場合はランクA、90%以下の場合はランクB、それ以降はランクCとしてランク付け
47
- CASE
48
- WHEN SalesCumulative / Sum_SalesTotal <= 0.7 THEN 'A'
49
- WHEN SalesCumulative / Sum_SalesTotal <= 0.9 THEN 'B'
50
- ELSE 'C'
51
- END AS SalesRank
52
-
53
- FROM t_cumulative
54
- FULL OUTER JOIN t_standard
55
- ON TRUE
56
- ORDER BY SalesTotal desc
57
  """
58
 
59
  elif analysis_menu == "バスケット分析":
@@ -128,33 +92,20 @@ def create_sql(analysis_menu, country, start_date, end_date):
128
  Description_B in (SELECT Description FROM t_purchaser ORDER BY Num_of_Purchaser DESC LIMIT 10)
129
  """
130
 
131
- elif analysis_menu == "時系列分析":
132
- sql = f"""
133
- SELECT
134
- CAST(InvoiceDate AS DATE) AS YearMonthDate,
135
- COUNT(DISTINCT CustomerID) AS Num_of_Purchaser,
136
- SUM(Quantity) AS Total_of_Amount,
137
- SUM(UnitPrice * Quantity) AS SalesTotal
138
- FROM df
139
- WHERE CAST(InvoiceDate AS DATE) BETWEEN DATETIME '{start_date}' AND DATETIME '{end_date}'
140
- AND {country}
141
- GROUP BY YearMonthDate
142
- ORDER BY YearMonthDate
143
- """
144
-
145
  return sql
146
 
147
 
148
  # 分析メニューごとのグラフ
149
  def create_graph(analysis_menu, df):
150
- if analysis_menu == "バスケット分析":
 
 
 
 
151
  # ヒートマップ
152
  df = df.sort_values(["Description_A","Description_B"], ascending=[True, False]).reset_index()
153
  fig = go.Figure([go.Heatmap(z=df.CombinedSalesRate,
154
  x=df.Description_A.values,
155
  y=df.Description_B.values)])
156
 
157
- elif analysis_menu == "時系列分析":
158
- # 折れ線グラフ
159
- fig = px.line(df, x='YearMonthDate', y='Total_of_Amount')
160
  return fig
 
2
  import plotly.express as px
3
 
4
  # 分析メニュー
5
+ analysis_menu_list = ["時系列分析","バスケット分析"]
6
 
7
  # 分析メニューごとのSQL
8
  def create_sql(analysis_menu, country, start_date, end_date):
9
+ if analysis_menu == "時系列分析":
10
  sql = f"""
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
  SELECT
12
+ CAST(InvoiceDate AS DATE) AS YearMonthDate,
13
+ COUNT(DISTINCT CustomerID) AS Num_of_Purchaser,
14
+ SUM(Quantity) AS Total_of_Amount,
15
+ SUM(UnitPrice * Quantity) AS SalesTotal
16
+ FROM df
17
+ WHERE CAST(InvoiceDate AS DATE) BETWEEN DATETIME '{start_date}' AND DATETIME '{end_date}'
18
+ AND {country}
19
+ GROUP BY YearMonthDate
20
+ ORDER BY YearMonthDate
 
 
 
 
 
 
 
21
  """
22
 
23
  elif analysis_menu == "バスケット分析":
 
92
  Description_B in (SELECT Description FROM t_purchaser ORDER BY Num_of_Purchaser DESC LIMIT 10)
93
  """
94
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
95
  return sql
96
 
97
 
98
  # 分析メニューごとのグラフ
99
  def create_graph(analysis_menu, df):
100
+ if analysis_menu == "時系列分析":
101
+ # 折れ線グラフ
102
+ fig = px.line(df, x='YearMonthDate', y='Total_of_Amount')
103
+
104
+ elif analysis_menu == "バスケット分析":
105
  # ヒートマップ
106
  df = df.sort_values(["Description_A","Description_B"], ascending=[True, False]).reset_index()
107
  fig = go.Figure([go.Heatmap(z=df.CombinedSalesRate,
108
  x=df.Description_A.values,
109
  y=df.Description_B.values)])
110
 
 
 
 
111
  return fig