数据分析数据挖掘(四)
请从上一个博客下载我们需要处理的数据。
一、复习常用的函数:
import pandas as pd
import numpy as np
import matplotlib as mt
#载入库
from pandas import Series,DataFrame
#载入模块
data=pd.read_csv(r'C:\Users\13056\Desktop\tips.csv')print(data[['sex','day','time']].describe())
#获得数据
# sex day time
#count 244 244 244 有多少条
#unique 2 4 2 有几种类型的
#top Male Sat Dinner 出现最多的数据
#freq 157 87 176 出现最多的数据出现了多少次#这里给大家讲一个函数,可能有些小伙伴这里不明白
print(data.loc[:,['sex']])sex
0 Female
1 Male
2 Male
3 Male
4 Female
.. ...
239 Male
240 Female
241 Male
242 Male
243 Female
表示所有的行sex列拿出来。:代表所有的复习:咱不能只学不复习哈。会忘的。
索引
1.拿某一列,data['sex'],或者按照切片的方法data[0:3]。
2.按照地图的方法找: data.at[1,'time']拿到第一行time的数据,data.iat[1,1]拿第一行第一列的数据。这个方法只能拿一个数据。
3.按地图拿一块数据:data.loc[:,['sex']]拿所有行sex的数据,data.iloc[0:1,0:3]范围是第1行和1,2,3列。le=DataFrame({'id':[1,2],'mas':['hello','car']})
re=DataFrame({'id':[1,2],'mas1':['no','train']})合并的方法:
1.d3=pd.concat([d1,d2])把d1,d2合成一个序列
2.pd.merge(le,re,on='id')通过id合成了一个数据id mas mas1
0 1 hello no
1 2 car train排序的方法:
1.data.sort_values('tip')根据tip的大小排序
2.data.sort_values(['tip','total_bill'])如果tip相同就按照total_bill排序
3.data.sort_values(['tip','total_bill'],ascending=[True,False])第一个是升序第二个是降序,ascending等于True是升序,等于False是降序。分组:我们希通过sex当作指标把每组的数据进行相加。
data.groupby('sex').sum()total_bill tip size
sex
Female 1570.95 246.51 214
Male 3256.82 485.07 413
data.groupby(['sex','size']).sum()第一个是第一层标签,第二个是第二层标签,sum()你们看着不爽可以换成别的数据,显示的数据而已,随便换。total_bill tip
sex size
Female 1 20.39 3.832 889.69 146.653 301.66 45.504 272.51 36.195 29.85 5.146 56.85 9.20
Male 1 8.58 1.922 1676.20 256.193 582.89 83.444 786.19 116.825 120.49 15.006 82.47 11.70自定义函数:data[['tip','size']].apply(lambda x:x+x)进行运算tip size
0 2.02 4
1 3.32 6
2 7.00 6
3 6.62 4
4 7.22 8
.. ... ...
239 11.84 6
240 4.00 4
241 4.00 4
242 3.50 4
243 6.00 4
二、理解样本数据:
1.Categorical Data类别型的数据:
类别型变量(这个必须明白):有限的取值,比如性别只能是男女;没有加减乘除;分有序的和无序的。
import pandas as pd
import numpy as np
import matplotlib as mt
data=pd.read_csv(r'C:\Users\13056\Desktop\tips.csv')s=Series(["a","b","c","d"],dtype='category')
#生成一个category序列s1=Series(["a","b","c","d"])
s1_cat=s.astype('category',categories=["b","c","d"],ordered=True)
#ordered为True时是有序的,为Fales是无序的
#categories=["b","c","d"]这个来调控b<c<ddata['sex']=data['sex'].astype('category')
#可以把格式换成这个
data.dtypes
total_bill float64
tip float64
sex category#此时数据已经改成这个类型的了
smoker object
day object
time object
size int64
dtype: objectdata=pd.read_csv(r'C:\Users\13056\Desktop\tips.csv')data['sex']=data['sex'].astype('category')data['sex'].cat.ordered
#出现False证明是无序的,True是有序的data['sex']=data['sex'].cat.set_categories(['Male','Female'],ordered=True)
data['sex'].dtype
#CategoricalDtype(categories=['Male', 'Female'], ordered=True)
#得到的是一个categories类型的,Male大于Female.排序的话Male会在前面
咱们接下来做一个练习,按照sex进行统计分组统计 tip/total_bill(自己写写试试)
import pandas as pd
import numpy as np
from pandas import Series,DataFrame
#载入模块
data=pd.read_csv(r'C:\Users\13056\Desktop\tips.csv')
a1=data.groupby(by=['sex'])['tip'].agg({np.sum})
a2=data.groupby(by=['sex'])['total_bill'].agg({np.sum})
a1['sum']/a2['sum']
sex
Female 0.156918
Male 0.148940
Name: sum, dtype: float64
#这样就得出来了,当然还有很多解决方法,仁者见仁。
二、Scipy:我们用这个库来验证我们的数据符合某种分布。
(1)下载的方法:
下载我推荐Anaconda Navigator,不用脑子的下载不香吗。
打开以后这个样子,点environmentsn.
选择我们用的环境没有适合的下面有个creat可以创建。在上面installed那里换一下,换成not installed,在右边Search那里输入Scipy,就可以下载了。找不到就换成all,可能你本身就安装了这个。
(2)学习包的使用:
我们先导入数据画出图:
from scipy import stats
data=pd.read_csv(r'C:\Users\13056\Desktop\tips.csv')
data['tips_pct']=data['tip']/data['total_bill']
data['tips_pct'].hist(bins=50)
第一眼看过去真像正态分布,我们就可以用scipy包验证这个数据是不是正态分布。下面给出这些验证的方法。
1.看数字特征检验:看分布的数字特征是否与理论
生成一个t分布序列:(前面的一定要看啊)
from scipy import stats
data=pd.read_csv(r'C:\Users\13056\Desktop\tips.csv')
data['tips_pct']=data['tip']/data['total_bill']
np.random.seed(28)
#我会改变随机生成器的种子;传入的数值用于指定随机数生成时所用算法开始时所选定的整数值,如果使用相同的seed()值,则每次生成的随机数都相同;种下一颗种子
x=stats.t.rvs(10,size=1000)
#我们已经生成了自由度为10 的随机数
x.max()
#最大值 4.699548301615589
x.min()
#最小值 -4.1986288377860115
x.mean()
#平均数
x.var()
#方差
m,v,s,k=stats.t.stats(10,moments='mvsk')
#输出距,输出距为1为期望,2为方差,3为偏度,4为峰度。对应m,v,s,k
print(m,v,s,k)
#0.0 1.25 0.0 1.02.更严谨的方法
stats.ttest_1samp(x,m)
# Ttest_1sampResult(statistic=-0.5091015895488764, pvalue=0.6107934417720458)
#第一个是统计量,第二个是p值
stats.kstest(x,'t',(10,))
#t分布,自由度为10KstestResult(statistic=0.021462484753307864, pvalue=0.7463327701571849)
#pvalue越大越感觉接近t分布。p小于0.05那就有把喔说没关系。可以检验很多分布3.卡方检验
from scipy import stats
import pandas as pd
import numpy as np
import matplotlib as mt
np.random.seed(28)
#我会改变随机生成器的种子;传入的数值用于指定随机数生成时所用算法开始时所选定的整数值,如果使用相同的seed()值,则每次生成的随机数都相同;种下一颗种子
x=stats.t.rvs(10,size=1000)
q=[0.0,0.01,0.05,0.1,1-0.10,1-0.05,1-0.01,1.0]
crit=stats.t.ppf(q,10)
#生成自由度为10的t分布n_sample=x.size
np.histogram(x,bins=crit)
#按照crit段分类了
(array([ 8, 50, 51, 791, 49, 42, 9], dtype=int64),#占的多少个array([ -inf, -2.76376946, -1.81246112, -1.37218364, 1.37218364,1.81246112, 2.76376946, inf]))n_sample=x.sizeplt=np.histogram(x,bins=crit)
#按照crit段分类了
tprob=np.diff(q)
# array([0.01, 0.04, 0.05, 0.8 , 0.05, 0.04, 0.01])每个数据所占比例
nprob=np.diff(stats.norm.cdf(crit))
#array([0.00285689, 0.03210059, 0.05004565, 0.82999372, 0.05004565,
# 0.03210059, 0.00285689])
tc,tp=stats.chisquare(freqcount,tprob*n_sample)
#和ttest_1samp一样,freqcount是一个频率就是每一部分有多少个。
(3)假设检验:
1.提出检验假设又称原假设,符号是H0;备择假设的符号是H1。
2、选定统计方法,由样本观察值按相应的公式计算出统计量的大小,如X2值、t值等。根据资料的类型和特点,可分别选用Z检验,T检验,秩和检验和卡方检验等。
3、根据统计量的大小及其分布确定检验假设成立的可能性P的大小并判断结果。若P>α,结论为按α所取水准不显著,不拒绝H0,即认为差别很可能是由于抽样误差造成的,在统计上不成立;如果P≤α,结论为按所取α水准显著,拒绝H0,接受H1,则认为此差别不大可能仅由抽样误差所致,很可能是实验因素不同造成的,故在统计上成立。P值的大小一般可通过查阅相应的界值表得到 。
例题;(在以前留下的资料里偷的/害羞)
1.是单体,均值已知的均值双侧检验,平均重量为15g.
2.H0:μ=15,H1:μ≠15
3.μ和σ都未知:
4.计算:
假设检验的两类错误:第一类检验:弃真错误,P{拒绝H0|H0真}<=α,H0为真拒绝H0,
就是真实发生事情的概率很小,但是确实发生了。
第二类错误:纳伪错误,β=P{接受H0|H0不真} ,H0为假接受H0,
不会发生的事情占的概率太大了。
关系:当样本容量固定给的时候阿尔法和β不可能同时变小,如果要同时变小,只能增加样本容量。
功效分析:1.功效:1-β为正确判断出所有假的概率
2.显著性水平:α产生第一类错误的概率
3.样本大小:n
4.效应值:ES,样本大图变瘦,效应值会变得精确。
用功效分析判断假设检验第一类和第二类错误如何夺舍。
什么是p值:
p=P{|T0|>t0}
我们开始想知道t0落在接受域里,就和上面例题一样,就是根据样本算出的统计量如果落在拒绝域的概率就是p值。p小于例题中的α/2那么就落入拒绝域。就是和a比较
(4)正态分布检验:
from scipy import stats
import pandas as pd
import numpy as np
import matplotlib as mt
np.random.seed(28)
#我会改变随机生成器的种子;传入的数值用于指定随机数生成时所用算法开始时所选定的整数值,如果使用相同的seed()值,则每次生成的随机数都相同;种下一颗种子
x=stats.t.rvs(10,size=1000)
stats.normaltest(x)
#NormaltestResult(statistic=25.64130980996834, pvalue=2.7043339505576926e-06)
#这个p很小,就是在拒绝域里,这个x是t分布里的数据这样很正常data=pd.read_csv(r'C:\Users\13056\Desktop\tips.csv')
data['tip_pct']=data['tip']/data['total_bill']
data.tip_pct.hist()
先画出图:
看起来很像正态分布啊
stats.normaltest(data['tip_pct'])
# NormaltestResult(statistic=220.8879728815828, pvalue=1.0833932598440914e-48)
#看一下p值太小了,可能是异常点造成的。print(data[data['tip_pct']>0.4])
#找到不正常的点total_bill tip sex smoker day time size tip_pct
172 7.25 5.15 Male Yes Sun Dinner 2 0.710345
178 9.60 4.00 Female Yes Sun Dinner 2 0.416667
data1=data.drop([172,178])
#删了他
stats.normaltest(data1['tip_pct'])
# NormaltestResult(statistic=4.684342675054582, pvalue=0.09611870532870112)
这就变得像正态分布了
(5)比较两个样本
1.比较两组均值:
rvs1=stats.norm.rvs(loc=5,scale=10,size=500)
#loc是平均数,scale是标准差,size是数据量。正态分布
rvs2=stats.norm.rvs(loc=5,scale=10,size=500)
stats.ttest_ind(rvs1,rvs2)
#Ttest_indResult(statistic=-0.911553791451031, pvalue=0.36222378086748896)
#假设这两组是相同的
rvs3=stats.norm.rvs(loc=5,scale=10,size=800)
stats.ttest_ind(rvs1,rvs3)
#test_indResult(statistic=-0.17726372402376278, pvalue=0.8593372124371541)
#这一组样本均值差的大2.比较两组分布:
rvs1=stats.norm.rvs(loc=5,scale=10,size=500)
#loc是平均数,scale是标准差,size是数据量。正态分布
rvs2=stats.norm.rvs(loc=5,scale=10,size=500)
rvs3=stats.norm.rvs(loc=5,scale=10,size=800)
stats.ks_2samp(rvs1,rvs2)
# Ks_2sampResult(statistic=0.04, pvalue=0.8191511303355717)
stats.ks_2samp(rvs1,rvs3)
# Ks_2sampResult(statistic=0.032, pvalue=0.9603008958861495)
(6)再次强调下:这几个公式。
数据分析数据挖掘(四)相关推荐
- 【干货下载】大数据分析的四个关键环节
本文提炼自神策数据与 Ping++ 联合举办的沙龙 Growth Workshop 中神策数据创始人 & CEO 桑文锋的分享,主题为<大数据分析的四个关键环节>.PPT 干货获取 ...
- 【原】数据分析/数据挖掘 入门级选手建议
1.数据分析和数据挖掘联系和区别 联系:都是搞数据的 区别:数据分析偏统计,可视化,出报表和报告,需要较强的表达能力.数据挖掘偏算法,重模型,需要很深的代码功底,要码代码,很多= =. 2.怎么入门 ...
- 数据分析数据挖掘(五)
数据从 数据分析数据挖掘(三) 去找 一.探索变量的关系 1.事件相互独立的条件: P(AB)=P(A)P(B)则称为事件A和B相互独立,简称A与B独立. P(A)P(B)>0,若A与B独立的充 ...
- 数据分析数据挖掘(三)
前面我自己写的我看着都头大,我看看能不能给大家写的精简点,好理解. 我们需要的数据: 链接:https://pan.baidu.com/s/1xr4x43bfEe4hVWYtwiFGRw 提取码:ya ...
- 数据分析 —— 数据挖掘是什么、能干嘛、怎么做
数据分析 数据挖掘 什么是数据挖掘 数据挖掘:用于寻找数据中隐含的知识,并用于产生商业价值的一种手段 为什么要做数据挖掘 技术和商业就像一对双生子,在互相促进中不断演进发展.随之而来的就是个大公司的业 ...
- 大数据分析的四个关键环节
▌ 什么是大数据? 随着大数据时代的到来,AI 概念的火热,人们的认知有所提高.为什么说大数据有价值?这是不是只是一个虚的概念?大家怎么考虑数据驱动问题?为什么掌握更多的数据就会更有效?这些问题很难回 ...
- python数据分析的四阶段以及电商数据描述性分析和探索性分析
目录 数据分析的四阶段 1 需求 数据情况 需求 产出 2 数据规整(数据预处理,数据清洗,数据重构) 2.1 数据预处理 2.1.1 发现错误的对策 2.1.2 修正缺失值 2.2 修正错误数据 方 ...
- 利用Python进行数据分析(四):数据加载、存储与文件格式
标题利用Python进行数据分析(四):数据加载.存储与文件格式 学习笔记来源于:简书https://www.jianshu.com/p/047d8c1c7e14 输入输出通常可以划分为几个大类:读取 ...
- 各位集美兄得看过来! 利用AI给青春有你2的选手们做数据分析挖掘(四):AI分析谁最容易出道
各位集美兄得看过来! 利用AI给青春有你2的选手们做数据分析挖掘(一):爬虫选手信息 各位集美兄得看过来! 利用AI给青春有你2的选手们做数据分析挖掘(二):统计并展示数据 各位集美兄得看过来! 利用 ...
- 商业数据分析的四个层次
1.概述 1.1缘起 为什么要写这系列文章? 商业数据分析的根本目的就是要洞察数据背后的规律,基于此,企业可以制订决策.并采取相应措施和行动,进而达成想要的结果.这是商业数据分析的最大价值所在. ...
最新文章
- 要在 create-react-app 脚手架里使用 less 的方法
- SQL查找是否存在,别再count了,很耗费时间的
- LBS定位应用app的兴趣点与名称搜索
- 如何把后台返回数据的根据某个选项去重新排序?
- “红人经济第一股”搞虚拟社交,天下秀是变道还是扩道?
- 理解和使用systrace
- 三位对我影响最深的老师
- 测试之道--阿里巴巴八年测试专家倾情奉献
- java xms512m_安装版的tomcat设置JAVA_OPTS=-Xms128M -Xmx512M -XX:PermSize=128M -XX:MaxPermSize=512M...
- 【kafka】kafka 消费速度 小于 日志清理速度 (kafka数据被清理了)会发生什么 auto.offset.reset 参数
- 【jvm】java jvm 报错 OutOfMemoryError: GC overhead limit exceeded
- 【Kafka】kafka console received unknown topic or partition error listOffset request
- 机器学习与计算机视觉(slam技术)
- 原始数据格式无法识别_虹膜识别技术优势明显 为何难以开启“刷眼“时代
- Html5 video 标签中视频有声音没画面问题解决过程
- Keras AlexNet 网络实现 Kaggle 猫狗大战
- hive 旧版本版本下载
- 金万维异速联客户端 盛装入驻苹果应用商店
- 批判性思维_通过批判性反思评估可视化创作系统
- 什么是ubuntu ?