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)

spyder数据分析

上一篇:数学建模 - 离散拟合似连续


下一篇:C# 一步步连接操作ACCESS数据库 https://blog.csdn.net/qq_15505341/article/details/79033243