Twitter API로 얻은 데이터를 CSV 형식으로 저장할 때 개행 코드에주의하십시오.
15489 단어 트위터Python3파이썬TwitterAPICSV
소개
Twitter API 로 취득한 데이터를 CSV 파일에 보존했을 때에, 개행 코드 때문에 고생했기 때문에 메모.
환경
우분투 18.04.2
Anaconda 3 5.3.1
파이썬 3.7
Jupyter Notebook
문제
Twitter API로 얻을 수 있는 데이터 의 중, text
・ full_text
・ user->description
라고 하는 요소는, 유저가 스스로 문장을 입력한 데이터가 되므로, 개행 코드가 포함되는 경우가 있습니다.
개행 코드에는 \n
・ \r
・ \r\n
의 3 종류가 있습니다만 , Twitter 유저가 사용하고 있는 환경에 의해 , 그 종류가 바뀌어 버립니다 (참고 : 개행 코드 일람 ).
예를 들어 트윗의 text 데이터에는
メッセージ\nメッセージ\nメッセージ
メッセージ\rメッセージ\rメッセージ
メッセージ\r\nメッセージ\r\nメッセージ
의 3 종류가 포함됩니다.
그런데 본제.
Twitter API로 취득한 데이터를 pandas의 DataFrame형으로 한 후, CSV 형식으로 파일로서 보존했습니다만, 보존한 파일을 읽어들이면, 데이터의 행수가 증가하고 있거나, 컬럼에 어긋남이 생기고 있어, 보존시의 형태를 전혀 유지하지 않았던 것입니다.
어떻게 하면 예를 들어 다음과 같은 코드를 실행하면,
# 改行コードが\rのとき
import pandas as pd
from IPython.display import display
df = pd.DataFrame([{ 'created_at': '12:00',
'text': 'メッセージ\rメッセージ\rメッセージ',
'tweet_id': 12345,
'user_id': 67890,
}])
display(df) # DataFrameを出力
df.to_csv('test.csv', encoding="utf-8") # CSV形式で保存
df = pd.read_csv('test.csv', index_col=0)
display(df) # 読み込んだCSVデータを出力
결과는 다음과 같습니다. DataFrame(상)은 정상입니다만, 한 번 CSV 형식으로 변환하면 무너지고 있지요(아래).\r
를 경계로 행이 한층 내려가고, 컬럼과 값이 미스매치 하고 있습니다 (인덱스에 값이 들어가 있어 엄청...). 빈 데이터는 모두 NaN
입니다.
분명히, 문제 아이는 개행 코드의 \r
만인 것 같습니다.\n
이나 \r\n
의 경우는, 데이터가 무너지지 않고 저장할 수 있습니다↓
# 改行コードが\nのとき
df = pd.DataFrame([{ 'created_at': '12:00',
'text': 'メッセージ\nメッセージ\nメッセージ',
'tweet_id': 12345,
'user_id': 67890,
}])
display(df) # DataFrameを出力
df.to_csv('test.csv', encoding="utf-8") # CSV形式で保存
df = pd.read_csv('test.csv', index_col=0)
display(df) # 読み込んだCSVデータを出力
# 改行コードが\r\nのとき
df = pd.DataFrame([{ 'created_at': '12:00',
'text': 'メッセージ\r\nメッセージ\r\nメッセージ',
'tweet_id': 12345,
'user_id': 67890,
}])
display(df) # DataFrameを出力
df.to_csv('test.csv', encoding="utf-8") # CSV形式で保存
df = pd.read_csv('test.csv', index_col=0)
display(df) # 読み込んだCSVデータを出力
해결 방법
그 1
\r
를 \n
로 바꿉니다.\r\n
에 포함되는 \r
는 , 치환해 버리면(자) 개행이 1 개 증가해 버리므로 , 주의할 필요가 있습니다.
df = pd.DataFrame([{ 'created_at': '12:00',
'text': 'メッセージ\rメッセージ\rメッセージ',
'tweet_id': 12345,
'user_id': 67890,
}])
display(df) # DataFrameを出力
# \r\nの場合は除いて、\rを\nに置換する
if ('\r' in df['text'][0]) and not ('\r\n' in df['text'][0]):
df['text'][0] = df['text'][0].replace('\r', '\n')
df.to_csv('test.csv', encoding="utf-8") # CSV形式で保存
df = pd.read_csv('test.csv', index_col=0)
display(df) # 読み込んだCSVデータを出力
추가
개행 코드를 전부 \n
에 통일하는 것이 좋을 것 같네요. 다음 코드에서 \r\n
와 \r
를 모두 바꿀 수 있습니다.
대체하는 순서를 잘못하면 \r\n
가 \n\n
가 되어 버리므로 주의합시다.
df['text'][0] = df['text'][0].replace('\r\n', '\n').replace('\r', '\n')
df.to_csv('test.csv', encoding="utf-8") # CSV形式で保存
df = pd.read_csv('test.csv', index_col=0)
display(df) # 読み込んだCSVデータを出力
그 2
pickle 을 사용한다.
df = pd.DataFrame([{ 'created_at': '12:00',
'text': 'メッセージ\nメッセージ\nメッセージ',
'tweet_id': 12345,
'user_id': 67890,
}])
display(df) # DataFrameを出力
df.to_pickle('test.pickle') # pickle形式で保存
df = pd.read_pickle('test.pickle')
display(df) # 読み込んだpickleデータを出力
pickle 파일은 코드로 읽어내지 않는 한 내용을 확인할 수 없다(Excel등으로 열 수가 없다) 때문에, 간단하게 데이터를 확인할 수 있도록 하고 싶다면, \r
를 \n
치환해 CSV 형식 에서 저장하는 방법이 좋다고 생각합니다.
이상
Reference
이 문제에 관하여(Twitter API로 얻은 데이터를 CSV 형식으로 저장할 때 개행 코드에주의하십시오.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/jinto/items/f8b19a8dd989c8bbe76a
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
우분투 18.04.2
Anaconda 3 5.3.1
파이썬 3.7
Jupyter Notebook
문제
Twitter API로 얻을 수 있는 데이터 의 중, text
・ full_text
・ user->description
라고 하는 요소는, 유저가 스스로 문장을 입력한 데이터가 되므로, 개행 코드가 포함되는 경우가 있습니다.
개행 코드에는 \n
・ \r
・ \r\n
의 3 종류가 있습니다만 , Twitter 유저가 사용하고 있는 환경에 의해 , 그 종류가 바뀌어 버립니다 (참고 : 개행 코드 일람 ).
예를 들어 트윗의 text 데이터에는
メッセージ\nメッセージ\nメッセージ
メッセージ\rメッセージ\rメッセージ
メッセージ\r\nメッセージ\r\nメッセージ
의 3 종류가 포함됩니다.
그런데 본제.
Twitter API로 취득한 데이터를 pandas의 DataFrame형으로 한 후, CSV 형식으로 파일로서 보존했습니다만, 보존한 파일을 읽어들이면, 데이터의 행수가 증가하고 있거나, 컬럼에 어긋남이 생기고 있어, 보존시의 형태를 전혀 유지하지 않았던 것입니다.
어떻게 하면 예를 들어 다음과 같은 코드를 실행하면,
# 改行コードが\rのとき
import pandas as pd
from IPython.display import display
df = pd.DataFrame([{ 'created_at': '12:00',
'text': 'メッセージ\rメッセージ\rメッセージ',
'tweet_id': 12345,
'user_id': 67890,
}])
display(df) # DataFrameを出力
df.to_csv('test.csv', encoding="utf-8") # CSV形式で保存
df = pd.read_csv('test.csv', index_col=0)
display(df) # 読み込んだCSVデータを出力
결과는 다음과 같습니다. DataFrame(상)은 정상입니다만, 한 번 CSV 형식으로 변환하면 무너지고 있지요(아래).\r
를 경계로 행이 한층 내려가고, 컬럼과 값이 미스매치 하고 있습니다 (인덱스에 값이 들어가 있어 엄청...). 빈 데이터는 모두 NaN
입니다.
분명히, 문제 아이는 개행 코드의 \r
만인 것 같습니다.\n
이나 \r\n
의 경우는, 데이터가 무너지지 않고 저장할 수 있습니다↓
# 改行コードが\nのとき
df = pd.DataFrame([{ 'created_at': '12:00',
'text': 'メッセージ\nメッセージ\nメッセージ',
'tweet_id': 12345,
'user_id': 67890,
}])
display(df) # DataFrameを出力
df.to_csv('test.csv', encoding="utf-8") # CSV形式で保存
df = pd.read_csv('test.csv', index_col=0)
display(df) # 読み込んだCSVデータを出力
# 改行コードが\r\nのとき
df = pd.DataFrame([{ 'created_at': '12:00',
'text': 'メッセージ\r\nメッセージ\r\nメッセージ',
'tweet_id': 12345,
'user_id': 67890,
}])
display(df) # DataFrameを出力
df.to_csv('test.csv', encoding="utf-8") # CSV形式で保存
df = pd.read_csv('test.csv', index_col=0)
display(df) # 読み込んだCSVデータを出力
해결 방법
그 1
\r
를 \n
로 바꿉니다.\r\n
에 포함되는 \r
는 , 치환해 버리면(자) 개행이 1 개 증가해 버리므로 , 주의할 필요가 있습니다.
df = pd.DataFrame([{ 'created_at': '12:00',
'text': 'メッセージ\rメッセージ\rメッセージ',
'tweet_id': 12345,
'user_id': 67890,
}])
display(df) # DataFrameを出力
# \r\nの場合は除いて、\rを\nに置換する
if ('\r' in df['text'][0]) and not ('\r\n' in df['text'][0]):
df['text'][0] = df['text'][0].replace('\r', '\n')
df.to_csv('test.csv', encoding="utf-8") # CSV形式で保存
df = pd.read_csv('test.csv', index_col=0)
display(df) # 読み込んだCSVデータを出力
추가
개행 코드를 전부 \n
에 통일하는 것이 좋을 것 같네요. 다음 코드에서 \r\n
와 \r
를 모두 바꿀 수 있습니다.
대체하는 순서를 잘못하면 \r\n
가 \n\n
가 되어 버리므로 주의합시다.
df['text'][0] = df['text'][0].replace('\r\n', '\n').replace('\r', '\n')
df.to_csv('test.csv', encoding="utf-8") # CSV形式で保存
df = pd.read_csv('test.csv', index_col=0)
display(df) # 読み込んだCSVデータを出力
그 2
pickle 을 사용한다.
df = pd.DataFrame([{ 'created_at': '12:00',
'text': 'メッセージ\nメッセージ\nメッセージ',
'tweet_id': 12345,
'user_id': 67890,
}])
display(df) # DataFrameを出力
df.to_pickle('test.pickle') # pickle形式で保存
df = pd.read_pickle('test.pickle')
display(df) # 読み込んだpickleデータを出力
pickle 파일은 코드로 읽어내지 않는 한 내용을 확인할 수 없다(Excel등으로 열 수가 없다) 때문에, 간단하게 데이터를 확인할 수 있도록 하고 싶다면, \r
를 \n
치환해 CSV 형식 에서 저장하는 방법이 좋다고 생각합니다.
이상
Reference
이 문제에 관하여(Twitter API로 얻은 데이터를 CSV 형식으로 저장할 때 개행 코드에주의하십시오.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/jinto/items/f8b19a8dd989c8bbe76a
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
メッセージ\nメッセージ\nメッセージ
メッセージ\rメッセージ\rメッセージ
メッセージ\r\nメッセージ\r\nメッセージ
# 改行コードが\rのとき
import pandas as pd
from IPython.display import display
df = pd.DataFrame([{ 'created_at': '12:00',
'text': 'メッセージ\rメッセージ\rメッセージ',
'tweet_id': 12345,
'user_id': 67890,
}])
display(df) # DataFrameを出力
df.to_csv('test.csv', encoding="utf-8") # CSV形式で保存
df = pd.read_csv('test.csv', index_col=0)
display(df) # 読み込んだCSVデータを出力
# 改行コードが\nのとき
df = pd.DataFrame([{ 'created_at': '12:00',
'text': 'メッセージ\nメッセージ\nメッセージ',
'tweet_id': 12345,
'user_id': 67890,
}])
display(df) # DataFrameを出力
df.to_csv('test.csv', encoding="utf-8") # CSV形式で保存
df = pd.read_csv('test.csv', index_col=0)
display(df) # 読み込んだCSVデータを出力
# 改行コードが\r\nのとき
df = pd.DataFrame([{ 'created_at': '12:00',
'text': 'メッセージ\r\nメッセージ\r\nメッセージ',
'tweet_id': 12345,
'user_id': 67890,
}])
display(df) # DataFrameを出力
df.to_csv('test.csv', encoding="utf-8") # CSV形式で保存
df = pd.read_csv('test.csv', index_col=0)
display(df) # 読み込んだCSVデータを出力
그 1
\r
를 \n
로 바꿉니다.\r\n
에 포함되는 \r
는 , 치환해 버리면(자) 개행이 1 개 증가해 버리므로 , 주의할 필요가 있습니다.df = pd.DataFrame([{ 'created_at': '12:00',
'text': 'メッセージ\rメッセージ\rメッセージ',
'tweet_id': 12345,
'user_id': 67890,
}])
display(df) # DataFrameを出力
# \r\nの場合は除いて、\rを\nに置換する
if ('\r' in df['text'][0]) and not ('\r\n' in df['text'][0]):
df['text'][0] = df['text'][0].replace('\r', '\n')
df.to_csv('test.csv', encoding="utf-8") # CSV形式で保存
df = pd.read_csv('test.csv', index_col=0)
display(df) # 読み込んだCSVデータを出力
추가
개행 코드를 전부
\n
에 통일하는 것이 좋을 것 같네요. 다음 코드에서 \r\n
와 \r
를 모두 바꿀 수 있습니다.대체하는 순서를 잘못하면
\r\n
가 \n\n
가 되어 버리므로 주의합시다.df['text'][0] = df['text'][0].replace('\r\n', '\n').replace('\r', '\n')
df.to_csv('test.csv', encoding="utf-8") # CSV形式で保存
df = pd.read_csv('test.csv', index_col=0)
display(df) # 読み込んだCSVデータを出力
그 2
pickle 을 사용한다.
df = pd.DataFrame([{ 'created_at': '12:00',
'text': 'メッセージ\nメッセージ\nメッセージ',
'tweet_id': 12345,
'user_id': 67890,
}])
display(df) # DataFrameを出力
df.to_pickle('test.pickle') # pickle形式で保存
df = pd.read_pickle('test.pickle')
display(df) # 読み込んだpickleデータを出力
pickle 파일은 코드로 읽어내지 않는 한 내용을 확인할 수 없다(Excel등으로 열 수가 없다) 때문에, 간단하게 데이터를 확인할 수 있도록 하고 싶다면,
\r
를 \n
치환해 CSV 형식 에서 저장하는 방법이 좋다고 생각합니다.이상
Reference
이 문제에 관하여(Twitter API로 얻은 데이터를 CSV 형식으로 저장할 때 개행 코드에주의하십시오.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/jinto/items/f8b19a8dd989c8bbe76a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)