可汉学院python_A可汗学院-统计学python实现1-10
【第 1集】 均值 中位數 眾數平均數(Mean):指在一組數據中所有數據之和再除以這組數據的個數。
中位數(Median):按順序排列的一組數據中居于中間位置的數,如果觀察值有偶數個,通常取最中間的兩個數值的平均數作為中位數。
眾數(Mode):一組數據中出現次數最多的數值,有時眾數在一組數中有好幾個。
import numpy as np
from scipy import stats
nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
nums1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 8]
print(np.mean(nums))# 均值 5.5
print(np.median(nums))# 中位數 5.5
print(np.median(nums1))# 中位數 6.0
print(stats.mode(nums)[0][0]) #沒有眾數
print(stats.mode(nums1)) #眾數 8
【第 2集】 極差 中程數極差:其最大值與最小值之間的差距,即最大值減最小值后所得之數據
中程數(Mid-range)是一組統計數據值的最大值和最小值的平均數
import numpy as np
nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(np.ptp(nums)) #極差 9
print(np.ptp(nums)/2) #中程數 4.5
【第 3集】 象形統計圖
象形統計圖:表現統計數字大小和變動的各種圖形總稱。其中有條形統計圖、扇形統計圖、折線統計圖、象形圖等。
O-型血人數:2×8=16
【第 4集】 條形圖
條形統計圖:是用一個單位長度表示一定的數量,根據數量的多少畫成長短不同的直條,然后把這些直條按一定的順序排列起來。從條形統計圖中很容易看出各種數量的多少條形圖:參考https://blog.csdn.net/hohaizx/article/details/79101322
import matplotlib.pyplot as plt
import matplotlib
# 設置中文字體和負號正常顯示
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['axes.unicode_minus'] = False
label_list = ['Jasmine', 'Jeff', 'nevin', 'Alejandrn', 'Marta'] # 橫坐標刻度顯示值
list1 = [72, 86, 82, 81, 96] # 縱坐標值1
list2 = [78, 84, 88, 95, 90] # 縱坐標值2
x = np.arange(len(list1))
"""
繪制條形圖
left:長條形中點橫坐標
height:長條形高度
width:長條形寬度,默認值0.8
label:為后面設置legend準備
"""
rects1 = plt.bar(x=x, height=list1, width=0.4, alpha=0.4, color='blue', label="期中考試")
rects2 = plt.bar(x=x+0.4, height=list2, width=0.4, alpha=0.5, color='red', label="期末考試")
plt.ylim(0, 110) # y軸取值范圍
plt.ylabel("成績")
"""
設置x軸刻度顯示值
參數一:中點坐標
參數二:顯示值
"""
plt.xticks(x+0.2, label_list)
plt.xlabel("名字")
plt.title("成績單")
plt.legend() # 設置題注
# 編輯文本
for rect in rects1:
height = rect.get_height()
plt.text(rect.get_x() + rect.get_width() / 2, height+1, str(height),
ha="center", va="bottom")
for rect in rects2:
height = rect.get_height()
plt.text(rect.get_x() + rect.get_width() / 2, height+1, str(height),
ha="center", va="bottom")
plt.show()
【第 5集】 線形圖
線形圖又稱為“點狀圖”(point chart)、“停頓圖”(Stopping chart)或“星狀圖”(star chart)。線形圖屬于圖表分析的一類,僅記錄收盤價,至於開盤價、當日最高價、當日最高的變動及波動幅度則欠缺。以線形圖捕捉長期趨勢還可以,但卻難于捕捉短線和中線趨勢,目前已較少有人使用。
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
#X軸,Y軸數據
x = [0, 1, 2, 3, 4, 5, 6, 7, 8]
y = [6.59, 6.70, 6.95, 7.30, 7.30, 7.37, 7.1, 7.51, 7.58]
plt.figure(figsize=(8, 4)) # 創建繪圖對象
plt.style.use('ggplot') # 網格
plt.plot(x, y, "b--", linewidth=1) #(X軸,Y軸,藍色虛線,線寬度)
plt.xlabel("時間") #X軸標簽
plt.ylabel("股票價格") #Y軸標簽
plt.title("股票價格-時間") #圖標題
plt.show()
【第 6集】 餅圖
餅圖顯示一個數據系列中各項的大小與各項總和的比例。餅圖中的數據點顯示為整個餅圖的百分比。
每個季度的收入:
import matplotlib.pyplot as plt
labels = ['quarter1', 'quarter2', 'quarter3', 'quarter4']
sizes = [40, 30, 20, 10]
plt.pie(sizes, labels=labels, autopct='%1.1f%%')
# plt.legend(loc=[0.9, 0.6])
plt.axis('equal')
plt.show()
【第 7集】 誤導人的線形圖
若線形圖的刻度不一樣容易引起誤解,為了不引起誤解,線性圖畫在一張圖中。
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
#X軸,Y軸數據
x = [0, 1, 2, 3, 4, 5, 6, 7, 8]
y = [6.59, 6.70, 6.95, 7.30, 7.30, 7.37, 7.1, 7.51, 7.58]
y1 = [3.295, 3.35, 3.475, 3.65, 4, 3.685, 3.55, 3.755, 3.79]
# print(y1)
plt.figure(figsize=(8, 4)) # 創建繪圖對象
plt.style.use('ggplot') # 網格
plt.plot(x, y, "b--", linewidth=1) #(X軸,Y軸,藍色虛線,線寬度)
plt.plot(x, y1, "r--", linewidth=1) #(X軸,Y軸,紅色虛線,線寬度)
plt.xlabel("時間") #X軸標簽
plt.ylabel("股票價格") #Y軸標簽
plt.title("股票價格-時間") #圖標題
plt.show()
【第 8集】 莖葉圖
莖葉圖的思路是將數組中的數按位數進行比較,將數的大小基本不變或變化不大的位作為一個主干(莖),將變化大的位的數作為分枝(葉),列在主干的后面,這樣就可以清楚地看到每個主干后面的幾個數,每個數具體是多少。
上圖是12個足球隊員的各自得分,總共得多少分?
Stem:得分十位數
Leaf:得分個位數
總計得分:(0+0+2+4+7+7+9) + (11+11+11+13+18) + (20)
from itertools import groupby
nums2 = [0, 0, 2, 4, 7, 7, 9, 11, 11, 13, 18, 20]
for k, g in groupby(sorted(nums2), key=lambda x: int(x) // 10):
# print('k', k)
# print('g', list(g))
lst = map(str, [int(y) % 10 for y in list(g)])
print(k, '|', ' '.join(lst))
【第 9集】 箱線圖
顧客距離餐廳遠近的分布,可以用箱線圖。
箱形圖(Box plot):又稱為盒須圖、盒式圖、盒狀圖或箱線圖,是一種用作顯示一組數據分散情況資料的統計圖。因型狀如箱子而得名。其最大的優點就是不受異常值的影響,可以以一種相對穩定的方式描述數據的離散分布情況。線形圖:適于了解變量隨時間變化的趨勢,也可以是一個變量對另外一個變量的趨勢。
條形圖:適于將事物歸類,看類別的分布情況。
餅圖:適于看到各部分的占比。
莖葉圖:適于了解分布的情況。
箱線圖:適于了解中位數和散布的情況。作者求解四分位數的方法是第一種方法
另一種求解箱線圖的的方法:箱線圖中的四分位數是第二種求解方法
import pandas as pd
import matplotlib.pyplot as plt
from pandas.plotting import table
data = {
'distance': [1, 1, 2, 2, 3, 3, 4, 4, 6, 7, 8, 10, 11, 14, 15, 20, 22]
}
df = pd.DataFrame(data)
fig, ax = plt.subplots(1, 1)
table(ax, np.round(df.describe(), 2),
loc='upper right',
colWidths=[0.2, 0.2]
)
# df.plot.box(title="Consumer spending in each country", vert=False)
df.plot.box(title="customer distance",
ax=ax,
ylim=(0, 30))
plt.grid(linestyle="--", alpha=0.3)
plt.show()
四分位數:有兩種求法不包含中位數,求解四分位數
包含中位數,求解四分位數例子:2、4、4、5、6、7、8
第一四分位數(Q1) = 4
第二四分位數(Q2) = 5
第三四分位數(Q3) = 7例子:1、3、3、4、5、6、6、7、8、8
第一四分位數(Q1) = 3
第二四分位數(Q2) = 5.5
第三四分位數(Q3) = 7
import numpy as np
def quartile_t1(data):
'''四分位數'''
n = len(data)
q1, q2, q3 = None, None, None
if n >= 4:
sorted_data = sorted(data)
q2 = np.median(sorted_data)
if n % 2 == 1:
q1 = np.median(sorted_data[:n//2])
q3 = np.median(sorted_data[n//2 + 1:])
else:
q1 = np.median(sorted_data[:n // 2])
q3 = np.median(sorted_data[n // 2:])
return q1, q2, q3
# 不包含中位數,求解四分位數
# 包含中位數,求解四分位數
data1 = [5, 7, 4, 4, 6, 2, 8]
print(quartile_t1(data1)) # 4, 5, 7
print(np.percentile(data1, [25, 50, 75])) # 4. 5. 6.5
data2 = [1, 3, 3, 4, 5, 6, 6, 7, 8, 8]
print(quartile_t1(data2)) # 3, 5.5, 7
print(np.percentile(data2, [25, 50, 75])) # 3.25 5.5 6.75
【第10集】 箱線圖2
上圖是100棵樹的樹齡箱線圖,問樹齡極差是多少,樹齡中位數是多少?
由圖可以看出:最小值是8,最大值是50,所以極差是50-8=42;中位數是豎線坐標21。
總結
以上是生活随笔為你收集整理的可汉学院python_A可汗学院-统计学python实现1-10的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 统计学——可汗学院
- 下一篇: Unity3d LOD 使用以及 Bia