Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Sign in
Toggle navigation
F
fund_report
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
彭熊
fund_report
Commits
2826bea6
Commit
2826bea6
authored
Dec 01, 2020
by
赵杰
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Merge branch 'dev' of E:\project\tamp\fund_report with conflicts.
parent
b322e2c8
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
9678 additions
and
1375 deletions
+9678
-1375
fund_report.iml
.idea/fund_report.iml
+1
-1
misc.xml
.idea/misc.xml
+1
-1
USER_INFO15914346866762_202009281545001_20201109_monthly_return_performance.png
...2_202009281545001_20201109_monthly_return_performance.png
+0
-0
__main__.py
app/init/__main__.py
+7
-3
out5.pdf
app/pdf/out5.pdf
+0
-0
data_service.py
app/service/data_service.py
+41
-15
result_service.py
app/service/result_service.py
+63
-27
draw.py
app/utils/draw.py
+9
-18
tamp_course_order.log
logs/tamp_course_order.log
+9556
-1310
No files found.
.idea/fund_report.iml
View file @
2826bea6
...
...
@@ -2,7 +2,7 @@
<module
type=
"PYTHON_MODULE"
version=
"4"
>
<component
name=
"NewModuleRootManager"
>
<content
url=
"file://$MODULE_DIR$"
/>
<orderEntry
type=
"
inheritedJdk
"
/>
<orderEntry
type=
"
jdk"
jdkName=
"Python 3.6"
jdkType=
"Python SDK
"
/>
<orderEntry
type=
"sourceFolder"
forTests=
"false"
/>
</component>
<component
name=
"TestRunnerService"
>
...
...
.idea/misc.xml
View file @
2826bea6
...
...
@@ -3,5 +3,5 @@
<component
name=
"JavaScriptSettings"
>
<option
name=
"languageLevel"
value=
"ES6"
/>
</component>
<component
name=
"ProjectRootManager"
version=
"2"
project-jdk-name=
"Python 3.
7
"
project-jdk-type=
"Python SDK"
/>
<component
name=
"ProjectRootManager"
version=
"2"
project-jdk-name=
"Python 3.
6
"
project-jdk-type=
"Python SDK"
/>
</project>
\ No newline at end of file
app/html/img/USER_INFO15914346866762_202009281545001_20201109_monthly_return_performance.png
View replaced file @
b322e2c8
View file @
2826bea6
262 KB
|
W:
|
H:
55.8 KB
|
W:
|
H:
2-up
Swipe
Onion skin
app/init/__main__.py
View file @
2826bea6
...
...
@@ -7,11 +7,15 @@
# @Software : PyCharm
# -----------------------------------------------------------------------------
from
app.api.engine
import
tamp_user_engine
,
tamp_pay_session
from
app.api.engine
import
tamp_pay_engine
from
app.api.engine
import
tamp_user_engine
,
tamp_product_engine
,
tamp_product_session
from
app.model.base
import
Base
from
app.model.order
import
OrderInfo
from
app.model.tamp_product_models
import
t_fund_info
if
__name__
==
'__main__'
:
Base
.
metadata
.
create_all
(
bind
=
tamp_pay_engine
)
# Base.metadata.create_all(bind=tamp_pay_engine)
sql
=
'select `fund_name` from `fund_info`'
row
=
tamp_product_session
.
execute
(
sql
)
print
(
row
)
# tamp_product_session.query(t_fund_info).filter(t_fund_info)
app/pdf/out5.pdf
View file @
2826bea6
No preview for this file type
app/service/data_service.py
View file @
2826bea6
...
...
@@ -11,6 +11,7 @@ import numpy as np
from
sqlalchemy
import
and_
import
tushare
as
ts
import
datetime
from
decimal
import
Decimal
from
app.api.engine
import
tamp_user_session
,
tamp_product_session
# from app.model.tamp_user_models import CustomerOrder, CustomerInfo
# from app.model.tamp_product_models import FundInfo
...
...
@@ -33,10 +34,10 @@ class UserCustomerDataAdaptor:
p_end_date
=
pd
.
to_datetime
(
end_date
)
.
date
()
p_end_date
=
datetime
.
date
(
year
=
p_end_date
.
year
,
month
=
p_end_date
.
month
,
day
=
1
)
-
datetime
.
timedelta
(
days
=
1
)
self
.
end_date
=
pd
.
to_datetime
(
str
(
p_end_date
))
#
self.end_date = pd.to_datetime("2020-11-23")
self
.
end_date
=
pd
.
to_datetime
(
"2020-11-23"
)
p_start_date
=
datetime
.
date
(
year
=
p_end_date
.
year
,
month
=
p_end_date
.
month
,
day
=
1
)
self
.
month_start_date
=
p_start_date
#
self.month_start_date = pd.to_datetime("2020-11-16")
self
.
month_start_date
=
pd
.
to_datetime
(
"2020-11-16"
)
self
.
user_customer_order_df
=
self
.
get_user_customer_order_data
()
self
.
fund_nav_total
,
self
.
fund_cnav_total
=
self
.
get_customer_fund_nav_data
()
self
.
index_df
=
self
.
get_customer_index_nav_data
()
...
...
@@ -195,12 +196,15 @@ class UserCustomerDataAdaptor:
# cnav_df.loc[confirm_share_date, cur_fund_id] = cur_cnav
if
cur_fund_id
+
"_amount"
not
in
cnav_df
:
profit
=
cnav_df
[
cur_fund_id
]
.
dropna
()
-
cnav_df
[
cur_fund_id
]
.
dropna
()
.
shift
(
1
)
price
=
cnav_df
[
cur_fund_id
]
.
dropna
()
profit
=
price
.
diff
()
.
fillna
(
Decimal
(
0
))
cnav_df
[
cur_fund_id
+
"_profit"
]
=
profit
cnav_df
[
cur_fund_id
+
"_profit_ratio"
]
=
profit
/
cnav_df
[
cur_fund_id
]
.
dropna
()
.
shift
(
1
)
cnav_df
[
cur_fund_id
+
"_profit"
]
=
cnav_df
[
cur_fund_id
+
"_profit"
]
.
fillna
(
Decimal
(
0
))
profit_ratio
=
profit
/
cnav_df
[
cur_fund_id
]
.
dropna
()
.
shift
(
1
)
cnav_df
[
cur_fund_id
+
"_profit_ratio"
]
=
profit_ratio
cnav_df
[
cur_fund_id
+
"_profit_ratio"
]
=
cnav_df
[
cur_fund_id
+
"_profit_ratio"
]
.
fillna
(
Decimal
(
0
))
cnav_df
[
cur_fund_id
+
"_amount"
]
=
0
cnav_df
[
cur_fund_id
+
"_earn"
]
=
0
# cnav_df[cur_fund_id + "_cum_earn"] = 0
cnav_df
[
cur_fund_id
+
"_share"
]
=
0
# buy
...
...
@@ -212,9 +216,16 @@ class UserCustomerDataAdaptor:
cnav_df
.
loc
[
confirm_share_date
:,
cur_fund_id
+
"_amount"
]
-=
row
[
"confirm_amount"
]
cnav_df
.
loc
[
confirm_share_date
:,
cur_fund_id
+
"_share"
]
-=
row
[
"confirm_share"
]
cnav_df
[
cur_fund_id
+
"_earn"
]
=
cnav_df
[
cur_fund_id
+
"_profit"
]
*
cnav_df
[
cur_fund_id
+
"_share"
]
cnav_df
[
cur_fund_id
+
"_earn"
]
=
cnav_df
[
cur_fund_id
+
"_earn"
]
.
apply
(
lambda
x
:
float
(
x
))
cnav_df
[
cur_fund_id
+
"_cum_earn"
]
=
cnav_df
[
cur_fund_id
+
"_earn"
]
.
cumsum
()
# cnav_df[cur_fund_id + "_earn"] = cnav_df[cur_fund_id + "_profit"] * cnav_df[cur_fund_id + "_share"]
# cnav_df[cur_fund_id + "_earn"] = cnav_df[cur_fund_id + "_earn"].apply(lambda x: float(x))
# cnav_df[cur_fund_id + "_cum_earn"] = cnav_df[cur_fund_id + "_earn"].cumsum()
for
p_fund_id_
in
p_fund_id_list
:
cnav_df
[
p_fund_id_
+
"_earn"
]
=
(
cnav_df
[
p_fund_id_
+
"_profit"
]
*
cnav_df
[
p_fund_id_
+
"_share"
])
.
apply
(
lambda
x
:
float
(
x
))
.
fillna
(
0
)
# cnav_df[p_fund_id_ + "_earn"] = cnav_df[p_fund_id_ + "_earn"].apply(lambda x: float(x))
cnav_df
[
p_fund_id_
+
"_cum_earn"
]
=
cnav_df
[
p_fund_id_
+
"_earn"
]
.
cumsum
()
.
fillna
(
0
)
# cnav_df[p_fund_id_ + "_net_amount"] = cnav_df[p_fund_id_ + "_cum_earn"] + cnav_df[p_fund_id_ + "_amount"].apply(lambda x: float(x))
cnav_df
[
p_fund_id_
+
"_net_amount"
]
=
cnav_df
[
p_fund_id_
+
"_share"
]
*
cnav_df
[
p_fund_id_
]
self
.
group_data
[
p_folio
]
=
{
"result_cnav_data"
:
cnav_df
,
"order_df"
:
p_order_df
}
return
cnav_df
...
...
@@ -257,14 +268,27 @@ class UserCustomerDataAdaptor:
cur_fund_id
=
str
(
row
[
"fund_id"
])
confirm_share_date
=
pd
.
to_datetime
(
row
[
"confirm_share_date"
])
if
cur_fund_id
+
"_amount"
not
in
cnav_df
:
profit
=
cnav_df
[
cur_fund_id
]
.
dropna
()
-
cnav_df
[
cur_fund_id
]
.
dropna
()
.
shift
(
1
)
price
=
cnav_df
[
cur_fund_id
]
.
dropna
()
profit
=
price
.
diff
()
.
fillna
(
Decimal
(
0
))
cnav_df
[
cur_fund_id
+
"_profit"
]
=
profit
cnav_df
[
cur_fund_id
+
"_profit_ratio"
]
=
profit
/
cnav_df
[
cur_fund_id
]
.
dropna
()
.
shift
(
1
)
cnav_df
[
cur_fund_id
+
"_profit"
]
=
cnav_df
[
cur_fund_id
+
"_profit"
]
.
fillna
(
Decimal
(
0
))
profit_ratio
=
profit
/
cnav_df
[
cur_fund_id
]
.
dropna
()
.
shift
(
1
)
cnav_df
[
cur_fund_id
+
"_profit_ratio"
]
=
profit_ratio
cnav_df
[
cur_fund_id
+
"_profit_ratio"
]
=
cnav_df
[
cur_fund_id
+
"_profit_ratio"
]
.
fillna
(
Decimal
(
0
))
cnav_df
[
cur_fund_id
+
"_amount"
]
=
0
cnav_df
[
cur_fund_id
+
"_earn"
]
=
0
# cnav_df[cur_fund_id + "_cum_earn"] = 0
cnav_df
[
cur_fund_id
+
"_share"
]
=
0
# profit = cnav_df[cur_fund_id].dropna() - cnav_df[cur_fund_id].dropna().shift(1)
# cnav_df[cur_fund_id + "_profit"] = profit
# cnav_df[cur_fund_id + "_profit"] = cnav_df[cur_fund_id + "_profit"].fillna(Decimal(0))
# cnav_df[cur_fund_id + "_profit_ratio"] = profit / cnav_df[cur_fund_id].dropna().shift(1)
# cnav_df[cur_fund_id + "_profit_ratio"] = cnav_df[cur_fund_id + "_profit_ratio"].fillna(Decimal(0))
# cnav_df[cur_fund_id + "_amount"] = 0
# cnav_df[cur_fund_id + "_earn"] = 0
# # cnav_df[cur_fund_id + "_cum_earn"] = 0
# cnav_df[cur_fund_id + "_share"] = 0
# buy
if
row
[
'order_type'
]
==
1
:
cnav_df
.
loc
[
confirm_share_date
:,
cur_fund_id
+
"_amount"
]
+=
row
[
"confirm_amount"
]
...
...
@@ -274,8 +298,10 @@ class UserCustomerDataAdaptor:
cnav_df
.
loc
[
confirm_share_date
:,
cur_fund_id
+
"_amount"
]
-=
row
[
"confirm_amount"
]
cnav_df
.
loc
[
confirm_share_date
:,
cur_fund_id
+
"_share"
]
-=
row
[
"confirm_share"
]
cnav_df
[
cur_fund_id
+
"_earn"
]
=
cnav_df
[
cur_fund_id
+
"_profit"
]
*
cnav_df
[
cur_fund_id
+
"_share"
]
cnav_df
[
cur_fund_id
+
"_earn"
]
=
cnav_df
[
cur_fund_id
+
"_earn"
]
.
apply
(
lambda
x
:
float
(
x
))
cnav_df
[
cur_fund_id
+
"_cum_earn"
]
=
cnav_df
[
cur_fund_id
+
"_earn"
]
.
cumsum
()
for
p_fund_id_
in
p_fund_id_list
:
cnav_df
[
p_fund_id_
+
"_earn"
]
=
(
cnav_df
[
p_fund_id_
+
"_profit"
]
*
cnav_df
[
p_fund_id_
+
"_share"
])
.
apply
(
lambda
x
:
float
(
x
))
.
fillna
(
0
)
# cnav_df[p_fund_id_ + "_earn"] = cnav_df[p_fund_id_ + "_earn"].apply(lambda x: float(x))
cnav_df
[
p_fund_id_
+
"_cum_earn"
]
=
cnav_df
[
p_fund_id_
+
"_earn"
]
.
cumsum
()
.
fillna
(
0
)
# cnav_df[p_fund_id_ + "_net_amount"] = cnav_df[p_fund_id_ + "_cum_earn"] + cnav_df[p_fund_id_ + "_amount"].apply(lambda x: float(x))
cnav_df
[
p_fund_id_
+
"_net_amount"
]
=
cnav_df
[
p_fund_id_
+
"_share"
]
*
cnav_df
[
p_fund_id_
]
return
cnav_df
app/service/result_service.py
View file @
2826bea6
...
...
@@ -38,9 +38,18 @@ class UserCustomerResultAdaptor(UserCustomerDataAdaptor):
profit_df
=
cur_folio_result_cnav_data
[
fund_id_list_earn
]
# 组合收益率数组
return_ratio_df
=
self
.
combination_yield
(
cur_folio_result_cnav_data
,
fund_id_list
)
# return_ratio_df, contribution_decomposition= self.combination_yield(cur_folio_result_cnav_data, fund_id_list)
# resample_df = resample(return_ratio_df, self.trade_cal_date, freq_max)
resample_cur_folio_result_cnav_data
=
resample
(
cur_folio_result_cnav_data
,
self
.
trade_cal_date
,
freq_max
)
return_ratio_df
,
contribution_decomposition
=
self
.
combination_yield
(
resample_cur_folio_result_cnav_data
,
fund_id_list
)
resample_df
=
resample
(
return_ratio_df
,
self
.
trade_cal_date
,
freq_max
)
# 收益分解df
contribution_decomposition_df
=
contribution_decomposition
.
fillna
(
0
)
*
100
folio_report_data
[
"contribution_decomposition"
]
=
contribution_decomposition_df
# 总成本
total_cost
=
float
(
cur_folio_order_data
[
cur_folio_order_data
[
"order_type"
]
==
1
][
"confirm_amount"
]
.
sum
()
-
\
cur_folio_order_data
[
cur_folio_order_data
[
"order_type"
]
==
2
][
"confirm_amount"
]
.
sum
())
...
...
@@ -104,7 +113,29 @@ class UserCustomerResultAdaptor(UserCustomerDataAdaptor):
# 累积收益率
cumulative_return
=
return_ratio_df
[
"cum_return_ratio"
]
.
values
[
-
1
]
folio_report_data
[
"contribution_decomposition"
]
=
float
(
cumulative_return
)
folio_report_data
[
"cumulative_return"
]
=
float
(
cumulative_return
)
# 月度分组
def
year_month
(
x
):
a
=
x
.
year
b
=
x
.
month
return
str
(
a
)
+
"/"
+
str
(
b
)
profit_df_cp
=
profit_df
.
copy
()
profit_df_cp
[
"date"
]
=
profit_df_cp
.
index
grouped
=
profit_df_cp
.
groupby
(
profit_df_cp
[
"date"
]
.
apply
(
year_month
))
sum_group
=
grouped
.
agg
(
np
.
sum
)
month_sum
=
sum_group
.
sum
(
axis
=
1
)
# 贡献分解
month_earn
=
sum_group
.
div
(
month_sum
,
axis
=
'rows'
)
month_earn
[
"datetime"
]
=
pd
.
to_datetime
(
month_earn
.
index
)
month_earn
.
sort_values
(
by
=
"datetime"
,
inplace
=
True
)
del
month_earn
[
"datetime"
]
col
=
list
(
month_earn
.
columns
)
col_
=
{
x
:
x
.
replace
(
'_earn'
,
''
)
for
x
in
list
(
col
)}
month_earn
.
rename
(
columns
=
col_
,
inplace
=
True
)
folio_report_data
[
"contribution_decomposition"
]
=
month_earn
# 组合内单个基金净值数据 组合内基金持仓数据
result_fund_nav_info
,
result_fund_hoding_info
=
self
.
group_fund_basic_info_data
(
cur_folio_order_data
,
cur_folio_result_cnav_data
,
cumulative_profit
,
total_cost
)
...
...
@@ -141,7 +172,11 @@ class UserCustomerResultAdaptor(UserCustomerDataAdaptor):
report_data
[
"hold_days"
]
=
hold_days
# 组合收益率数组
return_ratio_df
=
self
.
combination_yield
(
cur_folio_result_cnav_data
,
fund_id_list
)
# return_ratio_df = self.combination_yield(cur_folio_result_cnav_data, fund_id_list)
# resample_df = resample(return_ratio_df, self.trade_cal_date, freq_max)
resample_cur_folio_result_cnav_data
=
resample
(
cur_folio_result_cnav_data
,
self
.
trade_cal_date
,
freq_max
)
return_ratio_df
,
contribution_decomposition
=
self
.
combination_yield
(
resample_cur_folio_result_cnav_data
,
fund_id_list
)
resample_df
=
resample
(
return_ratio_df
,
self
.
trade_cal_date
,
freq_max
)
# 总成本
...
...
@@ -233,7 +268,7 @@ class UserCustomerResultAdaptor(UserCustomerDataAdaptor):
# 累积收益率
cumulative_return
=
return_ratio_df
[
"cum_return_ratio"
]
.
values
[
-
1
]
report_data
[
"c
ontribution_decompositio
n"
]
=
float
(
cumulative_return
)
report_data
[
"c
umulative_retur
n"
]
=
float
(
cumulative_return
)
# 对应指数数据
index_df
=
self
.
get_customer_index_nav_data
()
...
...
@@ -294,40 +329,41 @@ class UserCustomerResultAdaptor(UserCustomerDataAdaptor):
@
staticmethod
def
combination_yield
(
p_combina_df
,
fund_id_list
):
fund_id_list_amount
=
[
i
+
"_amount"
for
i
in
fund_id_list
]
fund_id_list_amount
=
[
i
+
"_
net_
amount"
for
i
in
fund_id_list
]
fund_id_list_profit_ratio
=
[
i
+
"_profit_ratio"
for
i
in
fund_id_list
]
nav_amount_df
=
p_combina_df
[
fund_id_list
+
fund_id_list_amount
+
fund_id_list_profit_ratio
]
.
copy
()
nav_amount_df
[
"sum_amount"
]
=
nav_amount_df
[
fund_id_list_amount
]
.
sum
(
axis
=
1
)
.
apply
(
lambda
x
:
Decimal
.
from_float
(
x
))
nav_net_amount_df
=
p_combina_df
[
fund_id_list
+
fund_id_list_amount
+
fund_id_list_profit_ratio
]
.
copy
()
# nav_net_amount_df = resample(return_ratio_df, self.trade_cal_date, freq_max)
nav_net_amount_df
[
"sum_net_amount"
]
=
nav_net_amount_df
[
fund_id_list_amount
]
.
sum
(
axis
=
1
)
.
apply
(
lambda
x
:
Decimal
.
from_float
(
x
))
for
amount_name
in
fund_id_list
:
nav_amount_df
[
amount_name
+
"_amount_ratio"
]
=
nav_amount_df
[
amount_name
+
"_amount"
]
/
nav_amount_df
[
"sum_amount"
]
nav_amount_df
[
amount_name
+
"_profit_ratio_weight"
]
=
nav_amount_df
[
amount_name
+
"_amount_ratio"
]
*
nav_amount_df
[
amount_name
+
"_profit_ratio"
]
nav_net_amount_df
[
amount_name
+
"_amount_ratio"
]
=
nav_net_amount_df
[
amount_name
+
"_net_amount"
]
/
(
nav_net_amount_df
[
"sum_net_amount"
])
nav_net_amount_df
[
amount_name
+
"_profit_ratio_weight"
]
=
nav_net_amount_df
[
amount_name
+
"_amount_ratio"
]
.
shift
(
1
)
*
nav_net_amount_df
[
amount_name
+
"_profit_ratio"
]
fund_profit_ratio
=
nav_net_amount_df
[
amount_name
+
"_profit_ratio"
]
.
dropna
()
+
1
nav_net_amount_df
[
amount_name
+
"_profit_cum_ratio_weight"
]
=
(
fund_profit_ratio
.
cumprod
()
-
1
)
*
nav_net_amount_df
[
amount_name
+
"_amount_ratio"
]
.
shift
(
1
)
# enter_date = nav_net_amount_df[amount_name+"_profit_ratio"].dropna()
fund_id_list_profit_ratio_weight
=
[
i
+
"_profit_ratio_weight"
for
i
in
fund_id_list
]
nav_profit_ratio_weight
=
nav_amount_df
[
fund_id_list_profit_ratio_weight
]
.
copy
()
.
fillna
(
method
=
'ffill'
)
nav_profit_ratio_weight
=
nav_
net_
amount_df
[
fund_id_list_profit_ratio_weight
]
.
copy
()
.
fillna
(
method
=
'ffill'
)
# 收益率
#
组合
收益率
return_ratio
=
nav_profit_ratio_weight
.
sum
(
axis
=
1
)
# 累积收益率
return_ratio_list
=
list
(
return_ratio
.
values
)
cum_return_ratio
=
[]
last_ratio
=
0
for
i
in
range
(
len
(
return_ratio_list
)):
if
i
==
0
:
last_ratio
=
1
+
return_ratio_list
[
i
]
cum_return_ratio
.
append
(
last_ratio
)
continue
cur_ratio
=
(
1
+
return_ratio_list
[
i
])
*
last_ratio
cum_return_ratio
.
append
(
cur_ratio
)
last_ratio
=
cur_ratio
# 组合累积收益率
# return_ratio_list = list(return_ratio.values)
cum_return_ratio
=
(
return_ratio
+
1
)
.
fillna
(
0
)
.
cumprod
()
# 收益率
# 收益率
df
cum_return_ratio_df
=
pd
.
DataFrame
(
return_ratio
.
values
,
columns
=
[
"return_ratio"
])
cum_return_ratio_df
[
"cum_return_ratio"
]
=
cum_return_ratio
cum_return_ratio_df
[
"cum_return_ratio"
]
=
cum_return_ratio
.
values
cum_return_ratio_df
.
index
=
return_ratio
.
index
return
cum_return_ratio_df
# 单个基金累计收益分解df
weight_name_list
=
[
i
+
"_profit_cum_ratio_weight"
for
i
in
fund_id_list
]
signal_fund_cum_weight
=
nav_net_amount_df
[
weight_name_list
]
re_name
=
{
x
:
x
.
replace
(
"_profit_cum_ratio_weight"
,
""
)
for
x
in
weight_name_list
}
signal_fund_cum_weight
.
rename
(
columns
=
re_name
,
inplace
=
True
)
return
cum_return_ratio_df
,
signal_fund_cum_weight
@
staticmethod
def
signal_fund_profit_result
(
p_fund_nav_df
,
cur_fund_id
):
...
...
app/utils/draw.py
View file @
2826bea6
...
...
@@ -6,10 +6,6 @@
# @Email : acepengxiong@163.com
# @Software : PyCharm
# -----------------------------------------------------------------------------
import
base64
from
urllib
import
parse
from
io
import
BytesIO
import
numpy
as
np
import
matplotlib.pyplot
as
plt
...
...
@@ -18,11 +14,11 @@ from matplotlib.ticker import FuncFormatter
from
matplotlib.font_manager
import
FontProperties
# 中文字体初始化
plt
.
rcParams
[
'font.sans-serif'
]
=
[
'
Heiti TC
'
]
plt
.
rcParams
[
'font.sans-serif'
]
=
[
'
simsunb.ttf
'
]
def
to_percent
(
temp
,
position
):
return
'
%
.2
f'
%
temp
+
'
%
'
return
'
%
1.0
f'
%
temp
+
'
%
'
def
draw_month_return_chart
(
xlabels
,
product_list
,
cumulative
):
...
...
@@ -32,7 +28,7 @@ def draw_month_return_chart(xlabels, product_list, cumulative):
# plt.ylabel('Scores')
figsize
=
(
20
,
12
)
# 标签文字大小
fontsize
=
15
fontsize
=
20
# 初始化
fig
=
plt
.
figure
(
figsize
=
figsize
)
ax1
=
fig
.
add_subplot
(
111
)
...
...
@@ -45,17 +41,16 @@ def draw_month_return_chart(xlabels, product_list, cumulative):
# 坐标轴
ax1
.
tick_params
(
labelsize
=
fontsize
)
ax2
.
tick_params
(
labelsize
=
fontsize
)
# 坐标轴颜色
ax2
.
tick_params
(
axis
=
'y'
,
colors
=
'#C6A774'
)
ax1
.
set_xticks
(
loc
)
ax1
.
set_xticklabels
(
xlabels
)
# ax1.yaxis.set_major_formatter(FuncFormatter(to_percent))
ax2
.
yaxis
.
set_major_formatter
(
FuncFormatter
(
to_percent
))
#
temp_rate = np.zeros(max_x_count)
#
for i in range(len(product_list)):
#
temp_rate += product_list[i]['data']
#
max_rate = np.max(np.hstack((temp_rate, cumulative['data'])))
temp_rate
=
np
.
zeros
(
max_x_count
)
for
i
in
range
(
len
(
product_list
)):
temp_rate
+=
product_list
[
i
][
'data'
]
max_rate
=
np
.
max
(
np
.
hstack
((
temp_rate
,
cumulative
[
'data'
])))
# ax2.set_ylim(0, max_rate + 15)
# 柱状图
...
...
@@ -79,12 +74,8 @@ def draw_month_return_chart(xlabels, product_list, cumulative):
ax2
.
plot
(
loc
,
cumulative
[
'data'
],
color
=
'#C6A774'
,
marker
=
''
,
linewidth
=
3
,
label
=
cumulative
[
'name'
])
ax2
.
legend
(
loc
=
'upper center'
,
fontsize
=
fontsize
)
# plt.show()
imgdata
=
BytesIO
()
fig
.
savefig
(
imgdata
,
format
=
'png'
)
imgdata
.
seek
(
0
)
# rewind the data
month_return_img
=
'data:image/png;base64,'
+
base64
.
b64encode
(
imgdata
.
getvalue
())
.
decode
(
'utf-8'
)
return
month_return_img
plt
.
show
()
plt
.
savefig
(
""
)
def
draw_contribution_chart
(
xlabels
,
product_list
,
cumulative
):
...
...
logs/tamp_course_order.log
View file @
2826bea6
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment