Skip to content

Latest commit

 

History

History
208 lines (186 loc) · 9.08 KB

README.md

File metadata and controls

208 lines (186 loc) · 9.08 KB

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])