【大数据】机器学习 -----关于data.csv数据集分析案例
打开表
import pandas as pd
df2 = pd.read_csv("data.csv",encoding="gbk")
df2.head()
查看数据属性(列标题,表形状,类型,行标题,值)
print("列标题:",df2.columns)
DataFrame表的形状,类型,行标题,值属性
print("表形状:",df2.shape)
print("类型:",df2.dtypes)
print("行标题:",df2.index)
print("值属性:",df2.values)
定性数据的分析
要求:统计每一类性别的人数
1.提取性别列
sex_v2 = df2["性别"]
sex_v2
2.统计男性人数
import numpy as np # 数据统计库
maleV2 = np.sum(sex_v2==1)
print("男性人数:",maleV2)
3.统计女性人数
femaleV2 = np.sum(sex_v2==0)
print("女性人数:",femaleV2)
将以上统计结果绘制成饼图
1.准备画布
import matplotlib.pyplot as plt # 绘图库
plt.rcParams["font.sans-serif"] = "SimHei"
2.准备数据
data = [maleV2,femaleV2]
dataLabel = ["男","女"]
3.绘制图形
plt.pie(data,labels=dataLabel)
4.保存和显示
plt.show()
统计不同性别的是否按期还款人数
useDF2 = df2.loc[:,["是否按期还款","性别"]] # 取出源表的两列数据
seleDF2 = useDF2.loc[useDF2["性别"]==1,:] # 取出性别为男的数据
统计不同性别的是否按期还款人数
useDF2 = df2.loc[:,["是否按期还款","性别"]] # 取出源表的两列数据
seleDF2 = useDF2.loc[useDF2["性别"]==1,:] # 取出性别为男的数据
提取男性中不能按期还款的人数
nopayDF2 = seleDF2.loc[seleDF2["是否按期还款"]==0,:] # 男性中不能按期还款
payDF2 = seleDF2.loc[seleDF2["是否按期还款"]==1,:] # 男性中能按期还款
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt # 绘图库
plt.rcParams["font.sans-serif"] = "SimHei"
df2 = pd.read_csv("data.csv",encoding="gbk")
def paydef(type_v2,vList):
payDict = {} # 用来存放不同的统计情况
for i in range(len(vList)):
# 统计不同性别的是否按期还款人数
useDF2 = df2.loc[:,["是否按期还款",type_v2]] # 取出源表的两列数据
seleDF2 = useDF2.loc[useDF2[type_v2]==vList[i],:] # 取出性别为男的数据
# 提取男性中不能按期还款的人数
nopayDF2 = seleDF2.loc[seleDF2["是否按期还款"]==0,:] # 男性中不能按期还款
payDF2 = seleDF2.loc[seleDF2["是否按期还款"]==1,:] # 男性中能按期还款
print(f"第{i+1}个统计结果:{nopayDF2.shape}")
# 将统计结果放到字典中
payDict[vList[i]] = [seleDF2.shape[0],payDF2.shape[0],
nopayDF2.shape[0],
payDF2.shape[0]/seleDF2.shape[0]]
# print(payDict)
return payDict
#
def changedef(d2,d3):
#
nDict = {}
for k in d2.keys():
nDict[d3[k]] = d2[k]
return nDict
# 绘图函数
def figdef(dataDict):
# 1.准备画布
plt.figure(figsize=(8,6),dpi=80)
# 2.准备数据
data = []
dataLabel = []
for k,v in dataDict.items():
data.append(v[1])
dataLabel.append(k)
# 3.绘制图形
plt.pie(data,labels=dataLabel)
# 4.保存和显示
plt.show()
# 主函数
def main():
type_v2 = input("请输入分类关键词:")
# 学生完成:将已婚_未婚,已育_未育的数据添加到字典中
typeDict = {"性别":{0:"女",1:"男"},"教育水平":{1:"高中及以下",2:"本科",3:"研究生",4:"研究生以上"},
"英语水平":{1:"四级以下",2:"四级",3:"六级",4:"六级以上"},
"已婚_未婚":{1:"已婚",2:"未婚"},
"已育_未育":{1:"已育",2:"未育"}}
# 统计性别的取值个数
vList = np.unique(df2[type_v2])
print(vList)
# 调用统计函数
payDict = paydef(type_v2,vList)
nDict = changedef(payDict,typeDict[type_v2])
print(nDict)
figdef(nDict)
# 入口
if __name__ == "__main__":
main()
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt # 绘图库
plt.rcParams["font.sans-serif"] = "SimHei"
df2 = pd.read_csv("data.csv",encoding="gbk")
df2.head()
定量数据分析–收入
incomeV2 = df2["收入"]
集中趋势(平均值,中位数,众数)
print("平均值:",incomeV2.mean())
print("中位数:",incomeV2.median())
print("众数:",incomeV2.mode())
分散程度(最大值,最小值,方差,标准差)
print("最小值:",incomeV2.min())
print("最大值:",incomeV2.max())
print("方差:",incomeV2.var())
print("标准差:",incomeV2.std())
处理异常值
1.提取异常值
f2 = p2["fliers"][0].get_ydata()
print(f2)
2.删除异常值
2-1:找到异常值对应的行索引
f_index = [] # 存放异常值,对应的行索引
for i in range(len(incomeV2)):
if incomeV2[i] in f2:
f_index.append(incomeV2.index[i])
print(f_index)
2-2:使用命令drop删除异常值
clear_f_df2 = df2.drop(f_index,axis=0)
print("清除异常值后:",clear_f_df2.shape)
直方图
1.绘制画布
plt.figure(figsize=(8,6),dpi=80)
2.准备数据
data = incomeV2.values
labelV2 = ["收入"]
3.绘制图形
h2 = plt.hist(data,10)
plt.title("收入直方图")
4.显示图形
plt.show()
print(h2)
箱线图
1.绘制画布
plt.figure(figsize=(8,6),dpi=80)
2.准备数据
data = incomeV2.values
labelV2 = ["收入"]
3.绘制图形
p2 = plt.boxplot(data)
plt.title("收入箱线图")
4.显示图形
plt.show()
print(p2)
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt # 绘图库
plt.rcParams["font.sans-serif"] = "SimHei"
df2 = pd.read_csv("data.csv",encoding="gbk")
df2.head()
# 函数1-直方图
def histdef(ax,data):
ax.hist(data,10)
# 函数2-箱线图
def boxplotdef(ax,data):
p2 = ax.boxplot(data)
return p2
def clearFdef(p2):
# 处理异常值
# 1.提取异常值
f2 = p2["fliers"][0].get_ydata()
incomeV2 = df2["收入"]
print(f2)
# 2.删除异常值
# 2-1:找到异常值对应的行索引
f_index = [] # 存放异常值,对应的行索引
for i in range(len(incomeV2)):
if incomeV2[i] in f2:
f_index.append(incomeV2.index[i])
print(f_index)
# 2-2:使用命令drop删除异常值
clear_f_df2 = df2.drop(f_index,axis=0)
print("清除异常值后:",clear_f_df2.shape)
return clear_f_df2
# 主函数
def main():
# 1.绘制画布
fig = plt.figure(figsize=(12,10),dpi=80)
# 2.分割画布
# 图1
ax1 = fig.add_subplot(2,2,1)
data2 = df2["收入"]
histdef(ax1,data2)
plt.title("清洗前的收入直方图")
# 图2
ax2 = fig.add_subplot(2,2,2)
p2 = boxplotdef(ax2,data2)
clear_f_df2 = clearFdef(p2)
plt.title("清洗前的收入箱线图")
# 图3
ax3 = fig.add_subplot(2,2,3)
data3 = clear_f_df2["收入"]
histdef(ax3,data3)
plt.title("清洗前的收入箱线图")
# 图4
ax4 = fig.add_subplot(2,2,4)
p3 = boxplotdef(ax4,data3)
clear_f_df2 = clearFdef(p3)
plt.title("清洗前的收入箱线图")
# 入口
if __name__ == "__main__":
main()