1.项目背景
蓝莓在全球范围内备受欢迎,其独特的风味和丰富的营养价值令消费者为之倾倒。蓝莓生长对适宜气候和土壤的依赖,该数据集包括蓝莓的生长情况、花期内的温度以及蜜蜂的密度(表示授粉),本项目通过三个模型对该数据进行了分析,得到适合蓝莓的生长环境,以及预测了蓝莓的产量,该项目能够帮助读者更好的理解数据分析的流程,以及建立一些常见的预测模型和聚类模型。
2.数据说明
字段名 描述 id 蓝莓唯一标识 Clonesize 蓝莓克隆平均大小,单位:m² Honeybee 蜜蜂密度(单位:蜜蜂/m²/分钟) Bumbles 大型蜜蜂密度(单位:大型蜜蜂/m²/分钟) Andrena 安德烈纳蜂密度(单位: 安德烈纳蜂/m²/分钟) Osmia 钥匙蜂密度(单位:钥匙蜂/m²/分钟) MaxOfUpperTRange 花期内最高温带日平均气温的最高记录, 单位: °C MinOfUpperTRange 花期内最高温带日平均气温的最低记录, 单位: °C AverageOfUpperTRange 花期内最高温带日平均气温, 单位: °C MaxOfLowerTRange 花期内最低温带日平均气温的最高记录, 单位: °C MinOfLowerTRange 花期内最低温带日平均气温的最低记录, 单位: °C AverageOfLowerTRange 花期内最低温带日平均气温, 单位: °C RainingDays 花期内降雨量大于 0 的日数总和, 单位: 天 AverageRainingDays 花期内降雨日数的平均值, 单位: 天 fruitset 果实集 fruitmass 果实质量 seeds 种子数 yield 产量 3.Python库导入及数据读取
In [1]:
# 导入需要的库 import pandas as pd import numpy as np import seaborn as sns import matplotlib.pyplot as plt from sklearn.cluster import KMeans from sklearn.preprocessing import StandardScaler from sklearn.metrics import silhouette_score import statsmodels.api as sm from statsmodels.stats.outliers_influence import variance_inflation_factor from sklearn.decomposition import PCA from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_squared_error, r2_score import scipy.stats as stats from sklearn.ensemble import RandomForestRegressor from sklearn.model_selection import RandomizedSearchCVIn [2]:
# 读取数据 train_data = pd.read_csv("/home/mw/input/data5876/train.csv") test_data = pd.read_csv("/home/mw/input/data5876/test.csv")4.数据预览及数据处理
4.1数据预览
In [3]:
# 查看数据维度 print('训练集纬度:') print(train_data.shape) print('-'*50) print('测试集纬度:') print(test_data.shape)训练集纬度: (15289, 18) -------------------------------------------------- 测试集纬度: (10194, 17)In [4]:
# 查看数据信息 print('训练集信息:') print(train_data.info()) print('-'*50) print('测试集信息:') print(test_data.info())训练集信息: <class 'pandas.core.frame.DataFrame'> RangeIndex: 15289 entries, 0 to 15288 Data columns (total 18 columns): id 15289 non-null int64 clonesize 15289 non-null float64 honeybee 15289 non-null float64 bumbles 15289 non-null float64 andrena 15289 non-null float64 osmia 15289 non-null float64 MaxOfUpperTRange 15289 non-null float64 MinOfUpperTRange 15289 non-null float64 AverageOfUpperTRange 15289 non-null float64 MaxOfLowerTRange 15289 non-null float64 MinOfLowerTRange 15289 non-null float64 AverageOfLowerTRange 15289 non-null float64 RainingDays 15289 non-null float64 AverageRainingDays 15289 non-null float64 fruitset 15289 non-null float64 fruitmass 15289 non-null float64 seeds 15289 non-null float64 yield 15289 non-null float64 dtypes: float64(17), int64(1) memory usage: 2.1 MB None -------------------------------------------------- 测试集信息: <class 'pandas.core.frame.DataFrame'> RangeIndex: 10194 entries, 0 to 10193 Data columns (total 17 columns): id 10194 non-null int64 clonesize 10194 non-null float64 honeybee 10194 non-null float64 bumbles 10194 non-null float64 andrena 10194 non-null float64 osmia 10194 non-null float64 MaxOfUpperTRange 10194 non-null float64 MinOfUpperTRange 10194 non-null float64 AverageOfUpperTRange 10194 non-null float64 MaxOfLowerTRange 10194 non-null float64 MinOfLowerTRange 10194 non-null float64 AverageOfLowerTRange 10194 non-null float64 RainingDays 10194 non-null float64 AverageRainingDays 10194 non-null float64 fruitset 10194 non-null float64 fruitmass 10194 non-null float64 seeds 10194 non-null float64 dtypes: float64(16), int64(1) memory usage: 1.3 MB NoneIn [5]:
# 查看各列缺失值 print('训练集信息缺失情况:') print(train_data.isna().sum()) print('-'*50) print('测试集信息缺失情况:') print(test_data.isna().sum())训练集信息缺失情况: id 0 clonesize 0 honeybee 0 bumbles 0 andrena 0 osmia 0 MaxOfUpperTRange 0 MinOfUpperTRange 0 AverageOfUpperTRange 0 MaxOfLowerTRange 0 MinOfLowerTRange 0 AverageOfLowerTRange 0 RainingDays 0 AverageRainingDays 0 fruitset 0 fruitmass 0 seeds 0 yield 0 dtype: int64 -------------------------------------------------- 测试集信息缺失情况: id 0 clonesize 0 honeybee 0 bumbles 0 andrena 0 osmia 0 MaxOfUpperTRange 0 MinOfUpperTRange 0 AverageOfUpperTRange 0 MaxOfLowerTRange 0 MinOfLowerTRange 0 AverageOfLowerTRange 0 RainingDays 0 AverageRainingDays 0 fruitset 0 fruitmass 0 seeds 0 dtype: int64In [6]:
# 查看重复值 print('训练集信息重复情况:') print(train_data.duplicated().sum()) print('-'*50)