八字命理旺衰是个基本问题,但也是最有争议的问题,这里的旺衰值是从各命书中搜索出来的,整理比较费劲,就不公开了,但是其他的数据生成,可参考下面的代码
#!/usr/bin/python3
# -*- coding:UTF-8 -*
'''
@auther:dzm
@date:2020-07-10 11:34
@description:
'''
import csv
import pandas as pd
from utils.db_config import engine_db
def get_data(engine):
sql ='select * from bazi_info'
df = pd.read_sql_query(sql,engine)
# newline=''是解决换行的问题,encoding='utf_8_sig'是解决excel打开乱码的问题
f = open('sample.csv','w',encoding='utf_8_sig',newline='')
csv_writer = csv.writer(f)
csv_writer.writerow(['bz','ws','yg','mg','hg','yz_b','yz_z','yz_y','mz_b','mz_z','mz_y','dz_b','dz_z','dz_y','hz_b','hz_z','hz_y'])
for index,row in df.iterrows():
print(row['year'],row['month'],row['day'],row['hour'])
features = extract_feature(row)
csv_writer.writerow(features)
f.close()
def extract_feature(row):
year_gan = row['year'][0]
year_zhi = row['year'][1]
month_gan = row['month'][0]
month_zhi = row['month'][1]
day_gan = row['day'][0]
day_zhi = row['day'][1]
hour_gan = row['hour'][0]
hour_zhi = row['hour'][1]
features = []
features.append(row['id'])
if row['wang_shuai']:
features.append(row['wang_shuai'])
else:
features.append(99)
features.append(encode(get_sk_relation_gan(day_gan,year_gan)))
features.append(encode(get_sk_relation_gan(day_gan, month_gan)))
features.append(encode(get_sk_relation_gan(day_gan, hour_gan)))
add_zhi_feature(day_gan, year_zhi,features)
add_zhi_feature(day_gan, month_zhi,features)
add_zhi_feature(day_gan, day_zhi,features)
add_zhi_feature(day_gan, hour_zhi,features)
return features
def encode(val):
if val =='生':
return 1
elif val =='助':
return 2
elif val =='克':
return 3
elif val =='泄':
return 4
elif val =='耗':
return 5
else:
return 0
def add_zhi_feature(gan,zhi,features):
ben, zhong, yu = get_sk_relation_zhi(gan, zhi)
features.append(encode(ben))
features.append(encode(zhong))
features.append(encode(yu))
return features
def get_sk_relation_gan(one,two):
if one == '甲' or one == '乙':
if two == '甲' or two == '乙':
return '助'
elif two == '丙' or two == '丁':
return '泄'
elif two == '戊' or two == '己':
return '耗'
elif two == '庚' or two == '辛':
return '克'
elif two == '壬' or two == '癸':
return '生'
elif one == '丙' or one == '丁':
if two == '甲' or two == '乙':
return '生'
elif two == '丙' or two == '丁':
return '助'
elif two == '戊' or two == '己':
return '泄'
elif two == '庚' or two == '辛':
return '耗'
elif two == '壬' or two == '癸':
return '克'
elif one == '戊' or two == '己':
if two == '甲' or two == '乙':
return '克'
elif two == '丙' or two == '丁':
return '生'
elif two == '戊' or two == '己':
return '助'
elif two == '庚' or two == '辛':
return '泄'
elif two == '壬' or two == '癸':
return '耗'
elif one == '庚' or two == '辛':
if two == '甲' or two == '乙':
return '耗'
elif two == '丙' or two == '丁':
return '克'
elif two == '戊' or two == '己':
return '生'
elif two == '庚' or two == '辛':
return '助'
elif two == '壬' or two == '癸':
return '泄'
elif one == '壬' or two == '癸':
if two == '甲' or two == '乙':
return '泄'
elif two == '丙' or two == '丁':
return '耗'
elif two == '戊' or two == '己':
return '克'
elif two == '庚' or two == '辛':
return '生'
elif two == '壬' or two == '癸':
return '助'
def get_sk_relation_zhi(gan,zhi):
if gan == '甲' or gan == '乙':
if zhi == '子':
return '生','',''
elif zhi == '丑':
return '耗','克','生'
elif zhi == '寅':
return '助','泄','耗'
elif zhi == '卯':
return '助','',''
elif zhi == '辰':
return '耗','生','助'
elif zhi == '巳':
return '泄','克','耗'
elif zhi == '午':
return '泄','耗',''
elif zhi == '未':
return '耗','助','泄'
elif zhi == '申':
return '克','生','耗'
elif zhi == '酉':
return '克','',''
elif zhi == '戌':
return '耗','泄','克'
elif zhi == '亥':
return '生','助',''
elif gan == '丙' or gan == '丁':
if zhi == '子':
return '克','',''
elif zhi == '丑':
return '泄','耗','克'
elif zhi == '寅':
return '生','助','泄'
elif zhi == '卯':
return '生','',''
elif zhi == '辰':
return '泄','克','生'
elif zhi == '巳':
return '助','耗','泄'
elif zhi == '午':
return '助','泄',''
elif zhi == '未':
return '泄','生','助'
elif zhi == '申':
return '耗','克','泄'
elif zhi == '酉':
return '耗','',''
elif zhi == '戌':
return '泄','助','耗'
elif zhi == '亥':
return '克','生',''
elif gan == '戊' or gan == '己':
if zhi == '子':
return '耗','',''
elif zhi == '丑':
return '助','泄','耗'
elif zhi == '寅':
return '克','生','助'
elif zhi == '卯':
return '克','',''
elif zhi == '辰':
return '助','耗','克'
elif zhi == '巳':
return '生','泄','助'
elif zhi == '午':
return '生','助',''
elif zhi == '未':
return '助','克','生'
elif zhi == '申':
return '泄','耗','助'
elif zhi == '酉':
return '泄','',''
elif zhi == '戌':
return '助','生','泄'
elif zhi == '亥':
return '耗','克',''
elif gan == '庚' or gan == '辛':
if zhi == '子':
return '泄', '', ''
elif zhi == '丑':
return '生', '助', '泄'
elif zhi == '寅':
return '耗', '克', '生'
elif zhi == '卯':
return '耗', '', ''
elif zhi == '辰':
return '生', '泄', '耗'
elif zhi == '巳':
return '克', '助', '生'
elif zhi == '午':
return '克', '生', ''
elif zhi == '未':
return '生', '耗', '克'
elif zhi == '申':
return '助', '泄', '生'
elif zhi == '酉':
return '助', '', ''
elif zhi == '戌':
return '生', '克', '助'
elif zhi == '亥':
return '泄', '耗', ''
elif gan == '壬' or gan == '癸':
if zhi == '子':
return '助','',''
elif zhi == '丑':
return '克','生','助'
elif zhi == '寅':
return '泄','耗','克'
elif zhi == '卯':
return '泄','',''
elif zhi == '辰':
return '克','助','泄'
elif zhi == '巳':
return '耗','生','克'
elif zhi == '午':
return '耗','克',''
elif zhi == '未':
return '克','泄','耗'
elif zhi == '申':
return '生','助','克'
elif zhi == '酉':
return '生','',''
elif zhi == '戌':
return '克','耗','生'
elif zhi == '亥':
return '助','泄',''
if __name__ == "__main__":
df = get_data(engine_db())
print(df)