打开表
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 p2def 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.分割画布# 图1ax1 = fig.add_subplot(2,2,1)data2 = df2["收入"]histdef(ax1,data2)plt.title("清洗前的收入直方图")# 图2ax2 = fig.add_subplot(2,2,2)p2 = boxplotdef(ax2,data2)clear_f_df2 = clearFdef(p2)plt.title("清洗前的收入箱线图")# 图3ax3 = fig.add_subplot(2,2,3)data3 = clear_f_df2["收入"]histdef(ax3,data3)plt.title("清洗前的收入箱线图")# 图4ax4 = fig.add_subplot(2,2,4)p3 = boxplotdef(ax4,data3)clear_f_df2 = clearFdef(p3)plt.title("清洗前的收入箱线图")# 入口
if __name__ == "__main__":main()