统计年龄分布情况(5岁的间隔统计),绘制出年龄分布图。
Posted 小南蓬幽
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了统计年龄分布情况(5岁的间隔统计),绘制出年龄分布图。相关的知识,希望对你有一定的参考价值。
2. 使用最小二乘法进行贷款额度预测:
给定训练样本集合如下:
求解:当工资18000、年龄30时,额度是多少?给出代码与运行结果图
难点在于有两个参数 画三维图需要引入mpl_toolkits.mplot3d
最小二乘法公式不变
p = (X^TX)^-1 X^T Y
在画图时要分别为x,y,z轴赋值,并写上坐标标签,由于数据的小数位太多,超出位数范围会报错,所以要将小数变为整数!
import numpy as np
from numpy import mat
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D # 画三维图
if __name__ == "__main__":
# 1 获得x,y数据# ##########
X = np.array([[4000, 25], [8000, 30], [5000, 28], [7500, 33], [12000, 40]])
Y = np.array([20000, 70000, 35000, 50000, 85000])
# 2 矩阵形式转换X, Y
Y_mat = mat(Y).T
X_temp = np.ones((5, 3))
X_temp[:, 0] = X[:, 0]
X_temp[:, 1] = X[:, 1]
#print(X_temp)
X_mat = mat(X_temp)
# print(X_mat)
# 3 利用解析法 p = (X^TX)^-1 X^T Y
pamaters = (((X_mat.T) * X_mat).I) * X_mat.T * Y_mat
#print(pamaters)
# 4 显示
fig1 = plt.figure()
ax1 = Axes3D(fig1)
x = X[:, 0]
y = X[:, 1]
z = Y
Z = X_mat * pamaters
#print(Z)
n = list(map(int, Z[:, 0])) # Z中的数的位数超出范围
#print(n)
ax1.scatter3D(x, y, z, c=blue)
ax1.plot3D(x, y, n, c=red)
plt.title("贷款额度预测图") # 设置图表标题
plt.xlabel("工资") # 设置x坐标轴标签
plt.ylabel("年龄") # 设置y坐标轴标签
ax1.set_zlabel("额度")# 设置z坐标标签
plt.rcParams[font.sans-serif] = [Kaiti] # 用来正常显示中文(黑体)常用字体包括: Kaiti-楷体; FangSong-仿宋; Microsoft YaHei-微软雅黑
plt.rcParams[axes.unicode_minus] = False # 用来正常显示负号
plt.show()
a = eval(input("请输入工资:"))
b = eval(input("请输入年龄: "))
s = np.array([[a, b]])
# print(s)
s_temp = np.ones((1, 3))
s_temp[:, 0] = s[:, 0]
s_temp[:, 1] = s[:, 1]
#print(s_temp)
s_mat = mat(s_temp)
m = s_mat * pamaters
print("贷款额度为:", m)
三维散点和折线图
输入工资和年龄即可输出贷款额度!
3.统计年龄分布情况(5岁的间隔统计),绘制出年龄分布图。
data = data.copy()
data[年龄] = [dt.datetime.today().year - i.year for i in pd.to_datetime(data["出生年月"])]
如果不添加data.copy()会报错
SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame.Try using .loc[row_indexer,col_indexer] = value instead
完整代码:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import datetime as dt
# 读取 CSV文件生成DataFrame
df = pd.read_csv(D:/luohu3.csv)
print(df)
print(df.info()) # 获取 DataFrame 的摘要
print(df.head()) # 根据位置返回对象的前n行信息(默认值为5) ,用于快速测试数据集
print(df.describe()) # 生成描述性统计数据,总结数据集分布的集中趋势,分散和形状,不包括 NaN值。
# 数据预处理
data = df.dropna(0) # 删除所有包含空值的行或列
print(data.info())
# data = df.drop_duplicates()
# print(data.info())
# 获取年龄数据
data = data.copy()
data[年龄] = [dt.datetime.today().year - i.year for i in pd.to_datetime(data["出生年月"])] # 日期数据如何处理
x = data["年龄"]
# 设置统计分值段范围
print(data.describe()) # 查看最大值与最小值
bins = np.arange(35, 65, 5)
time_bins = pd.cut(x, bins) # 对数据进行离散化处理
print(time_bins)
# 按积分分割区间进行分组统计
df1 = data.groupby(time_bins)["年龄"].count()
print(df1)
# 绘制图形
df1.plot(kind="bar", rot=0)
plt.rcParams[font.sans-serif] = [Kaiti] # 用来正常显示中文(黑体)常用字体包括: Kaiti-楷体; FangSong-仿宋; Microsoft YaHei-微软雅黑
plt.rcParams[axes.unicode_minus] = False
plt.show()
以上是关于统计年龄分布情况(5岁的间隔统计),绘制出年龄分布图。的主要内容,如果未能解决你的问题,请参考以下文章