기본적인 정보를 확인해보겠습니다.
import pandas as pd
data = pd.read_csv('GlobalWeatherRepository.csv')
data.head()
country location_name latitude longitude timezone \
0 Afghanistan Kabul 34.52 69.18 Asia/Kabul
1 Albania Tirana 41.33 19.82 Europe/Tirane
2 Algeria Algiers 36.76 3.05 Africa/Algiers
3 Andorra Andorra La Vella 42.50 1.52 Europe/Andorra
4 Angola Luanda -8.84 13.23 Africa/Luanda
last_updated_epoch last_updated temperature_celsius \
0 1693301400 2023-08-29 14:00 28.8
1 1693301400 2023-08-29 11:30 27.0
2 1693301400 2023-08-29 10:30 28.0
3 1693301400 2023-08-29 11:30 10.2
4 1693301400 2023-08-29 10:30 25.0
temperature_fahrenheit condition_text ... air_quality_PM2.5 \
0 83.8 Sunny ... 7.9
1 80.6 Partly cloudy ... 28.2
2 82.4 Partly cloudy ... 6.4
3 50.4 Sunny ... 0.5
4 77.0 Partly cloudy ... 139.6
air_quality_PM10 air_quality_us-epa-index air_quality_gb-defra-index \
0 11.1 1 1
1 29.6 2 3
2 7.9 1 1
3 0.8 1 1
4 203.3 4 10
sunrise sunset moonrise moonset moon_phase moon_illumination
0 05:24 AM 06:24 PM 05:39 PM 02:48 AM Waxing Gibbous 93
1 06:04 AM 07:19 PM 06:50 PM 03:25 AM Waxing Gibbous 93
2 06:16 AM 07:21 PM 06:46 PM 03:50 AM Waxing Gibbous 93
3 07:16 AM 08:34 PM 08:08 PM 04:38 AM Waxing Gibbous 93
4 06:11 AM 06:06 PM 04:43 PM 04:41 AM Waxing Gibbous 93
[5 rows x 41 columns]
데이터의 기본 구조는 다음과 같습니다
국가, 지역명, 위도, 경도, 시간대 등의 위치 정보
날씨 정보 (온도, 습도, 바람 속도, 기압 등)
대기 질 정보 (미세먼지, 초미세먼지 등)
일출, 일몰, 달 뜨는 시간, 달 지는 시간 등의 천문 관련 정보
데이터의 기본 정보는 다음과 같습니다
data_info = data.info()
missing_values = data.isnull().sum()
data_info, missing_values
- 총 780개의 행과 41개의 열로 구성되어 있습니다.
- 각 열의 데이터 유형은 수치형 (int64, float64) 및 문자열 (object)로 구성되어 있습니다.
- 결측치는 없습니다. (모든 열에 780개의 데이터가 있음)
data.describe()
latitude longitude last_updated_epoch temperature_celsius \
count 780.000000 780.000000 7.800000e+02 780.000000
mean 19.297282 21.826103 1.693408e+09 22.671667
std 24.590227 65.712248 8.369226e+04 6.791413
min -41.300000 -175.200000 1.693301e+09 2.900000
25% 3.750000 -6.840000 1.693348e+09 17.650000
50% 17.250000 23.240000 1.693402e+09 24.000000
75% 41.330000 50.580000 1.693460e+09 28.000000
max 63.830000 179.220000 1.693526e+09 45.000000
temperature_fahrenheit wind_mph wind_kph wind_degree \
count 780.000000 780.000000 780.000000 780.000000
mean 72.808718 6.888205 11.085513 172.233333
std 12.225101 4.540630 7.310074 98.241075
min 37.200000 2.200000 3.600000 1.000000
25% 63.800000 3.800000 6.100000 90.000000
50% 75.200000 5.600000 9.000000 175.500000
75% 82.400000 9.400000 15.100000 249.250000
max 113.000000 30.000000 48.200000 360.000000
pressure_mb pressure_in ... gust_kph air_quality_Carbon_Monoxide \
count 780.000000 780.000000 ... 780.000000 780.000000
mean 1012.288462 29.891718 ... 17.246282 454.053974
std 5.892065 0.173377 ... 11.470302 821.161879
min 998.000000 29.470000 ... 0.700000 123.500000
25% 1008.000000 29.770000 ... 9.000000 213.600000
50% 1012.000000 29.880000 ... 14.600000 263.700000
75% 1015.000000 29.970000 ... 22.700000 413.900000
max 1036.000000 30.590000 ... 79.600000 14099.100000
air_quality_Ozone air_quality_Nitrogen_dioxide \
count 780.000000 780.000000
mean 42.813205 9.233974
std 36.290259 18.117526
min 0.000000 0.000000
25% 19.850000 0.900000
50% 35.400000 3.400000
75% 55.800000 9.475000
max 320.400000 241.300000
air_quality_Sulphur_dioxide air_quality_PM2.5 air_quality_PM10 \
count 780.000000 780.000000 780.000000
mean 6.191538 17.241923 27.997564
std 14.789406 45.789973 61.580476
min 0.000000 0.500000 0.500000
25% 0.400000 2.800000 4.800000
50% 1.300000 6.250000 10.550000
75% 5.300000 15.425000 25.025000
max 169.800000 700.800000 869.600000
air_quality_us-epa-index air_quality_gb-defra-index moon_illumination
count 780.000000 780.000000 780.000000
mean 1.393590 1.901282 97.250000
std 0.838857 2.042991 2.587679
min 1.000000 1.000000 93.000000
25% 1.000000 1.000000 96.750000
50% 1.000000 1.000000 98.000000
75% 1.250000 2.000000 98.500000
max 6.000000 10.000000 100.000000
[8 rows x 30 columns]
- 온도:
- 평균 온도는 약 22.67°C로, 최저 온도는 2.9°C, 최고 온도는 45°C입니다.
- 풍속:
- 평균 풍속은 약 6.89 mph로, 최저 풍속은 2.2 mph, 최고 풍속은 30 mph입니다.
- 대기 압력:
- 평균 대기압은 약 1012.29 mb로, 최저 대기압은 998 mb, 최고 대기압은 1036 mb입니다.
- 미세먼지 (PM2.5):
- 평균 농도는 약 17.24 μg/m³로, 최저 농도는 0.5 μg/m³, 최고 농도는 700.8 μg/m³입니다.
다음으로, 몇몇 주요 변수들의 분포를 시각화하여 살펴보겠습니다.
특히, 온도, 풍속, 대기 압력, 및 미세먼지 (PM2.5)의 분포를 확인해보겠습니다.
import matplotlib.pyplot as plt
import seaborn as sns
fig, ax = plt.subplots(2, 2, figsize=(15, 10))
sns.histplot(data['temperature_celsius'], ax=ax[0, 0], bins=30, color='skyblue', kde=True)
ax[0, 0].set_title('Distribution of Temperature (°C)')
ax[0, 0].set_xlabel('Temperature (°C)')
sns.histplot(data['wind_mph'], ax=ax[0, 1], bins=30, color='salmon', kde=True)
ax[0, 1].set_title('Distribution of Wind Speed (mph)')
ax[0, 1].set_xlabel('Wind Speed (mph)')
sns.histplot(data['pressure_mb'], ax=ax[1, 0], bins=30, color='lightgreen', kde=True)
ax[1, 0].set_title('Distribution of Atmospheric Pressure (mb)')
ax[1, 0].set_xlabel('Pressure (mb)')
sns.histplot(data['air_quality_PM2.5'], ax=ax[1, 1], bins=30, color='lightcoral', kde=True)
ax[1, 1].set_title('Distribution of PM2.5 (μg/m³)')
ax[1, 1].set_xlabel('PM2.5 (μg/m³)')
plt.tight_layout()
plt.show()
- 온도 분포 (°C)
- 대부분의 지역의 온도는 20°C ~ 30°C 사이에 분포되어 있으며, 일부 극단적인 낮은/높은 온도의 지역도 있습니다.
- 풍속 분포 (mph)
- 대부분의 지역의 풍속은 10mph 미만으로 분포되어 있습니다.
- 대기 압력 분포 (mb)
- 대기 압력은 대부분 1010mb ~ 1020mb 사이에 집중되어 있습니다.
- 미세먼지 (PM2.5) 분포 (μg/m³)
- 대부분의 지역에서 PM2.5 농도는 낮지만, 일부 지역에서는 매우 높은 농도를 보이고 있습니다.
중국과 대한민국의 미세먼지(PM2.5) 농도를 비교하기 위해, 두 나라의 데이터를 추출하고 시각화해보겠습니다. 먼저 두 나라의 미세먼지 농도 분포를 확인한 후, 평균 미세먼지 농도를 비교해보겠습니다.
china_data = data[data['country'] == 'China']
south_korea_data = data[data['country'] == 'South Korea']
plt.figure(figsize=(12, 6))
sns.kdeplot(china_data['air_quality_PM2.5'], label='China', shade=True, color='red')
sns.kdeplot(south_korea_data['air_quality_PM2.5'], label='South Korea', shade=True, color='blue')
plt.title('Distribution of PM2.5 Concentration for China and South Korea')
plt.xlabel('PM2.5 Concentration (μg/m³)')
plt.ylabel('Density')
plt.legend()
plt.show()
- 중국 (빨간색): 대부분의 지역에서 미세먼지 농도가 다양하게 분포되어 있으며, 특히 높은 농도를 나타내는 지역도 있습니다.
- 대한민국 (파란색): 대부분의 지역에서 미세먼지 농도가 낮은 편이지만, 중간 정도의 농도를 나타내는 지역도 있습니다.
다음으로, 두 나라의 평균 미세먼지 농도를 비교해보겠습니다.
china_avg_pm25 = china_data['air_quality_PM2.5'].mean()
south_korea_avg_pm25 = south_korea_data['air_quality_PM2.5'].mean()
plt.figure(figsize=(8, 6))
sns.barplot(x=['China', 'South Korea'], y=[china_avg_pm25, south_korea_avg_pm25], palette=['red', 'blue'])
plt.title('Average PM2.5 Concentration for China and South Korea')
plt.ylabel('Average PM2.5 Concentration (μg/m³)')
plt.show()
china_avg_pm25, south_korea_avg_pm25
RESULT
(173.02499999999998, 44.5)
중국과 대한민국의 평균 미세먼지 (PM2.5) 농도는 다음과 같습니다
- 중국: 약 173.02
- 대한민국: 약 44.5
비교 결과, 중국의 평균 미세먼지 농도가 대한민국보다 훨씬 높다는 것을 알 수 있습니다.
이러한 차이는 다양한 요인에 의해 발생할 수 있습니다. 예를 들면, 산업 활동, 자동차 배출량, 기후 조건, 대기 순환 등의 요인이 미세먼지 농도에 영향을 줄 수 있습니다.
미세먼지(PM2.5)와 관련 있는 변수들을 파악하기 위해, 상관 행렬에서 미세먼지(PM2.5)와의 상관계수를 살펴보겠습니다.
높은 상관계수(양의 상관관계 또는 음의 상관관계)를 갖는 변수들은 미세먼지 농도와 관련이 있을 가능성이 높습니다.
미세먼지(PM2.5)와의 상관계수를 정렬하여 가장 관련 있는 변수들을 확인해보겠습니다.
pm25_correlation = correlation_matrix['air_quality_PM2.5'].sort_values(ascending=False)
pm25_correlation = pm25_correlation.drop('air_quality_PM2.5')
pm25_correlation
RESULT
air_quality_PM10 0.944798
air_quality_Carbon_Monoxide 0.839759
air_quality_us-epa-index 0.785320
air_quality_gb-defra-index 0.713071
air_quality_Nitrogen_dioxide 0.494834
air_quality_Sulphur_dioxide 0.345447
uv_index 0.097893
longitude 0.073568
wind_degree 0.028147
pressure_in 0.017212
last_updated_epoch 0.017019
pressure_mb 0.016643
moon_illumination 0.015587
temperature_fahrenheit 0.006712
temperature_celsius 0.006686
feels_like_celsius 0.004151
feels_like_fahrenheit 0.003939
air_quality_Ozone -0.033107
precip_in -0.045059
precip_mm -0.045463
humidity -0.049813
visibility_miles -0.113546
visibility_km -0.115076
wind_mph -0.121671
wind_kph -0.121857
latitude -0.126515
cloud -0.139603
gust_mph -0.160523
gust_kph -0.160650
Name: air_quality_PM2.5, dtype: float64
data = pd.read_csv('/mnt/data/GlobalWeatherRepository.csv')
correlation_matrix = data.corr()
pm25_correlation = correlation_matrix['air_quality_PM2.5'].sort_values(ascending=False).drop('air_quality_PM2.5')
plt.figure(figsize=(12, 10))
pm25_correlation.sort_values().plot(kind='barh', color='skyblue')
plt.title("Correlation with PM2.5")
plt.xlabel("Correlation Coefficient")
plt.ylabel("Variables")
plt.show()
양의 상관관계:
- air_quality_PM10: 0.945 - 대기 중의 미세먼지 크기 (PM10)와 PM2.5는 매우 높은 양의 상관관계를 보입니다. 이는 두 미세먼지 종류가 동시에 발생하거나, 같은 원인으로 인해 발생하는 경우가 많기 때문입니다.
- air_quality_Carbon_Monoxide: 0.840 - 일산화탄소 농도와 PM2.5의 농도는 높은 양의 상관관계를 보입니다. 일산화탄소와 미세먼지는 같은 오염원 (예: 자동차 배출가스)에서 발생할 수 있습니다.
- air_quality_us-epa-index: 0.785 - 미국 환경보호청의 대기질 지수와 PM2.5는 높은 양의 상관관계를 보입니다. 이 지수는 여러 대기질 요소를 종합적으로 평가한 것입니다.
음의 상관관계:
- gust_kph와 gust_mph: 약 -0.161 - 돌풍의 속도와 PM2.5는 약한 음의 상관관계를 보입니다. 강한 바람이 불면 미세먼지가 흩어질 수 있기 때문입니다.
- cloud: 약 -0.140 - 구름의 양과 PM2.5는 약한 음의 상관관계를 보입니다. 구름이 많은 경우, 대기의 물분이 미세먼지를 흡수하거나 중화시킬 수 있습니다.
이러한 상관관계를 통해 미세먼지 농도와 관련된 여러 요인들을 파악할 수 있습니다. 하지만 상관관계는 인과관계를 나타내지 않으므로, 특정 변수가 미세먼지 농도를 직접적으로 영향 주는지에 대해서는 추가적인 연구가 필요합니다.
이 데이터만으로 지구 온난화를 직접적으로 확인하는 것은 어렵습니다. 그 이유는 다음과 같습니다
데이터의 시간 범위를 확인하기 위해 "last_updated" 열의 최소값(시작 시점)과 최대값(종료 시점)을 확인하겠습니다.
start_date = data['last_updated'].min()
end_date = data['last_updated'].max()
start_date, end_date
RESULT
('2023-08-29 02:45', '2023-09-01 12:45')
제공된 데이터는 "2023-08-29 02:45"부터 "2023-09-01 12:45"까지의 정보를 포함하고 있습니다.
즉, 이 데이터는 약 3일 동안의 날씨 및 대기질 정보를 담고 있습니다.
- 시간 범위: 지구 온난화는 수십 년에서 수백 년에 걸친 긴 시간 동안의 기후 변화를 나타내는 현상입니다. 제공된 데이터는 특정 시점의 데이터이며, 이로 인해 장기간의 기후 변화 추세를 파악하기는 어렵습니다.
- 변수 한정: 지구 온난화는 온도, 해수면 상승, 극지방 빙하의 녹아내림 등 여러 요인들로 나타납니다. 현재 데이터에는 온도 정보는 있지만, 이 외의 다른 지구 온난화 지표는 포함되어 있지 않습니다.
- 지역 한정: 지구 온난화는 전 세계적인 현상입니다. 제공된 데이터는 전 세계의 몇몇 지역만 포함하고 있을 수 있습니다.
그럼에도 불구하고, 제공된 데이터의 온도 정보를 이용하면 특정 지역의 기후 변화나 온도 추세를 파악하는 데 도움이 될 수 있습니다. 만약 여러 년도에 걸친 데이터가 제공된다면, 그 지역의 온도 추세를 확인하여 지구 온난화와 관련된 정보를 얻을 수 있습니다.
결론적으로, 이 데이터만으로 지구 온난화를 직접적으로 확인하는 것은 어렵지만, 다른 추가적인 데이터나 정보와 결합하면 지구 온난화에 대한 통찰력을 얻을 수 있을 것입니다.
'DataScience' 카테고리의 다른 글
데이터프레임 기본 조작 : 행선택, 열선택, 인덱싱, 슬라이싱 (0) | 2024.08.01 |
---|---|
데이터 전처리 기법: 결측치(NaN) 처리와 이상치(Outlier) 탐지 (0) | 2024.08.01 |
파이썬으로 OpenAI GPT-3 사용하기 (0) | 2024.08.01 |
서울시 강서구 공동 주택 현황 데이터 분석 (20230905) (0) | 2023.09.08 |
캐글 API 사용하기 - kaggle.json 파일 얻기 (0) | 2021.02.24 |