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)

在這里插入圖片描述


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM