1. 程式人生 > >資料分析第三天

資料分析第三天

numpy十分鐘
Axis:緯度 0按列 1 按行
Corrcoef:相關性
Copy:拷貝 相當於深拷貝
sort:排序
A = np.transpose(b)
A.T 矩陣轉至
B.ravel()
Concatebate():資料拼接

Pandas
import jieba
import pandas as pd
#建立一個預設索引從0開始的Series
s = pd.Series([1,2,3,4,5,6])
#自定義索引
s = pd.Series([1,2,3,4,5,6],index=[‘a’,‘b’,‘c’,‘d’,‘e’,‘f’])
s[‘a’:‘d’]#切片包含前後
#使用字典建立一個DataFrame,鍵自動變為索引,一個key預設對應一列資料
s = pd.DataFrame({‘math’:[1,2,3,4,5],‘physic’:[5,6,7,8,9,]})
#讀取頭兩行
s.head(2)
#讀取結尾資料
s.tail(2)

#生成從20180101開始的時間序列,預設增加單位的是天
#peperiods=10天  freq:D天 返回值為DatetiemIndex,作為使用
datas = pd.date_range('20180101',periods=10)
#建立使用時間索引的Series
date = pd.Series(range(10),index=datas)
#取出從2018-01-01到2018-01-06的行資料
date['2018-01-01':'2018-01-06']

#讀取檔案
df_imdb = pd.read_csv('E:\dataanalysis\day03\IMDB.csv')
#檢視基本型別
df_imdb.info()
#選出一列
df_imdb.Title()
#獲取做高票房
df_imdb['Revenue (Millions)'].max()
df_imdb['Revenue (Millions)'].sum()
df_imdb['Revenue (Millions)'].idxmax()#返回最大值索引
#娶50行
df_imdb[50:51]['Director']
#d第一個緯度是行,第二個是列,取50-56包含前後
df_imdb.loc[50:56,['Director','Year']]
#取1-10行,2-3列都不包含後者
df_imdb.iloc[1:10,2:3]
#統計導演列中不同導演出現的次數
df_imdb['Director'].value_counts()
#講票房大於某一隻的取出來
df_imdb[df_imdb['Revenue (Millions)'] > 500]

df_imdb[df_imdb['Revenue (Millions)'] > 500].loc[:,['Title','Director']]

#講電影風格描述中含有指定字元的找出來,str講待處理的轉化為字串
# df_imdb[df_imdb['Genre'].str.contains('Sci-Fi')].loc[:,['Title']]
df_imdb[df_imdb['Genre'].str.contains('Action')].loc[:,['Title']]
df_imdb[df_imdb['Genre'].str.contains('Sci-Fi')].loc[:,['Revenue (Millions)']].loc[:,['Title']]

d = df_imdb[df_imdb['Genre'].str.contains('Sci-Fi')]
d[d['Revenue (Millions)'] > 500].loc[:,['Title','Director']]

#票數前10
s = df_imdb['Votes'].sort_values(ascending=False)
s.head(10)
#將缺失的資料(NaN)填充為0,也可以根據專案需求指定其他資料

df_score = pd.read_excel('E:\dataanalysis\day03\score.xlsx')
#在DataForm增加一列avg,計算當前Df中每一行的額平均值
#前後賦值資料的行數要對應,axis=1按行計算平均值,0按列計算平均值
df_score['avg'] = df_score.mean(axis=1)
#增加一列計算總分
df_score['sum'] = df_score.sum(axis=1)
#拷貝檔案
d_copy = df_score.copy()
#df_score.describe()把每行列都做一個運算
#按性別分組
df_score.loc[:,[u'音樂',u'性別']].groupby(u'性別').sum()
#數學>80和化學大於60
df_score[(df_score[u'數學'] > 80 ) | (df_score[u'化學']> 60)]
#是妖魔化lambda,配合apply方法將日期中的年份提取出來
#apply函式會將lambd一次作用到資料集的每個元素

dates = pd.Series(['20190901','20190902','20190903'])
dates.apply(lambda x:x[0:4])

df_score['avg'] = df_score['avg'].astype('int')
df_score['avg'] = df_score['avg'].apply(lambda x :int(x))
#計算數學列的綜合,等
df_score[u'數學'].agg(['sum','mean','max','std'])
#講pandas型別轉化為numpy型別
df_score.loc[:,[u'數學',u'化學']].values
#講空資料補位0護著自定義
df_score.fillna(0)
#將缺失資料移除
df_score.dropna()