python数据获取-从数据库获取因变量数据并进行数据汇总统计描述

##从数据库获取数据并进行数据汇总统计描述##

import MySQLdb #调用连接sql数据的模块

from pandas import DataFrame

##连接数据库,需要知道主机地址、账号、密码、库名、端口、编码模式

conn =

MySQLdb.connect(host='XXXX',user='XXXX',passwd='XXXX',db='XXXX',port=XXXX,charset='utf8')

#使用cursor()方法获取操作游标

con = conn.cursor()

##撰写查询语句

select_sql = '''SELECT a.USER_ID,sum(

case when a.CLEAR_DATE is null then

if(TIMESTAMPDIFF(day,date(a.INTEREST_DATE),date(now()))<180,TIMESTAMPDIFF(day,date(a.INTEREST_DATE),date(now())),180)

*a.INVEST_AMOUNT#如果180内进行了清算或者转让则以时间差作为持有时间,否则以180天作为持有时间

when a.CLEAR_DATE is not null then

if(TIMESTAMPDIFF(day,date(a.INTEREST_DATE),date(CLEAR_DATE))<180,TIMESTAMPDIFF(day,date(a.INTEREST_DATE),date(CLEAR_DATE)),180)

*a.INVEST_AMOUNT end)*1.8/36500 as投资贡献度

from dm_tbl_investsplitinfo a,dm_tbl_userinfo b

where a.USER_ID=b.USER_ID

and INTEREST_DATE is not null #排除募集中的记录

and

TIMESTAMPDIFF(day,date(b.FIRST_INVEST_TIME),date(now()))>=180#只要首投时间在半年以前的用户,防止新增投资用户造成的影响

and

TIMESTAMPDIFF(day,date(b.FIRST_INVEST_TIME),date(a.INVEST_DATE))<=180#限制投资时间在首投之后的180天内

and b.HUIYUAN_TYPE in ('个人会员','羊毛党')

and USER_STATE='正常'#限制为正常状态用户,非冻结

GROUP BY a.USER_ID;'''

#使用execute方法执行SQL语句,相当于给sql写一个分号

con.execute(select_sql)

##用fetchall接受所有结果数据,注意fetchall获取的数据均为tuple型,需要进一步处理才行

temp_data = con.fetchall()

#提交到数据库,执行所有sql语句

conn.commit()

#关闭数据库链接

conn.close()

data =

DataFrame(list(temp_data),columns=['user_id','contributions'])

#将DF的decimal类型转化为float型,以便统计分析数据

data['contributions'] = data['contributions'].astype('float')

###利用pandas的DF汇总统计描述数据特征

print(data['contributions'].describe())

你可能感兴趣的:(python数据获取-从数据库获取因变量数据并进行数据汇总统计描述)