spyder数据分析
一些注意事项
在字符串中为了区分转义符,可以在前面加个\ 或者在最前面加r;
字符串加好拼接;乘号重复;
索引【-1】代表最后一个;
endwith布尔值检查结尾;
startwirh检查开始;检查的可以是元组,里面多个元素;
find找位置;忽略大小写使用re.findall;
join拼接;
注意python和matab的很大区别是python索引是从0开始的!!!;
将列表中的值进行置空[]就相当于删除;
判断一个值在列表中用in;
判断多个值在列表中:
set([2,10]) <= set(a);
集合set无序不重复,去除列表重复元素可以转换成集合再转换回来;
两个集合:
a-b差集
a|b并集;
a&b交集;
a^b不同时存在的元素
字典无序,list和tup不能当键;
del删除;
sorted按键排序;
dict构建字典;
生成序列的range只能是整数;
要生成带小数的使用np的arrange(起始值,终止值,步长 );
修改文件编码方式使用notepad++软件;
导入文本文件(csv)
file文件路径;
names列名,默认为文件中的第一行;
se分隔符,默认为空,表示默认导入为一列;
encoding设置文件编码,导入中文的时候需要设置为utf-8
from pandas import read_table;
read_table(file, names = [列名1,列名2,....], sep = "", encoding,...)
from pandas import read_csv;
read_csv(file, names = [列名1,列名2,....], sep = "", encoding,...)
导入Excel文件
filename文件路径
sheetname sheet的名字
names 列名,默认第一行作为列名
read_excel(fileName, sheetname,header)
导出csv文件
filePath文件路径;
sep分隔符,默认逗号;
index是否导出行序号,默认导出;
header是否导出列名,默认导出;
df.to_csv(filePath, sep="", index = TRUE, header = TRUE)
重复值处理
行相同的数据只保留一行
返回新的df
df1 = df.drop_duplicates()
缺失值的处理
产生:
暂时无法获取
信息被遗漏
处理方式
数据补全;(平均值等等)
删除对应缺失行;(数据量少慎用)
df.dropna()
不处理;
空格值处理
字符型数据前后有空格
newname = df['name'].str.strip()
df['name'] = newname
字段抽取
根据已知列数据的开始和结束位置,抽出新的列
df['列名'] = df['列名'].astype(str) # 先转换成字符串形式
df1= df['列名'].str.slice(start,stop)
字段拆分
按照固定的字符,拆分已有字符串;
sep用于分割字符串(空格逗号);
n分割为多少列;
expend是否展开为数据框,默认不展开,返回的是系列Series,展开时返回dataframe
split(sep, n, expend = False)
记录抽取
比较运算
< > >= <= !=
comments为列名,
返回这列中满足>10000条件的所在行
df[df.comments > 10000]
范围运算
df[df.comments.between(1000,10000)]
空值匹配
找出为标题为空的行
df[pandas.isnumm(df.title)]
字符匹配
抽取title所在列包含某个字符的所在行
df[df.title.str.contains('', na = False)] # 控制不需要匹配
逻辑运算
df[(df.comments>=1000)&(df.comments<=100000)] # 与上面的between效果相同
随机抽样
start范围开始值(闭)一般为0
end范围结束值(开)
num抽样个数
返回的是行数的索引值系列Series
numpy.random.randint(start,end,num)
记录合并
将两个结构相同的数据框,合并成一个数据框
import pandas;
df3 = pandas.concat([dataFrame1,dataFrame2])
字段合并
是字段拆分的逆过程,将一个数据框中多列(数字要先转换成字符型)进行合并
返回一个系列
新列名 = df['列名1'] + df['列名2'] + df['列名3']
字段匹配
将不同结构的数据框,按照一定条件进行合并
x第一个数据框
y第二个数据框
yleft_on第一个数据框用于匹配的列
right_on第二个数据框用于匹配的列
返回的是新的数据框
import pandas;
df1 = pandas.merge(x, y, left_on, right_on)
简单计算
result = df.price * df.num
df['sum'] = result
数据标准化
0-1标准化:
x ∗ = x − m i n / m a x − m i n x^* = {x-min}/{max-min} x ∗ = x − m i
n / m a x − m i n
scale = (df.acore-df.score.min())/(df.score.max()-df.score.min())
数据分组
根据分析对象的特征,按照一定的数值指标,把数据分析对象划分为不同的区间部分;
series需要分组的数据
bins分组的划分数组
right分组的时候右边是否闭合
labels分组的自定义标签,可以不定义
cur(series, bins, right = True, labels = NULL)
# 先生成两个系列:数组和标签
bins = [min(df.cost)-1,20,40,60,80,100,max(df.cost)+1];
labels = ['20以下','20-40','40-60','60-80','80-100','100以上'];
pandas.cut(df.cost,bins,right = Ture, labels = labels)
日期转换
将字符型数据转换为日期型数据
%Y年份
%m月份
%d日期
%H小时
%M分钟
%S秒
返回一个时间格式的系列
df_dt = to_datatime(df.列名, format)
df_df = to_datatime(df.日期, '%y-%m-%d')
日期格式化
将日期型数据转换为字符型数据
apply(lambda x:处理逻辑)
datatime.strftime(x,format)
df_dt_str = df_dt.apply(lambda x: datatime.strftime(x,'%d-%m-%s'))
日期抽取
从日期格式里面,抽取出需要的部分属性
datatime列.dt.property
df_dt.dt.year
df_dt.dt.minute
散点图
import matplotlib
import matplotlib.pyplot as plt
plot(x,y,'.',color = (r,g,b)) #大点使用'o'
plt.xlabel('x轴标签')
plt.ylabel('y轴标签')
plt.grid(True) # 背后的方格
plt.show()
RGB颜色设置
(red,green,blue)不是0-255而是0-1
折线图
-实线
–虚线
-.
:
.
o
,
plot(x,y,style,color,linewidth)
title('title')
饼图
参数分别是序列、各部分标签、各部分颜色、需要突出的块状序列、占比的显示格式
pie(x,labels,colors,ecplode,autopct)
柱形图
参数分别代表x轴的位置序列(一般arrange)、y轴位置序列、柱形图的宽度、填充颜色
bar(left,height,width,color) #横向
barh(bottom,width,height,color) # 竖向
直方图
统计的是数据出现的次数,比较频数的差异
x需要绘制的向量
color直方图的填充颜色
bins分组个数
cumulative是否累计计数
hist(x,color,bins,cumulative=False)