机器学习入门 04 数据探索+数据预处理
数据探索
1.统计量分析:
1.集中趋势的度量:
1.均值、中位数、众数
2.离散趋势的度量:
极值()
极差
标准差、方差
四分位数间距
案例data.csv文件在这
import pandas as pd
if __name__ == '__main__':
df = pd.read_csv(r"D:\ \python-sk\0408study\data.csv",index_col="年份")
#1.1 集中趋势的度量
gdp_mean = df['人均GDP(元)'].mean() # 均值
gdp_median = df['人均GDP(元)'].median() # 中位数
print(f"人均GDP均值${gdp_mean}")
print(f"人均GDP中位数${gdp_median}")
#2.离散趋势的度量
'''
极值()
极差
标准差、方差
'''
gdp_max = df['人均GDP(元)'].max()
gdp_min = df['人均GDP(元)'].min()
gdp_std = df['人均GDP(元)'].std()
gdp_var = df['人均GDP(元)'].var()
print(f"人均GDP最大{gdp_max}")
print(f"人均GDP最小{gdp_min}")
print(f"人均GDP标准差{gdp_std}")
print(f"人均GDP方差{gdp_var}")
print(f"人均GDP极差{gdp_max-gdp_min}")
#3.描述性统计分析
describe = df.describe()
print(describe)
describe.loc["range"] = describe.loc["max"] - describe.loc["min"]
print(describe)
2.相关性分析:
通过散点图 获取 相关系数
案例
import pandas as pd
if __name__ == '__main__':
df = pd.read_csv(r"D:\ \python-sk\0408study\BankData.csv",index_col="分行编号")
print(df.head())
# 指定默认字体(防止中文出现乱码)
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['FangSong'] # 指定‘仿宋’字体
# 相关性分析
# 1.画散点图
x = df['不良贷款(亿元)']
y = df['各项贷款余额']
import matplotlib.pyplot as plt
fig,ax = plt.subplots()
ax.scatter(x,y,alpha=0.5)
ax.set_xlabel('不良贷款')
ax.set_ylabel('各项贷款余额')
plt.show()
#2.多个指标,两两 进行 相关性分析 维度组合
import pandas.plotting as pd_plt
pd_plt.scatter_matrix(df,figsize=(5,5),marker="o",alpha=0.5)
plt.show()
#3.获取相关系数
#1.获取所有指标 两两 行相关性系数
df_corr = df.corr()
print(df_corr.head())
#2.获取第一列
print(df_corr['不良贷款(亿元)'].head())
#3.取不同列的直接的相关系数
print(df['不良贷款(亿元)'].corr(df['各项贷款余额']))
数据预处理
数据透视表 也可以对数据进行分析【聚合统计】
group by + agg
案例pivot_table_demo.xlsx文件在这
import pandas as pd
if __name__ == '__main__':
df = pd.read_excel(r"D:\ \python-sk\0411study\pivot_table_demo.xlsx")
print(df.head())
#1. 求 各个 学习中心的 已缴纳的学费的总合 sql =》 group by 学习中心 sun(已缴纳的学费)
# 1.用 pandas算子来做
df_res = df.groupby(by=['学习中心']).agg({"已缴纳学费":["sum"]})
df_res.columns = pd.Series(['已缴纳学费总和'])
print(df_res.head())
# 2.用数据透视表来做
import numpy as np
df_res1 = df.pivot_table(index="学习中心",values=["已缴纳学费"],aggfunc=np.sum)
print(df_res1)
# 2. 求 各个 学习中心的 报名人数 sql =》 group by 学习中心 count(已缴纳的学费)
# 1.用 pandas算子来做
df_res2 = df.groupby(by=['学习中心']).agg({"已缴纳学费": ["count"]})
df_res2.columns = pd.Series(['人数'])
print(df_res2.head())
# 2.用数据透视表来做
import numpy as np
df_res3 = df.pivot_table(index="学习中心", values=["已缴纳学费"], aggfunc=np.count_nonzero)
print(df_res3)
# 3.求 各个 学习中心的 报名人数、已缴纳的学费的总合
import numpy as np
df_res4 = df.pivot_table(index="学习中心", values=["已缴纳学费",'身份证号码'],
aggfunc={"已缴纳学费":np.sum,"身份证号码":np.count_nonzero})
print(df_res4)