数据分析实训

代入感很强,我已经是大数据分析工程师了。

#数据进行预处理,python,pandas
import pandas as pd
import numpy as np
df = pd.read_csv('./kc_house_data.csv')
df.head(10)

image

df.shape
(21613, 21)
df.describe()

image

df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 21613 entries, 0 to 21612
Data columns (total 21 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 id 21613 non-null int64
1 date 21613 non-null object
2 price 21613 non-null float64
.. ...... ..... ........ ....
19 sqft_living15 21613 non-null int64
20 sqft_lot15 21613 non-null int64
dtypes: float64(6), int64(14), object(1)
memory usage: 3.5+ MB
df.isnull()

image

import missingno as miss  #预处理可视化库
miss.bar(df)

image

#查看缺失值
df.isnull().sum()
id 0
... .
sqft_above 2
... .
sqft_lot15 0
dtype: int64
# 缺失值处理 均值填充
df['sqft_above']=df['sqft_above'].fillna(df['sqft_above'].mean())
df.isnull().sum()
id 0
... .
sqft_above 0
... .
sqft_lot15 0
dtype: int64
# 异常值的处理  3σ原则  箱线图
# 异常值处理都是针对列属性
price = df['price']
price_mean=price.mean()
# 每一个值和均值的差值的绝对值
price_abs=list(np.abs(price-price_mean))
# 标准差
std3=np.std(price)*3
# 计算是不是大于三倍的标准差
# 如果是,就认为这个数据是异常值,如果不是,就认为这个数据是正常值
for x in range(0,21613):
    if price_abs[x]>std3:
        if x < 1000:
            print('index:',x,'  unnormal value:',price[x])
        #均值替换
        price[x] == price_mean
index: 21 unnormal value: 2000000.0
index: 153 unnormal value: 2250000.0
index: 246 unnormal value: 2400000.0
index: 269 unnormal value: 2900000.0
index: 282 unnormal value: 2050000.0
index: 300 unnormal value: 3075000.0
index: 312 unnormal value: 2384000.0
index: 518 unnormal value: 2250000.0
index: 540 unnormal value: 2125000.0
index: 556 unnormal value: 1950000.0
index: 656 unnormal value: 3070000.0
index: 779 unnormal value: 2250000.0
index: 814 unnormal value: 2400000.0
#箱线图法 可视化
import matplotlib.pyplot as plt
plt.boxplot(df['price'])
plt.show()

image

#Pandas对数据进行切块 字典
price = np.array(list(df['price']))
grade = np.array(list(df['grade']))
# 他们差不多有线性关系
plt.figure()
plt.scatter(price,grade)

image

# numpy库求相关系数
cordata=np.corrcoef(price,grade)
print(cordata)

[[1. 0.66743426]
[0.66743426 1. ]]

# Pandas实现 
# 给Pandas数据分片
test=df.loc[:,['price','grade']]
test.head(5)

image

a=test.corr(method='pearson')
print(a)
price grade
price 1.000000 0.667434
grade 0.667434 1.000000
#PCA 主成分分析法
df1 = df
del df1['date']
from sklearn.decomposition import PCA
# 定义空模型
model_pca=PCA(4)   # 空的  # 4  #有了一个小孩
data_pca=model_pca.fit_transform(df1)
pd.DataFrame(data_pca).head()

image

# LDA算法
X = df1[[col for col in df1.columns if col!='price']]  # 数据  #题
Y = df1['grade']   # 标签    #答案
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
# 定义空模型
model_lda = LinearDiscriminantAnalysis(n_components=2)
df_lda = model_lda.fit_transform(X,Y)
df_lda = pd.DataFrame(data=df_lda)
df_lda.head()

image

posted @ 2022-04-17 20:49  anyiya  阅读(71)  评论(0编辑  收藏  举报