python數據分析——城市氣候與海洋的關系研究+機器學習【實例】


城市氣候與海洋的關系研究

 

導入包

In [2]:
import numpy as np import pandas as pd from pandas import Series,DataFrame import matplotlib.pyplot as plt from pylab import mpl mpl.rcParams['font.sans-serif'] = ['FangSong'] # 指定默認字體 mpl.rcParams['axes.unicode_minus'] = False # 解決保存圖像是負號'-'顯示為方塊的問題 
 

導入數據各個海濱城市數據

In [4]:
# ignore_index忽略行索引
ferrara1 = pd.read_csv('./ferrara_150715.csv') ferrara2 = pd.read_csv('./ferrara_250715.csv') ferrara3 = pd.read_csv('./ferrara_270615.csv') ferrara=pd.concat([ferrara1,ferrara2,ferrara3],ignore_index=True) torino1 = pd.read_csv('./torino_150715.csv') torino2 = pd.read_csv('./torino_250715.csv') torino3 = pd.read_csv('./torino_270615.csv') torino = pd.concat([torino1,torino2,torino3],ignore_index=True) mantova1 = pd.read_csv('./mantova_150715.csv') mantova2 = pd.read_csv('./mantova_250715.csv') mantova3 = pd.read_csv('./mantova_270615.csv') mantova = pd.concat([mantova1,mantova2,mantova3],ignore_index=True) milano1 = pd.read_csv('./milano_150715.csv') milano2 = pd.read_csv('./milano_250715.csv') milano3 = pd.read_csv('./milano_270615.csv') milano = pd.concat([milano1,milano2,milano3],ignore_index=True) ravenna1 = pd.read_csv('./ravenna_150715.csv') ravenna2 = pd.read_csv('./ravenna_250715.csv') ravenna3 = pd.read_csv('./ravenna_270615.csv') ravenna = pd.concat([ravenna1,ravenna2,ravenna3],ignore_index=True) asti1 = pd.read_csv('./asti_150715.csv') asti2 = pd.read_csv('./asti_250715.csv') asti3 = pd.read_csv('./asti_270615.csv') asti = pd.concat([asti1,asti2,asti3],ignore_index=True) bologna1 = pd.read_csv('./bologna_150715.csv') bologna2 = pd.read_csv('./bologna_250715.csv') bologna3 = pd.read_csv('./bologna_270615.csv') bologna = pd.concat([bologna1,bologna2,bologna3],ignore_index=True) piacenza1 = pd.read_csv('./piacenza_150715.csv') piacenza2 = pd.read_csv('./piacenza_250715.csv') piacenza3 = pd.read_csv('./piacenza_270615.csv') piacenza = pd.concat([piacenza1,piacenza2,piacenza3],ignore_index=True) cesena1 = pd.read_csv('./cesena_150715.csv') cesena2 = pd.read_csv('./cesena_250715.csv') cesena3 = pd.read_csv('./cesena_270615.csv') cesena = pd.concat([cesena1,cesena2,cesena3],ignore_index=True) faenza1 = pd.read_csv('./faenza_150715.csv') faenza2 = pd.read_csv('./faenza_250715.csv') faenza3 = pd.read_csv('./faenza_270615.csv') faenza = pd.concat([faenza1,faenza2,faenza3],ignore_index=True) 
 

去除沒用的列

In [9]:
cesena.head(5) 
Out[9]:
  temp humidity pressure description dt wind_speed wind_deg city day dist
0 29.15 83 1015 moderate rain 1436863101 3.62 94.001 Cesena 2015-07-14 10:38:21 14
1 29.37 74 1015 moderate rain 1436866691 3.60 20.000 Cesena 2015-07-14 11:38:11 14
2 29.51 78 1015 moderate rain 1436870392 3.60 70.000 Cesena 2015-07-14 12:39:52 14
3 29.88 70 1016 moderate rain 1436874000 4.60 60.000 Cesena 2015-07-14 13:40:00 14
4 30.12 70 1016 moderate rain 1436877549 4.10 70.000 Cesena 2015-07-14 14:39:09 14
In [7]:
city_list = [ferrara,torino,mantova,milano,ravenna,asti,bologna,piacenza,cesena,faenza] for city in city_list: city.drop(labels='Unnamed: 0',axis=1,inplace=True) 
 

顯示最高溫度於離海遠近的關系(觀察多個城市)

In [10]:
city_max_temp = [] city_dist = [] for city in city_list: max_temp = city['temp'].max() city_max_temp.append(max_temp) dist = city['dist'][0] city_dist.append(dist) 
In [11]:
city_max_temp
Out[11]:
[33.43000000000001,
 34.69,
 34.18000000000001,
 34.81,
 32.79000000000002,
 34.31,
 33.850000000000016,
 33.920000000000016,
 32.81,
 32.74000000000001]
In [12]:
city_dist
Out[12]:
[47, 357, 121, 250, 8, 315, 71, 200, 14, 37]
In [14]:
plt.scatter(city_dist,city_max_temp) plt.xlabel('距離') plt.ylabel('最高溫度') plt.title('距離和溫度之間的關系圖') 
Out[14]:
Text(0.5,1,'距離和溫度之間的關系圖')
 
 

觀察發現,離海近的可以形成一條直線,離海遠的也能形成一條直線。

- 分別以100公里和50公里為分界點,划分為離海近和離海遠的兩組數據(近海:小於100  遠海:大於50)
In [16]:
#找出所有的近海城市(溫度和距離)
np_city_dist = np.array(city_dist)#【轉換成numpy;因為可進行多維變形】 np_city_max_temp = np.array(city_max_temp) 
In [20]:
near_condition = np_city_dist < 100 near_city_dist = np_city_dist[near_condition] near_city_max_temp = np_city_max_temp[near_condition] 
In [21]:
plt.scatter(near_city_dist,near_city_max_temp) 
Out[21]:
<matplotlib.collections.PathCollection at 0x8950320>
 
 

機器學習

- 算法模型對象:特殊的對象.在該對象中已經集成好個一個方程(還沒有求出解的方程).
- 模型對象的作用:通過方程實現預測或者分類
- 樣本數據(df,np):
    - 特征數據:自變量
    - 目標(標簽)數據:因變量
- 模型對象的分類:
    - 有監督學習:模型需要的樣本數據中存在特征和目標
    - 無監督學習:模型需要的樣本數據中存在特征
    - 半監督學習:模型需要的樣本數據部分需要有特征和目標,部分只需要特征數據
- sklearn模塊:封裝了多種模型對象.可以直接使用。
  • 面積 采光率 樓層 售價
  • 100 30% 18 33w
  • 80 80% 3 133w
 

導入sklearn,建立線性回歸算法模型對象

In [22]:
#1.導包
from sklearn.linear_model import LinearRegression 
In [23]:
#2.實例化模型對象
linner = LinearRegression() 
In [ ]:
#3.提取樣本數據
In [25]:
#4.訓練模型;reshape(-1,1)【n行,1列】一種屬性,多組特征
linner.fit(near_city_dist.reshape(-1,1),near_city_max_temp) 
Out[25]:
LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)
In [26]:
#5.預測
linner.predict(38) 
Out[26]:
array([33.16842645])
In [27]:
# 模型精准度評分
linner.score(near_city_dist.reshape(-1,1),near_city_max_temp) 
Out[27]:
0.77988083971852
In [28]:
#繪制回歸曲線
x = np.linspace(10,70,num=100) # linspace等差數列 y = linner.predict(x.reshape(-1,1)) 
In [33]:
plt.scatter(near_city_dist,near_city_max_temp) plt.scatter(x,y,marker=1)# marker調整點粗細 
Out[33]:
<matplotlib.collections.PathCollection at 0xaaf7940>
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM