Python描述性统计与pandas简单入门

01

Python是一门很牛逼的编程语言,语法简单,功能强大,它可以用于Web开发,网络爬虫,写脚本,人工智能,机器学习,数据分析,数据可视化等等。说了那么多用途,相信你和我一样,内心早就燃起了对学习Python的热情。这里强烈推荐廖雪峰老师的Python教程,喜欢看书的话,则推荐《PYTHON基础教程》,最新版出到第三版了。

接下来我将会使用Jupyter Notebook来进行代码的编写与运行,它是以网页的形式打开的,可以直接在里面编写代码和运行,非常方便。对于小白来说,推荐安装Anaconda,Anaconda已经自动为我们安装好了Jupyter Notebook以及其他工具等。当然,喜欢钻研的小伙伴也可以到终端输入pip命令安装,具体的就不再赘述了。

首先导入相关的Python模块,并加载好待会儿要操作的数据集。这个数据集是以前练习爬虫的时候抓取下来的豆瓣读书数据。

import numpy as np
import pandas as pd
data = pd.read_excel("doubanTOP250.xlsx")
df = data.head() 
df

因为该数据集是.xlsx格式,使用pandas.read_excel来加载。其它加载数据的方式还有很多,常见的有:

  • 从CSV文件导入数据
pd.read_csv():
  • 导入json格式的字符串文件
pd.read_json()
  • 从带分隔符的文本文件导入数据
pd.read_table()
  • 导入SQL表
pd.read_sql_table()
  • 导入xlsx格式的文件
pd.read_excel()

describe函数可以快速生成各类统计指标,如平均数、标准差、中位数、最大值等,适用于数值型数据。

stats_numeric = pd.DataFrame.describe(df[['price']])
stats_numeric

如果对均值、中位数、峰态系数等的概念不是很清楚,可以点击先看下这篇文章:统计学入门级-描述性统计理论。接下来用Python进行描述性统计,直接上代码。

mode1 = df['rate'].mode()[0]
print('众数:' + str(mode1))
mean1 = df['price'].mean()
print('均值:'+ str(mean1))
median1 = df['price'].median()
print('中位数:' + str(median1))
min1 = df['price'].min()
print('最小值:' + str(min1))
max1 = df['price'].max()
print('最大值:' + str(max1))
quantile1 = df['price'].quantile(q=0.25)
print('第一四分位数:' + str(quantile1))
quantile2 = df['price'].quantile(q=0.50)
print('第二四分位数,即中位数:' + str(quantile2))
quantile3 = df['price'].quantile(q=0.75)
print('第三四分位数:' + str(quantile3))
std1 = df['price'].std()
print('样本标准差:' + str(std1))
var1 = df['price'].var()
print('样本方差:' + str(var1))
skew1 = df['price'].skew()
print('偏态系数:' + str(skew1))
kurt1 = df['price'].kurt()
print('峰态系数:' + str(kurt1))

describe = {'mode':[mode1],
            'mean': [mean1],
            'median': [median1],
            'min': [min1],
            'max': [max1],
            'quantile1': [quantile1],
            'quantile2': [quantile2],
            'quantile3': [quantile3],
            'standard deviation': [std1],
            'variance': [var1],
            'skewness coefficient': [skew1],
            'kurtosis coefficient': [kurt1]
           }
stats = pd.DataFrame(describe,columns= ['mode','mean','median','min','max','quantile1','quantile2',
                                     'quantile3','standard deviation','variance','skewness coefficient',
                                     'kurtosis coefficient'])                                 
stats

02

Series和DataFrame是pandas两个常用的工具数据结构。Series是一种一维的数组型对象,它包含一个值序列和索引,如果索引没有明确指定的话,默认是0到N-1(N为数据的长度)。可以认为Series是一个定长有序的字典,因为它将索引值和数据值按位置配对。

#  创建一个Series,或者使用字典生成一个series
series1 = pd.Series([1,2,-3,9], index = ['a', 'b', 'c', 'd'])  
dict = {'tom': 9, 'sam': 79, 'andrew': 90, 'mary':84}
series2 = pd.Series(dict)
series2
  • 获取Series对象的值:
series1.values
  • 通过索引获取值:
series1['a']
series1[['b','a']]
  • 获取Series对象的索引:
series1.index
  • 判断Series对象的缺失数据:
series1.isnull()
series1.notnull()
  • 对Series对象的值进行排序:
series1.sort_values()

两个Series对象还可以进行相加,在这数学操作中,Series会自动对齐索引。


03

DataFrame表示的是矩阵的数据表,包含已排序的列集合,每一列的值类型可以不同,数值型、字符串、布尔值都可以,它既有行索引也有列索引。

data = {'name': ['tom', 'sam', 'mary', 'jerry'],
           'age': [12, 23,15,18],
           'score':[67,89,88,90]}
# columns指定了列的顺序,df1将会按照指定顺序排列         
df1 = pd.DataFrame(data,columns = ['score', 'name', 'age'])
df1

获取df1的其中一列,可以按字典型标记或属性那样检索为Series。df1[column]对于任意列名均有效,df1.column 只在列名是有效的Python变量名时有效。

df1['age'] 
df1.age

pandas的其他常用操作如下:

df1.head(n),df1.tail(n)
查看前n行/最后n行,若不指定默认前5行
df.info() 
查看索引、数据类型和内存信息
df1.shape 
查看行数和列数
df1['age'].value_counts()  
查看Series对象的唯一值和计数
df1.values 
以数组的形式返回数据
df1.loc[2] 
通过位置或特殊属性loc进行选取某一行
df1.columns 
获取DataFrame对象的列
df1.index 
获取DataFrame对象的索引
df1.isnull(),df1.notnull() 
判断DataFrame对象的缺失数据
df1.sort_values() 
按照列对DataFrame对象进行排序`

关于Pandas数据处理的知识点还有很多,包括数据合并,过滤,分组,空值的删除替换,数据的选取等等,后续会再补上。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,589评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,615评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,933评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,976评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,999评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,775评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,474评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,359评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,854评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,007评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,146评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,826评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,484评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,029评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,153评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,420评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,107评论 2 356

推荐阅读更多精彩内容