大資料分析,記憶體不夠用怎麼辦?
當然,你可以公升級你的電腦為超級電腦。
另外,你也可以採用硬碟操作。
本文示範了硬碟操作的一種可能的方式。
本人電腦配置: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
'])
#關於min_itemsize詳情,見:轉到h5檔案
#通過指定data_columns,建立額外的索引器
#通過指定min_itemsize,設定儲存混合型別長度
df', df, data_columns = ['
complainttype
', '
descriptor
', '
agency
'], 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...