python大資料工作流程

2021-09-22 17:19:36 字數 3780 閱讀 9020

大資料分析,記憶體不夠用怎麼辦?

當然,你可以公升級你的電腦為超級電腦。

另外,你也可以採用硬碟操作。

本文示範了硬碟操作的一種可能的方式。

本人電腦配置:4g記憶體

說明:

資料大小:5.6g

資料描述:自2023年以來,紐約的311投訴

資料**:紐約開放資料官網(nyc's open data portal)

import

pandas as pd

import

time

'''python大資料分析工作流程

'''#

5g大資料檔案,csv格式

reader = pd.read_csv('

311_service_requests_from_2010_to_present.csv

', iterator=true, encoding='

utf-8')

#hdf5格式檔案支援硬碟操作,不需要全部讀入記憶體

store = pd.hdfstore('

311_service_requests_from_2010_to_present.h5')

#然後用迭代的方式轉換.csv格式為.h5格式

chunksize = 100000i =0

while

true:

try:

start =time.clock()

#從csv檔案迭代讀取

df =reader.get_chunk(chunksize)

#去除列名中的空格

df = df.rename(columns=)

#轉換為日期時間格式

df['

createddate

'] = pd.to_datetime(df['

createddate'])

df['closeddate

'] = pd.to_datetime(df['

closeddate'])

#感興趣的列

columns = ['

agency

', '

createddate

', '

closeddate

', '

complainttype',

'descriptor

', '

timetocompletion

', '

city']

#不感興趣的列

columns_for_drop = list(set(df.columns) -set(columns))

df.drop(columns_for_drop, inplace=true, axis=1, errors='

ignore')

#轉到h5檔案

#通過指定data_columns,建立額外的索引器,可提公升查詢速度

df', df, data_columns = ['

complainttype

', '

descriptor

', '

agency'])

#計時i += 1end =time.clock()

print('

{} 秒: completed {} rows

'.format(end - start, i *chunksize))

except

stopiteration:

print("

iteration is stopped.")

break

#轉換完成之後,就可以選出想要進行資料分析的行,將其從硬碟匯入到記憶體,如:

#匯入前三行

#store.select('df', "index<3")

#匯入 complainttype, descriptor, agency這三列的前十行

#store.select('df', "index<10 & columns=['complainttype', 'descriptor', 'agency']")

#匯入 complainttype, descriptor, agency這三列中滿足agency=='nypd'的前十行

#store.select('df', "columns=['complainttype', 'descriptor', 'agency'] & agency=='nypd'").head(10)

#匯入 complainttype, descriptor, agency這三列中滿足agency in ('nypd', 'dob')的前十行

#store.select('df', "columns=['complainttype', 'descriptor', 'agency'] & agency in ('nypd', 'dob')")[:10]

#***********************************===

#下面示範乙個groupby操作

#說明:由於資料太大,遠超記憶體。因此無法全部匯入記憶體。

#***********************************===

#硬碟操作:匯入所有的 city 名稱

cities = store.select_column('

df','

city

').unique()

print("

\ngroups:%s

" %cities)

#迴圈讀取 city

groups =

for city in

cities:

#硬碟操作:按city名稱選取

group = store.select('

df', '

city=%s

' %city)

#這裡進行你想要的資料處理

complainttype

', '

descriptor

', '

agency

']].sum())

print("

\nresult:\n%s

" % pd.concat(groups, keys =cities))

#最後,記得關閉

store.close()

附:執行過程**現了乙個錯誤

把上面的:

#

轉到h5檔案

#通過指定data_columns,建立額外的索引器

df', df, data_columns = ['

complainttype

', '

descriptor

', '

agency

'])

改為:

#

轉到h5檔案

#通過指定data_columns,建立額外的索引器

#通過指定min_itemsize,設定儲存混合型別長度

df', df, data_columns = ['

complainttype

', '

descriptor

', '

agency

'], min_itemsize = )

關於min_itemsize詳情,見:

參考:

python大資料工作流程

大資料分析,記憶體不夠用怎麼辦?當然,你可以公升級你的電腦為超級電腦。另外,你也可以採用硬碟操作。本文示範了硬碟操作的一種可能的方式。本人電腦配置 4g記憶體 說明 資料大小 5.6g 資料描述 自2010年以來,紐約的311投訴 資料 紐約開放資料官網 nyc s open data portal...

Struts工作流程

文章分類 招聘求職 乙個使用者的請求是通actionservlet來處理和 的。那麼,actionservlet如何決定把使用者請求 給哪個action物件呢?這就需要一些描述使用者請求路徑和action衍射關係的配置資訊了。在struts中,這些配置對映資訊都儲存在特定的xml檔案struts c...

zf工作流程

zend controller是使用mvc模式來構建乙個站點的基礎。zend controller體系是乙個輕量的,模組化和可擴充套件的體系。它只提供最核心的必要的部分,允許開發者有很大的自由來靈活地構建自己的站點。使用zend controller的站點,其檔案組織和 結構會比較相似。zend c...