python數據分析入門學習筆記

  
目錄  
一、  數據分析有關的python庫簡介  

(一)numpy

(二)pandas

(三)matplotlib

(四)scipy

(五)statsmodels

(六)scikit-learn

二、  數據的導入和導出  
三、  數據篩選  
四、  數據描述  
五、  數據處理  
六、  統計分析  
七、  可視化  
八、  其它
![](https://images2015.cnblogs.com/blog/911998/201603/911998-20160313205633319-924258473.png)

  
1.Numpy:Numpy是python科學計算的基礎包,它提供以下功能(不限于此):(1)快速高效的多維數組對象ndarray     (2)用于對數組執行元素級計算以及直接對數組執行數學運算的函數(3)用于讀寫硬盤上基于數組的數據集的工具(4)線性代數運算、傅里葉變換,以及隨機數生成(5)用于將C、C++、Fortran代碼集成到python的工具2.pandaspandas提供了使我們能夠快速便捷地處理結構化數據的大量數據結構和函數。pandas兼具Numpy高性能的數組計算功能以及電子表格和關系型數據(如SQL)靈活的數據處理能力。它提供了復雜精細的索引功能,以便更為便捷地完成重塑、切片和切塊、聚合以及選取數據子集等操作。對于金融行業的用戶,pandas提供了大量適用于金融數據的高性能時間序列功能和工具。DataFrame是pandas的一個對象,它是一個面向列的二維表結構,且含有行標和列標。ps.引用一段網上的話說明DataFrame的強大之處:Excel 2007及其以后的版本的最大行數是1048576,最大列數是16384,超過這個規模的數據Excel就會彈出個框框“此文本包含多行文本,無法放置在一個工作表中”。Pandas處理上千萬的數據是易如反掌的事情,同時隨后我們也將看到它比SQL有更強的表達能力,可以做很多復雜的操作,要寫的code也更少。 說了一大堆它的好處,要實際感觸還得動手碼代碼。3.matplotlibmatplotlib是最流行的用于繪制數據圖表的python庫。4.ScipyScipy是一組專門解決科學計算中各種標準問題域的包的集合。  
5.statsmodels: https://github.com/statsmodels/statsmodels  
6.scikit-learn: http://scikit-learn.org/stable/


一.數據導入和導出
(一)讀取csv文件1.本地讀取
import pandas as pd
df \= pd.read\_csv('E:\\\\tips.csv')  #根據自己數據文件保存的路徑填寫(p.s.  python填寫路徑時,要么使用/,要么使用\\\\)  
#輸出:total\_bill   tip     sex smoker   day    time  size
0         16.99  1.01  Female     No   Sun  Dinner     2
1         10.34  1.66    Male     No   Sun  Dinner     3
2         21.01  3.50    Male     No   Sun  Dinner     3
3         23.68  3.31    Male     No   Sun  Dinner     2
4         24.59  3.61  Female     No   Sun  Dinner     4
5         25.29  4.71    Male     No   Sun  Dinner     4
..          ...   ...     ...    ...   ...     ...   ...
240       27.18  2.00  Female    Yes   Sat  Dinner     2
241       22.67  2.00    Male    Yes   Sat  Dinner     2
242       17.82  1.75    Male     No   Sat  Dinner     2
243       18.78  3.00  Female     No  Thur  Dinner     2
\[244 rows x 7 columns\]
2.網絡讀取
import pandas as pd
data\_url \= "https://raw.githubusercontent.com/mwaskom/seaborn-data/master/tips.csv" #填寫url讀取
df = pd.read\_csv(data\_url)
#輸出同上,為了節省篇幅這兒就不粘貼了
3.read\_csv詳解功能: Read CSV (comma-separated) file into DataFrame
read\_csv(filepath\_or\_buffer, sep=',', dialect=None, compression='infer', doublequote=True, escapechar=None, quotechar='"', quoting=0, skipinitialspace=False, lineterminator=None, header='infer', index\_col=None, names=None, prefix=None, skiprows=None, skipfooter=None, skip\_footer=0, na\_values=None, true\_values=None, false\_values=None, delimiter=None, converters=None, dtype=None, usecols=None, engine=None, delim\_whitespace=False, as\_recarray=False, na\_filter=True, compact\_ints=False, use\_unsigned=False, low\_memory=True, buffer\_lines=None, warn\_bad\_lines=True, error\_bad\_lines=True, keep\_default\_na=True, thousands=None, comment=None, decimal='.', parse\_dates=False, keep\_date\_col=False, dayfirst=False, date\_parser=None, memory\_map=False, float\_precision=None, nrows=None, iterator=False, chunksize=None, verbose=False, encoding=None, squeeze=False, mangle\_dupe\_cols=True, tupleize\_cols=False, infer\_datetime\_format=False, skip\_blank\_lines=True)
參數詳解:
http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read\_csv.html(二)讀取Mysql數據假設數據庫安裝在本地,用戶名為myusername,密碼為mypassword,要讀取mydb數據庫中的數據
import pandas as pd
import MySQLdb
mysql\_cn\= MySQLdb.connect(host='localhost', port=3306,user='myusername', passwd='mypassword', db='mydb')
df \= pd.read\_sql('select \* from test;', con=mysql\_cn)    
mysql\_cn.close()
上面的代碼讀取了test表中所有的數據到df中,而df的數據結構為Dataframe。
ps.MySQL教程:http://www.runoob.com/mysql/mysql-tutorial.html
(三)讀取excel文件
要讀取excel文件還需要安裝xlrd模塊,pip install xlrd即可。
df = pd.read\_excel('E:\\\\tips.xls')

(四)數據導出到csv文件
df.to\_csv('E:\\\\demo.csv', encoding='utf-8', index=False) 
#index=False表示導出時去掉行名稱,如果數據中含有中文,一般encoding指定為‘utf-8’

(五)讀寫SQL數據庫

import pandas as pd
import sqlite3
con \= sqlite3.connect('...')
sql \= '...'
df\=pd.read\_sql(sql,con)#help文件
help(sqlite3.connect)
#輸出
Help on built-in function connect in module \_sqlite3:connect(...)connect(database\[, timeout, isolation\_level, detect\_types, factory\])Opens a connection to the SQLite database file \*database\*. You can use":memory:" to open a database connection to a database that resides inRAM instead of on disk.
#############
help(pd.read\_sql)
#輸出
Help on function read\_sql in module pandas.io.sql:read\_sql(sql, con, index\_col\=None, coerce\_float=True, params=None, parse\_dates=None, columns=None, chunksize=None)Read SQL query or database table into a DataFrame.

ps.數據庫的代碼是我直接從網絡上粘貼過來的,沒有測試過是不是可行,先貼上來。

數據庫我還在摸索中,學習心得學習筆記之類的大家可以一起分享23333~
 二.提取和篩選需要的數據
(一)提取和查看相應數據 (用的是tips.csv的數據,數據來源:https://github.com/mwaskom/seaborn-data)
print df.head() #打印數據前五行  
#輸出total\_bill   tip     sex smoker  day    time  size
0       16.99  1.01  Female     No  Sun  Dinner     2
1       10.34  1.66    Male     No  Sun  Dinner     3
2       21.01  3.50    Male     No  Sun  Dinner     3
3       23.68  3.31    Male     No  Sun  Dinner     2
4       24.59  3.61  Female     No  Sun  Dinner     4
print df.tail()  #打印數據后5行
#輸出total\_bill   tip     sex smoker   day    time  size
239       29.03  5.92    Male     No   Sat  Dinner     3
240       27.18  2.00  Female    Yes   Sat  Dinner     2
241       22.67  2.00    Male    Yes   Sat  Dinner     2
242       17.82  1.75    Male     No   Sat  Dinner     2
243       18.78  3.00  Female     No  Thur  Dinner     2
print df.columns  #打印列名
#輸出
Index(\[u'total\_bill', u'tip', u'sex', u'smoker', u'day', u'time', u'size'\], dtype='object')
print df.index  #打印行名
#輸出
Int64Index(\[  0,   1,   2,   3,   4,   5,   6,   7,   8,   9,...234, 235, 236, 237, 238, 239, 240, 241, 242, 243\],dtype\='int64', length=244)
print df.ix\[10:20, 0:3\]  #打印10~20行前三列數據
#輸出total\_bill   tip     sex
10       10.27  1.71    Male
11       35.26  5.00  Female
12       15.42  1.57    Male
13       18.43  3.00    Male
14       14.83  3.02  Female
15       21.58  3.92    Male
16       10.33  1.67  Female
17       16.29  3.71    Male
18       16.97  3.50  Female
19       20.65  3.35    Male
20       17.92  4.08    Male
#提取不連續行和列的數據,這個例子提取的是第1,3,5行,第2,4列的數據
df.iloc\[\[1,3,5\],\[2,4\]\]
#輸出sex  day
1  Male  Sun
3  Male  Sun
5  Male  Sun
#專門提取某一個數據,這個例子提取的是第三行,第二列數據(默認從0開始算哈)
df.iat\[3,2\]
#輸出
'Male'
print df.drop(df.columns\[1, 2\], axis = 1) #舍棄數據前兩列
print df.drop(df.columns\[\[1, 2\]\], axis = 0) #舍棄數據前兩行
#為了節省篇幅結果就不貼出來了哈~
print df.shape #打印維度
#輸出
(244, 7)
df.iloc\[3\] #選取第3行
#輸出1
total\_bill     23.68
tip             3.31
sex             Male
smoker            No
day              Sun
time          Dinner
size               2
Name: 3, dtype: objectdf.iloc\[2:4\] #選取第2到第3行
#輸出2total\_bill   tip   sex smoker  day    time  size
2       21.01  3.50  Male     No  Sun  Dinner     3
3       23.68  3.31  Male     No  Sun  Dinner     2df.iloc\[0,1\] #選取第0行1列的元素
#輸出3
1.01
(二)篩選出需要的數據(用的是tips.csv的數據,數據來源:https://github.com/mwaskom/seaborn-data)
#example:假設我們要篩選出小費大于$8的數據
df\[df.tip>8\]
#輸出total\_bill  tip   sex smoker  day    time  size
170       50.81   10  Male    Yes  Sat  Dinner     3
212       48.33    9  Male     No  Sat  Dinner     4
#數據篩選同樣可以用”或“和”且“作為篩選條件,比如
#1
df\[(df.tip>7)|(df.total\_bill>50)\] #篩選出小費大于$7或總賬單大于$50的數據
#輸出total\_bill    tip   sex smoker  day    time  size
23        39.42   7.58  Male     No  Sat  Dinner     4
170       50.81  10.00  Male    Yes  Sat  Dinner     3
212       48.33   9.00  Male     No  Sat  Dinner     4#2
df\[(df.tip>7)&(df.total\_bill>50)\]#篩選出小費大于$7且總賬單大于$50的數據
#輸出total\_bill  tip   sex smoker  day    time  size
170       50.81   10  Male    Yes  Sat  Dinner     3
#接上
#假如加入了篩選條件后,我們只關心day和time
df\[\['day','time'\]\]\[(df.tip>7)|(df.total\_bill>50)\]
#輸出day    time
23   Sat  Dinner
170  Sat  Dinner
212  Sat  Dinner
  三.統計描述(用的是tips.csv的數據,數據來源:https://github.com/mwaskom/seaborn-data)
print df.describe() #描述性統計
#輸出  各指標都比較簡單就不解釋了哈total\_bill         tip        size
count  244.000000  244.000000  244.000000
mean    19.785943    2.998279    2.569672
std      8.902412    1.383638    0.951100
min      3.070000    1.000000    1.000000
25%     13.347500    2.000000    2.000000
50%     17.795000    2.900000    2.000000
75%     24.127500    3.562500    3.000000
max     50.810000   10.000000    6.000000

四.數據處理  (一)數據轉置(用的是tips.csv的數據,數據來源:https://github.com/mwaskom/seaborn-data)
print df.T
#output0       1       2       3       4       5       6       7    \\
total\_bill   16.99   10.34   21.01   23.68   24.59   25.29    8.77   26.88   
tip           1.01    1.66     3.5    3.31    3.61    4.71       2    3.12   
sex         Female    Male    Male    Male  Female    Male    Male    Male   
smoker          No      No      No      No      No      No      No      No   
day            Sun     Sun     Sun     Sun     Sun     Sun     Sun     Sun   
time        Dinner  Dinner  Dinner  Dinner  Dinner  Dinner  Dinner  Dinner   
size             2       3       3       2       4       4       2       4   8       9     ...       234     235     236     237     238  \\
total\_bill   15.04   14.78   ...     15.53   10.07    12.6   32.83   35.83   
tip           1.96    3.23   ...         3    1.25       1    1.17    4.67   
sex           Male    Male   ...      Male    Male    Male    Male  Female   
smoker          No      No   ...       Yes      No     Yes     Yes      No   
day            Sun     Sun   ...       Sat     Sat     Sat     Sat     Sat   
time        Dinner  Dinner   ...    Dinner  Dinner  Dinner  Dinner  Dinner   
size             2       2   ...         2       2       2       2       3   239     240     241     242     243  
total\_bill   29.03   27.18   22.67   17.82   18.78  
tip           5.92       2       2    1.75       3  
sex           Male  Female    Male    Male  Female  
smoker          No     Yes     Yes      No      No  
day            Sat     Sat     Sat     Sat    Thur  
time        Dinner  Dinner  Dinner  Dinner  Dinner  
size             3       2       2       2       2  \[7 rows x 244 columns\]

(二)數據排序(用的是tips.csv的數據,數據來源:https://github.com/mwaskom/seaborn-data)

df.sort\_values(by='tip')  #按tip列升序排序
#輸出(為了不占篇幅我簡化了一部分)total\_bill    tip     sex smoker   day    time  size
67         3.07   1.00  Female    Yes   Sat  Dinner     1
236       12.60   1.00    Male    Yes   Sat  Dinner     2
92         5.75   1.00  Female    Yes   Fri  Dinner     2
111        7.25   1.00  Female     No   Sat  Dinner     1
0         16.99   1.01  Female     No   Sun  Dinner     2
..          ...    ...     ...    ...   ...     ...   ...
214       28.17   6.50  Female    Yes   Sat  Dinner     3
141       34.30   6.70    Male     No  Thur   Lunch     6
59        48.27   6.73    Male     No   Sat  Dinner     4
23        39.42   7.58    Male     No   Sat  Dinner     4
212       48.33   9.00    Male     No   Sat  Dinner     4
170       50.81  10.00    Male    Yes   Sat  Dinner     3\[244 rows x 7 columns\]
(三)缺失值處理  1.填充缺失值(數據來自《利用python進行數據分析》第二章 usagov\_bitly\_data2012-03-16-1331923249.txt,需要的同學可以找我要)  
import json  #python有許多內置或第三方模塊可以將JSON字符串轉換成python字典對象
import pandas as pd
import numpy as np
from pandas import DataFrame
path \= 'F:\\PycharmProjects\\pydata-book-master\\ch02\\usagov\_bitly\_data2012-03-16-1331923249.txt' #根據自己的路徑填寫
records = \[json.loads(line) for line in open(path)\]
frame \= DataFrame(records)
frame\['tz'\]#輸出(為了節省篇幅我刪除了部分輸出結果)
0          America/New\_York
1            America/Denver
2          America/New\_York
3         America/Sao\_Paulo
4          America/New\_York
5          America/New\_York
6             Europe/Warsaw
7                          
8                          
9                          
10      America/Los\_Angeles
11         America/New\_York
12         America/New\_York
13                      NaN...         
Name: tz, dtype: object

從以上輸出值可以看出數據存在未知或缺失值,接著咱們來處理缺失值。

print frame\['tz'\].fillna(1111111111111)  #以數字代替缺失值
#輸出結果(為了節省篇幅我刪除了部分輸出結果)
0          America/New\_York
1            America/Denver
2          America/New\_York
3         America/Sao\_Paulo
4          America/New\_York
5          America/New\_York
6             Europe/Warsaw
7                          
8                          
9                          
10      America/Los\_Angeles
11         America/New\_York
12         America/New\_York
13            1111111111111
Name: tz, dtype: object
print frame\['tz'\].fillna('YuJie2333333333333') #用字符串代替缺失值
#輸出(為了節省篇幅我刪除了部分輸出結果)
0          America/New\_York
1            America/Denver
2          America/New\_York
3         America/Sao\_Paulo
4          America/New\_York
5          America/New\_York
6             Europe/Warsaw
7                          
8                          
9                          
10      America/Los\_Angeles
11         America/New\_York
12         America/New\_York
13       YuJie2333333333333
Name: tz, dtype: object

還有:

print frame\['tz'\].fillna(method='pad') #用前一個數據代替缺失值
print frame\['tz'\].fillna(method='bfill') #用后一個數據代替缺失值

2.刪除缺失值 (數據同上)

print frame\['tz'\].dropna(axis=0) #刪除缺失行
print frame\['tz'\].dropna(axis=1) #刪除缺失列

3.插值法填補缺失值

由于沒有數據,這兒插播一個小知識點:創建一個隨機的數據框

import pandas as pd
import numpy as np
#創建一個6\*4的數據框,randn函數用于創建隨機數
czf\_data = pd.DataFrame(np.random.randn(6,4),columns=list('ABCD')) 
czf\_data
#輸出A         B         C         D
0  0.355690  1.165004  0.810392 -0.818982
1  0.496757 -0.490954 -0.407960 -0.493502
2 -0.202123 -0.842278 -0.948464  0.223771
3  0.969445  1.357910 -0.479598 -1.199428
4  0.125290  0.943056 -0.082404 -0.363640
5 -1.762905 -1.471447  0.351570 -1.546152

好啦,數據就出來了。接著我們用空值替換數值,創造出一個含有空值的DataFrame。

#把第二列數據設置為缺失值
czf\_data.ix\[2,:\]=np.nan
czf\_data
#輸出A         B         C         D
0  0.355690  1.165004  0.810392 -0.818982
1  0.496757 -0.490954 -0.407960 -0.493502
2       NaN       NaN       NaN       NaN
3  0.969445  1.357910 -0.479598 -1.199428
4  0.125290  0.943056 -0.082404 -0.363640
5 -1.762905 -1.471447  0.351570 -1.546152
#接著就可以利用插值法填補空缺值了~
print czf\_data.interpolate()
#輸出A         B         C         D
0  0.355690  1.165004  0.810392 -0.818982
1  0.496757 -0.490954 -0.407960 -0.493502
2  0.733101  0.433478 -0.443779 -0.846465
3  0.969445  1.357910 -0.479598 -1.199428
4  0.125290  0.943056 -0.082404 -0.363640
5 -1.762905 -1.471447  0.351570 -1.546152

(四)數據分組(用的是tips.csv的數據,數據來源:https://github.com/mwaskom/seaborn-data)

group = df.groupby('day')  #按day這一列進行分組
#1
print group.first()#打印每一組的第一行數據
#輸出total\_bill   tip     sex smoker    time  size
day                                                
Fri        28.97  3.00    Male    Yes  Dinner     2
Sat        20.65  3.35    Male     No  Dinner     3
Sun        16.99  1.01  Female     No  Dinner     2
Thur       27.20  4.00    Male     No   Lunch     4
#2
print group.last()#打印每一組的最后一行數據
#輸出total\_bill   tip     sex smoker    time  size
day                                                
Fri        10.09  2.00  Female    Yes   Lunch     2
Sat        17.82  1.75    Male     No  Dinner     2
Sun        15.69  1.50    Male    Yes  Dinner     2
Thur       18.78  3.00  Female     No  Dinner     2

(五)值替換

import pandas as pd
import numpy as np
#首先創造一個Series(沒有數據情況下的福音233)
Series = pd.Series(\[0,1,2,3,4,5\])
#輸出
Series
0    0
1    1
2    2
3    3
4    4
5    5
dtype: int64
#數值替換,例如將0換成10000000000000
print Series.replace(0,10000000000000)
#輸出
0    10000000000000
1                 1
2                 2
3                 3
4                 4
5                 5
dtype: int64
#列和列的替換同理
print Series.replace(\[0,1,2,3,4,5\],\[11111,222222,3333333,44444,55555,666666\])
#輸出
0      11111
1     222222
2    3333333
3      44444
4      55555
5     666666
dtype: int64

五.統計分析

(一)t檢驗

1.獨立樣本t檢驗

兩獨立樣本t檢驗就是根據樣本數據對兩個樣本來自的兩獨立總體的均值是否有顯著差異進行推斷;進行兩獨立樣本t檢驗的條件是,兩樣本的總體相互獨立且符合正態分布。

開始找不到合適的數據,我就在網上隨便摘抄了個spss做獨立樣本t檢驗的實例數據作為例子大家暫時看著吧找到合適的例子再給大家舉~

數據如下,我將數據保存為本地xlsx格式:

   group  data
0      1    34
1      1    37
2      1    28
3      1    36
4      1    30
5      2    43
6      2    45
7      2    47
8      2    49
9      2    39
import pandas as pd
from scipy.stats import ttest\_ind
IS\_t\_test \= pd.read\_excel('E:\\\\IS\_t\_test.xlsx') 
Group1 \= IS\_t\_test\[IS\_t\_test\['group'\]==1\]\['data'\]
Group2 \= IS\_t\_test\[IS\_t\_test\['group'\]==2\]\['data'\]
print ttest\_ind(Group1,Group2)#輸出
(-4.7515451390104353, 0.0014423819408438474) 

輸出結果的第一個元素為t值,第二個元素為p-value

ttest_ind默認兩組數據方差齊性的,如果想要設置默認方差不齊,可以設置equal_var=False

print ttest\_ind(Group1,Group2,equal\_var=True)
print ttest\_ind(Group1,Group2,equal\_var=False)
#輸出
(-4.7515451390104353, 0.0014423819408438474)
(\-4.7515451390104353, 0.0014425608643614844)

2.配對樣本t檢驗

同樣找不到數據,讓我們暫且假設上邊獨立樣本是配對樣本吧,使用同樣的數據。

import pandas as pd
from scipy.stats import ttest\_rel
IS\_t\_test \= pd.read\_excel('E:\\\\IS\_t\_test.xlsx') 
Group1 \= IS\_t\_test\[IS\_t\_test\['group'\]==1\]\['data'\]
Group2 \= IS\_t\_test\[IS\_t\_test\['group'\]==2\]\['data'\]
print ttest\_rel(Group1,Group2)#輸出
(-5.6873679190073361, 0.00471961872448184)

同樣的,輸出結果的第一個元素為t值,第二個元素為p-value。

(二)方差分析

1.單因素方差分析

這里依然沿用t檢驗的數據

import pandas as pd
from scipy import stats
IS\_t\_test \= pd.read\_excel('E:\\\\IS\_t\_test.xlsx') 
Group1 \= IS\_t\_test\[IS\_t\_test\['group'\]==1\]\['data'\]
Group2 \= IS\_t\_test\[IS\_t\_test\['group'\]==2\]\['data'\]
w,p \= stats.levene(\*args)
#levene方差齊性檢驗。levene(\*args, \*\*kwds)  Perform Levene test for equal variances.如果p<0.05,則方差不齊
print w,p
#進行方差分析
f,p = stats.f\_oneway(\*args)
print f,p#輸出
(0.019607843137254936, 0.89209916055865535)
22.5771812081 0.00144238194084

2.多因素方差分析

數據是我從網上找的多因素方差分析的一個例子,研究區組和營養素對體重的影響。我做成了excel文件,需要的同學可以問我要哈~做多因素方差分析需要加載statsmodels模塊,如果電腦沒有安裝可以pip install一下。
#數據導入
import pandas as pd
MANOVA\=pd.read\_excel('E:\\\\MANOVA.xlsx')
MANOVA
#輸出(為了節省篇幅刪掉了中間部分的輸出結果)  id  nutrient  weight
0    1         1    50.1
1    2         1    47.8
2    3         1    53.1
3    4         1    63.5
4    5         1    71.2
5    6         1    41.4
.......................
21   6         3    38.5
22   7         3    51.2
23   8         3    46.2
#多因素方差分析
from statsmodels.formula.api import ols
from statsmodels.stats.anova import anova\_lm
formula \= 'weight~C(id)+C(nutrient)+C(id):C(nutrient)'
anova\_results \= anova\_lm(ols(formula,MANOVA).fit())
print anova\_results
#outputdf        sum\_sq     mean\_sq   F  PR(>F)
C(id)               7  2.373613e+03  339.087619   0     NaN
C(nutrient)         2  1.456133e+02   72.806667   0     NaN
C(id):C(nutrient)  14  3.391667e+02   24.226190   0     NaN
Residual            0  8.077936e-27         inf NaN     NaN

也許數據選得不對,p-value全是空值23333,待我找個好點兒的數據再做一次多因素方差分析。

3.重復測量設計的方差分析(單因素) ********待完善

重復測量設計是對同一因變量進行重復測度,重復測量設計的方差分析可以是同一條件下進行的重復測度,也可以是不同條件下的重復測量。

代碼和多因素方差分析一樣,思路不一樣而已~但我還找不到多因素方差分析合適的數據所以這兒就先不寫了2333

4.混合設計的方差分析 ********待完善

#########統計學學得好的同學們,教教我吧。。

(三)卡方檢驗

卡方檢驗就是統計樣本的實際觀測值與理論推斷值之間的偏離程度,實際觀測值與理論推斷值之間的偏離程度就決定卡方值的大小,卡方值越大,越不符合;卡方值越小,偏差越小,越趨于符合,若兩個值完全相等時,卡方值就為0,表明理論值完全符合。(from 百度百科2333)

1.單因素卡方檢驗

數據源于網絡,男女化妝與不化妝人數的理論值與實際值。

import numpy as np
from scipy import stats
from scipy.stats import chisquare
observed \= np.array(\[15,95\])#觀測值:110學生中化妝的女生95人,化妝的男生15人
expected = np.array(\[55,55\])
#理論值:110學生中化妝的女生55人,化妝的男生55人
chisquare(observed,expected)
#output
(58.18181818181818, 2.389775628860044e-14)

2.多因素卡方檢驗*****正在研究中,學會了完善這一塊~

(四)計數統計(用的數據為tips.csv)

#example:統計性別
count = df\['sex'\].value\_counts()
#輸出
print count
Male      157
Female     87
Name: sex, dtype: int64

(五)回歸分析 *****待學習: 數據擬合,廣義線性回歸。。。。等等

六.可視化

我覺得吧,其實看著excel就可以實現的功能為何那么復雜,excel確實夠通用夠便捷,但是處理很大數據量的話也許吃不消吧。學學python繪圖也不賴,而且講真,有的成效真的挺好看的。

(一)Seaborn

我學數據分析可視化是從學習Seaborn入門的,Seaborn是基于matplotlib的Python可視化庫,剛開始便接觸matplotlib難免有些吃力,參數多且難理解,但是慢慢來總會學會的。還有關鍵的一點是,seaborn畫出來的圖好好看。。
#基礎導入
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib as mpl
import matplotlib.pyplot as plt
#小費數據真的挺好的,這兒用tips作為example
tips = sns.load\_dataset('tips') #從網絡環境導入數據tips  

1.lmplot函數

lmplot(x, y, data, hue=None, col=None, row=None, palette=None, col_wrap=None, size=5, aspect=1, markers=‘o’, sharex=True, sharey=True, hue_order=None, col_order=None, row_order=None, legend=True, legend_out=True, x_estimator=None, x_bins=None, x_ci=‘ci’, scatter=True, fit_reg=True, ci=95, n_boot=1000, units=None, order=1, logistic=False, lowess=False, robust=False, logx=False, x_partial=None, y_partial=None, truncate=False, x_jitter=None, y_jitter=None, scatter_kws=None, line_kws=None)

功能:Plot data and regression model fits across a FacetGrid.

下面就不同的例子,對lmplot的參數進行解釋

例子1. 畫出總賬單和小費回歸關系圖

用到了lmplot(x, y, data,scatter_kws)

x,y,data一目了然這兒就不多解釋了,scatter_kws和line_kws的官方解釋如下:

{scatter,line}_kws : dictionarie

Additional keyword arguments to pass to plt.scatter and plt.plot.

scatter為點,line為線。其實就是用字典去限定點和線的各種屬性,如例子所示,散點的顏色為灰石色,線條的顏色為印度紅,成像效果就是這樣點線顏色分離,展現效果很好。大家也可以換上自己想要的圖片屬性。

sns.lmplot("total\_bill", "tip", tips,scatter\_kws={"marker": ".", "color": "slategray"},line\_kws={"linewidth": 1, "color": "indianred"}).savefig('picture2') 

另外:顏色還可以使用RGB代碼,具體對照表可以參考這個網站,可以自己搭配顏色:

http://www.114la.com/other/rgb.htm

marker也可以有多種樣式,具體如下:

. Point marker
, Pixel marker
o Circle marker
v Triangle down marker
^ Triangle up marker
< Triangle left marker
> Triangle right marker
1 Tripod down marker
2 Tripod up marker
3 Tripod left marker
4 Tripod right marker
s Square marker
p Pentagon marker
* Star marker
h Hexagon marker
H Rotated hexagon D Diamond marker
d Thin diamond marker
| Vertical line (vlinesymbol) marker
_ Horizontal line (hline symbol) marker

  • Plus marker
    x Cross (x) marker
sns.lmplot("total\_bill", "tip", tips,scatter\_kws\={"marker": ".","color":"#FF7F00"},line\_kws\={"linewidth": 1, "color": "#BF3EFF"}).savefig('s1')  ps.我修改maker屬性不成功不知為何,求解答

例子2.用餐人數(size)和小費(tip)的關系圖

官方解釋:

x_estimator : callable that maps vector -> scalar, optional

Apply this function to each unique value of x and plot the resulting estimate. This is useful when x is a discrete variable. If x_ci is not None, this estimate will be bootstrapped and a confidence interval will be drawn.

大概解釋就是:對擁有相同x水平的y值進行映射

plt.figure()
sns.lmplot('size', 'tip', tips, x\_estimator= np.mean).savefig('picture3')

{x,y}_jitter : floats, optional

Add uniform random noise of this size to either the x or y variables. The noise is added to a copy of the data after fitting the regression, and only influences the look of the scatterplot. This can be helpful when plotting variables that take discrete values.

jitter是個很有意思的參數, 特別是處理靶數據的overlapping過于嚴重的情況時, 通過增加一定程度的噪聲(noise)實現數據的區隔化, 這樣原始數據是若干 點簇 變成一系列密集鄰近的點群. 另外, 有的人會經常將 rugjitter 結合使用. 這依人吧.對于橫軸取離散水平的時候, 用x_jitter可以讓數據點發生水平的擾動.但擾動的幅度不宜過大。

sns.lmplot('size', 'tip', tips, x\_jitter=.15).savefig('picture4')

seaborn還可以做出xkcd風格的圖片,還挺有意思的

with plt.xkcd():sns.color\_palette('husl', 8)sns.set\_context('paper')sns.lmplot(x\='total\_bill', y='tip', data=tips, ci=65).savefig('picture1')

with plt.xkcd():sns.lmplot('total\_bill', 'tip', data=tips, hue='day')plt.xlabel('hue = day')plt.savefig('picture5')

with plt.xkcd():sns.lmplot('total\_bill', 'tip', data=tips, hue='smoker')plt.xlabel('hue = smoker')plt.savefig('picture6')

sns.set\_style('dark')
sns.set\_context('talk')
sns.lmplot('size', 'total\_bill', tips, order=2)
plt.title('\# poly order = 2')
plt.savefig('picture7')
plt.figure()
sns.lmplot('size', 'total\_bill', tips, order=3)
plt.title('\# poly order = 3')
plt.savefig('picture8')
sns.jointplot("total\_bill", "tip", tips).savefig('picture9')

需要更多學習籽料和項目實戰源碼請掃下方👇↓↓↓獲取!!!

在這里插入圖片描述

如有侵權,請聯系刪除。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/39895.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/39895.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/39895.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

windows電腦藍屏解決方法(親測有效)

如果不是硬件問題&#xff0c;打開終端嘗試以下命令 sfc /scannow DISM /Online /Cleanup-Image /RestoreHealth

關于敏捷研發

文章目錄 前言瀑布流和敏捷研發流程瀑布流研發流程缺點 敏捷研發流程 前言 關于敏捷研發。 瀑布流和敏捷研發流程 瀑布流研發流程 1.需求 2.設計 3.開發 4.測試 缺點 流程之間關聯性很強&#xff0c;容易卡住風險不好預估&#xff0c;工時不好預估&#xff0c;如 2 個月的…

nodejs sqlite模塊

SQLite 是一個輕量級的嵌入式數據庫&#xff0c;它在 Node.js 中的使用通常是異步的。這意味著當你執行數據庫操作時&#xff0c;例如創建表、插入數據或查詢數據&#xff0c;這些操作會被放入事件隊列中異步執行&#xff0c;而不會阻塞主線程。 安裝sqlite3 npm install sql…

If you already have a 64-bit JDK installed ,defined a JAVA_HOME...的錯誤

今天感覺idea有點卡&#xff0c;修改了一下內存&#xff0c;結果就報這個錯誤了&#xff0c;網上的解決方案好多&#xff0c;都不行 以下是解決方案 打開 C:\Program Files\JetBrains\IntelliJ IDEA 2024.1.4\bin\jetbrains_client64.exe 把jihuo這個目錄下所有的文件都刪掉&…

通過easyexcel導入數據,添加表格參數的校驗,同表格內校驗以及和已有數據的校驗

引入依賴 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.11</version><scope>compile</scope></dependency> 需要導入到某個目錄下 如果產品名稱相同&#xff0c…

Mybatis數據封裝

目錄 解決方案&#xff1a; 1.起別名&#xff1a; 2.手動結果映射&#xff1a; 3.開啟駝峰命名(推薦)&#xff1a; 我們看到查詢返回的結果中大部分字段是有值的&#xff0c;但是deptId&#xff0c;createTime&#xff0c;updateTime這幾個字段是沒有值的&#xff0c;而數據…

分析數據不要太老實,有BI方案就用起來——奧威BI軟件

在當今數據驅動的時代&#xff0c;企業對于數據分析的需求日益迫切。然而&#xff0c;面對海量的數據和復雜的分析需求&#xff0c;許多企業仍停留在傳統的手工分析模式&#xff0c;這不僅效率低下&#xff0c;還容易出錯。幸運的是&#xff0c;像奧威BI這樣的數據分析軟件提供…

Linux——互斥與同步練習

用多線程程序設計一個火車票售票系統&#xff0c; 要求至少有兩個售票窗口&#xff0c;每個售票窗口 不能重復買票&#xff0c;將100張車票均勻的從兩個 窗口賣出即可。 ./a.out 窗口1 賣出車票 1 窗口2 賣出車票 2 窗口1 賣出車票 3 窗口2 賣出車票 4 ..... #include <std…

【深度學習】掃描全能王的AI驅動創新與智能高清濾鏡技術解析

目錄 引言1、掃描全能王2、智能高清濾鏡黑科技2.1、圖像視覺矯正2.2、去干擾技術 3、實際應用案例3.1、打印文稿褶皺檢測3.2、試卷擦除手寫3.3、老舊文件處理3.4、收銀小票3.5、從不同角度掃描文檔 4、用戶體驗結論與未來展望 引言 在數字化時代背景下&#xff0c;文檔掃描功能…

Vue3+Pinia

1.單純調接口(安裝pinia及引入如下第一張圖) 1.npm install pinia2.在main.js里引入即可import { createPinia } from piniaapp.use(createPinia()) 1.stores建立你文件的ts、內容如下&#xff1a;1-1 import { defineStore } from pinia1-2 import { findPageJobSet } from …

GitCode見證:華為云DevUI如何定義下一代前端開發

在當今快速發展的數字時代&#xff0c;前端開發已成為企業數字化轉型的關鍵一環。隨著用戶對交互體驗的期待不斷增長&#xff0c;擁有一個強大、靈活且易于使用的前端解決方案變得至關重要。 DevUI的誕生&#xff0c;源于華為對研發工具的深入理解和長期積累&#xff0c;作為一…

【PYG】將節點特征壓縮為1和節點壓縮為1的例子

文章目錄 將節點特征壓縮為1和節點壓縮為1的例子示例1&#xff1a;將節點特征壓縮為1示例2&#xff1a;將節點壓縮為1 理論將特征壓縮為1將節點壓縮為1具體例子應用場景相關論文 將節點特征壓縮為1和節點壓縮為1的例子 示例1&#xff1a;將節點特征壓縮為1 假設我們有一個節點…

【云原生監控】Prometheus 普羅米修斯從搭建到使用詳解

目錄 一、前言 二、服務監控概述 2.1 什么是微服務監控 2.2 微服務監控指標 2.3 微服務監控工具 三、Prometheus概述 3.1 Prometheus是什么 3.2 Prometheus 特點 3.3 Prometheus 架構圖 3.3.1 Prometheus核心組件 3.3.2 Prometheus 工作流程 3.4 Prometheus 應用場景…

如何使用C++進行高效的數據處理和數據挖掘?

如何使用C進行高效的數據處理和數據挖掘&#xff1f; 數據處理和數據挖掘在如今信息爆炸的時代變得越來越重要。為了快速、高效地處理和分析大量的數據&#xff0c;選擇合適的編程語言非常重要。C作為一種高性能的編程語言&#xff0c;在數據處理和數據挖掘領域也有廣泛的應用…

open3d基礎使用-簡單易懂

Open3D是一個開源庫&#xff0c;主要用于快速開發處理3D數據的軟件。它提供了豐富的數據結構和算法&#xff0c;支持點云、網格和RGB-D圖像等多種3D數據的處理。以下是對Open3D基礎使用的詳細歸納和說明&#xff1a; 一、安裝Open3D Open3D可以通過Python的包管理器pip進行安…

8624 多項式系數累加和

這個問題可以通過使用數學的導數規則來解決。對于一個多項式&#xff0c;它的導數可以通過將每一項的系數乘以它的指數&#xff0c;然后降低該項的指數來得到。這個過程可以重復M次來得到多項式的M階導數。然后&#xff0c;我們可以簡單地將所有項的系數相加來得到結果。 以下…

3D Gaussian Splatting代碼中的train和render兩個文件代碼解讀

現在來聊一聊訓練和渲染是如何進行的 training train.py line 31 def training(dataset, opt, pipe, testing_iterations, saving_iterations, checkpoint_iterations, checkpoint, debug_from):# 初始化第一次迭代的索引為0first_iter 0# 準備輸出和日志記錄器tb_writer p…

Go語言中的閉包函數:強大而靈活的編程工具

Go語言中的閉包函數:強大而靈活的編程工具 閉包是Go語言中一個非常強大和有趣的特性。它不僅能夠幫助我們寫出更簡潔、更優雅的代碼,還能解決一些特定的編程問題。本文將深入探討Go語言中閉包的概念、使用方法和應用場景。 什么是閉包? 閉包是一個函數值,它引用了其外部…

【mybatis】mybatis-plus_CRUD具體操作

1、環境準備 1. 環境準備 1. 引入依賴 在Spring Boot項目的pom.xml文件中引入MyBatis-Plus及其數據庫驅動的依賴。這里以MySQL為例&#xff1a; <!-- Spring Boot Starter Web --> <dependency> <groupId>org.springframework.boot</groupId> …

wordpress企業主題和wordpress免費主題

農業畜牧養殖wordpress主題 簡潔大氣的農業畜牧養殖wordpress主題&#xff0c;農業農村現代化&#xff0c;離不開新農人、新技術。 https://www.jianzhanpress.com/?p3051 SEO優化wordpress主題 簡潔的SEO優化wordpress主題&#xff0c;效果好不好&#xff0c;結果會告訴你…