【Pythonデータ分析】1 st-データ探索とデータ前処理
6084 ワード
「Pythonデータ分析と発掘実戦」読書ノートのデータ探索とデータ前処理
文書ディレクトリ @[toc] ##一、データ探索Pythonにおけるデータ探索のためのライブラリは主にPandas(データ分析)とMatplotlib(データ可視化)である.
###データ分析内容データ品質分析:欠落値分析:異常値分析:一致性分析
データフィーチャー解析
ぶんぷぶんせき
ひかくぶんせき
とうけいりょうかいせき
しゅうきぶんせき
寄与度分析
相関解析
###異常値検出コード
###貢献度分析コード(野菜収益パレート図コード)
データ集積データ変換でーた集積データ変換:関数変換かんすうへんかん:正規化(正規化):連続属性離散化(一部のアルゴリズムではデータが分類属性形式であることが要求される):属性構造ぞくせい:ウェーブレット変換ウェーブレットへんかん
###データ洗浄コード(ラグランジュ法による補間)
###データ離散化コード
ヒントに従ってerrorとwarning(warningは変更しなくてもよい)reshape is deprecated and will raise in a subsequent releaseを修正する.DataFrameソートsortの問題
DataFrame基本操作pythonでデータ分析4|pandasライブラリ紹介のDataFrame基本操作Pandas dataframeデータ書き込みファイルとデータベース
文書ディレクトリ
###データ分析内容データ品質分析:欠落値分析:異常値分析:一致性分析
データフィーチャー解析
ぶんぷぶんせき
ひかくぶんせき
とうけいりょうかいせき
しゅうきぶんせき
寄与度分析
相関解析
###異常値検出コード
#-*- coding: utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
import pandas as pd
catering_sale = '../data/catering_sale.xls' #
data = pd.read_excel(catering_sale, index_col = u' ') # , “ ”
import matplotlib.pyplot as plt #
plt.rcParams['font.sans-serif'] = ['SimHei'] #
plt.rcParams['axes.unicode_minus'] = False #
plt.figure() #
p = data.boxplot(return_type='dict') # , DataFrame
x = p['fliers'][0].get_xdata() # 'flies'
y = p['fliers'][0].get_ydata()
y.sort() # ,
for i in range(len(x)):
if i>0:
plt.annotate(y[i], xy = (x[i],y[i]), xytext=(x[i]+0.05 -0.8/(y[i]-y[i-1]),y[i]))
else:
plt.annotate(y[i], xy = (x[i],y[i]), xytext=(x[i]+0.08,y[i]))
plt.show() #
プログラムを実行して箱型図pythonを得て箱型図で異常値検出を行う###貢献度分析コード(野菜収益パレート図コード)
#-*- coding: utf-8 -*-
#
from __future__ import print_function
import pandas as pd
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
#
dish_profit = '../data/catering_dish_profit.xls' #
data = pd.read_excel(dish_profit, index_col = u' ')
data = data[u' '].copy()
data.sort_values(ascending=False)
#sorted(data,reverse=True) #
import matplotlib.pyplot as plt #
plt.rcParams['font.sans-serif'] = ['SimHei'] #
plt.rcParams['axes.unicode_minus'] = False #
plt.figure()
data.plot(kind='bar')
plt.ylabel(u' ( )')
p = 1.0*data.cumsum()/data.sum()
p.plot(color = 'r', secondary_y = True, style = '-o',linewidth = 2)
plt.annotate(format(p[6], '.4%'), xy = (6, p[6]), xytext=(6*0.9, p[6]*0.9), arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2")) # , 85% 。 。
plt.ylabel(u' ( )')
plt.show()
##二、データ前処理###データ前処理内容データ洗浄:欠落値処理:異常値処理データ集積データ変換でーた集積データ変換:関数変換かんすうへんかん:正規化(正規化):連続属性離散化(一部のアルゴリズムではデータが分類属性形式であることが要求される):属性構造ぞくせい:ウェーブレット変換ウェーブレットへんかん
###データ洗浄コード(ラグランジュ法による補間)
#coding=utf-8
#
import pandas as pd # Pandas
from scipy.interpolate import lagrange #
pd.options.mode.chained_assignment = None #default='warn'
inputfile = '../data/catering_sale.xls' #
outputfile = '../tmp/sales.xls' #
data = pd.read_excel(inputfile) #
data[u' '][(data[u' '] < 400) | (data[u' '] > 5000)] = None # ,
#data.loc[:,(u' ',)][(data[u' '] < 400) | (data[u' '] > 5000)] = None # ,
#row_indexs=(data[u' ']<400|(data[u' ']>5000))
#data.loc[row_indexs,u' ']=None
#
#s ,n ,k , 5
def ployinterp_column(s, n, k=5):
y = s[list(range(n-k, n)) + list(range(n+1, n+1+k))] #
y = y[y.notnull()] #
return lagrange(y.index, list(y))(n) #
#
for i in data.columns:
for j in range(len(data)):
if (data[i].isnull())[j]: # 。
data[i][j] = ployinterp_column(data[i], j)
#data.loc[j,i]=ployinterp_column(data[i],j)
data.to_excel(outputfile) # ,
Pandasエラー:Setting With Copy Warning pd.options.mode.chained_assignment = None #default='warn'
を追加するか、または「.loc」pandas SettingWithCopyWarningを使用します(このコードの異常値は空ではありません).###データ離散化コード
#-*- coding: utf-8 -*-
#
import pandas as pd
atafile = '../data/discretization_data.xls' #
data = pd.read_excel(datafile) #
data = data[u' '].copy()
k = 4
d1 = pd.cut(data, k, labels = range(k)) # , 0,1,2,3
#
w = [1.0*i/k for i in range(k+1)]
w = data.describe(percentiles = w)[4:4+k+1] # describe
w[0] = w[0]*(1-1e-10)
d2 = pd.cut(data, w, labels = range(k))
from sklearn.cluster import KMeans # KMeans
kmodel = KMeans(n_clusters = k, n_jobs = 4) # ,n_jobs , CPU
kmodel.fit(data.values.reshape((len(data), 1))) #
c = pd.DataFrame(kmodel.cluster_centers_).sort_values(0) # , ( )
w = pd.rolling_mean(c, 2).iloc[1:] # ,
w = [0] + list(w[0]) + [data.max()] #
d3 = pd.cut(data, w, labels = range(k))
def cluster_plot(d, k): #
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] #
plt.rcParams['axes.unicode_minus'] = False #
plt.figure(figsize = (8, 3))
for j in range(0, k):
plt.plot(data[d==j], [j for i in d[d==j]], 'o')
plt.ylim(-0.5, k-0.5)
return plt
cluster_plot(d1, k).show()
cluster_plot(d2, k).show()
cluster_plot(d3, k).show()
kmeans()意味Python-kmeansアルゴリズム学習ノートヒントに従ってerrorとwarning(warningは変更しなくてもよい)reshape is deprecated and will raise in a subsequent releaseを修正する.DataFrameソートsortの問題
#-*- coding: utf-8 -*-
#
import pandas as pd
import numpy as np
#
inputfile = '../data/principal_component.xls'
outputfile = '../tmp/dimention_reducted.xls' #
data = pd.read_excel(inputfile, header = None) #
from sklearn.decomposition import PCA
pca = PCA()
pca.fit(data)
pca.components_ #
pca.explained_variance_ratio_ #
pca=PCA(3)
pca.fit(data)
low_d=pca.transform(data) #
print low_d
#df=pd.DataFrame(low_d)
#print df
#df.to_html('a.html')
pd.DataFrame(low_d).to_html('a.html') # html
#pd.DataFrame(low_d).to_exel(outputfile)
pca.inverse_transform(low_d)
Error:‘DataFrame’ object has no attribute ‘to_Excel'が解決せずhtmlに書き込むDataFrame基本操作pythonでデータ分析4|pandasライブラリ紹介のDataFrame基本操作Pandas dataframeデータ書き込みファイルとデータベース