Python數據分析實例
python連接MySQL資料庫實例分析
本文實例講述了python連接MySQL資料庫的方法。分享給大家供大家參考。具體實現方法如下:
import MySQLdb
conn = MySQLdb.connect(host="localhost",
user="root",
passwd="123456",
db="test")
cursor = conn.cursor()
cursor.execute("select * from hard")
res = cursor.fetchall()
for x in res:
print x
cursor.close()
conn.close()
運行結果如下:
希望本文所述對大家的python程序設計有所幫助。
Ⅱ 如何用python寫 數據分析工具
數據導入
導入本地的或者web端的CSV文件;
數據變換;
數據統計描述;
假設檢驗
單樣本t檢驗;
可視化;
創建自定義函數。
t : 浮點或數組類型
t統計量prob : 浮點或數組類型
two-tailed p-value 雙側概率值重復100次; 然後
計算出置信區間包含真實均值的百分比
數據導入
這是很關鍵的一步,為了後續的分析我們首先需要導入數據。通常來說,數據是CSV格式,就算不是,至少也可以轉換成CSV格式。在Python中,我們的操作如下:
Python
1
2
3
4
5
6
7
8
import pandas as pd
# Reading data locally
df = pd.read_csv('/Users/al-ahmadgaidasaad/Documents/d.csv')
# Reading data from web
data_url = "t/Analysis-with-Programming/master/2014/Python/Numerical-Descriptions-of-the-Data/data.csv"
df = pd.read_csv(data_url)
為了讀取本地CSV文件,我們需要pandas這個數據分析庫中的相應模塊。其中的read_csv函數能夠讀取本地和web數據。
數據變換
既然在工作空間有了數據,接下來就是數據變換。統計學家和科學家們通常會在這一步移除分析中的非必要數據。我們先看看數據:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# Head of the data
print df.head()
# OUTPUT
0 12432934148330010553
1 41589235 4287806335257
2 17871922 19551074 4544
317152 14501 3536 1960731687
4 12662385 25303315 8520
# Tail of the data
print df.tail()
# OUTPUT
74 2505 20878 3519 1973716513
7560303 40065 7062 1942261808
76 63116756 3561 1591023349
7713345 38902 2583 1109668663
78 2623 18264 3745 1678716900
對R語言程序員來說,上述操作等價於通過print(head(df))來列印數據的前6行,以及通過print(tail(df))來列印數據的後6行。當然Python中,默認列印是5行,而R則是6行。因此R的代碼head(df, n = 10),在Python中就是df.head(n = 10),列印數據尾部也是同樣道理。
在R語言中,數據列和行的名字通過colnames和rownames來分別進行提取。在Python中,我們則使用columns和index屬性來提取,如下:
Python
1
2
3
4
5
6
7
8
9
10
11
# Extracting column names
print df.columns
# OUTPUT
Index([u'Abra', u'Apayao', u'Benguet', u'Ifugao', u'Kalinga'], dtype='object')
# Extracting row names or the index
print df.index
# OUTPUT
Int64Index([0, 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, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78], dtype='int64')
數據轉置使用T方法,
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
# Transpose data
print df.T
# OUTPUT
01 23 45 67 89
Abra1243 41581787171521266 5576 927215401039 5424
Apayao2934 92351922145012385 7452109917038138210588
Benguet148 42871955 353625307712796 24632592 1064
Ifugao3300
... 69 70 71 72 73 74 75 76 77
Abra ...12763 247059094 620913316 250560303 631113345
Apayao ...376251953235126 6335386132087840065 675638902
Benguet... 2354 4045 5987 3530 2585 3519 7062 3561 2583
Ifugao ... 9838171251894015560 774619737194221591011096
Kalinga...
78
Abra2623
Apayao 18264
Benguet 3745
Ifugao 16787
Kalinga16900
Other transformations such as sort can be done using<code>sort</code>attribute. Now let's extract a specific column. In Python, we do it using either<code>iloc</code>or<code>ix</code>attributes, but<code>ix</code>is more robust and thus I prefer it. Assuming we want the head of the first column of the data, we have
其他變換,例如排序就是用sort屬性。現在我們提取特定的某列數據。Python中,可以使用iloc或者ix屬性。但是我更喜歡用ix,因為它更穩定一些。假設我們需數據第一列的前5行,我們有:
Python
1
2
3
4
5
6
7
8
9
print df.ix[:, 0].head()
# OUTPUT
0 1243
1 4158
2 1787
317152
4 1266
Name: Abra, dtype: int64
順便提一下,Python的索引是從0開始而非1。為了取出從11到20行的前3列數據,我們有:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
print df.ix[10:20, 0:3]
# OUTPUT
AbraApayaoBenguet
109811311 2560
1127366 15093 3039
12 11001701 2382
13 7212 11001 1088
14 10481427 2847
1525679 15661 2942
16 10552191 2119
17 54376461734
18 10291183 2302
1923710 12222 2598
20 10912343 2654
上述命令相當於df.ix[10:20, ['Abra', 'Apayao', 'Benguet']]。
為了舍棄數據中的列,這里是列1(Apayao)和列2(Benguet),我們使用drop屬性,如下:
Python
1
2
3
4
5
6
7
8
9
print df.drop(df.columns[[1, 2]], axis = 1).head()
# OUTPUT
AbraIfugaoKalinga
0 1243330010553
1 4158806335257
2 17871074 4544
317152 1960731687
4 12663315 8520
axis參數告訴函數到底舍棄列還是行。如果axis等於0,那麼就舍棄行。
統計描述
下一步就是通過describe屬性,對數據的統計特性進行描述:
Python
1
2
3
4
5
6
7
8
9
10
11
12
print df.describe()
# OUTPUT
AbraApayaoBenguetIfugao Kalinga
count 79.000000 79.00000079.000000 79.000000 79.000000
mean 12874.37974716860.6455703237.39240512414.62025330446.417722
std16746.46694515448.1537941588.536429 5034.28201922245.707692
min927.000000401.000000 148.000000 1074.000000 2346.000000
25% 1524.000000 3435.5000002328.000000 8205.000000 8601.500000
50% 5790.00000010588.0000003202.00000013044.00000024494.000000
75%13330.50000033289.0000003918.50000016099.50000052510.500000
max60303.00000054625.0000008813.00000021031.00000068663.000000
假設檢驗
Python有一個很好的統計推斷包。那就是scipy裡面的stats。ttest_1samp實現了單樣本t檢驗。因此,如果我們想檢驗數據Abra列的稻穀產量均值,通過零假設,這里我們假定總體稻穀產量均值為15000,我們有:
Python
1
2
3
4
5
6
7
from scipy import stats as ss
# Perform one sample t-test using 1500 as the true mean
print ss.ttest_1samp(a = df.ix[:, 'Abra'], popmean = 15000)
# OUTPUT
(-1.1281738488299586, 0.26270472069109496)
返回下述值組成的元祖:
通過上面的輸出,看到p值是0.267遠大於α等於0.05,因此沒有充分的證據說平均稻穀產量不是150000。將這個檢驗應用到所有的變數,同樣假設均值為15000,我們有:
Python
1
2
3
4
5
6
print ss.ttest_1samp(a = df, popmean = 15000)
# OUTPUT
(array([ -1.12817385, 1.07053437, -65.81425599,-4.564575, 6.17156198]),
array([2.62704721e-01, 2.87680340e-01, 4.15643528e-70,
1.83764399e-05, 2.82461897e-08]))
第一個數組是t統計量,第二個數組則是相應的p值。
可視化
Python中有許多可視化模塊,最流行的當屬matpalotlib庫。稍加提及,我們也可選擇bokeh和seaborn模塊。之前的博文中,我已經說明了matplotlib庫中的盒須圖模塊功能。
;
Python中,程序如下:
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
import numpy as np
import scipy.stats as ss
def case(n = 10, mu = 3, sigma = np.sqrt(5), p = 0.025, rep = 100):
m = np.zeros((rep, 4))
for i in range(rep):
norm = np.random.normal(loc = mu, scale = sigma, size = n)
xbar = np.mean(norm)
low = xbar - ss.norm.ppf(q = 1 - p) * (sigma / np.sqrt(n))
up = xbar + ss.norm.ppf(q = 1 - p) * (sigma / np.sqrt(n))
if (mu > low) & (mu < up):
rem = 1
else:
rem = 0
m[i, :] = [xbar, low, up, rem]
inside = np.sum(m[:, 3])
per = inside / rep
desc = "There are " + str(inside) + " confidence intervals that contain "
"the true mean (" + str(mu) + "), that is " + str(per) + " percent of the total CIs"
return {"Matrix": m, "Decision": desc}
上述代碼讀起來很簡單,但是循環的時候就很慢了。下面針對上述代碼進行了改進,這多虧了Python專家,看我上篇博文的15條意見吧。
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import numpy as np
import scipy.stats as ss
def case2(n = 10, mu = 3, sigma = np.sqrt(5), p = 0.025, rep = 100):
scaled_crit = ss.norm.ppf(q = 1 - p) * (sigma / np.sqrt(n))
norm = np.random.normal(loc = mu, scale = sigma, size = (rep, n))
xbar = norm.mean(1)
low = xbar - scaled_crit
up = xbar + scaled_crit
rem = (mu > low) & (mu < up)
m = np.c_[xbar, low, up, rem]
inside = np.sum(m[:, 3])
per = inside / rep
desc = "There are " + str(inside) + " confidence intervals that contain "
"the true mean (" + str(mu) + "), that is " + str(per) + " percent of the total CIs"
return {"Matrix": m, "Decision": desc}
更新
那些對於本文ipython notebook版本感興趣的,請點擊這里。這篇文章由Nuttens Claude負責轉換成ipython notebook 。
Ⅲ Python購物籃數據(關聯分析)
pip install mlxtend
由於已經是csv格式,所以直接輸入:
每一跡冊殲行: 一個購物籃
每一列: 購物籃中的商品
先看看pd讀的對不對:
然後按行列印:
再將這些存在一個數組中:
1、什麼是獨熱碼
獨熱碼,在英文文獻中稱做 one-hot code, 直觀來說就是有多少個狀態就有多少比特,而且只有一個比特為1,其他全為0的一種碼制,更加詳細參加 one_hot code(維基網路) 。在機器學習中對於離散型的分類型的數據,需要對其進行數字化比如說性別這一屬性,只能有男性或者女性或者其他這三種值,如何對這三個值進行數字化表達?一種簡單的方式就是男性為0,女性為1,其他為2,這樣做有什麼問題?
使用上面簡單的序列對分類值進行表示後,進行模型訓練時可能會產生一個問題就是特徵的因為數字值得不同影響模型的訓練效果,在模型訓練的過程中不同的值使得同一特徵在樣本中的權重可能發生變化,假如直接編碼成1000,是不是比編碼成1對模型的的影響更大。為了解決上述的問題,使訓練過程中不受到因為分類值表示的問題對模型產生的負面影響,引入獨熱姿氏碼對分類型的特徵進行獨熱碼編碼。
可以這樣理解,對於每一個特徵,如果它有m個可能值,那麼經過獨熱編碼後,就變成了m個姿沖二元特徵(如成績這個特徵有好,中,差變成one-hot就是100, 010, 001)。並且,這些 特徵互斥 ,每次只有一個激活。因此,數據會變成稀疏的。
這樣做的好處主要有:
(1)解決了分類器不好處理 屬性數據 的問題
(2)在一定程度上也起到了 擴充特徵 的作用
M
以下為我摘取的別人的,貼上原文鏈接https://blog.csdn.net/hellozhxy/article/details/80600845
著名的啤酒與尿布, 這是典型的購物籃問題, 在數據挖掘界叫做頻繁項集(Frequent Itemsets).
note: 數據類型寫法按照Python的格式.
一. 目標與定義
1. 問題背景
超市中購物清單中總是有一些項目是被消費者一同購買的. 如果我們能夠發現這些 關聯規則 (association rules), 並合理地加以利用, 我們就能取得一定成果. 比如我們發現熱狗和芥末存在這種關系, 我們對熱狗降價促銷, 而對芥末適當提價, 結果能顯著提高超市的銷售額.
2. 目標
找到頻繁地 共同 出現在消費者結賬小票中項目(比如啤酒和尿布), 來一同促銷, 相互拉動, 提高銷售額.
3. 定義
支持度support: 其實就是概率論中的頻次frequency
支持度閾值support threshhold: 記為s, 指分辨頻繁項集的臨界值.
頻繁項集: 如果I是一個項集(Itemset), 且I的出現頻次(i.e.支持度)大於等於s, 那麼我們說I是頻繁項集.
一元項, 二元項, 三元項: 包含有一種商品, 兩種, 三種商品的項集.
4. 關聯規則
關聯規則: 形式為I->j, 含義是如果I種所有項都出現在某個購物籃的話, 那麼j很有可能也出現在這個購物籃中. 我們可以給出相應的confidence值(可信度, 即概率論中的置信度).
其中, 這個關聯規則的可信度計算為Confidence = I∪{j} / I, 本身是非常符合直覺和常識的. 比如我們說關聯規則{dog, cat} -> and 的可信度為0.6, 因為{dog, cat}出現在了1, 2, 3, 6, 7五個購物籃中, 而and出現在了1,2,7中, 因此我們可以算出Confidence = freq[{dog, cat, and}] / freq[{dog, cat}] = 3/5 = 0.6
注意到, 分子部分的頻次總是比分母低, 這是因為{dog, cat} 出現的次數總是大於等於{dog, cat, and}的出現次數.
二. 購物籃與A-Priori演算法
1. 購物籃數據表示
我們將有一個文本文件輸入, 比如allBills.txt, 或者allBills.csv. 裡面每行是一個購物籃.
文件的頭兩行可能是這樣(df.show(2)):
{23, 456, 1001}
{3, 18, 92, 145}
我們假定這是一家大型連鎖超市, 比如沃爾瑪, 因此這個文本文件是非常大的, 比如20GB. 因此我們無法一次將該文件讀入內存. 因此, 演算法的主要時間開銷都是磁碟IO.
我們同時還假定, 所有購物籃的平均規模是較小的, 因此在內存中產生所有大小項集的時間開銷會比讀入購物籃的時間少很多.
我們可以計算, 對於有n個項目組成的購物籃而言, 大小為k的所有子集的生成時間約為(n, k) = n! / ((n-k)!k!) = O(n^k/ k!), 其中我們只關注較小的頻繁項集, 因此我們約定k=2或者k=3. 因此所有子集生成時間T = O(n^3).
Again, 我們認為 在內存中產生所有大小項集的時間開銷會比讀入購物籃的時間少很多.
2. Itemset計數過程中的內存使用
我們必須要把整個k,v字典放在內存中, 否則來一個Itemset就去硬碟讀取一次字典將十分十分地慢.
此處, 字典是k=(18, 145), v=15這種形式. 此處, 應當注意到, 如果有{bread, milk, orange}這樣的String類型輸入, 應當預先用一個字典映射成對應的整數值編碼, 比如1920, 4453, 9101這樣.
那麼, 我們最多能用字典存儲多少種商品?
先看下我們存儲多少個count值.
我們假定項的總數目是n, 即超市有n種商品, 每個商品都有一個數字編號, 那麼我們需要(n, 2) = n^2/2 的大小來存儲所有的二元組合的count, 假設int是佔4個byte, 那麼需要(2·n^2)Byte內存. 已知2GB內存 = 2^31 Byte, 即2^31/2 = 2^30 >= n^2 --> n <= 2^15. 也就是說n<33 000, 因此我們說商品種類的最多是33k種.
但是, 這種計算方法存在一個問題, 並不是有10種商品, 那麼這10種商品的任意二元組合都會出現的. 對於那些沒出現的組合, 我們在字典中完全可以不存儲, 從而節省空間.
同時, 別忘了我們同樣也得存儲key = (i, j), 這是至少額外的兩個整數.
那麼我們到底具體怎麼存儲這些計數值?
可以採用三元組的方式來構造字典. 我們採用[i, j, count]形式來存儲, 其中i代表商品種類1, j代表商品種類2, 前兩個值代表key, 後面的value就是count, 是這個二元組合下的計數.
現在, 讓我們注意到我們(1)假定購物籃平均大小較小, 並(2)利用三元組(2個key的)字典和(3)不存儲沒出現組合優勢. 假設有100k = 10^5種商品, 有10million=10^7個購物籃, 每個購物籃有10個項, 那麼這種字典空間開銷是(10, 2) · 10^7 = 45 x 10^7 x 3= 4.5x10^8x3 = 1.35x10^9 個整數. 這算出來約為4x10^8 Byte = 400MB, 處於正常計算機內存范圍內.
3. 項集的單調性
如果項集I是頻繁的, 那麼它的所有子集也都是頻繁的. 這個道理很符合常識, 因為{dog, cat} 出現的次數總是大於等於{dog, cat, and}的出現次數.
這個規律的推論, 就是嚴格地, 我們頻繁一元組的個數> 頻繁二元組的個數 > 頻繁三元組的個數.
4. A-Priori演算法
我們通過Itemset計數中內存使用的部門, 已經明確了我們總是有足夠的內存用於所有存在的二元項集(比如{cat, dog})的計數. 這里, 我們的字典不存放不存在於購物籃中的任何二元項集合, 而且頻繁二元組的數目將會大於三元頻繁三元組> ...
我們可以通過單邊掃描購物籃文件, 對於每個購物籃, 我們使用一個雙重循環就可以生成所有的項對(即二元組). 每當我們生成一個項對, 就給其對應的字典中的value +1(也稱為計數器). 最後, 我們會檢查所有項對的計數結果,並且找出那些>=閾值s的項對, 他們就是頻繁項對.
1) A-Priori演算法的第一遍掃描
在第一遍掃描中, 我們將建立兩個表. 第一張表將項的名稱轉換為1到n之間的整數, 從而把String類型這樣的key轉為空間大小更小的int類型. 第二張表將記錄從1~n每個項在所有購物籃中出現的次數. 形式上類似
table 0(name table): {'dolphin': 7019, 'cat': 7020} //dict形式, 其實也可以做成list形式 [['dolphin', 7019], ['cat', 7020]]
table 1(single-item counter table): {7019: 15, 7020: 18} //dict形式, 其實也可以做成數組形式A[7019] = 2, A[7020] = 18
2) 第一遍掃描完的處理
第一遍掃描完後, 我們會按照自己設定的閾值s, 對整個table 1再進行一次mapping, 因為我們只關注最後counter值大於等於閾值的項目, 而且不關心其counter值具體多少. 因此, mapping策略是:
對凡是counter<s的, 一律把counter設成0; 對於counter>=s的, 按照次序, 把其設置成1~m的值(總共有m個滿足要求的項)
3) 第二遍掃描
第二遍掃描所做的事有三:
(1) 對每個購物籃, 在table 1中檢查其所有的商品項目, 把所有為頻繁項的留下來建立一個list.
(2) 通過一個雙重循環生成該list中的所有項對.
(3) 再走一次循環, 在新的數據結構table 2(dict或者list)中相應的位置+1. 此時的效果是dicta = {48: {13: 5}, 49: {71, 16}} 或者 lista [ [48, 13, 5],[49, 71, 16], ... ]
注意此時內存塊上存儲的結構: table1(name table), table2(single-item counter table), table3(double-item counter table)
5. 推廣: 任意大小頻繁項集上的A-Priori演算法
我們對上面這個演算法進行推廣.
從任意集合大小k到下一個大小k+1的轉移模式可以這么說:
(1) 對每個購物籃, 在table 1中檢查其所有的商品項目, 把所有為頻繁項的留下來建立一個list.
(2) 我們通過一個k+1重循環來生成該list中的所有(k+1)元組
(3) 對每個k+1元組, 我們生成其的(k+1 choose k)個k元組, 並檢查這些k元組是否都在之前的table k中. (注意到k=1的時候, 這步與(1)是重復的, 可以省略)
(4)再走一次循環, 在新的數據結構table k+1(dict或者list)中相應的位置+1. 此時的效果是k=2, k+1=3, 生成dicta = {48: {13: {19: 4}}, 49: {71: {51: 10}}, ... } 或者 生成lista [ [48, 13, 19, 4],[49, 71, 51, 10], ... ]
注意, 在進入下一次掃描前, 我們還需要額外把counter中值小於s的元組的計數值都記為0.
模式總體是:C1 過濾後 L1 計數後 C2 置零後 C2' 過濾後 L2 計數後 C3 置零後 C3' ......
END.
生成的商品種類為set形式:轉成list形式
第一張表:把項名稱轉換為1~n的整數:
至於數數,大神說,你就用collections.Counter就好:哈?
哈哈,可愛的wyy,開始分析吧~嚕嚕嚕啦啦啦~嚕啦嚕啦嚕~
生成全零矩陣:
換成zeros:
統計每一列的和,即每種商品的購買總數:
每一行列:
第一行:
建立一個新的只含有頻繁一項集的購物籃矩陣:
頻繁二項集:
Ⅳ python怎麼做大數據分析
數據獲取:公開數據、Python爬蟲外部數據的獲取方式主要有以下兩種。(推薦學習:Python視頻教程)
第一種是獲取外部的公開數據集,一些科研機構、企業、政府會開放一些數據,你需要到特定的網站去下載這些數據。這些數據集通常比較完善、質量相對較高。
另一種獲取外部數據的方式就是爬蟲。
比如你可以通過爬蟲獲取招聘網站某一職位的招聘信息,爬取租房網站上某城市的租房信息,爬取豆瓣評分評分最高的電影列表,獲取知乎點贊排行、網易雲音樂評論排行列表。基於互聯網爬取的數據,你可以對某個行業、某種人群進行分析。
在爬蟲之前你需要先了解一些 Python 的基礎知識:元素(列表、字典、元組等)、變數、循環、函數………
以及,如何用 Python 庫(urlpb、BeautifulSoup、requests、scrapy)實現網頁爬蟲。
掌握基礎的爬蟲之後,你還需要一些高級技巧,比如正則表達式、使用cookie信息、模擬用戶登錄、抓包分析、搭建代理池等等,來應對不同網站的反爬蟲限制。
數據存取:SQL語言
在應對萬以內的數據的時候,Excel對於一般的分析沒有問題,一旦數據量大,就會力不從心,資料庫就能夠很好地解決這個問題。而且大多數的企業,都會以SQL的形式來存儲數據。
SQL作為最經典的資料庫工具,為海量數據的存儲與管理提供可能,並且使數據的提取的效率大大提升。你需要掌握以下技能:
提取特定情況下的數據
資料庫的增、刪、查、改
數據的分組聚合、如何建立多個表之間的聯系
數據預處理:Python(pandas)
很多時候我們拿到的數據是不幹凈的,數據的重復、缺失、異常值等等,這時候就需要進行數據的清洗,把這些影響分析的數據處理好,才能獲得更加精確地分析結果。
對於數據預處理,學會 pandas (Python包)的用法,應對一般的數據清洗就完全沒問題了。需要掌握的知識點如下:
選擇:數據訪問
缺失值處理:對缺失數據行進行刪除或填充
重復值處理:重復值的判斷與刪除
異常值處理:清除不必要的空格和極端、異常數據
相關操作:描述性統計、Apply、直方圖等
合並:符合各種邏輯關系的合並操作
分組:數據劃分、分別執行函數、數據重組
Reshaping:快速生成數據透視表
概率論及統計學知識
需要掌握的知識點如下:
基本統計量:均值、中位數、眾數、百分位數、極值等
其他描述性統計量:偏度、方差、標准差、顯著性等
其他統計知識:總體和樣本、參數和統計量、ErrorBar
概率分布與假設檢驗:各種分布、假設檢驗流程
其他概率論知識:條件概率、貝葉斯等
有了統計學的基本知識,你就可以用這些統計量做基本的分析了。你可以使用 Seaborn、matplotpb 等(python包)做一些可視化的分析,通過各種可視化統計圖,並得出具有指導意義的結果。
Python 數據分析
掌握回歸分析的方法,通過線性回歸和邏輯回歸,其實你就可以對大多數的數據進行回歸分析,並得出相對精確地結論。這部分需要掌握的知識點如下:
回歸分析:線性回歸、邏輯回歸
基本的分類演算法:決策樹、隨機森林……
基本的聚類演算法:k-means……
特徵工程基礎:如何用特徵選擇優化模型
調參方法:如何調節參數優化模型
Python 數據分析包:scipy、numpy、scikit-learn等
在數據分析的這個階段,重點了解回歸分析的方法,大多數的問題可以得以解決,利用描述性的統計分析和回歸分析,你完全可以得到一個不錯的分析結論。
當然,隨著你實踐量的增多,可能會遇到一些復雜的問題,你就可能需要去了解一些更高級的演算法:分類、聚類。
然後你會知道面對不同類型的問題的時候更適合用哪種演算法模型,對於模型的優化,你需要去了解如何通過特徵提取、參數調節來提升預測的精度。
你可以通過 Python 中的 scikit-learn 庫來實現數據分析、數據挖掘建模和分析的全過程。
更多Python相關技術文章,請訪問Python教程欄目進行學習!以上就是小編分享的關於python怎麼做大數據分析的詳細內容希望對大家有所幫助,更多有關python教程請關注環球青藤其它相關文章!
Ⅳ python可視化數據分析常用圖大集合(收藏)
python數據分析常用圖大集合:包含折線圖、直方圖、垂直條形圖、水平條形圖、餅圖、箱線圖、熱力圖、散點圖、蜘蛛圖、二元變數分布、面積圖、六邊形圖等12種常用可視化數據分析圖,後期還會不斷的咐喊收集整理,請關注更新!
以下默認所有的操作都先導入了numpy、pandas、matplotlib、seaborn
一、折線圖
折線圖可以用來表示數據隨著時間變化的趨勢
Matplotlib
plt.plot(x, y)
plt.show()
Seaborn
df = pd.DataFrame({'x': x, 'y': y})
sns.lineplot(x="x", y="y", data=df)
plt.show()
二、直方圖
直方圖是比較常見的視圖,它是把橫坐標等分成了一定數量的小區間,然後在每個小區間內用矩形條(bars)展示該區間的數值
Matplotlib
Seaborn
三、垂直條形圖
條形圖可以幫我們查看類別的特徵。在條形圖中,長條形的長度表示類別的頻數,寬度表示類別。
Matplotlib
Seaborn
1plt.show()
四、水平條形圖
五、餅圖
六、箱線圖
箱線圖由五個數值點組成:最大值 (max)、最小值 (min)、中位數 (median) 和上下四分位數 (Q3, Q1)。
可以幫我們分析出數據的差異性、離散程度和異常值等。
Matplotlib
Seaborn
七、熱力圖
力圖,英文叫 heat map,是一種矩陣表示方法,其中矩陣中的元顫簡銷素值用顏色來代表,不同的顏色代表不同大小的值。通過顏色就能直觀地知道某個位置上數值的大小。
通過 seaborn 的 heatmap 函數,我們可以觀察到不同年份,不同月份的乘客數量變化情況,其中顏色越淺的代表乘客數量越多
八、散點圖
散點圖的英文茄游叫做 scatter plot,它將兩個變數的值顯示在二維坐標中,非常適合展示兩個變數之間的關系。
Matplotlib
Seaborn
九、蜘蛛圖
蜘蛛圖是一種顯示一對多關系的方法,使一個變數相對於另一個變數的顯著性是清晰可見
十、二元變數分布
二元變數分布可以看兩個變數之間的關系
十一、面積圖
面積圖又稱區域圖,強調數量隨時間而變化的程度,也可用於引起人們對總值趨勢的注意。
堆積面積圖還可以顯示部分與整體的關系。折線圖和面積圖都可以用來幫助我們對趨勢進行分析,當數據集有合計關系或者你想要展示局部與整體關系的時候,使用面積圖為更好的選擇。
十二、六邊形圖
六邊形圖將空間中的點聚合成六邊形,然後根據六邊形內部的值為這些六邊形上色。
原文至:https://www.py.cn/toutiao/16894.html
Ⅵ Python + Pandas + Matplotlib初探數據分析
大數據測試,說來進入這塊領域也快2年半了。每天工作的內容是驗證數據表的邏輯正確性。
最近偶有所思,數據測試能否更進一步?如何利用已有技能對海量數據進行全面分析,找出數據質量問題或協助數據分析師發現邏輯漏洞?
再或者,顫埋能否向數據分析師轉型呢?想凱洞棗得很多,思緒有些雜亂。於是我冷靜了下,不再空想。我先做點東西出來看看,再評估下自己是否有這個能力和資質。
花了1個星期的時間,學習了 Python 的 Pandas 模塊,按照學習示例一邊學習一邊實操,慢慢地感覺就來了。對 Pandas 有了基本的認知後,我在尋找一個突破點,我想我不能一直只是這樣按照示例代碼敲下去,毫無意義。
我得將所學的 Pandas 知識結合公司現有的業務進行運用。剛開始至少能簡單地開始對某張數據表的某個指標進行數據分析盯拆。於是我按照這樣的想法對 test. test_resv001_room_daily_df 表的 number_of_room_nights 指標開始了數據分析的 探索 。
1、hivesql數據准備
hivesql內容說明:
從上面的 hivesql 語句可以看出,這條 sql 的目的是查詢出 hotel_code_new 為 'CNSZV002','CWH','CWSW','ESL','FIJ' 在2019年各個月份的 number_of_room_nights 指標總和,按照 hotel_code_new 和月份作分組和排序。
2、代碼實現
3、hive資料庫all_data的數據結構查詢結果
4、代碼實現2中的print(df)輸出結果
手工校對通過,與 hivesql 輸出結果一致。
5、將dataframe數據結構的df數據使用plot生成趨勢圖
調用df.plot()不帶任何參數的趨勢圖如下:
上述折線圖表示:當前月份值及 歷史 月份值的累加和。
調用df.plot(kind='bar')時加上參數kind='bar'的趨勢圖如下:
上述柱狀圖表示:當前月份值及 歷史 月份值的累加和。
兩個圖只是展示形式上的區別,都能在一定程度上體現2019年12個月份每個不同 hotel_code_new 當前月份與 歷史 月份 number_of_room_nights 值的累加和的數據分布情況,可以說是一個簡單的數據分析。
6、將dataframe數據寫入csv文件
room_nts.csv內容如下:
7、讀取csv文件中dataframe數據
8、將dataframe多維數據存儲到excel中
room_nts.xlsx文件中sheet_name為room_nts的內容如下:
9、從excel中讀取dataframe多維數據
小結
今天分享的數據分析內容比較基礎,主要是將學到的技能與業務相結合的初步 探索 ,後續還需要不斷 探索 與學習,將學習到的技能加以思考並運用到實際項目業務中,如此方能走得更遠。