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
rain = pd.read_csv('./rain.csv')
rain.head()
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()
# 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)
# 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)
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])