目的:
利用python构造一个小程序,可以连接数据库,实现通过电话查看其订单情况、批量显示某时间段内各分校名单量、转化率、报名金额等信息功能。
步骤
1,在mysql构造相关数据库,将订单、市场活动等数据导入
2,利用python编写程序
3,使用pyinstall将py文件打包成exe文件
具体代码
import xlrd
import pymysql
import matplotlib.pyplot as plt
import matplotlib
import numpy as np
import pandas as pd
from pandas.plotting import register_matplotlib_converters
#打开文件,暂时无用,为后续利用文件内容进行数据提取做准备
def open_excel():
try:
book = xlrd.open_workbook("ceshi.xlsx") # 文件名,把文件与py文件放在同一目录下
except:
print("open excel file failed!")
try:
sheet = book.sheet_by_name("Sheet1") # execl里面的worksheet1
return sheet
except:
print("locate worksheet in excel failed!")
#命令1 连接数据库 根据电话号码获取其订单信息,并绘制缴费变化图
def query_data(num,plot1=0):
db = pymysql.connect(host='192.168.121.17',
port=3306,
user='user',
passwd='151140124',
db='mysq',
charset='utf8')
cursor = db.cursor()
query = "select * from dingdan_message where 电话=%d"%int(num) # 获取订单表中记录数
cursor.execute(query) # 执行sql语句
data = cursor.fetchall()
columnDes = cursor.description # 获取连接对象的描述信息
cursor.close()
columnNames = [columnDes[i][0] for i in range(len(columnDes))]
df = pd.DataFrame([list(i) for i in data], columns=columnNames)
#绘图
if plot1==1:
matplotlib.rcParams['font.family'] = 'SimHei'
register_matplotlib_converters()
plt.plot(df['缴费日期'], df['实收金额'])
register_matplotlib_converters()
for i in range(len(df['产品'])):
plt.annotate(df['产品'][i]+df['班型'][i],xy=(df['缴费日期'][i],df['实收金额'][i]),xytext=(df['缴费日期'][i],df['实收金额'][i]+4000)
,arrowprops=dict(arrowstyle='->'))#facecolor='red', shrink=0.01
plt.xlabel("缴费日期(s)")
plt.ylabel("实收金额(m)")
plt.title("产品变化图")
plt.gcf().autofmt_xdate()
plt.show()
plt.close()
#print(df['缴费日期'], df['应收金额'])
print(df.shape[0])
#if df
return(df.shape[0])
#命令2 获取电话的tq通话记录信息
def query_data2(num):
db = pymysql.connect(host='192.168.121.17',
port=3306,
user='user',
passwd='151140124',
db='mysq',
charset='utf8')
cursor2 = db.cursor()
query2 = "select * from new_telephone_messages where 访客电话=%d" % num # 获取订单表中记录数
cursor2.execute(query2) # 执行sql语句
data2 = cursor2.fetchall()
columnDes2 = cursor2.description # 获取连接对象的描述信息
cursor2.close()
columnNames2 = [columnDes2[i][0] for i in range(len(columnDes2))]
df2 = pd.DataFrame([list(i) for i in data2], columns=columnNames2)
print(df2['访客电话'])
#查询3获取时间段内各个订单的的具体回访情况
def mingdan_chaxun(starttime,endtime):
db = pymysql.connect(host='192.168.121.17',
port=3306,
user='user',
passwd='151140124',
db='mysq',
charset='utf8')
cursor3 = db.cursor()
query3 = "select * from customer where 新建日期>%s and 新建日期< %s"%(starttime,endtime) # 获取订单表中记录数
query4 = 'SELECT a.电话号码1,a.客户姓名,b.* FROM (SELECT * FROM customer WHERE 新建日期>%s AND 新建日期< %s) a ' \
'LEFT JOIN (SELECT 电话,COUNT(电话) AS `缴费次数`,SUM(实收金额),省 FROM dingdan_message GROUP BY 电话) b ' \
'on a.电话号码1=b.电话' \
% (starttime, endtime)#查询转化情况
query5 = 'SELECT a.电话号码1,a.所属部门,a.客户姓名,b.*,c.* FROM (SELECT * FROM customer WHERE 新建日期>%s AND 新建日期< %s) a ' \
'LEFT JOIN (SELECT 电话,COUNT(电话) AS `缴费次数`,SUM(实收金额) as 实收金额总,省 FROM dingdan_message GROUP BY 电话) b ' \
'on a.电话号码1=b.电话' \
' left join (select 访客电话,COUNT(访客电话) 通话次数,SUM(IF(`是否接通`="已接通",1,0)) 接通次数,SUM(HOUR(通话时长))*60+SUM(MINUTE(通话时长)) 通话时长 from new_telephone_messages group by 访客电话)c ' \
'on a.电话号码1=c.访客电话' \
% (starttime, endtime)#查询转化及回访情况
print(query5)
cursor3.execute(query5) # 执行sql语句
data4 = cursor3.fetchall()
columnDes4 = cursor3.description # 获取连接对象的描述信息
columnNames4 = [columnDes4[i][0] for i in range(len(columnDes4))]
df4 = pd.DataFrame([list(i) for i in data4], columns=columnNames4)
xinzengdianhuashu=df4.shape[0]
df_zhuanhuadingdan=df4['实收金额总'].dropna(axis=0).shape[0]#这里存在缴费金额即视为转化,后续可设置限值如300
tonghuashu=df4['通话次数'].dropna(axis=0).sum()
tonghuashu_avg=tonghuashu/xinzengdianhuashu
jietongshu = df4['接通次数'].dropna(axis=0).sum()
jietongshu_avg=jietongshu/xinzengdianhuashu
tonghuashichang=df4['通话时长'].dropna(axis=0).sum()
huifangshichang_avg=tonghuashichang/xinzengdianhuashu
print('这段时间内新增电话 %d 个,转化 %d 个,转化率%f。通话次数%d个,平均每个电话通话%f次。接通次数%d,平均每个电话接通次数%f,回访时间%f分钟'
%(xinzengdianhuashu,df_zhuanhuadingdan,df_zhuanhuadingdan/xinzengdianhuashu,tonghuashu,tonghuashu_avg,jietongshu,jietongshu_avg,huifangshichang_avg))
print("jieshu")
cursor3.close()
return(df4)
def save(data,dir='shuju.xlsx'):
dir_root='D:\\python\\我的py\\python学习\\中公工作\\'
dir=dir_root+dir
data.to_excel(dir)
def main():
#1导入到mysql,最好采用sqllog
#2启动连接
#2查询 通过电话查询其报名情况
num1=int(13001178588)#15222252191
#message=query_data2(num1)#查询电话记录
chaxunleixing=int(input("请输入查询数字(1-电话查询;2-名单查询;3-订单查询;4-电话记录查询):"))
if chaxunleixing == 1:
n = 0
while n < 1:
num = input("请输入电话号码:")
if len(num) != 11:
print("输入错误")
continue
print("输入成功")
a=input("是否绘图(是输入1,否输入0):")
message = query_data(int(num), int(a))
break
elif chaxunleixing == 2:
while 1 > 0:
starttime = input("请输入开始时间(格式为'yyyy-mm-dd'):")
if len(starttime) != 10:
print("起始时间输入错误,请重新输入")
continue
endtime = input("请输入结束时间(格式为'yyyy-mm-dd'):")
if len(endtime) != 10:
print("结束时间输入错误,请重新输入")
continue
starttime = "'" + starttime + "'"
endtime = "'" + endtime + "'"
mingdan_message = mingdan_chaxun(starttime, endtime)
save(mingdan_message, 'shuju')
break
elif chaxunleixing == 3:
while 1 > 0:
starttime = input("请输入开始时间(格式为'yyyy-mm-dd'):")
if len(starttime) != 10:
print("起始时间输入错误,请重新输入")
continue
endtime = input("请输入结束时间(格式为'yyyy-mm-dd'):")
if len(endtime) != 10:
print("结束时间输入错误,请重新输入")
continue
starttime = "'" + starttime + "'"
endtime = "'" + endtime + "'"
dingdan_message = dingdan_chaxun(starttime, endtime)
save(dingdan_message, 'shuju')
break
else:
print("代号输入错误,请重新运行程序。")
#mingdan_message = mingdan_chaxun(starttime,endtime)
#message = query_data1(num)#获取其名单回访数据
#3可视化 做表,绘图
#plot 绘制产品变化图
#plot2 绘制意向变化图
#plot3展示该学员的整体情况表 包含通话次数,平均通话时间等
#4条件筛选
#通过条件设置找出符合条件电话,并汇总表示
#5保存
if __name__=='__main__':
main()
运行后,会出现选择界面,通过输入不同数字进行后续查询。
然后便是利用pyinstall将该py文件打包,具体方式见
https://editor.csdn.net/md/?articleId=93140409