正文:
1. JOSN语法
1.1. JOSN是存储和交换文本信息的语法。
JOSN对象以键值对为基本组成单位,每个键值对用冒号分隔,不同键值对之间用逗号分隔,括号表示对象,对象中可以包含多个键值对。
d = {key1:value1,key2:value2,...,keyN:valueN}
#以上是格式。
[
{"class":1,
"name":"lalala",
"age":18,
"height":null,
"weight":41.1,
"phone":[{"iphone":"14promax"},{"1TB":true}]
},
{"class":2,
"name":"fafafa",
"age":20,
"height":null,
"weight":40.1,
"phone":[{"iphone":"13pro"},{"1TB":false}]
}
]
#在Altair中使用JSON
值的数据类型 | 格式 | 注意 |
字符串 | "string" | 字符串必须用双引号 |
数字 | 1、1.1 | 整数或者浮点数不加引号 |
布尔值 | true、false | 不需要加引号,全部都要小写 |
JSON对象 | {"key":value} | 键必须加双引号的字符串 |
数组 | [] | 允许储存任何数据类型,多数情况下存储为JSON对象 |
空值 | null | 不需要加引号,全部小写 |
2. Pandas的数据框(DataFrame)对象的使用方法
2.1 用字典创建DataFrame
import pandas as pd#引用库
data = {
"Name":["lalala","fafafa","hahaha"],
"sex":["female","male","female"],
"age":[18,20,19]
}
#存储字典
df = pd.DataFrame(data)
df
#生成dataframe
如果需要看某些变量的取值,可以给DataFrame增加列索引或者行索引。即加了index。看第三行的观测记录可以用df.loc["two"],不能用df.loc[2]。
如果列索引的字符串不是字典中的键,就会变成NaN。
df = pd.DataFrame(data,index=[0,1,"two"],columns=["Name","Sex","Age"]#注意了这个Sex和Age不是上面的特征值,会显示NaN。
df
2.2 DataFrame的操作方法
延用了以上的数据。
2.2.1 查看行索引
rowindex=df.index#看行索引
rowindex
rowindex[0]#这个0为第一行的行索引,1为第二行的行索引,以此类推
len(rowindexx)#有多少行
2.2.2 查看列索引
colindex = df.columns#查看列索引的总体情况
colindex
colindex[1]#第二列的列索引
len(colindex)#有多少列
2.2.3 查看值区域(不包括行索引和列索引)
valRanges = df.values
valRanges
valRanges[1,1]#第二行第二列的值,不包含行索引和列索引哈
valRanges[0,0]#第一行第一列的值
2.2.4查看某一列和若干列
df["Name"]#如果这是个列索引,那么会显示这一列的数。
df[["Name","Sex"]]#显示多列的数,用逗号隔开。
2.2.5 查看某一行和若干行
df.loc[1]#看第二行,但是加不加[]会显示的有差别
df.loc[[1]]#这样会显示的比较正常,好看点
df.loc[[0,"two"]]#有若干行的选择要把列索引的元素放在列表里,简单的说就是再加个[]。
建议把元素放在列表里,产生双列表,会好看很多。
2.2.6 看某一个值和若干个值(指定)
df.loc[1,"Name"]#第一个是行索引,第二个是列索引
df.loc[[0,1],"Name"]#第一个是行索引,也就是第一行和第二行,第二个是列索引,指向"Name"
df.loc[[0,"two"],["Name","Sex"]]#用逗号隔开,我用two是因为前面行索引被我改了,大家根据自己的索引情况做就好!
2.3 缺失值的缺失操作方法(删除法)
2.3.1 识别缺失值
import pandas as pd
import altair as alt
from vega_datasets import data#这个data是离线数据集,是示例用的,仅供学习,书上写的也是这个离线数据集,延用作者的数据集。
#想看更多的示例数据集:data.list_datasets()
source = data.movies()#加载数据集,设置了一个变量,一定要设置变量
source
2.3.2 判断变量取值是否存在缺失值、
pd.isna(source)#缺失值,如果缺失了布尔值就是true
pd.isnull(source)#和isna()一样的。
2.3.3 统计变量取值存在缺失值的数量
pd.isna(source).sum()#这个单词是统计数量
可以看到几乎所有的变量都有缺失值。
2.3.4 删除包含缺失值的数据记录
source.dropna().head(10)
2.4.5 查看删除了包含缺失值的数据记录的数量变化
source.shape#原来的shape
source.dropna().shape#删了之后的shape
2.4 处理缺失值(非删除法)
2.4.1 填补缺失值
填0
source.fillna(0).head()#缺失值全部填0,这个head是展示前五行的意思
用W_G的均值填补存在缺失值的W_G
source.fillna({"Worldwide_Gross":source["Worldwide_Gross"].maan()}).head(10)#对着Worldwide_Gross这个列的缺失值进行平均值填充,展示前十行。
填完之后看看缺失值的统计
pd.isna(source.fillna({"Worldwide_Gross":source["Worldwide_Gross"].mean()})).sum()#填完之后看看缺失值统计
source.fillna({"Worldwide_Gross":source["Worldwide_Gross"].mean()}).count()#注意了这里是source
用数量型变量的描述统计
source.describe()#用数量型变量的描述统计
2.5 条件查询
2.5.1 展示前几行或者倒数几行
source.head()#前五行
source.head(19)#前十九行
source.tail()#倒数五行
source.tail(10)#倒数十行
2.5.2 查询条件的设置方法
2.5.2.1 数量型变量查询
逻辑运算符 | == | >= | <= | != |
含义 | a和b是否相等 | a大于等于b | a小于等于b | a和b是否不相等 |
#示例
df.Age==18
2.5.2.2 名义型变量查询
主要用API函数str.contains()
source["Title"].str.contains("Sla")#包含了这几个字符都可以被查询到
也可以用数量型变量查询用的逻辑运算符
source[source.Title=="Slam"]#精准查询
2.5.2.3 用逻辑连接符查询
连接符 | | | & |
含义 | 或(二选一) | 和(两个都要) |
和:
source[(source.Distributor=='Sony Pictures')&(source.Running_Time_min>=100)]
或:
source[(source.Distributor=='Sony Pictures')|(source.Running_Time_min>=100)]
叠点列或者行的buff,用[]连接
比如我想要Title和Source这两列+条件是Distributor是Sony Pictures和Running_Time_min大于等于100
source[['Title','Source']][(source.Distributor=='Sony Pictures')|(source.Running_Time_min>=100)]
叠点名义型变量查询的buff
source[['Director','Source']][source.Title.str.contains("Sun")]
如果包含了"("这种特殊符号,用正则表达式查询,str.contains("\(")
2.5.2.4 查询时间型变量
source.Year==pd.Timestamp("1999")#精准查询,此为示例
2.6 数据加工器(实例方法)
数据预处理一般用pandas和实例方法transform_*(),Pandas可以改变数据集,从而获得需要的数据集,实例方法仅模拟操作,不改变数据集,是临时的。
数据加工器名称 | 实例方法 |
数据汇总 | transform_aggregate() |
数据过滤 | transform_filter() |
数据计算 | transform_calculate() |
数据离散 | transform_bin() |
时间日期转换 | transform_timeunit() |
缺失值插补 | transform_impute() |
数据汇总连接 | transform_joinaggregate() |
窗口变换 | transform_window() |
核密度估计 | transform_density |
时间单位变换 | transform_timeunit() |
横向数据转换 | transform_fold() |
纵向数据转换 | transform_pivot() |
数据抽样 | transform_sample() |
数据累积 | transform_stack() |
数据扁平 | transform_flatten() |
数据查找 | transform_lookup() |
稳健估计 | transform_loess() |
回归拟合 | transform_regression |
分位数 | transform_quantile |
注意:Chart一定要写在实例方法的前面
alt.Chart(source).transform_*()
一定!
3. 参考文献
刘大成. Python统计可视化之Altair探索分析实践指南,2022.