A. python之pyplot
1、 定義x和y,畫圖展示,保存圖片
其中dpi參數指定圖像的解析度為120
2、 優化繪圖線條風格
線條顏色color
線條標記marker
線條風格linestyle
3、 坐標軸的控制
坐標軸范圍和標題
坐標圖上標記
坐標間隔設定
函數plt.xticks()和plt.xticks()用來實現對x軸和y軸坐標間隔(也就是軸雀兆記號)的設定。用法上,函蠢蔽數的輸入是兩個列表,第一個表示取值,第二個表示標記。當然如果你的標記就是取值本身,則第二個列表可以忽略
多圖與子圖
figure() 函數可以幫助我們同時處理生成多個圖,而subplot()函數則用來實現,在一個大圖中,出現多個小的子圖。需要注意的是, figure() 中的參數為圖片序號,一般是按序增加的,這裡面還涉及一個當前圖的概念,其中 subplot() 的參數有3個,分別為行數、列數、以及子圖序號。比如 subplot(1,2,1) 表示這是一個1行,2列布局的圖(兩個子圖,在同一行,分居左右),其中,當前處理的子圖是第一個圖(也就是左頃檔租圖)。
這樣,我們就用一個腳本畫了兩張圖fig.1和fig.2。其中,fig.1包含了分居左右的兩個子圖,分別是y1和y3的曲線;fig.2是一張整圖,畫的是y2曲線。
如果想要某個子圖占據整行或者整列,可以採用下面
第三個圖,實際上相當於將前面的兩個小的子圖看作是一個整圖
B. python中plot怎麼設置橫縱坐標名稱
用plot畫二維圖像時,默認情況下的橫坐標和縱坐標顯示的值有時達不到自己的需求,需要藉助xticks()和yticks()分別對橫坐標x-axis和縱坐標y-axis進行設置。
import numpy as np
import matplotlib.pyplot as plt
x = range(1,13,1)
y = range(1,13,1)
plt.plot(x,y)
plt.show()
此時的x軸和y軸都是只顯示偶數,其它的奇數未顯示,這樣在展示實驗效果或放入文章中都會影響其可讀性。
為了設置坐標軸的值,增加其可讀性,有多種方法。這里介紹的是matplotlib的函數xticks()和yticks()。
(2)python中xticks用法擴展閱讀
基本用法:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 生成x軸上的數據:從-3到3,總共有50個點
x = np.linspace(-1, 1, 50)
# 定義一個線性方程
y1 = 2 * x + 1
# 定義一個二次方程
y2 = x ** 2
# 設置x軸的取值范圍為:-1到2
plt.xlim(-1, 2)
# 設置y軸的取值范圍為:-1到3
plt.ylim(-1, 3)
# 設置x軸的文本,用於描述x軸代表的是什麼
plt.xlabel("I am x")
# 設置y軸的文本,用於描述y軸代表的是什麼
plt.ylabel("I am y")
plt.plot(x, y2)
# 繪制紅色的線寬為1虛線的線條
plt.plot(x, y1, color='red', linewidth=1.0, linestyle='--')
# 顯示圖表
plt.show()
C. python 離x軸距離
python離x軸距離為0。bottom決定了柱子距離x軸的高度默認為None,即表示與x軸距離為0,我們在調用xlim的時候只是限制了x軸的結果並沒有限制y軸,所以畫出來y軸的范圍還是之前數據的范圍。
python離x軸的畫圖方法
xlim能夠設置的基本上只有坐標軸的范圍,而xticks和yticks既可以設置范圍也可以設置每個刻度之間的間距,我們x軸的范圍是負10到10,在默認的圖像當中系統幫我們選擇的間距是2點5,即每隔2點5畫一個坐標點一共畫8個,我們直接在xticks當中放入了一個list。
最後我們畫出來的圖像的x軸就是根據這個list進行劃分的,也就是說我們不僅可以定義坐標軸的范圍還可以定義它的間隔。有的時候自動繪制出來的圖像的范圍以及間隔可能沒有那麼好,需要我們進行調整,這時候就需要用到xticks和yticks函數了。
D. 使用Python的線性回歸問題,怎麼解決
本文中,我們將進行大量的編程——但在這之前,我們先介紹一下我們今天要解決的實例問題。
1) 預測房子價格
閃電俠是一部由劇作家/製片人Greg Berlanti、Andrew Kreisberg和Geoff Johns創作,由CW電視台播放的美國電視連續劇。它基於DC漫畫角色閃電俠(Barry Allen),一個具有超人速度移動能力的裝扮奇特的打擊犯罪的超級英雄,這個角色是由Robert Kanigher、John Broome和Carmine Infantino創作。它是綠箭俠的衍生作品,存在於同一世界。該劇集的試播篇由Berlanti、Kreisberg和Johns寫作,David Nutter執導。該劇集於2014年10月7日在北美首映,成為CW電視台收視率最高的電視節目。
綠箭俠是一部由劇作家/製片人 Greg Berlanti、Marc Guggenheim和Andrew Kreisberg創作的電視連續劇。它基於DC漫畫角色綠箭俠,一個由Mort Weisinger和George Papp創作的裝扮奇特的犯罪打擊戰士。它於2012年10月10日在北美首映,與2012年末開始全球播出。主要拍攝於Vancouver、British Columbia、Canada,該系列講述了億萬花花公子Oliver Queen,由Stephen Amell扮演,被困在敵人的島嶼上五年之後,回到家鄉打擊犯罪和腐敗,成為一名武器是弓箭的神秘義務警員。不像漫畫書中,Queen最初沒有使用化名」綠箭俠「。
由於這兩個節目並列為我最喜愛的電視節目頭銜,我一直想知道哪個節目更受其他人歡迎——誰會最終贏得這場收視率之戰。 所以讓我們寫一個程序來預測哪個電視節目會有更多觀眾。 我們需要一個數據集,給出每一集的觀眾。幸運地,我從維基網路上得到了這個數據,並整理成一個.csv文件。它如下所示。
閃電俠
閃電俠美國觀眾數
綠箭俠
綠箭俠美國觀眾數
1 4.83 1 2.84
2 4.27 2 2.32
3 3.59 3 2.55
4 3.53 4 2.49
5 3.46 5 2.73
6 3.73 6 2.6
7 3.47 7 2.64
8 4.34 8 3.92
9 4.66 9 3.06
觀眾數以百萬為單位。
解決問題的步驟:
首先我們需要把數據轉換為X_parameters和Y_parameters,不過這里我們有兩個X_parameters和Y_parameters。因此,把他們命名為flash_x_parameter、flash_y_parameter、arrow_x_parameter、arrow_y_parameter吧。然後我們需要把數據擬合為兩個不同的線性回歸模型——先是閃電俠,然後是綠箭俠。 接著我們需要預測兩個電視節目下一集的觀眾數量。 然後我們可以比較結果,推測哪個節目會有更多觀眾。
步驟1
導入我們的程序包:
Python
1
2
3
4
5
6
7
# Required Packages
import csv
import sys
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from sklearn import datasets, linear_model
步驟2
寫一個函數,把我們的數據集作為輸入,返回flash_x_parameter、flash_y_parameter、arrow_x_parameter、arrow_y_parameter values。
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
# Function to get data
def get_data(file_name):
data = pd.read_csv(file_name)
flash_x_parameter = []
flash_y_parameter = []
arrow_x_parameter = []
arrow_y_parameter = []
for x1,y1,x2,y2 in zip(data['flash_episode_number'],data['flash_us_viewers'],data['arrow_episode_number'],data['arrow_us_viewers']):
flash_x_parameter.append([float(x1)])
flash_y_parameter.append(float(y1))
arrow_x_parameter.append([float(x2)])
arrow_y_parameter.append(float(y2))
return flash_x_parameter,flash_y_parameter,arrow_x_parameter,arrow_y_parameter
現在我們有了我們的參數,來寫一個函數,用上面這些參數作為輸入,給出一個輸出,預測哪個節目會有更多觀眾。
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# Function to know which Tv show will have more viewers
def more_viewers(x1,y1,x2,y2):
regr1 = linear_model.LinearRegression()
regr1.fit(x1, y1)
predicted_value1 = regr1.predict(9)
print predicted_value1
regr2 = linear_model.LinearRegression()
regr2.fit(x2, y2)
predicted_value2 = regr2.predict(9)
#print predicted_value1
#print predicted_value2
if predicted_value1 > predicted_value2:
print "The Flash Tv Show will have more viewers for next week"
else:
print "Arrow Tv Show will have more viewers for next week"
把所有東西寫在一個文件中。打開你的編輯器,把它命名為prediction.py,復制下面的代碼到prediction.py中。
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# Required Packages
import csv
import sys
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from sklearn import datasets, linear_model
# Function to get data
def get_data(file_name):
data = pd.read_csv(file_name)
flash_x_parameter = []
flash_y_parameter = []
arrow_x_parameter = []
arrow_y_parameter = []
for x1,y1,x2,y2 in zip(data['flash_episode_number'],data['flash_us_viewers'],data['arrow_episode_number'],data['arrow_us_viewers']):
flash_x_parameter.append([float(x1)])
flash_y_parameter.append(float(y1))
arrow_x_parameter.append([float(x2)])
arrow_y_parameter.append(float(y2))
return flash_x_parameter,flash_y_parameter,arrow_x_parameter,arrow_y_parameter
# Function to know which Tv show will have more viewers
def more_viewers(x1,y1,x2,y2):
regr1 = linear_model.LinearRegression()
regr1.fit(x1, y1)
predicted_value1 = regr1.predict(9)
print predicted_value1
regr2 = linear_model.LinearRegression()
regr2.fit(x2, y2)
predicted_value2 = regr2.predict(9)
#print predicted_value1
#print predicted_value2
if predicted_value1 > predicted_value2:
print "The Flash Tv Show will have more viewers for next week"
else:
print "Arrow Tv Show will have more viewers for next week"
x1,y1,x2,y2 = get_data('input_data.csv')
#print x1,y1,x2,y2
more_viewers(x1,y1,x2,y2)
可能你能猜出哪個節目會有更多觀眾——但運行一下這個程序看看你猜的對不對。
3) 替換數據集中的缺失值
有時候,我們會遇到需要分析包含有缺失值的數據的情況。有些人會把這些缺失值捨去,接著分析;有些人會用最大值、最小值或平均值替換他們。平均值是三者中最好的,但可以用線性回歸來有效地替換那些缺失值。
這種方法差不多像這樣進行。
首先我們找到我們要替換那一列里的缺失值,並找出缺失值依賴於其他列的哪些數據。把缺失值那一列作為Y_parameters,把缺失值更依賴的那些列作為X_parameters,並把這些數據擬合為線性回歸模型。現在就可以用缺失值更依賴的那些列預測缺失的那一列。
一旦這個過程完成了,我們就得到了沒有任何缺失值的數據,供我們自由地分析數據。
為了練習,我會把這個問題留給你,所以請從網上獲取一些缺失值數據,解決這個問題。一旦你完成了請留下你的評論。我很想看看你的結果。
個人小筆記:
我想分享我個人的數據挖掘經歷。記得在我的數據挖掘引論課程上,教師開始很慢,解釋了一些數據挖掘可以應用的領域以及一些基本概念。然後突然地,難度迅速上升。這令我的一些同學感到非常沮喪,被這個課程嚇到,終於扼殺了他們對數據挖掘的興趣。所以我想避免在我的博客文章中這樣做。我想讓事情更輕松隨意。因此我嘗試用有趣的例子,來使讀者更舒服地學習,而不是感到無聊或被嚇到。
謝謝讀到這里——請在評論框里留下你的問題或建議,我很樂意回復你。