데이터 프레임으로 목록 추가하기
28539 단어 machinelearningdatasciencepython
수집과 이해를 초월하다
며칠 전에 나는 한 편의 댓글을 써서 수집과 이해의 사용량을 총결하였다.데이터는
lists
(dictionaries
또는 tuples
목록)의 형식으로 제공된다.저자는 데이터에 대한 질문에 대답하기 위해 list comprehensions
을 자주 사용한다. for로 목록을 순환한다.나는 이것이 매우 파이톤을 중심으로 문제를 해결하는 방법이라고 생각하기 시작했다.모든 데이터가 표 데이터는 아니지만, 우리는 더 많은 상황에서 표 데이터와 유사한 표 데이터를 처리할 것이라고 가정할 이유가 있다. (주의: 나는 이곳의 다른 관점에 대해 개방적인 태도를 가지고 있으니, 언제든지 아래에서 평론을 발표하십시오.)
어떤 상황에서도 나는 이치에게 물어볼 것이다.
How would I approach the same problem using data frames?
이것이 바로 본문의 주제다.
너는 상하문에서 그것들을 인용할 수 있다.그리고 이것은 Joel Grus의 책과 약간 다르다는 것을 기억해 주십시오. (예를 들어 저는 여기에서 pandas을 사용하고, 여기서 jupyter notebook을 사용하며, 이 두 판본은 모두 이 책에 소개되지 않았습니다.)
다음은 귀하가 데이터 과학자로서 새로 초빙한 데이터로 참고할 수 있는 자료입니다.™
# users in the network
# stored as a list of dictionaries
users = [
{"id": 0, "name": "Hero"},
{"id": 1, "name": "Dunn"},
{"id": 2, "name": "Sue"},
{"id": 3, "name": "Chi"},
{"id": 4, "name": "Thor"},
{"id": 5, "name": "Clive"},
{"id": 6, "name": "Hicks"},
{"id": 7, "name": "Devin"},
{"id": 8, "name": "Kate"},
{"id": 9, "name": "Klein"}
]
# friendship pairings in the network
# stored as a list of tuples
friendship_pairs = [(0,1), (0,2), (1,2), (1,3), (2,3), (3,4),
(4,5), (5,6), (5,7), (6,8), (7,8), (8,9)]
# interests data
# stored as another list of tuples
interests = [
(0, "Hadoop"), (0, "Big Data"), (0, "HBase"), (0, "Java"),
(0, "Spark"), (0, "Storm"), (0, "Cassandra"),
(1, "NoSQL"), (1, "MongoDB"), (1, "Cassandra"), (1, "HBase"),
(1, "Postgres"), (2, "Python"), (2, "scikit-learn"), (2, "scipy"),
(2, "numpy"), (2, "statsmodels"), (2, "pandas"), (3, "R"), (3, "Python"),
(3, "statistics"), (3, "regression"), (3, "probability"),
(4, "machine learning"), (4, "regression"), (4, "decision trees"),
(4, "libsvm"), (5, "Python"), (5, "R"), (5, "Java"), (5, "C++"),
(5, "Haskell"), (5, "programming langauges"), (6, "statistics"),
(6, "probability"), (6, "mathematics"), (6, "theory"),
(7, "machine learning"), (7, "scikit-learn"), (7, "Mahout"),
(7, "neural networks"), (8, "neural networks"), (8, "deep learning"),
(8, "Big Data"), (8, "artificial intelligence"), (9, "Hadoop"),
(9, "Java"), (9, "MapReduce"), (9, "Big Data")
]
이러한 데이터를 감안하여 우리는 함수를 만들고 for 순환과 목록 이해를 사용하여 다음과 같은 문제에 대답할 수 있다.먼저
users
을 데이터 프레임으로 저장했습니다.import pandas as pd
# convert list of dict into dataframe
users_df = pd.DataFrame(users)
users_df
시각적으로만 보면 data frame
은 list of dictionaries
과 달라 보입니다.당신의 이정수는 다를 수 있지만, 목록과 데이터 상자를 볼 때, 나는 데이터에 대한 이해가 매우 다르다.행과 열은 데이터에 대한 나의 견해에 뿌리가 깊다.
그 다음에 우리는 우의를 대표하는
list of tuples
을 얻었다. 우리는 dictionary
을 사용하여 이를 dictionary comprehension
으로 전환했다.# list of tuples
friendship_pairs = [(0,1), (0,2), (1,2), (1,3), (2,3), (3,4),
(4,5), (5,6), (5,7), (6,8), (7,8), (8,9)]
# create a dict, where keys are users id,
# dictionary comprehension
friendships = {user["id"]: [] for user in users}
for i, j in friendship_pairs:
friendships[i].append(j)
friendships[j].append(i)
앞의 예와 유사하게 데이터를 data frame
으로 보는 것과 dictionary
으로 보는 것이 다르다는 것을 알 수 있습니다.이 점에서부터 저는 pandas에서 몇 가지 조작을 해서 앞의 두 표를 연결했습니다. 이렇게 해서 저는 사용자 id, 사용자 이름과 그들의 첫 번째, 두 번째 또는 세 번째 친구의 id를 포함했습니다. (어떤 경우 이 네트워크에 있는 사람은 최대 세 개의 직접 연결이 있습니다).
구체적인 pandas 동작을 알고 싶으면 다음은 코드입니다.
# The users_df is fine as is with two columns: id and name (see above)
# We'll transform the friendships_df
# reset_index allows us to add an index column
friendships_df.reset_index(inplace=True)
# add index column
friendships_df = friendships_df.rename(columns = {"id":"new column name"})
# change index column to 'id'
friendships_df = friendships_df.rename(columns = {'index':'id'})
# join with users_df so we get each person's name
users_friendships = pd.merge(users_df, friendships_df, on='id')
users_df
과 friendships_df
에 가입하면 다음과 같습니다.우리는
users
과 friendships
의 데이터를 가지고 있기 때문에, 우리는 함수를 만들어서 우리가 '사용자마다 몇 명의 친구가 있습니까?' 라고 대답하는 것을 도울 수 있다.또한 list comprehension
을 생성하여 user
에서 각 users
을 순환해야 합니다.# function to count how many friend each user has
def number_of_friends(user):
"""How many friends does _user_ have?"""
user_id = user["id"]
friend_ids = friendships[user_id]
return len(friend_ids)
# list comprehension to apply the function for each user
num_friends_by_id = [(user["id"], number_of_friends(user)) for user in users]
# this gives us a list of tuples
num_friends_by_id
[(0, 2),
(1, 3),
(2, 3),
(3, 3),
(4, 2),
(5, 3),
(6, 2),
(7, 2),
(8, 3),
(9, 1)]
마찬가지로 데이터는 list of tuples
과 data frame
이 다르므로 계속해서 판다 데이터 프레임으로 변환해 보겠습니다.# when converting to data frame, we can set the name of the columns to id and num_friends; this sets us up for another join
num_friends_by_id = pd.DataFrame(num_friends_by_id, columns = ['id', 'num_friends'])
"id"열이 있기 때문에 이전에 만든 users_friendships
데이터 프레임과 연결할 수 있습니다.users_friendships
함수를 merge
에 연결하면 다음과 같은 효과를 얻을 수 있습니다(users_friendships2
).지금 너는 이미 이 과정에 익숙해졌다.우리는 보통
list
또는 dictionaries
중의 tuples
을 집합하여 data frame
으로 바꾸기를 희망한다.우리는
interests
변수에 대해 이 과정을 반복할 것이다. 이것은 긴 list of tuples
이다. (위의 글 참조)우리는 데이터 프레임으로 변환한 다음에 users_friendships_2
을 추가하여 더 긴 데이터 프레임을 얻을 것이다. 그 중에서 interests
은 한 열(주의: 그림은 빈칸으로 잘라진다):pandas의 장점은 모든 데이터를 하나의 데이터 상자에 연결하면 데이터를 조회할 수 있다는 것이다.
예를 들어 모든 사용자가'빅데이터'에 관심이 있는 것을 보고 싶을 수도 있습니다.
그 전에
list comprehension
을 반환하는 함수를 만들어야 합니다.def data_scientists_who_like(target_interest):
"""Find the ids of all users who like the target interests."""
return [user_id
for user_id, user_interest in interests
if user_interest == target_interest]
data_scientists_who_like("Big Data")
데이터 상자의 또 다른 장점은 여러 조건에서 열을 조회할 수 있다는 점이다. 다음은 두 가지 방법으로 여러 주제를 조회할 수 있다.
# Option One: Use .query()
user_friendship_topics.query('topic == "machine learning" | topic == "regression" | topic == "decision trees" | topic == "libsvm"')
# Option Two: Use .isin()
user_friendship_topics[user_friendship_topics['topic'].isin(["machine learning", "regression", "decision trees", "libsvm"])]
두 옵션 모두 이 데이터 프레임을 반환합니다.데이터 프레임 조회를 통해 알 수 있는 것은 다음과 같습니다.
num_friends
이 네트워크에서 가장 인기 있는 주제를 찾을 수도 있습니다.# groupby topic, tally(count), then reset_index(), then sort
user_friendship_topics.groupby(['topic']).count().reset_index().sort_values('id', ascending=False)
groupby
두 열(이름과 주제)을 사용하여 각 사용자가 나열한 관심 주제를 볼 수도 있습니다.user_friendship_topics.groupby(['name', 'topic']).count()
데이터 프레임이 파이톤에서 더 익숙한 조작(예를 들어 순환과/또는 목록 이해)의 강력한 보충이라고 확신하시기 바랍니다.이 두 가지 방법은 모두 각종 형식으로 데이터를 조작하기 위해 깊이 이해할 만한 가치가 있다.(예를 들어 JSON 데이터에 접근하기 위해 파이썬 사전은 데이터 프레임에 ideal이다).
Reference
이 문제에 관하여(데이터 프레임으로 목록 추가하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/paulapivat/supplementing-lists-with-data-frames-1koj텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)