Commit 5451b8f1 by ligang

'任务3还没做出来'

parent 4b663343
#!/usr/bin/env python
#-*-coding:utf-8 -*-
import pymysql
import pandas as pd
import matplotlib.pyplot as plt
#任务1:查询某个用户是否有处于OVERDUE状态的进件
# Connect to the database
connection = pymysql.connect(host='localhost',
user='root',
password='root',
db='lesson14',
charset='utf8',
#cursorclass=pymysql.cursors.DictCursor
)
#- 任务一
#方法2 查询数据库
def get_od_apply(person_id):
try:
tag = False
with connection.cursor() as cursor:
# Read a single record
sql = "SELECT `applicant`, `status` FROM `apply` WHERE `applicant`=%s"
cursor.execute(sql, (person_id,))
info = cursor.fetchall()
for rs in info:
if rs[1] =='OVERDUE':
tag = True
return tag
return tag
finally:
connection.close()
#print(get_od_apply(20000001))
print(get_od_apply(20000035))
\ No newline at end of file
#!/usr/bin/env python
#-*-coding:utf-8 -*-
import pymysql
import pandas as pd
import matplotlib.pyplot as plt
#任务1:查询某个用户是否有处于OVERDUE状态的进件
# Connect to the database
connection = pymysql.connect(host='localhost',
user='root',
password='root',
db='lesson14',
charset='utf8',
#cursorclass=pymysql.cursors.DictCursor
)
#1、根据给定金融借款数据,分析出在已知借款人中,男女的具体比例。根据查询结果,画出饼图进行展示
def get_sex_persent():
try:
rs = []
sql_f = "SELECT count(*) as person_count FROM `person` WHERE `sex`=%s"
sex_f = 'FEMALE'
sql_m = "SELECT count(*) as person_count FROM `person` WHERE `sex`=%s"
sex_m = 'MALE'
with connection.cursor() as cursor:
# Read a single record
cursor.execute(sql_f, (sex_f))
r_f = cursor.fetchone()
cursor.execute(sql_m, (sex_m))
m_f = cursor.fetchone()
rs = [r_f,m_f]
return rs
finally:
connection.close()
# r = get_sex_persent()
# female_percent = format( r[1][0] /(r[1][0]+r[1][0])*100,'0.2f')#女性占比数
# male_percent = format(r[1][0] /( r[1][0]+r[1][0])*100,'0.2f')#男性占比数
# plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
# labels = ['FEMALE', 'MALE']
# sizes = [female_percent, male_percent]
# explode = (0, 0)
# plt.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%', shadow=False, startangle=100)
# plt.title("饼图示例-男女比例")
# plt.show()
#2、查询各种状态进件所占百分比,画出饼图进行展示
def get_status_persent():
try:
sql_status = "SELECT status FROM `apply` group by status"#按状态进行分组,有哪些状态
with connection.cursor() as cursor:
# Read a single record
cursor.execute(sql_status)
rs = cursor.fetchall()
r = []
dict_all = {}#定义字典 放入各个状态对应的数据
for status in rs:
sql = "SELECT count(*) as status_count FROM `apply` WHERE `status`=%s"
cursor.execute(sql,(status[0]))
f = cursor.fetchone()[0]
dict = {status[0]:f}
dict_all.update(dict)
r.append(dict_all)
return r
finally:
connection.close()
# r = get_status_persent()
# sum = 0
# lable = []
# size = []
# sizes = []
# for v in r:
# for dk,dv in v.items():
# sum +=dv#计算状态值的总和
# lable.append(dk)#状态名称
# size.append(dv)#每个状态 的值放到一个数据里面
#
# for n in size:#计算每个状态占用的比例
# sizes.append(round(n / sum * 100, 2))
#
# plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
# labels = lable
# explode = (0, 0,0,0)
# plt.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%', shadow=False, startangle=100)
# plt.title("饼图示例-男女比例")
# plt.show()
# 任务2
# 3根据进件状态,分析出男人逾期的概率大还是女人逾期的概率大
# TODO:查询一共有多少女性及男性用户
male_count = 0
female_count = 0
# 计算male_count与female_count值
def get_sex_status():
try:
rs = []
sql_f = "SELECT count(*) as person_count FROM `person` WHERE `sex`=%s"
female = 'FEMALE'
sql_m = "SELECT count(*) as person_count FROM `person` WHERE `sex`=%s"
male = 'MALE'
status = 'OVERDUE'
sql_stat = "SELECT count(*) as female_stat_count FROM `person` as `p` INNER JOIN `apply` as `a` on p.id = a.applicant WHERE `p`.`sex`=%s and a.status= %s"
#sql_m_stat = "SELECT count(*) as female_stat_count FROM `person` as p INNER join `apply` as a on p.id = a.applicant WHERE `p.sex`=%s and a.status= %s"
with connection.cursor() as cursor:
# Read a single record
cursor.execute(sql_f, (female))
r_female = cursor.fetchone()#女性用户
cursor.execute(sql_m, (male))
m_male = cursor.fetchone()#男性用户
cursor.execute(sql_stat, (female,status))
f_stat_count = cursor.fetchone()#逾期女性
cursor.execute(sql_stat, (male,status))
m_stat_count = cursor.fetchone()#逾期男性
rs = [r_female, m_male,f_stat_count,m_stat_count]
return rs
finally:
connection.close()
r = get_sex_status()
female_count = r[0][0]
male_count = r[1][0]
overdue_female_count = r[2][0]
print('有%d名男性用户'%r[1][0])
print('有%d名女性用户'%r[0][0])
# 通过pandas读取数据库,计算逾期女性用户数量
print('有%d名逾期女性用户'%overdue_female_count)
# 通过pandas读取数据库,计算逾期男性用户数量
overdue_male_count = r[3][0]
print('有%d名逾期男性用户'%overdue_male_count)
# 根据以上结果,分析出男人逾期的概率大还是女人逾期的概率大。
pro_male = overdue_male_count / male_count
pro_female = overdue_female_count / female_count
print('男人逾期概率为:%f'%pro_male)
print('男人逾期概率为:%f'%pro_female)
\ No newline at end of file
#!/usr/bin/env python
#-*-coding:utf-8 -*-
import pymysql
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
#任务1:查询某个用户是否有处于OVERDUE状态的进件
# Connect to the database
connection = pymysql.connect(host='localhost',
user='root',
password='root',
db='lesson14',
charset='utf8',
#cursorclass=pymysql.cursors.DictCursor
)
#任务3:
# 1 查询每个人申请的进件数,绘制直方图
""""
# TODO:绘制单人申请进件数量的直方图(通过sql语句实现)
# 通过sql语句查询每个applicant出现的次数(即每个人申请的进件数)
sql =
# 通过pandas读取
df = pd.read_sql(sql=sql,con=db)
# 绘制直方图
plt.hist()
plt.show()
"""
# 通过sql语句实现
def get_persent_applicant():
sql ="SELECT count(applicant) as cnt FROM `apply` group by applicant limit 50"
# 通过pandas读取
df = pd.read_sql(sql=sql,con=connection)
# 绘制直方图
x1 = np.random.normal(1, 8, 1)
plt.hist(df)
plt.show()
r = get_persent_applicant()
print(r)
#!/usr/bin/env python
#-*-coding:utf-8 -*-
import pymysql
import pandas as pd
import matplotlib.pyplot as plt
#任务1:查询某个用户是否有处于OVERDUE状态的进件
# Connect to the database
connection = pymysql.connect(host='localhost',
user='root',
password='root',
db='lesson14',
charset='utf8',
#cursorclass=pymysql.cursors.DictCursor
)
#1、查询各进件金额的大致分布
def get_status_amount():
try:
sql = "SELECT sum(amount)as amount,status FROM `apply` group by status"
with connection.cursor() as cursor:
# Read a single record
cursor.execute(sql,)
r = cursor.fetchall()
return r
finally:
connection.close()
# r = get_status_amount()
# print(r)
#2 、查询所有进件已偿还的总额度(代码及sql两种实现方式)
def get_repaid_amount(status):
try:
sql = "SELECT sum(amount) as amount FROM `apply` where status =%s"
with connection.cursor() as cursor:
# Read a single record
cursor.execute(sql, (status))
r = cursor.fetchone()
return r
finally:
connection.close()
#r = get_repaid_amount('REPAID')
# 3、查询手机号为xxx的用户的所有进件
def get_apply_detail(phone):
try:
sql = "SELECT a.* FROM `person` as `p` INNER JOIN `apply` as `a` on p.id = a.applicant WHERE `p`.`phone`=%s"
with connection.cursor() as cursor:
# Read a single record
cursor.execute(sql,(phone))
r = cursor.fetchall()
return r
finally:
connection.close()
#r = get_apply_detail(1342416782)
#print(r)
#4 找出所有申请中状态(IN_PROGRESS)的进件,按金额重大到小排序
def get_in_progress(status):
try:
sql = "SELECT a.* FROM `apply` as `a` where `a`.`status`=%s order by a.amount desc"
with connection.cursor() as cursor:
# Read a single record
cursor.execute(sql, (status))
r = cursor.fetchall()
return r
finally:
connection.close()
#r = get_in_progress('IN_PROGREESS')
#print(r)
# 5 查询所有拥有申请中状态(IN_PROGRESS)的进件的男性用户的姓名与申请金额,按金额重大到小排序
def get_female_amount(status,sex):
try:
sql = "SELECT p.id,p.name,a.amount FROM `person` as `p` INNER JOIN `apply` as `a` on p.id = a.applicant WHERE `p`.`sex`=%s and a.status= %s order by a.amount desc "
with connection.cursor() as cursor:
# Read a single record
cursor.execute(sql, (sex,status))
r = cursor.fetchall()
return r
finally:
connection.close()
#r = get_female_amount('IN_PROGREESS','MALE')
#print(r)
# 6、绘制某个号码联系过的所有人的性别的分布情况
def get_sex_distribution(phone):
# 通过sql语句查询phone的联系人的sex值
sql = "SELECT p.sex,count(*)as cnt FROM `call` as `c` LEFT JOIN `person` as `p` on c.to = p.phone WHERE `c`.`from`=%s and p.sex is not null group by p.sex"
with connection.cursor() as cursor:
cursor.execute(sql,(phone))
r = cursor.fetchall()
# 保存sex一列的值,以list形式返回
return r
# 校验
# sd = get_sex_distribution(1412429664)
# size =[]
# label=[]
# for v,k in sd:
# size.append(k)
# label.append((v))
# plt.pie(size,labels=label,autopct = '%3.1f%%')
# plt.axis('equal')
# plt.show()
# 7 绘制单人申请进件数量的分布圆饼图
def get_person_applicant(applicant):
# 通过sql语句查询phone的联系人的sex值
sql = "SELECT status,count(*)as cnt FROM `apply` WHERE `applicant`=%s group by status "
with connection.cursor() as cursor:
cursor.execute(sql,(applicant))
r = cursor.fetchall()
# 保存sex一列的值,以list形式返回
return r
#r = get_person_applicant(20000001)
r = get_person_applicant(20000002)
l = len(r)
sum = 0
lable = []
size = []
sizes = []
str =[]
for vl in r:
sum += vl[1]
lable.append(vl[0])
size.append(vl[1])
str.append(0)
for n in size:#计算每个状态占用的比例
sizes.append(format(n / (sum) * 100, '0.2f'))
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
labels = lable
explode = (str)
plt.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%', shadow=False, startangle=100)
plt.title("饼图示例-单人申请进件数量比例")
plt.show()
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment