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

實現預測的功能python

# 導入包
import numpy as np
import pandas as pd
from pandas import Series,DataFrame

import matplotlib.pyplot as plt
# %matplotlib inline

# 要顯示中文 須要導入該模塊
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['FangSong'] # 指定默認字體
mpl.rcParams['axes.unicode_minus'] = False # 解決保存圖像是負號'-'顯示爲方塊的問題


# 導入數據各個海濱城市數據
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)
# concat作級聯 用列與列級聯  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)
cesena.head()
# 查看一下表格 

# 去除沒用的列  'Unnamed: 0'
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)

cesena.head(1)   
# 在查看一下表格里的'Unnamed: 0'有沒去掉
# 顯示最高溫度於離海遠近的關係(觀察多個城市)

city_max_temp = []
city_dist = []
city_list = [ferrara,torino,mantova,milano,ravenna,asti,bologna,piacenza,cesena,faenza]
for city in city_list:
    temp = city['temp'].max()
    dist = city['dist'].max()
    city_max_temp.append(temp)
    city_dist.append(dist)
    

# 查看數據  
city_max_temp
city_dist
# [47, 357, 121, 250, 8, 315, 71, 200, 14, 37]


plt.scatter(city_dist,city_max_temp)
plt.xlabel('距離')
plt.ylabel('最高溫度')
plt.title('距離和最高溫度之間的關係')

機器學習

# 有一個未知最高溫度的海濱城市,該城市的距離是已知的,咱們須要創建一個模型,經過該城市的距離預測該城市的最高溫度。

# 引出 機器學習

### 機器學習
- 機器學習和AI(人工智能)之間的關聯是什麼?
    - 機器學習是實現人工智能的一種技術手段
    
- 算法模型:
    - 特殊的對象。對象內部封裝了一個尚未求出解的方程(算法)。
    
    - 做用:
        - 預測:預測出一個未知的值
        - 分類:將一個未知的事物歸到已知的分類中
        - 預測或者分類的結果就是模型對象方程的解
        
        
- 樣本數據:
    - 組成部分:
        - 特徵數據:自變量
        - 目標數據:因變量

        
- 樣本數據和算法模型對象之間的關聯?
    - 能夠將樣本數據帶入到算法模型中,對其內部的方程進行求解操做。一旦模型對象有解了,那麼就能夠實現分類或者預測的功能。
    

- 訓練模型:將樣本數據帶入到算法模型,讓其模型對象有解。

    
- 算法模型的分類:
    - 有監督學習:若是算法模型須要的樣本數據必需要包含特徵數據和目標數據
    - 無監督學習:若是算法模型須要的樣本數據只包含特徵數據便可
    

- sklearn模塊展開學習
    - 封裝好了多種不一樣的算法模型
    
    
面積  樓層  採光率  售價
100   3    34%    80w
80   6    89%    100w

需求

有一個未知最高溫度的海濱城市,該城市的距離是已知的,咱們須要創建一個模型,經過該城市的距離預測該城市的最高溫度。算法

# 有一個未知最高溫度的海濱城市,該城市的距離是已知的,咱們須要創建一個模型,經過該城市的距離預測該城市的最高溫度。

樣本集:用於對機器學習算法模型對象進行訓練。樣本集一般爲一個DataFrame。
    - 特徵數據:特徵數據的變化會影響目標數據的變化。一般爲多列。
    - 目標數據:結果。一般爲一列。
    

#提取樣本
feature = city_dist    # 列表形式的特徵數據
target = city_max_temp # 列表形式的目標數據

# 由於特徵數據必須是二維的,因此變爲np的二維數據
# np 很容易去變形
feature = np.array(feature) # np形式的特徵數據 
target = np.array(target)   # np形式的目標數據
# 導入sklearn,創建線性迴歸算法模型對象
from sklearn.linear_model import LinearRegression
# 實例化算法模型對象
linner = LinearRegression() # y = wx + b

# 訓練模型 ,訓練模型須要樣本數據
# X:二維的特徵數據
# y:目標數據
linner.fit(feature.reshape((-1,1)),target)
# -1 是自動計算行數,1是 1 列  ,,當前是10行 就是表示爲10行1列
# 返回一個LinearRegression 對象,模型訓練完畢
# LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False) 

# 預測
linner.predict([[175],[201]])
# array([33.9261553 , 34.06258068])

將遠海城市的數據帶入到散點圖中進行展現,而且進行線性迴歸app

x = np.linspace(0,360,num=100)# 隨機獲取100個數值 等差的數列

y = linner.predict(x.reshape(-1,1))# 調用方程



plt.scatter(city_dist,city_max_temp)# 會把10個散點繪製出來

plt.scatter(x,y) # 將100個點繪製出

plt.xlabel('距離')
plt.ylabel('最高溫度')
plt.title('距離和最高溫度之間的關係')

相關文章
相關標籤/搜索