国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

Python數(shù)據(jù)挖掘Pandas詳細(xì)解答

89542767 / 439人閱讀


  大家知道,python有一個(gè)比較強(qiáng)大的功能,那就是可以進(jìn)行數(shù)據(jù)挖掘,它的數(shù)據(jù)挖掘能力還是比較的強(qiáng)大的。另外,我們?cè)谑褂肞andas的時(shí)候,也會(huì)有各種各樣的問(wèn)題,下面就給大家進(jìn)行詳細(xì)解答。


  1DataFrame

  Pandas=panel+data+analysis


  主要是用于大數(shù)據(jù)挖掘的開(kāi)源系統(tǒng)Python庫(kù)


  以Numpy為載體,借助Numpy控制模塊這時(shí)候計(jì)算層面特性強(qiáng)的優(yōu)越性


  根據(jù)matplotlib,可以簡(jiǎn)單的繪圖


  與眾不同的算法設(shè)計(jì)


  方便快捷的數(shù)據(jù)分析能力


  讀取文件便捷


  封裝形式了Matplotlib、Numpy的繪圖和計(jì)算


  核心算法設(shè)計(jì)


  DataFrame(是series的容器,一般二維)


  Panel(是dataframe的容器,三維)


  Series(一維)


  1.1構(gòu)造dataframe利用DataFrame函數(shù)


  索引:行索引-index,橫向索引;列索引-columns,縱向索引


  值:values,利用values即可直接獲得去除索引的數(shù)據(jù)(數(shù)組)


  shape:表明形狀(形狀不含索引的行列)


  T:行列轉(zhuǎn)置


  DataFrame是一個(gè)既有行索引又有列索引的二維數(shù)據(jù)結(jié)構(gòu)


  importnumpyasnp
  importpandasaspd
  a=np.ones((2,3))
  b=pd.DataFrame(a)
  print(a)
  print(b)


  如圖,生成的打他frame是一個(gè)二維表,由于沒(méi)有指定索引,因此默認(rèn)行列索引為數(shù)字序號(hào)

2.png

  1.2常用操作(設(shè)置索引)


  1.獲取局部展示


  b.head()#默認(rèn)展示前5行,可在head()加入數(shù)字,展示前幾行
  b.tail()#默認(rèn)展示后5行,可在tail()加入數(shù)字,展示后幾行


  2.獲取索引和值


  importnumpyasnp
  #創(chuàng)建一個(gè)符合正態(tài)分布的10個(gè)股票5天的漲跌幅數(shù)據(jù)
  stock_change=np.random.normal(0,1,(10,5))
  pd.DataFrame(stock_change)
  #設(shè)置行列索引
  stock=["股票{}".format(i)foriinrange(10)]
  date=pd.date_range(start="20200101",periods=5,freq="B")#這個(gè)是pandas中設(shè)置日期的
  #添加行列索引
  data=pd.DataFrame(stock_change,index=stock,columns=date)
  print(data)

3.png

  3.設(shè)置行列索引


  #創(chuàng)建一個(gè)符合正態(tài)分布的10個(gè)股票5天的漲跌幅數(shù)據(jù)


 stock_change=np.random.normal(0,1,(10,5))
  pd.DataFrame(stock_change)
  #設(shè)置行列索引
  stock=["股票{}".format(i)foriinrange(10)]
  date=pd.date_range(start="20200101",periods=5,freq="B")#這個(gè)是pandas中設(shè)置日期的
  #添加行列索引
  data=pd.DataFrame(stock_change,index=stock,columns=date)
  print(data)

4.png

  4.修改索引


 #不能多帶帶修改行列總某一個(gè)索引的值,可以替換整行或整列例:b.index[2]='股票1'錯(cuò)誤
  data.index=新行索引
  #重設(shè)索引
  data.reset_index(drop=False)
  #drop參數(shù)默認(rèn)為False,表示將原來(lái)的索引替換掉,換新索引為數(shù)字遞增,原來(lái)的索引將變?yōu)閿?shù)據(jù)的一部分。True表示,將原來(lái)的索引刪除,更換為數(shù)字遞增。如下圖

5.png

  

#設(shè)置新索引
  df=pd.DataFrame({'month':[1,4,7,10],
  'year':[2012,2014,2013,2014],
  'sale':[55,40,84,31]})
  #以月份設(shè)置新的索引
  df.set_index("month",drop=True)


  #見(jiàn)下圖,即將原本數(shù)據(jù)中的一列拿出來(lái)作為index

6.png

  new_df=df.set_index(["year","month"])#設(shè)置多個(gè)索引,以年和月份多個(gè)索引其實(shí)就是MultiIndex


  可以看到下面的new_df已經(jīng)是multiIndex類(lèi)型數(shù)據(jù)了。


  有三級(jí):indexindex.namesindex.levels


  分別看各自的輸出


  1.3MultiIndex與Panel


  MultiIndex:多級(jí)或分層索引對(duì)象


  Panel:


  pandas.Panel(data=None,items=None,major_axis=None,minor_axis=None,copy=False,dtype=None)


  存儲(chǔ)3維數(shù)組的Panel結(jié)構(gòu)


  items-axis0,每個(gè)項(xiàng)目對(duì)應(yīng)于內(nèi)部包含的數(shù)據(jù)幀(DataFrame)。


  major_axis-axis1,它是每個(gè)數(shù)據(jù)幀(DataFrame)的索引(行)。


  minor_axis-axis2,它是每個(gè)數(shù)據(jù)幀(DataFrame)的列。


  items-axis0,每個(gè)項(xiàng)目對(duì)應(yīng)于內(nèi)部包含的數(shù)據(jù)幀(DataFrame)。


  major_axis-axis1,它是每個(gè)數(shù)據(jù)幀(DataFrame)的索引(行)。


  minor_axis-axis2,它是每個(gè)數(shù)據(jù)幀(DataFrame)的列。


  Pandas從版本0.20.0開(kāi)始棄用,推薦的用于表示3D數(shù)據(jù)的方法是DataFrame上的MultiIndex方法


  1.4Series


  帶索引的一維數(shù)組


  index


  values


 #創(chuàng)建
  pd.Series(np.arange(3,9,2),index=["a","b","c"])
  #或
  pd.Series({'red':100,'blue':200,'green':500,'yellow':1000})
  sr=data.iloc[1,:]
  sr.index#索引
  sr.values#值
  #####就是從dataframe中抽出一行或一列來(lái)觀察
  12345678910


  2基本數(shù)據(jù)操作


  2.1索引操作


  data=pd.read_csv("./stock_day/stock_day.csv")#讀入文件的前5行表示如下


  ######利用drop刪除某些行列,需要利用axis告知函數(shù)是行索引還是列索引


  data=data.drop(["ma5","ma10","ma20","v_ma5","v_ma10","v_ma20"],axis=1)#去掉一些不要的列


  data["open"]["2018-02-26"]#直接索引,但需要遵循先列后行


  #####按名字索引利用.loc函數(shù)可以不遵循列行先后關(guān)系


  data.loc["2018-02-26"]["open"]#按名字索引


  data.loc["2018-02-26","open"]


  #####利用.iloc函數(shù)可以只利用數(shù)字進(jìn)行索引


  data.iloc[1][0]#數(shù)字索引


  data.iloc[1,0]


  #組合索引


  #獲取行第1天到第4天,['open','close','high','low']這個(gè)四個(gè)指標(biāo)的結(jié)果


  data.ix[:4,['open','close','high','low']]#現(xiàn)在不推薦用了


  ###但仍可利用loc和iloc


  data.loc[data.index[0:4],['open','close','high','low']]


  data.iloc[0:4,data.columns.get_indexer(['open','close','high','low'])]


  2.2賦值操作


  data仍然是上圖類(lèi)型


  data.open=100


  data['open']=100


  ###兩種方式均可


  data.iloc[1,0]=100


  ###找好索引即可


  2.3排序


 sort_values(比較values進(jìn)行排序)sort_index(比較行索引進(jìn)行排序,不行可以先轉(zhuǎn)置簡(jiǎn)介對(duì)列排序)
  data.sort_values(by="high",ascending=False)#DataFrame內(nèi)容排序,ascending表示升序還是降序,默認(rèn)True升序
  data.sort_values(by=["high","p_change"],ascending=False).head()#多個(gè)列內(nèi)容排序。給出的優(yōu)先級(jí)進(jìn)行排序
  data.sort_index(ascending=True)###對(duì)行索引進(jìn)行排序
  #這里是取出了一列“price_change”列,為serise,用法同上
  sr=data["price_change"]
  sr.sort_values(ascending=False)
  sr.sort_index()

  2.4數(shù)學(xué)運(yùn)算


  布爾值索引


  算術(shù)運(yùn)算:直接利用運(yùn)算符或者函數(shù)


  #正常的加減乘除等的運(yùn)算即可


 data["open"]+3
  data["open"].add(3)#open統(tǒng)一加3
  data.sub(100)#所有統(tǒng)一減100data-100
  (data["close"]-(data["open"])).head()#close減open
  邏輯運(yùn)算:<;>;|;&利用邏輯符號(hào)或者函數(shù)query
  #例如篩選p_change>2的日期數(shù)據(jù)
  data[data["p_change"]>2].head()
  #完成一個(gè)多個(gè)邏輯判斷,篩選p_change>2并且low>15
  data[(data["p_change"]>2)&(data["low"]>15)].head()
  data.query("p_change>2&low>15").head()###等效于上一行代碼
  ###判斷#判斷'turnover'列索引中是否有4.19,2.39,將返回一列布爾值
  data["turnover"].isin([4.19,2.39])##如下圖
  利用布爾值索引,即利用一個(gè)布爾數(shù)組索引出True的數(shù)據(jù)
  ###判斷#判斷'turnover'列索引中是否有4.19,2.39,將返回一列布爾值
  data["turnover"].isin([4.19,2.39])##如下圖
  data[data["turnover"].isin([4.19,2.39])]
  #這塊就將返回turnover列布爾值為true的如下圖,也就是篩選出turnover中值為4.19和2.39


  ###布爾值索引是一個(gè)很方便的數(shù)據(jù)篩選操作,比如:


  data[data["turnover"]>0.1]


  #也將篩選出turnover列中大于0.1的整體data數(shù)據(jù),并不是說(shuō)只返回turnover相關(guān)數(shù)據(jù),判斷只是返回布爾索引,利用索引的是data數(shù)據(jù)


  2.5統(tǒng)計(jì)運(yùn)算


  data.describe()


  #將返回關(guān)于列的最值,均值,方差等多種信息


  ##其實(shí)這里很多就和numpy相似了


  data.max(axis=0)#返回最值


  data.idxmax(axis=0)#返回最值索引


  累計(jì)統(tǒng)計(jì)函數(shù)(累加,累乘等)


  cumsum計(jì)算前1/2/3/…/n個(gè)數(shù)的和


  cummax計(jì)算前1/2/3/…/n個(gè)數(shù)的最大值


  cummin計(jì)算前1/2/3/…/n個(gè)數(shù)的最小值


  cumprod計(jì)算前1/2/3/…/n個(gè)數(shù)的積


  自定義運(yùn)算


 apply(func,axis=0)
  func:自定義函數(shù)
  axis=0:默認(rèn)按列運(yùn)算,axis=1按行運(yùn)算
  data.apply(lambdax:x.max()-x.min())
  #這里的lambdax:x.max()-x.min()是lambda表達(dá)式,是函數(shù)的簡(jiǎn)單寫(xiě)法也可
  deffx(data):
  returndata.max()-data.min()


  3畫(huà)圖


  3.1pandas.DataFrame.plot


 x:labelorposition,defaultNone
  y:label,positionorlistoflabel,positions,defaultNone
  Allowsplottingofonecolumnversusanother
  kind:str
  ‘line’:lineplot(default)
  ''bar":verticalbarplot
  “barh”:horizontalbarplot
  “hist”:histogram
  “pie”:pieplot
  “scatter”:scatterplot
  #更簡(jiǎn)易用matplotlib
  data.plot(x="volume",y="turnover",kind="scatter")
  data.plot(x="high",y="low",kind="scatter")
  data['volume'].plot()

  4文件讀取寫(xiě)入


  4.1CSV文件


  DataFrame.to_csv(path_or_buf=None,sep=','columns=None,header=True,index=True,index_label=None,mode='w',encoding=None)


  1


  path_or_buf:stringorfilehandle,defaultNone


  sep:character,default‘,’(分隔符)


  columns:sequence,optional


  mode:'w‘:重寫(xiě),'a’追加


  index:是否寫(xiě)入行索引


  header:booleanorlistofstring,defaultTrue,是否寫(xiě)進(jìn)列索引值
  Series.to_csv(path=None,index=True,sep=',',na_rep='',float_format=None,header=False,index_label=None,mode='w',encoding=None,compression=None,date_format=None,decimal='.)
  WriteSeriestoacomma-separatedvalues(csv)file
  pd.read_csv("./stock_day/stock_day.csv",usecols=["high","low","open","close"]).head()#讀哪些列
  data=pd.read_csv("stock_day2.csv",names=["open","high","close","low","volume","price_change","p_change","ma5","ma10","ma20","v_ma5","v_ma10","v_ma20","turnover"])#如果列沒(méi)有列名,用names傳入
  data[:10].to_csv("test.csv",columns=["open"])#保存open列數(shù)據(jù)
  data[:10].to_csv("test.csv",columns=["open"],index=False,mode="a",header=False)#保存opend列數(shù)據(jù),index=False不要行索引,mode="a"追加模式|mode="w"重寫(xiě),header=False不要列索引


  4.2HDF5文件


  read_hdfto_hdf


  HDF5文件的讀取和存儲(chǔ)需要指定一個(gè)鍵,值為要存儲(chǔ)的DataFrame,也就是說(shuō)hdf5存儲(chǔ)的是panel這種三維類(lèi)型,一個(gè)key對(duì)應(yīng)一個(gè)dataframe


  pandas.read_hdf(path_or_buf,key=None,**kwargs)


  從h5文件當(dāng)中讀取數(shù)據(jù)


  path_or_buffer:文件路徑


  key:讀取的鍵


  mode:打開(kāi)文件的模式


  reurn:TheSelectedobject


  DataFrame.to_hdf(path_or_buf,key,**kwargs)


  day_close=pd.read_hdf("./stock_data/day/day_close.h5",key="close")


  day_close.to_hdf("test.h5",key="close")


  4.3JSON文件


  read_jsonto_json


  pandas.read_json(path_or_buf=None,orient=None,typ=“frame”,lines=False)


  將JSON格式轉(zhuǎn)換成默認(rèn)的PandasDataFrame格式


  orient:string,IndicationofexpectedJSONstringformat.


  ‘split’:dictlike{index->[index],columns->[columns],data->[values]}


  ‘records’:listlike[{column->value},…,{column->value}]


  ‘index’:dictlike{index->{column->value}}


  ‘columns’:dictlike{column->{index->value}},默認(rèn)該格式


  ‘values’:justthevaluesarray


  lines:boolean,defaultFalse


  按照每行讀取json對(duì)象


  typ:default‘frame’,指定轉(zhuǎn)換成的對(duì)象類(lèi)型series或者dataframe


  sa=pd.read_json("Sarcasm_Headlines_Dataset.json",orient="records",lines=True)


  ##主要是path,orient是一種確定索引與數(shù)值的對(duì)應(yīng),以本例來(lái)看,列索引就是‘key',values就是key對(duì)應(yīng)的值


  sa.to_json("test.json",orient="records",lines=True)


  5高級(jí)處理


  5.1缺失值(標(biāo)記值)處理


  主要參數(shù)


  inplace實(shí)現(xiàn)數(shù)據(jù)替換(默認(rèn)為False)


  dropna實(shí)現(xiàn)缺失值的刪除(默認(rèn)刪除行)


  fillna實(shí)現(xiàn)缺失值的填充


  isnull或notnull判斷是否有缺失數(shù)據(jù)NaN


  如何進(jìn)行缺失值處理?


  刪除含有缺失值的樣本


  替換/插補(bǔ)數(shù)據(jù)


  判斷NaN是否存在


  pd.isnull(df)會(huì)返回整個(gè)dataframe的布爾框架,難以觀察(bool為T(mén)rue代表那個(gè)位置是缺失值)


  pd.isnull(df).any()表示只要有一個(gè)True就返回True


  pd.notnull(df)會(huì)返回整個(gè)dataframe的布爾框架,難以觀察(bool為False代表那個(gè)位置是缺失值)


  pd.notnull(df).all()表示只要有一個(gè)False就返回False


  刪除nan數(shù)據(jù)


  df.dropna(inplace=True)默認(rèn)按行刪除inplace:True修改原數(shù)據(jù),F(xiàn)alse返回新數(shù)據(jù),默認(rèn)False


  替換nan數(shù)據(jù)


  df.fillna(value,inplace=True)


  value替換的值


  inplace:True修改原數(shù)據(jù),F(xiàn)alse返回新數(shù)據(jù),默認(rèn)False


  movie["Revenue(Millions)"].fillna(movie["Revenue(Millions)"].mean(),inplace=True)


  ###這就是先利用其他代碼判斷出"Revenue(Millions)"有nan數(shù)據(jù),然后利用.fillna函數(shù),令value=movie["Revenue(Millions)"].mean()列的均值,然后inplace=True修改原數(shù)據(jù)


  importpandasaspd


  importnumpyasnp


  movie=pd.read_csv("./IMDB/IMDB-Movie-Data.csv")


  #1)判斷是否存在NaN類(lèi)型的缺失值


np.any(pd.isnull(movie))#返回True,說(shuō)明數(shù)據(jù)中存在缺失值
  np.all(pd.notnull(movie))#返回False,說(shuō)明數(shù)據(jù)中存在缺失值
  pd.isnull(movie).any()
  pd.notnull(movie).all()
  #2)缺失值處理
  #方法1:刪除含有缺失值的樣本
  data1=movie.dropna()
  pd.notnull(data1).all()
  #方法2:替換
  #含有缺失值的字段
  #Revenue(Millions)
  #Metascore
  movie["Revenue(Millions)"].fillna(movie["Revenue(Millions)"].mean(),inplace=True)
  movie["Metascore"].fillna(movie["Metascore"].mean(),inplace=True)
  替換非nan的標(biāo)記數(shù)據(jù)
  有些數(shù)據(jù)不存在可能標(biāo)記為“#”,“?”等
  #讀取數(shù)據(jù)
  path="wisconsin.data"
  name=["Samplecodenumber","NormalNucleoli","Mitoses","Class"]
  data=pd.read_csv(path,names=name)


  #這里的非nan標(biāo)記值缺失值就是利用“?”表示的,因此利用參數(shù)to_replace,value=np.nan,將默認(rèn)標(biāo)記值替換為nan值,然后再利用簽署方法處理nan缺失值


  #1)替換


  data_new=data.replace(to_replace="?",value=np.nan)


  5.2離散化


  這一塊建議去看視頻,理解更快:視頻地址


  連續(xù)屬性的離散化就是將連續(xù)屬性的值域上,將值域劃分為若干個(gè)離散的區(qū)間,最后用不同的符號(hào)或整數(shù)值代表落在每個(gè)子區(qū)間的屬性值。


  連續(xù)屬性離散化的目的是為了簡(jiǎn)化數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)離散化技術(shù)可以用來(lái)減少給定連續(xù)屬性值的個(gè)數(shù)。離散化方法經(jīng)常作為數(shù)據(jù)挖掘的工具。


  實(shí)現(xiàn)方法:


  1.分組


  自動(dòng)分組sr=pd.qcut(data,bins)


  自定義分組sr=pd.cut(data,[])


  2.將分組好的結(jié)果轉(zhuǎn)換成one-hot編碼(啞變量)


  pd.get_dummies(sr,prefix=)


  one-hot編碼:


  one-hot


  比如男女?dāng)?shù)據(jù)一般用1和0表示,但1和0本身有大小問(wèn)題,而男女只是不同的概念,因此用1,0表示會(huì)存在區(qū)別


  同時(shí)還可處理連續(xù)數(shù)據(jù),比如將身高的連續(xù)數(shù)據(jù)分為不同的身高區(qū)間,每個(gè)區(qū)間對(duì)應(yīng)一個(gè)類(lèi)別,然后類(lèi)比同上來(lái)考慮


  #1)準(zhǔn)備數(shù)據(jù)


  data=pd.Series([165,174,160,180,159,163,192,184],index=['No1:165','No2:174','No3:160','No4:180','No5:159','No6:163','No7:192','No8:184'])


  #2)分組


  #自動(dòng)分組


  sr=pd.qcut(data,3)


  sr.value_counts()#看每一組有幾個(gè)數(shù)據(jù)


  #3)轉(zhuǎn)換成one-hot編碼


  pd.get_dummies(sr,prefix="height")


  #自定義分組


  bins=[150,165,180,195]#這就表示有三組[150,165][165,180][180,195]


  sr=pd.cut(data,bins)


  #get_dummies


  pd.get_dummies(sr,prefix="身高")


  5.3合并


  指合并不同dataframe上的內(nèi)容數(shù)據(jù)


  按方向


  pd.concat([data1,data2],axis=1)


  #axis:0為列索引;1為行索引


  按索引


 left=pd.DataFrame({'key1':['K0','K0','K1','K2'],
  'key2':['K0','K1','K0','K1'],
  'A':['A0','A1','A2','A3'],
  'B':['B0','B1','B2','B3']})
  right=pd.DataFrame({'key1':['K0','K1','K1','K2'],
  'key2':['K0','K0','K0','K0'],
  'C':['C0','C1','C2','C3'],
  'D':['D0','D1','D2','D3']})
  pd.merge(left,right,how="inner",on=["key1","key2"])
  pd.merge(left,right,how="left",on=["key1","key2"])
  pd.merge(left,right,how="outer",on=["key1","key2"])
  ###這里merge參數(shù)解釋?zhuān)?  #left:需要合并的一個(gè)表,合并后在左側(cè)
  #right:需要合并的一個(gè)表,合并后在右側(cè)
  #how:合并方式


  #on:在哪些索引上進(jìn)行合并


  5.4交叉表與透視表


  交叉表


  交叉表用于計(jì)算一列數(shù)據(jù)對(duì)于另外一列數(shù)據(jù)的分組個(gè)數(shù)(尋找兩個(gè)列之間的關(guān)系)


  pd.crosstab(value1,value2)


  data=pd.crosstab(stock["week"],stock["pona"])


  data.div(data.sum(axis=1),axis=0).plot(kind="bar",stacked=True)


  透視表


  相對(duì)于交叉表操作簡(jiǎn)單些


  #透視表操作


  stock.pivot_table(["pona"],index=["week"])


  5.5分組與聚合


  分組與聚合通常是分析數(shù)據(jù)的一種方式,通常與一些統(tǒng)計(jì)函數(shù)一起使用,查看數(shù)據(jù)的分組情況。


 DataFrame.groupby(key,as_index=False)key:分組的列數(shù)據(jù),可以多個(gè)
  col=pd.DataFrame({'color':['white','red','green','red','green'],'object':['pen','pencil','pencil','ashtray','pen'],'price1':[5.56,4.20,1.30,0.56,2.75],'price2':[4.75,4.12,1.60,0.75,3.15]})

  #進(jìn)行分組,對(duì)顏色分組,price1進(jìn)行聚合


  #用dataframe的方法進(jìn)行分組


  col.groupby(by="color")


  #或者用Series的方法進(jìn)行分組聚合


  col["price1"].groupby(col["color"])


  6案例


  要求


  想知道這些電影數(shù)據(jù)中評(píng)分的平均分,導(dǎo)演的人數(shù)等信息,我們應(yīng)該怎么獲取?


  對(duì)于這一組電影數(shù)據(jù),如果我們想看Rating,Runtime(Minutes)的分布情況,應(yīng)該如何呈現(xiàn)數(shù)據(jù)?


  對(duì)于這一組電影數(shù)據(jù),如果我們希望統(tǒng)計(jì)電影分類(lèi)(genre)的情況,應(yīng)該如何


  處理數(shù)據(jù)?


  數(shù)據(jù)結(jié)構(gòu)展示


  代碼


  #1、準(zhǔn)備數(shù)據(jù)


  

movie=pd.read_csv("./IMDB/IMDB-Movie-Data.csv")


  ###movie讀入后如上圖所示


  ######################問(wèn)題一


  #問(wèn)題1:我們想知道這些電影數(shù)據(jù)中評(píng)分的平均分,導(dǎo)演的人數(shù)等信息,我們應(yīng)該怎么獲取?


  #評(píng)分的平均分


  movie["Rating"].mean()


  #導(dǎo)演的人數(shù)


  np.unique(movie["Director"]).size


  ######################問(wèn)題二


  ##繪制直方圖查看分布


  movie["Rating"].plot(kind="hist",figsize=(20,8))


  #利用matplotlib可更細(xì)致繪圖


  importmatplotlib.pyplotasplt


  #1、創(chuàng)建畫(huà)布


  plt.figure(figsize=(20,8),dpi=80)


  #2、繪制直方圖


  plt.hist(movie["Rating"],20)


  #修改刻度


  plt.xticks(np.linspace(movie["Rating"].min(),movie["Rating"].max(),21))


  #添加網(wǎng)格


  plt.grid(linestyle="--",alpha=0.5)


  #3、顯示圖像


  plt.show()


  ######################問(wèn)題三


  ##如果我們希望統(tǒng)計(jì)電影分類(lèi)(genre)的情況,應(yīng)該如何處理數(shù)據(jù)?


  ###可以發(fā)現(xiàn)圖中g(shù)enre一列數(shù)據(jù)中每個(gè)電影都有多種標(biāo)簽,因此要先分割


  #先統(tǒng)計(jì)電影類(lèi)別都有哪些


  movie_genre=[i.split(",")foriinmovie["Genre"]]


  ###得到的movie_genre結(jié)構(gòu)圖見(jiàn)《下圖一》


  ###這一塊主要是把movie_genre的二維列表變?yōu)橐詾榱斜恚缓罄胾nique函數(shù)去重


  movie_class=np.unique([jforiinmovie_genreforjini])


  len(movie_class)####這就得到了電影的類(lèi)型標(biāo)簽種類(lèi)數(shù)


  #統(tǒng)計(jì)每個(gè)類(lèi)別有幾個(gè)電影


  count=pd.DataFrame(np.zeros(shape=[1000,20],dtype="int32"),columns=movie_class)


  count.head()###得到的count結(jié)構(gòu)如《下圖二》


  #計(jì)數(shù)填表


  foriinrange(1000):


  count.ix[i,movie_genre[i]]=1###注意ix現(xiàn)在不太能用了


  ############movie_genre[i]將返回字符索引列


  #這就得到了下面第三張圖片的數(shù)據(jù)處理效果,列表示電影類(lèi)型種類(lèi),行表示不同電影,如《下圖三》


  #因此只需逐列求和即可得到每類(lèi)標(biāo)簽電影的數(shù)量


  ##最終實(shí)現(xiàn)數(shù)據(jù)可視化如《下圖四》


 count.sum(axis=0).sort_values(ascending=False).plot(kind="bar",figsize=(20,9),fontsize=40,colormap="cool")


  綜上所述,小編就為大家介紹到這里了,希望可以給大家?guī)?lái)幫助

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/127840.html

相關(guān)文章

  • Python如何利用pandas讀取csv數(shù)據(jù)并繪圖

      小編寫(xiě)這篇文章的一個(gè)主要目的,主要是給大家去做一個(gè)解答,解答的內(nèi)容主要是Python相關(guān)知識(shí),比如說(shuō),會(huì)給大家講解怎么樣去利用Python pandas去做一個(gè)讀取,讀取的是csv數(shù)據(jù),然后將這些數(shù)據(jù)去做一個(gè)繪圖處理,具體內(nèi)容下面給大家詳細(xì)解答。  如何利用pandas讀取csv數(shù)據(jù)并繪圖  導(dǎo)包,常用的numpy和pandas,繪圖模塊matplotlib,  importmatplotli...

    89542767 評(píng)論0 收藏0
  • Python如何批量將csv文件編碼方式轉(zhuǎn)換為UTF-8?下面就給大家解答

      csv文件其實(shí)就是單純的儲(chǔ)存文本數(shù)據(jù)的一種形式,那么,在日常的辦公當(dāng)中,要怎么做去提高其辦公的效率呢?比如,如何使用Python去批量的進(jìn)行處理文件,批量的處理csv文件,怎么將編碼轉(zhuǎn)換成為YTF-8的形式呢?下面給大家詳細(xì)的解答下。  當(dāng)我們用pandas是操作CSV文件的時(shí)候,常常會(huì)因?yàn)榫幋a問(wèn)題出現(xiàn)報(bào)錯(cuò)。  pandas_libsparsers.pyx in pandas._libs.pa...

    89542767 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<