Skip to content

phancaovu/predict_rain

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

phan cao vu project data analyst

Rain Predict in Australia

Library

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd 
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn import tree
from sklearn.linear_model import LogisticRegression
from sklearn.naive_bayes import GaussianNB
import sklearn.metrics 

Clear data

rain = pd.read_csv('./rain.csv')

rain.head()

rain.info()

rain.shape

(145460, 23)

rain.columns

Index(['Date', 'Location', 'MinTemp', 'MaxTemp', 'Rainfall', 'Evaporation', 'Sunshine', 'WindGustDir', 'WindGustSpeed', 'WindDir9am', 'WindDir3pm', 'WindSpeed9am', 'WindSpeed3pm', 'Humidity9am', 'Humidity3pm', 'Pressure9am', 'Pressure3pm', 'Cloud9am', 'Cloud3pm', 'Temp9am', 'Temp3pm', 'RainToday', 'RainTomorrow'], dtype='object')

(rain.isnull().sum()/len(rain))*100

kiem tra phan tram du lieu bi loi

Xoa cac cot co du lieu bi loi tren 30%

rain.drop(columns=['Evaporation','Sunshine','Cloud9am','Cloud3pm'], inplace=True)

rain.isnull().any()

Handle data error

# viết hàm xữ lý những giá trị rỗng 
def missing_value_number(rain):
   for col in rain.select_dtypes(['int','float']):
      rain[col] = rain[col].fillna(rain[col].mean())
  return rain
def missing_values_object(rain):
  for col in rain.select_dtypes(['object']):
     rain[col] = rain[col].fillna(method='ffill')
return rain

rain = missing_value_number(rain)
rain = missing_values_object(rain)
   

rain.isnull().any()

rain.head(5)

Data Visualization

# phân tích lượng mưa ở các thành phố
plt.figure(figsize=(15, 5))
sns.countplot(rain['Location'])
plt.xticks(rotation=90)
plt.show()

# Hướng gió trong 1 ngày 
plt.subplots(figsize=(16,8))
sns.countplot(data=rain, x='WindGustDir')
plt.show()

# hướng gió lúc 9 giờ sáng
plt.subplots(figsize=(16,8))
sns.countplot(data=rain, x='WindDir9am')

#Hướng gió lúc 3h chiều
plt.subplots(figsize=(16,8))
sns.countplot(data=rain, x='WindDir3pm')
plt.show()

#thống kê mưa hôm nay
plt.subplots(figsize=(8,6))
plt.grid(linewidth = 0.7)
sns.countplot(data=rain, x='RainToday')
plt.show()

# Thống kê mưa của ngày mai 
plt.subplots(figsize=(8,6))
plt.grid(linewidth = 0.7)
sns.countplot(data=rain, x='RainTomorrow')

# phân tích mưa hôm nay và mưa ngày hôm sau
type_plt = pd.crosstab(rain['RainToday'], rain['RainTomorrow'])

plt.rcParams["figure.figsize"] = (8,5)

type_plt.plot(kind='bar',stacked=False)

plt.xlabel('Rain Today', fontsize=15)
plt.ylabel('Count', fontsize=15)
plt.title('Rain Today - Rain Tomorrow', fontsize=20)
plt.xticks(rotation=0, fontsize=12)
plt.yticks(fontsize=12)
plt.show()

# thống kê lượng mưa theo tháng
rain['Date'] = pd.to_datetime(rain['Date'])
rainfall =[rain['Date'].dt.year, rain['Date'].dt.month, rain['Rainfall']]
headers = ['Year', 'Month', 'Rainfall']
rain_df = pd.concat(rainfall, axis=1, keys=headers)
plt.figure(figsize=(8,4))
a = rain_df.groupby('Month').agg({'Rainfall':'sum'})
a.plot(kind='bar', color='pink')
plt.title('lượng mưa trong 1 tháng', fontsize=25)
plt.xlabel('Month', fontsize=20)
plt.ylabel('Rainfall (in mm)', fontsize=20)
plt.xticks(rotation=0)
plt.show()

# lượng mưa theo năm 
plt.figure(figsize=(8,4))
a = rain_df.groupby('Year').agg({'Rainfall':'sum'})
a.plot(kind='bar', color='purple')
plt.title('Lượng mưa theo năm', fontsize=25)
plt.xlabel('Year', fontsize=20)
plt.ylabel('Rainfall (in mm)', fontsize=20)
plt.xticks(rotation=0)
plt.show()

# Thống kê nhiệt độ cao nhất và thấp nhất

fig, ax = plt.subplots(1, 2, figsize=(15,5))

# MinTemp
sns.distplot(rain['MinTemp'], ax=ax[0])
ax[0].set_title("Minimum Temperature")
# MaxTemp
sns.distplot(rain['MaxTemp'], ax=ax[1])
ax[1].set_title("Maximum Temperature")

#headmap 
plt.figure(figsize=(20,9))
sns.heatmap(rain.corr(method='pearson'),annot=True)

Predict

from sklearn.preprocessing import LabelEncoder
rain['Date'] = pd.to_datetime(rain['Date'],infer_datetime_format=True)
rain['Date'] = rain['Date'].apply(lambda x: x.toordinal())

encoder = LabelEncoder()
for col in rain.columns[[i==object for i in rain.dtypes]]:
   rain.loc[:,col] = encoder.fit_transform(rain[col])

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published