你们要的pandas来了!
"第三更来了"
04
—
《数据加载》
处理普通文本
读取文本:read_csv() read_table()
方法参数 | 参数解释 |
filepath_or_buffer | 文件路径 |
sep | 列之间的分隔符。read_csv()默认为为',', read_table()默认为'\t' |
header | 默认将首行设为列名。header=None时应手动给出列名。 |
names | header=None时设置此字段使用列表初始化列名。 |
index_col | 将某一列作为行级索引。若使用列表,则设置复合索引。 |
usecols | 选择读取文件中的某些列。设置为为相应列的索引列表。 |
skiprows | 跳过行。可选择跳过前n行或给出跳过的行索引列表 |
encoding | 编码。 |
写入文本:dataFrame.to_csv(
方法参数 | 参数解释 |
filepath_or_buffer | 文件路径 |
sep | 列之间的分隔符。默认为',' |
na_rep | 写入文件时dataFrame中缺失值的内容。默认空字符串。 |
columns | 定义需要写入文件的列。 |
header | 是否需要写入表头。默认为True。 |
index | 会否需要写入行索引。默认为True。 |
encoding | 编码。 |
案例:读取电信数据集。
pd.read_csv('../data/CustomerSurvival.csv', header=None, index_col=0)
处理JSON
读取json:read_json()
方法参数 | 参数解释 |
filepath_or_buffer | 文件路径 |
encoding | 编码 |
案例:读取电影评分数据:
pd.read_json('../data/ratings.json')
写入json:to_json()
方法参数 | 参数解释 |
filepath_or_buffer | 文件路径;若设置为None,则返回json字符串 |
orient | 设置面向输出格式:['records', 'index', 'columns', 'values'] |
案例:
data = {'Name':['Tom', 'Jack', 'Steve', 'Ricky'],'Age':[28,34,29,42]}
df = pd.DataFrame(data, index=['s1','s2','s3','s4'])
df.to_json(orient='records')
其他文件读取方法参见:https://www.pypandas.cn/docs/user_guide/io.html
05
—
《数值型描述统计》
算数平均值
$S = [s_1, s_2, ..., s_n] $
样本中的每个值都是真值与误差的和。
$mean = \frac{(s_1 + s_2 + ... + s_n) }{n}$
算数平均值表示对真值的无偏估计。
m = np.mean(array)
m = array.mean()
m = df.mean(axis=0)
案例:针对电影评分数据做均值分析:
mean = ratings['John Carson'].mean()
mean = np.mean(ratings['John Carson'])
means = ratings.mean(axis=1)
加权平均值
求平均值时,考虑不同样本的重要性,可以为不同的样本赋予不同的权重。
样本:$S = [s_1, s_2, s_3 ... s_n]$
权重:$W =[w_1, w_2, w_3 ... w_n]$
加权平均值:
代码实现:
a = np.average(array, weights=volumes)
案例:自定义权重,求加权平均。
# 加权均值
w = np.array([3,1,1,1,1,1,1])
np.average(ratings.loc['Inception'], weights=w)
mask = ~pd.isna(ratings.loc['Inception'])
np.average(ratings.loc['Inception'][mask], weights=w[mask])
最值
np.max() / np.min() / np.ptp(): 返回一个数组中最大值/最小值/极差(最大值减最小值)
import numpy as np
# 产生9个介于[10, 100)区间的随机数
a = np.random.randint(10, 100, 9)
print(a)
print(np.max(a), np.min(a), np.ptp(a))
np.argmax() np.argmin(): 返回一个数组中最大/最小元素的下标
print(np.argmax(a), np.argmin(a))
print(series.idxmax(), series.idxmin())
print(dataframe.idxmax(), dataframe.idxmin())
np.maximum() np.minimum(): 将两个同维数组中对应元素中最大/最小元素构成一个新的数组
print(np.maximum(a, b), np.minimum(a, b), sep='\n')
中位数
将多个样本按照大小排序,取中间位置的元素。
若样本数量为奇数,中位数为最中间的元素
$[1, 2000, 3000, 4000, 10000000]$
若样本数量为偶数,中位数为最中间的两个元素的平均值
$[1,2000,3000,4000,5000,10000000]$
案例:分析中位数的算法,测试numpy提供的中位数API:
import numpy as np
closing_prices = np.loadtxt('../../data/aapl.csv',
delimiter=',', usecols=(6), unpack=True)
size = closing_prices.size
sorted_prices = np.msort(closing_prices)
median = (sorted_prices[int((size - 1) / 2)] +
sorted_prices[int(size / 2)]) / 2
print(median)
median = np.median(closing_prices)
print(median)
频数与众数
频数指一组数据中各离散值出现的次数,而众数则是指一组数据中出现次数最多的值。
cars = np.array(['bmw', 'bmw', 'bz', 'audi', 'bz', 'bmw'])
cars = pd.Series(cars)
cars.value_counts()
cars.mode()
四分位数
所谓四分位数,即把数值由小到大排列并分成四等份,处于三个分割点位置的数值就是四分位数。
第1四分位数 (Q1),又称“较小四分位数”,等于该样本中所有数值由小到大排列后第25%的数字。
第2四分位数 (Q2),又称“中位数”,等于该样本中所有数值由小到大排列后第50%的数字。
第3四分位数 (Q3),又称“较大四分位数”,等于该样本中所有数值由小到大排列后第75%的数字。
第3四分位数与第1四分位数的差距又称四分位距(InterQuartile Range,IQR)
ary = np.array([1,1,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,5])
s = pd.Series(ary)
s.quantile([.0, .25, .5, .75, 1.])
标准差
样本(sample):
平均值:
离差(deviation):表示某组数据距离某个中心点的偏离程度
离差方:
总体方差(variance):
总体标准差(standard deviation):
样本方差:
其中,n-1称之为“贝塞尔校正”,这是因为抽取样本时候,采集的样本主要是落在中心值附近,那么通过这些样本计算的方差会小于等于对总体数据集方差的无偏估计值。为了能弥补这方面的缺陷,那么我们把公式的n改为n-1,以此来提高方差的数值。称为贝塞尔校正系数。
样本标准差:
案例:根据标准差理论,针对评分数据进行方差分析:
ratings.std(axis=0)
宏观数值统计
ratings.describe()
“您的关注就是我写下去的动力”