AI 文章摘要
以下对数据的预处理是基于jupyter notebook
1、读取一个csv文件内容(以安居客二手房源20条数据为例)
import pandas as pd
df = pd.read_csv('安居客房源.csv') #括号内是此文件夹存放地址
df.head(20) #显示了所有的数据20条

2、读取信息数量与类型
df.info()

3、删除重复列,以朝向为例
df1 = df.drop_duplicates(['朝向'],inplace=False) #不替换掉原始的df(inplace=False)
print(df1)

4、计数(计df1每一列有多少个数)
df1.count()

5、标识缺失值个数并从大到小排序(以上述csv文件内容为例)
total = df.isnull().sum().sort_values(ascending =False)
print(total)

6、用缺省值画条形图
from matplotlib import pyplot as plot
plot.rcParams['font.sans-serif'] = "Microsoft YaHei"
#设置 Matplotlib 中文显示的字体为 "Microsoft YaHei"。(微软雅黑)
total.plot.bar()

7、缺省值按百分比降序排列
percentage = (df.isnull().sum()/len(df)).sort_values(ascending = False) #ascending = False降序排列
print(percentage)

8、缺失率水平条形图展示
percentage.plot.barh()

9、把csv文件里的总价用箱线图表示
df['总价(万)'].plot.box()

10、总价直方图(纵坐标是此价格的个数)
df['总价(万)'].plot.hist()

11、面积与总价的密度图
df['面积(千米)'].plot.density()
df['总价(万)'].plot.density(secondary_y = True)

12、删除地区这一列
del df['地区']
print(df)

13、填充缺省值
df['室'] = df['室'].fillna(df['室'].mode()[0]) #众数填充
df['厅'] = df['厅'].fillna(df['厅'].median()) #缺失值用该列的中位数填充
df.info()

14、把总价按区间划分,统计区间数量
bins = [0,100,200,300,400]
binresult = pd.cut(df['总价(万)'],bins)
print(binresult.value_counts().sort_index(axis = 0))

15、加一列‘类型’,把总价再按区间分为多种类型
df['类型'] = pd.cut(df['总价(万)'],bins,labels = ['便宜', '正常', '昂贵', '非常贵'])
df.head(20)

16、使用饼图展示价格段分段计数
df['类型'].value_counts().plot.pie()

17、用映射把朝向一列的汉字变为数字来可以将这些数据用于算法模型训练和分析(机器只能识别数字),同时统计一下每个数字(朝向)多少个
direct_mapping={
'南':'1',
'东西':'2',
'南北':'3',
}
df['朝向'] = df['朝向'].str.strip().map(direct_mapping)
df['朝向'].value_counts()

18、把需要的有用的列再合并为一个新的列
df['房间(总数)'] = df['室'] + df['厅'] + df['卫']
pd.set_option('display.max_columns',None) #display.max_columns显示所有的列。因为存在表格过长列显示不全的情况,用此可以显示所有
df.head(20)

19、合并必要的列重新整合成一个DataFrame
reserve = ['总价(万)', '面积(千米)', '均价', '朝向', '房间(总数)']
data = df[reserve]
data.head(20)

20、生成数据集基本统计信息(计数(count)、均值(mean)、标准差(std)、最小值(min)、四分位数(25th百分位数、中位数、75th百分位数)、最大值(max))
data.describe()

21、在上述csv文件中,因为均价是带了单位的,因此此时需要转换为数字不带单位以让机器识别
data['均价'] = data['均价'].str.split('.',expand=True)[0] #以'.'分开取第一位
data.head(20)

22、数据缩放(消除特征间的量纲差异,加速模型收敛,提高模型性能和鲁棒性),区间通常[0,1]
(1)将数据转换为NumPy类型数组
from sklearn.preprocessing import MinMaxScaler
tmp = MinMaxScaler().fit_transform(data)
type(tmp)

(2)将经过缩放处理后的数据 tmp转换为 Pandas DataFrame并获取数据概要
data1 = pd.DataFrame(tmp, columns = reserve)
data1.describe()

23、将数据进行标准化处理,即使得数据的每个特征都满足均值为0,标准差为1的正态分布。
from sklearn.preprocessing import StandardScaler
tmp2 = StandardScaler().fit_transform(data)
data2 = pd.DataFrame(tmp2,columns = reserve)
data2.describe()

24、对数据进行归一化处理(通过将特征值缩放到统一的范围内,消除特征间的量纲差异,提高模型的性能、加速收敛速度,并增强模型对异常值的鲁棒性)
from sklearn.preprocessing import Normalizer
tmp3 = Normalizer().fit_transform(data)
data3 = pd.DataFrame(tmp3,columns = reserve)
data3.describe()

25、数据关系
covf = data3['总价(万)'].cov(data3['均价'])
print("总价与均价的协方差:",covf)
corf = data3['总价(万)'].corr(data3['均价'])
print("总价与均价的相关系数:",corf)

26、数据降维(减少数据维度、去除冗余信息、探索数据结构,加快模型训练速度,并简化数据以便更易理解和可视化,从而优化数据分析和建模的效率)
(1)将数据转化为NumPy类型数组
from sklearn.decomposition import PCA
pca = PCA(n_components=3) #n_components=3保留3个主要特征维度
x = data3.drop('朝向',axis = 1)
newX = pca.fit_transform(x)
type(newX)

(2)输出降维后的新的DataFrame
data4 = pd.DataFrame(newX)
data4.head(20)
