python实现描述统计

数据基础情况

import numpy as np
import pandas as pd
import matplotlib.pyplot as pyplot
pd.options.display.max_rows = 10##最多输出10行数据
data_url= 'https://cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud/IBMDeveloperSkillsNetwork-ST0151EN-SkillsNetwork/labs/teachingratings.csv'
data=pd.read_csv(data_url)
# 打印行数和列数
data.shape
#(463, 19)
 
# 打印数据的个数
data.size
#8797
 
# 该数据集的维度
data.ndim
#2
 
# 该数据集的长度
len(data)
#463
 
# 各个列的值的个数
data.count()
'''
minority           463
age                463
gender             463
credits            463
beauty             463
                  ... 
female             463
single_credit      463
upper_division     463
English_speaker    463
tenured_prof       463
Length: 19, dtype: int64
'''

 '''
 count()函数是一种非常常用的方法,用于统计某个元素在列表、元组或字符串中出现的次数。它的使用非常简单,只需要传入要统计的元素作为参数即可;
 基本语法:count(element, start, end);其中,element是要统计的元素;start:(可选,整型)开始的索引,默认0;end :(可选,整型)结束的索引,默认最后一个位置
 count()函数返回的是指定元素在列表、元组或字符串中出现的次数。如果元素不存在,则返回0。
 1)字符串:string.count( str, start, end )
 2)字节串:bytes.count( str, start, end ) 
 3)字节数组:bytearray.count( str, start, end ) 
 4)列表:list.count( element )
 5)元组:tuple.count( element ) 
 6)等差数列:range.count( element )

fruits = ['apple', 'banana', 'orange', 'apple', 'grape', 'apple']
count = fruits.count('apple')
print(count)
#>>3

text = "Python is a powerful programming language. Python is widely used in web development, data analysis, and artificial intelligence."
count = text.count('Python')
print(count)
#>>2

numbers = [1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
count = numbers.count([1, 2])
print(count)
#>>2
 '''
 
# 各列的最小值
data.min()
'''
Rank                                                                  1
Title                                              (500) Days of Summer
Genre                                                            Action
Description           "21" is the fact-based story about six MIT stu...
                                            ...                        
Rating                                                              1.9
Votes                                                                61
Revenue (Millions)                                                    0
Metascore                                                            11
Length: 12, dtype: object
'''
 
# 描述信息
df.describe()
'''
		float_col	int_col
count	5.000000	5.000000
mean	0.500000	3.000000
std		0.395285	1.581139
min		0.000000	1.000000
25%		0.250000	2.000000
50%		0.500000	3.000000
75%		0.750000	4.000000
max		1.000000	5.000000
'''
'''
查看某个列的数据的统计特征值(eg:平均值、中位数、最小值、最大值)
平均值:.mean();中位数.median();最小值:.min();最大值:.max()
'''

#描述组内数据的基本统计量
data.groupby('gender').describe().stack()#unstack():从行到列取消堆叠,stack():从列到行堆叠

在这里插入图片描述

分布图

绘制某列数据的分布直方图

import matplotlib.pyplot as pyplot
pyplot.hist(data['beauty'])

在这里插入图片描述

分类统计分析

groupby()方法

通过对DataFrame对象调用groupby()函数返回的结果是一个DataFrameGroupBy对象,而不是一个DataFrame或者Series对象
分组时,可指定多个列名
调用get_group()函数可以返回一个按照分组得到的DataFrame对象
也可调用max()、count()、std()等,返回一个DataFrame对象
可与聚合函数aggregate/agg一起使用
可对组内的数据绘制概率密度分布

grouped = df.groupby('Gender')
print(type(grouped))
print(grouped)
'''
<class 'pandas.core.groupby.groupby.DataFrameGroupBy'>
'''

##分组时,不仅仅可以指定一个列名,也可以指定多个列名:
grouped = df.groupby('Gender')
grouped_muti = df.groupby(['Gender', 'Age'])
print(grouped.size())
'''
Gender
Female    3
Male      5
dtype: int64
'''

print(grouped_muti.size())
'''
Gender  Age
Female  17     1
        18     1
        22     1
Male    18     1
        19     1
        20     2
        21     1
dtype: int64
'''

##get_group()函数可以返回一个按照分组得到的DataFrame对象
df = grouped.get_group('Female').reset_index()
print(df)
'''
   index   Name  Gender  Age  Score
0      2   Cidy  Female   18     93
1      4  Ellen  Female   17     96
2      7   Hebe  Female   22     98
'''

调用max()、count()、std()等,返回的结果是一个DataFrame对象。

grouped.max()[['age', 'allstudents']]
'''
	 	age	allstudents
gender		
female	62		282
male	73		581
'''

df.groupby('Sex')['salary'].mean()##求得分组平均数, 得到的是一个Series, 每一行对应了每一组的mean, 除此之外你还可以换成std, median, min, max, sum 这些基本的统计数据
'''
Sex
female    2500
male      6750
Name: salary, dtype: int64
'''
grouped.mean()[['age', 'allstudents']]
'''
		age	allstudents
gender		
female	45.092308	44.138462
male	50.746269	63.208955
'''

grouped.count()

在这里插入图片描述

也可以选择使用聚合函数aggregate,传递numpy或者自定义的函数,前提是返回一个聚合值

def getSum(data):
    total = 0
    for d in data:
        total+=d
    return total

print(grouped.aggregate({'age':np.median, 'allstudents':np.sum}))
'''
		age	allstudents
gender		
female	46	8607
male	51	16940
'''
print(grouped.aggregate({'age':getSum}))
'''
		age
gender	
female	8793
male	13600
'''
print(grouped.aggregate(np.median))

在这里插入图片描述

aggregate函数不同于apply,前者是对所有的数值进行一个聚合的操作,而后者则是对每个数值进行单独的一个操作

df.groupby('Sex').agg({'salary':np.sum,'age':np.median})
'''
        salary   age
Sex                 
female    5000  33.0
male     27000  35.0
'''

df.groupby('Sex')['age'].agg([np.sum,np.mean,np.max,np.min])
'''
          sum   mean  amax  amin
Sex                             
female   66.0  33.00  36.0  30.0
male    135.0  33.75  40.0  25.0
'''
可视化操作
grouped['age'].plot(kind='line', legend=True)
plt.show()

在这里插入图片描述

df.groupby('Sex')['area'].value_counts().unstack().plot(kind = 'bar',figsize = (15,5))
df.groupby('area')['age'].sum().plot(kind = 'bar',figsize = (15,5))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值