1. 程式人生 > >Python data science one

Python data science one

在常見的資料探勘中,dirty data的內容:

缺失值,異常值,不一致的值,重複的資料以及含有特殊符號(如#,*,等)

異常值往往十分的具有價值,重視異常值的出現,分析其產生的原因,常常成為發現問題而進而改進決策的契機

異常值分析:1st進行簡單的統計量分析,最常用的是最大值,最小值,用來判斷這個變數的取值是否超出了合理的選擇

2sed:正態分佈假設的3seigema???之外的小概率事件.3thd,識別異常值的一個標準,

這個在R資料分析中用的異常的多.....Python....下面來研究研究

資料特徵分析:

分佈分析:對於定量的資料,瞭解其分佈形式是對稱的還是非對稱的,發現某些特大或特小的可疑值,可通過回執頻率分佈圖,繪製頻率分佈直方圖,繪製莖葉圖進行直觀的分析,對於定性的分類資料,可用餅圖和條形圖直觀的顯示資料

ps:其實也就是根據經驗,靠著某種直覺來嘗試的意思

so,拿到一個案例的時候要考慮將什麼作為引數,反應什麼問題,做啥子分析..

常用的庫與函式:

matplotlib

import matplotlib.pyplot as plt
plt.plot([1,2,3,4])
plt.ylabel('some numbers')
plt.show()

也可以將plt.plot()函式傳遞多個序列,每兩個序列是一個x,y向量對,在圖中構成一條曲線

import matplotlib.pyplot as plt
plt.plot([1,2,3,4],[1,4,9,16],'ro')
plt.axis([0,6,0,20])

想用紅點表示這條曲線

'-'     solid line style
'--'    dashed line style
'-.'    dash-dot line style
':'     dotted line style
'.'     point marker
','     pixel marker
'o'     circle marker
'v'     triangle_down marker
'^'     triangle_up marker
'<'     triangle_left marker
'>'     triangle_right marker
'1'     tri_down marker
'2'     tri_up marker
'3'     tri_left marker
'4'     tri_right marker
's'     square marker
'p'     pentagon marker
'*'     star marker
'h'     hexagon1 marker
'H'     hexagon2 marker
'+'     plus marker
'x'     x marker
'D'     diamond marker
'd'     thin_diamond marker
'|'     vline marker
'_'     hline marker

The following color abbreviations are supported:
character   color
‘b’     blue
‘g’     green
‘r’     red
‘c’     cyan
‘m’     magenta
‘y’     yellow
‘k’     black
‘w’     white
#設定軸座標,[xmin, xmax, ymin, ymax]
plt.axis([1,8,1,32])

控制線的屬性 
線有許多屬性可以設定:線寬、線的形狀,平滑等等。這裡有一些設定線屬性的方法:

使用關鍵字引數
plt.plot(x,y,linewidth=2.0)

對線物件(Line2D)使用set_方法,plot()會返回一個線物件的列表,比如line1, line2 = plot(x1, y1, x2, y2)。下面的程式碼我們將假設我們只有一條線,即返回的線物件列表的長度為1。
line, = plt.plot(x, y, '-')
line.set_antialiased(False) # 關閉平滑

使用setp()命令。 下面的例子使用的是MATLAB風格的命令去設定一個線的列表的多個屬性。setp()可以作用於一個列表物件或者是一個單一的物件。你可以使用python風格的關鍵字引數或者是MATLAB風格的string/value對為引數:
lines = plt.plot(x1, y1, x2, y2)

# 使用關鍵字

plt.setp(lines, color='r', linewidth=2.0)

# 或者是MATLAB風格的string/value對

plt.setp(lines, 'color', 'r', 'linewidth', 2.0)

處理文字

  text()命令可以用來在任意位置上新增文字,xlabel(),ylabel(),title()可以用來在X軸,Y軸,標題處新增文字。

plt.xlabel('Smarts')#xlabel設定橫軸的名稱
plt.ylabel('Probability')#設定縱軸的名稱
plt.title('Histogram of IQ')#設定題目
plt.text(60, .025, r'$\mu=100,\ \sigma=15$')#設定在什麼位置上還寫啥
plt.axis([40, 160, 0, 0.03])
plt.grid(True)
plt.show()

圖:

mu, sigma = 100, 15
x = mu + sigma * np.random.randn(10000)


# 直方圖

n, bins, patches = plt.hist(x, 50, normed=1, facecolor='g', alpha=0.75)

#註釋
plt.annotate('local max', xy=(2, 1), xytext=(3, 1.5),
            arrowprops=dict(facecolor='black', shrink=0.05),
       
#縱座標
import numpy as np
import matplotlib.pyplot as plt


# 在區間[0,1]製造一些資料


# np.random.normal為高斯分佈

y = np.random.normal(loc=0.5, scale=0.4, size=1000)
y = y[(y > 0) & (y < 1)]
y.sort()
x = np.arange(len(y))


# 建立一個視窗

plt.figure(1)


# 線性

plt.subplot(221)
plt.plot(x, y)
plt.yscale('linear')
plt.title('linear')
plt.grid(True)



# 對數

plt.subplot(222)
plt.plot(x, y)
plt.yscale('log')
plt.title('log')
plt.grid(True)



# symmetric log

plt.subplot(223)
plt.plot(x, y - y.mean())
plt.yscale('symlog', linthreshy=0.05)
plt.title('symlog')
plt.grid(True)


# logit

plt.subplot(224)
plt.plot(x, y)
plt.yscale('logit')
plt.title('logit')
plt.grid(True)

plt.show()

繪製:

import matplotlib.pyplot as plt
import numpy as np
import matplotlib

# 設定matplotlib正常顯示中文和負號
matplotlib.rcParams['font.sans-serif']=['SimHei']   # 用黑體顯示中文
matplotlib.rcParams['axes.unicode_minus']=False     # 正常顯示負號
# 隨機生成(10000,)服從正態分佈的資料
data = np.random.randn(10000)
"""
繪製直方圖
data:必選引數,繪圖資料
bins:直方圖的長條形數目,可選項,預設為10
normed:是否將得到的直方圖向量歸一化,可選項,預設為0,代表不歸一化,顯示頻數。normed=1,表示歸一化,顯示頻率。
facecolor:長條形的顏色
edgecolor:長條形邊框的顏色
alpha:透明度
"""
plt.hist(data, bins=40, normed=0, facecolor="blue", edgecolor="black", alpha=0.7)
# 顯示橫軸標籤
plt.xlabel("區間")
# 顯示縱軸標籤
plt.ylabel("頻數/頻率")
# 顯示圖示題
plt.title("頻數/頻率分佈直方圖")
plt.show()

頻率頻數直方圖是連續的,條形圖是不連續的,只能表示分類的效果,在哪個明確的範圍內

import matplotlib.pyplot as plt
import matplotlib
# 設定中文字型和負號正常顯示
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['axes.unicode_minus'] = False

label_list = ['2014', '2015', '2016', '2017']    # 橫座標刻度顯示值
num_list1 = [20, 30, 15, 35]      # 縱座標值1
num_list2 = [15, 30, 40, 20]      # 縱座標值2
x = range(len(num_list1))
"""
繪製條形圖
left:長條形中點橫座標
height:長條形高度
width:長條形寬度,預設值0.8
label:為後面設定legend準備
"""
rects1 = plt.bar(left=x, height=num_list1, width=0.4, alpha=0.8, color='red', label="一部門")
rects2 = plt.bar(left=[i + 0.4 for i in x], height=num_list2, width=0.4, color='green', label="二部門")
plt.ylim(0, 50)     # y軸取值範圍
plt.ylabel("數量")
"""
設定x軸刻度顯示值
引數一:中點座標
引數二:顯示值
"""
plt.xticks([index + 0.2 for index in x], 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()



#plt.axes().get_xaxis().set_visible(False)隱藏座標軸
#設定視窗的尺寸
plt.figure(figsize=(10,6))
plt.figure(dpi=128,figsize(10,6))dpi向figure傳遞解析度....