1:探索性分析代码流程

   2:数字特征处理

   3:非数字类型的特征处理

   4:特征拼接

   5:标签处理

   6:数据集划分

   7:模型评价

   8:数据可视化

仅供大家参考学习,有不足之处请多多包涵与批评,指导指导我,切勿完全照搬采用,需要源码请下载压缩包。

import osimport numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from imblearn.over_sampling import SMOTE
from matplotlib import style, test
import seaborn as sns
from sklearn import preprocessing, __all__
from sklearn.model_selection import train_test_split
from sklearn.linear_model import  LogisticRegression # 逻辑回归from sklearn.ensemble import RandomForestClassifier # 随机森林
from sklearn import tree # 决策树
from sklearn import metrics # 评价的指标style.use('ggplot')     # 设置图片显示的主题样式
# 解决matplotlib显示中文问题
plt.rcParams['font.sans-serif'] = ['SimHei']  # 指定默认字体
plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题# 1.探索性数据分析的流程
def inspect_data(df_data):# 1.1查看数据的前5行print("查看数据的前5行")print(df_data.head())print("*"*60)# 1.2查看数据的后5行print("查看数据的后5行")print(df_data.tail())print("*"*60)#  1.3显示数据的基本信息print("显示数据的基本信息")print(df_data.info())print("*"*60)# 1.4显示数据的统计信息print("显示数据的统计信息")print(df_data.describe())print("*" * 60)# 1.5查看空值NANprint("判断哪些“列”存在缺失值")print(df_data.isnull().any()) # 判断哪些“列”存在缺失值print("*" * 60)print("找出含有nan的所有行")print(df_data[df_data.isnull().T.any().T]) # 找出含有nan的所有行print("*" * 60)# 1.6空值处理,删除空值所在的行print("空值处理,删除空值所在的行")print(df_data.dropna())print("*" * 60)""""axis":0代表行操作(默认),1代表列操作“how”:any表示只有空值就删除(默认),all表示全部为空值才删除”inplace“:False表示返回新的数据集,即生成一个副本数据集(默认),True表示在原数据集上操作"""# 2. 数据的分析及画图(pandas)
def analysis_data(df_data):use_cols = ['Date', 'Location', 'MinTemp', 'MaxTemp','Rainfall','Sunshine','Evaporation','RainToday','Pressure9am','Pressure3pm','WindGustDir','WindGustSpeed','RISK_MM', 'RainTomorrow']use_data = df_data[use_cols]print("数据分析总览,查看使用列数据的前10行")print(use_data.head(10))print("*" * 60)# 按照月份记录降雨量print("*" * 60)print("时间类型转换.....")# 1.处理时间特征,把日期转换为月份use_data['Date'] = pd.to_datetime(use_data['Date'])use_data['Date'] = use_data['Date'].dt.monthprint(use_data.head())print("*" * 60)# 2.可视化,月份VS降雨量fig1 = plt.figure()ax = fig1.add_subplot(1, 1, 1)ax.scatter(use_data['Date'],  use_data['Rainfall'])ax.set_ylabel('Rainfall')ax.set_xlabel('Month')plt.show()def  analysis_data1(df_data):# 可视化 今天下雨样本比例df_data['RainToday'].value_counts().plot(kind='pie', autopct='%.2f%%')plt.title('RainToday样本比例')plt.tight_layout()plt.show()def  analysis_data2(df_data):data = np.random.rand(4, 2)rows = ['MinTemp','MaxTemp','Rainfall','RISK_MM']  # rows categoriescolumns = ['RainToday','RainTomorrow']  # column categoriesfig, ax = plt.subplots()# Advance color controlsax.pcolor(data, cmap=plt.cm.Reds, edgecolors='k')ax.set_xticks(np.arange(0, 2) + 0.5)ax.set_yticks(np.arange(0, 4) + 0.5)# Here we position the tick labels for x and y axisax.xaxis.tick_bottom()ax.yaxis.tick_left()# Values against each labelsax.set_xticklabels(columns, minor=False, fontsize=20)ax.set_yticklabels(rows, minor=False, fontsize=10)plt.show()def  analysis_data3(df_data):sns.displot(data=df_data,x='RainTomorrow',hue='RainToday',multiple="stack",height=6,aspect=1)plt.show()
def  analysis_data4(df_data):plt.figure(figsize=(12, 6))sns.scatterplot(data=df_data.sample(2022),x='MinTemp',y='MaxTemp',hue='RainTomorrow');plt.show()# 处理标签数据
def create_label(RainTomorrow_val):label = 1 # 标签为1代表了不下雨if RainTomorrow_val == 'Yes':label = 0return label# 处理数据
def process_data(df_data):filter_mask = df_data['RainTomorrow'].isin(['Yes', 'No'])filter_data = df_data[filter_mask]print(filter_data['RainTomorrow'].value_counts())print("*" * 60)# 为数据添加 0, 1 标签,'Yes' -> 0, No -> 1proc_filter_data = filter_data.copy()proc_filter_data['label'] = filter_data['RainTomorrow'].apply(create_label)print(proc_filter_data.head())print("*" * 60)# Porj 2.2: 可视化 正负样本比例proc_filter_data['label'].value_counts().plot(kind='pie', autopct='%.2f%%')plt.title('RainTomorrow正负样本比例')plt.tight_layout()plt.show()numeric_cols = ['MinTemp', 'MaxTemp', 'Rainfall', 'Evaporation','Sunshine', 'WindGustSpeed', 'WindSpeed9am', 'WindSpeed3pm','Humidity9am', 'Humidity3pm', 'Pressure9am', 'Pressure3pm','Cloud9am', 'Cloud3pm', 'Temp9am', 'Temp3pm', 'RISK_MM']category_cols = ['WindGustDir','WindDir9am','WindDir3pm','RainToday']label_col = ['label']user_cols = numeric_cols + category_cols + label_colfinal_samples = proc_filter_data[user_cols]# 去掉空值final_samples.dropna(inplace=True)proc_data_filepath = 'proc_data.csv'final_samples.to_csv(os.path.join(proc_data_filepath), index=False)def perform_machine_learning(data_filepath, numeric_cols, category_cols, label_col):"""数据集处理及模型学习理解,准确率,精确率,召回率三者之间的关系参数======data_filepath:  数据集路径numeric_cols:   数值类型列category_cols:  类别类型列label_col:      标签列返回值======None"""data = pd.read_csv(data_filepath)numeric_feat = data[numeric_cols].valuescategory_val = data[category_cols].values[:, 0]  # 如果有多列,每次处理一列# 处理类别数据# label encoderlabel_enc = preprocessing.LabelEncoder()label_val = label_enc.fit_transform(category_val)label_val = label_val.reshape(-1, 1)# one-hot encoder 独热编码onehot_enc = preprocessing.OneHotEncoder()category_feat = onehot_enc.fit_transform(label_val)category_feat = category_feat.toarray()# 生成最终特征和标签用于模型的训练X = np.hstack((numeric_feat, category_feat))y = data[label_col].values# 数据集信息n_sample = y.shape[0]n_pos_sample = y[y == 1].shape[0]n_neg_sample = y[y == 0].shape[0]print('样本个数:{}; 正样本占{:.2%}; 负样本占{:.2%}'.format(n_sample,n_pos_sample / n_sample,n_neg_sample / n_sample))print('特征维数:', X.shape[1])# 处理不平衡数据oversample = SMOTE()X, y = oversample.fit_resample(X, y)print('通过SMOTE方法平衡正负样本后')n_sample = y.shape[0]n_pos_sample = y[y == 1].shape[0]n_neg_sample = y[y == 0].shape[0]print('样本个数:{}; 正样本占{:.2%}; 负样本占{:.2%}'.format(n_sample,n_pos_sample / n_sample,n_neg_sample / n_sample))# 分割数据集X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)#C为超参数,尝试使用交叉验证选取最优的C值#lr_model = LogisticRegression(C=1.0)# rf_model = RandomForestClassifier()# clf = tree.DecisionTreeClassifier()  # 决策树clf = LogisticRegression()   # 逻辑回归# clf = RandomForestClassifier() # 随机森林clf.fit(X_train, y_train)y_pred = clf.predict(X_test)accuracy = metrics.accuracy_score(y_pred, y_test)precision = metrics.precision_score(y_pred, y_test, pos_label=1)recall = metrics.recall_score(y_pred, y_test, pos_label=1)print('准确率为:', accuracy)print('精确率为:', precision)print('召回率:', recall)def main():csvfile = "weatherAUS.csv"raw_data = pd.read_csv(csvfile)inspect_data(raw_data)analysis_data(raw_data)analysis_data1(raw_data)analysis_data2(raw_data)analysis_data3(raw_data)analysis_data4(raw_data)process_data(raw_data)numeric_cols = ['MinTemp', 'MaxTemp', 'Rainfall', 'Evaporation','Sunshine', 'WindGustSpeed', 'WindSpeed9am', 'WindSpeed3pm','Humidity9am', 'Humidity3pm', 'Pressure9am', 'Pressure3pm','Cloud9am', 'Cloud3pm', 'Temp9am', 'Temp3pm', 'RISK_MM']  # 数字列category_cols = ['WindGustDir','WindDir9am','WindDir3pm','RainToday']  # 非数字列label_col = ['label']  # 标签 (要用来进行预测的内容)data_filepath = 'proc_data.csv'perform_machine_learning(data_filepath, numeric_cols, category_cols, label_col)if __name__ == '__main__':main()# 小谢编写,有不足请指正与包涵

基于澳大利亚气象数据集可视化分析及降雨预测相关推荐

  1. A.机器学习入门算法[七]:基于英雄联盟数据集的LightGBM的分类预测

    [机器学习入门与实践]入门必看系列,含数据挖掘项目实战:数据融合.特征优化.特征降维.探索性分析等,实战带你掌握机器学习数据挖掘 专栏详细介绍:[机器学习入门与实践]合集入门必看系列,含数据挖掘项目实 ...

  2. 隔离是否有效?北大面向新冠疫情的数据可视化分析与模拟预测

    近日,北京大学前沿计算研究中心陈宝权教授携团队面向新型肺炎疫情的数据,进行了可视化分析与模拟预测,为我们深度剖析疫情传播趋势,并预测了疫情疾病走势,为疫情防控决策和大众行为提供参考. 愿春暖花开之时, ...

  3. 机器学习实战4-教育领域:学生成绩的可视化分析与成绩预测-详细分析

    大家好,我是微学AI,今天给大家带来机器学习实战4-学生成绩的可视化分析与成绩预测,机器学习在教育中的应用具有很大的潜力,特别是在学生成绩的可视化分析与成绩预测方面. 机器学习可以通过对学生的父母教育 ...

  4. 基于Kaggle心脏病数据集的数据分析和分类预测-StatisticalLearning统计学习实验报告

    基于Kaggle心脏病数据集的数据分析和分类预测-StatisticalLearning统计学习实验报告 一.实验准备 本数据来源于kaggle,包含14个维度,303个样本,具体的变量说明如下表所示 ...

  5. 北大研究团队面向新冠疫情的数据可视化分析与模拟预测

    本次pythonday开发者日活动有幸请到北京大学的陈宝权教授做分享,以下是陈教授近期进行的面向新冠疫情的数据可视化分析与模拟预测项目,陈教授将会在本次活动上做分享与答疑,欢迎大家参与! 指导教师:陈 ...

  6. gis里创建要素面板怎么打开_周末技术流 | 基于GIS的地形可视化分析

    1.前期回顾+本期内容 在技术流系列的第一部分"数据获取"里面我们专门做了一期关于获取DEM高程数据的不同方法,有了这些数据,就可以通过Rhino/ArcGIS等来进行处理,做高程 ...

  7. Kaggle Lending Club Loan Data数据可视化分析与不良贷款预测

    文章目录 数据集介绍 数据可视化分析前的数据预处理 引入包和数据集 对特征缺失值的处理 保存处理好的数据集 数据可视化分析 申请贷款金额和实际贷款金额的数据分布 每年贷款笔数直方图与每年贷款总金额直方 ...

  8. 2009-2019年亚马逊畅销书50强数据集可视化分析-基于Pandas-Seaborn

    Amazon Top 50 Bestselling Books 2009 - 2019 导入相关的包 import numpy as np import pandas as pd pd.plottin ...

  9. 员工每月工资数据集可视化分析

    前言 最近在学习<从零开始学Python数据分析>这本书,第六章的综合实例--巴尔的摩公务员工资数据集,原网站上数据集被清除,于是在Kaggle上寻找了相似的数据"Employe ...

最新文章

  1. JavaWeb--过滤器
  2. 什么叫计算机网络阻塞,计算机网络体系结构的阻塞控制是什么呢?
  3. 计算机视觉算法——图像分类网络总结
  4. JavaSE(九)——正则表达式、Date类、集合、泛型
  5. ifconfig 命令找不到解决
  6. [HDU] 1181 变形课-简单建模后广搜
  7. 稀疏多项式的运算用链表_用最简单的大白话聊一聊面试必问的HashMap原理和部分源码解析...
  8. 安装ipython失败 in error catcher_疯狂的Python:零基础小白入门帖子详情 - 网易云课堂...
  9. php网页执行流程,PHP程序的执行流程
  10. MySQL安装之没有配置向导
  11. Web前端笔记-element ui中table中某列添加a便签进行跳转
  12. android textview显示表情,Android开发-TextView中显示QQ表情类的图片和超链接
  13. 第58章、拍照功能实现(从零开始学Android)
  14. 读写器APDU指令读写FM1208CPU卡
  15. 股票学习(技术指标--个股贡献度)
  16. 代码健壮性的几点思考
  17. C语言中6HZ怎么算,C语言基础课First作业
  18. 蚂蚁的愤怒之源(微风拂面)-中篇
  19. Android自定义View之图形图像(模仿360的刷新球自定义一个SeekBar)
  20. arduino mega针脚_Arduino MEGA串口TX1、RX1使用方法

热门文章

  1. 基于ssm的搬家管理系统
  2. 苹果计算机怎么输入分数,Mac Word怎么打分数
  3. 根据拼音或者首字母查名字,汉字也可以
  4. 1 从瀑布到敏捷——漫画解读软件开发模式变迁史(转载)
  5. Jmeter之参数化函数助手_randomstring
  6. APICloud AVM框架 开发企业OA办公项目
  7. 大讲台浅谈大数据与Hadoop之间的关系
  8. 微信PC版重大更新!这下上班摸鱼更方便了!(后台领取内测更新包)
  9. 中国信通院发布《车联网白皮书》,车联网迈入商用部署新时期
  10. 2018上海国际3D打印产业展览会