数据可视化训练第三天(富豪借钱问题可视化)

题目

一个穷人到富人那里去借钱,原以为富人不愿意,哪知富人一口答应了下来,
但提出了如下条件:

  • 在30天中,富人第一天借给穷人1万元,第二天借给2万,以后每天所借的钱数都比上一天的多一万;
  • 但 借钱第一天,穷人还1分钱,第二天还2分钱,以后每天所还的钱数都是上一天的两倍。
  • 30天后互不相欠,

穷人听后觉得挺划算,本想定下来,但又想到富人是个吝啬出了名的,怕上当,所以很为难。

分析是否应该借钱,并绘图表示看是否存在相交点,看规定多少天划算

import numpy as np
import matplotlib.pyplot as plt

def arithmetic_sequence_sum(begin,end,n): 
    sum=(begin+end)*n/2
    return sum
    
def proportional_sequence_sum(begin,q,n):
    sum=(begin*(1-q**n))/(1-q)
    return sum

#验证求和是否正确
#print(proportional_sequence_sum(1,2,30))
#print(arithmetic_sequence_sum(1,30,30))

#借钱是一个等差数列,1开始,30结束,元素为30个
borrows=np.linspace(1,30,num=30)

#还钱是一个等比数列,从1(2^0)开始,到2^29次方结束,注意单位是分
repayments=np.logspace(0,29,num=30,base=2)

#记录每一天的借钱总数
borrows_sum=[0]
#记录每一天的还钱总数
repayments_sum=[0]

for borrow in borrows:
    sum=borrows_sum[-1]+borrow
    borrows_sum.append(sum)
    
for repayment in repayments:
    sum=(repayments_sum[-1]+repayment*0.01)#转换单位
    repayments_sum.append(sum)

borrows_sum=np.array(borrows_sum)
repayments_sum=np.array(repayments_sum)

#可视化分析
fig,ax=plt.subplots()
#后面的数据太大,我们用前16天的数据就可以
x_values=np.arange(1,16)

ax.scatter(x_values,borrows_sum[1:16],label='borrow')
ax.scatter(x_values,repayments_sum[1:16],label='repay')

ax.set_title("Is the rich kind to the poor?",fontsize=16)
ax.set_xlabel("day",fontsize=14)
ax.set_ylabel("money/rmb",fontsize=14)
#显示所有刻度
ax.set_xticks((range(1,17)))

ax.legend()
plt.show()

#利用numpy where计算亏钱的时间
diff=borrows_sum-repayments_sum
text=np.where(diff<0)
print(f"从{text[0][0]}天开始亏钱")

这是一个离散的问题,我们考虑画出散点图,从图中可以看出,从14天开始亏本

在这里插入图片描述

总结

学习到numpy如何生成等差等比数列
如何设置刻度
使用np.where函数传递表达式选择符合要求的数组

np.where(condition, [True_value], [False_value])

condition可以是表达式,也可以是布尔数组

  • 10
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值