重新研读fish千聊课07 (上)

这次开始之前,我自己有必要先分析一下思路,再开始研读,到目前为止,我研读这些东西,都没有跟实际工作生活像结合起来,还是有一种为了学东西,而学东西。

我学这个有什么用呢?

这是没能想清楚的问题. 学了python的这点课,真的可能成为我未来转行大数据行业的技能储备吗?

有时候会觉得自己很幼稚。

但也一直觉得,能接触到这项技能真的很有意义。

是不是我把学习Python技能,强制附加了“成为未来转行的必备技能”的期望,而失去了学习东西的那份快乐呢?

好吧,废话几句。 不知道,接下来关于大数据的学习,该何去何从,接着研读吧。

import pandas as pd
import numpy as np
import scipy.stats
import matplotlib.pyplot as plt
import matplotlib  # ?? 只引用matplotlib 和.pyplot 之间的区别是什么呢?
matplotlib.style.use('ggplot')

%matplotlib inline
#%config BackendInline.forture_commat('retina')
#%config InlineBackend.fortune_format = 'retina'
#
%config InlineBackend.figure_format = 'retina'

#错误记录: 配置图形格式为retina这段代码,总是写错。 1. figure_format ,拼写错误明显。 2. 不是用括号,而是直接等于。
# 新增知识点: ggplot,是一个r语言的图形绘制包,可以像图层一样绘制,很好用。

/home/bobo/anaconda3/lib/python3.6/site-packages/matplotlib/font_manager.py:280: UserWarning: Matplotlib is building the font cache using fc-list. This may take a moment.
  'Matplotlib is building the font cache using fc-list. '
!ls data

data_75_12.csv  evolution.csv  fortis_heritability.csv

我不能在自己电脑上直接使用带感叹号的方式运行linux命令。 但是去掉感叹号后,却出现了比较多的文件夹信息。

数据导入和清洗

这部分主要是把粗糙的数据进行清洗

evolution = pd.read_csv(r'data/evolution.csv')

错误记录:

  1. 代码和文件没有在同一层文件夹中,所以应该加入文件夹地址“data/”,我天真地以为可以直接导入
  2. csv,被我搞成了scv
evolution.head()
evolution.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 83 entries, 0 to 82
Data columns (total 8 columns):
Year              82 non-null object
Species           81 non-null object
Beak length       81 non-null object
Beak depth        80 non-null float64
Beak width        80 non-null float64
CI Beak length    80 non-null object
CI Beak depth     80 non-null object
CI Beak width     80 non-null object
dtypes: float64(2), object(6)
memory usage: 5.3+ KB

只有两个数字是float类型,还有绝大部分数据都不是82个。

evolution = evolution.dropna()
evolution.info()

新增知识点:
data.dropna() 是删除缺失值的方法,把数值不齐全的列给删除掉。

<class 'pandas.core.frame.DataFrame'>
Int64Index: 80 entries, 0 to 82
Data columns (total 8 columns):
Year              80 non-null object
Species           80 non-null object
Beak length       80 non-null object
Beak depth        80 non-null float64
Beak width        80 non-null float64
CI Beak length    80 non-null object
CI Beak depth     80 non-null object
CI Beak width     80 non-null object
dtypes: float64(2), object(6)
memory usage: 5.6+ KB
#evolution['Beak length']= pd.numeric['Beak length']

evolution['Beak length'] = pd.to_numeric(evolution['Beak length'])
evolution['Beak length'].head()

错误记录:
1 . 转换为数值类型需要有对象啊。 对象一半都在括号中。 我现在感觉python很像是一个超大的工具包,我说我要A工具,它流把掏出来,不过工具太多,我得说明白
所以我要说,我需要用A工具去操作对象a.

  1. 转换为什么的话,是需要加to的,我并没有加,也就是基本的拼写错误。
0    10.76
1    10.72
2    10.57
3    10.64
4    10.73
Name: Beak length, dtype: float64
evolution['CI Beak length'] = pd.to_numeric(evolution['CI Beak length'],errors='coerce')

evolution['CI Beak depth'] = pd.to_numeric(evolution['CI Beak depth'],errors='coerce')
evolution['CI Beak width'] = pd.to_numeric(evolution['CI Beak width'],errors='coerce')

新增知识点:强制转化为数据类型,但遇到不能转化的额,就用null代替

evolution.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 80 entries, 0 to 82
Data columns (total 8 columns):
Year              80 non-null object
Species           80 non-null object
Beak length       80 non-null float64
Beak depth        80 non-null float64
Beak width        80 non-null float64
CI Beak length    79 non-null float64
CI Beak depth     79 non-null float64
CI Beak width     79 non-null float64
dtypes: float64(6), object(2)
memory usage: 5.6+ KB

初步的数据清洗,就完成了,若是要删除某些列呢? 该咋办呀?

数据探索

evolution.head()
evolution.tail()
evolution.Species.value_counts()

错误记录: value——count可是只针对一列的汇总统计,我输入的是evolution.value_counts()对象是整个数据啊,而我只是想要其中的一列

fortis      40
scandens    40
Name: Species, dtype: int64

尝试修改列名称
evolution.rename(columns = {'Species':'species'},inplace=True)

错误记录,未加引号

evolution.head()

fortis = evolution[evolution.species=='fortis']
fortis.tail()
scandens = evolution[evolution.species=='scandens']
scandens.tail()

所有方括号的外的数据,给定了范围,方括号内,就是筛选数据范围。
evolution.species[evolution.species=='scandens'] vs
evolution[evolution.species=='scandens'] 是截然不同的结果

fortis.plot(x='Year',y=['Beak length','Beak depth','Beak width'])

错误记录:

  1. y= 后面只能有一个对象,我的逗号,就反映了有多个对象,应该把多个对象用方括号连起来。
  2. 我竟然直接开始画图,用plt.plot开头,连data都没有。 应该是fortis.plot,笨!!
<matplotlib.axes._subplots.AxesSubplot at 0xa4d6128>
output_22_1.png
scandens.plot(x='Year',y=['Beak length','Beak depth','Beak width'])
<matplotlib.axes._subplots.AxesSubplot at 0xa9006d8>
output_23_1.png
output_24_1.png
scandens.plot(x='Year',y=['Beak length','Beak depth','Beak width'],subplots = True,figsize=(10,6))
#新增知识点:1.subplots,意思应该是在多幅图上作图,而非在一张图上显示
array([<matplotlib.axes._subplots.AxesSubplot object at 0x000000000BA26898>,
       <matplotlib.axes._subplots.AxesSubplot object at 0x000000000BB0FC88>,
       <matplotlib.axes._subplots.AxesSubplot object at 0x000000000BB5F240>], dtype=object)
output_24_1.png
fortis.plot(x='Year',y='Beak depth',yerr='CI Beak depth',color='Red',marker='o',figsize=(10,5))

新增知识点:yerr,marker

<matplotlib.axes._subplots.AxesSubplot at 0xd339b00>
output_25_1.png
scandens.plot(x='Year',y='Beak depth',yerr='CI Beak depth',color='Orange',marker='o',figsize=(11,4))
<matplotlib.axes._subplots.AxesSubplot at 0xe03fc88>
output_26_1.png

75年和12年的数据比较

ls data
 驱动器 C 中的卷是 WIN7
 卷的序列号是 CCED-57EE

 C:\Users\Administrator.USER-20170623BT\Desktop\第七课材料\第七课材料\codes\data 的目录

2017/08/31  12:13    <DIR>          .
2017/08/31  12:13    <DIR>          ..
2017/08/14  17:39             6,148 .DS_Store
2017/08/14  12:37            14,142 data_75_12.csv
2017/08/14  17:50             3,930 evolution.csv
2017/08/14  13:15             8,568 fortis_heritability.csv
               4 个文件         32,788 字节
               2 个目录 40,499,621,888 可用字节
data = pd.read_csv('data/data_75_12.csv')
data.head()

这组数据中只包含有75年和12年的所有样本,而刚才的是每年的数据一个均值。

data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 651 entries, 0 to 650
Data columns (total 4 columns):
species    651 non-null object
length     651 non-null float64
depth      651 non-null float64
year       651 non-null int64
dtypes: float64(2), int64(1), object(1)
memory usage: 20.4+ KB
data.year.value_counts()
1975    403
2012    248
Name: year, dtype: int64
data.species.value_counts()
fortis      437
scandens    214
Name: species, dtype: int64
data.groupby(['species','year']).count()

错误记录:

  1. groupby后面的对象应该是括号啊,用方括号,往往都是为了把多个数据,合并为一个对象。
  2. groupby的计数,是不加s的。
data.groupby(['species','year']).mean()
fortis2 = data[data.species=='fortis']
fortis2.head()
fortis2.boxplot(by='year',figsize=(10,5))
array([<matplotlib.axes._subplots.AxesSubplot object at 0x7fca6a16c630>,
       <matplotlib.axes._subplots.AxesSubplot object at 0x7fca615bcfd0>], dtype=object)
output_37_1.png
scandens2 = data[data.species=='scandens']
scandens2.head()

scandens2.boxplot(by='year',figsize=(10,5))
array([<matplotlib.axes._subplots.AxesSubplot object at 0x7fca610619e8>,
       <matplotlib.axes._subplots.AxesSubplot object at 0x7fca61493438>], dtype=object)
output_39_1.png

中地雀鸟喙深度和长度的变化


按时间给中地雀的样本分组
fortis75 = fortis2[fortis2.year==1975]
为什么对时间的切片,不用加引号呢? 引号只是对str类型有效吗?
fortis12 = fortis2[fortis2.year==2012]

print (fortis75.head())
print (fortis12.head())
  species  length  depth  year
0  fortis     9.4    8.0  1975
1  fortis     9.2    8.3  1975
2  fortis     9.5    7.5  1975
3  fortis     9.5    8.0  1975
4  fortis    11.5    9.9  1975
    species  length  depth  year
403  fortis    10.0    8.5  2012
404  fortis    12.5    8.9  2012
405  fortis     9.3    7.5  2012
406  fortis    10.3    9.6  2012
407  fortis    11.0    9.2  2012

个人思考:这里的fortis75 和fortis12 是两组抽样分布,所以我们要比较两组分布之间的数据变化,是需要用推论统计的。
而比较两组数据间的差别应该怎么办呢?
核心指标是什么啊?
是总体的均值。
但是总体的均值,是一个推测值,由两组样本之间的推测出的总体均值的范围来确定的。
所以需要用置信区间来确定,锁定在大部分情况下,总体均值会在什么范围。

但是比较两个样本的总体均值的话,该怎么办?

那就是用拒绝域的那个观点,可是拒绝域的本质问题是什么啊?
p value,还有μ的范围。

头脑有点炸 ,我看看源码吧,

fortis75.depth.mean()
9.171645569620255
fortis12.depth.mean()
8.605371900826446
def mean_ci(data):
    #均值95%的置信区间
    n  = len(data)
    x_ = np.mean(data)
    s = np.std(data,ddof=1)
    z = scipy.stats.norm.isf(0.0025)
    se = s/np.sqrt(n)
    con_in = (x_-z*se,x_+z*se)
    
    return con_in
mean_ci(fortis75.depth)
(9.0552111088224159, 9.2880800304180937)
def mean_ci1(data):    
    '''给定样本数据,计算均值95%的置信区间'''        
    sample_size = len(data)    
    std = np.std(data, ddof=1)     
    se = std / np.sqrt(sample_size)        
    point_estimate = np.mean(data)      
    z_score = scipy.stats.norm.isf(0.025)  # 置信度95%    
    confidence_interval = (point_estimate - z_score * se, point_estimate + z_score * se)    
    
    return confidence_interval
mean_ci1(fortis75.depth)
(9.0903471711839057, 9.2529439680566039)
mean_ci(fortis12.depth)
(8.4184311775393894, 8.792312624113503)
mean_ci1(fortis12.depth)
(8.4748436937850755, 8.7359001078678169)

鸟喙深度均值差

也就是说,拿75年和12年的均值相减。

diff_mean = fortis12.depth.mean()-fortis75.depth.mean()
diff_mean

-0.5662736687938086

bootstrap求差值的均值变化

def draw_bs_res(data,func,size = 1):
    bs_replicates = np.empty(size)  #错误记录,np.empy()括号中还需要情况一个值,那就是size。 既然初始化,那一定要指明初始化的是哪个数字哦
    for i in range(size):
        bs_replicates[i] = func(np.random.choice(data,size = len(data)))#choice()后面是有2个参数,样本是哪些? 从样本中再抽多少次?而我只是把样本放进去了,忘了写该抽样多少个
        
    return bs_replicates
bs_for75=draw_bs_res(fortis75.depth,np.mean, 10000)
bs_for12 = draw_bs_res(fortis12.depth,np.mean,10000)

bs_for75
array([ 9.24414557,  9.20844937,  9.23446203, ...,  9.19316456,
        9.12177215,  9.22363924])
bs_for12
array([ 8.57479339,  8.5731405 ,  8.62190083, ...,  8.72933884,
        8.76115702,  8.60330579])
diff_bs = bs_for12-bs_for75
diff_bs
array([-0.66935218, -0.63530887, -0.6125612 , ..., -0.46382571,
       -0.36061513, -0.62033346])
diff_mean = np.percentile(diff_bs,[2.5,97.5])
diff_mean
array([-0.71902047, -0.40750995])
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 151,511评论 1 330
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 64,495评论 1 273
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 101,595评论 0 225
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 42,558评论 0 190
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 50,715评论 3 270
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 39,672评论 1 192
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,112评论 2 291
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,837评论 0 181
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,417评论 0 228
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,928评论 2 232
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,316评论 1 242
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,773评论 2 234
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,253评论 3 220
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,827评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,440评论 0 180
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 34,523评论 2 249
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 34,583评论 2 249

推荐阅读更多精彩内容

  • 1. 简述相关分析和回归分析的区别和联系。 回归分析和相关分析都是研究两个或两个以上变量之间关系的方法。 广义上说...
    安也也阅读 8,150评论 0 3
  • 这次开始之前,我自己有必要先分析一下思路,再开始研读,到目前为止,我研读这些东西,都没有跟实际工作生活像结合起来,...
    Bog5d阅读 156评论 0 0
  • 本课主要是统计学常识。 很多概念都值得背诵下来。 描述统计量 集中趋势均值中位数众数 离散程度全距四分位距方差、...
    Bog5d阅读 367评论 0 0
  • 《R语言与统计分析》的读书笔记 本书的重点内容及感悟: 第三章 概率与分布 1、随机抽样 通过sample()来实...
    格式化_001阅读 6,410评论 1 12
  • Guess what is this? Do you know Tom and Jack? Tom in this!
    玥光下的猫阅读 175评论 0 1