当前位置: 首页 > news >正文

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')

需要更多学习籽料和项目实战源码请扫下方👇↓↓↓获取!!!

在这里插入图片描述

如有侵权,请联系删除。

相关文章:

python数据分析入门学习笔记

目录 一、 数据分析有关的python库简介 (一)numpy (二)pandas (三)matplotlib (四)scipy (五)statsmodels (六)scikit-learn 二、 数据的导入和导出 三、 数据筛选 四、 数据描述 五、 数据处理 六、 统计分析 七、 可视化 八、 其它![](https://…...

SyntaxError: invalid character in identifier 解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…...

装箱问题汇总

一维装箱 整数规划建模 参考 二维装箱 数学建模 参考1 参考2...

你的B端系统考虑移动化了?还没?那就小心out了。

B端系统移动化的趋势是不可阻挡的。随着移动设备的普及和移动互联网的发展&#xff0c;越来越多的企业和组织意识到移动化对于提高工作效率、拓展市场和提供更好的用户体验的重要性。以下是一些导致B端系统移动化趋势不可阻挡的原因&#xff1a; 移动办公需求&#xff1a;越来越…...

大数据招商的应用场景及实施路径有哪些?

当下&#xff0c;我国已经进入数字经济与实体经济融合发展的新阶段&#xff0c;数字技术和数字化转型落地日臻成熟&#xff0c;数据要素价值释放深入到了我国各个领域的发展&#xff0c;招商引资也不例外&#xff0c;在传统招商模式效果日渐甚微的大环境下&#xff0c;大数据招…...

【C++】 C/C++预处理器介绍

C预处理器&#xff08;Preprocessor&#xff09;是编译过程中的一个阶段&#xff0c;它在编译器进行实际编译之前对源代码进行处理。预处理器提供了一系列的指令&#xff0c;用于条件编译、文件包含、宏定义等操作。以下是一些常见的预处理器指令&#xff1a; 宏定义&#xff…...

MySQL—创建查看删除备份恢复数据库

创建数据库 创建数据库 LLF_DB01CREATE DATABASE LLF_DB01删除数据库DROP DATABASE LLF_DB01创建一个使用utf8字符集的数据库并带校对规则的数据库CREATE DATABASE hsp_db03 CHARACTER SET utf8 COLLATE utf8_bin 查看、删除数据库 显示所有的数据库SHOW DATABASES显示数据库…...

1.4 ROS2集成开发环境搭建

1.4.1 安装VSCode VSCode全称Visual Studio Code&#xff0c;是微软推出的一款轻量级代码编辑器&#xff0c;免费、开源而且功能强大。它支持几乎所有主流的程序语言的语法高亮、智能代码补全、自定义热键、括号匹配、代码片段、代码对比Diff、GIT 等特性&#xff0c;支持插件…...

数组和对象在内存中的区别

一、内存分配方式 数组在内存中是一段连续的存储空间&#xff0c;每个元素占据一个位置&#xff0c;这种连续存储方式使得数组的访问速度更快。对象在内存中是以键值对的形式存储的&#xff0c;每个键值对都需要单独的内存空间&#xff0c;这种非连续的存储方式可能会导致访问…...

智能胎教仪,科技与教育的融合-N9301胎教仪语音方案

随着科学技术的不断进步&#xff0c;人们对婴幼儿教育的认知也日趋成熟和全面。其中&#xff0c;胎教作为一种重要的早期教育方式&#xff0c;近年来备受瞩目。而胎教仪语音芯片的研发&#xff0c;正是为了满足这一需求&#xff0c;为胎儿的健康成长提供更加便捷的胎教方案。 一…...

代码随想录2链表

2 移除元素 Leetcode203 设置虚拟头节点 dummyHead...

Java8新特性常见用法

Java8新特性 示例类Stream API 使用示例forEach:遍历Stream:创建流map:转换元素filter:过滤元素collect(收集元素) 和 Collectors(分组、连接)sorted 和 comparing(搭配排序)toMap:转换Map元素collectingAndThen:过滤掉相同数据toUpperCase:转大写distinct:去重c…...

Web3 前端攻击:原因、影响及经验教训

DeFi的崛起引领了一个创新和金融自由的新时代。然而&#xff0c;这种快速增长也吸引了恶意行为者的注意&#xff0c;他们试图利用漏洞进行攻击。尽管很多焦点都集中在智能合约安全上&#xff0c;但前端攻击也正在成为一个重要的威胁向量。 前端攻击的剖析 理解攻击者利用前端漏…...

C++ 如何解决回调地狱问题

“地狱回调”&#xff08;Callback Hell&#xff09;是指在编程中使用过多嵌套回调函数&#xff0c;导致代码难以阅读和维护。C 提供了多种方法来解决这个问题&#xff0c;包括以下几种常见的方法&#xff1a; 使用 Lambda 表达式和标准库的 std::function使用 std::future 和…...

普利姆最小生成树算法 c++

普里姆(Prim)算法是一种用于在加权连通无向图中查找最小生成树(MST, Minimum Spanning Tree)的贪心算法。最小生成树是一个子图,它包括图中的所有顶点,并且边的总权重最小。该算法的基本思想是从一个顶点开始,逐步扩展生成树,直到包括所有顶点。 算法步骤 初始化: 从…...

Golang 依赖注入设计哲学|12.6K 的依赖注入库 wire

一、前言 线上项目往往依赖非常多的具备特定能力的资源&#xff0c;如&#xff1a;DB、MQ、各种中间件&#xff0c;以及随着项目业务的复杂化&#xff0c;单一项目内&#xff0c;业务模块也逐渐增多&#xff0c;如何高效、整洁管理各种资源十分重要。 本文从“术”层面&#…...

ubuntu 23 连接正点imx6ull的uboot网络设置(nfs和tftp)

由于使用ubuntu23&#xff0c;无法连接正点的imx6ull的uboot&#xff0c;因为这个uboot里面的nfs是v2&#xff0c;ubuntu23内核是6.5不支持uboot v2。配置/etc/default/nfs-kernel-server sudo vim /etc/default/nfs-kernel-server 更改以下参数&#xff1a; RPCNFSDCOUNT"…...

CC6利用链分析

CC1的两条利用链&#xff0c;在JDK 8u71之后已修复&#xff0c;不可利用。 学一下不受版本限制的CC6利用链 分析版本 Commons Collections 3.2.1 JDK 8u65 环境配置参考JAVA安全初探(三):CC1链全分析 分析过程 我的Github主页Java反序列化学习同步更新&#xff0c;有简单…...

多线程编程的基本概念,C++标准库中的多线程支持(std::thread,std::async),如何处理线程同步和并发问题。

多线程编程在现代计算机系统中非常重要&#xff0c;因为它能够使程序同时执行多个操作&#xff0c;提高计算效率。以下是多线程编程的基本概念及如何在C标准库中使用std::thread和std::async进行多线程编程&#xff0c;同时处理线程同步和并发问题。 多线程编程的基本概念 线程…...

Linux的Socket开发概述

套接字&#xff08;socket&#xff09;是 Linux 下的一种进程间通信机制&#xff08;socket IPC&#xff09;&#xff0c;在前面的内容中已经给大家提到过&#xff0c;使用 socket IPC 可以使得在不同主机上的应用程序之间进行通信&#xff08;网络通信&#xff09;&#xff0c…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

应用升级/灾备测试时使用guarantee 闪回点迅速回退

1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间&#xff0c; 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点&#xff0c;不需要开启数据库闪回。…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告&#xff08;肿瘤大小、血液指标&#xff09;&#xff0c;你需要做出一个**决定性判断**&#xff1a;恶性还是良性&#xff1f;这种“非黑即白”的抉择&#xff0c;正是**逻辑回归&#xff08;Logistic Regression&#xff09;** 的战场&a…...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式&#xff08;Singleton Pattern&#…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持&#xff0c;不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;Tunne…...